diff --git a/api/client/client.go b/api/client/client.go index 2a27fefa2f501..5e2fd3f4e2993 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -47,6 +47,7 @@ import ( "github.com/gravitational/teleport/api/client/externalcloudaudit" "github.com/gravitational/teleport/api/client/okta" "github.com/gravitational/teleport/api/client/proto" + "github.com/gravitational/teleport/api/client/secreport" "github.com/gravitational/teleport/api/client/userloginstate" "github.com/gravitational/teleport/api/constants" "github.com/gravitational/teleport/api/defaults" @@ -63,6 +64,7 @@ import ( pluginspb "github.com/gravitational/teleport/api/gen/proto/go/teleport/plugins/v1" resourceusagepb "github.com/gravitational/teleport/api/gen/proto/go/teleport/resourceusage/v1" samlidppb "github.com/gravitational/teleport/api/gen/proto/go/teleport/samlidp/v1" + secreportsv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/secreports/v1" trustpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/trust/v1" userloginstatev1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/userloginstate/v1" userpreferencespb "github.com/gravitational/teleport/api/gen/proto/go/userpreferences/v1" @@ -787,6 +789,11 @@ func (c *Client) LoginRuleClient() loginrulepb.LoginRuleServiceClient { return loginrulepb.NewLoginRuleServiceClient(c.conn) } +// SecReportsClient returns Security client that can be used to fetch security reports. +func (c *Client) SecReportsClient() *secreport.Client { + return secreport.NewClient(secreportsv1.NewSecReportsServiceClient(c.conn)) +} + // SAMLIdPClient returns an unadorned SAML IdP client, using the underlying // Auth gRPC connection. // Clients connecting to non-Enterprise clusters, or older Teleport versions, diff --git a/api/client/events.go b/api/client/events.go index c5acd2980988d..3765b5966f8b5 100644 --- a/api/client/events.go +++ b/api/client/events.go @@ -25,6 +25,8 @@ import ( discoveryconfigv1conv "github.com/gravitational/teleport/api/types/discoveryconfig/convert/v1" "github.com/gravitational/teleport/api/types/externalcloudaudit" externalcloudauditv1conv "github.com/gravitational/teleport/api/types/externalcloudaudit/convert/v1" + "github.com/gravitational/teleport/api/types/secreports" + secreprotsv1conv "github.com/gravitational/teleport/api/types/secreports/convert/v1" "github.com/gravitational/teleport/api/types/userloginstate" userloginstatev1conv "github.com/gravitational/teleport/api/types/userloginstate/convert/v1" ) @@ -238,6 +240,18 @@ func EventToGRPC(in types.Event) (*proto.Event, error) { out.Resource = &proto.Event_DiscoveryConfig{ DiscoveryConfig: discoveryconfigv1conv.ToProto(r), } + case *secreports.AuditQuery: + out.Resource = &proto.Event_AuditQuery{ + AuditQuery: secreprotsv1conv.ToProtoAuditQuery(r), + } + case *secreports.Report: + out.Resource = &proto.Event_Report{ + Report: secreprotsv1conv.ToProtoReport(r), + } + case *secreports.ReportState: + out.Resource = &proto.Event_ReportState{ + ReportState: secreprotsv1conv.ToProtoReportState(r), + } default: return nil, trace.BadParameter("resource type %T is not supported", in.Resource) } @@ -417,6 +431,24 @@ func EventFromGRPC(in *proto.Event) (*types.Event, error) { return nil, trace.Wrap(err) } return &out, nil + } else if r := in.GetAuditQuery(); r != nil { + out.Resource, err = secreprotsv1conv.FromProtoAuditQuery(r) + if err != nil { + return nil, trace.Wrap(err) + } + return &out, nil + } else if r := in.GetReport(); r != nil { + out.Resource, err = secreprotsv1conv.FromProtoReport(r) + if err != nil { + return nil, trace.Wrap(err) + } + return &out, nil + } else if r := in.GetReportState(); r != nil { + out.Resource, err = secreprotsv1conv.FromProtoReportState(r) + if err != nil { + return nil, trace.Wrap(err) + } + return &out, nil } else { return nil, trace.BadParameter("received unsupported resource %T", in.Resource) } diff --git a/api/client/proto/event.pb.go b/api/client/proto/event.pb.go index 7af3ba9a20544..308942faccb43 100644 --- a/api/client/proto/event.pb.go +++ b/api/client/proto/event.pb.go @@ -24,6 +24,7 @@ import ( v1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accesslist/v1" v12 "github.com/gravitational/teleport/api/gen/proto/go/teleport/discoveryconfig/v1" v13 "github.com/gravitational/teleport/api/gen/proto/go/teleport/externalcloudaudit/v1" + v14 "github.com/gravitational/teleport/api/gen/proto/go/teleport/secreports/v1" v11 "github.com/gravitational/teleport/api/gen/proto/go/teleport/userloginstate/v1" types "github.com/gravitational/teleport/api/types" protoreflect "google.golang.org/protobuf/reflect/protoreflect" @@ -152,6 +153,9 @@ type Event struct { // *Event_AccessListMember // *Event_DiscoveryConfig // *Event_ExternalCloudAudit + // *Event_AuditQuery + // *Event_Report + // *Event_ReportState Resource isEvent_Resource `protobuf_oneof:"Resource"` } @@ -530,6 +534,27 @@ func (x *Event) GetExternalCloudAudit() *v13.ExternalCloudAudit { return nil } +func (x *Event) GetAuditQuery() *v14.AuditQuery { + if x, ok := x.GetResource().(*Event_AuditQuery); ok { + return x.AuditQuery + } + return nil +} + +func (x *Event) GetReport() *v14.Report { + if x, ok := x.GetResource().(*Event_Report); ok { + return x.Report + } + return nil +} + +func (x *Event) GetReportState() *v14.ReportState { + if x, ok := x.GetResource().(*Event_ReportState); ok { + return x.ReportState + } + return nil +} + type isEvent_Resource interface { isEvent_Resource() } @@ -771,6 +796,21 @@ type Event_ExternalCloudAudit struct { ExternalCloudAudit *v13.ExternalCloudAudit `protobuf:"bytes,49,opt,name=ExternalCloudAudit,proto3,oneof"` } +type Event_AuditQuery struct { + // AuditQuery is an audit query resource. + AuditQuery *v14.AuditQuery `protobuf:"bytes,50,opt,name=AuditQuery,proto3,oneof"` +} + +type Event_Report struct { + // SecurityReport is a security report resource. + Report *v14.Report `protobuf:"bytes,51,opt,name=Report,proto3,oneof"` +} + +type Event_ReportState struct { + // SecurityReportState is a security report state resource. + ReportState *v14.ReportState `protobuf:"bytes,52,opt,name=ReportState,proto3,oneof"` +} + func (*Event_ResourceHeader) isEvent_Resource() {} func (*Event_CertAuthority) isEvent_Resource() {} @@ -865,6 +905,12 @@ func (*Event_DiscoveryConfig) isEvent_Resource() {} func (*Event_ExternalCloudAudit) isEvent_Resource() {} +func (*Event_AuditQuery) isEvent_Resource() {} + +func (*Event_Report) isEvent_Resource() {} + +func (*Event_ReportState) isEvent_Resource() {} + var File_teleport_legacy_client_proto_event_proto protoreflect.FileDescriptor var file_teleport_legacy_client_proto_event_proto_rawDesc = []byte{ @@ -882,213 +928,228 @@ var file_teleport_legacy_client_proto_event_proto_rawDesc = []byte{ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbe, 0x18, 0x0a, 0x05, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3f, 0x0a, 0x0e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x0d, 0x43, - 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x56, 0x32, 0x48, 0x00, 0x52, 0x0d, 0x43, 0x65, - 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x0c, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x63, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x56, 0x32, 0x48, 0x00, 0x52, 0x0c, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x63, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x0e, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x38, 0x0a, 0x0b, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x32, 0x48, 0x00, 0x52, 0x0b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x56, 0x32, 0x48, 0x00, 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x04, 0x52, 0x6f, - 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x36, 0x48, 0x00, 0x52, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, - 0x30, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x29, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x56, 0x32, 0x48, 0x00, 0x52, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x0d, - 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x76, 0x65, - 0x72, 0x73, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x56, 0x32, 0x48, 0x00, 0x52, 0x0d, 0x52, - 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x47, 0x0a, 0x10, - 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x54, - 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, - 0x32, 0x48, 0x00, 0x52, 0x10, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x56, 0x33, 0x48, 0x00, 0x52, 0x0d, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x57, 0x65, 0x62, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, - 0x52, 0x0a, 0x41, 0x70, 0x70, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x0d, - 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x33, 0x48, 0x00, 0x52, 0x0d, 0x52, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x0e, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x33, 0x48, 0x00, 0x52, - 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, - 0x35, 0x0a, 0x0a, 0x57, 0x65, 0x62, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x65, 0x62, 0x53, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x0a, 0x57, 0x65, 0x62, 0x53, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x57, 0x65, 0x62, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x33, 0x48, 0x00, 0x52, 0x08, 0x57, - 0x65, 0x62, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x17, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x17, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x59, 0x0a, 0x16, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x16, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x41, 0x0a, 0x0e, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x56, - 0x32, 0x48, 0x00, 0x52, 0x0e, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x12, 0x4d, 0x0a, 0x12, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x75, - 0x64, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x75, 0x64, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x12, + 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x75, 0x73, 0x65, + 0x72, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x75, + 0x73, 0x65, 0x72, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x87, 0x1a, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x3f, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x48, 0x00, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x0d, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x56, 0x32, 0x48, 0x00, 0x52, 0x0d, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x56, + 0x32, 0x48, 0x00, 0x52, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x12, 0x41, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x56, 0x32, 0x48, 0x00, 0x52, 0x0e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x38, 0x0a, 0x0b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x32, 0x48, + 0x00, 0x52, 0x0b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, + 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x32, 0x48, 0x00, 0x52, 0x04, 0x55, + 0x73, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x36, + 0x48, 0x00, 0x52, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x48, 0x00, 0x52, + 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x32, 0x48, 0x00, 0x52, 0x06, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x0d, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, + 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x54, 0x75, 0x6e, 0x6e, + 0x65, 0x6c, 0x56, 0x32, 0x48, 0x00, 0x52, 0x0d, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x54, + 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x47, 0x0a, 0x10, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x10, 0x54, 0x75, + 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, + 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x56, 0x33, 0x48, 0x00, 0x52, + 0x0d, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, + 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x65, 0x62, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x0a, 0x41, 0x70, 0x70, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x56, 0x33, 0x48, 0x00, 0x52, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x56, 0x33, 0x48, 0x00, 0x52, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x0a, 0x57, 0x65, 0x62, 0x53, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x65, 0x62, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x56, + 0x32, 0x48, 0x00, 0x52, 0x0a, 0x57, 0x65, 0x62, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x2f, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x65, 0x62, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x56, 0x33, 0x48, 0x00, 0x52, 0x08, 0x57, 0x65, 0x62, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x5c, 0x0a, 0x17, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x17, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x59, + 0x0a, 0x16, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x32, 0x48, + 0x00, 0x52, 0x16, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x41, 0x0a, 0x0e, 0x41, 0x75, 0x74, + 0x68, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x56, 0x32, 0x48, 0x00, 0x52, 0x0e, 0x41, 0x75, + 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x4d, 0x0a, 0x12, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x75, 0x64, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x23, 0x0a, 0x04, 0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x48, - 0x00, 0x52, 0x04, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x50, 0x0a, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x19, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x56, 0x34, 0x48, 0x00, 0x52, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, - 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x56, 0x0a, 0x15, 0x57, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x73, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x56, 0x33, 0x48, 0x00, 0x52, 0x15, 0x57, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x73, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x44, 0x65, 0x73, 0x6b, - 0x74, 0x6f, 0x70, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, - 0x56, 0x33, 0x48, 0x00, 0x52, 0x0e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x44, 0x65, 0x73, - 0x6b, 0x74, 0x6f, 0x70, 0x12, 0x2f, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x56, 0x33, 0x48, 0x00, 0x52, 0x08, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x33, 0x48, 0x00, 0x52, 0x09, - 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x03, 0x41, 0x70, 0x70, - 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, - 0x70, 0x70, 0x56, 0x33, 0x48, 0x00, 0x52, 0x03, 0x41, 0x70, 0x70, 0x12, 0x41, 0x0a, 0x10, 0x53, - 0x6e, 0x6f, 0x77, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x65, - 0x62, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x10, 0x53, 0x6e, - 0x6f, 0x77, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, - 0x0a, 0x10, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x56, 0x33, 0x48, 0x00, 0x52, 0x10, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, - 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x11, 0x4b, 0x75, 0x62, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x21, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x33, 0x48, 0x00, - 0x52, 0x11, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x09, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x56, 0x31, 0x48, 0x00, 0x52, 0x09, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x56, 0x31, 0x48, 0x00, 0x52, 0x0f, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x59, 0x0a, - 0x16, 0x53, 0x41, 0x4d, 0x4c, 0x49, 0x64, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x41, 0x4d, 0x4c, 0x49, 0x64, 0x50, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x56, 0x31, 0x48, 0x00, - 0x52, 0x16, 0x53, 0x41, 0x4d, 0x4c, 0x49, 0x64, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x0e, 0x53, 0x41, 0x4d, 0x4c, - 0x49, 0x64, 0x50, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x65, 0x62, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x0e, 0x53, 0x41, 0x4d, 0x4c, 0x49, 0x64, 0x50, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x31, 0x48, 0x00, - 0x52, 0x09, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2f, 0x0a, 0x08, 0x55, - 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, - 0x48, 0x00, 0x52, 0x08, 0x55, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x41, 0x0a, 0x0e, - 0x4f, 0x6b, 0x74, 0x61, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x18, 0x28, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4f, 0x6b, 0x74, - 0x61, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x56, 0x31, 0x48, 0x00, 0x52, - 0x0e, 0x4f, 0x6b, 0x74, 0x61, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x12, - 0x41, 0x0a, 0x0e, 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, - 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x31, - 0x48, 0x00, 0x52, 0x0e, 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x48, 0x00, 0x52, - 0x0b, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0b, - 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x2b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x31, 0x48, 0x00, 0x52, 0x0b, 0x57, 0x61, 0x74, 0x63, 0x68, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x57, 0x0a, 0x16, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, - 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, - 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x16, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, - 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x44, 0x0a, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x2d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x6c, 0x6f, 0x67, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x55, 0x73, 0x65, - 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x48, 0x00, 0x52, 0x10, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x58, 0x0a, 0x0f, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x30, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x64, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x48, 0x00, 0x52, 0x0f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x64, 0x0a, 0x12, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x75, 0x64, 0x69, 0x74, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x75, - 0x64, 0x69, 0x74, 0x48, 0x00, 0x52, 0x12, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x75, 0x64, 0x69, 0x74, 0x42, 0x0a, 0x0a, 0x08, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x2a, 0x2a, 0x0a, 0x09, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x49, 0x54, - 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x55, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, - 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x02, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x75, 0x64, 0x69, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x12, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x41, 0x75, 0x64, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x04, 0x4c, + 0x6f, 0x63, 0x6b, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x48, 0x00, 0x52, 0x04, 0x4c, 0x6f, 0x63, 0x6b, + 0x12, 0x50, 0x0a, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x74, 0x72, + 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, + 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x34, 0x48, 0x00, 0x52, 0x13, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x56, 0x0a, 0x15, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x44, 0x65, 0x73, + 0x6b, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x73, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x56, + 0x33, 0x48, 0x00, 0x52, 0x15, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x44, 0x65, 0x73, 0x6b, + 0x74, 0x6f, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x57, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x18, 0x1b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x73, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x56, 0x33, 0x48, 0x00, 0x52, 0x0e, 0x57, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x12, 0x2f, 0x0a, + 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x56, 0x33, 0x48, 0x00, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x09, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x1d, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x56, 0x33, 0x48, 0x00, 0x52, 0x09, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x12, 0x20, 0x0a, 0x03, 0x41, 0x70, 0x70, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x33, 0x48, 0x00, 0x52, + 0x03, 0x41, 0x70, 0x70, 0x12, 0x41, 0x0a, 0x10, 0x53, 0x6e, 0x6f, 0x77, 0x66, 0x6c, 0x61, 0x6b, + 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x65, 0x62, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x10, 0x53, 0x6e, 0x6f, 0x77, 0x66, 0x6c, 0x61, 0x6b, 0x65, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x10, 0x4b, 0x75, 0x62, 0x65, 0x72, + 0x6e, 0x65, 0x74, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x20, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, + 0x65, 0x74, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x33, 0x48, 0x00, 0x52, 0x10, + 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x12, 0x4a, 0x0a, 0x11, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x33, 0x48, 0x00, 0x52, 0x11, 0x4b, 0x75, 0x62, 0x65, 0x72, + 0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x09, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, + 0x72, 0x56, 0x31, 0x48, 0x00, 0x52, 0x09, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x72, + 0x12, 0x44, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x56, 0x31, 0x48, 0x00, 0x52, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x59, 0x0a, 0x16, 0x53, 0x41, 0x4d, 0x4c, 0x49, 0x64, + 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, + 0x41, 0x4d, 0x4c, 0x49, 0x64, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x56, 0x31, 0x48, 0x00, 0x52, 0x16, 0x53, 0x41, 0x4d, 0x4c, 0x49, + 0x64, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x12, 0x3d, 0x0a, 0x0e, 0x53, 0x41, 0x4d, 0x4c, 0x49, 0x64, 0x50, 0x53, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x57, 0x65, 0x62, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, + 0x52, 0x0e, 0x53, 0x41, 0x4d, 0x4c, 0x49, 0x64, 0x50, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x32, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x26, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x31, 0x48, 0x00, 0x52, 0x09, 0x55, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2f, 0x0a, 0x08, 0x55, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, + 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x48, 0x00, 0x52, 0x08, 0x55, 0x49, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x41, 0x0a, 0x0e, 0x4f, 0x6b, 0x74, 0x61, 0x49, 0x6d, 0x70, + 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4f, 0x6b, 0x74, 0x61, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x52, 0x75, 0x6c, 0x65, 0x56, 0x31, 0x48, 0x00, 0x52, 0x0e, 0x4f, 0x6b, 0x74, 0x61, 0x49, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x4f, 0x6b, 0x74, 0x61, + 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x73, 0x73, + 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x31, 0x48, 0x00, 0x52, 0x0e, 0x4f, 0x6b, 0x74, + 0x61, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x48, 0x00, 0x52, 0x0b, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x31, + 0x48, 0x00, 0x52, 0x0b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x57, 0x0a, 0x16, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x16, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, + 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0a, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x48, 0x00, 0x52, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x54, + 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x48, 0x00, + 0x52, 0x10, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x58, 0x0a, 0x0f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x0f, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x64, 0x0a, 0x12, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x75, 0x64, + 0x69, 0x74, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x75, 0x64, 0x69, 0x74, 0x48, 0x00, 0x52, 0x12, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x75, 0x64, + 0x69, 0x74, 0x12, 0x44, 0x0a, 0x0a, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x41, 0x75, + 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x48, 0x00, 0x52, 0x06, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x12, 0x47, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x2a, 0x2a, 0x0a, + 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, + 0x49, 0x54, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x55, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, + 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x02, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1152,6 +1213,9 @@ var file_teleport_legacy_client_proto_event_proto_goTypes = []interface{}{ (*v1.Member)(nil), // 43: teleport.accesslist.v1.Member (*v12.DiscoveryConfig)(nil), // 44: teleport.discoveryconfig.v1.DiscoveryConfig (*v13.ExternalCloudAudit)(nil), // 45: teleport.externalcloudaudit.v1.ExternalCloudAudit + (*v14.AuditQuery)(nil), // 46: teleport.secreports.v1.AuditQuery + (*v14.Report)(nil), // 47: teleport.secreports.v1.Report + (*v14.ReportState)(nil), // 48: teleport.secreports.v1.ReportState } var file_teleport_legacy_client_proto_event_proto_depIdxs = []int32{ 0, // 0: proto.Event.Type:type_name -> proto.Operation @@ -1202,11 +1266,14 @@ var file_teleport_legacy_client_proto_event_proto_depIdxs = []int32{ 43, // 45: proto.Event.AccessListMember:type_name -> teleport.accesslist.v1.Member 44, // 46: proto.Event.DiscoveryConfig:type_name -> teleport.discoveryconfig.v1.DiscoveryConfig 45, // 47: proto.Event.ExternalCloudAudit:type_name -> teleport.externalcloudaudit.v1.ExternalCloudAudit - 48, // [48:48] is the sub-list for method output_type - 48, // [48:48] is the sub-list for method input_type - 48, // [48:48] is the sub-list for extension type_name - 48, // [48:48] is the sub-list for extension extendee - 0, // [0:48] is the sub-list for field type_name + 46, // 48: proto.Event.AuditQuery:type_name -> teleport.secreports.v1.AuditQuery + 47, // 49: proto.Event.Report:type_name -> teleport.secreports.v1.Report + 48, // 50: proto.Event.ReportState:type_name -> teleport.secreports.v1.ReportState + 51, // [51:51] is the sub-list for method output_type + 51, // [51:51] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_teleport_legacy_client_proto_event_proto_init() } @@ -1276,6 +1343,9 @@ func file_teleport_legacy_client_proto_event_proto_init() { (*Event_AccessListMember)(nil), (*Event_DiscoveryConfig)(nil), (*Event_ExternalCloudAudit)(nil), + (*Event_AuditQuery)(nil), + (*Event_Report)(nil), + (*Event_ReportState)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/api/client/secreport/crud.go b/api/client/secreport/crud.go new file mode 100644 index 0000000000000..0126be6be2fdc --- /dev/null +++ b/api/client/secreport/crud.go @@ -0,0 +1,155 @@ +/* +Copyright 2023 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package secreport + +import ( + "context" + + "github.com/gravitational/trace" + "github.com/gravitational/trace/trail" + + pb "github.com/gravitational/teleport/api/gen/proto/go/teleport/secreports/v1" + "github.com/gravitational/teleport/api/types/secreports" + v1 "github.com/gravitational/teleport/api/types/secreports/convert/v1" +) + +// GetSecurityAuditQuery returns audit query by name +func (c *Client) GetSecurityAuditQuery(ctx context.Context, name string) (*secreports.AuditQuery, error) { + resp, err := c.grpcClient.GetAuditQuery(ctx, &pb.GetAuditQueryRequest{Name: name}) + if err != nil { + return nil, trail.FromGRPC(err) + } + out, err := v1.FromProtoAuditQuery(resp) + if err != nil { + return nil, trace.Wrap(err) + } + return out, nil +} + +// UpsertSecurityAuditQuery upsets audit query. +func (c *Client) UpsertSecurityAuditQuery(ctx context.Context, in *secreports.AuditQuery) error { + _, err := c.grpcClient.UpsertAuditQuery(ctx, &pb.UpsertAuditQueryRequest{AuditQuery: v1.ToProtoAuditQuery(in)}) + if err != nil { + return trail.FromGRPC(err) + } + return nil +} + +// DeleteSecurityAuditQuery deletes audit query by name. +func (c *Client) DeleteSecurityAuditQuery(ctx context.Context, name string) error { + _, err := c.grpcClient.DeleteAuditQuery(ctx, &pb.DeleteAuditQueryRequest{Name: name}) + if err != nil { + return trail.FromGRPC(err) + } + return nil +} + +// UpsertSecurityReport upsets security report. +func (c *Client) UpsertSecurityReport(ctx context.Context, item *secreports.Report) error { + _, err := c.grpcClient.UpsertReport(ctx, &pb.UpsertReportRequest{Report: v1.ToProtoReport(item)}) + if err != nil { + return trail.FromGRPC(err) + } + return nil +} + +// GetSecurityReport returns security report by name. +func (c *Client) GetSecurityReport(ctx context.Context, name string) (*secreports.Report, error) { + resp, err := c.grpcClient.GetReport(ctx, &pb.GetReportRequest{Name: name}) + if err != nil { + return nil, trail.FromGRPC(err) + } + + out, err := v1.FromProtoReport(resp) + if err != nil { + return nil, trace.Wrap(err) + } + return out, nil +} + +// GetSecurityReportResult returns security report details by name. +func (c *Client) GetSecurityReportResult(ctx context.Context, name string, days int) (*pb.ReportResult, error) { + resp, err := c.grpcClient.GetReportResult(ctx, &pb.GetReportResultRequest{ + Name: name, + Days: uint32(days), + }) + if err != nil { + return nil, trail.FromGRPC(err) + } + return resp.GetResult(), nil +} + +// RunSecurityReport runs security report by name. +func (c *Client) RunSecurityReport(ctx context.Context, name string, days int) error { + _, err := c.grpcClient.RunReport(ctx, &pb.RunReportRequest{Name: name, Days: uint32(days)}) + if err != nil { + return trail.FromGRPC(err) + } + return nil +} + +// GetSecurityAuditQueryResult returns audit query result by id. +func (c *Client) GetSecurityAuditQueryResult(ctx context.Context, resultID, nextToken string, maxResults int32) (*pb.GetAuditQueryResultResponse, error) { + resp, err := c.grpcClient.GetAuditQueryResult(ctx, &pb.GetAuditQueryResultRequest{ + ResultId: resultID, + NextToken: nextToken, + MaxResults: maxResults, + }) + if err != nil { + return nil, trail.FromGRPC(err) + } + return resp, nil +} + +// GetSecurityReportsStates returns all security reports states. +func (c *Client) GetSecurityReportsStates(ctx context.Context) ([]*secreports.ReportState, error) { + return nil, trace.NotImplemented("GetSecurityReportsStates is not supported in the gRPC client") +} + +// ListSecurityReportsStates returns all security reports states. +func (c *Client) ListSecurityReportsStates(ctx context.Context, i int, s string) ([]*secreports.ReportState, string, error) { + return nil, "", trace.NotImplemented("ListSecurityReportsStates is not supported in the gRPC client") +} + +// UpsertSecurityReportsState upserts security reports state. +func (c *Client) UpsertSecurityReportsState(ctx context.Context, item *secreports.ReportState) error { + return trace.NotImplemented("UpsertSecurityReportsState is not supported in the gRPC client") +} + +// DeleteSecurityReportsState deletes security reports state by name. +func (c *Client) DeleteSecurityReportsState(ctx context.Context, name string) error { + return trace.NotImplemented("DeleteSecurityReportsState is not supported in the gRPC client") +} + +// DeleteAllSecurityReportsStates deletes all security reports states. +func (c *Client) DeleteAllSecurityReportsStates(ctx context.Context) error { + return trace.NotImplemented("DeleteAllSecurityReportsStates is not supported in the gRPC client") +} + +// DeleteAllSecurityReports deletes all security reports. +func (c *Client) DeleteAllSecurityReports(ctx context.Context) error { + return trace.NotImplemented("DeleteAllSecurityReportsStates is not supported in the gRPC client") +} + +// DeleteAllSecurityAuditQueries deletes all security audit queries. +func (c *Client) DeleteAllSecurityAuditQueries(ctx context.Context) error { + return trace.NotImplemented("DeleteAllSecurityAuditQueries is not supported in the gRPC client") +} + +func (c *Client) GetSecurityReportState(ctx context.Context, name string) (*secreports.ReportState, error) { + return nil, trace.NotImplemented("GetSecurityReportState is not supported in the gRPC client") +} diff --git a/api/client/secreport/secreport.go b/api/client/secreport/secreport.go new file mode 100644 index 0000000000000..07a44364d02dc --- /dev/null +++ b/api/client/secreport/secreport.go @@ -0,0 +1,204 @@ +/* +Copyright 2023 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package secreport + +import ( + "context" + + "github.com/gravitational/trace" + "github.com/gravitational/trace/trail" + + pb "github.com/gravitational/teleport/api/gen/proto/go/teleport/secreports/v1" + "github.com/gravitational/teleport/api/types/secreports" + v1 "github.com/gravitational/teleport/api/types/secreports/convert/v1" +) + +// Client is a gRPC implementation of SecReportsService. +type Client struct { + grpcClient pb.SecReportsServiceClient +} + +func (c *Client) GetSecurityAuditQueries(ctx context.Context) ([]*secreports.AuditQuery, error) { + var items []*pb.AuditQuery + nextKey := "" + for { + resp, err := c.grpcClient.ListAuditQueries(ctx, &pb.ListAuditQueriesRequest{ + PageSize: 0, + PageToken: nextKey, + }) + if err != nil { + return nil, trace.Wrap(err) + } + items = append(items, resp.GetQueries()...) + if nextKey == "" { + break + } + } + out, err := v1.FromProtoAuditQueries(items) + if err != nil { + return nil, trace.Wrap(err) + } + return out, nil +} + +func (c *Client) ListSecurityAuditQueries(ctx context.Context, size int, token string) ([]*secreports.AuditQuery, string, error) { + resp, err := c.grpcClient.ListAuditQueries(ctx, &pb.ListAuditQueriesRequest{ + PageSize: int32(size), + PageToken: token, + }) + if err != nil { + return nil, "", trace.Wrap(err) + } + + out, err := v1.FromProtoAuditQueries(resp.Queries) + if err != nil { + return nil, "", trace.Wrap(err) + } + return out, resp.GetNextPageToken(), nil + +} + +func (c *Client) GetSecurityReports(ctx context.Context) ([]*secreports.Report, error) { + var resources []*pb.Report + nextKey := "" + for { + resp, err := c.grpcClient.ListReports(ctx, &pb.ListReportsRequest{ + PageSize: 0, + PageToken: nextKey, + }) + if err != nil { + return nil, trace.Wrap(err) + } + resources = append(resources, resp.GetReports()...) + if nextKey == "" { + break + } + } + out := make([]*secreports.Report, 0, len(resources)) + for _, v := range resources { + item, err := v1.FromProtoReport(v) + if err != nil { + return nil, trace.Wrap(err) + } + out = append(out, item) + } + return out, nil +} + +func (c *Client) ListSecurityReports(ctx context.Context, pageSize int, token string) ([]*secreports.Report, string, error) { + resp, err := c.grpcClient.ListReports(ctx, &pb.ListReportsRequest{ + PageSize: int32(pageSize), + PageToken: token, + }) + if err != nil { + return nil, "", trace.Wrap(err) + } + reports, err := v1.FromProtoReports(resp.Reports) + if err != nil { + return nil, "", trace.Wrap(err) + } + return reports, resp.GetNextPageToken(), nil +} + +// GetSecurityReportExecutionState returns the execution state of the report. +func (c *Client) GetSecurityReportExecutionState(ctx context.Context, name string, days int32) (*secreports.ReportState, error) { + resp, err := c.grpcClient.GetReportState(ctx, &pb.GetReportStateRequest{ + Name: name, + Days: uint32(days), + }) + if err != nil { + return nil, trail.FromGRPC(err) + } + out, err := v1.FromProtoReportState(resp) + if err != nil { + return nil, trace.Wrap(err) + } + return out, nil +} + +// NewClient creates a new SecReports client. +func NewClient(grpcClient pb.SecReportsServiceClient) *Client { + return &Client{ + grpcClient: grpcClient, + } +} + +// GetSchema returns the schema for the audit query language. +func (c *Client) GetSchema(ctx context.Context) (*pb.GetSchemaResponse, error) { + resp, err := c.grpcClient.GetSchema(ctx, &pb.GetSchemaRequest{}) + if err != nil { + return nil, trail.FromGRPC(err) + } + return resp, nil +} + +// RunAuditQueryAndGetResult runs an audit query and returns the result. +func (c *Client) RunAuditQueryAndGetResult(ctx context.Context, queryText string, days int) ([]*pb.QueryRowResult, error) { + resp, err := c.RunAuditQuery(ctx, queryText, days) + if err != nil { + return nil, trace.Wrap(err) + } + rows, err := c.GetAuditQueryResultAll(ctx, resp.GetResultId()) + if err != nil { + return nil, trace.Wrap(err) + } + return rows, nil +} + +// RunAuditQuery runs an audit query. +func (c *Client) RunAuditQuery(ctx context.Context, queryText string, days int) (*pb.RunAuditQueryResponse, error) { + resp, err := c.grpcClient.RunAuditQuery(ctx, &pb.RunAuditQueryRequest{ + Query: queryText, + Days: int32(days), + }) + if err != nil { + return nil, trail.FromGRPC(err) + } + return resp, nil +} + +// GetAuditQueryResultAll returns all results for an audit query. +func (c *Client) GetAuditQueryResultAll(ctx context.Context, queryID string) ([]*pb.QueryRowResult, error) { + var out []*pb.QueryRowResult + var nextToken string + for { + resp, err := c.grpcClient.GetAuditQueryResult(ctx, &pb.GetAuditQueryResultRequest{ + ResultId: queryID, + NextToken: nextToken, + }) + if err != nil { + return nil, trail.FromGRPC(err) + } + out = append(out, resp.Result.GetRows()...) + if resp.GetNextToken() == "" { + break + } + nextToken = resp.GetNextToken() + } + return out, nil +} + +// DeleteSecurityReport deletes a security report. +func (c *Client) DeleteSecurityReport(ctx context.Context, name string) error { + _, err := c.grpcClient.DeleteReport(ctx, &pb.DeleteReportRequest{ + Name: name, + }) + if err != nil { + return trail.FromGRPC(err) + } + return nil +} diff --git a/api/gen/proto/go/teleport/secreports/v1/secreports.pb.go b/api/gen/proto/go/teleport/secreports/v1/secreports.pb.go new file mode 100644 index 0000000000000..60bf8799e693c --- /dev/null +++ b/api/gen/proto/go/teleport/secreports/v1/secreports.pb.go @@ -0,0 +1,632 @@ +// Copyright 2023 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc (unknown) +// source: teleport/secreports/v1/secreports.proto + +package secreportsv1 + +import ( + v1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/header/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// AuditQuery is audit query resource. +type AuditQuery struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // header is the header for //the resource. + Header *v1.ResourceHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` + // spec is audit query spec. + Spec *AuditQuerySpec `protobuf:"bytes,2,opt,name=spec,proto3" json:"spec,omitempty"` +} + +func (x *AuditQuery) Reset() { + *x = AuditQuery{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuditQuery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuditQuery) ProtoMessage() {} + +func (x *AuditQuery) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuditQuery.ProtoReflect.Descriptor instead. +func (*AuditQuery) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_proto_rawDescGZIP(), []int{0} +} + +func (x *AuditQuery) GetHeader() *v1.ResourceHeader { + if x != nil { + return x.Header + } + return nil +} + +func (x *AuditQuery) GetSpec() *AuditQuerySpec { + if x != nil { + return x.Spec + } + return nil +} + +// AuditQuerySpec is audit query spec. +type AuditQuerySpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is the name of the audit query. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // title is the title of the audit query. + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + // query is the SQL Query for the audit query. + Query string `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` + // description is the description of the audit query. + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *AuditQuerySpec) Reset() { + *x = AuditQuerySpec{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuditQuerySpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuditQuerySpec) ProtoMessage() {} + +func (x *AuditQuerySpec) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuditQuerySpec.ProtoReflect.Descriptor instead. +func (*AuditQuerySpec) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_proto_rawDescGZIP(), []int{1} +} + +func (x *AuditQuerySpec) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *AuditQuerySpec) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *AuditQuerySpec) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +func (x *AuditQuerySpec) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +// Report is security report resource. +type Report struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // header is the header for the resource. + Header *v1.ResourceHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` + // spec is the security report spec. + Spec *ReportSpec `protobuf:"bytes,2,opt,name=spec,proto3" json:"spec,omitempty"` +} + +func (x *Report) Reset() { + *x = Report{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Report) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Report) ProtoMessage() {} + +func (x *Report) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Report.ProtoReflect.Descriptor instead. +func (*Report) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_proto_rawDescGZIP(), []int{2} +} + +func (x *Report) GetHeader() *v1.ResourceHeader { + if x != nil { + return x.Header + } + return nil +} + +func (x *Report) GetSpec() *ReportSpec { + if x != nil { + return x.Spec + } + return nil +} + +// ReportSpec is security report spec. +type ReportSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is the name of the security report. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // title is the title of the security report. + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // description is the description of the security report + AuditQueries []*AuditQuerySpec `protobuf:"bytes,3,rep,name=audit_queries,json=auditQueries,proto3" json:"audit_queries,omitempty"` + // title is the title of the security report. + Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` + // version is the version of the security report. + Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *ReportSpec) Reset() { + *x = ReportSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReportSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReportSpec) ProtoMessage() {} + +func (x *ReportSpec) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReportSpec.ProtoReflect.Descriptor instead. +func (*ReportSpec) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_proto_rawDescGZIP(), []int{3} +} + +func (x *ReportSpec) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ReportSpec) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *ReportSpec) GetAuditQueries() []*AuditQuerySpec { + if x != nil { + return x.AuditQueries + } + return nil +} + +func (x *ReportSpec) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *ReportSpec) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +// ReportState is security report state resource. +type ReportState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // header is the header for the resource. + Header *v1.ResourceHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` + // spec is the security report state spec. + Spec *ReportStateSpec `protobuf:"bytes,2,opt,name=spec,proto3" json:"spec,omitempty"` +} + +func (x *ReportState) Reset() { + *x = ReportState{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReportState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReportState) ProtoMessage() {} + +func (x *ReportState) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReportState.ProtoReflect.Descriptor instead. +func (*ReportState) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_proto_rawDescGZIP(), []int{4} +} + +func (x *ReportState) GetHeader() *v1.ResourceHeader { + if x != nil { + return x.Header + } + return nil +} + +func (x *ReportState) GetSpec() *ReportStateSpec { + if x != nil { + return x.Spec + } + return nil +} + +// ReportStateSpec is security report state spec. +type ReportStateSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // state is the state of the security report. + State string `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"` + // updated_at is the time when the security report state was updated. + UpdatedAt string `protobuf:"bytes,2,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *ReportStateSpec) Reset() { + *x = ReportStateSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReportStateSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReportStateSpec) ProtoMessage() {} + +func (x *ReportStateSpec) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReportStateSpec.ProtoReflect.Descriptor instead. +func (*ReportStateSpec) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_proto_rawDescGZIP(), []int{5} +} + +func (x *ReportStateSpec) GetState() string { + if x != nil { + return x.State + } + return "" +} + +func (x *ReportStateSpec) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +var File_teleport_secreports_v1_secreports_proto protoreflect.FileDescriptor + +var file_teleport_secreports_v1_secreports_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, + 0x31, 0x1a, 0x27, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x41, + 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x06, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x64, + 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x22, 0x72, 0x0a, 0x0e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7c, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, + 0x3a, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x22, 0xbf, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, + 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x86, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x12, 0x3b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x46, + 0x0a, 0x0f, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x76, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_teleport_secreports_v1_secreports_proto_rawDescOnce sync.Once + file_teleport_secreports_v1_secreports_proto_rawDescData = file_teleport_secreports_v1_secreports_proto_rawDesc +) + +func file_teleport_secreports_v1_secreports_proto_rawDescGZIP() []byte { + file_teleport_secreports_v1_secreports_proto_rawDescOnce.Do(func() { + file_teleport_secreports_v1_secreports_proto_rawDescData = protoimpl.X.CompressGZIP(file_teleport_secreports_v1_secreports_proto_rawDescData) + }) + return file_teleport_secreports_v1_secreports_proto_rawDescData +} + +var file_teleport_secreports_v1_secreports_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_teleport_secreports_v1_secreports_proto_goTypes = []interface{}{ + (*AuditQuery)(nil), // 0: teleport.secreports.v1.AuditQuery + (*AuditQuerySpec)(nil), // 1: teleport.secreports.v1.AuditQuerySpec + (*Report)(nil), // 2: teleport.secreports.v1.Report + (*ReportSpec)(nil), // 3: teleport.secreports.v1.ReportSpec + (*ReportState)(nil), // 4: teleport.secreports.v1.ReportState + (*ReportStateSpec)(nil), // 5: teleport.secreports.v1.ReportStateSpec + (*v1.ResourceHeader)(nil), // 6: teleport.header.v1.ResourceHeader +} +var file_teleport_secreports_v1_secreports_proto_depIdxs = []int32{ + 6, // 0: teleport.secreports.v1.AuditQuery.header:type_name -> teleport.header.v1.ResourceHeader + 1, // 1: teleport.secreports.v1.AuditQuery.spec:type_name -> teleport.secreports.v1.AuditQuerySpec + 6, // 2: teleport.secreports.v1.Report.header:type_name -> teleport.header.v1.ResourceHeader + 3, // 3: teleport.secreports.v1.Report.spec:type_name -> teleport.secreports.v1.ReportSpec + 1, // 4: teleport.secreports.v1.ReportSpec.audit_queries:type_name -> teleport.secreports.v1.AuditQuerySpec + 6, // 5: teleport.secreports.v1.ReportState.header:type_name -> teleport.header.v1.ResourceHeader + 5, // 6: teleport.secreports.v1.ReportState.spec:type_name -> teleport.secreports.v1.ReportStateSpec + 7, // [7:7] is the sub-list for method output_type + 7, // [7:7] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name +} + +func init() { file_teleport_secreports_v1_secreports_proto_init() } +func file_teleport_secreports_v1_secreports_proto_init() { + if File_teleport_secreports_v1_secreports_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_teleport_secreports_v1_secreports_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuditQuery); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuditQuerySpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Report); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReportSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReportState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReportStateSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_teleport_secreports_v1_secreports_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_teleport_secreports_v1_secreports_proto_goTypes, + DependencyIndexes: file_teleport_secreports_v1_secreports_proto_depIdxs, + MessageInfos: file_teleport_secreports_v1_secreports_proto_msgTypes, + }.Build() + File_teleport_secreports_v1_secreports_proto = out.File + file_teleport_secreports_v1_secreports_proto_rawDesc = nil + file_teleport_secreports_v1_secreports_proto_goTypes = nil + file_teleport_secreports_v1_secreports_proto_depIdxs = nil +} diff --git a/api/gen/proto/go/teleport/secreports/v1/secreports_service.pb.go b/api/gen/proto/go/teleport/secreports/v1/secreports_service.pb.go new file mode 100644 index 0000000000000..50cff282c34ad --- /dev/null +++ b/api/gen/proto/go/teleport/secreports/v1/secreports_service.pb.go @@ -0,0 +1,2490 @@ +// Copyright 2023 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc (unknown) +// source: teleport/secreports/v1/secreports_service.proto + +package secreportsv1 + +import ( + v1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/header/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// name is a name of the security report. +type ReportSate_State int32 + +const ( + // STATE_UNSPECIFIED is an unspecified state. + ReportSate_STATE_UNSPECIFIED ReportSate_State = 0 + // STATE_ERROR is an error state. + ReportSate_STATE_ERROR ReportSate_State = 1 + // STATE_SUCCESS is a success state. + ReportSate_STATE_SUCCESS ReportSate_State = 2 + // STATE_RUNNING is a running state. + ReportSate_STATE_RUNNING ReportSate_State = 3 +) + +// Enum value maps for ReportSate_State. +var ( + ReportSate_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 1: "STATE_ERROR", + 2: "STATE_SUCCESS", + 3: "STATE_RUNNING", + } + ReportSate_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "STATE_ERROR": 1, + "STATE_SUCCESS": 2, + "STATE_RUNNING": 3, + } +) + +func (x ReportSate_State) Enum() *ReportSate_State { + p := new(ReportSate_State) + *p = x + return p +} + +func (x ReportSate_State) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ReportSate_State) Descriptor() protoreflect.EnumDescriptor { + return file_teleport_secreports_v1_secreports_service_proto_enumTypes[0].Descriptor() +} + +func (ReportSate_State) Type() protoreflect.EnumType { + return &file_teleport_secreports_v1_secreports_service_proto_enumTypes[0] +} + +func (x ReportSate_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ReportSate_State.Descriptor instead. +func (ReportSate_State) EnumDescriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{24, 0} +} + +// GetAuditQueryResultRequest is a request for GetAuditQueryResult. +type GetAuditQueryResultRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // result_id is a unique id of the result. + ResultId string `protobuf:"bytes,1,opt,name=result_id,json=resultId,proto3" json:"result_id,omitempty"` + // next_token is a token for pagination. + NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"` + // max_results is a maximum number of results to return. + MaxResults int32 `protobuf:"varint,3,opt,name=max_results,json=maxResults,proto3" json:"max_results,omitempty"` +} + +func (x *GetAuditQueryResultRequest) Reset() { + *x = GetAuditQueryResultRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAuditQueryResultRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAuditQueryResultRequest) ProtoMessage() {} + +func (x *GetAuditQueryResultRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAuditQueryResultRequest.ProtoReflect.Descriptor instead. +func (*GetAuditQueryResultRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{0} +} + +func (x *GetAuditQueryResultRequest) GetResultId() string { + if x != nil { + return x.ResultId + } + return "" +} + +func (x *GetAuditQueryResultRequest) GetNextToken() string { + if x != nil { + return x.NextToken + } + return "" +} + +func (x *GetAuditQueryResultRequest) GetMaxResults() int32 { + if x != nil { + return x.MaxResults + } + return 0 +} + +// QueryResultColumnInfo is a column info. +type QueryResultColumnInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is name of the column. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // type is type of the column. + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` +} + +func (x *QueryResultColumnInfo) Reset() { + *x = QueryResultColumnInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryResultColumnInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryResultColumnInfo) ProtoMessage() {} + +func (x *QueryResultColumnInfo) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryResultColumnInfo.ProtoReflect.Descriptor instead. +func (*QueryResultColumnInfo) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{1} +} + +func (x *QueryResultColumnInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *QueryResultColumnInfo) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +// QueryRowResult is a row result. +type QueryRowResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // data is a list of values. + Data []string `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` +} + +func (x *QueryRowResult) Reset() { + *x = QueryRowResult{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryRowResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryRowResult) ProtoMessage() {} + +func (x *QueryRowResult) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryRowResult.ProtoReflect.Descriptor instead. +func (*QueryRowResult) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{2} +} + +func (x *QueryRowResult) GetData() []string { + if x != nil { + return x.Data + } + return nil +} + +// QueryResultSet is a result set. +type QueryResultSet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // column_info contains information about columns. + ColumnInfo []*QueryResultColumnInfo `protobuf:"bytes,1,rep,name=column_info,json=columnInfo,proto3" json:"column_info,omitempty"` + // rows is a list of rows containing values. + Rows []*QueryRowResult `protobuf:"bytes,2,rep,name=rows,proto3" json:"rows,omitempty"` +} + +func (x *QueryResultSet) Reset() { + *x = QueryResultSet{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryResultSet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryResultSet) ProtoMessage() {} + +func (x *QueryResultSet) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryResultSet.ProtoReflect.Descriptor instead. +func (*QueryResultSet) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{3} +} + +func (x *QueryResultSet) GetColumnInfo() []*QueryResultColumnInfo { + if x != nil { + return x.ColumnInfo + } + return nil +} + +func (x *QueryResultSet) GetRows() []*QueryRowResult { + if x != nil { + return x.Rows + } + return nil +} + +// GetAuditQueryResultResponse contains an audit query result. +type GetAuditQueryResultResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // result is a result set. + Result *QueryResultSet `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + // next_token is a token for pagination. + NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"` + // result_id is a unique id of the result. + ResultId string `protobuf:"bytes,3,opt,name=result_id,json=resultId,proto3" json:"result_id,omitempty"` +} + +func (x *GetAuditQueryResultResponse) Reset() { + *x = GetAuditQueryResultResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAuditQueryResultResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAuditQueryResultResponse) ProtoMessage() {} + +func (x *GetAuditQueryResultResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAuditQueryResultResponse.ProtoReflect.Descriptor instead. +func (*GetAuditQueryResultResponse) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{4} +} + +func (x *GetAuditQueryResultResponse) GetResult() *QueryResultSet { + if x != nil { + return x.Result + } + return nil +} + +func (x *GetAuditQueryResultResponse) GetNextToken() string { + if x != nil { + return x.NextToken + } + return "" +} + +func (x *GetAuditQueryResultResponse) GetResultId() string { + if x != nil { + return x.ResultId + } + return "" +} + +// RunReportRequest is a request for RunReport. +type RunReportRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is a name of the security report. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // days is a time range is days. + Days uint32 `protobuf:"varint,2,opt,name=days,proto3" json:"days,omitempty"` +} + +func (x *RunReportRequest) Reset() { + *x = RunReportRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RunReportRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RunReportRequest) ProtoMessage() {} + +func (x *RunReportRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RunReportRequest.ProtoReflect.Descriptor instead. +func (*RunReportRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{5} +} + +func (x *RunReportRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RunReportRequest) GetDays() uint32 { + if x != nil { + return x.Days + } + return 0 +} + +// GetStateRequest is a request for GetReportState. +type GetReportStateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is a name of the security report. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // days is a time range is days. + Days uint32 `protobuf:"varint,2,opt,name=days,proto3" json:"days,omitempty"` +} + +func (x *GetReportStateRequest) Reset() { + *x = GetReportStateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetReportStateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetReportStateRequest) ProtoMessage() {} + +func (x *GetReportStateRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetReportStateRequest.ProtoReflect.Descriptor instead. +func (*GetReportStateRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{6} +} + +func (x *GetReportStateRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetReportStateRequest) GetDays() uint32 { + if x != nil { + return x.Days + } + return 0 +} + +// DeleteAuditQueryRequest is audit query delete request. +type DeleteAuditQueryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is the name of the audit query to delete. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *DeleteAuditQueryRequest) Reset() { + *x = DeleteAuditQueryRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteAuditQueryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteAuditQueryRequest) ProtoMessage() {} + +func (x *DeleteAuditQueryRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteAuditQueryRequest.ProtoReflect.Descriptor instead. +func (*DeleteAuditQueryRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{7} +} + +func (x *DeleteAuditQueryRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// DeleteReportRequest is security report delete request. +type DeleteReportRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is the name of the security report to delete. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *DeleteReportRequest) Reset() { + *x = DeleteReportRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteReportRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteReportRequest) ProtoMessage() {} + +func (x *DeleteReportRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteReportRequest.ProtoReflect.Descriptor instead. +func (*DeleteReportRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{8} +} + +func (x *DeleteReportRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// RunAuditQueryRequest is audit query run request. +type RunAuditQueryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is the name of the audit query to run. + Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + // days is a time range is days. + Days int32 `protobuf:"varint,2,opt,name=days,proto3" json:"days,omitempty"` +} + +func (x *RunAuditQueryRequest) Reset() { + *x = RunAuditQueryRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RunAuditQueryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RunAuditQueryRequest) ProtoMessage() {} + +func (x *RunAuditQueryRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RunAuditQueryRequest.ProtoReflect.Descriptor instead. +func (*RunAuditQueryRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{9} +} + +func (x *RunAuditQueryRequest) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +func (x *RunAuditQueryRequest) GetDays() int32 { + if x != nil { + return x.Days + } + return 0 +} + +// UpsertAuditQueryRequest is audit query upsert request. +type UpsertAuditQueryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // audit_query is the audit query to upsert. + AuditQuery *AuditQuery `protobuf:"bytes,1,opt,name=audit_query,json=auditQuery,proto3" json:"audit_query,omitempty"` +} + +func (x *UpsertAuditQueryRequest) Reset() { + *x = UpsertAuditQueryRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpsertAuditQueryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpsertAuditQueryRequest) ProtoMessage() {} + +func (x *UpsertAuditQueryRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpsertAuditQueryRequest.ProtoReflect.Descriptor instead. +func (*UpsertAuditQueryRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{10} +} + +func (x *UpsertAuditQueryRequest) GetAuditQuery() *AuditQuery { + if x != nil { + return x.AuditQuery + } + return nil +} + +// UpsertReportRequest is security report upsert request. +type UpsertReportRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // report is the security report to upsert. + Report *Report `protobuf:"bytes,1,opt,name=report,proto3" json:"report,omitempty"` +} + +func (x *UpsertReportRequest) Reset() { + *x = UpsertReportRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpsertReportRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpsertReportRequest) ProtoMessage() {} + +func (x *UpsertReportRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpsertReportRequest.ProtoReflect.Descriptor instead. +func (*UpsertReportRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{11} +} + +func (x *UpsertReportRequest) GetReport() *Report { + if x != nil { + return x.Report + } + return nil +} + +// GetAuditQueryRequest is audit query get request. +type GetAuditQueryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is the name of the audit query to get. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *GetAuditQueryRequest) Reset() { + *x = GetAuditQueryRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAuditQueryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAuditQueryRequest) ProtoMessage() {} + +func (x *GetAuditQueryRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAuditQueryRequest.ProtoReflect.Descriptor instead. +func (*GetAuditQueryRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{12} +} + +func (x *GetAuditQueryRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// GetReportRequest is security report get request. +type GetReportRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is the name of the security report to get. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *GetReportRequest) Reset() { + *x = GetReportRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetReportRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetReportRequest) ProtoMessage() {} + +func (x *GetReportRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetReportRequest.ProtoReflect.Descriptor instead. +func (*GetReportRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{13} +} + +func (x *GetReportRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// GetReportResultRequest is report get request. +type GetReportResultRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is the name of the security report to get. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // days is a time range is days. + Days uint32 `protobuf:"varint,2,opt,name=days,proto3" json:"days,omitempty"` + // execution_id is a unique id of the execution. + ExecutionId string `protobuf:"bytes,3,opt,name=execution_id,json=executionId,proto3" json:"execution_id,omitempty"` +} + +func (x *GetReportResultRequest) Reset() { + *x = GetReportResultRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetReportResultRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetReportResultRequest) ProtoMessage() {} + +func (x *GetReportResultRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetReportResultRequest.ProtoReflect.Descriptor instead. +func (*GetReportResultRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{14} +} + +func (x *GetReportResultRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetReportResultRequest) GetDays() uint32 { + if x != nil { + return x.Days + } + return 0 +} + +func (x *GetReportResultRequest) GetExecutionId() string { + if x != nil { + return x.ExecutionId + } + return "" +} + +// ListAuditQueriesRequest is audit query list request. +type ListAuditQueriesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // page_size is the number of results to return. + PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // page_token is the next_token value returned from a previous List request if any. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` +} + +func (x *ListAuditQueriesRequest) Reset() { + *x = ListAuditQueriesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAuditQueriesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAuditQueriesRequest) ProtoMessage() {} + +func (x *ListAuditQueriesRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListAuditQueriesRequest.ProtoReflect.Descriptor instead. +func (*ListAuditQueriesRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{15} +} + +func (x *ListAuditQueriesRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListAuditQueriesRequest) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +// ListAuditQueryResponse is audit query list response. +type ListReportsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // page_size is the number of results to return. + PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // page_token is the next_token value returned from a previous List request if any. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` +} + +func (x *ListReportsRequest) Reset() { + *x = ListReportsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListReportsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListReportsRequest) ProtoMessage() {} + +func (x *ListReportsRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListReportsRequest.ProtoReflect.Descriptor instead. +func (*ListReportsRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{16} +} + +func (x *ListReportsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListReportsRequest) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +// ListAuditQueriesResponse is audit query list response. +type ListAuditQueriesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // queries is a list of audit queries. + Queries []*AuditQuery `protobuf:"bytes,1,rep,name=queries,proto3" json:"queries,omitempty"` + // next_page_token is the next page token. If there are no more results, it will be empty. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` +} + +func (x *ListAuditQueriesResponse) Reset() { + *x = ListAuditQueriesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAuditQueriesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAuditQueriesResponse) ProtoMessage() {} + +func (x *ListAuditQueriesResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListAuditQueriesResponse.ProtoReflect.Descriptor instead. +func (*ListAuditQueriesResponse) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{17} +} + +func (x *ListAuditQueriesResponse) GetQueries() []*AuditQuery { + if x != nil { + return x.Queries + } + return nil +} + +func (x *ListAuditQueriesResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +// GetSchemaRequest is a request for GetSchema. +type GetSchemaRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetSchemaRequest) Reset() { + *x = GetSchemaRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetSchemaRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSchemaRequest) ProtoMessage() {} + +func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSchemaRequest.ProtoReflect.Descriptor instead. +func (*GetSchemaRequest) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{18} +} + +// GetSchemaResponse is a response for GetSchema. +type GetSchemaResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // views is the list of views. + Views []*GetSchemaResponse_ViewDesc `protobuf:"bytes,1,rep,name=views,proto3" json:"views,omitempty"` +} + +func (x *GetSchemaResponse) Reset() { + *x = GetSchemaResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetSchemaResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSchemaResponse) ProtoMessage() {} + +func (x *GetSchemaResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSchemaResponse.ProtoReflect.Descriptor instead. +func (*GetSchemaResponse) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{19} +} + +func (x *GetSchemaResponse) GetViews() []*GetSchemaResponse_ViewDesc { + if x != nil { + return x.Views + } + return nil +} + +// RunAuditQueryResponse is audit query run response. +type RunAuditQueryResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // result_id is a unique id of the result. + ResultId string `protobuf:"bytes,1,opt,name=result_id,json=resultId,proto3" json:"result_id,omitempty"` +} + +func (x *RunAuditQueryResponse) Reset() { + *x = RunAuditQueryResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RunAuditQueryResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RunAuditQueryResponse) ProtoMessage() {} + +func (x *RunAuditQueryResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RunAuditQueryResponse.ProtoReflect.Descriptor instead. +func (*RunAuditQueryResponse) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{20} +} + +func (x *RunAuditQueryResponse) GetResultId() string { + if x != nil { + return x.ResultId + } + return "" +} + +// ListReportResponse is security report list response. +type ListReportsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // reports is a list of security reports. + Reports []*Report `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports,omitempty"` + // next_page_token is the next page token. If there are no more results, it will be empty. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` +} + +func (x *ListReportsResponse) Reset() { + *x = ListReportsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListReportsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListReportsResponse) ProtoMessage() {} + +func (x *ListReportsResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListReportsResponse.ProtoReflect.Descriptor instead. +func (*ListReportsResponse) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{21} +} + +func (x *ListReportsResponse) GetReports() []*Report { + if x != nil { + return x.Reports + } + return nil +} + +func (x *ListReportsResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +// GetReportResultResponse is report result get response. +type GetReportResultResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // result is a report execution result. + Result *ReportResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` +} + +func (x *GetReportResultResponse) Reset() { + *x = GetReportResultResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetReportResultResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetReportResultResponse) ProtoMessage() {} + +func (x *GetReportResultResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetReportResultResponse.ProtoReflect.Descriptor instead. +func (*GetReportResultResponse) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{22} +} + +func (x *GetReportResultResponse) GetResult() *ReportResult { + if x != nil { + return x.Result + } + return nil +} + +// Report is the result of security report. +type ReportResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is a name of the security report. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // description is a description of the security report. + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // audit_query_results is a list of audit query results. + AuditQueryResults []*ReportResult_AuditQueryResult `protobuf:"bytes,3,rep,name=audit_query_results,json=auditQueryResults,proto3" json:"audit_query_results,omitempty"` + // updated_at is a time when the security report was updated. + UpdatedAt string `protobuf:"bytes,4,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + // total_execution_time_in_millis is a time in milliseconds when the security report was executed. + TotalExecutionTimeInMillis int64 `protobuf:"varint,5,opt,name=total_execution_time_in_millis,json=totalExecutionTimeInMillis,proto3" json:"total_execution_time_in_millis,omitempty"` + // total_data_scanned_in_bytes is a number of bytes scanned. + TotalDataScannedInBytes int64 `protobuf:"varint,6,opt,name=total_data_scanned_in_bytes,json=totalDataScannedInBytes,proto3" json:"total_data_scanned_in_bytes,omitempty"` +} + +func (x *ReportResult) Reset() { + *x = ReportResult{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReportResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReportResult) ProtoMessage() {} + +func (x *ReportResult) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReportResult.ProtoReflect.Descriptor instead. +func (*ReportResult) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{23} +} + +func (x *ReportResult) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ReportResult) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *ReportResult) GetAuditQueryResults() []*ReportResult_AuditQueryResult { + if x != nil { + return x.AuditQueryResults + } + return nil +} + +func (x *ReportResult) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +func (x *ReportResult) GetTotalExecutionTimeInMillis() int64 { + if x != nil { + return x.TotalExecutionTimeInMillis + } + return 0 +} + +func (x *ReportResult) GetTotalDataScannedInBytes() int64 { + if x != nil { + return x.TotalDataScannedInBytes + } + return 0 +} + +// Report is a security report. +type ReportSate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // header is a resource header. + Header *v1.ResourceHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` + // state is a state of the security report. + State ReportSate_State `protobuf:"varint,2,opt,name=state,proto3,enum=teleport.secreports.v1.ReportSate_State" json:"state,omitempty"` + // updated_at is a time when the security report state was updated. + UpdatedAt string `protobuf:"bytes,3,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *ReportSate) Reset() { + *x = ReportSate{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReportSate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReportSate) ProtoMessage() {} + +func (x *ReportSate) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReportSate.ProtoReflect.Descriptor instead. +func (*ReportSate) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{24} +} + +func (x *ReportSate) GetHeader() *v1.ResourceHeader { + if x != nil { + return x.Header + } + return nil +} + +func (x *ReportSate) GetState() ReportSate_State { + if x != nil { + return x.State + } + return ReportSate_STATE_UNSPECIFIED +} + +func (x *ReportSate) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +// ViewDesc is a description of view. +type GetSchemaResponse_ViewDesc struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is the name of the view. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // desc is the description of the view. + Desc string `protobuf:"bytes,2,opt,name=desc,proto3" json:"desc,omitempty"` + // columns is the list of columns. + Columns []*GetSchemaResponse_ViewDesc_ColumnDesc `protobuf:"bytes,3,rep,name=columns,proto3" json:"columns,omitempty"` +} + +func (x *GetSchemaResponse_ViewDesc) Reset() { + *x = GetSchemaResponse_ViewDesc{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetSchemaResponse_ViewDesc) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSchemaResponse_ViewDesc) ProtoMessage() {} + +func (x *GetSchemaResponse_ViewDesc) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSchemaResponse_ViewDesc.ProtoReflect.Descriptor instead. +func (*GetSchemaResponse_ViewDesc) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{19, 0} +} + +func (x *GetSchemaResponse_ViewDesc) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetSchemaResponse_ViewDesc) GetDesc() string { + if x != nil { + return x.Desc + } + return "" +} + +func (x *GetSchemaResponse_ViewDesc) GetColumns() []*GetSchemaResponse_ViewDesc_ColumnDesc { + if x != nil { + return x.Columns + } + return nil +} + +// ColumnDesc is a description of column. +type GetSchemaResponse_ViewDesc_ColumnDesc struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is the name of the column. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // type is the type of the column. + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + // desc is the description of the column. + Desc string `protobuf:"bytes,3,opt,name=desc,proto3" json:"desc,omitempty"` +} + +func (x *GetSchemaResponse_ViewDesc_ColumnDesc) Reset() { + *x = GetSchemaResponse_ViewDesc_ColumnDesc{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetSchemaResponse_ViewDesc_ColumnDesc) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSchemaResponse_ViewDesc_ColumnDesc) ProtoMessage() {} + +func (x *GetSchemaResponse_ViewDesc_ColumnDesc) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSchemaResponse_ViewDesc_ColumnDesc.ProtoReflect.Descriptor instead. +func (*GetSchemaResponse_ViewDesc_ColumnDesc) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{19, 0, 0} +} + +func (x *GetSchemaResponse_ViewDesc_ColumnDesc) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetSchemaResponse_ViewDesc_ColumnDesc) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *GetSchemaResponse_ViewDesc_ColumnDesc) GetDesc() string { + if x != nil { + return x.Desc + } + return "" +} + +// AuditQueryResult is a result of audit query. +type ReportResult_AuditQueryResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // audit_query is the audit query spec containing information about audit query. + AuditQuery *AuditQuerySpec `protobuf:"bytes,1,opt,name=audit_query,json=auditQuery,proto3" json:"audit_query,omitempty"` + // result is the result set. + Result *QueryResultSet `protobuf:"bytes,2,opt,name=result,proto3" json:"result,omitempty"` + // result_id is a unique id of the result. + ResultId string `protobuf:"bytes,3,opt,name=result_id,json=resultId,proto3" json:"result_id,omitempty"` + // execution_time_in_millis is a time in milliseconds when the audit query was executed. + ExecutionTimeInMillis int64 `protobuf:"varint,4,opt,name=execution_time_in_millis,json=executionTimeInMillis,proto3" json:"execution_time_in_millis,omitempty"` + // data_scanned_in_bytes is a number of bytes scanned. + DataScannedInBytes int64 `protobuf:"varint,5,opt,name=data_scanned_in_bytes,json=dataScannedInBytes,proto3" json:"data_scanned_in_bytes,omitempty"` +} + +func (x *ReportResult_AuditQueryResult) Reset() { + *x = ReportResult_AuditQueryResult{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReportResult_AuditQueryResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReportResult_AuditQueryResult) ProtoMessage() {} + +func (x *ReportResult_AuditQueryResult) ProtoReflect() protoreflect.Message { + mi := &file_teleport_secreports_v1_secreports_service_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReportResult_AuditQueryResult.ProtoReflect.Descriptor instead. +func (*ReportResult_AuditQueryResult) Descriptor() ([]byte, []int) { + return file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP(), []int{23, 0} +} + +func (x *ReportResult_AuditQueryResult) GetAuditQuery() *AuditQuerySpec { + if x != nil { + return x.AuditQuery + } + return nil +} + +func (x *ReportResult_AuditQueryResult) GetResult() *QueryResultSet { + if x != nil { + return x.Result + } + return nil +} + +func (x *ReportResult_AuditQueryResult) GetResultId() string { + if x != nil { + return x.ResultId + } + return "" +} + +func (x *ReportResult_AuditQueryResult) GetExecutionTimeInMillis() int64 { + if x != nil { + return x.ExecutionTimeInMillis + } + return 0 +} + +func (x *ReportResult_AuditQueryResult) GetDataScannedInBytes() int64 { + if x != nil { + return x.DataScannedInBytes + } + return 0 +} + +var File_teleport_secreports_v1_secreports_service_proto protoreflect.FileDescriptor + +var file_teleport_secreports_v1_secreports_service_proto_rawDesc = []byte{ + 0x0a, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x16, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x27, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x79, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, + 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x22, 0x3f, 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x24, 0x0a, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x77, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x74, 0x12, 0x4e, 0x0a, + 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3a, 0x0a, + 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x77, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x1b, 0x47, 0x65, + 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x65, + 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, + 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, + 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x49, 0x64, 0x22, 0x3a, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x64, 0x61, 0x79, + 0x73, 0x22, 0x3f, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x64, 0x61, + 0x79, 0x73, 0x22, 0x2d, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x29, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x14, + 0x52, 0x75, 0x6e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, + 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x64, 0x61, 0x79, 0x73, 0x22, 0x5e, + 0x0a, 0x17, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x0b, 0x61, 0x75, 0x64, + 0x69, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x52, 0x0a, 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x22, 0x4d, + 0x0a, 0x13, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x2a, 0x0a, + 0x14, 0x47, 0x65, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x26, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x63, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x64, + 0x61, 0x79, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x55, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, + 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x50, 0x0a, + 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, + 0x80, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, + 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, + 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb5, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x05, + 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x44, 0x65, 0x73, 0x63, 0x52, + 0x05, 0x76, 0x69, 0x65, 0x77, 0x73, 0x1a, 0xd5, 0x01, 0x0a, 0x08, 0x56, 0x69, 0x65, 0x77, 0x44, + 0x65, 0x73, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x57, 0x0a, 0x07, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x44, 0x65, 0x73, 0x63, + 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x52, 0x07, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x1a, 0x48, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, + 0x73, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, + 0x73, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x22, 0x34, + 0x0a, 0x15, 0x52, 0x75, 0x6e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x49, 0x64, 0x22, 0x77, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x57, 0x0a, + 0x17, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xf3, 0x04, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, + 0x13, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x52, 0x11, 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x42, 0x0a, 0x1e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x6d, + 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1a, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x49, + 0x6e, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x69, 0x6e, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x49, 0x6e, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x1a, 0xa4, 0x02, 0x0a, 0x10, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x47, 0x0a, 0x0b, 0x61, 0x75, + 0x64, 0x69, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, + 0x12, 0x37, 0x0a, 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x15, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, + 0x65, 0x49, 0x6e, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x53, 0x63, + 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xfe, 0x01, 0x0a, + 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, + 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x55, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x32, 0x89, 0x0b, + 0x0a, 0x11, 0x53, 0x65, 0x63, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x10, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x75, 0x64, + 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x61, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x2c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x75, + 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x75, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x10, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x75, + 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x53, 0x0a, 0x0c, 0x55, 0x70, 0x73, 0x65, 0x72, + 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x55, 0x0a, 0x09, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x12, 0x66, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0c, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2b, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x6c, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x2c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x41, 0x75, + 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x41, 0x75, 0x64, 0x69, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7e, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, + 0x0a, 0x09, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x28, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x72, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x64, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x60, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x12, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_teleport_secreports_v1_secreports_service_proto_rawDescOnce sync.Once + file_teleport_secreports_v1_secreports_service_proto_rawDescData = file_teleport_secreports_v1_secreports_service_proto_rawDesc +) + +func file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP() []byte { + file_teleport_secreports_v1_secreports_service_proto_rawDescOnce.Do(func() { + file_teleport_secreports_v1_secreports_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_teleport_secreports_v1_secreports_service_proto_rawDescData) + }) + return file_teleport_secreports_v1_secreports_service_proto_rawDescData +} + +var file_teleport_secreports_v1_secreports_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_teleport_secreports_v1_secreports_service_proto_msgTypes = make([]protoimpl.MessageInfo, 28) +var file_teleport_secreports_v1_secreports_service_proto_goTypes = []interface{}{ + (ReportSate_State)(0), // 0: teleport.secreports.v1.ReportSate.State + (*GetAuditQueryResultRequest)(nil), // 1: teleport.secreports.v1.GetAuditQueryResultRequest + (*QueryResultColumnInfo)(nil), // 2: teleport.secreports.v1.QueryResultColumnInfo + (*QueryRowResult)(nil), // 3: teleport.secreports.v1.QueryRowResult + (*QueryResultSet)(nil), // 4: teleport.secreports.v1.QueryResultSet + (*GetAuditQueryResultResponse)(nil), // 5: teleport.secreports.v1.GetAuditQueryResultResponse + (*RunReportRequest)(nil), // 6: teleport.secreports.v1.RunReportRequest + (*GetReportStateRequest)(nil), // 7: teleport.secreports.v1.GetReportStateRequest + (*DeleteAuditQueryRequest)(nil), // 8: teleport.secreports.v1.DeleteAuditQueryRequest + (*DeleteReportRequest)(nil), // 9: teleport.secreports.v1.DeleteReportRequest + (*RunAuditQueryRequest)(nil), // 10: teleport.secreports.v1.RunAuditQueryRequest + (*UpsertAuditQueryRequest)(nil), // 11: teleport.secreports.v1.UpsertAuditQueryRequest + (*UpsertReportRequest)(nil), // 12: teleport.secreports.v1.UpsertReportRequest + (*GetAuditQueryRequest)(nil), // 13: teleport.secreports.v1.GetAuditQueryRequest + (*GetReportRequest)(nil), // 14: teleport.secreports.v1.GetReportRequest + (*GetReportResultRequest)(nil), // 15: teleport.secreports.v1.GetReportResultRequest + (*ListAuditQueriesRequest)(nil), // 16: teleport.secreports.v1.ListAuditQueriesRequest + (*ListReportsRequest)(nil), // 17: teleport.secreports.v1.ListReportsRequest + (*ListAuditQueriesResponse)(nil), // 18: teleport.secreports.v1.ListAuditQueriesResponse + (*GetSchemaRequest)(nil), // 19: teleport.secreports.v1.GetSchemaRequest + (*GetSchemaResponse)(nil), // 20: teleport.secreports.v1.GetSchemaResponse + (*RunAuditQueryResponse)(nil), // 21: teleport.secreports.v1.RunAuditQueryResponse + (*ListReportsResponse)(nil), // 22: teleport.secreports.v1.ListReportsResponse + (*GetReportResultResponse)(nil), // 23: teleport.secreports.v1.GetReportResultResponse + (*ReportResult)(nil), // 24: teleport.secreports.v1.ReportResult + (*ReportSate)(nil), // 25: teleport.secreports.v1.ReportSate + (*GetSchemaResponse_ViewDesc)(nil), // 26: teleport.secreports.v1.GetSchemaResponse.ViewDesc + (*GetSchemaResponse_ViewDesc_ColumnDesc)(nil), // 27: teleport.secreports.v1.GetSchemaResponse.ViewDesc.ColumnDesc + (*ReportResult_AuditQueryResult)(nil), // 28: teleport.secreports.v1.ReportResult.AuditQueryResult + (*AuditQuery)(nil), // 29: teleport.secreports.v1.AuditQuery + (*Report)(nil), // 30: teleport.secreports.v1.Report + (*v1.ResourceHeader)(nil), // 31: teleport.header.v1.ResourceHeader + (*AuditQuerySpec)(nil), // 32: teleport.secreports.v1.AuditQuerySpec + (*emptypb.Empty)(nil), // 33: google.protobuf.Empty + (*ReportState)(nil), // 34: teleport.secreports.v1.ReportState +} +var file_teleport_secreports_v1_secreports_service_proto_depIdxs = []int32{ + 2, // 0: teleport.secreports.v1.QueryResultSet.column_info:type_name -> teleport.secreports.v1.QueryResultColumnInfo + 3, // 1: teleport.secreports.v1.QueryResultSet.rows:type_name -> teleport.secreports.v1.QueryRowResult + 4, // 2: teleport.secreports.v1.GetAuditQueryResultResponse.result:type_name -> teleport.secreports.v1.QueryResultSet + 29, // 3: teleport.secreports.v1.UpsertAuditQueryRequest.audit_query:type_name -> teleport.secreports.v1.AuditQuery + 30, // 4: teleport.secreports.v1.UpsertReportRequest.report:type_name -> teleport.secreports.v1.Report + 29, // 5: teleport.secreports.v1.ListAuditQueriesResponse.queries:type_name -> teleport.secreports.v1.AuditQuery + 26, // 6: teleport.secreports.v1.GetSchemaResponse.views:type_name -> teleport.secreports.v1.GetSchemaResponse.ViewDesc + 30, // 7: teleport.secreports.v1.ListReportsResponse.reports:type_name -> teleport.secreports.v1.Report + 24, // 8: teleport.secreports.v1.GetReportResultResponse.result:type_name -> teleport.secreports.v1.ReportResult + 28, // 9: teleport.secreports.v1.ReportResult.audit_query_results:type_name -> teleport.secreports.v1.ReportResult.AuditQueryResult + 31, // 10: teleport.secreports.v1.ReportSate.header:type_name -> teleport.header.v1.ResourceHeader + 0, // 11: teleport.secreports.v1.ReportSate.state:type_name -> teleport.secreports.v1.ReportSate.State + 27, // 12: teleport.secreports.v1.GetSchemaResponse.ViewDesc.columns:type_name -> teleport.secreports.v1.GetSchemaResponse.ViewDesc.ColumnDesc + 32, // 13: teleport.secreports.v1.ReportResult.AuditQueryResult.audit_query:type_name -> teleport.secreports.v1.AuditQuerySpec + 4, // 14: teleport.secreports.v1.ReportResult.AuditQueryResult.result:type_name -> teleport.secreports.v1.QueryResultSet + 11, // 15: teleport.secreports.v1.SecReportsService.UpsertAuditQuery:input_type -> teleport.secreports.v1.UpsertAuditQueryRequest + 13, // 16: teleport.secreports.v1.SecReportsService.GetAuditQuery:input_type -> teleport.secreports.v1.GetAuditQueryRequest + 16, // 17: teleport.secreports.v1.SecReportsService.ListAuditQueries:input_type -> teleport.secreports.v1.ListAuditQueriesRequest + 8, // 18: teleport.secreports.v1.SecReportsService.DeleteAuditQuery:input_type -> teleport.secreports.v1.DeleteAuditQueryRequest + 12, // 19: teleport.secreports.v1.SecReportsService.UpsertReport:input_type -> teleport.secreports.v1.UpsertReportRequest + 14, // 20: teleport.secreports.v1.SecReportsService.GetReport:input_type -> teleport.secreports.v1.GetReportRequest + 17, // 21: teleport.secreports.v1.SecReportsService.ListReports:input_type -> teleport.secreports.v1.ListReportsRequest + 9, // 22: teleport.secreports.v1.SecReportsService.DeleteReport:input_type -> teleport.secreports.v1.DeleteReportRequest + 10, // 23: teleport.secreports.v1.SecReportsService.RunAuditQuery:input_type -> teleport.secreports.v1.RunAuditQueryRequest + 1, // 24: teleport.secreports.v1.SecReportsService.GetAuditQueryResult:input_type -> teleport.secreports.v1.GetAuditQueryResultRequest + 6, // 25: teleport.secreports.v1.SecReportsService.RunReport:input_type -> teleport.secreports.v1.RunReportRequest + 15, // 26: teleport.secreports.v1.SecReportsService.GetReportResult:input_type -> teleport.secreports.v1.GetReportResultRequest + 7, // 27: teleport.secreports.v1.SecReportsService.GetReportState:input_type -> teleport.secreports.v1.GetReportStateRequest + 19, // 28: teleport.secreports.v1.SecReportsService.GetSchema:input_type -> teleport.secreports.v1.GetSchemaRequest + 33, // 29: teleport.secreports.v1.SecReportsService.UpsertAuditQuery:output_type -> google.protobuf.Empty + 29, // 30: teleport.secreports.v1.SecReportsService.GetAuditQuery:output_type -> teleport.secreports.v1.AuditQuery + 18, // 31: teleport.secreports.v1.SecReportsService.ListAuditQueries:output_type -> teleport.secreports.v1.ListAuditQueriesResponse + 33, // 32: teleport.secreports.v1.SecReportsService.DeleteAuditQuery:output_type -> google.protobuf.Empty + 33, // 33: teleport.secreports.v1.SecReportsService.UpsertReport:output_type -> google.protobuf.Empty + 30, // 34: teleport.secreports.v1.SecReportsService.GetReport:output_type -> teleport.secreports.v1.Report + 22, // 35: teleport.secreports.v1.SecReportsService.ListReports:output_type -> teleport.secreports.v1.ListReportsResponse + 33, // 36: teleport.secreports.v1.SecReportsService.DeleteReport:output_type -> google.protobuf.Empty + 21, // 37: teleport.secreports.v1.SecReportsService.RunAuditQuery:output_type -> teleport.secreports.v1.RunAuditQueryResponse + 5, // 38: teleport.secreports.v1.SecReportsService.GetAuditQueryResult:output_type -> teleport.secreports.v1.GetAuditQueryResultResponse + 33, // 39: teleport.secreports.v1.SecReportsService.RunReport:output_type -> google.protobuf.Empty + 23, // 40: teleport.secreports.v1.SecReportsService.GetReportResult:output_type -> teleport.secreports.v1.GetReportResultResponse + 34, // 41: teleport.secreports.v1.SecReportsService.GetReportState:output_type -> teleport.secreports.v1.ReportState + 20, // 42: teleport.secreports.v1.SecReportsService.GetSchema:output_type -> teleport.secreports.v1.GetSchemaResponse + 29, // [29:43] is the sub-list for method output_type + 15, // [15:29] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name +} + +func init() { file_teleport_secreports_v1_secreports_service_proto_init() } +func file_teleport_secreports_v1_secreports_service_proto_init() { + if File_teleport_secreports_v1_secreports_service_proto != nil { + return + } + file_teleport_secreports_v1_secreports_proto_init() + if !protoimpl.UnsafeEnabled { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAuditQueryResultRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryResultColumnInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryRowResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryResultSet); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAuditQueryResultResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RunReportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetReportStateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteAuditQueryRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteReportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RunAuditQueryRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpsertAuditQueryRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpsertReportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAuditQueryRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetReportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetReportResultRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListAuditQueriesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListReportsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListAuditQueriesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSchemaRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSchemaResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RunAuditQueryResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListReportsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetReportResultResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReportResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReportSate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSchemaResponse_ViewDesc); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSchemaResponse_ViewDesc_ColumnDesc); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_secreports_v1_secreports_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReportResult_AuditQueryResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_teleport_secreports_v1_secreports_service_proto_rawDesc, + NumEnums: 1, + NumMessages: 28, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_teleport_secreports_v1_secreports_service_proto_goTypes, + DependencyIndexes: file_teleport_secreports_v1_secreports_service_proto_depIdxs, + EnumInfos: file_teleport_secreports_v1_secreports_service_proto_enumTypes, + MessageInfos: file_teleport_secreports_v1_secreports_service_proto_msgTypes, + }.Build() + File_teleport_secreports_v1_secreports_service_proto = out.File + file_teleport_secreports_v1_secreports_service_proto_rawDesc = nil + file_teleport_secreports_v1_secreports_service_proto_goTypes = nil + file_teleport_secreports_v1_secreports_service_proto_depIdxs = nil +} diff --git a/api/gen/proto/go/teleport/secreports/v1/secreports_service_grpc.pb.go b/api/gen/proto/go/teleport/secreports/v1/secreports_service_grpc.pb.go new file mode 100644 index 0000000000000..79a438a08ced6 --- /dev/null +++ b/api/gen/proto/go/teleport/secreports/v1/secreports_service_grpc.pb.go @@ -0,0 +1,633 @@ +// Copyright 2023 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: teleport/secreports/v1/secreports_service.proto + +package secreportsv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + SecReportsService_UpsertAuditQuery_FullMethodName = "/teleport.secreports.v1.SecReportsService/UpsertAuditQuery" + SecReportsService_GetAuditQuery_FullMethodName = "/teleport.secreports.v1.SecReportsService/GetAuditQuery" + SecReportsService_ListAuditQueries_FullMethodName = "/teleport.secreports.v1.SecReportsService/ListAuditQueries" + SecReportsService_DeleteAuditQuery_FullMethodName = "/teleport.secreports.v1.SecReportsService/DeleteAuditQuery" + SecReportsService_UpsertReport_FullMethodName = "/teleport.secreports.v1.SecReportsService/UpsertReport" + SecReportsService_GetReport_FullMethodName = "/teleport.secreports.v1.SecReportsService/GetReport" + SecReportsService_ListReports_FullMethodName = "/teleport.secreports.v1.SecReportsService/ListReports" + SecReportsService_DeleteReport_FullMethodName = "/teleport.secreports.v1.SecReportsService/DeleteReport" + SecReportsService_RunAuditQuery_FullMethodName = "/teleport.secreports.v1.SecReportsService/RunAuditQuery" + SecReportsService_GetAuditQueryResult_FullMethodName = "/teleport.secreports.v1.SecReportsService/GetAuditQueryResult" + SecReportsService_RunReport_FullMethodName = "/teleport.secreports.v1.SecReportsService/RunReport" + SecReportsService_GetReportResult_FullMethodName = "/teleport.secreports.v1.SecReportsService/GetReportResult" + SecReportsService_GetReportState_FullMethodName = "/teleport.secreports.v1.SecReportsService/GetReportState" + SecReportsService_GetSchema_FullMethodName = "/teleport.secreports.v1.SecReportsService/GetSchema" +) + +// SecReportsServiceClient is the client API for SecReportsService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SecReportsServiceClient interface { + // UpsertAuditQuery upsets an audit query. + UpsertAuditQuery(ctx context.Context, in *UpsertAuditQueryRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // GetAuditQuery returns an audit query. + GetAuditQuery(ctx context.Context, in *GetAuditQueryRequest, opts ...grpc.CallOption) (*AuditQuery, error) + // ListAuditQueries returns a paginated list of all Okta import rule resources. + ListAuditQueries(ctx context.Context, in *ListAuditQueriesRequest, opts ...grpc.CallOption) (*ListAuditQueriesResponse, error) + // DeleteAuditQuery deletes an audit query. + DeleteAuditQuery(ctx context.Context, in *DeleteAuditQueryRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // UpsertReport upsets a report. + UpsertReport(ctx context.Context, in *UpsertReportRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // GetReport returns a report. + GetReport(ctx context.Context, in *GetReportRequest, opts ...grpc.CallOption) (*Report, error) + // ListReports returns a paginated list of all Okta import rule resources. + ListReports(ctx context.Context, in *ListReportsRequest, opts ...grpc.CallOption) (*ListReportsResponse, error) + // DeleteReport deletes a security report. + DeleteReport(ctx context.Context, in *DeleteReportRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // RunAuditQuery runs an audit query. + RunAuditQuery(ctx context.Context, in *RunAuditQueryRequest, opts ...grpc.CallOption) (*RunAuditQueryResponse, error) + // GetAuditQueryResult returns an audit query result. + GetAuditQueryResult(ctx context.Context, in *GetAuditQueryResultRequest, opts ...grpc.CallOption) (*GetAuditQueryResultResponse, error) + // RunReport runs a security report. + RunReport(ctx context.Context, in *RunReportRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // GetReportResult returns a security report result. + GetReportResult(ctx context.Context, in *GetReportResultRequest, opts ...grpc.CallOption) (*GetReportResultResponse, error) + // GetReportState returns a security report state. + GetReportState(ctx context.Context, in *GetReportStateRequest, opts ...grpc.CallOption) (*ReportState, error) + // GetSchema returns a schema of audit query. + GetSchema(ctx context.Context, in *GetSchemaRequest, opts ...grpc.CallOption) (*GetSchemaResponse, error) +} + +type secReportsServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewSecReportsServiceClient(cc grpc.ClientConnInterface) SecReportsServiceClient { + return &secReportsServiceClient{cc} +} + +func (c *secReportsServiceClient) UpsertAuditQuery(ctx context.Context, in *UpsertAuditQueryRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SecReportsService_UpsertAuditQuery_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) GetAuditQuery(ctx context.Context, in *GetAuditQueryRequest, opts ...grpc.CallOption) (*AuditQuery, error) { + out := new(AuditQuery) + err := c.cc.Invoke(ctx, SecReportsService_GetAuditQuery_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) ListAuditQueries(ctx context.Context, in *ListAuditQueriesRequest, opts ...grpc.CallOption) (*ListAuditQueriesResponse, error) { + out := new(ListAuditQueriesResponse) + err := c.cc.Invoke(ctx, SecReportsService_ListAuditQueries_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) DeleteAuditQuery(ctx context.Context, in *DeleteAuditQueryRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SecReportsService_DeleteAuditQuery_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) UpsertReport(ctx context.Context, in *UpsertReportRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SecReportsService_UpsertReport_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) GetReport(ctx context.Context, in *GetReportRequest, opts ...grpc.CallOption) (*Report, error) { + out := new(Report) + err := c.cc.Invoke(ctx, SecReportsService_GetReport_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) ListReports(ctx context.Context, in *ListReportsRequest, opts ...grpc.CallOption) (*ListReportsResponse, error) { + out := new(ListReportsResponse) + err := c.cc.Invoke(ctx, SecReportsService_ListReports_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) DeleteReport(ctx context.Context, in *DeleteReportRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SecReportsService_DeleteReport_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) RunAuditQuery(ctx context.Context, in *RunAuditQueryRequest, opts ...grpc.CallOption) (*RunAuditQueryResponse, error) { + out := new(RunAuditQueryResponse) + err := c.cc.Invoke(ctx, SecReportsService_RunAuditQuery_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) GetAuditQueryResult(ctx context.Context, in *GetAuditQueryResultRequest, opts ...grpc.CallOption) (*GetAuditQueryResultResponse, error) { + out := new(GetAuditQueryResultResponse) + err := c.cc.Invoke(ctx, SecReportsService_GetAuditQueryResult_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) RunReport(ctx context.Context, in *RunReportRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SecReportsService_RunReport_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) GetReportResult(ctx context.Context, in *GetReportResultRequest, opts ...grpc.CallOption) (*GetReportResultResponse, error) { + out := new(GetReportResultResponse) + err := c.cc.Invoke(ctx, SecReportsService_GetReportResult_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) GetReportState(ctx context.Context, in *GetReportStateRequest, opts ...grpc.CallOption) (*ReportState, error) { + out := new(ReportState) + err := c.cc.Invoke(ctx, SecReportsService_GetReportState_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *secReportsServiceClient) GetSchema(ctx context.Context, in *GetSchemaRequest, opts ...grpc.CallOption) (*GetSchemaResponse, error) { + out := new(GetSchemaResponse) + err := c.cc.Invoke(ctx, SecReportsService_GetSchema_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SecReportsServiceServer is the server API for SecReportsService service. +// All implementations must embed UnimplementedSecReportsServiceServer +// for forward compatibility +type SecReportsServiceServer interface { + // UpsertAuditQuery upsets an audit query. + UpsertAuditQuery(context.Context, *UpsertAuditQueryRequest) (*emptypb.Empty, error) + // GetAuditQuery returns an audit query. + GetAuditQuery(context.Context, *GetAuditQueryRequest) (*AuditQuery, error) + // ListAuditQueries returns a paginated list of all Okta import rule resources. + ListAuditQueries(context.Context, *ListAuditQueriesRequest) (*ListAuditQueriesResponse, error) + // DeleteAuditQuery deletes an audit query. + DeleteAuditQuery(context.Context, *DeleteAuditQueryRequest) (*emptypb.Empty, error) + // UpsertReport upsets a report. + UpsertReport(context.Context, *UpsertReportRequest) (*emptypb.Empty, error) + // GetReport returns a report. + GetReport(context.Context, *GetReportRequest) (*Report, error) + // ListReports returns a paginated list of all Okta import rule resources. + ListReports(context.Context, *ListReportsRequest) (*ListReportsResponse, error) + // DeleteReport deletes a security report. + DeleteReport(context.Context, *DeleteReportRequest) (*emptypb.Empty, error) + // RunAuditQuery runs an audit query. + RunAuditQuery(context.Context, *RunAuditQueryRequest) (*RunAuditQueryResponse, error) + // GetAuditQueryResult returns an audit query result. + GetAuditQueryResult(context.Context, *GetAuditQueryResultRequest) (*GetAuditQueryResultResponse, error) + // RunReport runs a security report. + RunReport(context.Context, *RunReportRequest) (*emptypb.Empty, error) + // GetReportResult returns a security report result. + GetReportResult(context.Context, *GetReportResultRequest) (*GetReportResultResponse, error) + // GetReportState returns a security report state. + GetReportState(context.Context, *GetReportStateRequest) (*ReportState, error) + // GetSchema returns a schema of audit query. + GetSchema(context.Context, *GetSchemaRequest) (*GetSchemaResponse, error) + mustEmbedUnimplementedSecReportsServiceServer() +} + +// UnimplementedSecReportsServiceServer must be embedded to have forward compatible implementations. +type UnimplementedSecReportsServiceServer struct { +} + +func (UnimplementedSecReportsServiceServer) UpsertAuditQuery(context.Context, *UpsertAuditQueryRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpsertAuditQuery not implemented") +} +func (UnimplementedSecReportsServiceServer) GetAuditQuery(context.Context, *GetAuditQueryRequest) (*AuditQuery, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetAuditQuery not implemented") +} +func (UnimplementedSecReportsServiceServer) ListAuditQueries(context.Context, *ListAuditQueriesRequest) (*ListAuditQueriesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListAuditQueries not implemented") +} +func (UnimplementedSecReportsServiceServer) DeleteAuditQuery(context.Context, *DeleteAuditQueryRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteAuditQuery not implemented") +} +func (UnimplementedSecReportsServiceServer) UpsertReport(context.Context, *UpsertReportRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpsertReport not implemented") +} +func (UnimplementedSecReportsServiceServer) GetReport(context.Context, *GetReportRequest) (*Report, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetReport not implemented") +} +func (UnimplementedSecReportsServiceServer) ListReports(context.Context, *ListReportsRequest) (*ListReportsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListReports not implemented") +} +func (UnimplementedSecReportsServiceServer) DeleteReport(context.Context, *DeleteReportRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteReport not implemented") +} +func (UnimplementedSecReportsServiceServer) RunAuditQuery(context.Context, *RunAuditQueryRequest) (*RunAuditQueryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RunAuditQuery not implemented") +} +func (UnimplementedSecReportsServiceServer) GetAuditQueryResult(context.Context, *GetAuditQueryResultRequest) (*GetAuditQueryResultResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetAuditQueryResult not implemented") +} +func (UnimplementedSecReportsServiceServer) RunReport(context.Context, *RunReportRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method RunReport not implemented") +} +func (UnimplementedSecReportsServiceServer) GetReportResult(context.Context, *GetReportResultRequest) (*GetReportResultResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetReportResult not implemented") +} +func (UnimplementedSecReportsServiceServer) GetReportState(context.Context, *GetReportStateRequest) (*ReportState, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetReportState not implemented") +} +func (UnimplementedSecReportsServiceServer) GetSchema(context.Context, *GetSchemaRequest) (*GetSchemaResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetSchema not implemented") +} +func (UnimplementedSecReportsServiceServer) mustEmbedUnimplementedSecReportsServiceServer() {} + +// UnsafeSecReportsServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SecReportsServiceServer will +// result in compilation errors. +type UnsafeSecReportsServiceServer interface { + mustEmbedUnimplementedSecReportsServiceServer() +} + +func RegisterSecReportsServiceServer(s grpc.ServiceRegistrar, srv SecReportsServiceServer) { + s.RegisterService(&SecReportsService_ServiceDesc, srv) +} + +func _SecReportsService_UpsertAuditQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpsertAuditQueryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).UpsertAuditQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_UpsertAuditQuery_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).UpsertAuditQuery(ctx, req.(*UpsertAuditQueryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_GetAuditQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetAuditQueryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).GetAuditQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_GetAuditQuery_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).GetAuditQuery(ctx, req.(*GetAuditQueryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_ListAuditQueries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListAuditQueriesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).ListAuditQueries(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_ListAuditQueries_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).ListAuditQueries(ctx, req.(*ListAuditQueriesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_DeleteAuditQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteAuditQueryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).DeleteAuditQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_DeleteAuditQuery_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).DeleteAuditQuery(ctx, req.(*DeleteAuditQueryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_UpsertReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpsertReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).UpsertReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_UpsertReport_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).UpsertReport(ctx, req.(*UpsertReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_GetReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).GetReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_GetReport_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).GetReport(ctx, req.(*GetReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_ListReports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListReportsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).ListReports(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_ListReports_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).ListReports(ctx, req.(*ListReportsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_DeleteReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).DeleteReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_DeleteReport_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).DeleteReport(ctx, req.(*DeleteReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_RunAuditQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RunAuditQueryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).RunAuditQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_RunAuditQuery_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).RunAuditQuery(ctx, req.(*RunAuditQueryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_GetAuditQueryResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetAuditQueryResultRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).GetAuditQueryResult(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_GetAuditQueryResult_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).GetAuditQueryResult(ctx, req.(*GetAuditQueryResultRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_RunReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RunReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).RunReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_RunReport_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).RunReport(ctx, req.(*RunReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_GetReportResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetReportResultRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).GetReportResult(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_GetReportResult_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).GetReportResult(ctx, req.(*GetReportResultRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_GetReportState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetReportStateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).GetReportState(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_GetReportState_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).GetReportState(ctx, req.(*GetReportStateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecReportsService_GetSchema_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSchemaRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecReportsServiceServer).GetSchema(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecReportsService_GetSchema_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecReportsServiceServer).GetSchema(ctx, req.(*GetSchemaRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// SecReportsService_ServiceDesc is the grpc.ServiceDesc for SecReportsService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SecReportsService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "teleport.secreports.v1.SecReportsService", + HandlerType: (*SecReportsServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpsertAuditQuery", + Handler: _SecReportsService_UpsertAuditQuery_Handler, + }, + { + MethodName: "GetAuditQuery", + Handler: _SecReportsService_GetAuditQuery_Handler, + }, + { + MethodName: "ListAuditQueries", + Handler: _SecReportsService_ListAuditQueries_Handler, + }, + { + MethodName: "DeleteAuditQuery", + Handler: _SecReportsService_DeleteAuditQuery_Handler, + }, + { + MethodName: "UpsertReport", + Handler: _SecReportsService_UpsertReport_Handler, + }, + { + MethodName: "GetReport", + Handler: _SecReportsService_GetReport_Handler, + }, + { + MethodName: "ListReports", + Handler: _SecReportsService_ListReports_Handler, + }, + { + MethodName: "DeleteReport", + Handler: _SecReportsService_DeleteReport_Handler, + }, + { + MethodName: "RunAuditQuery", + Handler: _SecReportsService_RunAuditQuery_Handler, + }, + { + MethodName: "GetAuditQueryResult", + Handler: _SecReportsService_GetAuditQueryResult_Handler, + }, + { + MethodName: "RunReport", + Handler: _SecReportsService_RunReport_Handler, + }, + { + MethodName: "GetReportResult", + Handler: _SecReportsService_GetReportResult_Handler, + }, + { + MethodName: "GetReportState", + Handler: _SecReportsService_GetReportState_Handler, + }, + { + MethodName: "GetSchema", + Handler: _SecReportsService_GetSchema_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "teleport/secreports/v1/secreports_service.proto", +} diff --git a/api/proto/teleport/legacy/client/proto/event.proto b/api/proto/teleport/legacy/client/proto/event.proto index adfcd11d9fe9a..17d2e0e82bb29 100644 --- a/api/proto/teleport/legacy/client/proto/event.proto +++ b/api/proto/teleport/legacy/client/proto/event.proto @@ -20,6 +20,7 @@ import "teleport/accesslist/v1/accesslist.proto"; import "teleport/discoveryconfig/v1/discoveryconfig.proto"; import "teleport/externalcloudaudit/v1/externalcloudaudit.proto"; import "teleport/legacy/types/types.proto"; +import "teleport/secreports/v1/secreports.proto"; import "teleport/userloginstate/v1/userloginstate.proto"; option go_package = "github.com/gravitational/teleport/api/client/proto"; @@ -139,5 +140,11 @@ message Event { teleport.discoveryconfig.v1.DiscoveryConfig DiscoveryConfig = 48; // ExternalCloudAudit is an ExternalCloudAudit resource. teleport.externalcloudaudit.v1.ExternalCloudAudit ExternalCloudAudit = 49; + // AuditQuery is an audit query resource. + teleport.secreports.v1.AuditQuery AuditQuery = 50; + // SecurityReport is a security report resource. + teleport.secreports.v1.Report Report = 51; + // SecurityReportState is a security report state resource. + teleport.secreports.v1.ReportState ReportState = 52; } } diff --git a/api/proto/teleport/legacy/types/events/events.proto b/api/proto/teleport/legacy/types/events/events.proto index dacaf7826d505..b0a327156bd31 100644 --- a/api/proto/teleport/legacy/types/events/events.proto +++ b/api/proto/teleport/legacy/types/events/events.proto @@ -2171,6 +2171,13 @@ message KubeRequest { (gogoproto.embed) = true, (gogoproto.jsontag) = "" ]; + + // SessionMetadata is a common event session metadata. + SessionMetadata Session = 13 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; } // AppMetadata contains common application information. @@ -3234,6 +3241,13 @@ message InstanceJoin { (gogoproto.jsontag) = "attributes,omitempty", (gogoproto.casttype) = "Struct" ]; + // TokenExpires contain information about token expiration time. + // In case of static token the TokenExpiration time is to the Unix epoch start time. + google.protobuf.Timestamp TokenExpires = 9 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "token_expires" + ]; } // Unknown is a fallback event used when we don't recognize an event from the backend. @@ -3486,6 +3500,8 @@ message OneOf { events.AccessListMemberUpdate AccessListMemberUpdate = 131; events.AccessListMemberDelete AccessListMemberDelete = 132; events.AccessListMemberDeleteAllForAccessList AccessListMemberDeleteAllForAccessList = 133; + events.AuditQueryRun AuditQueryRun = 134; + events.SecurityReportRun SecurityReportRun = 135; } } @@ -5198,3 +5214,81 @@ message AccessListReview { (gogoproto.jsontag) = "" ]; } + +// AuditQueryRun is emitted when a user runs an audit query. +message AuditQueryRun { + // Metadata is common event metadata. + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + // User is common user event metadata. + UserMetadata User = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // Status indicates whether the read was successful. + Status Status = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // Query contains additional query information. + AuditQueryDetails Query = 4 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; +} + +// AuditQueryDetails contains additional query information. +message AuditQueryDetails { + // Name is the name of the query. + string Name = 1 [(gogoproto.jsontag) = "name,omitempty"]; + // Query is the query that was run. + string Query = 2 [(gogoproto.jsontag) = "query,omitempty"]; + // Days is the number of days time range for the query. + int32 Days = 3 [(gogoproto.jsontag) = "days,omitempty"]; + // ExecutionTimeInMillis is the total execution time of the query. + int64 ExecutionTimeInMillis = 4 [(gogoproto.jsontag) = "total_execution_time_in_millis,omitempty"]; + // DataScannedInBytes is the amount of data scanned by the query. + int64 DataScannedInBytes = 5 [(gogoproto.jsontag) = "data_scanned_in_bytes"]; +} + +// SecurityReportRun is emitted when a user runs an audit query. +message SecurityReportRun { + // Metadata is common event metadata. + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + // User is common user event metadata. + UserMetadata User = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // Status indicates whether the read was successful. + Status Status = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // Query is the query that was run. + string Name = 4 [(gogoproto.jsontag) = "name,omitempty"]; + // Version is the version of security report. + string Version = 5 [(gogoproto.jsontag) = "version,omitempty"]; + // TotalExecutionTimeInMillis is the total execution time of the query. + int64 TotalExecutionTimeInMillis = 6 [(gogoproto.jsontag) = "total_execution_time_in_millis,omitempty"]; + // TotalDataScannedInBytes is the amount of data scanned by the query. + int64 TotalDataScannedInBytes = 7 [(gogoproto.jsontag) = "total_data_scanned_in_bytes"]; + // AuditQueries is the list of audit queries that were run. + repeated AuditQueryDetails AuditQueries = 8 [(gogoproto.jsontag) = "audit_queries,omitempty"]; +} diff --git a/api/proto/teleport/secreports/v1/secreports.proto b/api/proto/teleport/secreports/v1/secreports.proto new file mode 100644 index 0000000000000..9088dedf1e02d --- /dev/null +++ b/api/proto/teleport/secreports/v1/secreports.proto @@ -0,0 +1,79 @@ +// Copyright 2023 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package teleport.secreports.v1; + +import "teleport/header/v1/resourceheader.proto"; + +option go_package = "github.com/gravitational/teleport/api/gen/proto/go/teleport/secreports/v1;secreportsv1"; + +// AuditQuery is audit query resource. +message AuditQuery { + // header is the header for //the resource. + teleport.header.v1.ResourceHeader header = 1; + // spec is audit query spec. + AuditQuerySpec spec = 2; +} + +// AuditQuerySpec is audit query spec. +message AuditQuerySpec { + // name is the name of the audit query. + string name = 1; + // title is the title of the audit query. + string title = 2; + // query is the SQL Query for the audit query. + string query = 3; + // description is the description of the audit query. + string description = 4; +} + +// Report is security report resource. +message Report { + // header is the header for the resource. + teleport.header.v1.ResourceHeader header = 1; + // spec is the security report spec. + ReportSpec spec = 2; +} + +// ReportSpec is security report spec. +message ReportSpec { + // name is the name of the security report. + string name = 1; + // title is the title of the security report. + string description = 2; + // description is the description of the security report + repeated AuditQuerySpec audit_queries = 3; + // title is the title of the security report. + string title = 4; + // version is the version of the security report. + string version = 5; +} + +// ReportState is security report state resource. +message ReportState { + // header is the header for the resource. + teleport.header.v1.ResourceHeader header = 1; + // spec is the security report state spec. + ReportStateSpec spec = 2; +} + +// ReportStateSpec is security report state spec. +message ReportStateSpec { + // state is the state of the security report. + string state = 1; + // updated_at is the time when the security report state was updated. + string updated_at = 2; +} diff --git a/api/proto/teleport/secreports/v1/secreports_service.proto b/api/proto/teleport/secreports/v1/secreports_service.proto new file mode 100644 index 0000000000000..1aa243f5d588d --- /dev/null +++ b/api/proto/teleport/secreports/v1/secreports_service.proto @@ -0,0 +1,293 @@ +// Copyright 2023 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package teleport.secreports.v1; + +import "google/protobuf/empty.proto"; +import "teleport/header/v1/resourceheader.proto"; +import "teleport/secreports/v1/secreports.proto"; + +option go_package = "github.com/gravitational/teleport/api/gen/proto/go/teleport/secreports/v1;secreportsv1"; + +// SecReportsService is a service that manages security reports. +service SecReportsService { + // UpsertAuditQuery upsets an audit query. + rpc UpsertAuditQuery(UpsertAuditQueryRequest) returns (google.protobuf.Empty); + // GetAuditQuery returns an audit query. + rpc GetAuditQuery(GetAuditQueryRequest) returns (AuditQuery); + // ListAuditQueries returns a paginated list of all Okta import rule resources. + rpc ListAuditQueries(ListAuditQueriesRequest) returns (ListAuditQueriesResponse); + // DeleteAuditQuery deletes an audit query. + rpc DeleteAuditQuery(DeleteAuditQueryRequest) returns (google.protobuf.Empty); + + // UpsertReport upsets a report. + rpc UpsertReport(UpsertReportRequest) returns (google.protobuf.Empty); + // GetReport returns a report. + rpc GetReport(GetReportRequest) returns (Report); + // ListReports returns a paginated list of all Okta import rule resources. + rpc ListReports(ListReportsRequest) returns (ListReportsResponse); + // DeleteReport deletes a security report. + rpc DeleteReport(DeleteReportRequest) returns (google.protobuf.Empty); + + // RunAuditQuery runs an audit query. + rpc RunAuditQuery(RunAuditQueryRequest) returns (RunAuditQueryResponse); + // GetAuditQueryResult returns an audit query result. + rpc GetAuditQueryResult(GetAuditQueryResultRequest) returns (GetAuditQueryResultResponse); + + // RunReport runs a security report. + rpc RunReport(RunReportRequest) returns (google.protobuf.Empty); + // GetReportResult returns a security report result. + rpc GetReportResult(GetReportResultRequest) returns (GetReportResultResponse); + // GetReportState returns a security report state. + rpc GetReportState(GetReportStateRequest) returns (ReportState); + + // GetSchema returns a schema of audit query. + rpc GetSchema(GetSchemaRequest) returns (GetSchemaResponse); +} + +// GetAuditQueryResultRequest is a request for GetAuditQueryResult. +message GetAuditQueryResultRequest { + // result_id is a unique id of the result. + string result_id = 1; + // next_token is a token for pagination. + string next_token = 2; + // max_results is a maximum number of results to return. + int32 max_results = 3; +} + +// QueryResultColumnInfo is a column info. +message QueryResultColumnInfo { + // name is name of the column. + string name = 1; + // type is type of the column. + string type = 2; +} + +// QueryRowResult is a row result. +message QueryRowResult { + // data is a list of values. + repeated string data = 1; +} + +// QueryResultSet is a result set. +message QueryResultSet { + // column_info contains information about columns. + repeated QueryResultColumnInfo column_info = 1; + // rows is a list of rows containing values. + repeated QueryRowResult rows = 2; +} + +// GetAuditQueryResultResponse contains an audit query result. +message GetAuditQueryResultResponse { + // result is a result set. + QueryResultSet result = 1; + // next_token is a token for pagination. + string next_token = 2; + // result_id is a unique id of the result. + string result_id = 3; +} + +// RunReportRequest is a request for RunReport. +message RunReportRequest { + // name is a name of the security report. + string name = 1; + // days is a time range is days. + uint32 days = 2; +} + +// GetStateRequest is a request for GetReportState. +message GetReportStateRequest { + // name is a name of the security report. + string name = 1; + // days is a time range is days. + uint32 days = 2; +} + +// DeleteAuditQueryRequest is audit query delete request. +message DeleteAuditQueryRequest { + // name is the name of the audit query to delete. + string name = 1; +} + +// DeleteReportRequest is security report delete request. +message DeleteReportRequest { + // name is the name of the security report to delete. + string name = 1; +} + +// RunAuditQueryRequest is audit query run request. +message RunAuditQueryRequest { + // name is the name of the audit query to run. + string query = 1; + // days is a time range is days. + int32 days = 2; +} + +// UpsertAuditQueryRequest is audit query upsert request. +message UpsertAuditQueryRequest { + // audit_query is the audit query to upsert. + AuditQuery audit_query = 1; +} + +// UpsertReportRequest is security report upsert request. +message UpsertReportRequest { + // report is the security report to upsert. + Report report = 1; +} + +// GetAuditQueryRequest is audit query get request. +message GetAuditQueryRequest { + // name is the name of the audit query to get. + string name = 1; +} + +// GetReportRequest is security report get request. +message GetReportRequest { + // name is the name of the security report to get. + string name = 1; +} + +// GetReportResultRequest is report get request. +message GetReportResultRequest { + // name is the name of the security report to get. + string name = 1; + // days is a time range is days. + uint32 days = 2; + // execution_id is a unique id of the execution. + string execution_id = 3; +} + +// ListAuditQueriesRequest is audit query list request. +message ListAuditQueriesRequest { + // page_size is the number of results to return. + int32 page_size = 1; + // page_token is the next_token value returned from a previous List request if any. + string page_token = 2; +} + +// ListAuditQueryResponse is audit query list response. +message ListReportsRequest { + // page_size is the number of results to return. + int32 page_size = 1; + // page_token is the next_token value returned from a previous List request if any. + string page_token = 2; +} + +// ListAuditQueriesResponse is audit query list response. +message ListAuditQueriesResponse { + // queries is a list of audit queries. + repeated AuditQuery queries = 1; + // next_page_token is the next page token. If there are no more results, it will be empty. + string next_page_token = 2; +} + +// GetSchemaRequest is a request for GetSchema. +message GetSchemaRequest {} + +// GetSchemaResponse is a response for GetSchema. +message GetSchemaResponse { + // ViewDesc is a description of view. + message ViewDesc { + // ColumnDesc is a description of column. + message ColumnDesc { + // name is the name of the column. + string name = 1; + // type is the type of the column. + string type = 2; + // desc is the description of the column. + string desc = 3; + } + // name is the name of the view. + string name = 1; + // desc is the description of the view. + string desc = 2; + // columns is the list of columns. + repeated ColumnDesc columns = 3; + } + // views is the list of views. + repeated ViewDesc views = 1; +} + +// RunAuditQueryResponse is audit query run response. +message RunAuditQueryResponse { + // result_id is a unique id of the result. + string result_id = 1; +} + +// ListReportResponse is security report list response. +message ListReportsResponse { + // reports is a list of security reports. + repeated Report reports = 1; + // next_page_token is the next page token. If there are no more results, it will be empty. + string next_page_token = 2; +} + +// GetReportResultResponse is report result get response. +message GetReportResultResponse { + // result is a report execution result. + ReportResult result = 1; +} + +// Report is the result of security report. +message ReportResult { + // name is a name of the security report. + string name = 1; + // description is a description of the security report. + string description = 2; + // AuditQueryResult is a result of audit query. + message AuditQueryResult { + // audit_query is the audit query spec containing information about audit query. + AuditQuerySpec audit_query = 1; + // result is the result set. + QueryResultSet result = 2; + // result_id is a unique id of the result. + string result_id = 3; + // execution_time_in_millis is a time in milliseconds when the audit query was executed. + int64 execution_time_in_millis = 4; + // data_scanned_in_bytes is a number of bytes scanned. + int64 data_scanned_in_bytes = 5; + } + // audit_query_results is a list of audit query results. + repeated AuditQueryResult audit_query_results = 3; + // updated_at is a time when the security report was updated. + string updated_at = 4; + + // total_execution_time_in_millis is a time in milliseconds when the security report was executed. + int64 total_execution_time_in_millis = 5; + // total_data_scanned_in_bytes is a number of bytes scanned. + int64 total_data_scanned_in_bytes = 6; +} + +// Report is a security report. +message ReportSate { + // name is a name of the security report. + enum State { + // STATE_UNSPECIFIED is an unspecified state. + STATE_UNSPECIFIED = 0; + // STATE_ERROR is an error state. + STATE_ERROR = 1; + // STATE_SUCCESS is a success state. + STATE_SUCCESS = 2; + // STATE_RUNNING is a running state. + STATE_RUNNING = 3; + } + // header is a resource header. + teleport.header.v1.ResourceHeader header = 1; + // state is a state of the security report. + State state = 2; + // updated_at is a time when the security report state was updated. + string updated_at = 3; +} diff --git a/api/types/constants.go b/api/types/constants.go index 92dc34a4a85ec..d165cc00c4b35 100644 --- a/api/types/constants.go +++ b/api/types/constants.go @@ -480,6 +480,14 @@ const ( // KindDiscoveryConfig is a DiscoveryConfig resource. // Used for adding additional matchers in Discovery Service. KindDiscoveryConfig = "discovery_config" + // KindAuditQuery is an AuditQuery resource. + KindAuditQuery = "audit_query" + // KindSecurityReport is a SecurityReport resource. + KindSecurityReport = "security_report" + // KindSecurityReportState is a SecurityReportState resource. + KindSecurityReportState = "security_report_state" + // KindSecurityReportCostLimiter const limiter + KindSecurityReportCostLimiter = "security_report_cost_limiter" // V7 is the seventh version of resources. V7 = "v7" diff --git a/api/types/events/events.pb.go b/api/types/events/events.pb.go index c22dda568610b..665974dfb11fc 100644 --- a/api/types/events/events.pb.go +++ b/api/types/events/events.pb.go @@ -3772,9 +3772,11 @@ type KubeRequest struct { ResponseCode int32 `protobuf:"varint,11,opt,name=ResponseCode,proto3" json:"response_code"` // Kubernetes has information about a kubernetes cluster, if applicable. KubernetesClusterMetadata `protobuf:"bytes,12,opt,name=Kubernetes,proto3,embedded=Kubernetes" json:""` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // SessionMetadata is a common event session metadata. + SessionMetadata `protobuf:"bytes,13,opt,name=Session,proto3,embedded=Session" json:""` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *KubeRequest) Reset() { *m = KubeRequest{} } @@ -5648,10 +5650,13 @@ type InstanceJoin struct { // for the 'token' join method where the token name is a secret value. TokenName string `protobuf:"bytes,7,opt,name=TokenName,proto3" json:"token_name,omitempty"` // Attributes is a map of attributes received from the join method provider. - Attributes *Struct `protobuf:"bytes,8,opt,name=Attributes,proto3,casttype=Struct" json:"attributes,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Attributes *Struct `protobuf:"bytes,8,opt,name=Attributes,proto3,casttype=Struct" json:"attributes,omitempty"` + // TokenExpires contain information about token expiration time. + // In case of static token the TokenExpiration time is to the Unix epoch start time. + TokenExpires time.Time `protobuf:"bytes,9,opt,name=TokenExpires,proto3,stdtime" json:"token_expires"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *InstanceJoin) Reset() { *m = InstanceJoin{} } @@ -6025,6 +6030,8 @@ type OneOf struct { // *OneOf_AccessListMemberUpdate // *OneOf_AccessListMemberDelete // *OneOf_AccessListMemberDeleteAllForAccessList + // *OneOf_AuditQueryRun + // *OneOf_SecurityReportRun Event isOneOf_Event `protobuf_oneof:"Event"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -6466,6 +6473,12 @@ type OneOf_AccessListMemberDelete struct { type OneOf_AccessListMemberDeleteAllForAccessList struct { AccessListMemberDeleteAllForAccessList *AccessListMemberDeleteAllForAccessList `protobuf:"bytes,133,opt,name=AccessListMemberDeleteAllForAccessList,proto3,oneof" json:"AccessListMemberDeleteAllForAccessList,omitempty"` } +type OneOf_AuditQueryRun struct { + AuditQueryRun *AuditQueryRun `protobuf:"bytes,134,opt,name=AuditQueryRun,proto3,oneof" json:"AuditQueryRun,omitempty"` +} +type OneOf_SecurityReportRun struct { + SecurityReportRun *SecurityReportRun `protobuf:"bytes,135,opt,name=SecurityReportRun,proto3,oneof" json:"SecurityReportRun,omitempty"` +} func (*OneOf_UserLogin) isOneOf_Event() {} func (*OneOf_UserCreate) isOneOf_Event() {} @@ -6599,6 +6612,8 @@ func (*OneOf_AccessListMemberCreate) isOneOf_Event() {} func (*OneOf_AccessListMemberUpdate) isOneOf_Event() {} func (*OneOf_AccessListMemberDelete) isOneOf_Event() {} func (*OneOf_AccessListMemberDeleteAllForAccessList) isOneOf_Event() {} +func (*OneOf_AuditQueryRun) isOneOf_Event() {} +func (*OneOf_SecurityReportRun) isOneOf_Event() {} func (m *OneOf) GetEvent() isOneOf_Event { if m != nil { @@ -7531,6 +7546,20 @@ func (m *OneOf) GetAccessListMemberDeleteAllForAccessList() *AccessListMemberDel return nil } +func (m *OneOf) GetAuditQueryRun() *AuditQueryRun { + if x, ok := m.GetEvent().(*OneOf_AuditQueryRun); ok { + return x.AuditQueryRun + } + return nil +} + +func (m *OneOf) GetSecurityReportRun() *SecurityReportRun { + if x, ok := m.GetEvent().(*OneOf_SecurityReportRun); ok { + return x.SecurityReportRun + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*OneOf) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -7666,6 +7695,8 @@ func (*OneOf) XXX_OneofWrappers() []interface{} { (*OneOf_AccessListMemberUpdate)(nil), (*OneOf_AccessListMemberDelete)(nil), (*OneOf_AccessListMemberDeleteAllForAccessList)(nil), + (*OneOf_AuditQueryRun)(nil), + (*OneOf_SecurityReportRun)(nil), } } @@ -10626,6 +10657,160 @@ func (m *AccessListReview) XXX_DiscardUnknown() { var xxx_messageInfo_AccessListReview proto.InternalMessageInfo +// AuditQueryRun is emitted when a user runs an audit query. +type AuditQueryRun struct { + // Metadata is common event metadata. + Metadata `protobuf:"bytes,1,opt,name=Metadata,proto3,embedded=Metadata" json:""` + // User is common user event metadata. + UserMetadata `protobuf:"bytes,2,opt,name=User,proto3,embedded=User" json:""` + // Status indicates whether the read was successful. + Status `protobuf:"bytes,3,opt,name=Status,proto3,embedded=Status" json:""` + // Query contains additional query information. + AuditQueryDetails `protobuf:"bytes,4,opt,name=Query,proto3,embedded=Query" json:""` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AuditQueryRun) Reset() { *m = AuditQueryRun{} } +func (m *AuditQueryRun) String() string { return proto.CompactTextString(m) } +func (*AuditQueryRun) ProtoMessage() {} +func (*AuditQueryRun) Descriptor() ([]byte, []int) { + return fileDescriptor_007ba1c3d6266d56, []int{166} +} +func (m *AuditQueryRun) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuditQueryRun) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AuditQueryRun.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AuditQueryRun) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuditQueryRun.Merge(m, src) +} +func (m *AuditQueryRun) XXX_Size() int { + return m.Size() +} +func (m *AuditQueryRun) XXX_DiscardUnknown() { + xxx_messageInfo_AuditQueryRun.DiscardUnknown(m) +} + +var xxx_messageInfo_AuditQueryRun proto.InternalMessageInfo + +// AuditQueryDetails contains additional query information. +type AuditQueryDetails struct { + // Name is the name of the query. + Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"name,omitempty"` + // Query is the query that was run. + Query string `protobuf:"bytes,2,opt,name=Query,proto3" json:"query,omitempty"` + // Days is the number of days time range for the query. + Days int32 `protobuf:"varint,3,opt,name=Days,proto3" json:"days,omitempty"` + // ExecutionTimeInMillis is the total execution time of the query. + ExecutionTimeInMillis int64 `protobuf:"varint,4,opt,name=ExecutionTimeInMillis,proto3" json:"total_execution_time_in_millis,omitempty"` + // DataScannedInBytes is the amount of data scanned by the query. + DataScannedInBytes int64 `protobuf:"varint,5,opt,name=DataScannedInBytes,proto3" json:"data_scanned_in_bytes"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AuditQueryDetails) Reset() { *m = AuditQueryDetails{} } +func (m *AuditQueryDetails) String() string { return proto.CompactTextString(m) } +func (*AuditQueryDetails) ProtoMessage() {} +func (*AuditQueryDetails) Descriptor() ([]byte, []int) { + return fileDescriptor_007ba1c3d6266d56, []int{167} +} +func (m *AuditQueryDetails) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuditQueryDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AuditQueryDetails.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AuditQueryDetails) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuditQueryDetails.Merge(m, src) +} +func (m *AuditQueryDetails) XXX_Size() int { + return m.Size() +} +func (m *AuditQueryDetails) XXX_DiscardUnknown() { + xxx_messageInfo_AuditQueryDetails.DiscardUnknown(m) +} + +var xxx_messageInfo_AuditQueryDetails proto.InternalMessageInfo + +// SecurityReportRun is emitted when a user runs an audit query. +type SecurityReportRun struct { + // Metadata is common event metadata. + Metadata `protobuf:"bytes,1,opt,name=Metadata,proto3,embedded=Metadata" json:""` + // User is common user event metadata. + UserMetadata `protobuf:"bytes,2,opt,name=User,proto3,embedded=User" json:""` + // Status indicates whether the read was successful. + Status `protobuf:"bytes,3,opt,name=Status,proto3,embedded=Status" json:""` + // Query is the query that was run. + Name string `protobuf:"bytes,4,opt,name=Name,proto3" json:"name,omitempty"` + // Version is the version of security report. + Version string `protobuf:"bytes,5,opt,name=Version,proto3" json:"version,omitempty"` + // TotalExecutionTimeInMillis is the total execution time of the query. + TotalExecutionTimeInMillis int64 `protobuf:"varint,6,opt,name=TotalExecutionTimeInMillis,proto3" json:"total_execution_time_in_millis,omitempty"` + // TotalDataScannedInBytes is the amount of data scanned by the query. + TotalDataScannedInBytes int64 `protobuf:"varint,7,opt,name=TotalDataScannedInBytes,proto3" json:"total_data_scanned_in_bytes"` + // AuditQueries is the list of audit queries that were run. + AuditQueries []*AuditQueryDetails `protobuf:"bytes,8,rep,name=AuditQueries,proto3" json:"audit_queries,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SecurityReportRun) Reset() { *m = SecurityReportRun{} } +func (m *SecurityReportRun) String() string { return proto.CompactTextString(m) } +func (*SecurityReportRun) ProtoMessage() {} +func (*SecurityReportRun) Descriptor() ([]byte, []int) { + return fileDescriptor_007ba1c3d6266d56, []int{168} +} +func (m *SecurityReportRun) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecurityReportRun) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SecurityReportRun.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SecurityReportRun) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecurityReportRun.Merge(m, src) +} +func (m *SecurityReportRun) XXX_Size() int { + return m.Size() +} +func (m *SecurityReportRun) XXX_DiscardUnknown() { + xxx_messageInfo_SecurityReportRun.DiscardUnknown(m) +} + +var xxx_messageInfo_SecurityReportRun proto.InternalMessageInfo + func init() { proto.RegisterEnum("events.EventAction", EventAction_name, EventAction_value) proto.RegisterEnum("events.SFTPAction", SFTPAction_name, SFTPAction_value) @@ -10810,6 +10995,9 @@ func init() { proto.RegisterType((*AccessListMemberDelete)(nil), "events.AccessListMemberDelete") proto.RegisterType((*AccessListMemberDeleteAllForAccessList)(nil), "events.AccessListMemberDeleteAllForAccessList") proto.RegisterType((*AccessListReview)(nil), "events.AccessListReview") + proto.RegisterType((*AuditQueryRun)(nil), "events.AuditQueryRun") + proto.RegisterType((*AuditQueryDetails)(nil), "events.AuditQueryDetails") + proto.RegisterType((*SecurityReportRun)(nil), "events.SecurityReportRun") } func init() { @@ -10817,758 +11005,779 @@ func init() { } var fileDescriptor_007ba1c3d6266d56 = []byte{ - // 12014 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x8c, 0x24, 0xc7, - 0x75, 0x18, 0xbe, 0xf3, 0xb1, 0x33, 0xb3, 0x35, 0xfb, 0x31, 0x5b, 0xf7, 0xd5, 0x3c, 0xde, 0xdd, - 0x1c, 0x9b, 0xd4, 0xf1, 0x8e, 0x3c, 0xee, 0x89, 0xc7, 0x13, 0x4f, 0xa4, 0x48, 0x91, 0xb3, 0x33, - 0xb3, 0xb7, 0xc3, 0xdb, 0x8f, 0x61, 0xcf, 0x1e, 0x8f, 0x94, 0x2c, 0x8e, 0x7b, 0xa7, 0xeb, 0x76, - 0x9b, 0x37, 0x33, 0x3d, 0xea, 0xee, 0xb9, 0xbd, 0xe5, 0xef, 0x97, 0x44, 0x8a, 0xe5, 0x44, 0x0e, - 0x64, 0xc3, 0x50, 0x60, 0x38, 0x40, 0x02, 0xc4, 0x4e, 0x10, 0xc0, 0x09, 0x1c, 0x2b, 0x4e, 0x02, - 0x3b, 0x4e, 0x62, 0x24, 0x8e, 0x94, 0x84, 0x8e, 0x6c, 0xd9, 0x4e, 0x1c, 0x07, 0x08, 0x90, 0x95, - 0xa3, 0xc0, 0x09, 0xb0, 0x48, 0x00, 0x01, 0x11, 0x12, 0xc7, 0xf9, 0x44, 0xbd, 0xaa, 0xee, 0xae, - 0xea, 0xee, 0xd9, 0xcf, 0xa3, 0x97, 0xcb, 0xdd, 0x7f, 0xee, 0x76, 0xde, 0x7b, 0xf5, 0xaa, 0xfa, - 0xd5, 0xab, 0x57, 0xaf, 0xaa, 0x5e, 0xbd, 0x42, 0x57, 0x5c, 0xd2, 0x26, 0x3d, 0xcb, 0x76, 0xaf, - 0xb5, 0xc9, 0x8a, 0xde, 0x5a, 0xbf, 0xe6, 0xae, 0xf7, 0x88, 0x73, 0x8d, 0x3c, 0x20, 0x5d, 0xd7, - 0xfb, 0x6f, 0xaa, 0x67, 0x5b, 0xae, 0x85, 0x33, 0xec, 0xd7, 0xd9, 0x93, 0x2b, 0xd6, 0x8a, 0x05, - 0xa0, 0x6b, 0xf4, 0x2f, 0x86, 0x3d, 0x7b, 0x6e, 0xc5, 0xb2, 0x56, 0xda, 0xe4, 0x1a, 0xfc, 0x5a, - 0xee, 0xdf, 0xbb, 0xe6, 0xb8, 0x76, 0xbf, 0xe5, 0x72, 0x6c, 0x31, 0x8c, 0x75, 0xcd, 0x0e, 0x71, - 0x5c, 0xbd, 0xd3, 0xe3, 0x04, 0x17, 0xc2, 0x04, 0x6b, 0xb6, 0xde, 0xeb, 0x11, 0x9b, 0x57, 0x7e, - 0xf6, 0x89, 0xf8, 0x76, 0xc2, 0xbf, 0x9c, 0xe4, 0xb9, 0x78, 0x12, 0x8f, 0x51, 0x88, 0xa3, 0xfa, - 0xf5, 0x24, 0xca, 0xcd, 0x13, 0x57, 0x37, 0x74, 0x57, 0xc7, 0xe7, 0xd0, 0x70, 0xad, 0x6b, 0x90, - 0x87, 0x4a, 0xe2, 0x62, 0xe2, 0x72, 0x6a, 0x3a, 0xb3, 0xb9, 0x51, 0x4c, 0x12, 0x53, 0x63, 0x40, - 0x7c, 0x1e, 0xa5, 0x97, 0xd6, 0x7b, 0x44, 0x49, 0x5e, 0x4c, 0x5c, 0x1e, 0x99, 0x1e, 0xd9, 0xdc, - 0x28, 0x0e, 0x83, 0x2c, 0x34, 0x00, 0xe3, 0x27, 0x50, 0xb2, 0x56, 0x51, 0x52, 0x80, 0x9c, 0xdc, - 0xdc, 0x28, 0x8e, 0xf5, 0x4d, 0xe3, 0xaa, 0xd5, 0x31, 0x5d, 0xd2, 0xe9, 0xb9, 0xeb, 0x5a, 0xb2, - 0x56, 0xc1, 0x97, 0x50, 0xba, 0x6c, 0x19, 0x44, 0x49, 0x03, 0x11, 0xde, 0xdc, 0x28, 0x8e, 0xb7, - 0x2c, 0x83, 0x08, 0x54, 0x80, 0xc7, 0xaf, 0xa3, 0xf4, 0x92, 0xd9, 0x21, 0xca, 0xf0, 0xc5, 0xc4, - 0xe5, 0xfc, 0xf5, 0xb3, 0x53, 0x4c, 0x2a, 0x53, 0x9e, 0x54, 0xa6, 0x96, 0x3c, 0xb1, 0x4d, 0x17, - 0x3e, 0xd8, 0x28, 0x0e, 0x6d, 0x6e, 0x14, 0xd3, 0x54, 0x92, 0x3f, 0xf9, 0xdd, 0x62, 0x42, 0x83, - 0x92, 0xf8, 0x15, 0x94, 0x2f, 0xb7, 0xfb, 0x8e, 0x4b, 0xec, 0x05, 0xbd, 0x43, 0x94, 0x0c, 0x54, - 0x78, 0x76, 0x73, 0xa3, 0x78, 0xba, 0xc5, 0xc0, 0xcd, 0xae, 0xde, 0x11, 0x2b, 0x16, 0xc9, 0xd5, - 0xf7, 0xd0, 0x44, 0x83, 0x38, 0x8e, 0x69, 0x75, 0x7d, 0xd1, 0x7c, 0x02, 0x8d, 0x70, 0x50, 0xad, - 0x02, 0xe2, 0x19, 0x99, 0xce, 0x6e, 0x6e, 0x14, 0x53, 0x8e, 0x69, 0x68, 0x01, 0x06, 0x7f, 0x12, - 0x65, 0xef, 0x9a, 0xee, 0xea, 0xfc, 0x4c, 0x89, 0x8b, 0xe9, 0xf4, 0xe6, 0x46, 0x11, 0xaf, 0x99, - 0xee, 0x6a, 0xb3, 0x73, 0x4f, 0x17, 0xea, 0xf3, 0xc8, 0xd4, 0x9f, 0x4a, 0xa3, 0xd1, 0x3b, 0x0e, - 0xb1, 0xfd, 0x9a, 0x2e, 0xa1, 0x34, 0xfd, 0xcd, 0x2b, 0x01, 0x21, 0xf5, 0x1d, 0x62, 0x8b, 0x42, - 0xa2, 0x78, 0x7c, 0x05, 0x0d, 0xcf, 0x59, 0x2b, 0x66, 0x97, 0x57, 0x74, 0x62, 0x73, 0xa3, 0x38, - 0xd1, 0xa6, 0x00, 0x81, 0x92, 0x51, 0xe0, 0xcf, 0xa2, 0xd1, 0x5a, 0x87, 0x76, 0xba, 0xd5, 0xd5, - 0x5d, 0xcb, 0xe6, 0x9d, 0x04, 0xe2, 0x30, 0x05, 0xb8, 0x50, 0x50, 0xa2, 0xc7, 0x2f, 0x23, 0x54, - 0xba, 0xdb, 0xd0, 0xac, 0x36, 0x29, 0x69, 0x0b, 0xbc, 0xf7, 0xa0, 0xb4, 0xbe, 0xe6, 0x34, 0x6d, - 0xab, 0x4d, 0x9a, 0xba, 0x2d, 0x56, 0x2b, 0x50, 0xe3, 0x2a, 0x1a, 0x2f, 0xb5, 0x5a, 0xc4, 0x71, - 0x34, 0xf2, 0xc5, 0x3e, 0x71, 0x5c, 0x47, 0x19, 0xbe, 0x98, 0xba, 0x3c, 0x32, 0x7d, 0x7e, 0x73, - 0xa3, 0xf8, 0x98, 0x0e, 0x98, 0xa6, 0xcd, 0x51, 0x02, 0x8b, 0x50, 0x21, 0x3c, 0x8d, 0xc6, 0x4a, - 0xef, 0xf7, 0x6d, 0x52, 0x33, 0x48, 0xd7, 0x35, 0xdd, 0x75, 0xde, 0xa5, 0xe7, 0x36, 0x37, 0x8a, - 0x8a, 0x4e, 0x11, 0x4d, 0x93, 0x63, 0x04, 0x26, 0x72, 0x11, 0xbc, 0x88, 0x26, 0x6f, 0x95, 0xeb, - 0x0d, 0x62, 0x3f, 0x30, 0x5b, 0xa4, 0xd4, 0x6a, 0x59, 0xfd, 0xae, 0xab, 0x64, 0x81, 0xcf, 0x13, - 0x9b, 0x1b, 0xc5, 0xf3, 0x2b, 0xad, 0x5e, 0xd3, 0x61, 0xd8, 0xa6, 0xce, 0xd0, 0x02, 0xb3, 0x68, - 0x59, 0xfc, 0x39, 0x34, 0xb6, 0x64, 0x53, 0xb5, 0x31, 0x2a, 0x84, 0xc2, 0x95, 0x1c, 0x28, 0xec, - 0xe9, 0x29, 0x6e, 0x31, 0x18, 0xd4, 0xeb, 0x59, 0xd6, 0x58, 0x97, 0x15, 0x68, 0x1a, 0x80, 0x13, - 0x1b, 0x2b, 0xb1, 0x52, 0xff, 0x4e, 0x1a, 0x8d, 0xd3, 0xea, 0x04, 0xcd, 0x28, 0x51, 0xb5, 0xa4, - 0x10, 0xaa, 0xa4, 0x4e, 0x4f, 0x6f, 0x11, 0xae, 0x24, 0x67, 0x36, 0x37, 0x8a, 0x27, 0xba, 0x1e, - 0x50, 0xe0, 0x19, 0xa6, 0xc7, 0x57, 0x50, 0x8e, 0x81, 0x6a, 0x15, 0xae, 0x37, 0x63, 0x9b, 0x1b, - 0xc5, 0x11, 0x07, 0x60, 0x4d, 0xd3, 0xd0, 0x7c, 0x34, 0xed, 0x38, 0xf6, 0xf7, 0xac, 0xe5, 0xb8, - 0x94, 0x39, 0x57, 0x1b, 0xe8, 0x38, 0x5e, 0x60, 0x95, 0xa3, 0xc4, 0x8e, 0x93, 0x0b, 0xe1, 0x97, - 0x10, 0x62, 0x90, 0x92, 0x61, 0xd8, 0x5c, 0x77, 0x1e, 0xdb, 0xdc, 0x28, 0x9e, 0xe2, 0x2c, 0x74, - 0xc3, 0x10, 0x15, 0x4f, 0x20, 0xc6, 0x1d, 0x34, 0xca, 0x7e, 0xcd, 0xe9, 0xcb, 0xa4, 0xcd, 0x14, - 0x27, 0x7f, 0xfd, 0xb2, 0x27, 0x5d, 0x59, 0x3a, 0x53, 0x22, 0x69, 0xb5, 0xeb, 0xda, 0xeb, 0xd3, - 0x45, 0x6e, 0x1c, 0xce, 0xf0, 0xaa, 0xda, 0x80, 0x13, 0xb5, 0x5c, 0x2c, 0x43, 0x6d, 0xc6, 0x8c, - 0x65, 0xaf, 0xe9, 0xb6, 0x41, 0x8c, 0xe9, 0x75, 0xd1, 0x66, 0xdc, 0xf3, 0xc0, 0xcd, 0x65, 0x51, - 0xbd, 0x44, 0x72, 0x5c, 0x46, 0x63, 0x8c, 0x5b, 0xa3, 0xbf, 0x7c, 0xdb, 0xec, 0x1a, 0x5c, 0xb1, - 0x44, 0x69, 0x39, 0xfd, 0xe5, 0xe6, 0x7d, 0xb3, 0x2b, 0x5a, 0x45, 0xb9, 0xcc, 0xd9, 0xd7, 0xd0, - 0x64, 0xe4, 0x33, 0x70, 0x01, 0xa5, 0xee, 0x93, 0x75, 0xd6, 0xd5, 0x1a, 0xfd, 0x13, 0x9f, 0x44, - 0xc3, 0x0f, 0xf4, 0x76, 0x9f, 0x9b, 0x62, 0x8d, 0xfd, 0x78, 0x39, 0xf9, 0xe9, 0x84, 0xfa, 0xf7, - 0x12, 0x08, 0x97, 0xad, 0x6e, 0x97, 0xb4, 0x5c, 0xd1, 0x7a, 0xbd, 0x88, 0x46, 0xe6, 0xac, 0x96, - 0xde, 0x86, 0x3e, 0x60, 0x3a, 0xa3, 0x6c, 0x6e, 0x14, 0x4f, 0x52, 0xe1, 0x4f, 0xb5, 0x29, 0x46, - 0x68, 0x53, 0x40, 0x4a, 0x3b, 0x4f, 0x23, 0x1d, 0xcb, 0x25, 0x50, 0x30, 0x19, 0x74, 0x1e, 0x14, - 0xb4, 0x01, 0x25, 0x76, 0x5e, 0x40, 0x8c, 0xaf, 0xa1, 0x5c, 0x9d, 0xda, 0xeb, 0x96, 0xd5, 0xe6, - 0x8a, 0x03, 0x16, 0x0a, 0x6c, 0xb8, 0x50, 0xc4, 0x27, 0x52, 0x67, 0xd1, 0x78, 0xb9, 0x6d, 0x92, - 0xae, 0x2b, 0xb6, 0x9a, 0x5a, 0xba, 0xd2, 0x0a, 0xe9, 0xba, 0x62, 0xab, 0xa9, 0x39, 0x6c, 0xea, - 0x14, 0x2a, 0xb6, 0xda, 0x27, 0x55, 0xbf, 0x93, 0x42, 0x8f, 0xdd, 0xee, 0x2f, 0x13, 0xbb, 0x4b, - 0x5c, 0xe2, 0x70, 0xc3, 0xee, 0x73, 0x5d, 0x40, 0x93, 0x11, 0x24, 0xe7, 0x7e, 0x71, 0x73, 0xa3, - 0x78, 0xee, 0xbe, 0x8f, 0x6c, 0xf2, 0xb9, 0x42, 0x34, 0x02, 0x91, 0xa2, 0x78, 0x16, 0x4d, 0x04, - 0x40, 0xda, 0x08, 0x47, 0x49, 0x82, 0x85, 0xbb, 0xb0, 0xb9, 0x51, 0x3c, 0x2b, 0x70, 0xa3, 0xcd, - 0x16, 0xb5, 0x2f, 0x5c, 0x0c, 0xdf, 0x46, 0x85, 0x00, 0x74, 0xcb, 0xb6, 0xfa, 0x3d, 0x47, 0x49, - 0x01, 0xab, 0xe2, 0xe6, 0x46, 0xf1, 0x71, 0x81, 0xd5, 0x0a, 0x20, 0x05, 0x5e, 0x91, 0x82, 0xf8, - 0x2b, 0x09, 0x91, 0x1b, 0x1f, 0x41, 0x69, 0x18, 0x41, 0x37, 0xbd, 0x11, 0x34, 0x50, 0x48, 0x53, - 0xe1, 0x92, 0x7c, 0x40, 0x85, 0x9a, 0x11, 0x19, 0x50, 0x91, 0x1a, 0xcf, 0x96, 0xd1, 0xa9, 0x58, - 0x5e, 0xbb, 0xd2, 0xea, 0x3f, 0x48, 0x89, 0x5c, 0xea, 0x96, 0xe1, 0x77, 0xe6, 0xa2, 0xd8, 0x99, - 0x75, 0xcb, 0x80, 0xd9, 0x3e, 0x11, 0x98, 0x74, 0xa1, 0xb1, 0x3d, 0xcb, 0x08, 0x4f, 0xfa, 0xd1, - 0xb2, 0xf8, 0x5d, 0x74, 0x3a, 0x02, 0x64, 0xa6, 0x96, 0x69, 0xff, 0xa5, 0xcd, 0x8d, 0xa2, 0x1a, - 0xc3, 0x35, 0x6c, 0x79, 0x07, 0x70, 0xc1, 0x3a, 0x3a, 0x23, 0x48, 0xdd, 0xea, 0xba, 0xba, 0xd9, - 0xe5, 0x4e, 0x0a, 0x1b, 0x25, 0x4f, 0x6f, 0x6e, 0x14, 0x9f, 0x14, 0x75, 0xd0, 0xa3, 0x09, 0x37, - 0x7e, 0x10, 0x1f, 0x6c, 0x20, 0x25, 0x06, 0x55, 0xeb, 0xe8, 0x2b, 0x9e, 0xe7, 0x75, 0x79, 0x73, - 0xa3, 0xf8, 0x54, 0x6c, 0x1d, 0x26, 0xa5, 0x12, 0x2a, 0x19, 0xc8, 0x09, 0x6b, 0x08, 0x07, 0xb8, - 0x05, 0xcb, 0x20, 0xf0, 0x0d, 0xc3, 0xc0, 0x5f, 0xdd, 0xdc, 0x28, 0x5e, 0x10, 0xf8, 0x77, 0x2d, - 0x83, 0x84, 0x9b, 0x1f, 0x53, 0x5a, 0xfd, 0x4f, 0x09, 0x74, 0xa1, 0x51, 0x9a, 0x9f, 0xab, 0x19, - 0xde, 0x4c, 0x5b, 0xb7, 0xad, 0x07, 0xa6, 0x21, 0x8c, 0xde, 0x65, 0x74, 0x26, 0x84, 0xaa, 0xc2, - 0xe4, 0xee, 0x7b, 0x65, 0xf0, 0x6d, 0xde, 0x2c, 0xde, 0xe3, 0x34, 0x4d, 0xe6, 0x01, 0x34, 0x25, - 0x8f, 0x74, 0x10, 0x23, 0xda, 0x47, 0x21, 0x54, 0x63, 0xd5, 0xb2, 0xdd, 0x56, 0xdf, 0xe5, 0x4a, - 0x00, 0x7d, 0x14, 0xa9, 0xc3, 0xe1, 0x44, 0x5b, 0x54, 0xe1, 0xf1, 0x51, 0xbf, 0x9e, 0x42, 0xe7, - 0x16, 0xef, 0xbb, 0xba, 0x46, 0x1c, 0xab, 0x6f, 0xb7, 0x88, 0x73, 0xa7, 0x67, 0xe8, 0x2e, 0x09, - 0x14, 0xbb, 0x88, 0x86, 0x4b, 0x86, 0x41, 0x0c, 0xf8, 0xaa, 0x61, 0xe6, 0x6d, 0xeb, 0x14, 0xa0, - 0x31, 0x38, 0xfe, 0x04, 0xca, 0xf2, 0x32, 0xd0, 0xa8, 0xe1, 0xe9, 0xfc, 0xe6, 0x46, 0x31, 0xdb, - 0x67, 0x20, 0xcd, 0xc3, 0x51, 0xb2, 0x0a, 0x69, 0x13, 0x4a, 0x96, 0x0a, 0xc8, 0x0c, 0x06, 0xd2, - 0x3c, 0x1c, 0x7e, 0x13, 0x8d, 0x03, 0x5b, 0xbf, 0x3d, 0xdc, 0x54, 0x9c, 0xf4, 0x4c, 0x85, 0xd8, - 0x58, 0x66, 0xc9, 0xa1, 0x35, 0x4d, 0xdb, 0x2b, 0xa0, 0x85, 0x18, 0xe0, 0xbb, 0xa8, 0xc0, 0x1b, - 0x11, 0x30, 0x1d, 0xde, 0x82, 0xe9, 0xa9, 0xcd, 0x8d, 0xe2, 0x24, 0x6f, 0xbf, 0xc0, 0x36, 0xc2, - 0x84, 0x32, 0xe6, 0xcd, 0x0e, 0x18, 0x67, 0xb6, 0x63, 0xcc, 0xbf, 0x58, 0x64, 0x1c, 0x66, 0xa2, - 0xbe, 0x83, 0x46, 0xc5, 0x82, 0xf8, 0x34, 0xac, 0x68, 0x98, 0x5a, 0xc1, 0x5a, 0xc8, 0x34, 0x60, - 0x19, 0xf3, 0x3c, 0xca, 0x57, 0x88, 0xd3, 0xb2, 0xcd, 0x1e, 0x9d, 0x64, 0xb9, 0x4e, 0x4c, 0x6c, - 0x6e, 0x14, 0xf3, 0x46, 0x00, 0xd6, 0x44, 0x1a, 0xf5, 0xbf, 0x25, 0xd0, 0x69, 0xca, 0xbb, 0xe4, - 0x38, 0xe6, 0x4a, 0xb7, 0x23, 0xce, 0x72, 0x57, 0x51, 0xa6, 0x01, 0xf5, 0xf1, 0x9a, 0x4e, 0x6e, - 0x6e, 0x14, 0x0b, 0xac, 0x05, 0x82, 0x26, 0x71, 0x1a, 0x7f, 0x75, 0x90, 0xdc, 0x66, 0x75, 0x40, - 0xbd, 0x37, 0x57, 0xb7, 0x5d, 0xb3, 0xbb, 0xd2, 0x70, 0x75, 0xb7, 0xef, 0x48, 0xde, 0x1b, 0xc7, - 0x34, 0x1d, 0x40, 0x49, 0xde, 0x9b, 0x54, 0x08, 0xbf, 0x86, 0x46, 0xab, 0x5d, 0x23, 0x60, 0xc2, - 0xec, 0xc7, 0xe3, 0xd4, 0xa9, 0x22, 0x00, 0x8f, 0xb2, 0x90, 0x0a, 0xa8, 0x7f, 0x33, 0x81, 0x14, - 0xe6, 0xca, 0xcf, 0x99, 0x8e, 0x3b, 0x4f, 0x3a, 0xcb, 0xc2, 0x60, 0x9e, 0xf1, 0xd6, 0x06, 0x14, - 0x27, 0x98, 0x6e, 0x98, 0x39, 0xf9, 0xda, 0xa0, 0x6d, 0x3a, 0x6e, 0xd8, 0x76, 0x84, 0x4a, 0xe1, - 0x1a, 0xca, 0x32, 0xce, 0x6c, 0xea, 0xcd, 0x5f, 0x57, 0x3c, 0x45, 0x08, 0x57, 0xcd, 0x94, 0xa1, - 0xc3, 0x88, 0xc5, 0xe5, 0x18, 0x2f, 0xaf, 0xfe, 0xad, 0x24, 0x2a, 0x84, 0x0b, 0xe1, 0xbb, 0x28, - 0xf7, 0x86, 0x65, 0x76, 0x89, 0xb1, 0xd8, 0x85, 0x16, 0x6e, 0xbd, 0x26, 0xf5, 0xdc, 0xce, 0x13, - 0xef, 0x41, 0x99, 0xa6, 0x25, 0x2c, 0x8d, 0x60, 0x89, 0xea, 0x33, 0xc3, 0x9f, 0x43, 0x23, 0xd4, - 0x65, 0x7a, 0x00, 0x9c, 0x93, 0xdb, 0x72, 0xbe, 0xc8, 0x39, 0x9f, 0xb4, 0x59, 0xa1, 0x28, 0xeb, - 0x80, 0x1d, 0xd5, 0x2b, 0x8d, 0xe8, 0x8e, 0xd5, 0xe5, 0x3d, 0x0f, 0x7a, 0x65, 0x03, 0x44, 0xd4, - 0x2b, 0x46, 0x43, 0x3d, 0x3d, 0xf6, 0xb1, 0xd0, 0x0d, 0x82, 0x9b, 0xce, 0x64, 0x15, 0xee, 0x01, - 0x81, 0x58, 0xbd, 0x2d, 0xf6, 0xb0, 0x46, 0x1e, 0x98, 0x64, 0xcd, 0xef, 0xe1, 0x6b, 0xb4, 0x67, - 0x1c, 0x87, 0x4e, 0x3d, 0xac, 0x6b, 0xb9, 0xfc, 0x01, 0x24, 0xcb, 0x1f, 0x40, 0xea, 0x77, 0x87, - 0xa9, 0xd3, 0x0f, 0xcb, 0x69, 0x50, 0x45, 0xfc, 0x72, 0xb0, 0x3f, 0xc1, 0x65, 0x5f, 0xf0, 0x3a, - 0xd7, 0x5f, 0x58, 0x8d, 0x52, 0xb9, 0xfc, 0xf6, 0x46, 0x31, 0xb1, 0xb9, 0x51, 0x1c, 0xd2, 0x72, - 0x82, 0x03, 0x19, 0x0c, 0x16, 0xc1, 0x3a, 0x88, 0xcb, 0xed, 0x50, 0x59, 0x36, 0x78, 0x5e, 0x43, - 0x59, 0xde, 0x06, 0x90, 0x5d, 0xfe, 0xfa, 0x99, 0x60, 0xcd, 0x21, 0x6d, 0x0b, 0x84, 0x4a, 0x7b, - 0xa5, 0xf0, 0x2b, 0x28, 0xc3, 0xfc, 0x78, 0x90, 0xa4, 0xb0, 0x22, 0x94, 0xd7, 0x2c, 0xa1, 0xe2, - 0xbc, 0x0c, 0x9e, 0x45, 0x28, 0xf0, 0xe1, 0xfd, 0x4d, 0x10, 0xce, 0x21, 0xea, 0xdd, 0x87, 0xb8, - 0x08, 0x65, 0xf1, 0x8b, 0x68, 0x74, 0x89, 0xd8, 0x1d, 0xb3, 0xab, 0xb7, 0x1b, 0xe6, 0xfb, 0xde, - 0x3e, 0x08, 0x58, 0x0d, 0xc7, 0x7c, 0x5f, 0xec, 0x00, 0x89, 0x0e, 0x7f, 0x21, 0xce, 0x47, 0xce, - 0x42, 0x43, 0x9e, 0xd8, 0xd6, 0x79, 0x0c, 0xb5, 0x27, 0xc6, 0x65, 0x7e, 0x13, 0x8d, 0x49, 0xee, - 0x11, 0x5f, 0x37, 0x9f, 0x8f, 0xb2, 0x16, 0x7c, 0xbd, 0x10, 0x5b, 0x99, 0x03, 0xb5, 0x77, 0xb5, - 0xae, 0xe9, 0x9a, 0x7a, 0xbb, 0x6c, 0x75, 0x3a, 0x7a, 0xd7, 0x50, 0x46, 0x82, 0x6d, 0x06, 0x93, - 0x61, 0x9a, 0x2d, 0x86, 0x12, 0x2d, 0x89, 0x5c, 0x88, 0xba, 0xe0, 0xbc, 0x0f, 0x35, 0xd2, 0xb2, - 0x6c, 0x6a, 0xc8, 0x14, 0x04, 0x42, 0x03, 0xdf, 0xd7, 0x61, 0xb8, 0xa6, 0xed, 0x21, 0x45, 0xdf, - 0x37, 0x5c, 0xf0, 0x8d, 0x74, 0x2e, 0x5f, 0x18, 0x0d, 0xef, 0x64, 0xa8, 0x7f, 0x3d, 0x85, 0xf2, - 0x9c, 0x94, 0xda, 0x81, 0x63, 0x05, 0xdf, 0x8f, 0x82, 0xc7, 0x2a, 0x6a, 0xe6, 0x51, 0x29, 0xaa, - 0xfa, 0xb5, 0xa4, 0x6f, 0x8d, 0xea, 0xb6, 0xd9, 0xdd, 0x9f, 0x35, 0xba, 0x84, 0x50, 0x79, 0xb5, - 0xdf, 0xbd, 0xcf, 0xb6, 0x58, 0x93, 0xc1, 0x16, 0x6b, 0xcb, 0xd4, 0x04, 0x0c, 0x3e, 0x8f, 0xd2, - 0x15, 0xca, 0x9f, 0xf6, 0xcc, 0xe8, 0xf4, 0xc8, 0x07, 0x8c, 0x53, 0xe2, 0x39, 0x0d, 0xc0, 0xd4, - 0x33, 0x9c, 0x5e, 0x77, 0x09, 0x9b, 0x8b, 0x53, 0xcc, 0x33, 0x5c, 0xa6, 0x00, 0x8d, 0xc1, 0xf1, - 0x0d, 0x34, 0x59, 0x21, 0x6d, 0x7d, 0x7d, 0xde, 0x6c, 0xb7, 0x4d, 0x87, 0xb4, 0xac, 0xae, 0xe1, - 0x80, 0x90, 0x79, 0x75, 0x1d, 0x47, 0x8b, 0x12, 0x60, 0x15, 0x65, 0x16, 0xef, 0xdd, 0x73, 0x88, - 0x0b, 0xe2, 0x4b, 0x4d, 0xa3, 0xcd, 0x8d, 0x62, 0xc6, 0x02, 0x88, 0xc6, 0x31, 0xea, 0x37, 0x12, - 0xd4, 0xf5, 0x72, 0xee, 0xbb, 0x56, 0xcf, 0xd7, 0xf2, 0x7d, 0x89, 0xe4, 0x4a, 0x30, 0x3d, 0x24, - 0xe1, 0x6b, 0x27, 0xf8, 0xd7, 0x66, 0xf9, 0x14, 0xe1, 0x4f, 0x0c, 0xf1, 0x5f, 0x95, 0xda, 0xe6, - 0xab, 0xd4, 0xef, 0x27, 0xd1, 0x19, 0xde, 0xe2, 0x72, 0xdb, 0xec, 0x2d, 0x5b, 0xba, 0x6d, 0x68, - 0xa4, 0x45, 0xcc, 0x07, 0xe4, 0x70, 0x0e, 0x3c, 0x79, 0xe8, 0xa4, 0xf7, 0x31, 0x74, 0xae, 0x83, - 0x17, 0x4b, 0x25, 0x03, 0x9b, 0x3b, 0x6c, 0xe5, 0x56, 0xd8, 0xdc, 0x28, 0x8e, 0x1a, 0x0c, 0x0c, - 0x5b, 0x73, 0x9a, 0x48, 0x44, 0x95, 0x64, 0x8e, 0x74, 0x57, 0xdc, 0x55, 0x50, 0x92, 0x61, 0xa6, - 0x24, 0x6d, 0x80, 0x68, 0x1c, 0xa3, 0xfe, 0x97, 0x24, 0x3a, 0x19, 0x16, 0x79, 0x83, 0x74, 0x8d, - 0x63, 0x79, 0x7f, 0x38, 0xf2, 0xfe, 0x41, 0x0a, 0x3d, 0xce, 0xcb, 0x34, 0x56, 0x75, 0x9b, 0x18, - 0x15, 0xd3, 0x26, 0x2d, 0xd7, 0xb2, 0xd7, 0x0f, 0xb1, 0x03, 0xf5, 0xe8, 0xc4, 0x7e, 0x03, 0x65, - 0xf8, 0xda, 0x85, 0xcd, 0x33, 0xe3, 0x7e, 0x4b, 0x00, 0x1a, 0x99, 0xa1, 0xd8, 0xba, 0x27, 0xd4, - 0x59, 0x99, 0x9d, 0x74, 0xd6, 0xa7, 0xd1, 0x98, 0x2f, 0x7a, 0xf0, 0xa2, 0xb3, 0x81, 0xb7, 0x65, - 0x78, 0x08, 0x70, 0xa4, 0x35, 0x99, 0x10, 0x6a, 0xf3, 0x00, 0xb5, 0x0a, 0x78, 0x43, 0x63, 0xbc, - 0x36, 0xbf, 0x9c, 0x69, 0x68, 0x22, 0x91, 0xba, 0x91, 0x46, 0x67, 0xe3, 0xbb, 0x5d, 0x23, 0xba, - 0x71, 0xdc, 0xeb, 0x1f, 0xcb, 0x5e, 0xc7, 0x4f, 0xa0, 0x74, 0x5d, 0x77, 0x57, 0x95, 0x91, 0xe0, - 0xec, 0xe6, 0x9e, 0xd9, 0x26, 0xcd, 0x9e, 0xee, 0xae, 0x6a, 0x80, 0x12, 0x6c, 0x06, 0x02, 0x8e, - 0x31, 0x36, 0x43, 0x98, 0xec, 0xf3, 0x17, 0x13, 0x97, 0xd3, 0xb1, 0x93, 0xfd, 0x77, 0xd3, 0x83, - 0xec, 0xca, 0x5d, 0xdb, 0x74, 0xc9, 0xb1, 0x86, 0x1d, 0x6b, 0xd8, 0x3e, 0x35, 0xec, 0x5f, 0x26, - 0xd1, 0x98, 0xbf, 0x68, 0x7a, 0x8f, 0xb4, 0x0e, 0x66, 0xae, 0x0a, 0x96, 0x32, 0xa9, 0x7d, 0x2f, - 0x65, 0xf6, 0xa3, 0x50, 0xaa, 0xbf, 0x5f, 0xc3, 0x5c, 0x03, 0x90, 0x18, 0xdb, 0xaf, 0xf1, 0x77, - 0x69, 0x9e, 0x40, 0xd9, 0x79, 0xfd, 0xa1, 0xd9, 0xe9, 0x77, 0xb8, 0x97, 0x0e, 0x31, 0x08, 0x1d, - 0xfd, 0xa1, 0xe6, 0xc1, 0xd5, 0xdf, 0x4d, 0xa0, 0x71, 0x2e, 0x54, 0xce, 0x7c, 0x5f, 0x52, 0x0d, - 0xa4, 0x93, 0xdc, 0xb7, 0x74, 0x52, 0x7b, 0x97, 0x8e, 0xfa, 0x97, 0x52, 0x48, 0x99, 0x31, 0xdb, - 0x64, 0xc9, 0xd6, 0xbb, 0xce, 0x3d, 0x62, 0xf3, 0xe5, 0x74, 0x95, 0xb2, 0xda, 0xd7, 0x07, 0x0a, - 0x26, 0x25, 0xb9, 0x27, 0x93, 0xf2, 0x2c, 0x1a, 0xe1, 0x8d, 0xf1, 0xc3, 0x5f, 0x60, 0xd4, 0xd8, - 0x1e, 0x50, 0x0b, 0xf0, 0x94, 0xb8, 0xd4, 0xeb, 0xd9, 0xd6, 0x03, 0x62, 0xb3, 0x2d, 0x76, 0x4e, - 0xac, 0x7b, 0x40, 0x2d, 0xc0, 0x0b, 0x9c, 0x89, 0xe7, 0x2f, 0x8a, 0x9c, 0x89, 0xad, 0x05, 0x78, - 0x7c, 0x19, 0xe5, 0xe6, 0xac, 0x96, 0x0e, 0x82, 0x66, 0x66, 0x65, 0x74, 0x73, 0xa3, 0x98, 0x6b, - 0x73, 0x98, 0xe6, 0x63, 0x29, 0x65, 0xc5, 0x5a, 0xeb, 0xb6, 0x2d, 0x9d, 0x1d, 0x52, 0xe7, 0x18, - 0xa5, 0xc1, 0x61, 0x9a, 0x8f, 0xa5, 0x94, 0x54, 0xe6, 0x70, 0xf8, 0x9f, 0x0b, 0x78, 0xde, 0xe3, - 0x30, 0xcd, 0xc7, 0xaa, 0xdf, 0x48, 0x53, 0xed, 0x75, 0xcc, 0xf7, 0x8f, 0xfc, 0xbc, 0x10, 0x0c, - 0x98, 0xe1, 0x3d, 0x0c, 0x98, 0x23, 0xb3, 0x61, 0xa7, 0xfe, 0xf7, 0x2c, 0x42, 0x5c, 0xfa, 0xd5, - 0xe3, 0xc5, 0xe1, 0xfe, 0xb4, 0xa6, 0x82, 0x26, 0xab, 0xdd, 0x55, 0xbd, 0xdb, 0x22, 0x46, 0xb0, - 0x6d, 0x99, 0x81, 0xa1, 0x0d, 0xf1, 0x67, 0x84, 0x23, 0x83, 0x7d, 0x4b, 0x2d, 0x5a, 0x00, 0x3f, - 0x8f, 0xf2, 0xb5, 0xae, 0x4b, 0x6c, 0xbd, 0xe5, 0x9a, 0x0f, 0x08, 0x37, 0x0d, 0x70, 0xac, 0x65, - 0x06, 0x60, 0x4d, 0xa4, 0xc1, 0x37, 0xd0, 0x68, 0x5d, 0xb7, 0x5d, 0xb3, 0x65, 0xf6, 0xf4, 0xae, - 0xeb, 0x28, 0x39, 0xb0, 0x68, 0xe0, 0x61, 0xf4, 0x04, 0xb8, 0x26, 0x51, 0xe1, 0x2f, 0xa0, 0x11, - 0x58, 0x9a, 0x42, 0x8c, 0xdf, 0xc8, 0xb6, 0xa7, 0x1e, 0x4f, 0x06, 0x61, 0x3c, 0x6c, 0xf7, 0x15, - 0x8e, 0xaf, 0xc2, 0x07, 0x1f, 0x3e, 0x47, 0xfc, 0x36, 0xca, 0x56, 0xbb, 0x06, 0x30, 0x47, 0xdb, - 0x32, 0x57, 0x39, 0xf3, 0xd3, 0x01, 0x73, 0xab, 0x17, 0xe2, 0xed, 0xb1, 0x8b, 0x1f, 0x65, 0xf9, - 0x0f, 0x6f, 0x94, 0x8d, 0x7e, 0x08, 0xdb, 0xe2, 0x63, 0x8f, 0x6a, 0x5b, 0x7c, 0x7c, 0x8f, 0xdb, - 0xe2, 0xea, 0xfb, 0x28, 0x3f, 0x5d, 0x9f, 0xf1, 0x47, 0xef, 0x63, 0x28, 0x55, 0xe7, 0xc7, 0xac, - 0x69, 0xe6, 0xcf, 0xf4, 0x4c, 0x43, 0xa3, 0x30, 0x7c, 0x05, 0xe5, 0xca, 0x10, 0xea, 0xc2, 0xa3, - 0xd5, 0xd2, 0x6c, 0xfe, 0x6b, 0x01, 0x0c, 0xa2, 0xd5, 0x3c, 0x34, 0xfe, 0x04, 0xca, 0xd6, 0x6d, - 0x6b, 0xc5, 0xd6, 0x3b, 0x7c, 0x0e, 0x86, 0x73, 0xee, 0x1e, 0x03, 0x69, 0x1e, 0x4e, 0xfd, 0xf3, - 0x09, 0xcf, 0x6d, 0xa7, 0x25, 0x1a, 0x7d, 0xd8, 0x9a, 0x87, 0xba, 0x73, 0xac, 0x84, 0xc3, 0x40, - 0x9a, 0x87, 0xc3, 0x57, 0xd0, 0x70, 0xd5, 0xb6, 0x2d, 0x5b, 0x0c, 0xb3, 0x24, 0x14, 0x20, 0x86, - 0x59, 0x02, 0x05, 0xbe, 0x89, 0xf2, 0xcc, 0xe6, 0xb0, 0x1d, 0xcd, 0xd4, 0x56, 0x07, 0x5e, 0x22, - 0xa5, 0xfa, 0xcd, 0x94, 0xe0, 0xb3, 0x31, 0x89, 0x1f, 0xc1, 0x53, 0x81, 0x17, 0x50, 0x6a, 0xba, - 0x3e, 0xc3, 0x0d, 0xe0, 0x09, 0xaf, 0xa8, 0xa0, 0x2a, 0xa1, 0x72, 0x94, 0x1a, 0x9f, 0x43, 0xe9, - 0x3a, 0x55, 0x9f, 0x0c, 0xa8, 0x47, 0x6e, 0x73, 0xa3, 0x98, 0xee, 0x51, 0xfd, 0x01, 0x28, 0x60, - 0xe9, 0x62, 0x86, 0xad, 0x98, 0x18, 0x36, 0x58, 0xc7, 0x9c, 0x43, 0xe9, 0x92, 0xbd, 0xf2, 0x80, - 0x5b, 0x2d, 0xc0, 0xea, 0xf6, 0xca, 0x03, 0x0d, 0xa0, 0xf8, 0x1a, 0x42, 0x1a, 0x71, 0xfb, 0x76, - 0x17, 0x42, 0x96, 0x47, 0x60, 0xff, 0x0d, 0xac, 0xa1, 0x0d, 0xd0, 0x66, 0xcb, 0x32, 0x88, 0x26, - 0x90, 0xa8, 0x7f, 0x2d, 0x38, 0xd8, 0xa9, 0x98, 0xce, 0xfd, 0xe3, 0x2e, 0xdc, 0x45, 0x17, 0xea, - 0x7c, 0x8b, 0x33, 0xda, 0x49, 0x45, 0x34, 0x3c, 0xd3, 0xd6, 0x57, 0x1c, 0xe8, 0x43, 0x1e, 0x08, - 0x73, 0x8f, 0x02, 0x34, 0x06, 0x0f, 0xf5, 0x53, 0x6e, 0xfb, 0x7e, 0xfa, 0xe9, 0x61, 0x7f, 0xb4, - 0x2d, 0x10, 0x77, 0xcd, 0xb2, 0x8f, 0xbb, 0x6a, 0xa7, 0x5d, 0x75, 0x09, 0x65, 0x1b, 0x76, 0x4b, - 0xd8, 0xba, 0x80, 0xf5, 0x80, 0x63, 0xb7, 0xd8, 0xb6, 0x85, 0x87, 0xa4, 0x74, 0x15, 0xc7, 0x05, - 0xba, 0x6c, 0x40, 0x67, 0x38, 0x2e, 0xa7, 0xe3, 0x48, 0x4e, 0x57, 0xb7, 0x6c, 0x97, 0x77, 0x9c, - 0x4f, 0xd7, 0xb3, 0x6c, 0x57, 0xf3, 0x90, 0xf8, 0x59, 0x84, 0x96, 0xca, 0xf5, 0xb7, 0x88, 0x0d, - 0xe2, 0x1a, 0x09, 0x02, 0x99, 0x1e, 0x30, 0x90, 0x26, 0xa0, 0xf1, 0x12, 0x1a, 0x59, 0xec, 0x11, - 0x9b, 0x2d, 0x85, 0xa8, 0x07, 0x30, 0x7e, 0xfd, 0xe9, 0x90, 0x68, 0x79, 0xbf, 0x4f, 0xf1, 0xff, - 0x7d, 0x72, 0x36, 0xbf, 0x58, 0xde, 0x4f, 0x2d, 0x60, 0x84, 0x6f, 0xa2, 0x4c, 0x89, 0xf9, 0x79, - 0x79, 0x60, 0xe9, 0x8b, 0x0c, 0x96, 0xa0, 0x0c, 0xc5, 0xd6, 0xec, 0x3a, 0xfc, 0xad, 0x71, 0x72, - 0xf5, 0x0a, 0x2a, 0x84, 0xab, 0xc1, 0x79, 0x94, 0x2d, 0x2f, 0x2e, 0x2c, 0x54, 0xcb, 0x4b, 0x85, - 0x21, 0x9c, 0x43, 0xe9, 0x46, 0x75, 0xa1, 0x52, 0x48, 0xa8, 0x3f, 0x2f, 0x58, 0x10, 0xaa, 0x5a, - 0xc7, 0x47, 0xc3, 0xfb, 0x3a, 0x6f, 0x29, 0xc0, 0x79, 0x28, 0xec, 0x18, 0x74, 0x4c, 0xd7, 0x25, - 0x06, 0x9f, 0x25, 0xe0, 0xbc, 0xd0, 0x7d, 0xa8, 0x45, 0xf0, 0xf8, 0x2a, 0x1a, 0x03, 0x18, 0x3f, - 0x22, 0x64, 0xeb, 0x63, 0x5e, 0xc0, 0x7e, 0xa8, 0xc9, 0x48, 0xf5, 0xdb, 0xc1, 0xe9, 0xf0, 0x1c, - 0xd1, 0x0f, 0xeb, 0x89, 0xe2, 0x47, 0xa4, 0xbf, 0xd4, 0xff, 0x95, 0x66, 0xe1, 0xde, 0xec, 0xca, - 0xca, 0x41, 0x88, 0x32, 0xd8, 0xd2, 0x4d, 0xed, 0x62, 0x4b, 0xf7, 0x2a, 0xca, 0xcc, 0x13, 0x77, - 0xd5, 0x32, 0x78, 0xd4, 0x14, 0xc4, 0x59, 0x75, 0x00, 0x22, 0xc6, 0x59, 0x31, 0x1a, 0x7c, 0x1f, - 0x61, 0xef, 0x3e, 0x4a, 0xc9, 0x75, 0x6d, 0x73, 0xb9, 0xef, 0x12, 0x6f, 0x0b, 0xf9, 0x4c, 0x64, - 0x9d, 0xd2, 0x80, 0xdb, 0x63, 0x10, 0x4f, 0x7b, 0x52, 0xf7, 0xc9, 0x03, 0xb6, 0x7f, 0xb4, 0x51, - 0xcc, 0x30, 0x1a, 0x2d, 0x86, 0x2d, 0x7e, 0x13, 0x8d, 0xcc, 0xcf, 0x94, 0xf8, 0xdd, 0x14, 0x16, - 0x15, 0xf1, 0x98, 0x2f, 0x45, 0x0f, 0xe1, 0x8b, 0x04, 0x62, 0xeb, 0x3b, 0xf7, 0xf4, 0xe8, 0xd5, - 0x94, 0x80, 0x0b, 0xd5, 0x16, 0x16, 0xa5, 0xcf, 0x77, 0x17, 0x7c, 0x6d, 0x91, 0x63, 0xf7, 0xc3, - 0xb2, 0x62, 0xd8, 0x90, 0xb6, 0xe4, 0xf6, 0x31, 0xba, 0x17, 0xd1, 0x64, 0xa9, 0xd7, 0x6b, 0x9b, - 0xc4, 0x00, 0x7d, 0xd1, 0xfa, 0x6d, 0xe2, 0xf0, 0x90, 0x1f, 0x08, 0xfc, 0xd6, 0x19, 0xb2, 0x09, - 0x37, 0xa2, 0x9a, 0x36, 0x45, 0x8b, 0x81, 0xdf, 0x91, 0xb2, 0xea, 0x7f, 0x4e, 0xa0, 0x82, 0x17, - 0xf9, 0x29, 0xde, 0xc5, 0x12, 0xc2, 0x12, 0x61, 0x1b, 0x26, 0x14, 0x08, 0x07, 0x78, 0xdc, 0x40, - 0xd9, 0xea, 0xc3, 0x9e, 0x69, 0x13, 0x67, 0x07, 0x51, 0x7c, 0xe7, 0xf9, 0x92, 0x73, 0x92, 0xb0, - 0x22, 0x91, 0xd5, 0x26, 0x03, 0xc3, 0xf5, 0x07, 0x16, 0xfb, 0x3a, 0xbd, 0xce, 0x17, 0x13, 0xec, - 0xfa, 0x03, 0x8f, 0x91, 0x95, 0xee, 0xa2, 0x04, 0xa4, 0xf8, 0x49, 0x94, 0x5a, 0x5a, 0x9a, 0xe3, - 0xda, 0x08, 0x37, 0xf1, 0x5c, 0x57, 0xbc, 0xdf, 0x41, 0xb1, 0xea, 0xd7, 0x93, 0x08, 0x51, 0xa5, - 0x2f, 0xdb, 0x44, 0x3f, 0xa0, 0xc3, 0x9c, 0x69, 0x94, 0xf3, 0x04, 0xce, 0x07, 0x9c, 0x1f, 0xb6, - 0x19, 0xee, 0x88, 0x70, 0xdd, 0x7e, 0x88, 0x6e, 0x11, 0x0d, 0x6b, 0x56, 0x9b, 0x78, 0x7b, 0xa9, - 0xe0, 0x1d, 0xda, 0x14, 0xa0, 0x31, 0x38, 0x7e, 0x16, 0x8d, 0x70, 0xad, 0xb1, 0xa4, 0x3d, 0xd4, - 0x96, 0x07, 0xd4, 0x02, 0xbc, 0xfa, 0xad, 0x04, 0x13, 0x0a, 0x8b, 0x0c, 0x3e, 0xac, 0x42, 0x51, - 0xbf, 0x9a, 0x40, 0x98, 0x32, 0xab, 0xeb, 0x8e, 0xb3, 0x66, 0xd9, 0x46, 0x79, 0x55, 0xef, 0xae, - 0x1c, 0xc8, 0xe7, 0xa8, 0xbf, 0x9b, 0x45, 0x27, 0xa4, 0xf8, 0xb7, 0x43, 0xae, 0x6f, 0x57, 0x64, - 0x7d, 0x83, 0xdd, 0x00, 0xd0, 0x37, 0x71, 0x37, 0x80, 0x69, 0xde, 0x53, 0xe2, 0xb9, 0xc0, 0xb0, - 0x14, 0x44, 0x2e, 0x1c, 0x08, 0x3c, 0x87, 0x46, 0xf9, 0x0f, 0x3a, 0x9d, 0x78, 0x1b, 0xbe, 0xa0, - 0xc7, 0x0e, 0x05, 0x68, 0x12, 0x1a, 0x7f, 0x0a, 0x8d, 0x50, 0xe5, 0x5c, 0x81, 0x6b, 0x9c, 0xd9, - 0xe0, 0xf2, 0x9f, 0xe1, 0x01, 0x45, 0x93, 0xe0, 0x53, 0x0a, 0xb1, 0xc0, 0xb9, 0x1d, 0xc4, 0x02, - 0xbf, 0x8b, 0xf2, 0xa5, 0x6e, 0xd7, 0x72, 0xc1, 0x57, 0x75, 0xf8, 0x0e, 0xdd, 0xc0, 0xc9, 0xe9, - 0x49, 0xb8, 0x0f, 0x16, 0xd0, 0xc7, 0xce, 0x4e, 0x22, 0x43, 0x7c, 0x9d, 0x76, 0xc4, 0x03, 0x93, - 0xac, 0x11, 0x9b, 0x07, 0x57, 0xc2, 0x2e, 0xa5, 0xcd, 0x61, 0xe2, 0xed, 0x30, 0x8f, 0x0e, 0x4f, - 0xa3, 0xb1, 0xba, 0x6d, 0xf5, 0x2c, 0x87, 0x18, 0x4c, 0x50, 0xf9, 0xe0, 0xfe, 0x67, 0x8f, 0x23, - 0x20, 0x16, 0x5d, 0xba, 0x52, 0x29, 0x15, 0xc1, 0xf7, 0xd0, 0x49, 0xef, 0xbc, 0xc4, 0x8f, 0xfa, - 0xaf, 0x55, 0x1c, 0x65, 0x14, 0x62, 0xc6, 0x71, 0x58, 0x19, 0x6a, 0x95, 0xe9, 0x0b, 0xde, 0xee, - 0xa0, 0x77, 0x6d, 0xa0, 0x69, 0x1a, 0x62, 0x57, 0xc7, 0xf2, 0xc3, 0x3f, 0x8c, 0xf2, 0xf3, 0xfa, - 0xc3, 0x4a, 0x9f, 0x2f, 0x41, 0xc6, 0x76, 0xbe, 0x09, 0xd9, 0xd1, 0x1f, 0x36, 0x0d, 0x5e, 0x2e, - 0x34, 0x2d, 0x88, 0x2c, 0x71, 0x13, 0x9d, 0xae, 0xdb, 0x56, 0xc7, 0x72, 0x89, 0x11, 0x0a, 0xa0, - 0x9f, 0x08, 0x2e, 0xa8, 0xf4, 0x38, 0x45, 0x73, 0x8b, 0x48, 0xfa, 0x01, 0x6c, 0xde, 0x48, 0xe7, - 0xc6, 0x0b, 0x13, 0xda, 0x99, 0x28, 0x76, 0xc9, 0x74, 0xdb, 0x44, 0xfd, 0xd5, 0x04, 0x5d, 0x74, - 0x7b, 0x5f, 0x8c, 0x9f, 0x93, 0x6f, 0x5b, 0x27, 0x82, 0x0d, 0x38, 0x7e, 0x83, 0x4e, 0xba, 0x5e, - 0x4d, 0x17, 0xfc, 0x70, 0x43, 0x32, 0x19, 0x2c, 0xf8, 0xef, 0x9b, 0x5d, 0x43, 0x03, 0x28, 0xc5, - 0x0a, 0xd7, 0xa1, 0x00, 0x0b, 0x87, 0x4d, 0x6c, 0xa6, 0xad, 0xa0, 0x89, 0x46, 0x7f, 0xd9, 0xab, - 0x5b, 0x08, 0x56, 0x87, 0x8b, 0x9a, 0x4e, 0x7f, 0xd9, 0xbf, 0xe1, 0x21, 0x5d, 0x83, 0x95, 0x8b, - 0xa8, 0xdf, 0x48, 0x84, 0xcc, 0xd2, 0x01, 0x5a, 0xfc, 0xa7, 0xa2, 0xe7, 0x87, 0x51, 0x3b, 0xa1, - 0xfe, 0xe5, 0x24, 0xca, 0xd3, 0xa5, 0x30, 0xbf, 0x72, 0x7a, 0x20, 0x2d, 0x7d, 0x64, 0xa7, 0xb9, - 0x82, 0xa7, 0x9d, 0xde, 0x85, 0xa7, 0x7d, 0x0e, 0xa5, 0x85, 0xd0, 0x39, 0xb6, 0x5f, 0x67, 0x18, - 0xb6, 0x06, 0x50, 0xf5, 0x4b, 0x49, 0x84, 0xde, 0x7e, 0xfe, 0xf9, 0x23, 0x2c, 0x20, 0xf5, 0x2f, - 0x26, 0xd0, 0x04, 0xdf, 0x40, 0x16, 0x12, 0x17, 0x64, 0xbd, 0xad, 0x7f, 0x71, 0x5c, 0x32, 0x90, - 0xe6, 0xe1, 0xa8, 0x4d, 0xae, 0x3e, 0x34, 0x5d, 0xd8, 0x43, 0x13, 0x32, 0x17, 0x10, 0x0e, 0x13, - 0x6d, 0xb2, 0x47, 0x87, 0x9f, 0xf3, 0xb6, 0xc6, 0x53, 0xc1, 0x44, 0x44, 0x0b, 0x54, 0x63, 0xb7, - 0xc7, 0xd5, 0x5f, 0x4a, 0xa3, 0x74, 0xf5, 0x21, 0x69, 0x1d, 0xf2, 0xae, 0x11, 0x16, 0xdc, 0xe9, - 0x7d, 0x2e, 0xb8, 0xf7, 0x72, 0xd6, 0xf7, 0x5a, 0xd0, 0x9f, 0x19, 0xb9, 0xfa, 0x50, 0xcf, 0x87, - 0xab, 0xf7, 0x7a, 0xfa, 0xf0, 0x1d, 0x15, 0xff, 0xd3, 0x14, 0x4a, 0x35, 0xca, 0xf5, 0x63, 0xbd, - 0x39, 0x50, 0xbd, 0xd9, 0xfa, 0x2c, 0x45, 0xf5, 0xb7, 0x47, 0x73, 0x41, 0xf4, 0x52, 0x68, 0x27, - 0xf4, 0x07, 0x29, 0x34, 0xde, 0x98, 0x59, 0xaa, 0x0b, 0x3b, 0x14, 0xb7, 0x59, 0x84, 0x09, 0xc4, - 0x3a, 0xb0, 0x2e, 0x3d, 0x17, 0xf1, 0x93, 0xee, 0xd4, 0xba, 0xee, 0x8b, 0x37, 0xde, 0xd2, 0xdb, - 0x7d, 0x02, 0xcb, 0x59, 0x16, 0x8f, 0xe6, 0x98, 0xef, 0x93, 0x9f, 0x81, 0xdb, 0x74, 0x1e, 0x03, - 0xfc, 0x19, 0x94, 0xba, 0xc3, 0x4f, 0x0a, 0x07, 0xf1, 0x79, 0xe1, 0x3a, 0xe3, 0x43, 0x8d, 0x60, - 0xaa, 0x6f, 0x1a, 0xc0, 0x81, 0x96, 0xa2, 0x85, 0x6f, 0xf1, 0x09, 0x78, 0x47, 0x85, 0x57, 0xbc, - 0xc2, 0xb7, 0x6a, 0x15, 0xdc, 0x40, 0xf9, 0x3a, 0xb1, 0x3b, 0x26, 0x74, 0x94, 0x67, 0xb3, 0xb7, - 0x66, 0x42, 0x97, 0x0e, 0xf9, 0x5e, 0x50, 0x08, 0x98, 0x89, 0x5c, 0xf0, 0x3b, 0x08, 0x31, 0x1f, - 0x65, 0x87, 0xb9, 0x70, 0xce, 0x83, 0x23, 0xce, 0x7c, 0x3d, 0xd7, 0x14, 0xdd, 0x3c, 0x70, 0x20, - 0x05, 0x66, 0xf8, 0x3e, 0x2a, 0xcc, 0x5b, 0x86, 0x79, 0xcf, 0x64, 0x21, 0x41, 0x50, 0x41, 0x66, - 0xfb, 0x83, 0xf8, 0xcd, 0x8d, 0xe2, 0xe3, 0x1d, 0xa1, 0x5c, 0x5c, 0x35, 0x11, 0xc6, 0xea, 0x3f, - 0x1a, 0x46, 0x69, 0xda, 0xed, 0xc7, 0xe3, 0x77, 0x3f, 0xe3, 0xb7, 0x84, 0x0a, 0x77, 0x2d, 0xfb, - 0xbe, 0xd9, 0x5d, 0xf1, 0xa3, 0x35, 0xf9, 0x62, 0x11, 0x4e, 0x98, 0xd7, 0x18, 0xae, 0xe9, 0x07, - 0x76, 0x6a, 0x11, 0xf2, 0x6d, 0x46, 0xf0, 0x4b, 0x08, 0x2d, 0xe9, 0xf6, 0x0a, 0x71, 0x81, 0x26, - 0x17, 0xdc, 0x00, 0x75, 0x01, 0x0a, 0x01, 0xa0, 0xe2, 0x0d, 0xd0, 0x80, 0x98, 0xae, 0x8a, 0xd9, - 0x19, 0xdd, 0x08, 0xc4, 0x83, 0xc2, 0xaa, 0x18, 0xce, 0xe8, 0x44, 0x27, 0x80, 0x9d, 0xd6, 0xd5, - 0x11, 0x12, 0xf6, 0x3d, 0x51, 0x48, 0x10, 0x92, 0x71, 0xe0, 0x29, 0x4a, 0x62, 0xb6, 0x3d, 0x35, - 0x81, 0x07, 0x7e, 0x31, 0x74, 0x30, 0x83, 0x25, 0x6e, 0x03, 0xcf, 0x65, 0x82, 0x83, 0xfd, 0xd1, - 0xed, 0x0e, 0xf6, 0xd5, 0xaf, 0x25, 0xd1, 0x48, 0xa3, 0xbf, 0xec, 0xac, 0x3b, 0x2e, 0xe9, 0x1c, - 0x72, 0x35, 0xf6, 0x96, 0x57, 0xe9, 0xd8, 0xe5, 0xd5, 0x93, 0x9e, 0x50, 0x84, 0xad, 0x32, 0xdf, - 0xa5, 0xf3, 0xc4, 0xf1, 0xb7, 0x93, 0xa8, 0xc0, 0x36, 0x74, 0x2b, 0xa6, 0xd3, 0x7a, 0x04, 0x41, - 0xa6, 0x07, 0x2f, 0x95, 0xfd, 0x1d, 0x82, 0xec, 0x20, 0x74, 0x57, 0xfd, 0x72, 0x12, 0xe5, 0x4b, - 0x7d, 0x77, 0xb5, 0xe4, 0x82, 0x6e, 0x1d, 0xc9, 0xf5, 0xc9, 0xaf, 0x27, 0xd0, 0x04, 0x6d, 0xc8, - 0x92, 0x75, 0x9f, 0x74, 0x1f, 0xc1, 0x4e, 0xa0, 0xb8, 0xa3, 0x97, 0xdc, 0xe3, 0x8e, 0x9e, 0x27, - 0xcb, 0xd4, 0x2e, 0x77, 0x36, 0xbf, 0x95, 0x40, 0x48, 0xb3, 0xda, 0xe4, 0x63, 0xf2, 0x19, 0x8f, - 0x60, 0x03, 0xe4, 0x20, 0x3f, 0xe3, 0x3b, 0x09, 0x74, 0x92, 0xe7, 0x4f, 0xe3, 0x0b, 0x91, 0x43, - 0xde, 0x2f, 0xd1, 0x0f, 0x3a, 0xe4, 0x3d, 0xf4, 0x73, 0x29, 0x74, 0x12, 0xd2, 0xe0, 0x50, 0x5f, - 0xe8, 0x63, 0x60, 0x00, 0x70, 0x4b, 0x3e, 0x0a, 0x98, 0x8f, 0x39, 0x0a, 0xf8, 0xa3, 0x8d, 0xe2, - 0x8b, 0x2b, 0xa6, 0xbb, 0xda, 0x5f, 0x9e, 0x6a, 0x59, 0x9d, 0x6b, 0x2b, 0xb6, 0xfe, 0xc0, 0x64, - 0x9b, 0xe0, 0x7a, 0xfb, 0x9a, 0x9f, 0xa7, 0x53, 0xef, 0x99, 0x3c, 0x83, 0x67, 0x03, 0x1c, 0x0c, - 0xca, 0xd5, 0x3b, 0x44, 0x70, 0x10, 0x7a, 0xc3, 0x32, 0xbb, 0xfc, 0x80, 0x99, 0xcd, 0x2e, 0x0d, - 0xea, 0x94, 0xbd, 0x67, 0x99, 0xdd, 0x66, 0xf8, 0x94, 0x79, 0xb7, 0xf5, 0x05, 0xac, 0x35, 0xa1, - 0x1a, 0xf5, 0x5f, 0x25, 0xd0, 0x63, 0xb2, 0xee, 0x7d, 0x1c, 0x0c, 0xf6, 0x6f, 0x25, 0xd0, 0xa9, - 0x5b, 0x20, 0x1c, 0xff, 0xc0, 0xef, 0xe3, 0xf7, 0x45, 0x87, 0xdc, 0x48, 0xfc, 0x66, 0x02, 0x9d, - 0x58, 0xac, 0x55, 0xca, 0x1f, 0x97, 0x1e, 0x8a, 0x7c, 0xcf, 0xc7, 0xa0, 0x7f, 0x1a, 0xa5, 0xf9, - 0xb9, 0x8f, 0x53, 0xff, 0x48, 0xdf, 0x73, 0xc8, 0xfb, 0xe7, 0x47, 0x32, 0x28, 0x7f, 0xbb, 0xbf, - 0x4c, 0xf8, 0xb9, 0xd1, 0x91, 0x5e, 0x94, 0x5d, 0x47, 0x79, 0x2e, 0x06, 0xd8, 0xd0, 0x10, 0xf2, - 0x2d, 0xf0, 0xfb, 0x73, 0xec, 0x4a, 0xab, 0x48, 0x44, 0x17, 0xc7, 0x6f, 0x11, 0x7b, 0x59, 0x0c, - 0x45, 0x7e, 0x40, 0xec, 0x65, 0x0d, 0xa0, 0x78, 0x2e, 0x88, 0x10, 0x2a, 0xd5, 0x6b, 0x90, 0x67, - 0x93, 0xef, 0xa5, 0x40, 0xe2, 0x50, 0xff, 0x8c, 0x58, 0xef, 0x99, 0x2c, 0x43, 0xa7, 0x78, 0x0d, - 0x22, 0x5c, 0x12, 0x2f, 0xa0, 0x49, 0xf1, 0x4c, 0x92, 0x25, 0x99, 0xcc, 0xc5, 0xb0, 0x8b, 0x4b, - 0x2f, 0x19, 0x2d, 0x8a, 0x5f, 0x43, 0xa3, 0x1e, 0x10, 0x4e, 0x57, 0x47, 0x82, 0x54, 0x6d, 0x3e, - 0xab, 0x50, 0xf6, 0x59, 0xa9, 0x80, 0xc8, 0x00, 0x76, 0x08, 0x50, 0x0c, 0x83, 0xd0, 0xf1, 0xb1, - 0x54, 0x00, 0x7f, 0x0a, 0x18, 0xf4, 0xac, 0xae, 0x43, 0xe0, 0x1c, 0x29, 0x0f, 0x71, 0xba, 0x10, - 0x81, 0x64, 0x73, 0x38, 0x8b, 0xc6, 0x96, 0xc8, 0xf0, 0x22, 0x42, 0xc1, 0x7e, 0x3f, 0xbf, 0xf3, - 0xb2, 0xeb, 0x93, 0x08, 0x81, 0x85, 0xfa, 0x3b, 0x74, 0xa9, 0xdd, 0xeb, 0xf9, 0x9a, 0xfc, 0x1c, - 0xca, 0x94, 0x7a, 0xbd, 0x3b, 0x5a, 0x4d, 0xcc, 0x41, 0xa6, 0xf7, 0x7a, 0xcd, 0xbe, 0x6d, 0x8a, - 0xe1, 0x0f, 0x8c, 0x08, 0x97, 0xd1, 0x58, 0xa9, 0xd7, 0xab, 0xf7, 0x97, 0xdb, 0x66, 0x4b, 0xc8, - 0x7b, 0xcb, 0x12, 0x56, 0xf7, 0x7a, 0xcd, 0x1e, 0x60, 0xc2, 0x89, 0x8b, 0xe5, 0x32, 0xf8, 0x5d, - 0xb8, 0xe8, 0xc9, 0xd3, 0xae, 0xa6, 0x20, 0xc0, 0x40, 0xf5, 0x93, 0xd2, 0x05, 0x6d, 0x9b, 0xf2, - 0x89, 0x58, 0x86, 0xd5, 0x73, 0x5e, 0x86, 0x37, 0x5a, 0x51, 0x24, 0xbd, 0x6a, 0xc0, 0x12, 0x7f, - 0x12, 0x65, 0x4b, 0xbd, 0x9e, 0xb0, 0x93, 0x03, 0xc7, 0x75, 0xb4, 0x54, 0xa8, 0x8b, 0x3c, 0xb2, - 0xb3, 0xaf, 0xa0, 0x71, 0xb9, 0xb2, 0x5d, 0xa5, 0x60, 0xfd, 0xc3, 0x04, 0x7c, 0xd0, 0x21, 0x0f, - 0xdf, 0x79, 0x01, 0xa5, 0x4a, 0xbd, 0x1e, 0x37, 0x27, 0x27, 0x62, 0xfa, 0x23, 0x1c, 0xf4, 0x5e, - 0xea, 0xf5, 0xbc, 0x4f, 0x67, 0x01, 0x76, 0x47, 0xeb, 0xd3, 0xbf, 0xc9, 0x3e, 0xfd, 0x90, 0xc7, - 0xc3, 0xfd, 0x52, 0x0a, 0x4d, 0x94, 0x7a, 0xbd, 0xe3, 0xb4, 0x82, 0x8f, 0x2a, 0xb4, 0xfe, 0x79, - 0x84, 0x04, 0xf3, 0x98, 0xf5, 0x03, 0x4d, 0xf3, 0x82, 0x69, 0x54, 0x12, 0x9a, 0x40, 0xe4, 0xa9, - 0x5f, 0x6e, 0x57, 0xea, 0xf7, 0xe5, 0x14, 0x98, 0xe2, 0xc3, 0x7e, 0x4d, 0xf8, 0xa3, 0xd2, 0x6d, - 0xbc, 0x0f, 0x32, 0xbb, 0xea, 0x83, 0x5f, 0x93, 0x06, 0x0f, 0xa4, 0xa9, 0x3b, 0xee, 0x85, 0xe1, - 0x7d, 0x79, 0xb5, 0xe3, 0xa2, 0x30, 0xf9, 0xdd, 0x45, 0x2f, 0xef, 0x2f, 0xbf, 0x49, 0xdb, 0xa2, - 0xa8, 0xa6, 0x69, 0x68, 0x21, 0x5a, 0xaf, 0x0f, 0xb3, 0xbb, 0xea, 0xc3, 0x8d, 0x24, 0x44, 0xcb, - 0xfb, 0x37, 0x71, 0xf7, 0xbf, 0x38, 0xb8, 0x86, 0x10, 0xdb, 0xd3, 0xf7, 0x03, 0x86, 0xc6, 0xd8, - 0xa5, 0x3b, 0x96, 0x0e, 0x98, 0x5f, 0xba, 0x0b, 0x48, 0xfc, 0xb3, 0xc7, 0x54, 0xec, 0xd9, 0xe3, - 0x15, 0x94, 0xd3, 0xf4, 0xb5, 0x37, 0xfb, 0xc4, 0x5e, 0xe7, 0xee, 0x0c, 0x4b, 0x74, 0xa1, 0xaf, - 0x35, 0xbf, 0x48, 0x81, 0x9a, 0x8f, 0xc6, 0xaa, 0x7f, 0xdd, 0x42, 0x38, 0x6b, 0x61, 0x1b, 0x61, - 0xfe, 0x25, 0x8b, 0xbd, 0x28, 0x3a, 0x7e, 0x19, 0xa5, 0x4a, 0x77, 0x1b, 0x5c, 0xb2, 0x7e, 0xd7, - 0x96, 0xee, 0x36, 0xb8, 0xbc, 0x06, 0x96, 0xbd, 0xdb, 0x50, 0xbf, 0x9c, 0x44, 0x38, 0x4a, 0x89, - 0x5f, 0x44, 0x23, 0x00, 0x5d, 0xa1, 0x3a, 0x23, 0x3e, 0xbb, 0xb0, 0xe6, 0x34, 0x6d, 0x80, 0x4a, - 0xce, 0x9d, 0x47, 0x8a, 0x5f, 0x82, 0xf7, 0x56, 0x78, 0xee, 0x70, 0xe9, 0xd9, 0x85, 0x35, 0xc7, - 0x7b, 0xa1, 0x24, 0xf4, 0xdc, 0x0a, 0x27, 0x06, 0xbf, 0xf0, 0x6e, 0x63, 0xd6, 0x72, 0x5c, 0x2e, - 0x6a, 0xe6, 0x17, 0xae, 0x39, 0xf0, 0x56, 0x87, 0xe4, 0x17, 0x32, 0x32, 0x48, 0xc2, 0x7c, 0xb7, - 0x51, 0x72, 0x9c, 0x7e, 0x87, 0x18, 0x9a, 0xd5, 0xf6, 0x1c, 0x4a, 0x96, 0x84, 0x79, 0xcd, 0x69, - 0xea, 0x0c, 0x05, 0x0f, 0xbd, 0x48, 0x49, 0x98, 0xa5, 0x52, 0xea, 0x8f, 0xe7, 0x50, 0xa1, 0xa2, - 0xbb, 0xfa, 0xb2, 0xee, 0x10, 0x61, 0x31, 0x3c, 0xe1, 0xc1, 0xbc, 0xcf, 0x11, 0xe4, 0x60, 0x2c, - 0xc7, 0x7c, 0x4d, 0xb8, 0x00, 0xfe, 0x4c, 0xc0, 0xd7, 0x7f, 0x51, 0x42, 0xcc, 0xb9, 0xbd, 0xdc, - 0xec, 0x71, 0xb0, 0x16, 0x21, 0xc4, 0x57, 0x51, 0xde, 0x83, 0xd1, 0x05, 0x40, 0x2a, 0xd0, 0x19, - 0x63, 0x99, 0xfa, 0xff, 0x9a, 0x88, 0xc6, 0x2f, 0xa1, 0x51, 0xef, 0xa7, 0xe0, 0x5a, 0xb3, 0x04, - 0xe2, 0xcb, 0x91, 0xc5, 0x8f, 0x48, 0x2a, 0x16, 0x05, 0xfb, 0x36, 0x2c, 0x15, 0x0d, 0xe5, 0xe8, - 0x96, 0x48, 0xf1, 0x17, 0xd1, 0xb8, 0xf7, 0x9b, 0x2f, 0x18, 0x58, 0x3a, 0xf3, 0xab, 0xfe, 0x3b, - 0x32, 0x21, 0xb1, 0x4e, 0xc9, 0xe4, 0x6c, 0xe9, 0xf0, 0xb8, 0x97, 0x76, 0xda, 0x58, 0x8e, 0xae, - 0x1c, 0x42, 0x15, 0xe0, 0x1a, 0x9a, 0xf4, 0x20, 0x81, 0x86, 0x66, 0x83, 0x05, 0x9f, 0xb1, 0xdc, - 0x8c, 0x55, 0xd2, 0x68, 0x29, 0xdc, 0x46, 0xe7, 0x24, 0xa0, 0xe1, 0xac, 0x9a, 0xf7, 0x5c, 0xbe, - 0x5a, 0xe3, 0x59, 0xa7, 0x78, 0x5a, 0x7e, 0x9f, 0x2b, 0xa3, 0xf1, 0xde, 0xd7, 0x90, 0xd3, 0xf2, - 0x6f, 0xc9, 0x0d, 0x37, 0xd0, 0x49, 0x0f, 0x7f, 0xab, 0x5c, 0xaf, 0xdb, 0xd6, 0x7b, 0xa4, 0xe5, - 0xd6, 0x2a, 0x7c, 0xb5, 0x0b, 0xd9, 0x08, 0x8c, 0xe5, 0xe6, 0x4a, 0xab, 0x47, 0x95, 0x82, 0xe2, - 0x64, 0xe6, 0xb1, 0x85, 0xf1, 0x5b, 0xe8, 0x94, 0x00, 0xaf, 0x75, 0x1d, 0x57, 0xef, 0xb6, 0x48, - 0xad, 0xc2, 0x97, 0xc0, 0xb0, 0x1c, 0xe7, 0x5c, 0x4d, 0x8e, 0x94, 0xd9, 0xc6, 0x17, 0xc7, 0xaf, - 0xa0, 0x31, 0x0f, 0xc1, 0x8e, 0x0a, 0xf2, 0x70, 0x54, 0x00, 0x43, 0xd2, 0x58, 0x6e, 0x86, 0x2f, - 0x0e, 0xc8, 0xc4, 0xa2, 0x46, 0xc1, 0xbb, 0x5b, 0xa3, 0x92, 0x46, 0xb9, 0xeb, 0xbd, 0x58, 0x65, - 0x84, 0xb7, 0xb8, 0x5e, 0x0b, 0x34, 0x6a, 0xd1, 0x36, 0x57, 0x4c, 0x16, 0x84, 0xee, 0xdd, 0x15, - 0x58, 0x6e, 0x5a, 0x00, 0x8c, 0xd3, 0x0f, 0x46, 0x7e, 0xb6, 0x84, 0x4e, 0xc4, 0xe8, 0xd8, 0xae, - 0x56, 0x8c, 0x5f, 0x4b, 0x06, 0x8d, 0x38, 0xe4, 0xcb, 0xc6, 0x69, 0x94, 0xf3, 0xbe, 0x84, 0x3b, - 0x0f, 0xca, 0xa0, 0xa1, 0x19, 0xe6, 0xe1, 0xe1, 0x25, 0x71, 0x1c, 0xf2, 0xa5, 0xe4, 0xa3, 0x10, - 0xc7, 0x07, 0x89, 0x40, 0x1c, 0x87, 0x7c, 0x79, 0xf9, 0x9b, 0xa9, 0xc0, 0x26, 0x1d, 0xaf, 0x31, - 0x1f, 0x95, 0x9b, 0x1c, 0x44, 0x98, 0x64, 0x76, 0x71, 0x45, 0x40, 0x54, 0xcd, 0xec, 0x1e, 0x55, - 0xf3, 0xf7, 0xa2, 0xfd, 0xc9, 0x5c, 0xcf, 0x43, 0xd9, 0x9f, 0x8f, 0x60, 0xb0, 0xe2, 0xeb, 0xc1, - 0x3c, 0xc6, 0x7c, 0xf4, 0x61, 0x21, 0xa9, 0xc3, 0x32, 0x77, 0xd1, 0x65, 0x12, 0xfc, 0x79, 0x74, - 0x46, 0x02, 0xd4, 0x75, 0x5b, 0xef, 0x10, 0x97, 0xd8, 0xcc, 0xbb, 0xe1, 0xd7, 0x74, 0xbd, 0xd2, - 0xcd, 0x9e, 0x8f, 0x16, 0x9f, 0xcf, 0x19, 0xc0, 0x41, 0x50, 0x8e, 0xec, 0x2e, 0xc2, 0x8f, 0xfe, - 0x43, 0x12, 0x8d, 0xd5, 0x2d, 0xc7, 0x5d, 0xb1, 0x89, 0x53, 0xd7, 0x6d, 0x87, 0x1c, 0xdd, 0x1e, - 0xfd, 0x34, 0x1a, 0x83, 0x3b, 0x71, 0x1d, 0xd2, 0x75, 0x85, 0x87, 0x9b, 0x58, 0xa2, 0x39, 0x0f, - 0xc1, 0x73, 0x8a, 0x4a, 0x84, 0xb8, 0x88, 0x86, 0x99, 0x0e, 0x08, 0x37, 0x15, 0x99, 0x02, 0x30, - 0xb8, 0xfa, 0x57, 0x52, 0x68, 0xd4, 0x93, 0xf2, 0xb4, 0x79, 0x58, 0xf7, 0x6c, 0x0e, 0x56, 0xc8, - 0xd7, 0x10, 0xaa, 0x5b, 0xb6, 0xab, 0xb7, 0x85, 0xd7, 0x4b, 0x61, 0xb1, 0xd3, 0x03, 0x28, 0x2b, - 0x23, 0x90, 0xe0, 0x29, 0x84, 0x84, 0x01, 0x96, 0x85, 0x01, 0x36, 0xbe, 0xb9, 0x51, 0x44, 0xc1, - 0xb8, 0xd2, 0x04, 0x0a, 0xf5, 0x1f, 0x24, 0xd1, 0x84, 0xd7, 0x49, 0xd5, 0x87, 0xa4, 0xd5, 0x77, - 0x8f, 0xf0, 0x60, 0x90, 0xa5, 0x3d, 0xbc, 0xad, 0xb4, 0xd5, 0xff, 0x2a, 0x18, 0x92, 0x72, 0xdb, - 0x3a, 0x36, 0x24, 0x7f, 0x1c, 0x3a, 0xae, 0x7e, 0x25, 0x85, 0x4e, 0x7a, 0x52, 0x9f, 0xe9, 0x77, - 0xc1, 0x4d, 0x28, 0xeb, 0xed, 0xf6, 0x51, 0x9e, 0x97, 0xf3, 0x9e, 0x20, 0x16, 0xf9, 0x25, 0x73, - 0x9e, 0xdf, 0xf9, 0x1e, 0x07, 0x37, 0x2d, 0xd3, 0xd0, 0x44, 0x22, 0xfc, 0x1a, 0x1a, 0xf5, 0x7e, - 0x96, 0xec, 0x15, 0x6f, 0x32, 0x86, 0x45, 0xbf, 0x5f, 0x48, 0xb7, 0xa5, 0xd0, 0x7d, 0xa9, 0x80, - 0xfa, 0x1f, 0x33, 0xe8, 0xec, 0x5d, 0xb3, 0x6b, 0x58, 0x6b, 0x8e, 0x97, 0x1e, 0xfc, 0xd0, 0x3b, - 0xbd, 0x07, 0x9d, 0x16, 0xfc, 0x4d, 0x74, 0x2a, 0x2c, 0x52, 0xdb, 0x4f, 0xda, 0xc2, 0x7b, 0x67, - 0x8d, 0x11, 0x34, 0xbd, 0x44, 0xe1, 0x7c, 0xe7, 0x4c, 0x8b, 0x2f, 0x19, 0xce, 0x34, 0x9e, 0xdd, - 0x49, 0xa6, 0xf1, 0x67, 0x50, 0xa6, 0x62, 0x75, 0x74, 0xd3, 0xbb, 0xc4, 0x05, 0xa3, 0xd8, 0xaf, - 0x17, 0x30, 0x1a, 0xa7, 0xa0, 0xfc, 0x79, 0xc5, 0xd0, 0x65, 0x23, 0x01, 0x7f, 0xaf, 0x40, 0xdf, - 0x21, 0xb6, 0x26, 0x12, 0x61, 0x0b, 0x8d, 0xf1, 0xea, 0xf8, 0x3e, 0x17, 0x82, 0x7d, 0xae, 0x4f, - 0x79, 0x32, 0x1a, 0xac, 0x56, 0x53, 0x52, 0x39, 0xb6, 0xe1, 0xc5, 0x12, 0xa0, 0xf3, 0x8f, 0x61, - 0x3b, 0x5e, 0x9a, 0xcc, 0x5f, 0x10, 0x02, 0x18, 0x99, 0x7c, 0x54, 0x08, 0x60, 0x65, 0x44, 0x22, - 0x5c, 0x45, 0x93, 0xa5, 0x76, 0xdb, 0x5a, 0xf3, 0xb3, 0xa3, 0x50, 0x95, 0x18, 0x85, 0x0c, 0x91, - 0xb0, 0x7d, 0xa2, 0x53, 0x24, 0x7c, 0x5c, 0xb3, 0xc5, 0xd1, 0x5a, 0xb4, 0xc4, 0xd9, 0xd7, 0x11, - 0x8e, 0xb6, 0x79, 0x57, 0x1b, 0x28, 0x3f, 0x9e, 0x44, 0x38, 0xb4, 0x0e, 0xa9, 0x1e, 0x61, 0x77, - 0x4a, 0xfd, 0x85, 0x04, 0x9a, 0x8c, 0x64, 0x2d, 0xc2, 0x2f, 0x20, 0xc4, 0x20, 0x42, 0xea, 0x01, - 0xb8, 0xcb, 0x13, 0x64, 0x32, 0xe2, 0x53, 0x49, 0x40, 0x86, 0xaf, 0xa1, 0x1c, 0xfb, 0xe5, 0x3f, - 0x83, 0x1d, 0x2e, 0xd2, 0xef, 0x9b, 0x86, 0xe6, 0x13, 0x05, 0xb5, 0xc0, 0x4e, 0x5c, 0x2a, 0xb6, - 0x88, 0xbb, 0xde, 0xf3, 0x6b, 0xa1, 0x64, 0xea, 0x37, 0x13, 0x68, 0xd4, 0x6f, 0x70, 0xc9, 0x38, - 0xa8, 0xae, 0xcb, 0xf0, 0x04, 0x50, 0xa9, 0xed, 0x12, 0x40, 0x85, 0x6c, 0x13, 0x7f, 0x88, 0xfc, - 0x9f, 0x25, 0xd0, 0x84, 0x4f, 0x7b, 0x80, 0x5b, 0x35, 0xfb, 0xfe, 0x90, 0x9f, 0x48, 0x20, 0x65, - 0xda, 0x6c, 0xb7, 0xcd, 0xee, 0x4a, 0xad, 0x7b, 0xcf, 0xb2, 0x3b, 0x30, 0x50, 0x0f, 0x6e, 0x2f, - 0x4e, 0xfd, 0xb3, 0x09, 0x34, 0xc9, 0x1b, 0x54, 0xd6, 0x6d, 0xe3, 0xe0, 0x36, 0x49, 0xc3, 0x2d, - 0x39, 0xb8, 0x5e, 0x56, 0xff, 0x6f, 0x02, 0xa1, 0x39, 0xab, 0x75, 0xff, 0x90, 0x5f, 0x0e, 0x78, - 0x09, 0x65, 0xd8, 0xfd, 0x48, 0x6e, 0xed, 0x26, 0xa7, 0x58, 0xc4, 0x3d, 0xfd, 0x34, 0x86, 0x98, - 0x1e, 0xe7, 0xe7, 0x35, 0x19, 0x76, 0xbf, 0x52, 0xe3, 0x05, 0xe0, 0x46, 0x0e, 0x25, 0x3b, 0xe4, - 0xa1, 0xa8, 0x7f, 0x2e, 0x81, 0x4e, 0x6a, 0xa4, 0x65, 0x3d, 0x20, 0xf6, 0x7a, 0xd9, 0x32, 0xc8, - 0x2d, 0xd2, 0x25, 0xf6, 0x41, 0xe9, 0xf7, 0x3f, 0x84, 0xe4, 0x6e, 0x41, 0x63, 0xee, 0x38, 0xc4, - 0x38, 0x3c, 0x29, 0x06, 0xd5, 0xbf, 0x9b, 0x45, 0x4a, 0xac, 0x6f, 0x74, 0x68, 0xfd, 0x81, 0x81, - 0x0e, 0x6f, 0xfa, 0x51, 0x39, 0xbc, 0xc3, 0xbb, 0x73, 0x78, 0x33, 0xbb, 0x75, 0x78, 0xb3, 0x3b, - 0x71, 0x78, 0x3b, 0x61, 0x87, 0x37, 0x07, 0x0e, 0xef, 0x0b, 0x5b, 0x3a, 0xbc, 0xd5, 0xae, 0xb1, - 0x47, 0x77, 0xf7, 0xd0, 0x26, 0xd6, 0xdf, 0x8b, 0x9f, 0x7e, 0x99, 0x1a, 0xb7, 0x96, 0x65, 0x1b, - 0xc4, 0xe0, 0xee, 0x39, 0xec, 0x47, 0xdb, 0x1c, 0xa6, 0xf9, 0xd8, 0xc8, 0x2b, 0x05, 0x63, 0x3b, - 0x79, 0xa5, 0xe0, 0x11, 0x38, 0xf0, 0xdf, 0x49, 0xa0, 0xc9, 0x32, 0xb1, 0x5d, 0x96, 0x0e, 0xe1, - 0x51, 0x1c, 0x82, 0x96, 0xd0, 0x84, 0xc0, 0x10, 0x7c, 0xd1, 0x64, 0x70, 0xb0, 0xdb, 0x22, 0xb6, - 0x1b, 0x3e, 0x17, 0x0e, 0xd3, 0xd3, 0xea, 0xbd, 0x4c, 0xa1, 0x7c, 0xec, 0xfa, 0xd5, 0x7b, 0x70, - 0x26, 0x48, 0x93, 0xff, 0xd2, 0x7c, 0x7a, 0xf5, 0xe7, 0x13, 0xe8, 0x92, 0x46, 0xba, 0x64, 0x4d, - 0x5f, 0x6e, 0x13, 0x81, 0x31, 0xb7, 0xed, 0x74, 0xdc, 0x9b, 0x4e, 0x47, 0x77, 0x5b, 0xab, 0xfb, - 0xfa, 0xca, 0x19, 0x34, 0x2a, 0x5a, 0xa0, 0x5d, 0x58, 0x27, 0xa9, 0x9c, 0xfa, 0xfd, 0x24, 0xca, - 0x4e, 0x5b, 0xee, 0xbe, 0x5f, 0xd9, 0x0d, 0x8c, 0x76, 0x72, 0x17, 0x6b, 0xfa, 0x4f, 0x42, 0xe5, - 0x42, 0x2a, 0x33, 0x38, 0xf6, 0x5f, 0xb6, 0x22, 0x39, 0xd8, 0x3c, 0xb2, 0x5d, 0x66, 0x92, 0x7d, - 0x11, 0x8d, 0xc0, 0xb5, 0x3c, 0x61, 0xd7, 0x0d, 0x82, 0x6a, 0x5c, 0x0a, 0x0c, 0xd7, 0x11, 0x90, - 0xe2, 0xcf, 0x4b, 0x19, 0x18, 0x32, 0xfb, 0xcf, 0x3c, 0x2b, 0xb0, 0x53, 0x7f, 0x2b, 0x85, 0x46, - 0xbd, 0x00, 0x88, 0x03, 0x92, 0xfb, 0x73, 0x28, 0x33, 0x6b, 0x09, 0xc9, 0xd4, 0x20, 0x60, 0x62, - 0xd5, 0x72, 0x42, 0x91, 0x20, 0x9c, 0x08, 0xbf, 0x80, 0x72, 0x0b, 0x96, 0x21, 0x86, 0xfb, 0xc0, - 0x58, 0xea, 0x5a, 0x46, 0xe4, 0xb6, 0x83, 0x4f, 0x88, 0x2f, 0xa1, 0x34, 0x44, 0x4a, 0x09, 0x9b, - 0x9d, 0xa1, 0xe8, 0x28, 0xc0, 0x0b, 0x3d, 0x9a, 0xd9, 0x6d, 0x8f, 0x66, 0xf7, 0xda, 0xa3, 0xb9, - 0x47, 0xdb, 0xa3, 0xbf, 0x97, 0x40, 0xd9, 0x3b, 0xdd, 0xfb, 0x5d, 0x6b, 0x6d, 0x7f, 0x9d, 0xf9, - 0x02, 0xca, 0x73, 0x36, 0x82, 0xd9, 0x82, 0xbb, 0x21, 0x7d, 0x06, 0x6e, 0x02, 0x27, 0x4d, 0xa4, - 0xc2, 0xaf, 0xf8, 0x85, 0x20, 0xce, 0x30, 0x15, 0x64, 0xfa, 0xf3, 0x0a, 0xb5, 0xe4, 0xe4, 0x64, - 0x22, 0x39, 0x3e, 0xc7, 0x1f, 0x52, 0x16, 0x52, 0x5d, 0xd0, 0xa6, 0xb0, 0x77, 0x94, 0xd5, 0xdf, - 0x48, 0xa2, 0xf1, 0xd0, 0x5e, 0xc2, 0x33, 0x68, 0x84, 0xaf, 0xe5, 0x4d, 0x2f, 0x5b, 0x1a, 0xc4, - 0x21, 0xfa, 0x40, 0x2d, 0xc7, 0xfe, 0xac, 0x19, 0xf8, 0xb3, 0x28, 0x6b, 0x39, 0x60, 0x6d, 0xe1, - 0x5b, 0xc6, 0x03, 0xed, 0x5c, 0x6c, 0xd0, 0xb6, 0x33, 0xbd, 0xe3, 0x24, 0x62, 0x67, 0x5b, 0x0e, - 0x7c, 0xda, 0x0d, 0x34, 0xa2, 0x3b, 0x0e, 0x71, 0x9b, 0xae, 0xbe, 0x22, 0x26, 0x50, 0xf3, 0x81, - 0xa2, 0xe2, 0x01, 0x70, 0x49, 0x5f, 0xc1, 0xaf, 0xa3, 0xb1, 0x96, 0x4d, 0xc0, 0x1e, 0xeb, 0x6d, - 0xda, 0x4a, 0xc1, 0x5f, 0x92, 0x10, 0xe2, 0xf6, 0x6d, 0x80, 0xa8, 0x19, 0xf8, 0x2d, 0x34, 0xc6, - 0x3f, 0x87, 0x05, 0x01, 0x81, 0x0e, 0x8f, 0x07, 0xd6, 0x95, 0x89, 0x84, 0x85, 0x01, 0xf1, 0x58, - 0x30, 0x91, 0x5c, 0xe4, 0x6b, 0x08, 0xa4, 0xea, 0xb7, 0x13, 0x74, 0x0e, 0xa7, 0x00, 0xff, 0x4d, - 0xb6, 0xce, 0x2e, 0x75, 0xa5, 0x13, 0xa4, 0x5d, 0xce, 0x38, 0x5b, 0x0c, 0x7c, 0x8d, 0x63, 0xf1, - 0x14, 0xca, 0x18, 0xe2, 0x96, 0xc0, 0x69, 0xf9, 0x23, 0xbc, 0x7a, 0x34, 0x4e, 0x85, 0x2f, 0xa3, - 0x34, 0xf5, 0xd1, 0xf8, 0x9a, 0x2c, 0x76, 0x42, 0xd1, 0x80, 0x42, 0xfd, 0x52, 0x12, 0x8d, 0x0a, - 0x5f, 0x73, 0x7d, 0x5f, 0x9f, 0xf3, 0xf2, 0xce, 0x9a, 0xc9, 0xc3, 0x12, 0x01, 0xe6, 0x37, 0xf9, - 0x86, 0x2f, 0x8a, 0x1d, 0xed, 0x27, 0x73, 0xc1, 0xbc, 0xc8, 0x3f, 0x34, 0xb3, 0x73, 0xbf, 0x9e, - 0xd2, 0xbf, 0x91, 0xce, 0x25, 0x0b, 0xa9, 0x37, 0xd2, 0xb9, 0x74, 0x61, 0x58, 0xfd, 0xd7, 0x73, - 0x68, 0x78, 0xb1, 0x4b, 0x16, 0xef, 0xe1, 0xe7, 0x85, 0xc4, 0xec, 0xfc, 0xe3, 0x27, 0x45, 0x96, - 0x80, 0x98, 0x1d, 0xd2, 0x84, 0xf4, 0xed, 0x37, 0xc4, 0xec, 0xd2, 0xbc, 0x17, 0xb1, 0x58, 0x86, - 0x61, 0x66, 0x87, 0x34, 0x31, 0x0b, 0xf5, 0x0d, 0x31, 0xfd, 0x32, 0x17, 0x96, 0x54, 0x8a, 0x61, - 0xbc, 0x52, 0x7c, 0x85, 0x3c, 0x17, 0x97, 0xed, 0x38, 0xbc, 0x89, 0x1f, 0xa5, 0x98, 0x1d, 0xd2, - 0xe2, 0xb3, 0x24, 0x8f, 0x8a, 0x1b, 0xcf, 0x5c, 0xec, 0x27, 0x43, 0xeb, 0x1b, 0xc0, 0xcd, 0x0e, - 0x69, 0x12, 0x2d, 0xbe, 0x29, 0xbd, 0xec, 0x1f, 0x8e, 0x3f, 0x16, 0x50, 0xb3, 0x43, 0x9a, 0x48, - 0x29, 0x54, 0x0a, 0xcf, 0xcc, 0xf3, 0xa8, 0x86, 0x70, 0xa5, 0x80, 0x13, 0x2a, 0x65, 0x4f, 0xd2, - 0xbf, 0x1a, 0x7a, 0x44, 0x93, 0x4f, 0x00, 0xa7, 0x42, 0x85, 0x19, 0x72, 0x76, 0x48, 0x0b, 0x3d, - 0xb9, 0x79, 0xd9, 0x7b, 0xb8, 0x8f, 0x2f, 0x18, 0xc6, 0x85, 0x1d, 0x02, 0xf3, 0x7d, 0x2a, 0x25, - 0xef, 0x61, 0xbf, 0x1b, 0xe2, 0x83, 0x6d, 0x7c, 0x05, 0x80, 0x43, 0xb5, 0x54, 0xbb, 0x06, 0xed, - 0x1d, 0x61, 0x79, 0xfa, 0x7a, 0xf8, 0x69, 0x23, 0xfe, 0x60, 0xd6, 0xe9, 0x50, 0x49, 0x8e, 0x9d, - 0x1d, 0xd2, 0xc2, 0x4f, 0x21, 0xdd, 0x94, 0x9e, 0xd5, 0xe1, 0x17, 0x04, 0xc3, 0x52, 0xa5, 0x28, - 0x41, 0xaa, 0xf0, 0x00, 0xcf, 0xeb, 0xe1, 0x77, 0x5e, 0x78, 0x2a, 0xde, 0xd3, 0xf1, 0xaf, 0x81, - 0x08, 0x55, 0x7b, 0xef, 0xc2, 0xdc, 0x94, 0xde, 0xe3, 0x80, 0x27, 0xaf, 0x62, 0xaa, 0xd6, 0x5d, - 0x5d, 0xac, 0x9a, 0x0d, 0x79, 0xe9, 0x65, 0x08, 0x48, 0xcb, 0x1b, 0xed, 0x50, 0xc0, 0x09, 0x1d, - 0xca, 0x5e, 0x91, 0xb8, 0x29, 0x65, 0x7a, 0x55, 0x0a, 0x72, 0xa5, 0x02, 0x8a, 0x56, 0x2a, 0xe6, - 0x84, 0xbd, 0x21, 0x26, 0x40, 0x55, 0x26, 0xe5, 0x0e, 0x0a, 0x30, 0xb4, 0x83, 0x84, 0x44, 0xa9, - 0x45, 0x48, 0xae, 0xa8, 0x60, 0x20, 0xcf, 0xfb, 0x2d, 0x2c, 0xd7, 0x67, 0x87, 0x34, 0x48, 0xbb, - 0xa8, 0xb2, 0xb4, 0x9d, 0xca, 0x09, 0xa0, 0x18, 0xf5, 0xdf, 0x3d, 0x79, 0x48, 0x5a, 0xb3, 0x43, - 0x1a, 0x4b, 0xe9, 0xf9, 0xbc, 0x90, 0x20, 0x4b, 0x39, 0x29, 0x9b, 0x08, 0x1f, 0x41, 0x4d, 0x44, - 0x90, 0x46, 0x6b, 0x26, 0x9a, 0x44, 0x4a, 0x39, 0x25, 0x6f, 0x52, 0x85, 0xf1, 0xb3, 0x43, 0x5a, - 0x34, 0xf1, 0xd4, 0x4d, 0x29, 0xaf, 0x92, 0x72, 0x3a, 0x14, 0xf4, 0x1f, 0xa0, 0xa8, 0xb8, 0xc4, - 0x0c, 0x4c, 0x8b, 0xb1, 0xa9, 0xc9, 0x95, 0x33, 0xc0, 0xe0, 0x71, 0x9f, 0x41, 0x94, 0x64, 0x76, - 0x48, 0x8b, 0x4d, 0x6a, 0x5e, 0x8e, 0x64, 0x37, 0x52, 0x14, 0x79, 0x77, 0x24, 0x84, 0x9e, 0x1d, - 0xd2, 0x22, 0xf9, 0x90, 0x6e, 0x88, 0x69, 0x85, 0x94, 0xc7, 0xe4, 0x4e, 0x0c, 0x30, 0xb4, 0x13, - 0x85, 0xf4, 0x43, 0x37, 0xc4, 0x2c, 0x3e, 0xca, 0xd9, 0x68, 0xa9, 0xc0, 0x72, 0x0a, 0xd9, 0x7e, - 0xb4, 0xf8, 0xa4, 0x39, 0xca, 0xe3, 0x3c, 0x7f, 0x21, 0x2f, 0x1f, 0x47, 0x33, 0x3b, 0xa4, 0xc5, - 0x27, 0xdc, 0xd1, 0xe2, 0xf3, 0xd6, 0x28, 0xe7, 0xb6, 0xe2, 0xe9, 0xb7, 0x2e, 0x3e, 0xe7, 0x8d, - 0xbe, 0x45, 0x3e, 0x12, 0xe5, 0xbc, 0x7c, 0x61, 0x78, 0x20, 0xe1, 0xec, 0x90, 0xb6, 0x45, 0x56, - 0x93, 0x3b, 0x03, 0x92, 0x83, 0x28, 0x17, 0xe4, 0xf4, 0xa5, 0xb1, 0x44, 0xb3, 0x43, 0xda, 0x80, - 0xd4, 0x22, 0x77, 0x06, 0x64, 0xe8, 0x50, 0x8a, 0x5b, 0xb2, 0xf5, 0xe5, 0x31, 0x20, 0xbf, 0xc7, - 0x62, 0x6c, 0x9a, 0x0c, 0xe5, 0xa2, 0xac, 0xba, 0x31, 0x24, 0x54, 0x75, 0xe3, 0x12, 0x6c, 0x2c, - 0xc6, 0xe6, 0xa9, 0x50, 0x9e, 0xd8, 0x82, 0xa1, 0xdf, 0xc6, 0xd8, 0x0c, 0x17, 0x8b, 0xb1, 0x89, - 0x22, 0x14, 0x55, 0x66, 0x18, 0x43, 0x42, 0x19, 0xc6, 0xa5, 0x98, 0x58, 0x8c, 0xcd, 0xd4, 0xa0, - 0x3c, 0xb9, 0x05, 0xc3, 0xa0, 0x85, 0x71, 0x39, 0x1e, 0x6e, 0x4a, 0xa9, 0x12, 0x94, 0xa7, 0x64, - 0xbb, 0x21, 0xa0, 0xa8, 0xdd, 0x10, 0x93, 0x2a, 0x94, 0x23, 0xb7, 0x49, 0x95, 0x4f, 0xc8, 0xc3, - 0x3c, 0x84, 0xa6, 0xc3, 0x3c, 0x7c, 0xff, 0xb4, 0x1c, 0xb9, 0x55, 0xa7, 0x5c, 0x1a, 0xc4, 0x04, - 0xd0, 0x32, 0x13, 0x76, 0x0f, 0xaf, 0x16, 0x73, 0xad, 0x4b, 0x79, 0x5a, 0x3e, 0x1d, 0x8b, 0x10, - 0xcc, 0x0e, 0x69, 0x31, 0x97, 0xc1, 0xb4, 0xf8, 0x18, 0x66, 0xe5, 0xb2, 0x3c, 0x6c, 0xe3, 0x68, - 0xe8, 0xb0, 0x8d, 0x8d, 0x7f, 0x9e, 0x8b, 0x3b, 0xbf, 0x56, 0xae, 0xc8, 0x8e, 0x59, 0x94, 0x82, - 0x3a, 0x66, 0x31, 0xe7, 0xde, 0x5a, 0x7c, 0x54, 0xae, 0xf2, 0xcc, 0x96, 0x2d, 0x04, 0x9a, 0x98, - 0x16, 0xb2, 0x20, 0xd5, 0xc0, 0x77, 0xba, 0xd3, 0x83, 0xf7, 0x90, 0x9f, 0x8d, 0xf5, 0x9d, 0x18, - 0x52, 0xf0, 0x9d, 0x18, 0x80, 0xce, 0xf2, 0xe2, 0xf9, 0xae, 0x72, 0x55, 0x9e, 0xe5, 0x45, 0x1c, - 0x9d, 0xe5, 0xa5, 0xb3, 0xe0, 0x72, 0xe4, 0x54, 0x55, 0x79, 0x4e, 0x56, 0x80, 0x10, 0x9a, 0x2a, - 0x40, 0xf8, 0x1c, 0xf6, 0xdd, 0xc1, 0x27, 0x9a, 0xca, 0x14, 0x70, 0xbb, 0xe8, 0xbf, 0xec, 0x36, - 0x80, 0x6e, 0x76, 0x48, 0x1b, 0x7c, 0x2a, 0x5a, 0x8b, 0x39, 0xa0, 0x54, 0xae, 0xc9, 0x0a, 0x16, - 0x21, 0xa0, 0x0a, 0x16, 0x3d, 0xd6, 0xac, 0xc5, 0x9c, 0x30, 0x2a, 0x9f, 0x1c, 0xc8, 0xca, 0xff, - 0xe6, 0x98, 0x73, 0xc9, 0x1b, 0xe2, 0x11, 0xa1, 0xf2, 0xbc, 0x3c, 0xd9, 0x05, 0x18, 0x3a, 0xd9, - 0x09, 0x47, 0x89, 0x37, 0xc4, 0x63, 0x35, 0xe5, 0x7a, 0xb4, 0x54, 0x30, 0x45, 0x0a, 0xc7, 0x6f, - 0x5a, 0xfc, 0x29, 0x96, 0xf2, 0x82, 0xac, 0x75, 0x71, 0x34, 0x54, 0xeb, 0x62, 0x4f, 0xc0, 0x66, - 0xa2, 0x87, 0x51, 0xca, 0x8d, 0xf0, 0xf1, 0x9c, 0x8c, 0xa7, 0x9e, 0x4f, 0xe4, 0x00, 0xeb, 0xf5, - 0xf0, 0x05, 0x1b, 0xe5, 0x53, 0xa1, 0xf5, 0xa5, 0x84, 0xa5, 0xfe, 0x6d, 0xe8, 0x42, 0xce, 0xeb, - 0xe1, 0x3b, 0x29, 0xca, 0x8b, 0xf1, 0x1c, 0x7c, 0x5d, 0x09, 0xdf, 0x61, 0x79, 0x3d, 0x7c, 0x8d, - 0x43, 0xb9, 0x19, 0xcf, 0xc1, 0x97, 0x6e, 0xf8, 0xda, 0xc7, 0xf3, 0x42, 0x62, 0x09, 0xe5, 0xd3, - 0xb2, 0xeb, 0xe8, 0x23, 0xa8, 0xeb, 0x18, 0xa4, 0x9f, 0x78, 0x5e, 0x48, 0xc8, 0xa0, 0xbc, 0x14, - 0x29, 0xe2, 0x37, 0x56, 0x48, 0xdb, 0xf0, 0xbc, 0x90, 0xc8, 0x40, 0x79, 0x39, 0x52, 0xc4, 0x6f, - 0x9d, 0x90, 0xee, 0xc0, 0xd8, 0x2a, 0xce, 0x4d, 0xf9, 0x0c, 0xf0, 0x50, 0xb7, 0x0f, 0x5d, 0x9a, - 0x1d, 0xd2, 0xb6, 0x8a, 0x97, 0x7b, 0x77, 0xf0, 0xd1, 0x9e, 0xf2, 0x8a, 0x3c, 0x84, 0x07, 0xd1, - 0xd1, 0x21, 0x3c, 0xf0, 0x78, 0xf0, 0xd5, 0x50, 0xcc, 0xbb, 0xf2, 0xaa, 0x6c, 0xe2, 0x24, 0x24, - 0x35, 0x71, 0xe1, 0x08, 0x79, 0x29, 0x98, 0x5b, 0xf9, 0xac, 0x6c, 0xe2, 0x44, 0x1c, 0x35, 0x71, - 0x52, 0xe0, 0x77, 0x39, 0x12, 0x63, 0xac, 0xbc, 0x26, 0x9b, 0xb8, 0x10, 0x9a, 0x9a, 0xb8, 0x70, - 0x54, 0xf2, 0xab, 0xa1, 0x50, 0x5b, 0xe5, 0xf5, 0xf8, 0xf6, 0x03, 0x52, 0x6c, 0x3f, 0x0b, 0xcc, - 0xd5, 0xe2, 0x63, 0x46, 0x95, 0x92, 0x3c, 0x7e, 0xe3, 0x68, 0xe8, 0xf8, 0x8d, 0x8d, 0x37, 0x5d, - 0x8c, 0x7d, 0x3c, 0x44, 0x99, 0xde, 0x62, 0xe1, 0x10, 0xb8, 0x22, 0x71, 0xcf, 0x8e, 0x88, 0x6b, - 0x64, 0xb6, 0x10, 0x2a, 0x0f, 0x58, 0x23, 0x7b, 0xcb, 0xa0, 0x10, 0x3d, 0xb5, 0xae, 0x91, 0x93, - 0x26, 0xa5, 0x22, 0x5b, 0xd7, 0x08, 0x01, 0xb5, 0xae, 0xd1, 0xf3, 0xa9, 0x19, 0x54, 0xe0, 0x5a, - 0x14, 0xbc, 0xf5, 0x5c, 0x0d, 0x85, 0x6c, 0x85, 0xf0, 0xd4, 0x3a, 0x85, 0x61, 0x30, 0x5f, 0x33, - 0x58, 0xb9, 0x6d, 0xf6, 0x96, 0x2d, 0xdd, 0x36, 0x1a, 0xa4, 0x6b, 0x28, 0x33, 0xa1, 0xf9, 0x3a, - 0x86, 0x06, 0xe6, 0xeb, 0x18, 0x38, 0x5c, 0x2a, 0x09, 0xc1, 0xf9, 0x6b, 0x8c, 0xca, 0x2d, 0x60, - 0x5b, 0x1c, 0xc4, 0x96, 0x93, 0xcd, 0x0e, 0x69, 0x83, 0x38, 0x50, 0x5f, 0x7d, 0x7e, 0xbd, 0xf1, - 0xe6, 0x9c, 0x1f, 0xa6, 0x5c, 0xb7, 0x49, 0x4f, 0xb7, 0x89, 0x32, 0x2b, 0xfb, 0xea, 0xb1, 0x44, - 0xd4, 0x57, 0x8f, 0x45, 0x44, 0xd9, 0x7a, 0x63, 0xa1, 0xb6, 0x15, 0xdb, 0x60, 0x44, 0xc4, 0x97, - 0xa6, 0xd6, 0x49, 0x46, 0x50, 0x01, 0xcd, 0x59, 0xdd, 0x15, 0xd8, 0xa9, 0x78, 0x43, 0xb6, 0x4e, - 0x83, 0x29, 0xa9, 0x75, 0x1a, 0x8c, 0xa5, 0xaa, 0x2e, 0x63, 0xd9, 0x18, 0xbc, 0x2d, 0xab, 0x7a, - 0x0c, 0x09, 0x55, 0xf5, 0x18, 0x70, 0x94, 0xa1, 0x46, 0x1c, 0xe2, 0x2a, 0x73, 0x5b, 0x31, 0x04, - 0x92, 0x28, 0x43, 0x00, 0x47, 0x19, 0xce, 0x10, 0xb7, 0xb5, 0xaa, 0xcc, 0x6f, 0xc5, 0x10, 0x48, - 0xa2, 0x0c, 0x01, 0x4c, 0x17, 0x9b, 0x32, 0x78, 0xba, 0xdf, 0xbe, 0xef, 0xf5, 0xd9, 0x82, 0xbc, - 0xd8, 0x1c, 0x48, 0x48, 0x17, 0x9b, 0x03, 0x91, 0xf8, 0xab, 0x3b, 0x3e, 0x47, 0x55, 0x16, 0xa1, - 0xc2, 0xa9, 0xc0, 0x2f, 0xd8, 0x49, 0xa9, 0xd9, 0x21, 0x6d, 0xa7, 0xe7, 0xb4, 0xcf, 0xfa, 0xa7, - 0x3b, 0x4a, 0x1d, 0xaa, 0x9a, 0xf0, 0xf7, 0x2a, 0x18, 0x78, 0x76, 0x48, 0xf3, 0xcf, 0x7f, 0x6e, - 0xa2, 0x3c, 0x7c, 0x54, 0xad, 0x6b, 0xba, 0x95, 0x69, 0xe5, 0x4d, 0x79, 0xc9, 0x24, 0xa0, 0xe8, - 0x92, 0x49, 0xf8, 0x49, 0x8d, 0x38, 0xfc, 0x64, 0x26, 0xa6, 0x32, 0xad, 0x68, 0xb2, 0x11, 0x97, - 0x90, 0xd4, 0x88, 0x4b, 0x00, 0xbf, 0xde, 0x8a, 0x6d, 0xf5, 0x2a, 0xd3, 0x4a, 0x23, 0xa6, 0x5e, - 0x86, 0xf2, 0xeb, 0x65, 0x3f, 0xfd, 0x7a, 0x1b, 0xab, 0x7d, 0xb7, 0x42, 0xbf, 0x71, 0x29, 0xa6, - 0x5e, 0x0f, 0xe9, 0xd7, 0xeb, 0x01, 0xa8, 0x29, 0x04, 0x40, 0xdd, 0xb6, 0xa8, 0xd1, 0xbe, 0x6d, - 0xb6, 0xdb, 0xca, 0x1d, 0xd9, 0x14, 0x86, 0xf1, 0xd4, 0x14, 0x86, 0x61, 0xd4, 0xf5, 0x64, 0xad, - 0x22, 0xcb, 0xfd, 0x15, 0xe5, 0x2d, 0xd9, 0xf5, 0x0c, 0x30, 0xd4, 0xf5, 0x0c, 0x7e, 0xc1, 0xea, - 0x82, 0xfe, 0xd2, 0xc8, 0x3d, 0x9b, 0x38, 0xab, 0xca, 0xdd, 0xd0, 0xea, 0x42, 0xc0, 0xc1, 0xea, - 0x42, 0xf8, 0x8d, 0x57, 0xd0, 0xe3, 0xd2, 0x44, 0xe3, 0x85, 0x73, 0x35, 0x88, 0x6e, 0xb7, 0x56, - 0x95, 0xb7, 0x81, 0xd5, 0x93, 0xb1, 0x53, 0x95, 0x4c, 0x3a, 0x3b, 0xa4, 0x6d, 0xc5, 0x09, 0x96, - 0xe5, 0x6f, 0xce, 0xb1, 0xdb, 0x9f, 0x5a, 0xbd, 0xec, 0x2d, 0x42, 0xdf, 0x09, 0x2d, 0xcb, 0xa3, - 0x24, 0xb0, 0x2c, 0x8f, 0x82, 0x71, 0x0f, 0x5d, 0x08, 0x2d, 0xd5, 0xe6, 0xf5, 0x36, 0x5d, 0x97, - 0x10, 0xa3, 0xae, 0xb7, 0xee, 0x13, 0x57, 0xf9, 0x1c, 0xf0, 0xbe, 0x34, 0x60, 0xc1, 0x17, 0xa2, - 0x9e, 0x1d, 0xd2, 0xb6, 0xe1, 0x87, 0x55, 0xf6, 0x3c, 0x85, 0xf2, 0x79, 0x79, 0x7f, 0x93, 0xc2, - 0x66, 0x87, 0x34, 0xf6, 0x74, 0xc5, 0xbb, 0x48, 0xb9, 0xd3, 0x5b, 0xb1, 0x75, 0x83, 0x30, 0x47, - 0x0b, 0x7c, 0x37, 0xee, 0x80, 0xfe, 0x90, 0xec, 0xa5, 0x0d, 0xa2, 0xa3, 0x5e, 0xda, 0x20, 0x1c, - 0x55, 0x54, 0x29, 0xd1, 0x91, 0xf2, 0x05, 0x59, 0x51, 0x25, 0x24, 0x55, 0x54, 0x39, 0x2d, 0xd2, - 0xdb, 0xe8, 0xb4, 0xbf, 0x9e, 0xe7, 0xf3, 0x2f, 0xeb, 0x34, 0xe5, 0x5d, 0xe0, 0x73, 0x21, 0x72, - 0x18, 0x20, 0x51, 0xcd, 0x0e, 0x69, 0x03, 0xca, 0xd3, 0x19, 0x37, 0x92, 0x82, 0x8f, 0xbb, 0x17, - 0x3f, 0x2c, 0xcf, 0xb8, 0x03, 0xc8, 0xe8, 0x8c, 0x3b, 0x00, 0x15, 0xcb, 0x9c, 0x0b, 0x55, 0xdf, - 0x86, 0xb9, 0x2f, 0xd3, 0x41, 0x1c, 0x62, 0x99, 0x73, 0x4f, 0x6d, 0x79, 0x1b, 0xe6, 0xbe, 0xb7, - 0x36, 0x88, 0x03, 0xbe, 0x8c, 0x32, 0x8d, 0xc6, 0xbc, 0xd6, 0xef, 0x2a, 0xad, 0xd0, 0xb1, 0x1c, - 0x40, 0x67, 0x87, 0x34, 0x8e, 0xa7, 0x6e, 0x50, 0xb5, 0xad, 0x3b, 0xae, 0xd9, 0x72, 0x60, 0xc4, - 0x78, 0x23, 0xc4, 0x90, 0xdd, 0xa0, 0x38, 0x1a, 0xea, 0x06, 0xc5, 0xc1, 0xa9, 0xbf, 0x58, 0xd6, - 0x1d, 0x47, 0xef, 0x1a, 0xb6, 0x3e, 0x0d, 0xd3, 0x04, 0x09, 0x3d, 0xc6, 0x2b, 0x61, 0xa9, 0xbf, - 0x28, 0x43, 0x60, 0xf3, 0xdd, 0x83, 0x78, 0x6e, 0xce, 0xbd, 0xd0, 0xe6, 0x7b, 0x08, 0x0f, 0x9b, - 0xef, 0x21, 0x18, 0xf8, 0x9d, 0x1e, 0x4c, 0x23, 0x2b, 0x26, 0x3c, 0x26, 0xb5, 0x12, 0xf2, 0x3b, - 0xc3, 0x04, 0xe0, 0x77, 0x86, 0x81, 0x52, 0x93, 0xbc, 0xe9, 0x76, 0x75, 0x40, 0x93, 0x82, 0x59, - 0x36, 0x52, 0x86, 0xce, 0xdf, 0xc1, 0xe0, 0xa8, 0xac, 0x77, 0xf5, 0x8e, 0x55, 0x99, 0xf6, 0xa4, - 0x6e, 0xca, 0xf3, 0xf7, 0x40, 0x42, 0x3a, 0x7f, 0x0f, 0x44, 0x52, 0xeb, 0xea, 0x2d, 0xb4, 0x56, - 0x75, 0x9b, 0x18, 0xfe, 0x13, 0x2b, 0x6c, 0x69, 0xf8, 0x9e, 0x6c, 0x5d, 0xb7, 0x20, 0xa5, 0xd6, - 0x75, 0x0b, 0x34, 0x75, 0xf2, 0xe2, 0xd1, 0x1a, 0xd1, 0x0d, 0xe5, 0xbe, 0xec, 0xe4, 0x0d, 0xa6, - 0xa4, 0x4e, 0xde, 0x60, 0xec, 0xe0, 0xcf, 0xb9, 0x6b, 0x9b, 0x2e, 0x51, 0xda, 0x3b, 0xf9, 0x1c, - 0x20, 0x1d, 0xfc, 0x39, 0x80, 0xa6, 0x0b, 0xc2, 0x70, 0x87, 0x74, 0xe4, 0x05, 0x61, 0xb4, 0x1b, - 0xc2, 0x25, 0xa8, 0xc7, 0xc2, 0x83, 0xba, 0x94, 0xae, 0xec, 0xb1, 0x70, 0x30, 0xf5, 0x58, 0x82, - 0xb0, 0x2f, 0x29, 0x1c, 0x49, 0xb1, 0xe4, 0x39, 0x54, 0xc4, 0xd1, 0x39, 0x54, 0x0a, 0x5d, 0xba, - 0x29, 0x05, 0x34, 0x28, 0x3d, 0xd9, 0xeb, 0x10, 0x50, 0xd4, 0xeb, 0x10, 0x43, 0x1f, 0xca, 0x68, - 0xc2, 0x7f, 0x58, 0x9a, 0xdb, 0xca, 0x2f, 0xca, 0x9f, 0x19, 0x42, 0xd3, 0xcf, 0x0c, 0x81, 0x24, - 0x26, 0xdc, 0x6c, 0xd9, 0x03, 0x98, 0x04, 0xfb, 0x83, 0x21, 0x10, 0x9e, 0x43, 0xb8, 0x51, 0x9a, - 0x9f, 0xab, 0x19, 0x75, 0xf1, 0x88, 0xcc, 0x91, 0x77, 0x60, 0xa3, 0x14, 0xb3, 0x43, 0x5a, 0x4c, - 0x39, 0xfc, 0x1e, 0x3a, 0xc7, 0xa1, 0x3c, 0xe6, 0x16, 0xf2, 0xf9, 0x1b, 0xfe, 0x84, 0xe0, 0x02, - 0xdf, 0xa7, 0x42, 0x7c, 0x63, 0x69, 0x67, 0x87, 0xb4, 0x2d, 0x79, 0x0d, 0xae, 0x8b, 0xcf, 0x0f, - 0xfd, 0x9d, 0xd4, 0xe5, 0x4f, 0x12, 0x5b, 0xf2, 0x1a, 0x5c, 0x17, 0x97, 0xfb, 0x83, 0x9d, 0xd4, - 0xe5, 0x77, 0xc2, 0x96, 0xbc, 0xb0, 0x83, 0x8a, 0x5b, 0xe1, 0x4b, 0xed, 0xb6, 0xb2, 0x06, 0xd5, - 0x3d, 0xbd, 0x93, 0xea, 0x4a, 0xe0, 0x70, 0x6e, 0xc7, 0x91, 0x5a, 0xe9, 0xc5, 0x1e, 0xe9, 0x36, - 0xa4, 0x09, 0xe8, 0xa1, 0x6c, 0xa5, 0x23, 0x04, 0xd4, 0x4a, 0x47, 0x80, 0x74, 0x40, 0x89, 0x71, - 0x31, 0xca, 0xba, 0x3c, 0xa0, 0x44, 0x1c, 0x1d, 0x50, 0x52, 0x0c, 0xcd, 0x22, 0x3a, 0xb1, 0x78, - 0xdf, 0xd5, 0x3d, 0x0f, 0xd2, 0xe1, 0x5d, 0xf9, 0x7e, 0xe8, 0x90, 0x29, 0x4a, 0x02, 0x87, 0x4c, - 0x51, 0x30, 0x1d, 0x23, 0x14, 0xdc, 0x58, 0xef, 0xb6, 0x66, 0x74, 0xb3, 0xdd, 0xb7, 0x89, 0xf2, - 0xff, 0xc9, 0x63, 0x24, 0x84, 0xa6, 0x63, 0x24, 0x04, 0xa2, 0x13, 0x34, 0x05, 0x95, 0x1c, 0xc7, - 0x5c, 0xe9, 0xf2, 0x75, 0x65, 0xbf, 0xed, 0x2a, 0xff, 0xbf, 0x3c, 0x41, 0xc7, 0xd1, 0xd0, 0x09, - 0x3a, 0x0e, 0x0e, 0xbb, 0x4e, 0x31, 0x6f, 0x5d, 0x28, 0x7f, 0x22, 0xb4, 0xeb, 0x14, 0x43, 0x03, - 0xbb, 0x4e, 0x71, 0xef, 0x64, 0xcc, 0xa0, 0x42, 0xf0, 0x0c, 0x2f, 0xe7, 0xf7, 0x27, 0xe5, 0xf9, - 0x31, 0x8c, 0xa7, 0xf3, 0x63, 0x18, 0x26, 0xf3, 0xe1, 0x5d, 0xf0, 0xa7, 0x06, 0xf1, 0xf1, 0xe5, - 0x1f, 0x29, 0x83, 0x6f, 0x89, 0x7c, 0xf8, 0x48, 0xf9, 0x52, 0x62, 0x10, 0x23, 0x7f, 0x78, 0x44, - 0x0a, 0xc9, 0x8c, 0xd8, 0x83, 0xcf, 0xca, 0x97, 0x07, 0x32, 0x62, 0x04, 0x32, 0x23, 0x06, 0xc3, - 0xef, 0xa0, 0xd3, 0x01, 0x6c, 0x9e, 0x74, 0x96, 0x7d, 0xcb, 0xf4, 0xa7, 0x13, 0xb2, 0x1b, 0x1c, - 0x4f, 0x46, 0xdd, 0xe0, 0x78, 0x4c, 0x1c, 0x6b, 0x2e, 0xba, 0x1f, 0xd9, 0x86, 0xb5, 0x2f, 0xc1, - 0x01, 0x0c, 0xe2, 0x58, 0x73, 0x69, 0x7e, 0x65, 0x1b, 0xd6, 0xbe, 0x4c, 0x07, 0x30, 0xc0, 0x3f, - 0x96, 0x40, 0x97, 0xe2, 0x51, 0xa5, 0x76, 0x7b, 0xc6, 0xb2, 0x03, 0x9c, 0xf2, 0xa3, 0x09, 0x79, - 0xa3, 0x61, 0x67, 0xc5, 0x66, 0x87, 0xb4, 0x1d, 0x56, 0x30, 0x9d, 0x45, 0xc3, 0x60, 0x06, 0xd4, - 0x9f, 0x49, 0xa0, 0xd1, 0x86, 0x6b, 0x13, 0xbd, 0xc3, 0x03, 0x76, 0xcf, 0xa2, 0x1c, 0x3b, 0x4f, - 0xab, 0x55, 0x78, 0x5c, 0xbd, 0xff, 0x1b, 0x5f, 0x42, 0xe3, 0x73, 0xba, 0xe3, 0x42, 0xc9, 0x5a, - 0xd7, 0x20, 0x0f, 0x21, 0x96, 0x2c, 0xa5, 0x85, 0xa0, 0x78, 0x8e, 0xd1, 0xb1, 0x72, 0x70, 0x43, - 0x21, 0xb5, 0xed, 0x0d, 0x85, 0xdc, 0x07, 0x1b, 0xc5, 0x21, 0xb8, 0x87, 0x10, 0x2a, 0xab, 0x7e, - 0x3b, 0x81, 0x22, 0x27, 0x7d, 0x7b, 0x8f, 0x7c, 0x5d, 0x44, 0x13, 0xa1, 0x5b, 0x31, 0x3c, 0x20, - 0x6e, 0x87, 0x97, 0x66, 0xc2, 0xa5, 0xf1, 0xd3, 0x7e, 0x20, 0xd6, 0x1d, 0x6d, 0x8e, 0xc7, 0x20, - 0x67, 0xe1, 0x41, 0x4b, 0xbb, 0xad, 0x09, 0x28, 0x1e, 0xc8, 0xf7, 0x1b, 0xe3, 0x41, 0xc8, 0x3f, - 0xbe, 0xc4, 0x6f, 0xfc, 0x24, 0x82, 0xc8, 0xe5, 0x50, 0x6e, 0x42, 0x76, 0xc3, 0xe7, 0xb3, 0x68, - 0xb4, 0xd6, 0xe9, 0x11, 0xdb, 0xb1, 0xba, 0xf0, 0xd6, 0x7c, 0x32, 0x08, 0xbd, 0x35, 0x05, 0xb8, - 0x18, 0x0e, 0x2a, 0xd2, 0x07, 0x0f, 0xe5, 0xa7, 0xb6, 0x7d, 0x28, 0xff, 0x0a, 0x1a, 0xbe, 0xe3, - 0xe8, 0x10, 0xb2, 0xe7, 0x93, 0xf6, 0x29, 0x40, 0x24, 0x05, 0x0a, 0x7c, 0x15, 0x65, 0xc0, 0xc5, - 0x71, 0x94, 0x61, 0xa0, 0x85, 0x78, 0xea, 0x36, 0x40, 0xc4, 0x10, 0x5b, 0x46, 0x83, 0x6f, 0xa3, - 0x42, 0xb0, 0x7e, 0x83, 0xa4, 0xfb, 0x5e, 0xba, 0x03, 0xc8, 0x13, 0x78, 0xdf, 0xc7, 0xb1, 0x6c, - 0xfd, 0x22, 0x8b, 0x48, 0x41, 0x3c, 0x8b, 0x26, 0x02, 0x18, 0x15, 0x91, 0x97, 0x66, 0x05, 0xf2, - 0x64, 0x0a, 0xbc, 0xa8, 0x38, 0x45, 0x56, 0xe1, 0x62, 0xb8, 0x86, 0xb2, 0xd5, 0x87, 0x3d, 0xd3, - 0xf6, 0x63, 0xb5, 0xb7, 0x52, 0xd2, 0x13, 0xfc, 0x1a, 0x4d, 0x96, 0xb0, 0x22, 0xfc, 0xde, 0x0c, - 0xfb, 0x81, 0x67, 0xd0, 0xb8, 0x66, 0xf5, 0x5d, 0xb2, 0x64, 0x79, 0x0f, 0xf9, 0x8e, 0x04, 0xb9, - 0x3b, 0x6d, 0x8a, 0x69, 0xba, 0x96, 0x97, 0x66, 0x51, 0x4c, 0xf7, 0x27, 0x97, 0xc2, 0x0b, 0x71, - 0x6f, 0x02, 0x0b, 0xc9, 0x0f, 0x85, 0xcf, 0x8b, 0x32, 0x8b, 0x79, 0x04, 0xf8, 0xcf, 0x24, 0x50, - 0x66, 0xc9, 0xd6, 0x4d, 0xd7, 0xe1, 0xd1, 0x7e, 0xa7, 0xa6, 0xd6, 0x6c, 0xbd, 0x47, 0xf5, 0x63, - 0x0a, 0x6e, 0xd3, 0xc0, 0x1b, 0xa8, 0xce, 0xf4, 0x5d, 0xfa, 0x75, 0xff, 0x76, 0xa3, 0xf8, 0x99, - 0x5d, 0xbc, 0x5a, 0x74, 0xcd, 0xe7, 0xc4, 0x6a, 0xa0, 0x2a, 0xe0, 0xc2, 0x5f, 0xa2, 0x0a, 0x30, - 0x1c, 0x5e, 0x40, 0x88, 0x7f, 0x6a, 0xa9, 0xd7, 0xe3, 0xa1, 0x83, 0x42, 0x5c, 0x94, 0x87, 0x61, - 0x8a, 0xed, 0x0b, 0x4c, 0xef, 0x89, 0x4f, 0x37, 0x08, 0x1c, 0xa8, 0x16, 0x2c, 0xf1, 0x16, 0x79, - 0x62, 0x1a, 0x0b, 0x24, 0xee, 0x35, 0x36, 0x46, 0x48, 0xe1, 0x62, 0x78, 0x19, 0x4d, 0x70, 0xbe, - 0xfe, 0xc5, 0xf8, 0x71, 0xd9, 0x2a, 0x84, 0xd0, 0x4c, 0x69, 0xfd, 0x36, 0x1a, 0x1c, 0x2c, 0xd6, - 0x11, 0x2a, 0x81, 0xa7, 0x83, 0xbc, 0x5d, 0xf0, 0x4e, 0x84, 0x32, 0x01, 0x1a, 0x7b, 0x6e, 0x73, - 0xa3, 0xa8, 0x78, 0xe5, 0xd9, 0xf3, 0x12, 0x71, 0x59, 0x28, 0xa1, 0x88, 0xc8, 0x83, 0x69, 0x7d, - 0x21, 0x86, 0x47, 0x58, 0xe7, 0xe5, 0x22, 0xb8, 0x8c, 0xc6, 0xfc, 0xc8, 0x85, 0x3b, 0x77, 0x6a, - 0x15, 0x88, 0x4d, 0xe4, 0x2f, 0x2a, 0x84, 0xee, 0xdc, 0x8b, 0x4c, 0xa4, 0x32, 0xf8, 0x05, 0x94, - 0x63, 0xb1, 0x7f, 0x35, 0x16, 0xac, 0xe8, 0x5d, 0x7a, 0x02, 0x58, 0xd3, 0x14, 0x7b, 0xcc, 0x27, - 0xc4, 0xaf, 0xa2, 0x7c, 0xe9, 0x6e, 0x83, 0xda, 0x99, 0x92, 0xb6, 0xe0, 0x28, 0x27, 0x82, 0x64, - 0x27, 0x90, 0x88, 0xd4, 0x6a, 0x93, 0xa6, 0x6e, 0x4b, 0xc6, 0x43, 0xa4, 0xc7, 0x55, 0x34, 0x2e, - 0x6d, 0x7e, 0x3a, 0xca, 0x49, 0xe0, 0xc0, 0xde, 0x82, 0x60, 0x4f, 0xed, 0xf2, 0xd7, 0x44, 0xa4, - 0x6c, 0xab, 0x72, 0x21, 0xaa, 0x35, 0x15, 0xd3, 0x81, 0xc4, 0x11, 0x1a, 0x31, 0x1d, 0xa7, 0x4f, - 0x20, 0xd2, 0x31, 0xc7, 0xb4, 0xc6, 0xe0, 0xa8, 0xa6, 0xcd, 0x70, 0x52, 0x2e, 0x5c, 0xb9, 0x18, - 0x7e, 0x0f, 0x61, 0x48, 0x35, 0x41, 0x0c, 0xcf, 0x17, 0xae, 0x55, 0x1c, 0xe5, 0x34, 0xdc, 0x2a, - 0xc4, 0xe1, 0xbb, 0xbd, 0xb5, 0xca, 0xf4, 0x25, 0x6e, 0x3e, 0x2e, 0xe8, 0xac, 0x54, 0xd3, 0x7f, - 0xc9, 0xc3, 0x34, 0xc4, 0x16, 0xc7, 0x70, 0xc5, 0x6b, 0xe8, 0x4c, 0xdd, 0x26, 0x0f, 0x4c, 0xab, - 0xef, 0x78, 0xd3, 0x87, 0x67, 0xb7, 0xce, 0x6c, 0x6b, 0xb7, 0x9e, 0xe0, 0x15, 0x9f, 0xea, 0xd9, - 0xe4, 0x41, 0xd3, 0xbb, 0x4b, 0xd6, 0x14, 0xad, 0xd8, 0x20, 0xee, 0x54, 0x5c, 0xa5, 0xf7, 0xfb, - 0x36, 0xe1, 0x70, 0x93, 0x38, 0x8a, 0x12, 0x98, 0x5a, 0x9d, 0xa2, 0x3c, 0x8e, 0xa6, 0xa4, 0xba, - 0xe1, 0x62, 0x58, 0x43, 0xf8, 0x56, 0xd9, 0x5b, 0x17, 0x95, 0x5a, 0x2d, 0xab, 0xdf, 0x75, 0x1d, - 0xe5, 0x31, 0x60, 0xa6, 0x52, 0xb1, 0xac, 0xb4, 0xfc, 0x7b, 0xa5, 0x4d, 0x9d, 0xe3, 0x45, 0xb1, - 0x44, 0x4b, 0xab, 0x3f, 0x91, 0x12, 0x6d, 0x8a, 0xff, 0x9e, 0x6a, 0x22, 0xf6, 0x3d, 0xd5, 0xab, - 0x68, 0x84, 0xcf, 0xc7, 0x7e, 0xa6, 0x09, 0x48, 0xcb, 0xe5, 0x5d, 0x8a, 0x34, 0x0d, 0x2d, 0x20, - 0x80, 0x94, 0x48, 0x41, 0x5e, 0xfd, 0x94, 0x90, 0x12, 0x29, 0xc8, 0xab, 0x2f, 0x65, 0xd5, 0xbf, - 0x8e, 0xf2, 0xdc, 0x9e, 0x08, 0xf7, 0x97, 0xe0, 0x62, 0xa3, 0x97, 0x5a, 0x97, 0xdd, 0x9b, 0x14, - 0x88, 0xf0, 0xcb, 0x90, 0x5c, 0x9a, 0xab, 0x38, 0xf7, 0x1e, 0xc0, 0xfc, 0x89, 0x23, 0x22, 0x94, - 0x5d, 0x9a, 0x53, 0x53, 0x63, 0x20, 0x8a, 0xd8, 0x4b, 0x02, 0x07, 0xc6, 0x40, 0xea, 0x97, 0x75, - 0xe9, 0x65, 0x14, 0xb1, 0x08, 0x5e, 0x44, 0x93, 0x11, 0xa9, 0xf2, 0xdb, 0x4e, 0x90, 0x12, 0x30, - 0xa6, 0x4b, 0xc4, 0xc9, 0x26, 0x52, 0x56, 0xfd, 0x37, 0x89, 0x88, 0x29, 0xa5, 0x82, 0xe1, 0x54, - 0x42, 0xe7, 0x80, 0x60, 0x3c, 0xd6, 0x4c, 0x30, 0x02, 0x11, 0xbe, 0x8c, 0x72, 0xa1, 0xfc, 0xd2, - 0x70, 0x0f, 0xd2, 0x4f, 0x2e, 0xed, 0x63, 0xf1, 0x75, 0x94, 0xa3, 0x86, 0xad, 0x1b, 0xba, 0xdb, - 0xd7, 0xe7, 0x30, 0xd1, 0x12, 0x79, 0x74, 0xb4, 0x8c, 0x94, 0x01, 0xc5, 0x4b, 0x03, 0x1c, 0x35, - 0xe3, 0x41, 0xc6, 0x93, 0xff, 0x99, 0xde, 0xf2, 0x18, 0xe7, 0x40, 0xae, 0x7e, 0xbf, 0x44, 0x5d, - 0x63, 0x5a, 0x7b, 0xc9, 0x89, 0x38, 0x78, 0x6c, 0x97, 0xba, 0xa9, 0x33, 0x3d, 0x72, 0x34, 0x99, - 0x52, 0x7c, 0x60, 0x08, 0xee, 0x80, 0xa5, 0x63, 0x1e, 0x18, 0x0a, 0xa7, 0x35, 0x16, 0x0b, 0xe0, - 0x4f, 0xa1, 0x91, 0xe0, 0xa9, 0xa4, 0x61, 0xe1, 0xb2, 0x5e, 0xcc, 0x0b, 0x49, 0x01, 0x25, 0xfe, - 0x02, 0xca, 0x48, 0x79, 0xb5, 0xaf, 0xed, 0xe0, 0xdc, 0x6b, 0x4a, 0xbc, 0x7a, 0xcd, 0xdc, 0xcc, - 0x70, 0x4e, 0x6d, 0xce, 0x14, 0x2f, 0xa1, 0x13, 0x75, 0x9b, 0x18, 0x70, 0xc2, 0x5a, 0x7d, 0xd8, - 0xb3, 0xf9, 0xc5, 0x78, 0xa6, 0xd2, 0x60, 0x65, 0x7a, 0x1e, 0x9a, 0xda, 0x3f, 0x8e, 0x17, 0x18, - 0xc5, 0x15, 0xa7, 0x53, 0x0f, 0x6b, 0xc9, 0x6d, 0xb2, 0xbe, 0x66, 0xd9, 0x06, 0xbb, 0x3b, 0xce, - 0xa7, 0x1e, 0x2e, 0xe8, 0xfb, 0x1c, 0x25, 0x4e, 0x3d, 0x72, 0xa1, 0xb3, 0x2f, 0xa1, 0xfc, 0x5e, - 0xaf, 0x2f, 0xff, 0x62, 0x72, 0x40, 0x40, 0xc4, 0xd1, 0x4d, 0xb8, 0xe6, 0x27, 0xbf, 0x1c, 0x1e, - 0x90, 0xfc, 0xf2, 0x07, 0xc9, 0x01, 0xd1, 0x1e, 0x47, 0x3a, 0x49, 0x9d, 0x2f, 0x0c, 0x39, 0x49, - 0x5d, 0x90, 0x1f, 0xd0, 0x34, 0x34, 0x91, 0x28, 0x94, 0xce, 0x32, 0xb3, 0x6d, 0x3a, 0xcb, 0x9f, - 0x4b, 0x6d, 0x15, 0x0d, 0x73, 0x2c, 0xfb, 0xdd, 0xc8, 0xfe, 0x3a, 0xca, 0xfb, 0x92, 0xe5, 0x8f, - 0x93, 0x8c, 0xf9, 0xc9, 0x12, 0x18, 0x18, 0xca, 0x08, 0x44, 0xf8, 0x0a, 0x6b, 0x6b, 0xc3, 0x7c, - 0x9f, 0x5d, 0x5c, 0x1e, 0xe3, 0xf7, 0x66, 0x75, 0x57, 0x6f, 0x3a, 0xe6, 0xfb, 0x44, 0xf3, 0xd1, - 0xea, 0x3f, 0x49, 0xc6, 0x86, 0x14, 0x1d, 0xf7, 0xd1, 0x2e, 0xfa, 0x28, 0x46, 0x88, 0x2c, 0x18, - 0xea, 0x58, 0x88, 0xbb, 0x10, 0xe2, 0xf7, 0x93, 0xb1, 0xa1, 0x63, 0xc7, 0x42, 0xdc, 0x8d, 0xb5, - 0xb8, 0x8a, 0x46, 0x34, 0x6b, 0xcd, 0x29, 0x83, 0x17, 0xcf, 0x6c, 0x05, 0x18, 0x6a, 0xdb, 0x5a, - 0x73, 0x9a, 0xe0, 0x9f, 0x6b, 0x01, 0x81, 0xfa, 0x87, 0xc9, 0x2d, 0x82, 0xeb, 0x8e, 0x05, 0xff, - 0x61, 0x4e, 0x91, 0xbf, 0x9c, 0x94, 0x82, 0xf7, 0x8e, 0x74, 0xb6, 0xe7, 0x46, 0x6b, 0x95, 0x74, - 0xf4, 0x70, 0xb6, 0x67, 0x07, 0xa0, 0x3c, 0x59, 0x64, 0x40, 0xa2, 0xfe, 0x4a, 0x32, 0x14, 0xbd, - 0x78, 0x2c, 0xbb, 0x1d, 0xcb, 0xce, 0xd7, 0x3a, 0x1e, 0x90, 0x79, 0x2c, 0xb9, 0x9d, 0x4a, 0xee, - 0xab, 0xc9, 0x50, 0xec, 0xea, 0xd1, 0x4d, 0xfc, 0xfa, 0x2b, 0xc9, 0x68, 0x1c, 0xee, 0xd1, 0xd5, - 0xa4, 0xab, 0x68, 0x84, 0xcb, 0xc1, 0x9f, 0x2a, 0x98, 0xdd, 0x67, 0x40, 0xd8, 0x52, 0xf4, 0x09, - 0xd4, 0x1f, 0x4d, 0x22, 0x39, 0xa6, 0xf8, 0x88, 0xea, 0xd0, 0x2f, 0x27, 0xe5, 0x68, 0xea, 0xa3, - 0xab, 0x3f, 0x53, 0x08, 0x35, 0xfa, 0xcb, 0x2d, 0x9e, 0x8c, 0x63, 0x58, 0xd8, 0x93, 0xf6, 0xa1, - 0x9a, 0x40, 0xa1, 0xfe, 0xef, 0x64, 0x6c, 0x88, 0xf7, 0xd1, 0x15, 0xe0, 0x0b, 0xb0, 0x4f, 0xdc, - 0xea, 0x06, 0x86, 0x1c, 0x36, 0x21, 0xe9, 0xf8, 0x8b, 0x64, 0x0c, 0xf3, 0x08, 0xf1, 0xa7, 0x63, - 0xdc, 0x35, 0x48, 0xee, 0x15, 0xfb, 0xf0, 0x8d, 0xe8, 0xb8, 0xfd, 0x8b, 0xe4, 0x76, 0x11, 0xf1, - 0x47, 0x79, 0x56, 0xcd, 0xd6, 0xf5, 0x75, 0xb8, 0xb9, 0x4d, 0x7b, 0x62, 0x94, 0x25, 0xdd, 0xea, - 0x31, 0x90, 0x98, 0x62, 0x8f, 0x53, 0xa9, 0x7f, 0x30, 0x1c, 0x1f, 0x8e, 0x7d, 0x74, 0x45, 0xe8, - 0x3d, 0xcc, 0x3a, 0xbc, 0xed, 0xc3, 0xac, 0x99, 0x9d, 0x3e, 0xcc, 0x9a, 0x1d, 0xf8, 0x30, 0xeb, - 0x39, 0x94, 0x9e, 0xb6, 0x8c, 0x75, 0x88, 0x7b, 0x18, 0x65, 0x95, 0x2d, 0x5b, 0xc6, 0xba, 0x06, - 0x50, 0xfc, 0x63, 0x09, 0x94, 0x9d, 0x25, 0xba, 0x41, 0x47, 0xc8, 0xc8, 0x56, 0x61, 0x03, 0x6f, - 0x3f, 0x9a, 0xb0, 0x81, 0xc9, 0x55, 0x56, 0x99, 0xa8, 0x28, 0xbc, 0x7e, 0x7c, 0x0b, 0xe5, 0xca, - 0xba, 0x4b, 0x56, 0x2c, 0x7b, 0x1d, 0x02, 0x21, 0xc6, 0x83, 0x8b, 0x7a, 0x92, 0xfe, 0x78, 0x44, - 0xec, 0xac, 0xa8, 0xc5, 0x7f, 0x69, 0x7e, 0x61, 0x2a, 0x16, 0x9e, 0x09, 0x3a, 0x1f, 0x88, 0x45, - 0x4e, 0xf9, 0x1c, 0x6c, 0x2b, 0x8f, 0xc6, 0x6f, 0x2b, 0x87, 0x9e, 0xdb, 0x1d, 0xdb, 0xf6, 0xb9, - 0x5d, 0xf5, 0xbb, 0xc3, 0x28, 0x36, 0x78, 0xf3, 0x58, 0xc9, 0x8f, 0x95, 0x3c, 0x50, 0xf2, 0x4a, - 0x44, 0xc9, 0xcf, 0x46, 0xc3, 0x81, 0x3f, 0xa2, 0x1a, 0xfe, 0xd3, 0xe9, 0xc8, 0x65, 0x82, 0xa3, - 0xbd, 0xba, 0x0c, 0xa4, 0x37, 0xbc, 0xf3, 0xe7, 0xb8, 0x33, 0xdb, 0x0e, 0x88, 0xec, 0x4e, 0x07, - 0x44, 0x6e, 0xe0, 0x80, 0x08, 0x14, 0x64, 0x64, 0xa0, 0x82, 0xd4, 0xf8, 0xa0, 0x41, 0x5b, 0x67, - 0x2f, 0x3d, 0xb7, 0xb9, 0x51, 0x1c, 0xa7, 0xa3, 0x29, 0x36, 0x6f, 0x29, 0xb0, 0x50, 0xbf, 0x9d, - 0xde, 0xe2, 0x06, 0xd0, 0x81, 0xe8, 0x08, 0x7f, 0x8f, 0x3c, 0xb5, 0x97, 0xf7, 0xc8, 0xd3, 0x7b, - 0x78, 0x8f, 0x3c, 0xe6, 0x8d, 0xf9, 0xe1, 0x5d, 0xbc, 0x31, 0x2f, 0x6b, 0x53, 0x66, 0xe7, 0xda, - 0x94, 0xdd, 0x56, 0x9b, 0x72, 0x3b, 0xd5, 0xa6, 0x91, 0x1d, 0x68, 0x13, 0xda, 0x56, 0x9b, 0xf2, - 0xfb, 0xd7, 0xa6, 0x1e, 0x3a, 0x1b, 0xbd, 0xb5, 0xe9, 0x6b, 0x84, 0x86, 0x70, 0x14, 0xcb, 0xc3, - 0x4d, 0xe0, 0xe8, 0xbf, 0xcf, 0xb0, 0x4d, 0x96, 0x23, 0x3e, 0x9c, 0x61, 0x5d, 0x8b, 0x29, 0xad, - 0xfe, 0x62, 0x72, 0xf0, 0x65, 0xd3, 0xc3, 0x69, 0xe2, 0x7e, 0x38, 0x56, 0x4a, 0x69, 0xf9, 0xfa, - 0xda, 0x60, 0x29, 0x87, 0xd8, 0xc6, 0xc9, 0xec, 0x9b, 0x89, 0x41, 0x37, 0x60, 0xf7, 0x25, 0xb1, - 0x4f, 0x44, 0xc3, 0xb7, 0x20, 0xd0, 0xda, 0x91, 0xe3, 0xb6, 0xc2, 0x09, 0xcb, 0x53, 0x7b, 0x4c, - 0x58, 0xfe, 0x8f, 0x13, 0xe8, 0xc4, 0xed, 0xfe, 0x32, 0xe1, 0xe1, 0x5a, 0x7e, 0x33, 0xde, 0x43, - 0x88, 0x82, 0x79, 0x10, 0x4b, 0x02, 0x82, 0x58, 0x9e, 0x15, 0x6f, 0xaf, 0x86, 0x0a, 0x4c, 0x05, - 0xd4, 0x2c, 0x80, 0xe5, 0xbc, 0x17, 0x8d, 0x77, 0xbf, 0xbf, 0x4c, 0xa2, 0xaf, 0xc3, 0x0b, 0xdc, - 0xcf, 0xbe, 0xca, 0xe2, 0x9c, 0xf7, 0x1a, 0x34, 0xf2, 0x0b, 0xc9, 0x81, 0x17, 0x86, 0x0f, 0xed, - 0x7b, 0xd7, 0x9f, 0x8f, 0xed, 0x15, 0xae, 0xbf, 0x8f, 0x6f, 0xd1, 0x0f, 0x21, 0x8e, 0x71, 0x5c, - 0xe2, 0x05, 0x76, 0xc8, 0x1f, 0x08, 0xff, 0x50, 0x05, 0xf6, 0x3b, 0x89, 0x81, 0x17, 0xbb, 0x0f, - 0xed, 0x13, 0xe2, 0xdf, 0x4a, 0x7a, 0xf7, 0xc9, 0xf7, 0xf5, 0x09, 0x57, 0xd1, 0x08, 0x4f, 0x9a, - 0x2b, 0x47, 0x9b, 0xf2, 0xad, 0x3c, 0xd8, 0x1a, 0xf6, 0x09, 0xe8, 0x34, 0xef, 0xdd, 0x77, 0xf5, - 0x93, 0xe5, 0xc3, 0x34, 0x6f, 0x72, 0x28, 0xa5, 0x17, 0x48, 0xe8, 0x44, 0x5e, 0x7d, 0x68, 0xba, - 0xe0, 0x15, 0xd0, 0xbe, 0x4c, 0xb1, 0x89, 0x9c, 0x3c, 0x34, 0x5d, 0xe6, 0x13, 0xf8, 0x68, 0x3a, - 0x49, 0x0b, 0xcf, 0x20, 0xf2, 0x49, 0xda, 0xe1, 0xd9, 0xbb, 0xf9, 0xbd, 0x9f, 0xab, 0x68, 0x84, - 0x87, 0x70, 0xf2, 0x30, 0x13, 0xde, 0x5a, 0x1e, 0xf4, 0x09, 0xad, 0xf5, 0x09, 0x28, 0x47, 0x8d, - 0xac, 0x04, 0x81, 0x75, 0xc0, 0xd1, 0x06, 0x88, 0xc6, 0x31, 0xea, 0x66, 0x32, 0x7a, 0xad, 0xfd, - 0xe8, 0x2e, 0x0a, 0xae, 0xc8, 0xc1, 0x6a, 0x10, 0xa1, 0x09, 0x0e, 0x97, 0x78, 0xaf, 0x86, 0xf9, - 0x5d, 0xd7, 0x51, 0xee, 0x36, 0x59, 0x67, 0x71, 0x95, 0x99, 0x20, 0x38, 0xf5, 0x3e, 0x87, 0x89, - 0x3b, 0x9a, 0x1e, 0x9d, 0xfa, 0xab, 0xc9, 0xe8, 0x85, 0xfd, 0xa3, 0x2b, 0xec, 0x4f, 0xa2, 0x2c, - 0x88, 0xb2, 0xe6, 0x6d, 0xa9, 0x83, 0x00, 0xd9, 0xdb, 0xe6, 0xd2, 0xad, 0x06, 0x8f, 0x4c, 0xfd, - 0xd9, 0x4c, 0x38, 0x8b, 0xc3, 0xd1, 0x95, 0xde, 0x67, 0x50, 0xbe, 0x6c, 0x75, 0x1d, 0xd3, 0x71, - 0x49, 0xb7, 0xe5, 0x29, 0xec, 0x63, 0xd4, 0x61, 0x69, 0x05, 0x60, 0xf1, 0x92, 0x86, 0x40, 0xbd, - 0x17, 0xe5, 0xc5, 0x2f, 0xa2, 0x11, 0x10, 0x39, 0xc4, 0x21, 0x0b, 0x4f, 0x6d, 0x2c, 0x53, 0x60, - 0x38, 0x08, 0x39, 0x20, 0xc5, 0x77, 0x50, 0xae, 0xbc, 0x6a, 0xb6, 0x0d, 0x9b, 0x74, 0xf9, 0x5b, - 0x4e, 0x4f, 0xc4, 0xe7, 0xdc, 0x98, 0x82, 0x7f, 0x81, 0x96, 0x35, 0xa7, 0xc5, 0x8b, 0x49, 0xd7, - 0x54, 0x38, 0xec, 0xec, 0x4f, 0x25, 0x11, 0x0a, 0x0a, 0xe0, 0x8b, 0x28, 0xe9, 0xdd, 0x85, 0x64, - 0x61, 0x20, 0x92, 0x06, 0x25, 0xc1, 0x14, 0xf3, 0xb1, 0x9d, 0xdc, 0x76, 0x6c, 0xdf, 0x41, 0x19, - 0xb6, 0xa3, 0x04, 0x91, 0xda, 0xc2, 0xc5, 0xf2, 0x81, 0x0d, 0x9e, 0x02, 0x7a, 0xb6, 0x58, 0x04, - 0xcf, 0x4e, 0x8a, 0x7a, 0x66, 0xcc, 0xce, 0xb6, 0xd0, 0x30, 0xfc, 0x85, 0x2f, 0xa1, 0x34, 0x48, - 0x31, 0x01, 0xeb, 0x44, 0xb8, 0x51, 0x18, 0x92, 0x1f, 0xe0, 0x69, 0x37, 0x95, 0xad, 0xae, 0x4b, - 0xab, 0x86, 0x56, 0x8f, 0x72, 0xb9, 0x70, 0x98, 0x24, 0x17, 0x0e, 0x53, 0xff, 0x79, 0x32, 0x26, - 0xbf, 0xc8, 0xd1, 0x1d, 0x26, 0x2f, 0x21, 0x04, 0x77, 0x5e, 0xa9, 0x3c, 0xbd, 0x2b, 0x90, 0x30, - 0x4a, 0x80, 0x11, 0xa8, 0xad, 0xe4, 0xd6, 0x07, 0xc4, 0xea, 0xaf, 0x27, 0x22, 0x49, 0x29, 0x0e, - 0xed, 0xd3, 0x82, 0xd2, 0xb7, 0x1c, 0xf2, 0x67, 0x12, 0xbf, 0x9b, 0x8c, 0x4b, 0xd1, 0x71, 0x38, - 0x55, 0x3c, 0x78, 0xaf, 0x29, 0xbd, 0x8b, 0xf7, 0x9a, 0xde, 0x45, 0x13, 0xa1, 0xc4, 0x15, 0xfc, - 0xcd, 0x8d, 0x4b, 0x5b, 0x67, 0xc0, 0x18, 0x7c, 0x5b, 0x5a, 0x22, 0x53, 0xff, 0x4f, 0x62, 0xeb, - 0xb4, 0x25, 0x07, 0xae, 0x3a, 0x31, 0x02, 0x48, 0xfd, 0xf1, 0x08, 0xe0, 0x11, 0x2c, 0x33, 0x0f, - 0xb7, 0x00, 0x3e, 0x22, 0xc6, 0xe3, 0xc3, 0x16, 0xc0, 0xcf, 0x26, 0xb6, 0xcd, 0x3a, 0x73, 0xd0, - 0x32, 0x50, 0xff, 0x5d, 0x22, 0x36, 0x3b, 0xcc, 0xbe, 0xda, 0xf5, 0x0a, 0xca, 0xb0, 0xb0, 0x15, - 0xde, 0x2a, 0x21, 0x9f, 0x2e, 0x85, 0x0e, 0x7a, 0x2f, 0x9a, 0x61, 0xf1, 0x1c, 0xca, 0xb2, 0x36, - 0x18, 0xbc, 0x37, 0x9e, 0xda, 0x22, 0x45, 0x8d, 0x31, 0xc8, 0x38, 0x72, 0xb4, 0xfa, 0x6b, 0x89, - 0x48, 0xb2, 0x9a, 0x03, 0xfc, 0xb6, 0xbd, 0xbd, 0x43, 0xfb, 0xfb, 0xc9, 0xf8, 0x5c, 0x39, 0x07, - 0xf8, 0x21, 0x8f, 0x62, 0xbb, 0x6a, 0x6f, 0xf3, 0xd6, 0x12, 0x1a, 0x97, 0x65, 0xc1, 0xa7, 0xad, - 0x0b, 0xf1, 0x19, 0x83, 0x06, 0xb4, 0x22, 0xc4, 0x43, 0xfd, 0x20, 0x11, 0x4d, 0xf3, 0x73, 0xe0, - 0xf6, 0x69, 0x6f, 0xda, 0x22, 0x7f, 0xca, 0x47, 0x64, 0xae, 0x79, 0x14, 0x9f, 0xf2, 0x11, 0x99, - 0x35, 0xf6, 0xf6, 0x29, 0x7f, 0x23, 0x39, 0x28, 0x4b, 0xd2, 0x81, 0x7f, 0xd0, 0xe7, 0x44, 0x21, - 0xb3, 0x96, 0xf1, 0x4f, 0xbb, 0x38, 0x28, 0x2d, 0xd1, 0x00, 0x9e, 0x11, 0x3e, 0x7b, 0x1b, 0xe3, - 0xb1, 0xc2, 0xfa, 0x88, 0x28, 0xf2, 0xe1, 0x10, 0xd6, 0x47, 0x64, 0xa8, 0x7c, 0xf4, 0x84, 0xf5, - 0xf7, 0x93, 0x3b, 0x4d, 0xcd, 0x75, 0x2c, 0xbc, 0x88, 0xf0, 0x7e, 0x32, 0x19, 0x4d, 0x19, 0x77, - 0xe0, 0x62, 0x9a, 0x41, 0x19, 0x9e, 0xbc, 0x6e, 0xa0, 0x70, 0x18, 0x7e, 0x90, 0x47, 0xc3, 0xbf, - 0x23, 0x78, 0xf1, 0x33, 0xbd, 0xf3, 0x17, 0x3f, 0x9f, 0x79, 0x1a, 0xe5, 0x61, 0xb7, 0xa7, 0x04, - 0xcf, 0x54, 0xe0, 0x51, 0x94, 0x5b, 0x9c, 0x6e, 0x54, 0xb5, 0xb7, 0xaa, 0x95, 0xc2, 0x10, 0x46, - 0x28, 0x53, 0xa9, 0x2e, 0xd4, 0xaa, 0x95, 0x42, 0xe2, 0x99, 0xff, 0x91, 0x40, 0xa8, 0x31, 0xb3, - 0x54, 0xe7, 0x84, 0x79, 0x94, 0xad, 0x2d, 0xbc, 0x55, 0x9a, 0xab, 0x51, 0xba, 0x1c, 0x4a, 0x2f, - 0xd6, 0xab, 0x0b, 0x85, 0x04, 0x1e, 0x41, 0xc3, 0xe5, 0xb9, 0xc5, 0x46, 0xb5, 0x90, 0xa4, 0x40, - 0xad, 0x5a, 0xaa, 0x14, 0x52, 0x14, 0x78, 0x57, 0xab, 0x2d, 0x55, 0x0b, 0x69, 0xfa, 0xe7, 0x5c, - 0x63, 0xa9, 0xb4, 0x54, 0x18, 0xa6, 0x7f, 0xce, 0xc0, 0x9f, 0x19, 0xca, 0xac, 0x51, 0x5d, 0x82, - 0x1f, 0x59, 0xda, 0x84, 0x19, 0xef, 0x57, 0x8e, 0xa2, 0x28, 0xeb, 0x4a, 0x4d, 0x2b, 0x8c, 0xd0, - 0x1f, 0x94, 0x25, 0xfd, 0x81, 0x68, 0xe3, 0xb4, 0xea, 0xfc, 0xe2, 0x5b, 0xd5, 0x42, 0x9e, 0xf2, - 0x9a, 0xbf, 0x4d, 0xc1, 0xa3, 0xf4, 0x4f, 0x6d, 0x9e, 0xfe, 0x39, 0x46, 0x39, 0x69, 0xd5, 0xd2, - 0x5c, 0xbd, 0xb4, 0x34, 0x5b, 0x18, 0xa7, 0xed, 0x01, 0x9e, 0x13, 0xac, 0xe4, 0x42, 0x69, 0xbe, - 0x5a, 0x28, 0x70, 0x9a, 0xca, 0x5c, 0x6d, 0xe1, 0x76, 0x61, 0x12, 0x1a, 0xf2, 0xce, 0x3c, 0xfc, - 0xc0, 0xb4, 0x00, 0xfc, 0x75, 0xe2, 0x99, 0x1f, 0x42, 0x19, 0xf6, 0x38, 0x2f, 0x3e, 0x83, 0x4e, - 0x2c, 0x36, 0x9a, 0x4b, 0xef, 0xd4, 0xab, 0xcd, 0x3b, 0x0b, 0x8d, 0x7a, 0xb5, 0x5c, 0x9b, 0xa9, - 0x81, 0xa8, 0x26, 0xd1, 0x98, 0x87, 0x98, 0xab, 0x2d, 0xdc, 0x79, 0xbb, 0x90, 0x10, 0x41, 0xf3, - 0xa5, 0xf2, 0x62, 0xa3, 0x90, 0xc4, 0x27, 0xd0, 0x84, 0x07, 0xba, 0x5b, 0x5b, 0xa8, 0x2c, 0xde, - 0x6d, 0x14, 0x52, 0xcf, 0x3c, 0xf0, 0x52, 0x63, 0xb2, 0x17, 0x71, 0xf1, 0x79, 0xf4, 0x58, 0xa5, - 0xfa, 0x56, 0xad, 0x5c, 0x6d, 0x2e, 0x6a, 0xb5, 0x5b, 0xb5, 0x85, 0x50, 0x4d, 0xa7, 0xd0, 0xa4, - 0x8c, 0x2e, 0xd5, 0x6b, 0x85, 0x04, 0x3e, 0x8d, 0xb0, 0x0c, 0x7e, 0xa3, 0x34, 0x3f, 0x53, 0x48, - 0x62, 0x05, 0x9d, 0x94, 0xe1, 0xb5, 0x85, 0xa5, 0x3b, 0x0b, 0xd5, 0x42, 0xea, 0x99, 0xbf, 0x9a, - 0x40, 0xa7, 0x62, 0x63, 0x52, 0xb1, 0x8a, 0x2e, 0x54, 0xe7, 0x4a, 0x8d, 0xa5, 0x5a, 0xb9, 0x51, - 0x2d, 0x69, 0xe5, 0xd9, 0x66, 0xb9, 0xb4, 0x54, 0xbd, 0xb5, 0xa8, 0xbd, 0xd3, 0xbc, 0x55, 0x5d, - 0xa8, 0x6a, 0xa5, 0xb9, 0xc2, 0x10, 0x7e, 0x12, 0x15, 0x07, 0xd0, 0x34, 0xaa, 0xe5, 0x3b, 0x5a, - 0x6d, 0xe9, 0x9d, 0x42, 0x02, 0x3f, 0x81, 0xce, 0x0f, 0x24, 0xa2, 0xbf, 0x0b, 0x49, 0x7c, 0x01, - 0x9d, 0x1d, 0x44, 0xf2, 0xe6, 0x5c, 0x21, 0xf5, 0xcc, 0x5f, 0x48, 0x20, 0x1c, 0x0d, 0x2a, 0xc4, - 0x17, 0xd1, 0x39, 0xaa, 0x17, 0xcd, 0xc1, 0x0d, 0x7c, 0x02, 0x9d, 0x8f, 0xa5, 0x10, 0x9a, 0x57, - 0x44, 0x8f, 0x0f, 0x20, 0xe1, 0x8d, 0x3b, 0x87, 0x94, 0x78, 0x02, 0xda, 0xb4, 0xe9, 0xca, 0x07, - 0xff, 0xfe, 0xc2, 0xd0, 0x07, 0xdf, 0xbb, 0x90, 0xf8, 0xed, 0xef, 0x5d, 0x48, 0xfc, 0xfe, 0xf7, - 0x2e, 0x24, 0x3e, 0x77, 0x7d, 0x37, 0x31, 0x97, 0x6c, 0x78, 0x2e, 0x67, 0x20, 0xba, 0xe8, 0x85, - 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xd0, 0x94, 0xb3, 0x81, 0x4c, 0x0a, 0x01, 0x00, + // 12343 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x8c, 0x1c, 0x47, + 0x76, 0x18, 0xbe, 0xf3, 0xb1, 0x33, 0xb3, 0xb5, 0x5f, 0xb3, 0xc5, 0xaf, 0x16, 0x45, 0x72, 0xa8, + 0x96, 0x8e, 0x22, 0x25, 0x6a, 0x79, 0xa2, 0x78, 0xe2, 0x49, 0x27, 0x9d, 0x34, 0x3b, 0x33, 0xcb, + 0x1d, 0x71, 0xbf, 0xd4, 0xb3, 0x14, 0x25, 0x9d, 0x4f, 0xe3, 0xde, 0xe9, 0xe2, 0x6e, 0x8b, 0x33, + 0xdd, 0x73, 0xdd, 0x3d, 0x5c, 0xae, 0x7e, 0xbf, 0x24, 0xbe, 0xc4, 0x9f, 0x81, 0x6d, 0x18, 0x0e, + 0x0c, 0x07, 0x48, 0x80, 0xd8, 0x09, 0x02, 0x38, 0x86, 0xe3, 0x8b, 0x93, 0xc0, 0x8e, 0xe3, 0x1c, + 0x12, 0xe7, 0x2e, 0x89, 0x9c, 0xb3, 0x2f, 0x76, 0x62, 0x38, 0x40, 0x80, 0xec, 0xd9, 0x17, 0x38, + 0x01, 0x16, 0x09, 0x70, 0x40, 0x0e, 0xc9, 0xc5, 0xf9, 0x44, 0xbd, 0xaa, 0xee, 0xae, 0xea, 0xee, + 0xd9, 0x4f, 0xca, 0xab, 0xd5, 0xee, 0x3f, 0xe4, 0xce, 0x7b, 0xaf, 0x5e, 0x55, 0xbf, 0x7a, 0xf5, + 0xea, 0x55, 0xd5, 0xab, 0x57, 0xe8, 0x8a, 0x47, 0xda, 0xa4, 0x6b, 0x3b, 0xde, 0xb5, 0x36, 0x59, + 0xd1, 0x5b, 0xeb, 0xd7, 0xbc, 0xf5, 0x2e, 0x71, 0xaf, 0x91, 0x07, 0xc4, 0xf2, 0xfc, 0xff, 0x26, + 0xbb, 0x8e, 0xed, 0xd9, 0x38, 0xc7, 0x7e, 0x9d, 0x3d, 0xb9, 0x62, 0xaf, 0xd8, 0x00, 0xba, 0x46, + 0xff, 0x62, 0xd8, 0xb3, 0xe7, 0x56, 0x6c, 0x7b, 0xa5, 0x4d, 0xae, 0xc1, 0xaf, 0xe5, 0xde, 0xbd, + 0x6b, 0xae, 0xe7, 0xf4, 0x5a, 0x1e, 0xc7, 0x96, 0xa2, 0x58, 0xcf, 0xec, 0x10, 0xd7, 0xd3, 0x3b, + 0x5d, 0x4e, 0x70, 0x21, 0x4a, 0xb0, 0xe6, 0xe8, 0xdd, 0x2e, 0x71, 0x78, 0xe5, 0x67, 0x9f, 0x48, + 0x6e, 0x27, 0xfc, 0xcb, 0x49, 0x9e, 0x4b, 0x26, 0xf1, 0x19, 0x45, 0x38, 0xaa, 0x3f, 0x9d, 0x46, + 0x85, 0x39, 0xe2, 0xe9, 0x86, 0xee, 0xe9, 0xf8, 0x1c, 0x1a, 0xac, 0x5b, 0x06, 0x79, 0xa8, 0xa4, + 0x2e, 0xa6, 0x2e, 0x67, 0xa6, 0x72, 0x9b, 0x1b, 0xa5, 0x34, 0x31, 0x35, 0x06, 0xc4, 0xe7, 0x51, + 0x76, 0x69, 0xbd, 0x4b, 0x94, 0xf4, 0xc5, 0xd4, 0xe5, 0xa1, 0xa9, 0xa1, 0xcd, 0x8d, 0xd2, 0x20, + 0xc8, 0x42, 0x03, 0x30, 0x7e, 0x02, 0xa5, 0xeb, 0x55, 0x25, 0x03, 0xc8, 0x89, 0xcd, 0x8d, 0xd2, + 0x68, 0xcf, 0x34, 0xae, 0xda, 0x1d, 0xd3, 0x23, 0x9d, 0xae, 0xb7, 0xae, 0xa5, 0xeb, 0x55, 0x7c, + 0x09, 0x65, 0x2b, 0xb6, 0x41, 0x94, 0x2c, 0x10, 0xe1, 0xcd, 0x8d, 0xd2, 0x58, 0xcb, 0x36, 0x88, + 0x40, 0x05, 0x78, 0xfc, 0x3a, 0xca, 0x2e, 0x99, 0x1d, 0xa2, 0x0c, 0x5e, 0x4c, 0x5d, 0x1e, 0xbe, + 0x7e, 0x76, 0x92, 0x49, 0x65, 0xd2, 0x97, 0xca, 0xe4, 0x92, 0x2f, 0xb6, 0xa9, 0xe2, 0x87, 0x1b, + 0xa5, 0x81, 0xcd, 0x8d, 0x52, 0x96, 0x4a, 0xf2, 0xa7, 0xbe, 0x55, 0x4a, 0x69, 0x50, 0x12, 0xbf, + 0x82, 0x86, 0x2b, 0xed, 0x9e, 0xeb, 0x11, 0x67, 0x5e, 0xef, 0x10, 0x25, 0x07, 0x15, 0x9e, 0xdd, + 0xdc, 0x28, 0x9d, 0x6e, 0x31, 0x70, 0xd3, 0xd2, 0x3b, 0x62, 0xc5, 0x22, 0xb9, 0xfa, 0x3e, 0x1a, + 0x6f, 0x10, 0xd7, 0x35, 0x6d, 0x2b, 0x10, 0xcd, 0xa7, 0xd0, 0x10, 0x07, 0xd5, 0xab, 0x20, 0x9e, + 0xa1, 0xa9, 0xfc, 0xe6, 0x46, 0x29, 0xe3, 0x9a, 0x86, 0x16, 0x62, 0xf0, 0xa7, 0x51, 0xfe, 0xae, + 0xe9, 0xad, 0xce, 0x4d, 0x97, 0xb9, 0x98, 0x4e, 0x6f, 0x6e, 0x94, 0xf0, 0x9a, 0xe9, 0xad, 0x36, + 0x3b, 0xf7, 0x74, 0xa1, 0x3e, 0x9f, 0x4c, 0xfd, 0x99, 0x2c, 0x1a, 0xb9, 0xe3, 0x12, 0x27, 0xa8, + 0xe9, 0x12, 0xca, 0xd2, 0xdf, 0xbc, 0x12, 0x10, 0x52, 0xcf, 0x25, 0x8e, 0x28, 0x24, 0x8a, 0xc7, + 0x57, 0xd0, 0xe0, 0xac, 0xbd, 0x62, 0x5a, 0xbc, 0xa2, 0x13, 0x9b, 0x1b, 0xa5, 0xf1, 0x36, 0x05, + 0x08, 0x94, 0x8c, 0x02, 0x7f, 0x1e, 0x8d, 0xd4, 0x3b, 0xb4, 0xd3, 0x6d, 0x4b, 0xf7, 0x6c, 0x87, + 0x77, 0x12, 0x88, 0xc3, 0x14, 0xe0, 0x42, 0x41, 0x89, 0x1e, 0xbf, 0x8c, 0x50, 0xf9, 0x6e, 0x43, + 0xb3, 0xdb, 0xa4, 0xac, 0xcd, 0xf3, 0xde, 0x83, 0xd2, 0xfa, 0x9a, 0xdb, 0x74, 0xec, 0x36, 0x69, + 0xea, 0x8e, 0x58, 0xad, 0x40, 0x8d, 0x6b, 0x68, 0xac, 0xdc, 0x6a, 0x11, 0xd7, 0xd5, 0xc8, 0x97, + 0x7a, 0xc4, 0xf5, 0x5c, 0x65, 0xf0, 0x62, 0xe6, 0xf2, 0xd0, 0xd4, 0xf9, 0xcd, 0x8d, 0xd2, 0x63, + 0x3a, 0x60, 0x9a, 0x0e, 0x47, 0x09, 0x2c, 0x22, 0x85, 0xf0, 0x14, 0x1a, 0x2d, 0x7f, 0xd0, 0x73, + 0x48, 0xdd, 0x20, 0x96, 0x67, 0x7a, 0xeb, 0xbc, 0x4b, 0xcf, 0x6d, 0x6e, 0x94, 0x14, 0x9d, 0x22, + 0x9a, 0x26, 0xc7, 0x08, 0x4c, 0xe4, 0x22, 0x78, 0x01, 0x4d, 0xdc, 0xaa, 0x2c, 0x36, 0x88, 0xf3, + 0xc0, 0x6c, 0x91, 0x72, 0xab, 0x65, 0xf7, 0x2c, 0x4f, 0xc9, 0x03, 0x9f, 0x27, 0x36, 0x37, 0x4a, + 0xe7, 0x57, 0x5a, 0xdd, 0xa6, 0xcb, 0xb0, 0x4d, 0x9d, 0xa1, 0x05, 0x66, 0xf1, 0xb2, 0xf8, 0x5d, + 0x34, 0xba, 0xe4, 0x50, 0xb5, 0x31, 0xaa, 0x84, 0xc2, 0x95, 0x02, 0x28, 0xec, 0xe9, 0x49, 0x6e, + 0x31, 0x18, 0xd4, 0xef, 0x59, 0xd6, 0x58, 0x8f, 0x15, 0x68, 0x1a, 0x80, 0x13, 0x1b, 0x2b, 0xb1, + 0x52, 0xff, 0x5e, 0x16, 0x8d, 0xd1, 0xea, 0x04, 0xcd, 0x28, 0x53, 0xb5, 0xa4, 0x10, 0xaa, 0xa4, + 0x6e, 0x57, 0x6f, 0x11, 0xae, 0x24, 0x67, 0x36, 0x37, 0x4a, 0x27, 0x2c, 0x1f, 0x28, 0xf0, 0x8c, + 0xd2, 0xe3, 0x2b, 0xa8, 0xc0, 0x40, 0xf5, 0x2a, 0xd7, 0x9b, 0xd1, 0xcd, 0x8d, 0xd2, 0x90, 0x0b, + 0xb0, 0xa6, 0x69, 0x68, 0x01, 0x9a, 0x76, 0x1c, 0xfb, 0x7b, 0xc6, 0x76, 0x3d, 0xca, 0x9c, 0xab, + 0x0d, 0x74, 0x1c, 0x2f, 0xb0, 0xca, 0x51, 0x62, 0xc7, 0xc9, 0x85, 0xf0, 0x4b, 0x08, 0x31, 0x48, + 0xd9, 0x30, 0x1c, 0xae, 0x3b, 0x8f, 0x6d, 0x6e, 0x94, 0x4e, 0x71, 0x16, 0xba, 0x61, 0x88, 0x8a, + 0x27, 0x10, 0xe3, 0x0e, 0x1a, 0x61, 0xbf, 0x66, 0xf5, 0x65, 0xd2, 0x66, 0x8a, 0x33, 0x7c, 0xfd, + 0xb2, 0x2f, 0x5d, 0x59, 0x3a, 0x93, 0x22, 0x69, 0xcd, 0xf2, 0x9c, 0xf5, 0xa9, 0x12, 0x37, 0x0e, + 0x67, 0x78, 0x55, 0x6d, 0xc0, 0x89, 0x5a, 0x2e, 0x96, 0xa1, 0x36, 0x63, 0xda, 0x76, 0xd6, 0x74, + 0xc7, 0x20, 0xc6, 0xd4, 0xba, 0x68, 0x33, 0xee, 0xf9, 0xe0, 0xe6, 0xb2, 0xa8, 0x5e, 0x22, 0x39, + 0xae, 0xa0, 0x51, 0xc6, 0xad, 0xd1, 0x5b, 0xbe, 0x6d, 0x5a, 0x06, 0x57, 0x2c, 0x51, 0x5a, 0x6e, + 0x6f, 0xb9, 0x79, 0xdf, 0xb4, 0x44, 0xab, 0x28, 0x97, 0x39, 0xfb, 0x1a, 0x9a, 0x88, 0x7d, 0x06, + 0x2e, 0xa2, 0xcc, 0x7d, 0xb2, 0xce, 0xba, 0x5a, 0xa3, 0x7f, 0xe2, 0x93, 0x68, 0xf0, 0x81, 0xde, + 0xee, 0x71, 0x53, 0xac, 0xb1, 0x1f, 0x2f, 0xa7, 0x3f, 0x9b, 0x52, 0xff, 0x41, 0x0a, 0xe1, 0x8a, + 0x6d, 0x59, 0xa4, 0xe5, 0x89, 0xd6, 0xeb, 0x45, 0x34, 0x34, 0x6b, 0xb7, 0xf4, 0x36, 0xf4, 0x01, + 0xd3, 0x19, 0x65, 0x73, 0xa3, 0x74, 0x92, 0x0a, 0x7f, 0xb2, 0x4d, 0x31, 0x42, 0x9b, 0x42, 0x52, + 0xda, 0x79, 0x1a, 0xe9, 0xd8, 0x1e, 0x81, 0x82, 0xe9, 0xb0, 0xf3, 0xa0, 0xa0, 0x03, 0x28, 0xb1, + 0xf3, 0x42, 0x62, 0x7c, 0x0d, 0x15, 0x16, 0xa9, 0xbd, 0x6e, 0xd9, 0x6d, 0xae, 0x38, 0x60, 0xa1, + 0xc0, 0x86, 0x0b, 0x45, 0x02, 0x22, 0x75, 0x06, 0x8d, 0x55, 0xda, 0x26, 0xb1, 0x3c, 0xb1, 0xd5, + 0xd4, 0xd2, 0x95, 0x57, 0x88, 0xe5, 0x89, 0xad, 0xa6, 0xe6, 0xb0, 0xa9, 0x53, 0xa8, 0xd8, 0xea, + 0x80, 0x54, 0xfd, 0x66, 0x06, 0x3d, 0x76, 0xbb, 0xb7, 0x4c, 0x1c, 0x8b, 0x78, 0xc4, 0xe5, 0x86, + 0x3d, 0xe0, 0x3a, 0x8f, 0x26, 0x62, 0x48, 0xce, 0xfd, 0xe2, 0xe6, 0x46, 0xe9, 0xdc, 0xfd, 0x00, + 0xd9, 0xe4, 0x73, 0x85, 0x68, 0x04, 0x62, 0x45, 0xf1, 0x0c, 0x1a, 0x0f, 0x81, 0xb4, 0x11, 0xae, + 0x92, 0x06, 0x0b, 0x77, 0x61, 0x73, 0xa3, 0x74, 0x56, 0xe0, 0x46, 0x9b, 0x2d, 0x6a, 0x5f, 0xb4, + 0x18, 0xbe, 0x8d, 0x8a, 0x21, 0xe8, 0x96, 0x63, 0xf7, 0xba, 0xae, 0x92, 0x01, 0x56, 0xa5, 0xcd, + 0x8d, 0xd2, 0xe3, 0x02, 0xab, 0x15, 0x40, 0x0a, 0xbc, 0x62, 0x05, 0xf1, 0x0f, 0xa6, 0x44, 0x6e, + 0x7c, 0x04, 0x65, 0x61, 0x04, 0xdd, 0xf4, 0x47, 0x50, 0x5f, 0x21, 0x4d, 0x46, 0x4b, 0xf2, 0x01, + 0x15, 0x69, 0x46, 0x6c, 0x40, 0xc5, 0x6a, 0x3c, 0x5b, 0x41, 0xa7, 0x12, 0x79, 0xed, 0x4a, 0xab, + 0xff, 0x38, 0x23, 0x72, 0x59, 0xb4, 0x8d, 0xa0, 0x33, 0x17, 0xc4, 0xce, 0x5c, 0xb4, 0x0d, 0x98, + 0xed, 0x53, 0xa1, 0x49, 0x17, 0x1a, 0xdb, 0xb5, 0x8d, 0xe8, 0xa4, 0x1f, 0x2f, 0x8b, 0xdf, 0x43, + 0xa7, 0x63, 0x40, 0x66, 0x6a, 0x99, 0xf6, 0x5f, 0xda, 0xdc, 0x28, 0xa9, 0x09, 0x5c, 0xa3, 0x96, + 0xb7, 0x0f, 0x17, 0xac, 0xa3, 0x33, 0x82, 0xd4, 0x6d, 0xcb, 0xd3, 0x4d, 0x8b, 0x3b, 0x29, 0x6c, + 0x94, 0x3c, 0xbd, 0xb9, 0x51, 0x7a, 0x52, 0xd4, 0x41, 0x9f, 0x26, 0xda, 0xf8, 0x7e, 0x7c, 0xb0, + 0x81, 0x94, 0x04, 0x54, 0xbd, 0xa3, 0xaf, 0xf8, 0x9e, 0xd7, 0xe5, 0xcd, 0x8d, 0xd2, 0x53, 0x89, + 0x75, 0x98, 0x94, 0x4a, 0xa8, 0xa4, 0x2f, 0x27, 0xac, 0x21, 0x1c, 0xe2, 0xe6, 0x6d, 0x83, 0xc0, + 0x37, 0x0c, 0x02, 0x7f, 0x75, 0x73, 0xa3, 0x74, 0x41, 0xe0, 0x6f, 0xd9, 0x06, 0x89, 0x36, 0x3f, + 0xa1, 0xb4, 0xfa, 0x9f, 0x52, 0xe8, 0x42, 0xa3, 0x3c, 0x37, 0x5b, 0x37, 0xfc, 0x99, 0x76, 0xd1, + 0xb1, 0x1f, 0x98, 0x86, 0x30, 0x7a, 0x97, 0xd1, 0x99, 0x08, 0xaa, 0x06, 0x93, 0x7b, 0xe0, 0x95, + 0xc1, 0xb7, 0xf9, 0xb3, 0x78, 0x97, 0xd3, 0x34, 0x99, 0x07, 0xd0, 0x94, 0x3c, 0xd2, 0x7e, 0x8c, + 0x68, 0x1f, 0x45, 0x50, 0x8d, 0x55, 0xdb, 0xf1, 0x5a, 0x3d, 0x8f, 0x2b, 0x01, 0xf4, 0x51, 0xac, + 0x0e, 0x97, 0x13, 0x6d, 0x51, 0x85, 0xcf, 0x47, 0xfd, 0xe9, 0x0c, 0x3a, 0xb7, 0x70, 0xdf, 0xd3, + 0x35, 0xe2, 0xda, 0x3d, 0xa7, 0x45, 0xdc, 0x3b, 0x5d, 0x43, 0xf7, 0x48, 0xa8, 0xd8, 0x25, 0x34, + 0x58, 0x36, 0x0c, 0x62, 0xc0, 0x57, 0x0d, 0x32, 0x6f, 0x5b, 0xa7, 0x00, 0x8d, 0xc1, 0xf1, 0xa7, + 0x50, 0x9e, 0x97, 0x81, 0x46, 0x0d, 0x4e, 0x0d, 0x6f, 0x6e, 0x94, 0xf2, 0x3d, 0x06, 0xd2, 0x7c, + 0x1c, 0x25, 0xab, 0x92, 0x36, 0xa1, 0x64, 0x99, 0x90, 0xcc, 0x60, 0x20, 0xcd, 0xc7, 0xe1, 0x37, + 0xd1, 0x18, 0xb0, 0x0d, 0xda, 0xc3, 0x4d, 0xc5, 0x49, 0xdf, 0x54, 0x88, 0x8d, 0x65, 0x96, 0x1c, + 0x5a, 0xd3, 0x74, 0xfc, 0x02, 0x5a, 0x84, 0x01, 0xbe, 0x8b, 0x8a, 0xbc, 0x11, 0x21, 0xd3, 0xc1, + 0x2d, 0x98, 0x9e, 0xda, 0xdc, 0x28, 0x4d, 0xf0, 0xf6, 0x0b, 0x6c, 0x63, 0x4c, 0x28, 0x63, 0xde, + 0xec, 0x90, 0x71, 0x6e, 0x3b, 0xc6, 0xfc, 0x8b, 0x45, 0xc6, 0x51, 0x26, 0xea, 0x3b, 0x68, 0x44, + 0x2c, 0x88, 0x4f, 0xc3, 0x8a, 0x86, 0xa9, 0x15, 0xac, 0x85, 0x4c, 0x03, 0x96, 0x31, 0xcf, 0xa3, + 0xe1, 0x2a, 0x71, 0x5b, 0x8e, 0xd9, 0xa5, 0x93, 0x2c, 0xd7, 0x89, 0xf1, 0xcd, 0x8d, 0xd2, 0xb0, + 0x11, 0x82, 0x35, 0x91, 0x46, 0xfd, 0x6f, 0x29, 0x74, 0x9a, 0xf2, 0x2e, 0xbb, 0xae, 0xb9, 0x62, + 0x75, 0xc4, 0x59, 0xee, 0x2a, 0xca, 0x35, 0xa0, 0x3e, 0x5e, 0xd3, 0xc9, 0xcd, 0x8d, 0x52, 0x91, + 0xb5, 0x40, 0xd0, 0x24, 0x4e, 0x13, 0xac, 0x0e, 0xd2, 0xdb, 0xac, 0x0e, 0xa8, 0xf7, 0xe6, 0xe9, + 0x8e, 0x67, 0x5a, 0x2b, 0x0d, 0x4f, 0xf7, 0x7a, 0xae, 0xe4, 0xbd, 0x71, 0x4c, 0xd3, 0x05, 0x94, + 0xe4, 0xbd, 0x49, 0x85, 0xf0, 0x6b, 0x68, 0xa4, 0x66, 0x19, 0x21, 0x13, 0x66, 0x3f, 0x1e, 0xa7, + 0x4e, 0x15, 0x01, 0x78, 0x9c, 0x85, 0x54, 0x40, 0xfd, 0xdb, 0x29, 0xa4, 0x30, 0x57, 0x7e, 0xd6, + 0x74, 0xbd, 0x39, 0xd2, 0x59, 0x16, 0x06, 0xf3, 0xb4, 0xbf, 0x36, 0xa0, 0x38, 0xc1, 0x74, 0xc3, + 0xcc, 0xc9, 0xd7, 0x06, 0x6d, 0xd3, 0xf5, 0xa2, 0xb6, 0x23, 0x52, 0x0a, 0xd7, 0x51, 0x9e, 0x71, + 0x66, 0x53, 0xef, 0xf0, 0x75, 0xc5, 0x57, 0x84, 0x68, 0xd5, 0x4c, 0x19, 0x3a, 0x8c, 0x58, 0x5c, + 0x8e, 0xf1, 0xf2, 0xea, 0xdf, 0x49, 0xa3, 0x62, 0xb4, 0x10, 0xbe, 0x8b, 0x0a, 0x6f, 0xd8, 0xa6, + 0x45, 0x8c, 0x05, 0x0b, 0x5a, 0xb8, 0xf5, 0x9a, 0xd4, 0x77, 0x3b, 0x4f, 0xbc, 0x0f, 0x65, 0x9a, + 0xb6, 0xb0, 0x34, 0x82, 0x25, 0x6a, 0xc0, 0x0c, 0xbf, 0x8b, 0x86, 0xa8, 0xcb, 0xf4, 0x00, 0x38, + 0xa7, 0xb7, 0xe5, 0x7c, 0x91, 0x73, 0x3e, 0xe9, 0xb0, 0x42, 0x71, 0xd6, 0x21, 0x3b, 0xaa, 0x57, + 0x1a, 0xd1, 0x5d, 0xdb, 0xe2, 0x3d, 0x0f, 0x7a, 0xe5, 0x00, 0x44, 0xd4, 0x2b, 0x46, 0x43, 0x3d, + 0x3d, 0xf6, 0xb1, 0xd0, 0x0d, 0x82, 0x9b, 0xce, 0x64, 0x15, 0xed, 0x01, 0x81, 0x58, 0xbd, 0x2d, + 0xf6, 0xb0, 0x46, 0x1e, 0x98, 0x64, 0x2d, 0xe8, 0xe1, 0x6b, 0xb4, 0x67, 0x5c, 0x97, 0x4e, 0x3d, + 0xac, 0x6b, 0xb9, 0xfc, 0x01, 0x24, 0xcb, 0x1f, 0x40, 0xea, 0xb7, 0x06, 0xa9, 0xd3, 0x0f, 0xcb, + 0x69, 0x50, 0x45, 0xfc, 0x72, 0xb8, 0x3f, 0xc1, 0x65, 0x5f, 0xf4, 0x3b, 0x37, 0x58, 0x58, 0x8d, + 0x50, 0xb9, 0xfc, 0xee, 0x46, 0x29, 0xb5, 0xb9, 0x51, 0x1a, 0xd0, 0x0a, 0x82, 0x03, 0x19, 0x0e, + 0x16, 0xc1, 0x3a, 0x88, 0xcb, 0xed, 0x48, 0x59, 0x36, 0x78, 0x5e, 0x43, 0x79, 0xde, 0x06, 0x90, + 0xdd, 0xf0, 0xf5, 0x33, 0xe1, 0x9a, 0x43, 0xda, 0x16, 0x88, 0x94, 0xf6, 0x4b, 0xe1, 0x57, 0x50, + 0x8e, 0xf9, 0xf1, 0x20, 0x49, 0x61, 0x45, 0x28, 0xaf, 0x59, 0x22, 0xc5, 0x79, 0x19, 0x3c, 0x83, + 0x50, 0xe8, 0xc3, 0x07, 0x9b, 0x20, 0x9c, 0x43, 0xdc, 0xbb, 0x8f, 0x70, 0x11, 0xca, 0xe2, 0x17, + 0xd1, 0xc8, 0x12, 0x71, 0x3a, 0xa6, 0xa5, 0xb7, 0x1b, 0xe6, 0x07, 0xfe, 0x3e, 0x08, 0x58, 0x0d, + 0xd7, 0xfc, 0x40, 0xec, 0x00, 0x89, 0x0e, 0x7f, 0x31, 0xc9, 0x47, 0xce, 0x43, 0x43, 0x9e, 0xd8, + 0xd6, 0x79, 0x8c, 0xb4, 0x27, 0xc1, 0x65, 0x7e, 0x13, 0x8d, 0x4a, 0xee, 0x11, 0x5f, 0x37, 0x9f, + 0x8f, 0xb3, 0x16, 0x7c, 0xbd, 0x08, 0x5b, 0x99, 0x03, 0xb5, 0x77, 0x75, 0xcb, 0xf4, 0x4c, 0xbd, + 0x5d, 0xb1, 0x3b, 0x1d, 0xdd, 0x32, 0x94, 0xa1, 0x70, 0x9b, 0xc1, 0x64, 0x98, 0x66, 0x8b, 0xa1, + 0x44, 0x4b, 0x22, 0x17, 0xa2, 0x2e, 0x38, 0xef, 0x43, 0x8d, 0xb4, 0x6c, 0x87, 0x1a, 0x32, 0x05, + 0x81, 0xd0, 0xc0, 0xf7, 0x75, 0x19, 0xae, 0xe9, 0xf8, 0x48, 0xd1, 0xf7, 0x8d, 0x16, 0x7c, 0x23, + 0x5b, 0x18, 0x2e, 0x8e, 0x44, 0x77, 0x32, 0xd4, 0xbf, 0x95, 0x41, 0xc3, 0x9c, 0x94, 0xda, 0x81, + 0x63, 0x05, 0xdf, 0x8f, 0x82, 0x27, 0x2a, 0x6a, 0xee, 0x51, 0x29, 0xaa, 0xfa, 0xe3, 0xe9, 0xc0, + 0x1a, 0x2d, 0x3a, 0xa6, 0xb5, 0x3f, 0x6b, 0x74, 0x09, 0xa1, 0xca, 0x6a, 0xcf, 0xba, 0xcf, 0xb6, + 0x58, 0xd3, 0xe1, 0x16, 0x6b, 0xcb, 0xd4, 0x04, 0x0c, 0x3e, 0x8f, 0xb2, 0x55, 0xca, 0x9f, 0xf6, + 0xcc, 0xc8, 0xd4, 0xd0, 0x87, 0x8c, 0x53, 0xea, 0x39, 0x0d, 0xc0, 0xd4, 0x33, 0x9c, 0x5a, 0xf7, + 0x08, 0x9b, 0x8b, 0x33, 0xcc, 0x33, 0x5c, 0xa6, 0x00, 0x8d, 0xc1, 0xf1, 0x0d, 0x34, 0x51, 0x25, + 0x6d, 0x7d, 0x7d, 0xce, 0x6c, 0xb7, 0x4d, 0x97, 0xb4, 0x6c, 0xcb, 0x70, 0x41, 0xc8, 0xbc, 0xba, + 0x8e, 0xab, 0xc5, 0x09, 0xb0, 0x8a, 0x72, 0x0b, 0xf7, 0xee, 0xb9, 0xc4, 0x03, 0xf1, 0x65, 0xa6, + 0xd0, 0xe6, 0x46, 0x29, 0x67, 0x03, 0x44, 0xe3, 0x18, 0xf5, 0x2b, 0x29, 0xea, 0x7a, 0xb9, 0xf7, + 0x3d, 0xbb, 0x1b, 0x68, 0xf9, 0xbe, 0x44, 0x72, 0x25, 0x9c, 0x1e, 0xd2, 0xf0, 0xb5, 0xe3, 0xfc, + 0x6b, 0xf3, 0x7c, 0x8a, 0x08, 0x26, 0x86, 0xe4, 0xaf, 0xca, 0x6c, 0xf3, 0x55, 0xea, 0x77, 0xd2, + 0xe8, 0x0c, 0x6f, 0x71, 0xa5, 0x6d, 0x76, 0x97, 0x6d, 0xdd, 0x31, 0x34, 0xd2, 0x22, 0xe6, 0x03, + 0x72, 0x38, 0x07, 0x9e, 0x3c, 0x74, 0xb2, 0xfb, 0x18, 0x3a, 0xd7, 0xc1, 0x8b, 0xa5, 0x92, 0x81, + 0xcd, 0x1d, 0xb6, 0x72, 0x2b, 0x6e, 0x6e, 0x94, 0x46, 0x0c, 0x06, 0x86, 0xad, 0x39, 0x4d, 0x24, + 0xa2, 0x4a, 0x32, 0x4b, 0xac, 0x15, 0x6f, 0x15, 0x94, 0x64, 0x90, 0x29, 0x49, 0x1b, 0x20, 0x1a, + 0xc7, 0xa8, 0xff, 0x25, 0x8d, 0x4e, 0x46, 0x45, 0xde, 0x20, 0x96, 0x71, 0x2c, 0xef, 0x8f, 0x46, + 0xde, 0xdf, 0xcd, 0xa0, 0xc7, 0x79, 0x99, 0xc6, 0xaa, 0xee, 0x10, 0xa3, 0x6a, 0x3a, 0xa4, 0xe5, + 0xd9, 0xce, 0xfa, 0x21, 0x76, 0xa0, 0x1e, 0x9d, 0xd8, 0x6f, 0xa0, 0x1c, 0x5f, 0xbb, 0xb0, 0x79, + 0x66, 0x2c, 0x68, 0x09, 0x40, 0x63, 0x33, 0x14, 0x5b, 0xf7, 0x44, 0x3a, 0x2b, 0xb7, 0x93, 0xce, + 0xfa, 0x2c, 0x1a, 0x0d, 0x44, 0x0f, 0x5e, 0x74, 0x3e, 0xf4, 0xb6, 0x0c, 0x1f, 0x01, 0x8e, 0xb4, + 0x26, 0x13, 0x42, 0x6d, 0x3e, 0xa0, 0x5e, 0x05, 0x6f, 0x68, 0x94, 0xd7, 0x16, 0x94, 0x33, 0x0d, + 0x4d, 0x24, 0x52, 0x37, 0xb2, 0xe8, 0x6c, 0x72, 0xb7, 0x6b, 0x44, 0x37, 0x8e, 0x7b, 0xfd, 0x13, + 0xd9, 0xeb, 0xf8, 0x09, 0x94, 0x5d, 0xd4, 0xbd, 0x55, 0x65, 0x28, 0x3c, 0xbb, 0xb9, 0x67, 0xb6, + 0x49, 0xb3, 0xab, 0x7b, 0xab, 0x1a, 0xa0, 0x04, 0x9b, 0x81, 0x80, 0x63, 0x82, 0xcd, 0x10, 0x26, + 0xfb, 0xe1, 0x8b, 0xa9, 0xcb, 0xd9, 0xc4, 0xc9, 0xfe, 0x5b, 0xd9, 0x7e, 0x76, 0xe5, 0xae, 0x63, + 0x7a, 0xe4, 0x58, 0xc3, 0x8e, 0x35, 0x6c, 0x9f, 0x1a, 0xf6, 0xaf, 0xd3, 0x68, 0x34, 0x58, 0x34, + 0xbd, 0x4f, 0x5a, 0x07, 0x33, 0x57, 0x85, 0x4b, 0x99, 0xcc, 0xbe, 0x97, 0x32, 0xfb, 0x51, 0x28, + 0x35, 0xd8, 0xaf, 0x61, 0xae, 0x01, 0x48, 0x8c, 0xed, 0xd7, 0x04, 0xbb, 0x34, 0x4f, 0xa0, 0xfc, + 0x9c, 0xfe, 0xd0, 0xec, 0xf4, 0x3a, 0xdc, 0x4b, 0x87, 0x18, 0x84, 0x8e, 0xfe, 0x50, 0xf3, 0xe1, + 0xea, 0xef, 0xa7, 0xd0, 0x18, 0x17, 0x2a, 0x67, 0xbe, 0x2f, 0xa9, 0x86, 0xd2, 0x49, 0xef, 0x5b, + 0x3a, 0x99, 0xbd, 0x4b, 0x47, 0xfd, 0xab, 0x19, 0xa4, 0x4c, 0x9b, 0x6d, 0xb2, 0xe4, 0xe8, 0x96, + 0x7b, 0x8f, 0x38, 0x7c, 0x39, 0x5d, 0xa3, 0xac, 0xf6, 0xf5, 0x81, 0x82, 0x49, 0x49, 0xef, 0xc9, + 0xa4, 0x3c, 0x8b, 0x86, 0x78, 0x63, 0x82, 0xf0, 0x17, 0x18, 0x35, 0x8e, 0x0f, 0xd4, 0x42, 0x3c, + 0x25, 0x2e, 0x77, 0xbb, 0x8e, 0xfd, 0x80, 0x38, 0x6c, 0x8b, 0x9d, 0x13, 0xeb, 0x3e, 0x50, 0x0b, + 0xf1, 0x02, 0x67, 0xe2, 0xfb, 0x8b, 0x22, 0x67, 0xe2, 0x68, 0x21, 0x1e, 0x5f, 0x46, 0x85, 0x59, + 0xbb, 0xa5, 0x83, 0xa0, 0x99, 0x59, 0x19, 0xd9, 0xdc, 0x28, 0x15, 0xda, 0x1c, 0xa6, 0x05, 0x58, + 0x4a, 0x59, 0xb5, 0xd7, 0xac, 0xb6, 0xad, 0xb3, 0x43, 0xea, 0x02, 0xa3, 0x34, 0x38, 0x4c, 0x0b, + 0xb0, 0x94, 0x92, 0xca, 0x1c, 0x0e, 0xff, 0x0b, 0x21, 0xcf, 0x7b, 0x1c, 0xa6, 0x05, 0x58, 0xf5, + 0x2b, 0x59, 0xaa, 0xbd, 0xae, 0xf9, 0xc1, 0x91, 0x9f, 0x17, 0xc2, 0x01, 0x33, 0xb8, 0x87, 0x01, + 0x73, 0x64, 0x36, 0xec, 0xd4, 0xff, 0x9e, 0x47, 0x88, 0x4b, 0xbf, 0x76, 0xbc, 0x38, 0xdc, 0x9f, + 0xd6, 0x54, 0xd1, 0x44, 0xcd, 0x5a, 0xd5, 0xad, 0x16, 0x31, 0xc2, 0x6d, 0xcb, 0x1c, 0x0c, 0x6d, + 0x88, 0x3f, 0x23, 0x1c, 0x19, 0xee, 0x5b, 0x6a, 0xf1, 0x02, 0xf8, 0x79, 0x34, 0x5c, 0xb7, 0x3c, + 0xe2, 0xe8, 0x2d, 0xcf, 0x7c, 0x40, 0xb8, 0x69, 0x80, 0x63, 0x2d, 0x33, 0x04, 0x6b, 0x22, 0x0d, + 0xbe, 0x81, 0x46, 0x16, 0x75, 0xc7, 0x33, 0x5b, 0x66, 0x57, 0xb7, 0x3c, 0x57, 0x29, 0x80, 0x45, + 0x03, 0x0f, 0xa3, 0x2b, 0xc0, 0x35, 0x89, 0x0a, 0x7f, 0x11, 0x0d, 0xc1, 0xd2, 0x14, 0x62, 0xfc, + 0x86, 0xb6, 0x3d, 0xf5, 0x78, 0x32, 0x0c, 0xe3, 0x61, 0xbb, 0xaf, 0x70, 0x7c, 0x15, 0x3d, 0xf8, + 0x08, 0x38, 0xe2, 0xb7, 0x51, 0xbe, 0x66, 0x19, 0xc0, 0x1c, 0x6d, 0xcb, 0x5c, 0xe5, 0xcc, 0x4f, + 0x87, 0xcc, 0xed, 0x6e, 0x84, 0xb7, 0xcf, 0x2e, 0x79, 0x94, 0x0d, 0x7f, 0x74, 0xa3, 0x6c, 0xe4, + 0x23, 0xd8, 0x16, 0x1f, 0x7d, 0x54, 0xdb, 0xe2, 0x63, 0x7b, 0xdc, 0x16, 0x57, 0x3f, 0x40, 0xc3, + 0x53, 0x8b, 0xd3, 0xc1, 0xe8, 0x7d, 0x0c, 0x65, 0x16, 0xf9, 0x31, 0x6b, 0x96, 0xf9, 0x33, 0x5d, + 0xd3, 0xd0, 0x28, 0x0c, 0x5f, 0x41, 0x85, 0x0a, 0x84, 0xba, 0xf0, 0x68, 0xb5, 0x2c, 0x9b, 0xff, + 0x5a, 0x00, 0x83, 0x68, 0x35, 0x1f, 0x8d, 0x3f, 0x85, 0xf2, 0x8b, 0x8e, 0xbd, 0xe2, 0xe8, 0x1d, + 0x3e, 0x07, 0xc3, 0x39, 0x77, 0x97, 0x81, 0x34, 0x1f, 0xa7, 0xfe, 0xa5, 0x94, 0xef, 0xb6, 0xd3, + 0x12, 0x8d, 0x1e, 0x6c, 0xcd, 0x43, 0xdd, 0x05, 0x56, 0xc2, 0x65, 0x20, 0xcd, 0xc7, 0xe1, 0x2b, + 0x68, 0xb0, 0xe6, 0x38, 0xb6, 0x23, 0x86, 0x59, 0x12, 0x0a, 0x10, 0xc3, 0x2c, 0x81, 0x02, 0xdf, + 0x44, 0xc3, 0xcc, 0xe6, 0xb0, 0x1d, 0xcd, 0xcc, 0x56, 0x07, 0x5e, 0x22, 0xa5, 0xfa, 0xb5, 0x8c, + 0xe0, 0xb3, 0x31, 0x89, 0x1f, 0xc1, 0x53, 0x81, 0x17, 0x50, 0x66, 0x6a, 0x71, 0x9a, 0x1b, 0xc0, + 0x13, 0x7e, 0x51, 0x41, 0x55, 0x22, 0xe5, 0x28, 0x35, 0x3e, 0x87, 0xb2, 0x8b, 0x54, 0x7d, 0x72, + 0xa0, 0x1e, 0x85, 0xcd, 0x8d, 0x52, 0xb6, 0x4b, 0xf5, 0x07, 0xa0, 0x80, 0xa5, 0x8b, 0x19, 0xb6, + 0x62, 0x62, 0xd8, 0x70, 0x1d, 0x73, 0x0e, 0x65, 0xcb, 0xce, 0xca, 0x03, 0x6e, 0xb5, 0x00, 0xab, + 0x3b, 0x2b, 0x0f, 0x34, 0x80, 0xe2, 0x6b, 0x08, 0x69, 0xc4, 0xeb, 0x39, 0x16, 0x84, 0x2c, 0x0f, + 0xc1, 0xfe, 0x1b, 0x58, 0x43, 0x07, 0xa0, 0xcd, 0x96, 0x6d, 0x10, 0x4d, 0x20, 0x51, 0xff, 0x66, + 0x78, 0xb0, 0x53, 0x35, 0xdd, 0xfb, 0xc7, 0x5d, 0xb8, 0x8b, 0x2e, 0xd4, 0xf9, 0x16, 0x67, 0xbc, + 0x93, 0x4a, 0x68, 0x70, 0xba, 0xad, 0xaf, 0xb8, 0xd0, 0x87, 0x3c, 0x10, 0xe6, 0x1e, 0x05, 0x68, + 0x0c, 0x1e, 0xe9, 0xa7, 0xc2, 0xf6, 0xfd, 0xf4, 0xb3, 0x83, 0xc1, 0x68, 0x9b, 0x27, 0xde, 0x9a, + 0xed, 0x1c, 0x77, 0xd5, 0x4e, 0xbb, 0xea, 0x12, 0xca, 0x37, 0x9c, 0x96, 0xb0, 0x75, 0x01, 0xeb, + 0x01, 0xd7, 0x69, 0xb1, 0x6d, 0x0b, 0x1f, 0x49, 0xe9, 0xaa, 0xae, 0x07, 0x74, 0xf9, 0x90, 0xce, + 0x70, 0x3d, 0x4e, 0xc7, 0x91, 0x9c, 0x6e, 0xd1, 0x76, 0x3c, 0xde, 0x71, 0x01, 0x5d, 0xd7, 0x76, + 0x3c, 0xcd, 0x47, 0xe2, 0x67, 0x11, 0x5a, 0xaa, 0x2c, 0xbe, 0x45, 0x1c, 0x10, 0xd7, 0x50, 0x18, + 0xc8, 0xf4, 0x80, 0x81, 0x34, 0x01, 0x8d, 0x97, 0xd0, 0xd0, 0x42, 0x97, 0x38, 0x6c, 0x29, 0x44, + 0x3d, 0x80, 0xb1, 0xeb, 0x4f, 0x47, 0x44, 0xcb, 0xfb, 0x7d, 0x92, 0xff, 0x1f, 0x90, 0xb3, 0xf9, + 0xc5, 0xf6, 0x7f, 0x6a, 0x21, 0x23, 0x7c, 0x13, 0xe5, 0xca, 0xcc, 0xcf, 0x1b, 0x06, 0x96, 0x81, + 0xc8, 0x60, 0x09, 0xca, 0x50, 0x6c, 0xcd, 0xae, 0xc3, 0xdf, 0x1a, 0x27, 0x57, 0xaf, 0xa0, 0x62, + 0xb4, 0x1a, 0x3c, 0x8c, 0xf2, 0x95, 0x85, 0xf9, 0xf9, 0x5a, 0x65, 0xa9, 0x38, 0x80, 0x0b, 0x28, + 0xdb, 0xa8, 0xcd, 0x57, 0x8b, 0x29, 0xf5, 0x97, 0x04, 0x0b, 0x42, 0x55, 0xeb, 0xf8, 0x68, 0x78, + 0x5f, 0xe7, 0x2d, 0x45, 0x38, 0x0f, 0x85, 0x1d, 0x83, 0x8e, 0xe9, 0x79, 0xc4, 0xe0, 0xb3, 0x04, + 0x9c, 0x17, 0x7a, 0x0f, 0xb5, 0x18, 0x1e, 0x5f, 0x45, 0xa3, 0x00, 0xe3, 0x47, 0x84, 0x6c, 0x7d, + 0xcc, 0x0b, 0x38, 0x0f, 0x35, 0x19, 0xa9, 0x7e, 0x23, 0x3c, 0x1d, 0x9e, 0x25, 0xfa, 0x61, 0x3d, + 0x51, 0xfc, 0x98, 0xf4, 0x97, 0xfa, 0xbf, 0xb2, 0x2c, 0xdc, 0x9b, 0x5d, 0x59, 0x39, 0x08, 0x51, + 0x86, 0x5b, 0xba, 0x99, 0x5d, 0x6c, 0xe9, 0x5e, 0x45, 0xb9, 0x39, 0xe2, 0xad, 0xda, 0x06, 0x8f, + 0x9a, 0x82, 0x38, 0xab, 0x0e, 0x40, 0xc4, 0x38, 0x2b, 0x46, 0x83, 0xef, 0x23, 0xec, 0xdf, 0x47, + 0x29, 0x7b, 0x9e, 0x63, 0x2e, 0xf7, 0x3c, 0xe2, 0x6f, 0x21, 0x9f, 0x89, 0xad, 0x53, 0x1a, 0x70, + 0x7b, 0x0c, 0xe2, 0x69, 0x4f, 0xea, 0x01, 0x79, 0xc8, 0xf6, 0x4f, 0x36, 0x4a, 0x39, 0x46, 0xa3, + 0x25, 0xb0, 0xc5, 0x6f, 0xa2, 0xa1, 0xb9, 0xe9, 0x32, 0xbf, 0x9b, 0xc2, 0xa2, 0x22, 0x1e, 0x0b, + 0xa4, 0xe8, 0x23, 0x02, 0x91, 0x40, 0x6c, 0x7d, 0xe7, 0x9e, 0x1e, 0xbf, 0x9a, 0x12, 0x72, 0xa1, + 0xda, 0xc2, 0xa2, 0xf4, 0xf9, 0xee, 0x42, 0xa0, 0x2d, 0x72, 0xec, 0x7e, 0x54, 0x56, 0x0c, 0x1b, + 0xd1, 0x96, 0xc2, 0x3e, 0x46, 0xf7, 0x02, 0x9a, 0x28, 0x77, 0xbb, 0x6d, 0x93, 0x18, 0xa0, 0x2f, + 0x5a, 0xaf, 0x4d, 0x5c, 0x1e, 0xf2, 0x03, 0x81, 0xdf, 0x3a, 0x43, 0x36, 0xe1, 0x46, 0x54, 0xd3, + 0xa1, 0x68, 0x31, 0xf0, 0x3b, 0x56, 0x56, 0xfd, 0xcf, 0x29, 0x54, 0xf4, 0x23, 0x3f, 0xc5, 0xbb, + 0x58, 0x42, 0x58, 0x22, 0x6c, 0xc3, 0x44, 0x02, 0xe1, 0x00, 0x8f, 0x1b, 0x28, 0x5f, 0x7b, 0xd8, + 0x35, 0x1d, 0xe2, 0xee, 0x20, 0x8a, 0xef, 0x3c, 0x5f, 0x72, 0x4e, 0x10, 0x56, 0x24, 0xb6, 0xda, + 0x64, 0x60, 0xb8, 0xfe, 0xc0, 0x62, 0x5f, 0xa7, 0xd6, 0xf9, 0x62, 0x82, 0x5d, 0x7f, 0xe0, 0x31, + 0xb2, 0xd2, 0x5d, 0x94, 0x90, 0x14, 0x3f, 0x89, 0x32, 0x4b, 0x4b, 0xb3, 0x5c, 0x1b, 0xe1, 0x26, + 0x9e, 0xe7, 0x89, 0xf7, 0x3b, 0x28, 0x56, 0xfd, 0xe9, 0x34, 0x42, 0x54, 0xe9, 0x2b, 0x0e, 0xd1, + 0x0f, 0xe8, 0x30, 0x67, 0x0a, 0x15, 0x7c, 0x81, 0xf3, 0x01, 0x17, 0x84, 0x6d, 0x46, 0x3b, 0x22, + 0x5a, 0x77, 0x10, 0xa2, 0x5b, 0x42, 0x83, 0x9a, 0xdd, 0x26, 0xfe, 0x5e, 0x2a, 0x78, 0x87, 0x0e, + 0x05, 0x68, 0x0c, 0x8e, 0x9f, 0x45, 0x43, 0x5c, 0x6b, 0x6c, 0x69, 0x0f, 0xb5, 0xe5, 0x03, 0xb5, + 0x10, 0xaf, 0x7e, 0x3d, 0xc5, 0x84, 0xc2, 0x22, 0x83, 0x0f, 0xab, 0x50, 0xd4, 0x1f, 0x4d, 0x21, + 0x4c, 0x99, 0x2d, 0xea, 0xae, 0xbb, 0x66, 0x3b, 0x46, 0x65, 0x55, 0xb7, 0x56, 0x0e, 0xe4, 0x73, + 0xd4, 0xdf, 0xcf, 0xa3, 0x13, 0x52, 0xfc, 0xdb, 0x21, 0xd7, 0xb7, 0x2b, 0xb2, 0xbe, 0xc1, 0x6e, + 0x00, 0xe8, 0x9b, 0xb8, 0x1b, 0xc0, 0x34, 0xef, 0x29, 0xf1, 0x5c, 0x60, 0x50, 0x0a, 0x22, 0x17, + 0x0e, 0x04, 0x9e, 0x43, 0x23, 0xfc, 0x07, 0x9d, 0x4e, 0xfc, 0x0d, 0x5f, 0xd0, 0x63, 0x97, 0x02, + 0x34, 0x09, 0x8d, 0x3f, 0x83, 0x86, 0xa8, 0x72, 0xae, 0xc0, 0x35, 0xce, 0x7c, 0x78, 0xf9, 0xcf, + 0xf0, 0x81, 0xa2, 0x49, 0x08, 0x28, 0x85, 0x58, 0xe0, 0xc2, 0x0e, 0x62, 0x81, 0xdf, 0x43, 0xc3, + 0x65, 0xcb, 0xb2, 0x3d, 0xf0, 0x55, 0x5d, 0xbe, 0x43, 0xd7, 0x77, 0x72, 0x7a, 0x12, 0xee, 0x83, + 0x85, 0xf4, 0x89, 0xb3, 0x93, 0xc8, 0x10, 0x5f, 0xa7, 0x1d, 0xf1, 0xc0, 0x24, 0x6b, 0xc4, 0xe1, + 0xc1, 0x95, 0xb0, 0x4b, 0xe9, 0x70, 0x98, 0x78, 0x3b, 0xcc, 0xa7, 0xc3, 0x53, 0x68, 0x74, 0xd1, + 0xb1, 0xbb, 0xb6, 0x4b, 0x0c, 0x26, 0xa8, 0xe1, 0xf0, 0xfe, 0x67, 0x97, 0x23, 0x20, 0x16, 0x5d, + 0xba, 0x52, 0x29, 0x15, 0xc1, 0xf7, 0xd0, 0x49, 0xff, 0xbc, 0x24, 0x88, 0xfa, 0xaf, 0x57, 0x5d, + 0x65, 0x04, 0x62, 0xc6, 0x71, 0x54, 0x19, 0xea, 0xd5, 0xa9, 0x0b, 0xfe, 0xee, 0xa0, 0x7f, 0x6d, + 0xa0, 0x69, 0x1a, 0x62, 0x57, 0x27, 0xf2, 0xc3, 0xdf, 0x8f, 0x86, 0xe7, 0xf4, 0x87, 0xd5, 0x1e, + 0x5f, 0x82, 0x8c, 0xee, 0x7c, 0x13, 0xb2, 0xa3, 0x3f, 0x6c, 0x1a, 0xbc, 0x5c, 0x64, 0x5a, 0x10, + 0x59, 0xe2, 0x26, 0x3a, 0xbd, 0xe8, 0xd8, 0x1d, 0xdb, 0x23, 0x46, 0x24, 0x80, 0x7e, 0x3c, 0xbc, + 0xa0, 0xd2, 0xe5, 0x14, 0xcd, 0x2d, 0x22, 0xe9, 0xfb, 0xb0, 0x79, 0x23, 0x5b, 0x18, 0x2b, 0x8e, + 0x6b, 0x67, 0xe2, 0xd8, 0x25, 0xd3, 0x6b, 0x13, 0xf5, 0xab, 0x29, 0xba, 0xe8, 0xf6, 0xbf, 0x18, + 0x3f, 0x27, 0xdf, 0xb6, 0x4e, 0x85, 0x1b, 0x70, 0xfc, 0x06, 0x9d, 0x74, 0xbd, 0x9a, 0x2e, 0xf8, + 0xe1, 0x86, 0x64, 0x3a, 0x5c, 0xf0, 0xdf, 0x37, 0x2d, 0x43, 0x03, 0x28, 0xc5, 0x0a, 0xd7, 0xa1, + 0x00, 0x0b, 0x87, 0x4d, 0x6c, 0xa6, 0xad, 0xa2, 0xf1, 0x46, 0x6f, 0xd9, 0xaf, 0x5b, 0x08, 0x56, + 0x87, 0x8b, 0x9a, 0x6e, 0x6f, 0x39, 0xb8, 0xe1, 0x21, 0x5d, 0x83, 0x95, 0x8b, 0xa8, 0x5f, 0x49, + 0x45, 0xcc, 0xd2, 0x01, 0x5a, 0xfc, 0xa7, 0xe2, 0xe7, 0x87, 0x71, 0x3b, 0xa1, 0xfe, 0xb5, 0x34, + 0x1a, 0xa6, 0x4b, 0x61, 0x7e, 0xe5, 0xf4, 0x40, 0x5a, 0xfa, 0xc8, 0x4e, 0x73, 0x05, 0x4f, 0x3b, + 0xbb, 0x0b, 0x4f, 0xfb, 0x1c, 0xca, 0x0a, 0xa1, 0x73, 0x6c, 0xbf, 0xce, 0x30, 0x1c, 0x0d, 0xa0, + 0xea, 0x0f, 0xa4, 0x11, 0x7a, 0xfb, 0xf9, 0xe7, 0x8f, 0xb0, 0x80, 0xd4, 0xbf, 0x92, 0x42, 0xe3, + 0x7c, 0x03, 0x59, 0x48, 0x5c, 0x90, 0xf7, 0xb7, 0xfe, 0xc5, 0x71, 0xc9, 0x40, 0x9a, 0x8f, 0xa3, + 0x36, 0xb9, 0xf6, 0xd0, 0xf4, 0x60, 0x0f, 0x4d, 0xc8, 0x5c, 0x40, 0x38, 0x4c, 0xb4, 0xc9, 0x3e, + 0x1d, 0x7e, 0xce, 0xdf, 0x1a, 0xcf, 0x84, 0x13, 0x11, 0x2d, 0x50, 0x4b, 0xdc, 0x1e, 0x57, 0x7f, + 0x35, 0x8b, 0xb2, 0xb5, 0x87, 0xa4, 0x75, 0xc8, 0xbb, 0x46, 0x58, 0x70, 0x67, 0xf7, 0xb9, 0xe0, + 0xde, 0xcb, 0x59, 0xdf, 0x6b, 0x61, 0x7f, 0xe6, 0xe4, 0xea, 0x23, 0x3d, 0x1f, 0xad, 0xde, 0xef, + 0xe9, 0xc3, 0x77, 0x54, 0xfc, 0xcf, 0x32, 0x28, 0xd3, 0xa8, 0x2c, 0x1e, 0xeb, 0xcd, 0x81, 0xea, + 0xcd, 0xd6, 0x67, 0x29, 0x6a, 0xb0, 0x3d, 0x5a, 0x08, 0xa3, 0x97, 0x22, 0x3b, 0xa1, 0xdf, 0xcd, + 0xa0, 0xb1, 0xc6, 0xf4, 0xd2, 0xa2, 0xb0, 0x43, 0x71, 0x9b, 0x45, 0x98, 0x40, 0xac, 0x03, 0xeb, + 0xd2, 0x73, 0x31, 0x3f, 0xe9, 0x4e, 0xdd, 0xf2, 0x5e, 0xbc, 0xf1, 0x96, 0xde, 0xee, 0x11, 0x58, + 0xce, 0xb2, 0x78, 0x34, 0xd7, 0xfc, 0x80, 0xfc, 0x1c, 0xdc, 0xa6, 0xf3, 0x19, 0xe0, 0xcf, 0xa1, + 0xcc, 0x1d, 0x7e, 0x52, 0xd8, 0x8f, 0xcf, 0x0b, 0xd7, 0x19, 0x1f, 0x6a, 0x04, 0x33, 0x3d, 0xd3, + 0x00, 0x0e, 0xb4, 0x14, 0x2d, 0x7c, 0x8b, 0x4f, 0xc0, 0x3b, 0x2a, 0xbc, 0xe2, 0x17, 0xbe, 0x55, + 0xaf, 0xe2, 0x06, 0x1a, 0x5e, 0x24, 0x4e, 0xc7, 0x84, 0x8e, 0xf2, 0x6d, 0xf6, 0xd6, 0x4c, 0xe8, + 0xd2, 0x61, 0xb8, 0x1b, 0x16, 0x02, 0x66, 0x22, 0x17, 0xfc, 0x0e, 0x42, 0xcc, 0x47, 0xd9, 0x61, + 0x2e, 0x9c, 0xf3, 0xe0, 0x88, 0x33, 0x5f, 0xcf, 0x33, 0x45, 0x37, 0x0f, 0x1c, 0x48, 0x81, 0x19, + 0xbe, 0x8f, 0x8a, 0x73, 0xb6, 0x61, 0xde, 0x33, 0x59, 0x48, 0x10, 0x54, 0x90, 0xdb, 0xfe, 0x20, + 0x7e, 0x73, 0xa3, 0xf4, 0x78, 0x47, 0x28, 0x97, 0x54, 0x4d, 0x8c, 0xb1, 0xfa, 0x8f, 0x07, 0x51, + 0x96, 0x76, 0xfb, 0xf1, 0xf8, 0xdd, 0xcf, 0xf8, 0x2d, 0xa3, 0xe2, 0x5d, 0xdb, 0xb9, 0x6f, 0x5a, + 0x2b, 0x41, 0xb4, 0x26, 0x5f, 0x2c, 0xc2, 0x09, 0xf3, 0x1a, 0xc3, 0x35, 0x83, 0xc0, 0x4e, 0x2d, + 0x46, 0xbe, 0xcd, 0x08, 0x7e, 0x09, 0xa1, 0x25, 0xdd, 0x59, 0x21, 0x1e, 0xd0, 0x14, 0xc2, 0x1b, + 0xa0, 0x1e, 0x40, 0x21, 0x00, 0x54, 0xbc, 0x01, 0x1a, 0x12, 0xd3, 0x55, 0x31, 0x3b, 0xa3, 0x1b, + 0x82, 0x78, 0x50, 0x58, 0x15, 0xc3, 0x19, 0x9d, 0xe8, 0x04, 0xb0, 0xd3, 0xba, 0x45, 0x84, 0x84, + 0x7d, 0x4f, 0x14, 0x11, 0x84, 0x64, 0x1c, 0x78, 0x8a, 0x92, 0x84, 0x6d, 0x4f, 0x4d, 0xe0, 0x81, + 0x5f, 0x8c, 0x1c, 0xcc, 0x60, 0x89, 0x5b, 0xdf, 0x73, 0x99, 0xf0, 0x60, 0x7f, 0x64, 0xbb, 0x83, + 0x7d, 0xf5, 0xc7, 0xd3, 0x68, 0xa8, 0xd1, 0x5b, 0x76, 0xd7, 0x5d, 0x8f, 0x74, 0x0e, 0xb9, 0x1a, + 0xfb, 0xcb, 0xab, 0x6c, 0xe2, 0xf2, 0xea, 0x49, 0x5f, 0x28, 0xc2, 0x56, 0x59, 0xe0, 0xd2, 0xf9, + 0xe2, 0xf8, 0xbb, 0x69, 0x54, 0x64, 0x1b, 0xba, 0x55, 0xd3, 0x6d, 0x3d, 0x82, 0x20, 0xd3, 0x83, + 0x97, 0xca, 0xfe, 0x0e, 0x41, 0x76, 0x10, 0xba, 0xab, 0x7e, 0x39, 0x8d, 0x86, 0xcb, 0x3d, 0x6f, + 0xb5, 0xec, 0x81, 0x6e, 0x1d, 0xc9, 0xf5, 0xc9, 0x6f, 0xa5, 0xd0, 0x38, 0x6d, 0xc8, 0x92, 0x7d, + 0x9f, 0x58, 0x8f, 0x60, 0x27, 0x50, 0xdc, 0xd1, 0x4b, 0xef, 0x71, 0x47, 0xcf, 0x97, 0x65, 0x66, + 0x97, 0x3b, 0x9b, 0x5f, 0x4f, 0x21, 0xa4, 0xd9, 0x6d, 0xf2, 0x09, 0xf9, 0x8c, 0x47, 0xb0, 0x01, + 0x72, 0x90, 0x9f, 0xf1, 0xcd, 0x14, 0x3a, 0xc9, 0xf3, 0xa7, 0xf1, 0x85, 0xc8, 0x21, 0xef, 0x97, + 0xf8, 0x07, 0x1d, 0xf2, 0x1e, 0xfa, 0x85, 0x0c, 0x3a, 0x09, 0x69, 0x70, 0xa8, 0x2f, 0xf4, 0x09, + 0x30, 0x00, 0xb8, 0x25, 0x1f, 0x05, 0xcc, 0x25, 0x1c, 0x05, 0xfc, 0xc9, 0x46, 0xe9, 0xc5, 0x15, + 0xd3, 0x5b, 0xed, 0x2d, 0x4f, 0xb6, 0xec, 0xce, 0xb5, 0x15, 0x47, 0x7f, 0x60, 0xb2, 0x4d, 0x70, + 0xbd, 0x7d, 0x2d, 0xc8, 0xd3, 0xa9, 0x77, 0x4d, 0x9e, 0xc1, 0xb3, 0x01, 0x0e, 0x06, 0xe5, 0xea, + 0x1f, 0x22, 0xb8, 0x08, 0xbd, 0x61, 0x9b, 0x16, 0x3f, 0x60, 0x66, 0xb3, 0x4b, 0x83, 0x3a, 0x65, + 0xef, 0xdb, 0xa6, 0xd5, 0x8c, 0x9e, 0x32, 0xef, 0xb6, 0xbe, 0x90, 0xb5, 0x26, 0x54, 0xa3, 0xfe, + 0x9b, 0x14, 0x7a, 0x4c, 0xd6, 0xbd, 0x4f, 0x82, 0xc1, 0xfe, 0x57, 0x29, 0x74, 0xea, 0x16, 0x08, + 0x27, 0x38, 0xf0, 0xfb, 0xe4, 0x7d, 0xd1, 0x21, 0x37, 0x12, 0xbf, 0x93, 0x42, 0x27, 0x16, 0xea, + 0xd5, 0xca, 0x27, 0xa5, 0x87, 0x62, 0xdf, 0xf3, 0x09, 0xe8, 0x9f, 0x46, 0x79, 0x6e, 0xf6, 0x93, + 0xd4, 0x3f, 0xd2, 0xf7, 0x1c, 0xf2, 0xfe, 0xf9, 0x7a, 0x0e, 0x0d, 0xdf, 0xee, 0x2d, 0x13, 0x7e, + 0x6e, 0x74, 0xa4, 0x17, 0x65, 0xd7, 0xd1, 0x30, 0x17, 0x03, 0x6c, 0x68, 0x08, 0xf9, 0x16, 0xf8, + 0xfd, 0x39, 0x76, 0xa5, 0x55, 0x24, 0xa2, 0x8b, 0xe3, 0xb7, 0x88, 0xb3, 0x2c, 0x86, 0x22, 0x3f, + 0x20, 0xce, 0xb2, 0x06, 0x50, 0x3c, 0x1b, 0x46, 0x08, 0x95, 0x17, 0xeb, 0x90, 0x67, 0x93, 0xef, + 0xa5, 0x40, 0xe2, 0xd0, 0xe0, 0x8c, 0x58, 0xef, 0x9a, 0x2c, 0x43, 0xa7, 0x78, 0x0d, 0x22, 0x5a, + 0x12, 0xcf, 0xa3, 0x09, 0xf1, 0x4c, 0x92, 0x25, 0x99, 0x2c, 0x24, 0xb0, 0x4b, 0x4a, 0x2f, 0x19, + 0x2f, 0x8a, 0x5f, 0x43, 0x23, 0x3e, 0x10, 0x4e, 0x57, 0x87, 0xc2, 0x54, 0x6d, 0x01, 0xab, 0x48, + 0xf6, 0x59, 0xa9, 0x80, 0xc8, 0x00, 0x76, 0x08, 0x50, 0x02, 0x83, 0xc8, 0xf1, 0xb1, 0x54, 0x00, + 0x7f, 0x06, 0x18, 0x74, 0x6d, 0xcb, 0x25, 0x70, 0x8e, 0x34, 0x0c, 0x71, 0xba, 0x10, 0x81, 0xe4, + 0x70, 0x38, 0x8b, 0xc6, 0x96, 0xc8, 0xf0, 0x02, 0x42, 0xe1, 0x7e, 0x3f, 0xbf, 0xf3, 0xb2, 0xeb, + 0x93, 0x08, 0x81, 0x85, 0xb8, 0x53, 0x37, 0xba, 0x97, 0x9d, 0x3a, 0xf5, 0xf7, 0xe8, 0x5a, 0xbd, + 0xdb, 0x0d, 0x86, 0xc2, 0x73, 0x28, 0x57, 0xee, 0x76, 0xef, 0x68, 0x75, 0x31, 0x89, 0x99, 0xde, + 0xed, 0x36, 0x7b, 0x8e, 0x29, 0xc6, 0x4f, 0x30, 0x22, 0x5c, 0x41, 0xa3, 0xe5, 0x6e, 0x77, 0xb1, + 0xb7, 0xdc, 0x36, 0x5b, 0x42, 0xe2, 0x5c, 0x96, 0xf1, 0xba, 0xdb, 0x6d, 0x76, 0x01, 0x13, 0xcd, + 0x7c, 0x2c, 0x97, 0xc1, 0xef, 0xc1, 0x4d, 0x51, 0x9e, 0xb7, 0x35, 0x03, 0x11, 0x0a, 0x6a, 0x90, + 0xd5, 0x2e, 0x6c, 0xdb, 0x64, 0x40, 0xc4, 0x52, 0xb4, 0x9e, 0xf3, 0x53, 0xc4, 0xd1, 0x8a, 0x62, + 0xf9, 0x59, 0x43, 0x96, 0xf8, 0xd3, 0x28, 0x5f, 0xee, 0x76, 0x85, 0xad, 0x20, 0x38, 0xef, 0xa3, + 0xa5, 0x22, 0x7d, 0xec, 0x93, 0x9d, 0x7d, 0x05, 0x8d, 0xc9, 0x95, 0xed, 0x2a, 0x87, 0xeb, 0xf7, + 0x52, 0xf0, 0x41, 0x87, 0x3c, 0xfe, 0xe7, 0x05, 0x94, 0x29, 0x77, 0xbb, 0xdc, 0x1e, 0x9d, 0x48, + 0xe8, 0x8f, 0x68, 0xd4, 0x7c, 0xb9, 0xdb, 0xf5, 0x3f, 0x9d, 0x45, 0xe8, 0x1d, 0xad, 0x4f, 0xff, + 0x1a, 0xfb, 0xf4, 0x43, 0x1e, 0x50, 0xf7, 0xab, 0x19, 0x34, 0x5e, 0xee, 0x76, 0x8f, 0xf3, 0x12, + 0x3e, 0xaa, 0xd8, 0xfc, 0xe7, 0x11, 0x12, 0xcc, 0x63, 0x3e, 0x88, 0x54, 0x1d, 0x16, 0x4c, 0xa3, + 0x92, 0xd2, 0x04, 0x22, 0x5f, 0xfd, 0x0a, 0xbb, 0x52, 0xbf, 0x2f, 0x67, 0xc0, 0x14, 0x1f, 0xf6, + 0x7b, 0xc6, 0x1f, 0x97, 0x6e, 0xe3, 0x7d, 0x90, 0xdb, 0x55, 0x1f, 0xfc, 0xa6, 0x34, 0x78, 0x20, + 0xcf, 0xdd, 0x71, 0x2f, 0x0c, 0xee, 0xcb, 0x2d, 0x1e, 0x13, 0x85, 0xc9, 0x2f, 0x3f, 0xfa, 0x89, + 0x83, 0xf9, 0x55, 0xdc, 0x16, 0x45, 0x35, 0x4d, 0x43, 0x8b, 0xd0, 0xfa, 0x7d, 0x98, 0xdf, 0x55, + 0x1f, 0x6e, 0xa4, 0x21, 0xdc, 0x3e, 0xb8, 0xca, 0xbb, 0xff, 0xd5, 0xc5, 0x35, 0x84, 0xd8, 0xa1, + 0x40, 0x10, 0x71, 0x34, 0xca, 0x6e, 0xed, 0xb1, 0x7c, 0xc2, 0xfc, 0xd6, 0x5e, 0x48, 0x12, 0x1c, + 0x5e, 0x66, 0x12, 0x0f, 0x2f, 0xaf, 0xa0, 0x82, 0xa6, 0xaf, 0xbd, 0xd9, 0x23, 0xce, 0x3a, 0x77, + 0x67, 0x58, 0xa6, 0x0c, 0x7d, 0xad, 0xf9, 0x25, 0x0a, 0xd4, 0x02, 0x34, 0x56, 0x83, 0xfb, 0x1a, + 0xc2, 0x61, 0x0d, 0xdb, 0x49, 0x0b, 0x6e, 0x69, 0xec, 0x45, 0xd1, 0xf1, 0xcb, 0x28, 0x53, 0xbe, + 0xdb, 0xe0, 0x92, 0x0d, 0xba, 0xb6, 0x7c, 0xb7, 0xc1, 0xe5, 0xd5, 0xb7, 0xec, 0xdd, 0x86, 0xfa, + 0xe5, 0x34, 0xc2, 0x71, 0x4a, 0xfc, 0x22, 0x1a, 0x02, 0xe8, 0x0a, 0xd5, 0x19, 0xf1, 0xdd, 0x86, + 0x35, 0xb7, 0xe9, 0x00, 0x54, 0x72, 0xee, 0x7c, 0x52, 0xfc, 0x12, 0x3c, 0xd8, 0xc2, 0x93, 0x8f, + 0x4b, 0xef, 0x36, 0xac, 0xb9, 0xfe, 0x13, 0x27, 0x91, 0xf7, 0x5a, 0x38, 0x31, 0xf8, 0x85, 0x77, + 0x1b, 0x33, 0xb6, 0xeb, 0x71, 0x51, 0x33, 0xbf, 0x70, 0xcd, 0x85, 0xc7, 0x3e, 0x24, 0xbf, 0x90, + 0x91, 0x41, 0x16, 0xe7, 0xbb, 0x8d, 0xb2, 0xeb, 0xf6, 0x3a, 0xc4, 0xd0, 0xec, 0xb6, 0xef, 0x50, + 0xb2, 0x2c, 0xce, 0x6b, 0x6e, 0x53, 0x67, 0x28, 0x78, 0x29, 0x46, 0xca, 0xe2, 0x2c, 0x95, 0x52, + 0x7f, 0xa2, 0x80, 0x8a, 0x55, 0xdd, 0xd3, 0x97, 0x75, 0x97, 0x08, 0xab, 0xe9, 0x71, 0x1f, 0xe6, + 0x7f, 0x8e, 0x20, 0x07, 0x63, 0x39, 0xe1, 0x6b, 0xa2, 0x05, 0xf0, 0xe7, 0x42, 0xbe, 0xc1, 0x93, + 0x14, 0x62, 0xd2, 0xee, 0xe5, 0x66, 0x97, 0x83, 0xb5, 0x18, 0x21, 0xbe, 0x8a, 0x86, 0x7d, 0x18, + 0x5d, 0x00, 0x64, 0x42, 0x9d, 0x31, 0x96, 0xa9, 0xff, 0xaf, 0x89, 0x68, 0xfc, 0x12, 0x1a, 0xf1, + 0x7f, 0x0a, 0xae, 0x35, 0xcb, 0x40, 0xbe, 0x1c, 0x5b, 0x3d, 0x89, 0xa4, 0x62, 0x51, 0xb0, 0x6f, + 0x83, 0x52, 0xd1, 0x48, 0x92, 0x6f, 0x89, 0x14, 0x7f, 0x09, 0x8d, 0xf9, 0xbf, 0xf9, 0x82, 0x81, + 0xe5, 0x43, 0xbf, 0x1a, 0x3c, 0x44, 0x13, 0x11, 0xeb, 0xa4, 0x4c, 0xce, 0x96, 0x0e, 0x8f, 0xfb, + 0x79, 0xab, 0x8d, 0xe5, 0xf8, 0xca, 0x21, 0x52, 0x01, 0xae, 0xa3, 0x09, 0x1f, 0x12, 0x6a, 0x68, + 0x3e, 0x5c, 0x31, 0x1a, 0xcb, 0xcd, 0x44, 0x25, 0x8d, 0x97, 0xc2, 0x6d, 0x74, 0x4e, 0x02, 0x1a, + 0xee, 0xaa, 0x79, 0xcf, 0xe3, 0xcb, 0x3d, 0x9e, 0xb6, 0x8a, 0xe7, 0xf5, 0x0f, 0xb8, 0x32, 0x1a, + 0xff, 0x81, 0x0e, 0x39, 0xaf, 0xff, 0x96, 0xdc, 0x70, 0x03, 0x9d, 0xf4, 0xf1, 0xb7, 0x2a, 0x8b, + 0x8b, 0x8e, 0xfd, 0x3e, 0x69, 0x79, 0xf5, 0x2a, 0x5f, 0x2e, 0x43, 0x3a, 0x03, 0x63, 0xb9, 0xb9, + 0xd2, 0xea, 0x52, 0xa5, 0xa0, 0x38, 0x99, 0x79, 0x62, 0x61, 0xfc, 0x16, 0x3a, 0x25, 0xc0, 0xeb, + 0x96, 0xeb, 0xe9, 0x56, 0x8b, 0xd4, 0xab, 0x7c, 0x0d, 0x0d, 0xeb, 0x79, 0xce, 0xd5, 0xe4, 0x48, + 0x99, 0x6d, 0x72, 0x71, 0xfc, 0x0a, 0x1a, 0xf5, 0x11, 0xec, 0xac, 0x61, 0x18, 0xce, 0x1a, 0x60, + 0x48, 0x1a, 0xcb, 0xcd, 0xe8, 0xcd, 0x03, 0x99, 0x58, 0xd4, 0x28, 0x78, 0xb8, 0x6b, 0x44, 0xd2, + 0x28, 0x6f, 0xbd, 0x9b, 0xa8, 0x8c, 0xf0, 0x98, 0xd7, 0x6b, 0xa1, 0x46, 0x2d, 0x38, 0xe6, 0x8a, + 0xc9, 0x56, 0xd2, 0xfe, 0x65, 0x83, 0xe5, 0xa6, 0x0d, 0xc0, 0x24, 0xfd, 0x60, 0xe4, 0x67, 0xcb, + 0xe8, 0x44, 0x82, 0x8e, 0xed, 0x6a, 0xc5, 0xf8, 0xe3, 0xe9, 0xb0, 0x11, 0x87, 0x7c, 0xd9, 0x38, + 0x85, 0x0a, 0xfe, 0x97, 0x70, 0xe7, 0x41, 0xe9, 0x37, 0x34, 0xa3, 0x3c, 0x7c, 0xbc, 0x24, 0x8e, + 0x43, 0xbe, 0x94, 0x7c, 0x14, 0xe2, 0xf8, 0x30, 0x15, 0x8a, 0xe3, 0x90, 0x2f, 0x2f, 0x7f, 0x27, + 0x13, 0xda, 0xa4, 0xe3, 0x35, 0xe6, 0xa3, 0x72, 0x93, 0xc3, 0x10, 0x95, 0xdc, 0x2e, 0xee, 0x18, + 0x88, 0xaa, 0x99, 0xdf, 0xa3, 0x6a, 0xfe, 0x41, 0xbc, 0x3f, 0x99, 0xeb, 0x79, 0x28, 0xfb, 0xf3, + 0x11, 0x0c, 0x56, 0x7c, 0x3d, 0x9c, 0xc7, 0x98, 0x8f, 0x3e, 0x28, 0x64, 0x85, 0x58, 0xe6, 0x2e, + 0xba, 0x4c, 0x82, 0xbf, 0x80, 0xce, 0x48, 0x80, 0x45, 0xdd, 0xd1, 0x3b, 0xc4, 0x23, 0x0e, 0xf3, + 0x6e, 0xf8, 0x3d, 0x5f, 0xbf, 0x74, 0xb3, 0x1b, 0xa0, 0xc5, 0xf7, 0x77, 0xfa, 0x70, 0x10, 0x94, + 0x23, 0xbf, 0x8b, 0xf8, 0xa5, 0xff, 0x90, 0x46, 0xa3, 0x8b, 0xb6, 0xeb, 0xad, 0x38, 0xc4, 0x5d, + 0xd4, 0x1d, 0x97, 0x1c, 0xdd, 0x1e, 0xfd, 0x2c, 0x1a, 0x85, 0x4b, 0x75, 0x1d, 0x62, 0x79, 0xc2, + 0xcb, 0x4f, 0x2c, 0x53, 0x9d, 0x8f, 0xe0, 0x49, 0x49, 0x25, 0x42, 0x5c, 0x42, 0x83, 0x4c, 0x07, + 0x84, 0xab, 0x8e, 0x4c, 0x01, 0x18, 0x5c, 0xfd, 0xeb, 0x19, 0x34, 0xe2, 0x4b, 0x79, 0xca, 0x3c, + 0xac, 0x7b, 0x36, 0x07, 0x2b, 0xe4, 0x6b, 0x08, 0x2d, 0xda, 0x8e, 0xa7, 0xb7, 0x85, 0xe7, 0x4f, + 0x61, 0xb1, 0xd3, 0x05, 0x28, 0x2b, 0x23, 0x90, 0xe0, 0x49, 0x84, 0x84, 0x01, 0x96, 0x87, 0x01, + 0x36, 0xb6, 0xb9, 0x51, 0x42, 0xe1, 0xb8, 0xd2, 0x04, 0x0a, 0xf5, 0x37, 0xd2, 0x68, 0xdc, 0xef, + 0xa4, 0xda, 0x43, 0xd2, 0xea, 0x79, 0x47, 0x78, 0x30, 0xc8, 0xd2, 0x1e, 0xdc, 0x56, 0xda, 0xea, + 0x7f, 0x15, 0x0c, 0x49, 0xa5, 0x6d, 0x1f, 0x1b, 0x92, 0x3f, 0x0d, 0x1d, 0x57, 0x7f, 0x30, 0x83, + 0x4e, 0xfa, 0x52, 0x9f, 0xee, 0x59, 0xe0, 0x26, 0x54, 0xf4, 0x76, 0xfb, 0x28, 0xcf, 0xcb, 0xc3, + 0xbe, 0x20, 0x16, 0xf8, 0x2d, 0x75, 0x9e, 0x20, 0xfa, 0x1e, 0x07, 0x37, 0x6d, 0xd3, 0xd0, 0x44, + 0x22, 0xfc, 0x1a, 0x1a, 0xf1, 0x7f, 0x96, 0x9d, 0x15, 0x7f, 0x32, 0x86, 0x45, 0x7f, 0x50, 0x48, + 0x77, 0xa4, 0xd8, 0x7f, 0xa9, 0x80, 0xfa, 0x1f, 0x73, 0xe8, 0xec, 0x5d, 0xd3, 0x32, 0xec, 0x35, + 0xd7, 0xcf, 0x2f, 0x7e, 0xe8, 0x9d, 0xde, 0x83, 0xce, 0x2b, 0xfe, 0x26, 0x3a, 0x15, 0x15, 0xa9, + 0x13, 0x64, 0x7d, 0xe1, 0xbd, 0xb3, 0xc6, 0x08, 0x9a, 0x7e, 0xa6, 0x71, 0xbe, 0x73, 0xa6, 0x25, + 0x97, 0x8c, 0xa6, 0x2a, 0xcf, 0xef, 0x24, 0x55, 0xf9, 0x33, 0x28, 0x57, 0xb5, 0x3b, 0xba, 0xe9, + 0xdf, 0x02, 0x83, 0x51, 0x1c, 0xd4, 0x0b, 0x18, 0x8d, 0x53, 0x50, 0xfe, 0xbc, 0x62, 0xe8, 0xb2, + 0xa1, 0x90, 0xbf, 0x5f, 0xa0, 0xe7, 0x12, 0x47, 0x13, 0x89, 0xb0, 0x8d, 0x46, 0x79, 0x75, 0x7c, + 0x9f, 0x0b, 0xc1, 0x3e, 0xd7, 0x67, 0x7c, 0x19, 0xf5, 0x57, 0xab, 0x49, 0xa9, 0x1c, 0xdb, 0xf0, + 0x62, 0x19, 0xd4, 0xf9, 0xc7, 0xb0, 0x1d, 0x2f, 0x4d, 0xe6, 0x2f, 0x08, 0x01, 0x8c, 0xcc, 0x70, + 0x5c, 0x08, 0x60, 0x65, 0x44, 0x22, 0x5c, 0x43, 0x13, 0xe5, 0x76, 0xdb, 0x5e, 0x0b, 0xd2, 0xab, + 0x50, 0x95, 0x18, 0x81, 0x14, 0x93, 0xb0, 0x7d, 0xa2, 0x53, 0x24, 0x7c, 0x5c, 0xb3, 0xc5, 0xd1, + 0x5a, 0xbc, 0xc4, 0xd9, 0xd7, 0x11, 0x8e, 0xb7, 0x79, 0x57, 0x1b, 0x28, 0x3f, 0x91, 0x46, 0x38, + 0xb2, 0x0e, 0xa9, 0x1d, 0x61, 0x77, 0x4a, 0xfd, 0xe5, 0x14, 0x9a, 0x88, 0xa5, 0x3d, 0xc2, 0x2f, + 0x20, 0xc4, 0x20, 0x42, 0xee, 0x02, 0xb8, 0x0c, 0x14, 0xa6, 0x42, 0xe2, 0x53, 0x49, 0x48, 0x86, + 0xaf, 0xa1, 0x02, 0xfb, 0x15, 0xbc, 0xa3, 0x1d, 0x2d, 0xd2, 0xeb, 0x99, 0x86, 0x16, 0x10, 0x85, + 0xb5, 0xc0, 0x4e, 0x5c, 0x26, 0xb1, 0x88, 0xb7, 0xde, 0x0d, 0x6a, 0xa1, 0x64, 0xea, 0xd7, 0x52, + 0x68, 0x24, 0x68, 0x70, 0xd9, 0x38, 0xa8, 0xae, 0xcb, 0xf1, 0x0c, 0x52, 0x99, 0xed, 0x32, 0x48, + 0x45, 0x6c, 0x13, 0x7f, 0xc9, 0xfc, 0x9f, 0xa7, 0xd0, 0x78, 0x40, 0x7b, 0x80, 0x5b, 0x35, 0xfb, + 0xfe, 0x90, 0x9f, 0x4c, 0x21, 0x65, 0xca, 0x6c, 0xb7, 0x4d, 0x6b, 0xa5, 0x6e, 0xdd, 0xb3, 0x9d, + 0x0e, 0x0c, 0xd4, 0x83, 0xdb, 0x8b, 0x53, 0x7f, 0x24, 0x85, 0x26, 0x78, 0x83, 0x2a, 0xba, 0x63, + 0x1c, 0xdc, 0x26, 0x69, 0xb4, 0x25, 0x07, 0xd7, 0xcb, 0xea, 0xff, 0x4d, 0x21, 0x34, 0x6b, 0xb7, + 0xee, 0x1f, 0xf2, 0xdb, 0x05, 0x2f, 0xa1, 0x1c, 0xbb, 0x60, 0xc9, 0xad, 0xdd, 0xc4, 0x24, 0x0b, + 0xd9, 0xa7, 0x9f, 0xc6, 0x10, 0x53, 0x63, 0xfc, 0xbc, 0x26, 0xc7, 0x2e, 0x68, 0x6a, 0xbc, 0x00, + 0x5c, 0xe9, 0xa1, 0x64, 0x87, 0x3c, 0x96, 0xf5, 0x2f, 0xa6, 0xd0, 0x49, 0x8d, 0xb4, 0xec, 0x07, + 0xc4, 0x59, 0xaf, 0xd8, 0x06, 0xb9, 0x45, 0x2c, 0xe2, 0x1c, 0x94, 0x7e, 0xff, 0x23, 0xc8, 0x0e, + 0x17, 0x36, 0xe6, 0x8e, 0x4b, 0x8c, 0xc3, 0x93, 0xa3, 0x50, 0xfd, 0xfb, 0x79, 0xa4, 0x24, 0xfa, + 0x46, 0x87, 0xd6, 0x1f, 0xe8, 0xeb, 0xf0, 0x66, 0x1f, 0x95, 0xc3, 0x3b, 0xb8, 0x3b, 0x87, 0x37, + 0xb7, 0x5b, 0x87, 0x37, 0xbf, 0x13, 0x87, 0xb7, 0x13, 0x75, 0x78, 0x0b, 0xe0, 0xf0, 0xbe, 0xb0, + 0xa5, 0xc3, 0x5b, 0xb3, 0x8c, 0x3d, 0xba, 0xbb, 0x87, 0x36, 0x33, 0xff, 0x5e, 0xfc, 0xf4, 0xcb, + 0xd4, 0xb8, 0xb5, 0x6c, 0xc7, 0x20, 0x06, 0x77, 0xcf, 0x61, 0x3f, 0xda, 0xe1, 0x30, 0x2d, 0xc0, + 0xc6, 0x9e, 0x39, 0x18, 0xdd, 0xc9, 0x33, 0x07, 0x8f, 0xc0, 0x81, 0xff, 0x66, 0x0a, 0x4d, 0x54, + 0x88, 0xe3, 0xb1, 0x7c, 0x0a, 0x8f, 0xe2, 0x10, 0xb4, 0x8c, 0xc6, 0x05, 0x86, 0xe0, 0x8b, 0xa6, + 0xc3, 0x83, 0xdd, 0x16, 0x71, 0xbc, 0xe8, 0xb9, 0x70, 0x94, 0x9e, 0x56, 0xef, 0xa7, 0x1a, 0xe5, + 0x63, 0x37, 0xa8, 0xde, 0x87, 0x33, 0x41, 0x9a, 0xfc, 0x97, 0x16, 0xd0, 0xab, 0xbf, 0x94, 0x42, + 0x97, 0x34, 0x62, 0x91, 0x35, 0x7d, 0xb9, 0x4d, 0x04, 0xc6, 0xdc, 0xb6, 0xd3, 0x71, 0x6f, 0xba, + 0x1d, 0xdd, 0x6b, 0xad, 0xee, 0xeb, 0x2b, 0xa7, 0xd1, 0x88, 0x68, 0x81, 0x76, 0x61, 0x9d, 0xa4, + 0x72, 0xea, 0x77, 0xd2, 0x28, 0x3f, 0x65, 0x7b, 0xfb, 0x7e, 0xa6, 0x37, 0x34, 0xda, 0xe9, 0x5d, + 0xac, 0xe9, 0x3f, 0x0d, 0x95, 0x0b, 0xb9, 0xd0, 0xe0, 0xd8, 0x7f, 0xd9, 0x8e, 0x25, 0x71, 0xf3, + 0xc9, 0x76, 0x99, 0x8a, 0xf6, 0x45, 0x34, 0x04, 0xf7, 0xfa, 0x84, 0x5d, 0x37, 0x08, 0xaa, 0xf1, + 0x28, 0x30, 0x5a, 0x47, 0x48, 0x8a, 0xbf, 0x20, 0xa5, 0x70, 0xc8, 0xed, 0x3f, 0x75, 0xad, 0xc0, + 0x4e, 0xfd, 0xc5, 0x2c, 0x1a, 0xf1, 0x03, 0x20, 0x0e, 0x48, 0xee, 0xcf, 0xa1, 0xdc, 0x8c, 0x2d, + 0x64, 0x63, 0x83, 0x80, 0x89, 0x55, 0xdb, 0x8d, 0x44, 0x82, 0x70, 0x22, 0xfc, 0x02, 0x2a, 0xcc, + 0xdb, 0x86, 0x18, 0xee, 0x03, 0x63, 0xc9, 0xb2, 0x8d, 0xd8, 0x75, 0x89, 0x80, 0x10, 0x5f, 0x42, + 0x59, 0x88, 0x94, 0x12, 0x36, 0x3b, 0x23, 0xd1, 0x51, 0x80, 0x17, 0x7a, 0x34, 0xb7, 0xdb, 0x1e, + 0xcd, 0xef, 0xb5, 0x47, 0x0b, 0x8f, 0xb4, 0x47, 0xf1, 0x3b, 0x68, 0x04, 0x6a, 0xf2, 0x13, 0xe4, + 0x6e, 0x3f, 0xad, 0x3c, 0xc6, 0x2d, 0xff, 0x28, 0x6b, 0x37, 0x4f, 0x93, 0x0b, 0x06, 0x5f, 0x62, + 0xa5, 0xfe, 0x41, 0x0a, 0xe5, 0xef, 0x58, 0xf7, 0x2d, 0x7b, 0x6d, 0x7f, 0x7a, 0xf2, 0x02, 0x1a, + 0xe6, 0x6c, 0x04, 0x8b, 0x08, 0xf7, 0x56, 0x7a, 0x0c, 0xdc, 0x04, 0x4e, 0x9a, 0x48, 0x85, 0x5f, + 0x09, 0x0a, 0x41, 0x08, 0x63, 0x26, 0xcc, 0x42, 0xe8, 0x17, 0x6a, 0xc9, 0x89, 0xd3, 0x44, 0x72, + 0x7c, 0x8e, 0x3f, 0xf2, 0x2c, 0xa4, 0xe1, 0xa0, 0x4d, 0x61, 0x6f, 0x3c, 0xab, 0xbf, 0x9d, 0x46, + 0x63, 0x91, 0x6d, 0x8a, 0x67, 0xd0, 0x10, 0xdf, 0x26, 0x30, 0xfd, 0x4c, 0x6e, 0x10, 0xe2, 0x18, + 0x00, 0xb5, 0x02, 0xfb, 0xb3, 0x6e, 0xe0, 0xcf, 0xa3, 0xbc, 0xed, 0x82, 0x21, 0x87, 0x6f, 0x19, + 0x0b, 0x15, 0x7f, 0xa1, 0x41, 0xdb, 0xce, 0x54, 0x9a, 0x93, 0x88, 0x7a, 0x64, 0xbb, 0xf0, 0x69, + 0x37, 0xd0, 0x90, 0xee, 0xba, 0xc4, 0x6b, 0x7a, 0xfa, 0x8a, 0x98, 0xdc, 0x2d, 0x00, 0x8a, 0x3a, + 0x0d, 0xc0, 0x25, 0x7d, 0x05, 0xbf, 0x8e, 0x46, 0x5b, 0x0e, 0x01, 0x53, 0xaf, 0xb7, 0x69, 0x2b, + 0x05, 0x57, 0x4c, 0x42, 0x88, 0x3b, 0xc3, 0x21, 0xa2, 0x6e, 0xe0, 0xb7, 0xd0, 0x28, 0xff, 0x1c, + 0x16, 0x5f, 0x04, 0xc3, 0x63, 0x2c, 0x34, 0xdc, 0x4c, 0x24, 0x2c, 0xc2, 0x88, 0x87, 0x99, 0x89, + 0xe4, 0x22, 0x5f, 0x43, 0x20, 0x55, 0xbf, 0x91, 0xa2, 0xee, 0x01, 0x05, 0x04, 0xef, 0xc5, 0x75, + 0x76, 0xa9, 0x2b, 0x9d, 0x30, 0x25, 0x74, 0xce, 0xdd, 0xc2, 0xa6, 0x68, 0x1c, 0x8b, 0x27, 0x51, + 0xce, 0x10, 0x77, 0x1b, 0x4e, 0xcb, 0x1f, 0xe1, 0xd7, 0xa3, 0x71, 0x2a, 0x7c, 0x19, 0x65, 0xa9, + 0xfb, 0xc7, 0x97, 0x7b, 0x89, 0x73, 0x95, 0x06, 0x14, 0xea, 0x0f, 0xa4, 0xd1, 0x88, 0xf0, 0x35, + 0xd7, 0xf7, 0xf5, 0x39, 0x2f, 0xef, 0xac, 0x99, 0x3c, 0xe2, 0x11, 0x60, 0x41, 0x93, 0x6f, 0x04, + 0xa2, 0xd8, 0xd1, 0x56, 0x35, 0x17, 0xcc, 0x8b, 0xfc, 0x43, 0x73, 0x3b, 0x5f, 0x32, 0x50, 0xfa, + 0x37, 0xb2, 0x85, 0x74, 0x31, 0xf3, 0x46, 0xb6, 0x90, 0x2d, 0x0e, 0xaa, 0x7f, 0x34, 0x87, 0x06, + 0x17, 0x2c, 0xb2, 0x70, 0x0f, 0x3f, 0x2f, 0x24, 0x8d, 0xe7, 0x1f, 0x3f, 0x21, 0xb2, 0x04, 0xc4, + 0xcc, 0x80, 0x26, 0xa4, 0x96, 0xbf, 0x21, 0x66, 0xbe, 0xe6, 0xbd, 0x88, 0xc5, 0x32, 0x0c, 0x33, + 0x33, 0xa0, 0x89, 0x19, 0xb2, 0x6f, 0x88, 0xa9, 0xa1, 0xb9, 0xb0, 0xa4, 0x52, 0x0c, 0xe3, 0x97, + 0xe2, 0x8b, 0xef, 0xd9, 0xa4, 0x4c, 0xcc, 0xd1, 0xf3, 0x81, 0x38, 0xc5, 0xcc, 0x80, 0x96, 0x9c, + 0xc1, 0x79, 0x44, 0xdc, 0xd3, 0xe6, 0x62, 0x3f, 0x19, 0x59, 0x3a, 0x01, 0x6e, 0x66, 0x40, 0x93, + 0x68, 0xf1, 0xcd, 0xe0, 0x69, 0x09, 0x3a, 0xad, 0x46, 0x43, 0x9b, 0x05, 0xd4, 0xcc, 0x80, 0x26, + 0x52, 0x0a, 0x95, 0xc2, 0x13, 0xf8, 0x3c, 0x60, 0x22, 0x5a, 0x29, 0xe0, 0x84, 0x4a, 0xd9, 0x73, + 0xf9, 0xaf, 0x46, 0x1e, 0xf8, 0xe4, 0x73, 0xcb, 0xa9, 0x48, 0x61, 0x86, 0x9c, 0x19, 0xd0, 0x22, + 0xcf, 0x81, 0x5e, 0xf6, 0x1f, 0x15, 0xe4, 0x93, 0xc6, 0x98, 0xb0, 0xf9, 0x60, 0x7e, 0x40, 0xa5, + 0xe4, 0x3f, 0x3a, 0x78, 0x43, 0x7c, 0x4c, 0x8e, 0x2f, 0x2e, 0x70, 0xa4, 0x96, 0x9a, 0x65, 0xd0, + 0xde, 0x11, 0x56, 0xbe, 0xaf, 0x47, 0x9f, 0x5d, 0xe2, 0x8f, 0x79, 0x9d, 0x8e, 0x94, 0xe4, 0xd8, + 0x99, 0x01, 0x2d, 0xfa, 0x4c, 0xd3, 0x4d, 0xe9, 0xc9, 0x1f, 0x7e, 0x79, 0x31, 0x2a, 0x55, 0x8a, + 0x12, 0xa4, 0x0a, 0x8f, 0x03, 0xbd, 0x1e, 0x7d, 0x83, 0x86, 0x5f, 0x55, 0x3c, 0x9d, 0xfc, 0x52, + 0x89, 0x50, 0xb5, 0xff, 0x66, 0xcd, 0x4d, 0xe9, 0xad, 0x10, 0x78, 0x8e, 0x2b, 0xa1, 0x6a, 0xdd, + 0xd3, 0xc5, 0xaa, 0xd9, 0x90, 0x97, 0x5e, 0xad, 0x80, 0x94, 0xc1, 0xf1, 0x0e, 0x05, 0x9c, 0xd0, + 0xa1, 0xec, 0x85, 0x8b, 0x9b, 0x52, 0x16, 0x5a, 0xa5, 0x28, 0x57, 0x2a, 0xa0, 0x68, 0xa5, 0x62, + 0xbe, 0xda, 0x1b, 0x62, 0x72, 0x56, 0x65, 0x42, 0xee, 0xa0, 0x10, 0x43, 0x3b, 0x48, 0x48, 0xe2, + 0x5a, 0x82, 0xc4, 0x8f, 0x0a, 0x06, 0xf2, 0xe1, 0xa0, 0x85, 0x95, 0xc5, 0x99, 0x01, 0x0d, 0x52, + 0x42, 0xaa, 0x2c, 0xa5, 0xa8, 0x72, 0x02, 0x28, 0x46, 0x82, 0x37, 0x59, 0x1e, 0x92, 0xd6, 0xcc, + 0x80, 0xc6, 0xd2, 0x8d, 0x3e, 0x2f, 0x24, 0xef, 0x52, 0x4e, 0xca, 0x26, 0x22, 0x40, 0x50, 0x13, + 0x11, 0xa6, 0xf8, 0x9a, 0x8e, 0x27, 0xb8, 0x52, 0x4e, 0xc9, 0xfb, 0x5f, 0x51, 0xfc, 0xcc, 0x80, + 0x16, 0x4f, 0x8a, 0x75, 0x53, 0xca, 0xf9, 0xa4, 0x9c, 0x8e, 0xdc, 0x27, 0x08, 0x51, 0x54, 0x5c, + 0x62, 0x76, 0xa8, 0x85, 0xc4, 0xb4, 0xe9, 0xca, 0x19, 0x60, 0xf0, 0x78, 0xc0, 0x20, 0x4e, 0x32, + 0x33, 0xa0, 0x25, 0x26, 0x5c, 0xaf, 0xc4, 0x32, 0x2f, 0x29, 0x8a, 0xbc, 0xf1, 0x12, 0x41, 0xcf, + 0x0c, 0x68, 0xb1, 0x5c, 0x4d, 0x37, 0xc4, 0x94, 0x47, 0xca, 0x63, 0x72, 0x27, 0x86, 0x18, 0xda, + 0x89, 0x42, 0x6a, 0xa4, 0x1b, 0x62, 0x86, 0x21, 0xe5, 0x6c, 0xbc, 0x54, 0x68, 0x39, 0x85, 0x4c, + 0x44, 0x5a, 0x72, 0x42, 0x1f, 0xe5, 0x71, 0x9e, 0x5b, 0x91, 0x97, 0x4f, 0xa2, 0x99, 0x19, 0xd0, + 0x92, 0x93, 0x01, 0x69, 0xc9, 0x39, 0x75, 0x94, 0x73, 0x5b, 0xf1, 0x0c, 0x5a, 0x97, 0x9c, 0x8f, + 0x47, 0xdf, 0x22, 0x57, 0x8a, 0x72, 0x5e, 0xbe, 0xcc, 0xdc, 0x97, 0x70, 0x66, 0x40, 0xdb, 0x22, + 0xe3, 0xca, 0x9d, 0x3e, 0x89, 0x4b, 0x94, 0x0b, 0x72, 0x6a, 0xd5, 0x44, 0xa2, 0x99, 0x01, 0xad, + 0x4f, 0xda, 0x93, 0x3b, 0x7d, 0xb2, 0x87, 0x28, 0xa5, 0x2d, 0xd9, 0x06, 0xf2, 0xe8, 0x93, 0x7b, + 0x64, 0x21, 0x31, 0x85, 0x87, 0x72, 0x51, 0x56, 0xdd, 0x04, 0x12, 0xaa, 0xba, 0x49, 0xc9, 0x3f, + 0x16, 0x12, 0x73, 0x68, 0x28, 0x4f, 0x6c, 0xc1, 0x30, 0x68, 0x63, 0x62, 0xf6, 0x8d, 0x85, 0xc4, + 0x24, 0x16, 0x8a, 0x2a, 0x33, 0x4c, 0x20, 0xa1, 0x0c, 0x93, 0xd2, 0x5f, 0x2c, 0x24, 0x66, 0x91, + 0x50, 0x9e, 0xdc, 0x82, 0x61, 0xd8, 0xc2, 0xa4, 0xfc, 0x13, 0x37, 0xa5, 0x34, 0x0e, 0xca, 0x53, + 0xb2, 0xdd, 0x10, 0x50, 0xd4, 0x6e, 0x88, 0x09, 0x1f, 0x2a, 0xb1, 0x8b, 0xaa, 0xca, 0xa7, 0xe4, + 0x61, 0x1e, 0x41, 0xd3, 0x61, 0x1e, 0xbd, 0xda, 0x5a, 0x89, 0x5d, 0xd8, 0x53, 0x2e, 0xf5, 0x63, + 0x02, 0x68, 0x99, 0x09, 0xbb, 0xe2, 0x57, 0x4f, 0xb8, 0x31, 0xa6, 0x3c, 0x2d, 0x1f, 0xbc, 0xc5, + 0x08, 0x66, 0x06, 0xb4, 0x84, 0x7b, 0x66, 0x5a, 0x72, 0x78, 0xb4, 0x72, 0x59, 0x1e, 0xb6, 0x49, + 0x34, 0x74, 0xd8, 0x26, 0x86, 0x56, 0xcf, 0x26, 0x1d, 0x8d, 0x2b, 0x57, 0x64, 0xc7, 0x2c, 0x4e, + 0x41, 0x1d, 0xb3, 0x84, 0x23, 0x75, 0x2d, 0x39, 0xe0, 0x57, 0x79, 0x66, 0xcb, 0x16, 0x02, 0x4d, + 0x42, 0x0b, 0x59, 0xfc, 0x6b, 0xe8, 0x3b, 0xdd, 0xe9, 0xc2, 0x5b, 0xcd, 0xcf, 0x26, 0xfa, 0x4e, + 0x0c, 0x29, 0xf8, 0x4e, 0x0c, 0x40, 0x67, 0x79, 0xf1, 0xe8, 0x58, 0xb9, 0x2a, 0xcf, 0xf2, 0x22, + 0x8e, 0xce, 0xf2, 0xd2, 0x31, 0x73, 0x25, 0x76, 0x60, 0xab, 0x3c, 0x27, 0x2b, 0x40, 0x04, 0x4d, + 0x15, 0x20, 0x7a, 0xc4, 0xfb, 0x5e, 0xff, 0xc3, 0x52, 0x65, 0x12, 0xb8, 0x5d, 0x0c, 0x5e, 0x9d, + 0xeb, 0x43, 0x37, 0x33, 0xa0, 0xf5, 0x3f, 0x70, 0xad, 0x27, 0x9c, 0x7d, 0x2a, 0xd7, 0x64, 0x05, + 0x8b, 0x11, 0x50, 0x05, 0x8b, 0x9f, 0x98, 0xd6, 0x13, 0x0e, 0x2f, 0x95, 0x4f, 0xf7, 0x65, 0x15, + 0x7c, 0x73, 0xc2, 0x91, 0xe7, 0x0d, 0xf1, 0xf4, 0x51, 0x79, 0x5e, 0x9e, 0xec, 0x42, 0x0c, 0x9d, + 0xec, 0x84, 0x53, 0xca, 0x1b, 0xe2, 0x89, 0x9d, 0x72, 0x3d, 0x5e, 0x2a, 0x9c, 0x22, 0x85, 0x93, + 0x3d, 0x2d, 0xf9, 0x80, 0x4c, 0x79, 0x41, 0xd6, 0xba, 0x24, 0x1a, 0xaa, 0x75, 0x89, 0x87, 0x6b, + 0xd3, 0xf1, 0x73, 0x2e, 0xe5, 0x46, 0xf4, 0xe4, 0x4f, 0xc6, 0x53, 0xcf, 0x27, 0x76, 0x36, 0xf6, + 0x7a, 0xf4, 0xee, 0x8e, 0xf2, 0x99, 0xc8, 0xfa, 0x52, 0xc2, 0x52, 0xff, 0x36, 0x72, 0xd7, 0xe7, + 0xf5, 0xe8, 0x75, 0x17, 0xe5, 0xc5, 0x64, 0x0e, 0x81, 0xae, 0x44, 0xaf, 0xc7, 0xbc, 0x1e, 0xbd, + 0x21, 0xa2, 0xdc, 0x4c, 0xe6, 0x10, 0x48, 0x37, 0x7a, 0xa3, 0xe4, 0x79, 0x21, 0x67, 0x85, 0xf2, + 0x59, 0xd9, 0x75, 0x0c, 0x10, 0xd4, 0x75, 0x0c, 0x33, 0x5b, 0x3c, 0x2f, 0xe4, 0x7a, 0x50, 0x5e, + 0x8a, 0x15, 0x09, 0x1a, 0x2b, 0x64, 0x84, 0x78, 0x5e, 0xc8, 0x91, 0xa0, 0xbc, 0x1c, 0x2b, 0x12, + 0xb4, 0x4e, 0xc8, 0xa4, 0x60, 0x6c, 0x15, 0x42, 0xa7, 0x7c, 0x0e, 0x78, 0xa8, 0xdb, 0x47, 0x45, + 0xcd, 0x0c, 0x68, 0x5b, 0x85, 0xe2, 0xbd, 0xd7, 0xff, 0xd4, 0x50, 0x79, 0x45, 0x1e, 0xc2, 0xfd, + 0xe8, 0xe8, 0x10, 0xee, 0x7b, 0xf2, 0xf8, 0x6a, 0x24, 0x9c, 0x5e, 0x79, 0x55, 0x36, 0x71, 0x12, + 0x92, 0x9a, 0xb8, 0x68, 0xf0, 0xbd, 0x14, 0x27, 0xae, 0x7c, 0x5e, 0x36, 0x71, 0x22, 0x8e, 0x9a, + 0x38, 0x29, 0xa6, 0xbc, 0x12, 0x0b, 0x5f, 0x56, 0x5e, 0x93, 0x4d, 0x5c, 0x04, 0x4d, 0x4d, 0x5c, + 0x34, 0xe0, 0xf9, 0xd5, 0x48, 0x14, 0xaf, 0xf2, 0x7a, 0x72, 0xfb, 0x01, 0x29, 0xb6, 0x9f, 0xc5, + 0xfc, 0x6a, 0xc9, 0xe1, 0xa8, 0x4a, 0x59, 0x1e, 0xbf, 0x49, 0x34, 0x74, 0xfc, 0x26, 0x86, 0xb2, + 0x2e, 0x24, 0x3e, 0x6c, 0xa2, 0x4c, 0x6d, 0xb1, 0x70, 0x08, 0x5d, 0x91, 0xa4, 0x27, 0x51, 0xc4, + 0x35, 0x32, 0x5b, 0x08, 0x55, 0xfa, 0xac, 0x91, 0xfd, 0x65, 0x50, 0x84, 0x9e, 0x5a, 0xd7, 0xd8, + 0x21, 0x96, 0x52, 0x95, 0xad, 0x6b, 0x8c, 0x80, 0x5a, 0xd7, 0xf8, 0xd1, 0xd7, 0x34, 0x2a, 0x72, + 0x2d, 0x0a, 0xdf, 0xa1, 0xae, 0x45, 0xa2, 0xc1, 0x22, 0x78, 0x6a, 0x9d, 0xa2, 0x30, 0x98, 0xaf, + 0x19, 0xac, 0xd2, 0x36, 0xbb, 0xcb, 0xb6, 0xee, 0x18, 0x0d, 0x62, 0x19, 0xca, 0x74, 0x64, 0xbe, + 0x4e, 0xa0, 0x81, 0xf9, 0x3a, 0x01, 0x0e, 0xf7, 0x55, 0x22, 0x70, 0xfe, 0x52, 0xa4, 0x72, 0x0b, + 0xd8, 0x96, 0xfa, 0xb1, 0xe5, 0x64, 0x33, 0x03, 0x5a, 0x3f, 0x0e, 0xd4, 0x57, 0x9f, 0x5b, 0x6f, + 0xbc, 0x39, 0x1b, 0x44, 0x40, 0x2f, 0x3a, 0xa4, 0xab, 0x3b, 0x44, 0x99, 0x91, 0x7d, 0xf5, 0x44, + 0x22, 0xea, 0xab, 0x27, 0x22, 0xe2, 0x6c, 0xfd, 0xb1, 0x50, 0xdf, 0x8a, 0x6d, 0x38, 0x22, 0x92, + 0x4b, 0x53, 0xeb, 0x24, 0x23, 0xa8, 0x80, 0x66, 0x6d, 0x6b, 0x05, 0x76, 0x2a, 0xde, 0x90, 0xad, + 0x53, 0x7f, 0x4a, 0x6a, 0x9d, 0xfa, 0x63, 0xa9, 0xaa, 0xcb, 0x58, 0x36, 0x06, 0x6f, 0xcb, 0xaa, + 0x9e, 0x40, 0x42, 0x55, 0x3d, 0x01, 0x1c, 0x67, 0xa8, 0x11, 0x97, 0x78, 0xca, 0xec, 0x56, 0x0c, + 0x81, 0x24, 0xce, 0x10, 0xc0, 0x71, 0x86, 0xd3, 0xc4, 0x6b, 0xad, 0x2a, 0x73, 0x5b, 0x31, 0x04, + 0x92, 0x38, 0x43, 0x00, 0xd3, 0xc5, 0xa6, 0x0c, 0x9e, 0xea, 0xb5, 0xef, 0xfb, 0x7d, 0x36, 0x2f, + 0x2f, 0x36, 0xfb, 0x12, 0xd2, 0xc5, 0x66, 0x5f, 0x24, 0xfe, 0xd1, 0x1d, 0x1f, 0xd1, 0x2a, 0x0b, + 0x50, 0xe1, 0x64, 0xe8, 0x17, 0xec, 0xa4, 0xd4, 0xcc, 0x80, 0xb6, 0xd3, 0x23, 0xe0, 0x67, 0x83, + 0xd3, 0x1d, 0x65, 0x11, 0xaa, 0x1a, 0x0f, 0xf6, 0x2a, 0x18, 0x78, 0x66, 0x40, 0x0b, 0xce, 0x7f, + 0x6e, 0xa2, 0x61, 0xf8, 0xa8, 0xba, 0x65, 0x7a, 0xd5, 0x29, 0xe5, 0x4d, 0x79, 0xc9, 0x24, 0xa0, + 0xe8, 0x92, 0x49, 0xf8, 0x49, 0x8d, 0x38, 0xfc, 0x64, 0x26, 0xa6, 0x3a, 0xa5, 0x68, 0xb2, 0x11, + 0x97, 0x90, 0xd4, 0x88, 0x4b, 0x80, 0xa0, 0xde, 0xaa, 0x63, 0x77, 0xab, 0x53, 0x4a, 0x23, 0xa1, + 0x5e, 0x86, 0x0a, 0xea, 0x65, 0x3f, 0x83, 0x7a, 0x1b, 0xab, 0x3d, 0xaf, 0x4a, 0xbf, 0x71, 0x29, + 0xa1, 0x5e, 0x1f, 0x19, 0xd4, 0xeb, 0x03, 0xa8, 0x29, 0x04, 0xc0, 0xa2, 0x63, 0x53, 0xa3, 0x7d, + 0xdb, 0x6c, 0xb7, 0x95, 0x3b, 0xb2, 0x29, 0x8c, 0xe2, 0xa9, 0x29, 0x8c, 0xc2, 0xa8, 0xeb, 0xc9, + 0x5a, 0x45, 0x96, 0x7b, 0x2b, 0xca, 0x5b, 0xb2, 0xeb, 0x19, 0x62, 0xa8, 0xeb, 0x19, 0xfe, 0x82, + 0xd5, 0x05, 0xfd, 0xa5, 0x91, 0x7b, 0x0e, 0x71, 0x57, 0x95, 0xbb, 0x91, 0xd5, 0x85, 0x80, 0x83, + 0xd5, 0x85, 0xf0, 0x1b, 0xaf, 0xa0, 0xc7, 0xa5, 0x89, 0xc6, 0x8f, 0x14, 0x6b, 0x10, 0xdd, 0x69, + 0xad, 0x2a, 0x6f, 0x03, 0xab, 0x27, 0x13, 0xa7, 0x2a, 0x99, 0x74, 0x66, 0x40, 0xdb, 0x8a, 0x13, + 0x2c, 0xcb, 0xdf, 0x9c, 0x65, 0x17, 0x4b, 0xb5, 0xc5, 0x8a, 0xbf, 0x08, 0x7d, 0x27, 0xb2, 0x2c, + 0x8f, 0x93, 0xc0, 0xb2, 0x3c, 0x0e, 0xc6, 0x5d, 0x74, 0x21, 0xb2, 0x54, 0x9b, 0xd3, 0xdb, 0x74, + 0x5d, 0x42, 0x8c, 0x45, 0xbd, 0x75, 0x9f, 0x78, 0xca, 0xbb, 0xc0, 0xfb, 0x52, 0x9f, 0x05, 0x5f, + 0x84, 0x7a, 0x66, 0x40, 0xdb, 0x86, 0x1f, 0x56, 0xd9, 0xd3, 0x19, 0xca, 0x17, 0xe4, 0xfd, 0x4d, + 0x0a, 0x9b, 0x19, 0xd0, 0xd8, 0xb3, 0x1a, 0xef, 0x21, 0xe5, 0x4e, 0x77, 0xc5, 0xd1, 0x0d, 0xc2, + 0x1c, 0x2d, 0xf0, 0xdd, 0xb8, 0x03, 0xfa, 0x7d, 0xb2, 0x97, 0xd6, 0x8f, 0x8e, 0x7a, 0x69, 0xfd, + 0x70, 0x54, 0x51, 0xa5, 0x1c, 0x4a, 0xca, 0x17, 0x65, 0x45, 0x95, 0x90, 0x54, 0x51, 0xe5, 0x8c, + 0x4b, 0x6f, 0xa3, 0xd3, 0xc1, 0x7a, 0x9e, 0xcf, 0xbf, 0xac, 0xd3, 0x94, 0xf7, 0x80, 0xcf, 0x85, + 0xd8, 0x61, 0x80, 0x44, 0x35, 0x33, 0xa0, 0xf5, 0x29, 0x4f, 0x67, 0xdc, 0x58, 0x7a, 0x40, 0xee, + 0x5e, 0x7c, 0xbf, 0x3c, 0xe3, 0xf6, 0x21, 0xa3, 0x33, 0x6e, 0x1f, 0x54, 0x22, 0x73, 0x2e, 0x54, + 0x7d, 0x1b, 0xe6, 0x81, 0x4c, 0xfb, 0x71, 0x48, 0x64, 0xce, 0x3d, 0xb5, 0xe5, 0x6d, 0x98, 0x07, + 0xde, 0x5a, 0x3f, 0x0e, 0xf8, 0x32, 0xca, 0x35, 0x1a, 0x73, 0x5a, 0xcf, 0x52, 0x5a, 0x91, 0x63, + 0x39, 0x80, 0xce, 0x0c, 0x68, 0x1c, 0x4f, 0xdd, 0xa0, 0x5a, 0x5b, 0x77, 0x3d, 0xb3, 0xe5, 0xc2, + 0x88, 0xf1, 0x47, 0x88, 0x21, 0xbb, 0x41, 0x49, 0x34, 0xd4, 0x0d, 0x4a, 0x82, 0x53, 0x7f, 0xb1, + 0xa2, 0xbb, 0xae, 0x6e, 0x19, 0x8e, 0x3e, 0x05, 0xd3, 0x04, 0x89, 0x3c, 0x14, 0x2c, 0x61, 0xa9, + 0xbf, 0x28, 0x43, 0x60, 0xf3, 0xdd, 0x87, 0xf8, 0x6e, 0xce, 0xbd, 0xc8, 0xe6, 0x7b, 0x04, 0x0f, + 0x9b, 0xef, 0x11, 0x18, 0xf8, 0x9d, 0x3e, 0x4c, 0x23, 0x2b, 0x26, 0x3c, 0x74, 0xb5, 0x12, 0xf1, + 0x3b, 0xa3, 0x04, 0xe0, 0x77, 0x46, 0x81, 0x52, 0x93, 0xfc, 0xe9, 0x76, 0xb5, 0x4f, 0x93, 0xc2, + 0x59, 0x36, 0x56, 0x86, 0xce, 0xdf, 0xe1, 0xe0, 0xa8, 0xae, 0x5b, 0x7a, 0xc7, 0xae, 0x4e, 0xf9, + 0x52, 0x37, 0xe5, 0xf9, 0xbb, 0x2f, 0x21, 0x9d, 0xbf, 0xfb, 0x22, 0xa9, 0x75, 0xf5, 0x17, 0x5a, + 0xab, 0xba, 0x43, 0x8c, 0xe0, 0xf9, 0x17, 0xb6, 0x34, 0x7c, 0x5f, 0xb6, 0xae, 0x5b, 0x90, 0x52, + 0xeb, 0xba, 0x05, 0x9a, 0x3a, 0x79, 0xc9, 0x68, 0x8d, 0xe8, 0x86, 0x72, 0x5f, 0x76, 0xf2, 0xfa, + 0x53, 0x52, 0x27, 0xaf, 0x3f, 0xb6, 0xff, 0xe7, 0xdc, 0x75, 0x4c, 0x8f, 0x28, 0xed, 0x9d, 0x7c, + 0x0e, 0x90, 0xf6, 0xff, 0x1c, 0x40, 0xd3, 0x05, 0x61, 0xb4, 0x43, 0x3a, 0xf2, 0x82, 0x30, 0xde, + 0x0d, 0xd1, 0x12, 0xd4, 0x63, 0xe1, 0xf1, 0x62, 0x8a, 0x25, 0x7b, 0x2c, 0x1c, 0x4c, 0x3d, 0x96, + 0x30, 0xa2, 0x4c, 0x8a, 0x74, 0x52, 0x6c, 0x79, 0x0e, 0x15, 0x71, 0x74, 0x0e, 0x95, 0xa2, 0xa2, + 0x6e, 0x4a, 0x01, 0x0d, 0x4a, 0x57, 0xf6, 0x3a, 0x04, 0x14, 0xf5, 0x3a, 0xc4, 0xd0, 0x87, 0x0a, + 0x1a, 0x0f, 0x1e, 0xbd, 0xe6, 0xb6, 0xf2, 0x4b, 0xf2, 0x67, 0x46, 0xd0, 0xf4, 0x33, 0x23, 0x20, + 0x89, 0x09, 0x37, 0x5b, 0x4e, 0x1f, 0x26, 0xe1, 0xfe, 0x60, 0x04, 0x84, 0x67, 0x11, 0x6e, 0x94, + 0xe7, 0x66, 0xeb, 0xc6, 0xa2, 0x78, 0x44, 0xe6, 0xca, 0x3b, 0xb0, 0x71, 0x8a, 0x99, 0x01, 0x2d, + 0xa1, 0x1c, 0x7e, 0x1f, 0x9d, 0xe3, 0x50, 0x1e, 0xce, 0x0b, 0x6f, 0x0d, 0x18, 0xc1, 0x84, 0xe0, + 0x01, 0xdf, 0xa7, 0x22, 0x7c, 0x13, 0x69, 0x67, 0x06, 0xb4, 0x2d, 0x79, 0xf5, 0xaf, 0x8b, 0xcf, + 0x0f, 0xbd, 0x9d, 0xd4, 0x15, 0x4c, 0x12, 0x5b, 0xf2, 0xea, 0x5f, 0x17, 0x97, 0xfb, 0x83, 0x9d, + 0xd4, 0x15, 0x74, 0xc2, 0x96, 0xbc, 0xb0, 0x8b, 0x4a, 0x5b, 0xe1, 0xcb, 0xed, 0xb6, 0xb2, 0x06, + 0xd5, 0x3d, 0xbd, 0x93, 0xea, 0xca, 0xe0, 0x70, 0x6e, 0xc7, 0x91, 0x5a, 0xe9, 0x85, 0x2e, 0xb1, + 0x1a, 0xd2, 0x04, 0xf4, 0x50, 0xb6, 0xd2, 0x31, 0x02, 0x6a, 0xa5, 0x63, 0x40, 0x3a, 0xa0, 0xc4, + 0xb8, 0x18, 0x65, 0x5d, 0x1e, 0x50, 0x22, 0x8e, 0x0e, 0x28, 0x29, 0x86, 0x66, 0x01, 0x9d, 0x58, + 0xb8, 0xef, 0xe9, 0xbe, 0x07, 0xe9, 0xf2, 0xae, 0xfc, 0x20, 0x72, 0xc8, 0x14, 0x27, 0x81, 0x43, + 0xa6, 0x38, 0x98, 0x8e, 0x11, 0x0a, 0x6e, 0xac, 0x5b, 0xad, 0x69, 0xdd, 0x6c, 0xf7, 0x1c, 0xa2, + 0xfc, 0x7f, 0xf2, 0x18, 0x89, 0xa0, 0xe9, 0x18, 0x89, 0x80, 0xe8, 0x04, 0x4d, 0x41, 0x65, 0xd7, + 0x35, 0x57, 0x2c, 0xbe, 0xae, 0xec, 0xb5, 0x3d, 0xe5, 0xff, 0x97, 0x27, 0xe8, 0x24, 0x1a, 0x3a, + 0x41, 0x27, 0xc1, 0x61, 0xd7, 0x29, 0xe1, 0x1d, 0x0e, 0xe5, 0xcf, 0x44, 0x76, 0x9d, 0x12, 0x68, + 0x60, 0xd7, 0x29, 0xe9, 0x0d, 0x8f, 0x69, 0x54, 0x0c, 0x9f, 0x08, 0xe6, 0xfc, 0xfe, 0xac, 0x3c, + 0x3f, 0x46, 0xf1, 0x74, 0x7e, 0x8c, 0xc2, 0x64, 0x3e, 0xbc, 0x0b, 0xfe, 0x5c, 0x3f, 0x3e, 0x81, + 0xfc, 0x63, 0x65, 0xf0, 0x2d, 0x91, 0x0f, 0x1f, 0x29, 0x3f, 0x90, 0xea, 0xc7, 0x28, 0x18, 0x1e, + 0xb1, 0x42, 0x32, 0x23, 0xf6, 0x18, 0xb5, 0xf2, 0xe5, 0xbe, 0x8c, 0x18, 0x81, 0xcc, 0x88, 0xc1, + 0xf0, 0x3b, 0xe8, 0x74, 0x08, 0x9b, 0x23, 0x9d, 0xe5, 0xc0, 0x32, 0xfd, 0xf9, 0x94, 0xec, 0x06, + 0x27, 0x93, 0x51, 0x37, 0x38, 0x19, 0x93, 0xc4, 0x9a, 0x8b, 0xee, 0x2f, 0x6c, 0xc3, 0x3a, 0x90, + 0x60, 0x1f, 0x06, 0x49, 0xac, 0xb9, 0x34, 0x7f, 0x70, 0x1b, 0xd6, 0x81, 0x4c, 0xfb, 0x30, 0xc0, + 0x3f, 0x96, 0x42, 0x97, 0x92, 0x51, 0xe5, 0x76, 0x7b, 0xda, 0x76, 0x42, 0x9c, 0xf2, 0x43, 0x29, + 0x79, 0xa3, 0x61, 0x67, 0xc5, 0x66, 0x06, 0xb4, 0x1d, 0x56, 0x80, 0x3f, 0x8f, 0x46, 0xcb, 0x3d, + 0xc3, 0xf4, 0xe0, 0xe0, 0x8d, 0x3a, 0xce, 0x3f, 0x9c, 0x8a, 0x2c, 0x71, 0x44, 0x2c, 0x2c, 0x71, + 0x44, 0x00, 0x7e, 0x03, 0x4d, 0x34, 0x48, 0xab, 0xe7, 0x98, 0xde, 0xba, 0x06, 0x6f, 0xac, 0x50, + 0x1e, 0x3f, 0x92, 0x92, 0x8d, 0x58, 0x8c, 0x82, 0x1a, 0xb1, 0x18, 0x70, 0x2a, 0x8f, 0x06, 0xc1, + 0x24, 0xa9, 0x3f, 0x97, 0x42, 0x23, 0x0d, 0xcf, 0x21, 0x7a, 0x87, 0xc7, 0x25, 0x9f, 0x45, 0x05, + 0x76, 0xb6, 0x57, 0xaf, 0xf2, 0xeb, 0x03, 0xc1, 0x6f, 0x7c, 0x09, 0x8d, 0xcd, 0xea, 0xae, 0x07, + 0x25, 0xeb, 0x96, 0x41, 0x1e, 0x42, 0x5c, 0x5b, 0x46, 0x8b, 0x40, 0xf1, 0x2c, 0xa3, 0x63, 0xe5, + 0xe0, 0x22, 0x46, 0x66, 0xdb, 0x70, 0xdc, 0xc2, 0x87, 0x1b, 0xa5, 0x01, 0x88, 0xbe, 0x8d, 0x94, + 0x55, 0xbf, 0x91, 0x42, 0xb1, 0x53, 0xc7, 0xbd, 0x47, 0xe1, 0x2e, 0xa0, 0xf1, 0xc8, 0xe5, 0x1f, + 0x1e, 0x9c, 0xb7, 0xc3, 0xbb, 0x41, 0xd1, 0xd2, 0xf8, 0xe9, 0x20, 0x28, 0xec, 0x8e, 0x36, 0xcb, + 0x43, 0xad, 0xf3, 0xf0, 0xf0, 0xa7, 0xd3, 0xd6, 0x04, 0x14, 0x0f, 0x2a, 0xfc, 0xed, 0xb1, 0xf0, + 0x66, 0x03, 0xbe, 0xc4, 0x2f, 0x36, 0xa5, 0xc2, 0x00, 0xed, 0x48, 0x0a, 0x46, 0x76, 0x91, 0xe9, + 0xf3, 0x68, 0xa4, 0xde, 0xe9, 0x12, 0xc7, 0xb5, 0x2d, 0x78, 0x93, 0x3f, 0x1d, 0x86, 0x01, 0x9b, + 0x02, 0x5c, 0x0c, 0x4d, 0x15, 0xe9, 0xf1, 0x15, 0xff, 0x15, 0xa1, 0x0c, 0xdc, 0x29, 0x39, 0x91, + 0xf0, 0x8a, 0x90, 0xff, 0x16, 0xd0, 0x15, 0x34, 0x78, 0xc7, 0xd5, 0x21, 0x7c, 0x30, 0x20, 0xed, + 0x51, 0x80, 0x48, 0x0a, 0x14, 0xf8, 0x2a, 0xca, 0x81, 0xbb, 0xe5, 0x2a, 0x83, 0x40, 0x0b, 0x61, + 0xe3, 0x6d, 0x80, 0x88, 0xe1, 0xbe, 0x8c, 0x06, 0xdf, 0x46, 0xc5, 0x70, 0x2d, 0x09, 0x8f, 0x13, + 0xf8, 0x59, 0x1d, 0x20, 0x1d, 0xe2, 0xfd, 0x00, 0xc7, 0x5e, 0x35, 0x10, 0x59, 0xc4, 0x0a, 0xe2, + 0x19, 0x34, 0x1e, 0xc2, 0xa8, 0x88, 0xfc, 0x6c, 0x32, 0x90, 0x0e, 0x54, 0xe0, 0x45, 0xc5, 0x29, + 0xb2, 0x8a, 0x16, 0xc3, 0x75, 0x94, 0xf7, 0x63, 0xc6, 0x0b, 0xdb, 0x2a, 0xe9, 0x09, 0x1e, 0x33, + 0x9e, 0x17, 0xa3, 0xc5, 0xfd, 0xf2, 0x78, 0x1a, 0x8d, 0x69, 0x76, 0xcf, 0x23, 0x4b, 0xb6, 0xff, + 0xe0, 0xf1, 0x50, 0x98, 0xa2, 0xd4, 0xa1, 0x98, 0xa6, 0x67, 0xfb, 0xd9, 0x24, 0xc5, 0xac, 0x86, + 0x72, 0x29, 0x3c, 0x9f, 0xf4, 0x76, 0xb2, 0x90, 0xe3, 0x51, 0xf8, 0xbc, 0x38, 0xb3, 0x84, 0xc7, + 0x92, 0x7f, 0x38, 0x85, 0x72, 0x4b, 0x8e, 0x6e, 0x7a, 0x2e, 0x8f, 0x3c, 0x3c, 0x35, 0xb9, 0xe6, + 0xe8, 0x5d, 0xaa, 0x1f, 0x93, 0x70, 0x69, 0x08, 0xde, 0x8a, 0x75, 0xa7, 0xee, 0xd2, 0xaf, 0xfb, + 0x77, 0x1b, 0xa5, 0xcf, 0xed, 0xe2, 0x75, 0xa7, 0x6b, 0x01, 0x27, 0x56, 0x03, 0x55, 0x01, 0x0f, + 0xfe, 0x12, 0x55, 0x80, 0xe1, 0xf0, 0x3c, 0x42, 0xfc, 0x53, 0xcb, 0xdd, 0x2e, 0x0f, 0x63, 0x14, + 0x62, 0xb4, 0x7c, 0x0c, 0x53, 0xec, 0x40, 0x60, 0x7a, 0x57, 0x7c, 0xe2, 0x42, 0xe0, 0x40, 0xb5, + 0x60, 0x89, 0xb7, 0xc8, 0x17, 0xd3, 0x68, 0x28, 0x71, 0xbf, 0xb1, 0x09, 0x42, 0x8a, 0x16, 0xc3, + 0xcb, 0x68, 0x9c, 0xf3, 0x0d, 0xee, 0xff, 0x8f, 0xc9, 0x56, 0x21, 0x82, 0x66, 0x4a, 0x1b, 0xb4, + 0xd1, 0xe0, 0x60, 0xb1, 0x8e, 0x48, 0x09, 0x3c, 0x15, 0xa6, 0x27, 0x83, 0xf7, 0x34, 0x94, 0x71, + 0xd0, 0xd8, 0x73, 0x9b, 0x1b, 0x25, 0xc5, 0x2f, 0xcf, 0x9e, 0xe1, 0x48, 0x4a, 0xb6, 0x09, 0x45, + 0x44, 0x1e, 0x4c, 0xeb, 0x8b, 0x09, 0x3c, 0xa2, 0x3a, 0x2f, 0x17, 0xc1, 0x15, 0x34, 0x1a, 0x44, + 0x51, 0xdc, 0xb9, 0x53, 0xaf, 0x42, 0x9c, 0x24, 0x7f, 0x38, 0x22, 0x92, 0x5a, 0x40, 0x64, 0x22, + 0x95, 0xc1, 0x2f, 0xa0, 0x02, 0x8b, 0x43, 0xac, 0xb3, 0xc0, 0x49, 0xff, 0x6e, 0x17, 0xc0, 0x9a, + 0xa6, 0xd8, 0x63, 0x01, 0x21, 0x7e, 0x15, 0x0d, 0x97, 0xef, 0x36, 0xa8, 0x9d, 0x29, 0x6b, 0xf3, + 0xae, 0x72, 0x22, 0xcc, 0xe9, 0x02, 0xf9, 0x56, 0xed, 0x36, 0x69, 0xea, 0x8e, 0x64, 0x3c, 0x44, + 0x7a, 0x5c, 0x43, 0x63, 0xd2, 0x46, 0xac, 0xab, 0x9c, 0x04, 0x0e, 0xec, 0xc9, 0x0b, 0xf6, 0x24, + 0x31, 0x7f, 0x75, 0x45, 0x4a, 0x2a, 0x2b, 0x17, 0xa2, 0x5a, 0x53, 0x35, 0x5d, 0xc8, 0x8f, 0xa1, + 0x11, 0xd3, 0x75, 0x7b, 0x04, 0xa2, 0x2e, 0x0b, 0x4c, 0x6b, 0x0c, 0x8e, 0x6a, 0x3a, 0x0c, 0x27, + 0xa5, 0xfc, 0x95, 0x8b, 0xe1, 0xf7, 0x11, 0x86, 0x8c, 0x1a, 0xc4, 0xf0, 0xfd, 0xf2, 0x7a, 0xd5, + 0x55, 0x4e, 0xc3, 0xe5, 0x49, 0x1c, 0xbd, 0xc2, 0x5c, 0xaf, 0x4e, 0x5d, 0xe2, 0xe6, 0xe3, 0x82, + 0xce, 0x4a, 0x35, 0x83, 0x17, 0x4f, 0x4c, 0x43, 0x6c, 0x71, 0x02, 0x57, 0xbc, 0x86, 0xce, 0x2c, + 0x3a, 0xe4, 0x81, 0x69, 0xf7, 0x5c, 0x7f, 0xfa, 0xf0, 0xed, 0xd6, 0x99, 0x6d, 0xed, 0xd6, 0x13, + 0xbc, 0xe2, 0x53, 0x5d, 0x87, 0x3c, 0x68, 0xfa, 0x57, 0xe6, 0xa4, 0x3b, 0x2f, 0xfd, 0xb8, 0x53, + 0x71, 0x95, 0x3f, 0xe8, 0x39, 0x84, 0xc3, 0x4d, 0xe2, 0x2a, 0x4a, 0x68, 0x6a, 0x75, 0x8a, 0xf2, + 0x39, 0x9a, 0x92, 0xea, 0x46, 0x8b, 0x61, 0x0d, 0xe1, 0x5b, 0x15, 0x7f, 0x8d, 0x56, 0x6e, 0xb5, + 0xec, 0x9e, 0xe5, 0xb9, 0xca, 0x63, 0xc0, 0x4c, 0xa5, 0x62, 0x59, 0x69, 0x05, 0xd7, 0x67, 0x9b, + 0x3a, 0xc7, 0x8b, 0x62, 0x89, 0x97, 0x56, 0x7f, 0x32, 0x23, 0xda, 0x94, 0xe0, 0xdd, 0xd9, 0x54, + 0xe2, 0xbb, 0xb3, 0x57, 0xd1, 0x10, 0x9f, 0x8f, 0x83, 0x84, 0x1a, 0x90, 0x7d, 0xcc, 0xbf, 0xfb, + 0x69, 0x1a, 0x5a, 0x48, 0x00, 0x99, 0x9f, 0xc2, 0xe7, 0x03, 0x32, 0x42, 0xe6, 0xa7, 0xf0, 0xf9, + 0x00, 0xe9, 0xf1, 0x80, 0xeb, 0x68, 0x98, 0xdb, 0x13, 0xe1, 0x9a, 0x16, 0xdc, 0xdf, 0xf4, 0x33, + 0x08, 0xb3, 0xeb, 0xa1, 0x02, 0x11, 0x7e, 0x19, 0x72, 0x68, 0x73, 0x15, 0xe7, 0xde, 0x03, 0x98, + 0x3f, 0x71, 0x44, 0x44, 0x92, 0x68, 0x73, 0x6a, 0x6a, 0x0c, 0x44, 0x11, 0xfb, 0xb9, 0xee, 0xc0, + 0x18, 0x48, 0xfd, 0xb2, 0x2e, 0x3d, 0x00, 0x23, 0x16, 0xc1, 0x0b, 0x68, 0x22, 0x26, 0x55, 0x7e, + 0xa9, 0x0b, 0x32, 0x1f, 0x26, 0x74, 0x89, 0x38, 0xd9, 0xc4, 0xca, 0xaa, 0xff, 0x36, 0x15, 0x33, + 0xa5, 0x54, 0x30, 0x9c, 0x4a, 0xe8, 0x1c, 0x10, 0x8c, 0xcf, 0x9a, 0x09, 0x46, 0x20, 0xc2, 0x97, + 0x51, 0x21, 0x92, 0x46, 0x1b, 0xae, 0x7b, 0x06, 0x39, 0xb4, 0x03, 0x2c, 0xbe, 0x8e, 0x0a, 0xd4, + 0xb0, 0x59, 0x91, 0x2b, 0x8c, 0x3d, 0x0e, 0x13, 0x2d, 0x91, 0x4f, 0x47, 0xcb, 0x48, 0x89, 0x5e, + 0xfc, 0x6c, 0xc7, 0x71, 0x33, 0x1e, 0x26, 0x76, 0xf9, 0x9f, 0xd9, 0x2d, 0x8f, 0x94, 0x0e, 0xe4, + 0x86, 0xfb, 0x4b, 0xd4, 0x35, 0xa6, 0xb5, 0x97, 0xdd, 0x98, 0x83, 0xc7, 0x76, 0xcc, 0x9b, 0x3a, + 0xd3, 0x23, 0x57, 0x93, 0x29, 0xc5, 0x87, 0x98, 0xe0, 0x3e, 0x5a, 0x36, 0xe1, 0x21, 0xa6, 0x68, + 0xf6, 0x66, 0xb1, 0x00, 0xfe, 0x0c, 0x1a, 0x0a, 0x9f, 0x94, 0x1a, 0x14, 0xee, 0x24, 0x26, 0xbc, + 0x24, 0x15, 0x52, 0xe2, 0x2f, 0xa2, 0x9c, 0x94, 0x3e, 0xfc, 0xda, 0x0e, 0xce, 0xe0, 0x26, 0xc5, + 0x1b, 0xe6, 0xcc, 0xcd, 0x8c, 0xa6, 0x0e, 0xe7, 0x4c, 0xf1, 0x12, 0x3a, 0xb1, 0xe8, 0x10, 0x03, + 0x4e, 0x7b, 0x6b, 0x0f, 0xbb, 0x0e, 0xbf, 0xff, 0xcf, 0x54, 0x1a, 0xac, 0x4c, 0xd7, 0x47, 0x53, + 0xfb, 0xc7, 0xf1, 0x02, 0xa3, 0xa4, 0xe2, 0x74, 0xea, 0x61, 0x2d, 0xb9, 0x4d, 0xd6, 0xd7, 0x6c, + 0xc7, 0x60, 0x57, 0xe4, 0xf9, 0xd4, 0xc3, 0x05, 0x7d, 0x9f, 0xa3, 0xc4, 0xa9, 0x47, 0x2e, 0x74, + 0xf6, 0x25, 0x34, 0xbc, 0xd7, 0x5b, 0xda, 0xbf, 0x92, 0xee, 0x13, 0x9c, 0x71, 0x74, 0xf3, 0xca, + 0x05, 0x39, 0x3e, 0x07, 0xfb, 0xe4, 0xf8, 0xfc, 0x6e, 0xba, 0x4f, 0xe4, 0xc9, 0x91, 0xce, 0xc5, + 0x17, 0x08, 0x43, 0xce, 0xc5, 0x17, 0xa6, 0x41, 0x34, 0x0d, 0x4d, 0x24, 0x8a, 0x64, 0xed, 0xcc, + 0x6d, 0x9b, 0xb5, 0xf3, 0x17, 0x32, 0x5b, 0x45, 0xe6, 0x1c, 0xcb, 0x7e, 0x37, 0xb2, 0xbf, 0x8e, + 0x86, 0x03, 0xc9, 0xf2, 0x37, 0x58, 0x46, 0x83, 0x9c, 0x10, 0x0c, 0x0c, 0x65, 0x04, 0x22, 0x7c, + 0x85, 0xb5, 0xb5, 0x61, 0x7e, 0xc0, 0xee, 0x67, 0x8f, 0xf2, 0x3b, 0xbc, 0xba, 0xa7, 0x37, 0x5d, + 0xf3, 0x03, 0xa2, 0x05, 0x68, 0xf5, 0x9f, 0xa6, 0x13, 0xc3, 0x9b, 0x8e, 0xfb, 0x68, 0x17, 0x7d, + 0x94, 0x20, 0x44, 0x16, 0x98, 0x75, 0x2c, 0xc4, 0x5d, 0x08, 0xf1, 0x3b, 0xe9, 0xc4, 0x30, 0xb6, + 0x63, 0x21, 0xee, 0xc6, 0x5a, 0x5c, 0x45, 0x43, 0x9a, 0xbd, 0xe6, 0x56, 0xc0, 0x8b, 0x67, 0xb6, + 0x02, 0x0c, 0xb5, 0x63, 0xaf, 0xb9, 0x4d, 0xf0, 0xcf, 0xb5, 0x90, 0x40, 0xfd, 0x5e, 0x7a, 0x8b, + 0x40, 0xbf, 0x63, 0xc1, 0x7f, 0x94, 0x53, 0xe4, 0xaf, 0xa5, 0xa5, 0x40, 0xc2, 0x23, 0x9d, 0xd4, + 0xba, 0xd1, 0x5a, 0x25, 0x1d, 0x3d, 0x9a, 0xd4, 0xda, 0x05, 0x28, 0xcf, 0x89, 0x19, 0x92, 0xa8, + 0xbf, 0x9e, 0x8e, 0x44, 0x52, 0x1e, 0xcb, 0x6e, 0xc7, 0xb2, 0x0b, 0xb4, 0x8e, 0x07, 0x87, 0x1e, + 0x4b, 0x6e, 0xa7, 0x92, 0xfb, 0xd1, 0x74, 0x24, 0x8e, 0xf6, 0xe8, 0xe6, 0xb7, 0xfd, 0xf5, 0x74, + 0x3c, 0x26, 0xf8, 0xe8, 0x6a, 0xd2, 0x55, 0x34, 0xc4, 0xe5, 0x10, 0x4c, 0x15, 0xcc, 0xee, 0x33, + 0x20, 0x6c, 0x29, 0x06, 0x04, 0xea, 0x0f, 0xa5, 0x91, 0x1c, 0xdf, 0x7c, 0x44, 0x75, 0xe8, 0xd7, + 0xd2, 0x72, 0x64, 0xf7, 0xd1, 0xd5, 0x9f, 0x49, 0x84, 0x1a, 0xbd, 0xe5, 0x16, 0x4f, 0x0c, 0x32, + 0x28, 0xec, 0x49, 0x07, 0x50, 0x4d, 0xa0, 0x50, 0xff, 0x77, 0x3a, 0x31, 0xdc, 0xfc, 0xe8, 0x0a, + 0xf0, 0x05, 0xd8, 0x27, 0x6e, 0x59, 0xa1, 0x21, 0x87, 0x4d, 0x48, 0x3a, 0xfe, 0x62, 0x89, 0xd1, + 0x7c, 0x42, 0xfc, 0xd9, 0x04, 0x77, 0x0d, 0x72, 0x98, 0x25, 0xbe, 0xef, 0x23, 0x3a, 0x6e, 0xff, + 0x32, 0xbd, 0x5d, 0x74, 0xfe, 0x51, 0x9e, 0x55, 0xf3, 0x8b, 0xfa, 0x3a, 0xdc, 0x22, 0xa7, 0x3d, + 0x31, 0xc2, 0x12, 0x80, 0x75, 0x19, 0x48, 0xcc, 0x24, 0xc8, 0xa9, 0xd4, 0x3f, 0x1e, 0x4c, 0x0e, + 0x0d, 0x3f, 0xba, 0x22, 0xf4, 0xdf, 0x9f, 0x1d, 0xdc, 0xf6, 0xfd, 0xd9, 0xdc, 0x4e, 0xdf, 0x9f, + 0xcd, 0xf7, 0x7d, 0x7f, 0xf6, 0x1c, 0xca, 0x4e, 0xd9, 0xc6, 0x3a, 0xc4, 0x3d, 0x8c, 0xb0, 0xca, + 0x96, 0x6d, 0x63, 0x5d, 0x03, 0x28, 0xfe, 0xb1, 0x14, 0xca, 0xcf, 0x10, 0xdd, 0xa0, 0x23, 0x64, + 0x68, 0xab, 0xb0, 0x81, 0xb7, 0x1f, 0x4d, 0xd8, 0xc0, 0xc4, 0x2a, 0xab, 0x4c, 0x54, 0x14, 0x5e, + 0x3f, 0xbe, 0x85, 0x0a, 0x15, 0xdd, 0x23, 0x2b, 0xb6, 0xb3, 0x0e, 0x81, 0x10, 0x63, 0xe1, 0xa5, + 0x41, 0x49, 0x7f, 0x7c, 0x22, 0x76, 0x56, 0xd4, 0xe2, 0xbf, 0xb4, 0xa0, 0x30, 0x15, 0x0b, 0x4f, + 0x78, 0x3d, 0x1c, 0x8a, 0x45, 0xce, 0x6c, 0x1d, 0x6e, 0x2b, 0x8f, 0x24, 0x6f, 0x2b, 0x47, 0x5e, + 0x15, 0x1e, 0xdd, 0xf6, 0x55, 0x61, 0xf5, 0x5b, 0x83, 0x28, 0x31, 0x90, 0xf4, 0x58, 0xc9, 0x8f, + 0x95, 0x3c, 0x54, 0xf2, 0x6a, 0x4c, 0xc9, 0xcf, 0xc6, 0x43, 0x93, 0x3f, 0xa6, 0x1a, 0xfe, 0xb3, + 0xd9, 0xd8, 0xc5, 0x86, 0xa3, 0xbd, 0xba, 0x0c, 0xa5, 0x37, 0xb8, 0xf3, 0x57, 0xc7, 0x73, 0xdb, + 0x0e, 0x88, 0xfc, 0x4e, 0x07, 0x44, 0xa1, 0xef, 0x80, 0x08, 0x15, 0x64, 0xa8, 0xaf, 0x82, 0xd4, + 0xf9, 0xa0, 0x41, 0x5b, 0x27, 0x69, 0x3d, 0xb7, 0xb9, 0x51, 0x1a, 0xa3, 0xa3, 0x29, 0x31, 0x3d, + 0x2b, 0xb0, 0x50, 0xbf, 0x91, 0xdd, 0xe2, 0x36, 0xd2, 0x81, 0xe8, 0x08, 0x7f, 0x76, 0x3d, 0xb3, + 0x97, 0x67, 0xd7, 0xb3, 0x7b, 0x78, 0x76, 0x3d, 0xe1, 0x29, 0xfd, 0xc1, 0x5d, 0x3c, 0xa5, 0x2f, + 0x6b, 0x53, 0x6e, 0xe7, 0xda, 0x94, 0xdf, 0x56, 0x9b, 0x0a, 0x3b, 0xd5, 0xa6, 0xa1, 0x1d, 0x68, + 0x13, 0xda, 0x56, 0x9b, 0x86, 0xf7, 0xaf, 0x4d, 0x5d, 0x74, 0x36, 0x7e, 0x83, 0x34, 0xd0, 0x08, + 0x0d, 0xe1, 0x38, 0x96, 0x87, 0x9b, 0xc0, 0xd1, 0x7f, 0x8f, 0x61, 0x9b, 0x2c, 0x15, 0x7e, 0x34, + 0x91, 0xbc, 0x96, 0x50, 0x5a, 0xfd, 0x95, 0x74, 0xff, 0x8b, 0xaf, 0x87, 0xd3, 0xc4, 0x7d, 0x7f, + 0xa2, 0x94, 0xb2, 0xf2, 0x55, 0xba, 0xfe, 0x52, 0x8e, 0xb0, 0x4d, 0x92, 0xd9, 0xd7, 0x52, 0xfd, + 0x6e, 0xe3, 0xee, 0x4b, 0x62, 0x9f, 0x8a, 0x87, 0x6f, 0x41, 0xa0, 0xb5, 0x2b, 0xc7, 0x6d, 0x45, + 0xf3, 0xb2, 0x67, 0xf6, 0x98, 0x97, 0xfd, 0x9f, 0xa4, 0xd0, 0x89, 0xdb, 0xbd, 0x65, 0xc2, 0xc3, + 0xb5, 0x82, 0x66, 0xbc, 0x8f, 0x10, 0x05, 0xf3, 0x20, 0x96, 0x14, 0x04, 0xb1, 0x3c, 0x2b, 0xde, + 0xa4, 0x8d, 0x14, 0x98, 0x0c, 0xa9, 0x59, 0x00, 0xcb, 0x79, 0x3f, 0x1a, 0xef, 0x7e, 0x6f, 0x99, + 0xc4, 0x1f, 0xc1, 0x17, 0xb8, 0x9f, 0x7d, 0x95, 0xc5, 0x39, 0xef, 0x35, 0x68, 0xe4, 0x97, 0xd3, + 0x7d, 0x2f, 0x2f, 0x1f, 0xda, 0x67, 0xbd, 0xbf, 0x90, 0xd8, 0x2b, 0x5c, 0x7f, 0x1f, 0xdf, 0xa2, + 0x1f, 0x22, 0x1c, 0x93, 0xb8, 0x24, 0x0b, 0xec, 0x90, 0xbf, 0x83, 0xfe, 0x91, 0x0a, 0xec, 0xf7, + 0x52, 0x7d, 0x2f, 0x99, 0x1f, 0xda, 0x97, 0xd2, 0xbf, 0x9e, 0xf6, 0xef, 0xb6, 0xef, 0xeb, 0x13, + 0xae, 0xa2, 0x21, 0x9e, 0xc0, 0x57, 0x8e, 0x36, 0xe5, 0x5b, 0x79, 0xb0, 0x35, 0x1c, 0x10, 0xd0, + 0x69, 0xde, 0xbf, 0x7b, 0x1b, 0xbc, 0x09, 0x00, 0xd3, 0xbc, 0xc9, 0xa1, 0x94, 0x5e, 0x20, 0xa1, + 0x13, 0x79, 0xed, 0xa1, 0xe9, 0x81, 0x57, 0x40, 0xfb, 0x32, 0xc3, 0x26, 0x72, 0xf2, 0xd0, 0xf4, + 0x98, 0x4f, 0x10, 0xa0, 0xe9, 0x24, 0x2d, 0xbc, 0xf6, 0xc8, 0x27, 0x69, 0x97, 0x67, 0x12, 0xe7, + 0xf7, 0x7e, 0xae, 0xa2, 0x21, 0x1e, 0xc2, 0xc9, 0xc3, 0x4c, 0x78, 0x6b, 0x79, 0xd0, 0x27, 0xb4, + 0x36, 0x20, 0xa0, 0x1c, 0x35, 0xb2, 0x12, 0x06, 0xd6, 0x01, 0x47, 0x07, 0x20, 0x1a, 0xc7, 0xa8, + 0x9b, 0xe9, 0xf8, 0x15, 0xfb, 0xa3, 0xbb, 0x28, 0xb8, 0x22, 0x07, 0xab, 0x41, 0x84, 0x26, 0x38, + 0x5c, 0xe2, 0xbd, 0x1a, 0xe6, 0x77, 0x5d, 0x47, 0x85, 0xdb, 0x64, 0x9d, 0xc5, 0x55, 0xe6, 0xc2, + 0xe0, 0xd4, 0xfb, 0x1c, 0x26, 0xee, 0x68, 0xfa, 0x74, 0xea, 0x57, 0xd3, 0xf1, 0xe4, 0x01, 0x47, + 0x57, 0xd8, 0x9f, 0x46, 0x79, 0x10, 0x65, 0xdd, 0xdf, 0x52, 0x07, 0x01, 0xb2, 0x27, 0xdc, 0xa5, + 0x5b, 0x0d, 0x3e, 0x99, 0xfa, 0xf3, 0xb9, 0x68, 0x46, 0x89, 0xa3, 0x2b, 0xbd, 0xcf, 0xa1, 0xe1, + 0x8a, 0x6d, 0xb9, 0xa6, 0xeb, 0x11, 0xab, 0xe5, 0x2b, 0xec, 0x63, 0xd4, 0x61, 0x69, 0x85, 0x60, + 0xf1, 0x92, 0x86, 0x40, 0xbd, 0x17, 0xe5, 0xc5, 0x2f, 0xa2, 0x21, 0x10, 0x39, 0xc4, 0x21, 0x0b, + 0x2f, 0x8a, 0x2c, 0x53, 0x60, 0x34, 0x08, 0x39, 0x24, 0xc5, 0x77, 0x50, 0xa1, 0xb2, 0x6a, 0xb6, + 0x0d, 0x87, 0x58, 0xfc, 0xc9, 0xaa, 0x27, 0x92, 0xf3, 0x7f, 0x4c, 0xc2, 0xbf, 0x40, 0xcb, 0x9a, + 0xd3, 0xe2, 0xc5, 0xa4, 0x6b, 0x2a, 0x1c, 0x76, 0xf6, 0x67, 0xd2, 0x08, 0x85, 0x05, 0xf0, 0x45, + 0x94, 0xf6, 0xef, 0x42, 0xb2, 0x30, 0x10, 0x49, 0x83, 0xd2, 0x60, 0x8a, 0xf9, 0xd8, 0x4e, 0x6f, + 0x3b, 0xb6, 0xef, 0xa0, 0x1c, 0xdb, 0x51, 0x82, 0x48, 0x6d, 0xe1, 0x92, 0x7b, 0xdf, 0x06, 0x4f, + 0x02, 0x3d, 0x5b, 0x2c, 0x82, 0x67, 0x27, 0x45, 0x3d, 0x33, 0x66, 0x67, 0x5b, 0x68, 0x10, 0xfe, + 0xc2, 0x97, 0x50, 0x16, 0xa4, 0x98, 0x82, 0x75, 0x22, 0xdc, 0x28, 0x8c, 0xc8, 0x0f, 0xf0, 0xb4, + 0x9b, 0x2a, 0xb6, 0xe5, 0xd1, 0xaa, 0xa1, 0xd5, 0x23, 0x5c, 0x2e, 0x1c, 0x26, 0xc9, 0x85, 0xc3, + 0xd4, 0x7f, 0x91, 0x4e, 0xc8, 0x75, 0x72, 0x74, 0x87, 0xc9, 0x4b, 0x08, 0xc1, 0x9d, 0x57, 0x2a, + 0x4f, 0xff, 0x0a, 0x24, 0x8c, 0x12, 0x60, 0x04, 0x6a, 0x2b, 0xb9, 0xf5, 0x21, 0xb1, 0xfa, 0x5b, + 0xa9, 0x58, 0x82, 0x8c, 0x43, 0xfb, 0x82, 0xa2, 0xf4, 0x2d, 0x87, 0xfc, 0x35, 0xc8, 0x6f, 0xa5, + 0x93, 0xd2, 0x85, 0x1c, 0x4e, 0x15, 0x0f, 0x9f, 0xa5, 0xca, 0xee, 0xe2, 0x59, 0xaa, 0xf7, 0xd0, + 0x78, 0x24, 0x89, 0x06, 0x7f, 0xff, 0xe3, 0xd2, 0xd6, 0xd9, 0x38, 0xfa, 0xdf, 0x96, 0x96, 0xc8, + 0xd4, 0xff, 0x93, 0xda, 0x3a, 0x85, 0xca, 0x81, 0xab, 0x4e, 0x82, 0x00, 0x32, 0x7f, 0x3a, 0x02, + 0x78, 0x04, 0xcb, 0xcc, 0xc3, 0x2d, 0x80, 0x8f, 0x89, 0xf1, 0xf8, 0xa8, 0x05, 0xf0, 0xf3, 0xa9, + 0x6d, 0x33, 0xe0, 0x1c, 0xb4, 0x0c, 0xd4, 0x7f, 0x9f, 0x4a, 0xcc, 0x54, 0xb3, 0xaf, 0x76, 0xbd, + 0x82, 0x72, 0x2c, 0x6c, 0x85, 0xb7, 0x4a, 0xc8, 0xed, 0x4b, 0xa1, 0xfd, 0x9e, 0xc5, 0x66, 0x58, + 0x3c, 0x8b, 0xf2, 0xac, 0x0d, 0x06, 0xef, 0x8d, 0xa7, 0xb6, 0x48, 0x97, 0x63, 0xf4, 0x33, 0x8e, + 0x1c, 0xad, 0xfe, 0x66, 0x2a, 0x96, 0x38, 0xe7, 0x00, 0xbf, 0x6d, 0x6f, 0xcf, 0xed, 0xfe, 0x61, + 0x3a, 0x39, 0x6f, 0xcf, 0x01, 0x7e, 0xc8, 0xa3, 0xd8, 0xae, 0xda, 0xdb, 0xbc, 0xb5, 0x84, 0xc6, + 0x64, 0x59, 0xf0, 0x69, 0xeb, 0x42, 0x72, 0xf6, 0xa2, 0x3e, 0xad, 0x88, 0xf0, 0x50, 0x3f, 0x4c, + 0xc5, 0x53, 0x0e, 0x1d, 0xb8, 0x7d, 0xda, 0x9b, 0xb6, 0xc8, 0x9f, 0xf2, 0x31, 0x99, 0x6b, 0x1e, + 0xc5, 0xa7, 0x7c, 0x4c, 0x66, 0x8d, 0xbd, 0x7d, 0xca, 0x2f, 0xa6, 0xfb, 0x65, 0x6c, 0x3a, 0xf0, + 0x0f, 0x7a, 0x57, 0x14, 0x32, 0x6b, 0x19, 0xff, 0xb4, 0x8b, 0xfd, 0x52, 0x24, 0xf5, 0xe1, 0x19, + 0xe3, 0xb3, 0xb7, 0x31, 0x9e, 0x28, 0xac, 0x8f, 0x89, 0x22, 0x1f, 0x0e, 0x61, 0x7d, 0x4c, 0x86, + 0xca, 0xc7, 0x4f, 0x58, 0xff, 0x30, 0xbd, 0xd3, 0x34, 0x61, 0xc7, 0xc2, 0x8b, 0x09, 0xef, 0xa7, + 0xd2, 0xf1, 0xf4, 0x75, 0x07, 0x2e, 0xa6, 0x69, 0x94, 0xe3, 0x89, 0xf4, 0xfa, 0x0a, 0x87, 0xe1, + 0xfb, 0x79, 0x34, 0xfc, 0x3b, 0xc2, 0xd7, 0x47, 0xb3, 0x3b, 0x7f, 0x7d, 0x54, 0xfd, 0x5e, 0x2a, + 0x92, 0xeb, 0xed, 0x40, 0xb6, 0x10, 0xf6, 0x34, 0x25, 0xe1, 0x57, 0xfd, 0xcd, 0xcc, 0x6c, 0xe4, + 0x19, 0xad, 0xe0, 0x7b, 0xaa, 0xc4, 0xd3, 0xcd, 0x76, 0xb4, 0x3c, 0xbf, 0x73, 0xff, 0xd5, 0x34, + 0x9a, 0x88, 0x91, 0xe2, 0x4b, 0x52, 0x5e, 0x16, 0xd8, 0x96, 0x8c, 0x04, 0x67, 0xb3, 0x0c, 0x2d, + 0xbb, 0xd8, 0x49, 0xbd, 0x84, 0xb2, 0x55, 0x7d, 0x9d, 0x7d, 0xdb, 0x20, 0x63, 0x69, 0xe8, 0xeb, + 0xe2, 0x8e, 0x1b, 0xe0, 0xf1, 0x32, 0x3a, 0xc5, 0xce, 0x43, 0x4c, 0xdb, 0x5a, 0x32, 0x3b, 0xa4, + 0x6e, 0xcd, 0x99, 0xed, 0xb6, 0xe9, 0xf2, 0x43, 0xb3, 0xab, 0x9b, 0x1b, 0xa5, 0xcb, 0x9e, 0xed, + 0xe9, 0xed, 0x26, 0xf1, 0xc9, 0x9a, 0x9e, 0xd9, 0x21, 0x4d, 0xd3, 0x6a, 0x76, 0x80, 0x52, 0x60, + 0x99, 0xcc, 0x0a, 0xd7, 0xd9, 0x3b, 0x5f, 0x8d, 0x96, 0x6e, 0x59, 0xc4, 0xa8, 0x5b, 0x53, 0xeb, + 0x1e, 0x61, 0x87, 0x6d, 0x19, 0xb6, 0x25, 0xc8, 0xee, 0x5e, 0x33, 0x34, 0x65, 0xbc, 0x4c, 0x09, + 0xb4, 0x84, 0x42, 0xea, 0x6f, 0x64, 0x13, 0xd2, 0xfc, 0x1d, 0x22, 0xf5, 0xf1, 0x7b, 0x3a, 0xbb, + 0x4d, 0x4f, 0x5f, 0x43, 0xf9, 0xb7, 0x88, 0x03, 0xfb, 0x5b, 0x83, 0xe1, 0x03, 0xe8, 0x0f, 0x18, + 0x48, 0x3c, 0xa1, 0xe1, 0x54, 0xb8, 0x8d, 0xce, 0x2e, 0xd1, 0x6e, 0x4a, 0xee, 0xcc, 0xdc, 0x1e, + 0x3a, 0x73, 0x0b, 0x7e, 0xf8, 0x1d, 0x74, 0x06, 0xb0, 0x09, 0xdd, 0x9a, 0x87, 0xaa, 0x20, 0xff, + 0x17, 0xab, 0x2a, 0xb9, 0x73, 0xfb, 0x95, 0xc7, 0xef, 0xa2, 0x91, 0x60, 0x80, 0x98, 0xc4, 0xe5, + 0x27, 0x17, 0x5b, 0x8c, 0x33, 0x96, 0x21, 0x8b, 0x82, 0x21, 0x44, 0x4b, 0xce, 0xb2, 0x24, 0xf1, + 0x7a, 0xe6, 0x69, 0x34, 0x0c, 0xdb, 0xcc, 0x65, 0x78, 0xab, 0x07, 0x8f, 0xa0, 0xc2, 0xc2, 0x54, + 0xa3, 0xa6, 0xbd, 0x55, 0xab, 0x16, 0x07, 0x30, 0x42, 0xb9, 0x6a, 0x6d, 0xbe, 0x5e, 0xab, 0x16, + 0x53, 0xcf, 0xfc, 0x8f, 0x14, 0x42, 0x8d, 0xe9, 0xa5, 0x45, 0x4e, 0x38, 0x8c, 0xf2, 0xf5, 0xf9, + 0xb7, 0xca, 0xb3, 0x75, 0x4a, 0x57, 0x40, 0xd9, 0x85, 0xc5, 0xda, 0x7c, 0x31, 0x85, 0x87, 0xd0, + 0x60, 0x65, 0x76, 0xa1, 0x51, 0x2b, 0xa6, 0x29, 0x50, 0xab, 0x95, 0xab, 0xc5, 0x0c, 0x05, 0xde, + 0xd5, 0xea, 0x4b, 0xb5, 0x62, 0x96, 0xfe, 0x39, 0xdb, 0x58, 0x2a, 0x2f, 0x15, 0x07, 0xe9, 0x9f, + 0xd3, 0xf0, 0x67, 0x8e, 0x32, 0x6b, 0xd4, 0x96, 0xe0, 0x47, 0x9e, 0x36, 0x61, 0xda, 0xff, 0x55, + 0xa0, 0x28, 0xca, 0xba, 0x5a, 0xd7, 0x8a, 0x43, 0xf4, 0x07, 0x65, 0x49, 0x7f, 0x20, 0xda, 0x38, + 0xad, 0x36, 0xb7, 0xf0, 0x56, 0xad, 0x38, 0x4c, 0x79, 0xcd, 0xdd, 0xa6, 0xe0, 0x11, 0xfa, 0xa7, + 0x36, 0x47, 0xff, 0x1c, 0xa5, 0x9c, 0xb4, 0x5a, 0x79, 0x76, 0xb1, 0xbc, 0x34, 0x53, 0x1c, 0xa3, + 0xed, 0x01, 0x9e, 0xe3, 0xac, 0xe4, 0x7c, 0x79, 0xae, 0x56, 0x2c, 0x72, 0x9a, 0xea, 0x6c, 0x7d, + 0xfe, 0x76, 0x71, 0x02, 0x1a, 0xf2, 0xce, 0x1c, 0xfc, 0xc0, 0xb4, 0x00, 0xfc, 0x75, 0xe2, 0x99, + 0xef, 0x43, 0x39, 0xf6, 0x42, 0x39, 0x3e, 0x83, 0x4e, 0x2c, 0x34, 0x9a, 0x4b, 0xef, 0x2c, 0xd6, + 0x9a, 0x77, 0xe6, 0x1b, 0x8b, 0xb5, 0x4a, 0x7d, 0xba, 0x0e, 0xa2, 0x9a, 0x40, 0xa3, 0x3e, 0x62, + 0xb6, 0x3e, 0x7f, 0xe7, 0xed, 0x62, 0x4a, 0x04, 0xcd, 0x95, 0x2b, 0x0b, 0x8d, 0x62, 0x1a, 0x9f, + 0x40, 0xe3, 0x3e, 0xe8, 0x6e, 0x7d, 0xbe, 0xba, 0x70, 0xb7, 0x51, 0xcc, 0x3c, 0xf3, 0xc0, 0xcf, + 0x0f, 0xcc, 0x9e, 0x05, 0xc7, 0xe7, 0xd1, 0x63, 0xd5, 0xda, 0x5b, 0xf5, 0x4a, 0xad, 0xb9, 0xa0, + 0xd5, 0x6f, 0xd5, 0xe7, 0x23, 0x35, 0x9d, 0x42, 0x13, 0x32, 0xba, 0xbc, 0x58, 0x2f, 0xa6, 0xf0, + 0x69, 0x84, 0x65, 0xf0, 0x1b, 0xe5, 0xb9, 0xe9, 0x62, 0x1a, 0x2b, 0xe8, 0xa4, 0x0c, 0xaf, 0xcf, + 0x2f, 0xdd, 0x99, 0xaf, 0x15, 0x33, 0xcf, 0xfc, 0x8d, 0x14, 0x3a, 0x95, 0x18, 0x0c, 0x8f, 0x55, + 0x74, 0xa1, 0x36, 0x5b, 0x6e, 0x2c, 0xd5, 0x2b, 0x8d, 0x5a, 0x59, 0xab, 0xcc, 0x34, 0x2b, 0xe5, + 0xa5, 0xda, 0xad, 0x05, 0xed, 0x9d, 0xe6, 0xad, 0xda, 0x7c, 0x4d, 0x2b, 0xcf, 0x16, 0x07, 0xf0, + 0x93, 0xa8, 0xd4, 0x87, 0xa6, 0x51, 0xab, 0xdc, 0xd1, 0xea, 0x4b, 0xef, 0x14, 0x53, 0xf8, 0x09, + 0x74, 0xbe, 0x2f, 0x11, 0xfd, 0x5d, 0x4c, 0xe3, 0x0b, 0xe8, 0x6c, 0x3f, 0x92, 0x37, 0x67, 0x8b, + 0x99, 0x67, 0xfe, 0x72, 0x0a, 0xe1, 0x78, 0x34, 0x33, 0xbe, 0x88, 0xce, 0x51, 0xbd, 0x68, 0xf6, + 0x6f, 0xe0, 0x13, 0xe8, 0x7c, 0x22, 0x85, 0xd0, 0xbc, 0x12, 0x7a, 0xbc, 0x0f, 0x09, 0x6f, 0xdc, + 0x39, 0xa4, 0x24, 0x13, 0xd0, 0xa6, 0x4d, 0x55, 0x3f, 0xfc, 0xa3, 0x0b, 0x03, 0x1f, 0x7e, 0xfb, + 0x42, 0xea, 0x77, 0xbf, 0x7d, 0x21, 0xf5, 0x87, 0xdf, 0xbe, 0x90, 0x7a, 0xf7, 0xfa, 0x6e, 0x82, + 0xbd, 0xd9, 0xf0, 0x5d, 0xce, 0x41, 0x58, 0xe3, 0x0b, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x3b, + 0x8a, 0x3e, 0x38, 0xed, 0x0f, 0x01, 0x00, } func (m *Metadata) Marshal() (dAtA []byte, err error) { @@ -16504,6 +16713,16 @@ func (m *KubeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + { + size, err := m.SessionMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a { size, err := m.KubernetesClusterMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -18984,21 +19203,21 @@ func (m *WindowsDesktopSessionEnd) MarshalToSizedBuffer(dAtA []byte) (int, error i-- dAtA[i] = 0x5a } - n313, err313 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) - if err313 != nil { - return 0, err313 - } - i -= n313 - i = encodeVarintEvents(dAtA, i, uint64(n313)) - i-- - dAtA[i] = 0x52 - n314, err314 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + n314, err314 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) if err314 != nil { return 0, err314 } i -= n314 i = encodeVarintEvents(dAtA, i, uint64(n314)) i-- + dAtA[i] = 0x52 + n315, err315 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + if err315 != nil { + return 0, err315 + } + i -= n315 + i = encodeVarintEvents(dAtA, i, uint64(n315)) + i-- dAtA[i] = 0x4a if len(m.DesktopLabels) > 0 { for k := range m.DesktopLabels { @@ -19287,6 +19506,14 @@ func (m *InstanceJoin) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + n326, err326 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.TokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.TokenExpires):]) + if err326 != nil { + return 0, err326 + } + i -= n326 + i = encodeVarintEvents(dAtA, i, uint64(n326)) + i-- + dAtA[i] = 0x4a if m.Attributes != nil { { size, err := m.Attributes.MarshalToSizedBuffer(dAtA[:i]) @@ -22657,6 +22884,52 @@ func (m *OneOf_AccessListMemberDeleteAllForAccessList) MarshalToSizedBuffer(dAtA } return len(dAtA) - i, nil } +func (m *OneOf_AuditQueryRun) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OneOf_AuditQueryRun) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.AuditQueryRun != nil { + { + size, err := m.AuditQueryRun.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x8 + i-- + dAtA[i] = 0xb2 + } + return len(dAtA) - i, nil +} +func (m *OneOf_SecurityReportRun) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OneOf_SecurityReportRun) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.SecurityReportRun != nil { + { + size, err := m.SecurityReportRun.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x8 + i-- + dAtA[i] = 0xba + } + return len(dAtA) - i, nil +} func (m *StreamStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -22681,12 +22954,12 @@ func (m *StreamStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n469, err469 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) - if err469 != nil { - return 0, err469 + n473, err473 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) + if err473 != nil { + return 0, err473 } - i -= n469 - i = encodeVarintEvents(dAtA, i, uint64(n469)) + i -= n473 + i = encodeVarintEvents(dAtA, i, uint64(n473)) i-- dAtA[i] = 0x1a if m.LastEventIndex != 0 { @@ -22804,12 +23077,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0xc2 } } - n472, err472 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) - if err472 != nil { - return 0, err472 + n476, err476 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) + if err476 != nil { + return 0, err476 } - i -= n472 - i = encodeVarintEvents(dAtA, i, uint64(n472)) + i -= n476 + i = encodeVarintEvents(dAtA, i, uint64(n476)) i-- dAtA[i] = 0x1 i-- @@ -22957,12 +23230,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x4a } - n476, err476 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err476 != nil { - return 0, err476 + n480, err480 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err480 != nil { + return 0, err480 } - i -= n476 - i = encodeVarintEvents(dAtA, i, uint64(n476)) + i -= n480 + i = encodeVarintEvents(dAtA, i, uint64(n480)) i-- dAtA[i] = 0x42 if len(m.KubernetesUsers) > 0 { @@ -26952,6 +27225,224 @@ func (m *AccessListReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *AuditQueryRun) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AuditQueryRun) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AuditQueryRun) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + { + size, err := m.AuditQueryDetails.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *AuditQueryDetails) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AuditQueryDetails) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AuditQueryDetails) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.DataScannedInBytes != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.DataScannedInBytes)) + i-- + dAtA[i] = 0x28 + } + if m.ExecutionTimeInMillis != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.ExecutionTimeInMillis)) + i-- + dAtA[i] = 0x20 + } + if m.Days != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.Days)) + i-- + dAtA[i] = 0x18 + } + if len(m.Query) > 0 { + i -= len(m.Query) + copy(dAtA[i:], m.Query) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Query))) + i-- + dAtA[i] = 0x12 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *SecurityReportRun) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecurityReportRun) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecurityReportRun) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.AuditQueries) > 0 { + for iNdEx := len(m.AuditQueries) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AuditQueries[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } + if m.TotalDataScannedInBytes != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.TotalDataScannedInBytes)) + i-- + dAtA[i] = 0x38 + } + if m.TotalExecutionTimeInMillis != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.TotalExecutionTimeInMillis)) + i-- + dAtA[i] = 0x30 + } + if len(m.Version) > 0 { + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x2a + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x22 + } + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintEvents(dAtA []byte, offset int, v uint64) int { offset -= sovEvents(v) base := offset @@ -28855,6 +29346,8 @@ func (m *KubeRequest) Size() (n int) { } l = m.KubernetesClusterMetadata.Size() n += 1 + l + sovEvents(uint64(l)) + l = m.SessionMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -29837,6 +30330,8 @@ func (m *InstanceJoin) Size() (n int) { l = m.Attributes.Size() n += 1 + l + sovEvents(uint64(l)) } + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.TokenExpires) + n += 1 + l + sovEvents(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -31546,6 +32041,30 @@ func (m *OneOf_AccessListMemberDeleteAllForAccessList) Size() (n int) { } return n } +func (m *OneOf_AuditQueryRun) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.AuditQueryRun != nil { + l = m.AuditQueryRun.Size() + n += 2 + l + sovEvents(uint64(l)) + } + return n +} +func (m *OneOf_SecurityReportRun) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SecurityReportRun != nil { + l = m.SecurityReportRun.Size() + n += 2 + l + sovEvents(uint64(l)) + } + return n +} func (m *StreamStatus) Size() (n int) { if m == nil { return 0 @@ -33094,6 +33613,93 @@ func (m *AccessListReview) Size() (n int) { return n } +func (m *AuditQueryRun) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Metadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.UserMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.AuditQueryDetails.Size() + n += 1 + l + sovEvents(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *AuditQueryDetails) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.Query) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + if m.Days != 0 { + n += 1 + sovEvents(uint64(m.Days)) + } + if m.ExecutionTimeInMillis != 0 { + n += 1 + sovEvents(uint64(m.ExecutionTimeInMillis)) + } + if m.DataScannedInBytes != 0 { + n += 1 + sovEvents(uint64(m.DataScannedInBytes)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *SecurityReportRun) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Metadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.UserMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovEvents(uint64(l)) + l = len(m.Name) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.Version) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + if m.TotalExecutionTimeInMillis != 0 { + n += 1 + sovEvents(uint64(m.TotalExecutionTimeInMillis)) + } + if m.TotalDataScannedInBytes != 0 { + n += 1 + sovEvents(uint64(m.TotalDataScannedInBytes)) + } + if len(m.AuditQueries) > 0 { + for _, e := range m.AuditQueries { + l = e.Size() + n += 1 + l + sovEvents(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func sovEvents(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -48209,6 +48815,39 @@ func (m *KubeRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) @@ -56606,6 +57245,39 @@ func (m *InstanceJoin) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenExpires", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.TokenExpires, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) @@ -62020,111 +62692,9 @@ func (m *OneOf) Unmarshal(dAtA []byte) error { } m.Event = &OneOf_AccessListMemberDeleteAllForAccessList{v} iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEvents(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthEvents - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StreamStatus) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StreamStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StreamStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UploadID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UploadID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LastEventIndex", wireType) - } - m.LastEventIndex = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LastEventIndex |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: + case 134: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastUploadTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AuditQueryRun", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -62151,9 +62721,46 @@ func (m *StreamStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.LastUploadTime, dAtA[iNdEx:postIndex]); err != nil { + v := &AuditQueryRun{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.Event = &OneOf_AuditQueryRun{v} + iNdEx = postIndex + case 135: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecurityReportRun", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &SecurityReportRun{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Event = &OneOf_SecurityReportRun{v} iNdEx = postIndex default: iNdEx = preIndex @@ -62177,7 +62784,7 @@ func (m *StreamStatus) Unmarshal(dAtA []byte) error { } return nil } -func (m *SessionUpload) Unmarshal(dAtA []byte) error { +func (m *StreamStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -62200,17 +62807,17 @@ func (m *SessionUpload) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SessionUpload: wiretype end group for non-group") + return fmt.Errorf("proto: StreamStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SessionUpload: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: StreamStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UploadID", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -62220,30 +62827,29 @@ func (m *SessionUpload) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.UploadID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastEventIndex", wireType) } - var msglen int + m.LastEventIndex = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -62253,30 +62859,16 @@ func (m *SessionUpload) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.LastEventIndex |= int64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionURL", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastUploadTime", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -62286,23 +62878,24 @@ func (m *SessionUpload) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.SessionURL = string(dAtA[iNdEx:postIndex]) + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.LastUploadTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -62326,7 +62919,7 @@ func (m *SessionUpload) Unmarshal(dAtA []byte) error { } return nil } -func (m *Identity) Unmarshal(dAtA []byte) error { +func (m *SessionUpload) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -62349,17 +62942,17 @@ func (m *Identity) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Identity: wiretype end group for non-group") + return fmt.Errorf("proto: SessionUpload: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Identity: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SessionUpload: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -62369,29 +62962,30 @@ func (m *Identity) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.User = string(dAtA[iNdEx:postIndex]) + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Impersonator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -62401,27 +62995,28 @@ func (m *Identity) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.Impersonator = string(dAtA[iNdEx:postIndex]) + if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 3: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SessionURL", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -62449,43 +63044,62 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Roles = append(m.Roles, string(dAtA[iNdEx:postIndex])) + m.SessionURL = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Usage", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err } - intStringLen := int(stringLen) - if intStringLen < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvents + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF } - if postIndex > l { + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Identity) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.Usage = append(m.Usage, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 5: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Identity: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Identity: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Logins", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -62513,11 +63127,11 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Logins = append(m.Logins, string(dAtA[iNdEx:postIndex])) + m.User = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 6: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KubernetesGroups", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Impersonator", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -62545,11 +63159,11 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.KubernetesGroups = append(m.KubernetesGroups, string(dAtA[iNdEx:postIndex])) + m.Impersonator = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 7: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KubernetesUsers", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -62577,13 +63191,13 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.KubernetesUsers = append(m.KubernetesUsers, string(dAtA[iNdEx:postIndex])) + m.Roles = append(m.Roles, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 8: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Expires", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Usage", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -62593,28 +63207,27 @@ func (m *Identity) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Expires, dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Usage = append(m.Usage, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 9: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RouteToCluster", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Logins", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -62642,11 +63255,11 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.RouteToCluster = string(dAtA[iNdEx:postIndex]) + m.Logins = append(m.Logins, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 10: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KubernetesCluster", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field KubernetesGroups", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -62674,13 +63287,13 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.KubernetesCluster = string(dAtA[iNdEx:postIndex]) + m.KubernetesGroups = append(m.KubernetesGroups, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 11: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Traits", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field KubernetesUsers", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -62690,28 +63303,27 @@ func (m *Identity) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Traits.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.KubernetesUsers = append(m.KubernetesUsers, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 12: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RouteToApp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Expires", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -62738,16 +63350,13 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.RouteToApp == nil { - m.RouteToApp = &RouteToApp{} - } - if err := m.RouteToApp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Expires, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 13: + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TeleportCluster", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RouteToCluster", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -62775,47 +63384,11 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.TeleportCluster = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RouteToDatabase", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RouteToDatabase == nil { - m.RouteToDatabase = &RouteToDatabase{} - } - if err := m.RouteToDatabase.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.RouteToCluster = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 15: + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DatabaseNames", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field KubernetesCluster", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -62843,13 +63416,13 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.DatabaseNames = append(m.DatabaseNames, string(dAtA[iNdEx:postIndex])) + m.KubernetesCluster = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 16: + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DatabaseUsers", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Traits", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -62859,29 +63432,30 @@ func (m *Identity) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.DatabaseUsers = append(m.DatabaseUsers, string(dAtA[iNdEx:postIndex])) + if err := m.Traits.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 17: + case 12: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MFADeviceUUID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RouteToApp", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -62891,27 +63465,31 @@ func (m *Identity) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.MFADeviceUUID = string(dAtA[iNdEx:postIndex]) + if m.RouteToApp == nil { + m.RouteToApp = &RouteToApp{} + } + if err := m.RouteToApp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 18: + case 13: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientIP", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TeleportCluster", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -62939,13 +63517,13 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ClientIP = string(dAtA[iNdEx:postIndex]) + m.TeleportCluster = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 19: + case 14: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AWSRoleARNs", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RouteToDatabase", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -62955,27 +63533,31 @@ func (m *Identity) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.AWSRoleARNs = append(m.AWSRoleARNs, string(dAtA[iNdEx:postIndex])) + if m.RouteToDatabase == nil { + m.RouteToDatabase = &RouteToDatabase{} + } + if err := m.RouteToDatabase.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 20: + case 15: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessRequests", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DatabaseNames", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -63003,67 +63585,13 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AccessRequests = append(m.AccessRequests, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 21: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DisallowReissue", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.DisallowReissue = bool(v != 0) - case 22: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedResourceIDs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AllowedResourceIDs = append(m.AllowedResourceIDs, ResourceID{}) - if err := m.AllowedResourceIDs[len(m.AllowedResourceIDs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.DatabaseNames = append(m.DatabaseNames, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 23: + case 16: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PreviousIdentityExpires", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DatabaseUsers", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -63073,28 +63601,27 @@ func (m *Identity) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.PreviousIdentityExpires, dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.DatabaseUsers = append(m.DatabaseUsers, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 24: + case 17: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AzureIdentities", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MFADeviceUUID", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -63122,11 +63649,11 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AzureIdentities = append(m.AzureIdentities, string(dAtA[iNdEx:postIndex])) + m.MFADeviceUUID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 25: + case 18: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GCPServiceAccounts", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ClientIP", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -63154,62 +63681,11 @@ func (m *Identity) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.GCPServiceAccounts = append(m.GCPServiceAccounts, string(dAtA[iNdEx:postIndex])) + m.ClientIP = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEvents(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthEvents - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteToApp) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RouteToApp: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RouteToApp: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 19: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AWSRoleARNs", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -63237,11 +63713,11 @@ func (m *RouteToApp) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + m.AWSRoleARNs = append(m.AWSRoleARNs, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 2: + case 20: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AccessRequests", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -63269,13 +63745,13 @@ func (m *RouteToApp) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.SessionID = string(dAtA[iNdEx:postIndex]) + m.AccessRequests = append(m.AccessRequests, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PublicAddr", wireType) + case 21: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DisallowReissue", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -63285,29 +63761,17 @@ func (m *RouteToApp) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PublicAddr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: + m.DisallowReissue = bool(v != 0) + case 22: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowedResourceIDs", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -63317,29 +63781,31 @@ func (m *RouteToApp) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.ClusterName = string(dAtA[iNdEx:postIndex]) + m.AllowedResourceIDs = append(m.AllowedResourceIDs, ResourceID{}) + if err := m.AllowedResourceIDs[len(m.AllowedResourceIDs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 5: + case 23: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AWSRoleARN", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PreviousIdentityExpires", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -63349,27 +63815,28 @@ func (m *RouteToApp) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.AWSRoleARN = string(dAtA[iNdEx:postIndex]) + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.PreviousIdentityExpires, dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 6: + case 24: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AzureIdentity", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AzureIdentities", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -63397,11 +63864,11 @@ func (m *RouteToApp) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AzureIdentity = string(dAtA[iNdEx:postIndex]) + m.AzureIdentities = append(m.AzureIdentities, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 7: + case 25: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GCPServiceAccount", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field GCPServiceAccounts", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -63429,7 +63896,7 @@ func (m *RouteToApp) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.GCPServiceAccount = string(dAtA[iNdEx:postIndex]) + m.GCPServiceAccounts = append(m.GCPServiceAccounts, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex @@ -63453,7 +63920,7 @@ func (m *RouteToApp) Unmarshal(dAtA []byte) error { } return nil } -func (m *RouteToDatabase) Unmarshal(dAtA []byte) error { +func (m *RouteToApp) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -63476,15 +63943,15 @@ func (m *RouteToDatabase) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RouteToDatabase: wiretype end group for non-group") + return fmt.Errorf("proto: RouteToApp: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RouteToDatabase: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: RouteToApp: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -63512,11 +63979,11 @@ func (m *RouteToDatabase) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ServiceName = string(dAtA[iNdEx:postIndex]) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SessionID", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -63544,11 +64011,11 @@ func (m *RouteToDatabase) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Protocol = string(dAtA[iNdEx:postIndex]) + m.SessionID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PublicAddr", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -63576,11 +64043,286 @@ func (m *RouteToDatabase) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Username = string(dAtA[iNdEx:postIndex]) + m.PublicAddr = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Database", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ClusterName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClusterName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AWSRoleARN", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AWSRoleARN = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureIdentity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureIdentity = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GCPServiceAccount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GCPServiceAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RouteToDatabase) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RouteToDatabase: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RouteToDatabase: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Protocol = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Username = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Database", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -69242,10 +69984,703 @@ func (m *UpgradeWindowStartUpdate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: UpgradeWindowStartUpdate: wiretype end group for non-group") + return fmt.Errorf("proto: UpgradeWindowStartUpdate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpgradeWindowStartUpdate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpgradeWindowStartMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.UpgradeWindowStartMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SessionRecordingAccess) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SessionRecordingAccess: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SessionRecordingAccess: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SessionID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SessionID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *KubeClusterMetadata) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: KubeClusterMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KubeClusterMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubeLabels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.KubeLabels == nil { + m.KubeLabels = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthEvents + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthEvents + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthEvents + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthEvents + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.KubeLabels[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *KubernetesClusterCreate) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: KubernetesClusterCreate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KubernetesClusterCreate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubeClusterMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.KubeClusterMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *KubernetesClusterUpdate) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: KubernetesClusterUpdate: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: UpgradeWindowStartUpdate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: KubernetesClusterUpdate: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -69316,7 +70751,7 @@ func (m *UpgradeWindowStartUpdate) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -69343,13 +70778,13 @@ func (m *UpgradeWindowStartUpdate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpgradeWindowStartMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field KubeClusterMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -69376,7 +70811,7 @@ func (m *UpgradeWindowStartUpdate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.UpgradeWindowStartMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.KubeClusterMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -69402,7 +70837,7 @@ func (m *UpgradeWindowStartUpdate) Unmarshal(dAtA []byte) error { } return nil } -func (m *SessionRecordingAccess) Unmarshal(dAtA []byte) error { +func (m *KubernetesClusterDelete) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -69425,10 +70860,10 @@ func (m *SessionRecordingAccess) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SessionRecordingAccess: wiretype end group for non-group") + return fmt.Errorf("proto: KubernetesClusterDelete: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SessionRecordingAccess: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: KubernetesClusterDelete: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -69466,9 +70901,9 @@ func (m *SessionRecordingAccess) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -69478,27 +70913,28 @@ func (m *SessionRecordingAccess) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.SessionID = string(dAtA[iNdEx:postIndex]) + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -69525,7 +70961,7 @@ func (m *SessionRecordingAccess) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -69551,7 +70987,7 @@ func (m *SessionRecordingAccess) Unmarshal(dAtA []byte) error { } return nil } -func (m *KubeClusterMetadata) Unmarshal(dAtA []byte) error { +func (m *SSMRun) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -69574,15 +71010,15 @@ func (m *KubeClusterMetadata) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: KubeClusterMetadata: wiretype end group for non-group") + return fmt.Errorf("proto: SSMRun: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: KubeClusterMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SSMRun: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KubeLabels", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -69609,160 +71045,47 @@ func (m *KubeClusterMetadata) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.KubeLabels == nil { - m.KubeLabels = make(map[string]string) + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommandID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthEvents - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthEvents - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthEvents - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthEvents - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipEvents(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthEvents - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break } } - m.KubeLabels[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEvents(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *KubernetesClusterCreate) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KubernetesClusterCreate: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KubernetesClusterCreate: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.CommandID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field InstanceID", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -69772,30 +71095,48 @@ func (m *KubernetesClusterCreate) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.InstanceID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExitCode", wireType) + } + m.ExitCode = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ExitCode |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -69805,30 +71146,29 @@ func (m *KubernetesClusterCreate) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Status = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AccountID", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -69838,30 +71178,29 @@ func (m *KubernetesClusterCreate) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.AccountID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KubeClusterMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -69871,24 +71210,23 @@ func (m *KubernetesClusterCreate) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.KubeClusterMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Region = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -69912,7 +71250,7 @@ func (m *KubernetesClusterCreate) Unmarshal(dAtA []byte) error { } return nil } -func (m *KubernetesClusterUpdate) Unmarshal(dAtA []byte) error { +func (m *CassandraPrepare) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -69935,10 +71273,10 @@ func (m *KubernetesClusterUpdate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: KubernetesClusterUpdate: wiretype end group for non-group") + return fmt.Errorf("proto: CassandraPrepare: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: KubernetesClusterUpdate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CassandraPrepare: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -70009,40 +71347,7 @@ func (m *KubernetesClusterUpdate) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KubeClusterMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -70069,64 +71374,13 @@ func (m *KubernetesClusterUpdate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.KubeClusterMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEvents(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthEvents - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *KubernetesClusterDelete) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KubernetesClusterDelete: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KubernetesClusterDelete: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DatabaseMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -70153,15 +71407,15 @@ func (m *KubernetesClusterDelete) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.DatabaseMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -70171,30 +71425,29 @@ func (m *KubernetesClusterDelete) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Query = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -70204,24 +71457,23 @@ func (m *KubernetesClusterDelete) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Keyspace = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -70245,7 +71497,7 @@ func (m *KubernetesClusterDelete) Unmarshal(dAtA []byte) error { } return nil } -func (m *SSMRun) Unmarshal(dAtA []byte) error { +func (m *CassandraExecute) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -70268,10 +71520,10 @@ func (m *SSMRun) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SSMRun: wiretype end group for non-group") + return fmt.Errorf("proto: CassandraExecute: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SSMRun: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CassandraExecute: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -70309,9 +71561,9 @@ func (m *SSMRun) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CommandID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -70321,29 +71573,30 @@ func (m *SSMRun) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.CommandID = string(dAtA[iNdEx:postIndex]) + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InstanceID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -70353,48 +71606,30 @@ func (m *SSMRun) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.InstanceID = string(dAtA[iNdEx:postIndex]) + if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ExitCode", wireType) - } - m.ExitCode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ExitCode |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DatabaseMetadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -70404,59 +71639,28 @@ func (m *SSMRun) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.Status = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccountID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF + if err := m.DatabaseMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.AccountID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 7: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field QueryId", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -70484,7 +71688,7 @@ func (m *SSMRun) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Region = string(dAtA[iNdEx:postIndex]) + m.QueryId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -70508,7 +71712,7 @@ func (m *SSMRun) Unmarshal(dAtA []byte) error { } return nil } -func (m *CassandraPrepare) Unmarshal(dAtA []byte) error { +func (m *CassandraBatch) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -70531,10 +71735,10 @@ func (m *CassandraPrepare) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CassandraPrepare: wiretype end group for non-group") + return fmt.Errorf("proto: CassandraBatch: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CassandraPrepare: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CassandraBatch: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -70671,7 +71875,71 @@ func (m *CassandraPrepare) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Consistency", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Consistency = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Keyspace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BatchType", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -70699,13 +71967,13 @@ func (m *CassandraPrepare) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Query = string(dAtA[iNdEx:postIndex]) + m.BatchType = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 6: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Children", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -70715,23 +71983,25 @@ func (m *CassandraPrepare) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.Keyspace = string(dAtA[iNdEx:postIndex]) + m.Children = append(m.Children, &CassandraBatch_BatchChild{}) + if err := m.Children[len(m.Children)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -70755,7 +72025,7 @@ func (m *CassandraPrepare) Unmarshal(dAtA []byte) error { } return nil } -func (m *CassandraExecute) Unmarshal(dAtA []byte) error { +func (m *CassandraBatch_BatchChild) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -70778,17 +72048,17 @@ func (m *CassandraExecute) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CassandraExecute: wiretype end group for non-group") + return fmt.Errorf("proto: BatchChild: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CassandraExecute: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: BatchChild: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -70798,30 +72068,29 @@ func (m *CassandraExecute) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -70831,28 +72100,27 @@ func (m *CassandraExecute) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Query = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -70879,15 +72147,67 @@ func (m *CassandraExecute) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Values = append(m.Values, &CassandraBatch_BatchChild_Value{}) + if err := m.Values[len(m.Values)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DatabaseMetadata", wireType) + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err } - var msglen int + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CassandraBatch_BatchChild_Value) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Value: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Value: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + m.Type = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -70897,30 +72217,16 @@ func (m *CassandraExecute) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Type |= uint32(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.DatabaseMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field QueryId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Contents", wireType) } - var stringLen uint64 + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -70930,23 +72236,25 @@ func (m *CassandraExecute) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if byteLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.QueryId = string(dAtA[iNdEx:postIndex]) + m.Contents = append(m.Contents[:0], dAtA[iNdEx:postIndex]...) + if m.Contents == nil { + m.Contents = []byte{} + } iNdEx = postIndex default: iNdEx = preIndex @@ -70970,7 +72278,7 @@ func (m *CassandraExecute) Unmarshal(dAtA []byte) error { } return nil } -func (m *CassandraBatch) Unmarshal(dAtA []byte) error { +func (m *CassandraRegister) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -70993,10 +72301,10 @@ func (m *CassandraBatch) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CassandraBatch: wiretype end group for non-group") + return fmt.Errorf("proto: CassandraRegister: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CassandraBatch: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CassandraRegister: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -71133,71 +72441,7 @@ func (m *CassandraBatch) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Consistency", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Consistency = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keyspace = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BatchType", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EventTypes", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -71225,41 +72469,7 @@ func (m *CassandraBatch) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.BatchType = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Children", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Children = append(m.Children, &CassandraBatch_BatchChild{}) - if err := m.Children[len(m.Children)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.EventTypes = append(m.EventTypes, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex @@ -71283,7 +72493,7 @@ func (m *CassandraBatch) Unmarshal(dAtA []byte) error { } return nil } -func (m *CassandraBatch_BatchChild) Unmarshal(dAtA []byte) error { +func (m *LoginRuleCreate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -71306,17 +72516,17 @@ func (m *CassandraBatch_BatchChild) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: BatchChild: wiretype end group for non-group") + return fmt.Errorf("proto: LoginRuleCreate: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: BatchChild: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: LoginRuleCreate: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -71326,29 +72536,30 @@ func (m *CassandraBatch_BatchChild) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.ID = string(dAtA[iNdEx:postIndex]) + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -71358,27 +72569,28 @@ func (m *CassandraBatch_BatchChild) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.Query = string(dAtA[iNdEx:postIndex]) + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -71405,8 +72617,7 @@ func (m *CassandraBatch_BatchChild) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Values = append(m.Values, &CassandraBatch_BatchChild_Value{}) - if err := m.Values[len(m.Values)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -71432,7 +72643,7 @@ func (m *CassandraBatch_BatchChild) Unmarshal(dAtA []byte) error { } return nil } -func (m *CassandraBatch_BatchChild_Value) Unmarshal(dAtA []byte) error { +func (m *LoginRuleDelete) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -71455,17 +72666,17 @@ func (m *CassandraBatch_BatchChild_Value) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Value: wiretype end group for non-group") + return fmt.Errorf("proto: LoginRuleDelete: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Value: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: LoginRuleDelete: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) } - m.Type = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -71475,16 +72686,30 @@ func (m *CassandraBatch_BatchChild_Value) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Type |= uint32(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Contents", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) } - var byteLen int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -71494,24 +72719,56 @@ func (m *CassandraBatch_BatchChild_Value) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + byteLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.Contents = append(m.Contents[:0], dAtA[iNdEx:postIndex]...) - if m.Contents == nil { - m.Contents = []byte{} + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } iNdEx = postIndex default: @@ -71536,7 +72793,7 @@ func (m *CassandraBatch_BatchChild_Value) Unmarshal(dAtA []byte) error { } return nil } -func (m *CassandraRegister) Unmarshal(dAtA []byte) error { +func (m *SAMLIdPAuthAttempt) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -71559,10 +72816,10 @@ func (m *CassandraRegister) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CassandraRegister: wiretype end group for non-group") + return fmt.Errorf("proto: SAMLIdPAuthAttempt: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CassandraRegister: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SAMLIdPAuthAttempt: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -71666,7 +72923,7 @@ func (m *CassandraRegister) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DatabaseMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -71693,15 +72950,15 @@ func (m *CassandraRegister) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.DatabaseMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EventTypes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SAMLIdPServiceProviderMetadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -71711,23 +72968,24 @@ func (m *CassandraRegister) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - m.EventTypes = append(m.EventTypes, string(dAtA[iNdEx:postIndex])) + if err := m.SAMLIdPServiceProviderMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -71751,7 +73009,7 @@ func (m *CassandraRegister) Unmarshal(dAtA []byte) error { } return nil } -func (m *LoginRuleCreate) Unmarshal(dAtA []byte) error { +func (m *SAMLIdPServiceProviderCreate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -71774,10 +73032,10 @@ func (m *LoginRuleCreate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: LoginRuleCreate: wiretype end group for non-group") + return fmt.Errorf("proto: SAMLIdPServiceProviderCreate: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: LoginRuleCreate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SAMLIdPServiceProviderCreate: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -71848,7 +73106,7 @@ func (m *LoginRuleCreate) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SAMLIdPServiceProviderMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -71875,7 +73133,7 @@ func (m *LoginRuleCreate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SAMLIdPServiceProviderMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -71901,7 +73159,7 @@ func (m *LoginRuleCreate) Unmarshal(dAtA []byte) error { } return nil } -func (m *LoginRuleDelete) Unmarshal(dAtA []byte) error { +func (m *SAMLIdPServiceProviderUpdate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -71924,10 +73182,10 @@ func (m *LoginRuleDelete) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: LoginRuleDelete: wiretype end group for non-group") + return fmt.Errorf("proto: SAMLIdPServiceProviderUpdate: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: LoginRuleDelete: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SAMLIdPServiceProviderUpdate: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -71998,7 +73256,7 @@ func (m *LoginRuleDelete) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SAMLIdPServiceProviderMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72025,7 +73283,7 @@ func (m *LoginRuleDelete) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SAMLIdPServiceProviderMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -72051,7 +73309,7 @@ func (m *LoginRuleDelete) Unmarshal(dAtA []byte) error { } return nil } -func (m *SAMLIdPAuthAttempt) Unmarshal(dAtA []byte) error { +func (m *SAMLIdPServiceProviderDelete) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -72074,10 +73332,10 @@ func (m *SAMLIdPAuthAttempt) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SAMLIdPAuthAttempt: wiretype end group for non-group") + return fmt.Errorf("proto: SAMLIdPServiceProviderDelete: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SAMLIdPAuthAttempt: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SAMLIdPServiceProviderDelete: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -72115,7 +73373,7 @@ func (m *SAMLIdPAuthAttempt) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72142,13 +73400,13 @@ func (m *SAMLIdPAuthAttempt) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SAMLIdPServiceProviderMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72175,13 +73433,64 @@ func (m *SAMLIdPAuthAttempt) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SAMLIdPServiceProviderMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SAMLIdPServiceProviderDeleteAll) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SAMLIdPServiceProviderDeleteAll: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SAMLIdPServiceProviderDeleteAll: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72208,13 +73517,13 @@ func (m *SAMLIdPAuthAttempt) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 5: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SAMLIdPServiceProviderMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72241,7 +73550,7 @@ func (m *SAMLIdPAuthAttempt) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SAMLIdPServiceProviderMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -72267,7 +73576,7 @@ func (m *SAMLIdPAuthAttempt) Unmarshal(dAtA []byte) error { } return nil } -func (m *SAMLIdPServiceProviderCreate) Unmarshal(dAtA []byte) error { +func (m *OktaResourcesUpdate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -72290,10 +73599,10 @@ func (m *SAMLIdPServiceProviderCreate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SAMLIdPServiceProviderCreate: wiretype end group for non-group") + return fmt.Errorf("proto: OktaResourcesUpdate: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SAMLIdPServiceProviderCreate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: OktaResourcesUpdate: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -72331,7 +73640,7 @@ func (m *SAMLIdPServiceProviderCreate) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ServerMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72358,13 +73667,13 @@ func (m *SAMLIdPServiceProviderCreate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ServerMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SAMLIdPServiceProviderMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field OktaResourcesUpdatedMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72391,7 +73700,7 @@ func (m *SAMLIdPServiceProviderCreate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SAMLIdPServiceProviderMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.OktaResourcesUpdatedMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -72417,7 +73726,7 @@ func (m *SAMLIdPServiceProviderCreate) Unmarshal(dAtA []byte) error { } return nil } -func (m *SAMLIdPServiceProviderUpdate) Unmarshal(dAtA []byte) error { +func (m *OktaSyncFailure) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -72440,10 +73749,10 @@ func (m *SAMLIdPServiceProviderUpdate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SAMLIdPServiceProviderUpdate: wiretype end group for non-group") + return fmt.Errorf("proto: OktaSyncFailure: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SAMLIdPServiceProviderUpdate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: OktaSyncFailure: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -72481,7 +73790,7 @@ func (m *SAMLIdPServiceProviderUpdate) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ServerMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72508,13 +73817,13 @@ func (m *SAMLIdPServiceProviderUpdate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ServerMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SAMLIdPServiceProviderMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72541,7 +73850,7 @@ func (m *SAMLIdPServiceProviderUpdate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SAMLIdPServiceProviderMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -72567,7 +73876,7 @@ func (m *SAMLIdPServiceProviderUpdate) Unmarshal(dAtA []byte) error { } return nil } -func (m *SAMLIdPServiceProviderDelete) Unmarshal(dAtA []byte) error { +func (m *OktaAssignmentResult) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -72590,10 +73899,10 @@ func (m *SAMLIdPServiceProviderDelete) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SAMLIdPServiceProviderDelete: wiretype end group for non-group") + return fmt.Errorf("proto: OktaAssignmentResult: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SAMLIdPServiceProviderDelete: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: OktaAssignmentResult: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -72631,7 +73940,7 @@ func (m *SAMLIdPServiceProviderDelete) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ServerMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72658,13 +73967,13 @@ func (m *SAMLIdPServiceProviderDelete) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ServerMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SAMLIdPServiceProviderMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72691,64 +74000,13 @@ func (m *SAMLIdPServiceProviderDelete) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SAMLIdPServiceProviderMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEvents(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthEvents - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SAMLIdPServiceProviderDeleteAll) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SAMLIdPServiceProviderDeleteAll: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SAMLIdPServiceProviderDeleteAll: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72775,13 +74033,13 @@ func (m *SAMLIdPServiceProviderDeleteAll) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field OktaAssignmentMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72808,7 +74066,7 @@ func (m *SAMLIdPServiceProviderDeleteAll) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.OktaAssignmentMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -72834,7 +74092,7 @@ func (m *SAMLIdPServiceProviderDeleteAll) Unmarshal(dAtA []byte) error { } return nil } -func (m *OktaResourcesUpdate) Unmarshal(dAtA []byte) error { +func (m *AccessListCreate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -72857,10 +74115,10 @@ func (m *OktaResourcesUpdate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: OktaResourcesUpdate: wiretype end group for non-group") + return fmt.Errorf("proto: AccessListCreate: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: OktaResourcesUpdate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AccessListCreate: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -72898,7 +74156,7 @@ func (m *OktaResourcesUpdate) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServerMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72925,13 +74183,13 @@ func (m *OktaResourcesUpdate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ServerMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OktaResourcesUpdatedMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -72958,7 +74216,7 @@ func (m *OktaResourcesUpdate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.OktaResourcesUpdatedMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -72984,7 +74242,7 @@ func (m *OktaResourcesUpdate) Unmarshal(dAtA []byte) error { } return nil } -func (m *OktaSyncFailure) Unmarshal(dAtA []byte) error { +func (m *AccessListUpdate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -73007,10 +74265,10 @@ func (m *OktaSyncFailure) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: OktaSyncFailure: wiretype end group for non-group") + return fmt.Errorf("proto: AccessListUpdate: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: OktaSyncFailure: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AccessListUpdate: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -73048,7 +74306,7 @@ func (m *OktaSyncFailure) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServerMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -73075,7 +74333,7 @@ func (m *OktaSyncFailure) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ServerMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -73134,7 +74392,7 @@ func (m *OktaSyncFailure) Unmarshal(dAtA []byte) error { } return nil } -func (m *OktaAssignmentResult) Unmarshal(dAtA []byte) error { +func (m *AccessListDelete) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -73157,10 +74415,10 @@ func (m *OktaAssignmentResult) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: OktaAssignmentResult: wiretype end group for non-group") + return fmt.Errorf("proto: AccessListDelete: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: OktaAssignmentResult: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AccessListDelete: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -73197,39 +74455,6 @@ func (m *OktaAssignmentResult) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServerMetadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ServerMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) } @@ -73262,7 +74487,7 @@ func (m *OktaAssignmentResult) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 4: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } @@ -73295,39 +74520,6 @@ func (m *OktaAssignmentResult) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OktaAssignmentMetadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.OktaAssignmentMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) @@ -73350,7 +74542,7 @@ func (m *OktaAssignmentResult) Unmarshal(dAtA []byte) error { } return nil } -func (m *AccessListCreate) Unmarshal(dAtA []byte) error { +func (m *AccessListMemberCreate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -73373,10 +74565,10 @@ func (m *AccessListCreate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AccessListCreate: wiretype end group for non-group") + return fmt.Errorf("proto: AccessListMemberCreate: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AccessListCreate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AccessListMemberCreate: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -73446,6 +74638,39 @@ func (m *AccessListCreate) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AccessListMemberMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AccessListMemberMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } @@ -73500,7 +74725,7 @@ func (m *AccessListCreate) Unmarshal(dAtA []byte) error { } return nil } -func (m *AccessListUpdate) Unmarshal(dAtA []byte) error { +func (m *AccessListMemberUpdate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -73523,10 +74748,10 @@ func (m *AccessListUpdate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AccessListUpdate: wiretype end group for non-group") + return fmt.Errorf("proto: AccessListMemberUpdate: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AccessListUpdate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AccessListMemberUpdate: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -73596,6 +74821,39 @@ func (m *AccessListUpdate) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AccessListMemberMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AccessListMemberMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } @@ -73650,7 +74908,7 @@ func (m *AccessListUpdate) Unmarshal(dAtA []byte) error { } return nil } -func (m *AccessListDelete) Unmarshal(dAtA []byte) error { +func (m *AccessListMemberDelete) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -73673,10 +74931,10 @@ func (m *AccessListDelete) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AccessListDelete: wiretype end group for non-group") + return fmt.Errorf("proto: AccessListMemberDelete: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AccessListDelete: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AccessListMemberDelete: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -73746,6 +75004,39 @@ func (m *AccessListDelete) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AccessListMemberMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AccessListMemberMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } @@ -73800,7 +75091,7 @@ func (m *AccessListDelete) Unmarshal(dAtA []byte) error { } return nil } -func (m *AccessListMemberCreate) Unmarshal(dAtA []byte) error { +func (m *AccessListMemberDeleteAllForAccessList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -73823,10 +75114,10 @@ func (m *AccessListMemberCreate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AccessListMemberCreate: wiretype end group for non-group") + return fmt.Errorf("proto: AccessListMemberDeleteAllForAccessList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AccessListMemberCreate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AccessListMemberDeleteAllForAccessList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -73983,7 +75274,7 @@ func (m *AccessListMemberCreate) Unmarshal(dAtA []byte) error { } return nil } -func (m *AccessListMemberUpdate) Unmarshal(dAtA []byte) error { +func (m *AccessListReview) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -74006,10 +75297,10 @@ func (m *AccessListMemberUpdate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AccessListMemberUpdate: wiretype end group for non-group") + return fmt.Errorf("proto: AccessListReview: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AccessListMemberUpdate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AccessListReview: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -74080,7 +75371,7 @@ func (m *AccessListMemberUpdate) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessListMemberMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AccessListReviewMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -74107,7 +75398,7 @@ func (m *AccessListMemberUpdate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.AccessListMemberMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.AccessListReviewMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -74166,7 +75457,7 @@ func (m *AccessListMemberUpdate) Unmarshal(dAtA []byte) error { } return nil } -func (m *AccessListMemberDelete) Unmarshal(dAtA []byte) error { +func (m *AuditQueryRun) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -74189,10 +75480,10 @@ func (m *AccessListMemberDelete) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AccessListMemberDelete: wiretype end group for non-group") + return fmt.Errorf("proto: AuditQueryRun: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AccessListMemberDelete: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AuditQueryRun: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -74230,7 +75521,7 @@ func (m *AccessListMemberDelete) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -74257,13 +75548,13 @@ func (m *AccessListMemberDelete) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessListMemberMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -74290,13 +75581,13 @@ func (m *AccessListMemberDelete) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.AccessListMemberMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AuditQueryDetails", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -74323,7 +75614,7 @@ func (m *AccessListMemberDelete) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.AuditQueryDetails.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -74349,7 +75640,7 @@ func (m *AccessListMemberDelete) Unmarshal(dAtA []byte) error { } return nil } -func (m *AccessListMemberDeleteAllForAccessList) Unmarshal(dAtA []byte) error { +func (m *AuditQueryDetails) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -74372,17 +75663,17 @@ func (m *AccessListMemberDeleteAllForAccessList) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AccessListMemberDeleteAllForAccessList: wiretype end group for non-group") + return fmt.Errorf("proto: AuditQueryDetails: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AccessListMemberDeleteAllForAccessList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AuditQueryDetails: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -74392,30 +75683,29 @@ func (m *AccessListMemberDeleteAllForAccessList) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -74425,30 +75715,29 @@ func (m *AccessListMemberDeleteAllForAccessList) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthEvents } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthEvents } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Query = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessListMemberMetadata", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Days", wireType) } - var msglen int + m.Days = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -74458,30 +75747,16 @@ func (m *AccessListMemberDeleteAllForAccessList) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Days |= int32(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.AccessListMemberMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExecutionTimeInMillis", wireType) } - var msglen int + m.ExecutionTimeInMillis = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -74491,25 +75766,30 @@ func (m *AccessListMemberDeleteAllForAccessList) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.ExecutionTimeInMillis |= int64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DataScannedInBytes", wireType) } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.DataScannedInBytes = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DataScannedInBytes |= int64(b&0x7F) << shift + if b < 0x80 { + break + } } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) @@ -74532,7 +75812,7 @@ func (m *AccessListMemberDeleteAllForAccessList) Unmarshal(dAtA []byte) error { } return nil } -func (m *AccessListReview) Unmarshal(dAtA []byte) error { +func (m *SecurityReportRun) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -74555,10 +75835,10 @@ func (m *AccessListReview) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AccessListReview: wiretype end group for non-group") + return fmt.Errorf("proto: SecurityReportRun: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AccessListReview: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SecurityReportRun: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -74596,7 +75876,7 @@ func (m *AccessListReview) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -74623,13 +75903,13 @@ func (m *AccessListReview) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessListReviewMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -74656,13 +75936,115 @@ func (m *AccessListReview) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.AccessListReviewMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TotalExecutionTimeInMillis", wireType) + } + m.TotalExecutionTimeInMillis = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TotalExecutionTimeInMillis |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TotalDataScannedInBytes", wireType) + } + m.TotalDataScannedInBytes = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TotalDataScannedInBytes |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuditQueries", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -74689,7 +76071,8 @@ func (m *AccessListReview) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.AuditQueries = append(m.AuditQueries, &AuditQueryDetails{}) + if err := m.AuditQueries[len(m.AuditQueries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/api/types/events/oneof.go b/api/types/events/oneof.go index 11ff62e065818..7c7434bb8eaa4 100644 --- a/api/types/events/oneof.go +++ b/api/types/events/oneof.go @@ -567,6 +567,15 @@ func ToOneOf(in AuditEvent) (*OneOf, error) { out.Event = &OneOf_AccessListMemberDeleteAllForAccessList{ AccessListMemberDeleteAllForAccessList: e, } + case *AuditQueryRun: + out.Event = &OneOf_AuditQueryRun{ + AuditQueryRun: e, + } + case *SecurityReportRun: + out.Event = &OneOf_SecurityReportRun{ + SecurityReportRun: e, + } + default: log.Errorf("Attempted to convert dynamic event of unknown type \"%v\" into protobuf event.", in.GetType()) unknown := &Unknown{} diff --git a/api/types/secreports/convert/v1/secreprot.go b/api/types/secreports/convert/v1/secreprot.go new file mode 100644 index 0000000000000..8b692d6af912d --- /dev/null +++ b/api/types/secreports/convert/v1/secreprot.go @@ -0,0 +1,167 @@ +/* +Copyright 2023 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + "time" + + "github.com/gravitational/trace" + + secreportsv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/secreports/v1" + headerv1 "github.com/gravitational/teleport/api/types/header/convert/v1" + "github.com/gravitational/teleport/api/types/secreports" +) + +// FromProtoAuditQuery converts the audit query from proto. +func FromProtoAuditQuery(in *secreportsv1.AuditQuery) (*secreports.AuditQuery, error) { + spec := secreports.AuditQuerySpec{ + Name: in.GetSpec().GetName(), + Title: in.GetSpec().GetTitle(), + Query: in.GetSpec().GetQuery(), + Description: in.GetSpec().GetDescription(), + } + out, err := secreports.NewAuditQuery(headerv1.FromMetadataProto(in.Header.Metadata), spec) + if err != nil { + return nil, trace.Wrap(err) + } + return out, nil +} + +// FromProtoAuditQueries converts the audit queries from proto. +func FromProtoAuditQueries(in []*secreportsv1.AuditQuery) ([]*secreports.AuditQuery, error) { + out := make([]*secreports.AuditQuery, 0, len(in)) + for _, v := range in { + item, err := FromProtoAuditQuery(v) + if err != nil { + return nil, trace.Wrap(err) + } + out = append(out, item) + } + return out, nil +} + +// ToProtoAuditQuery converts the audit query to proto. +func ToProtoAuditQuery(in *secreports.AuditQuery) *secreportsv1.AuditQuery { + return &secreportsv1.AuditQuery{ + Header: headerv1.ToResourceHeaderProto(in.ResourceHeader), + Spec: &secreportsv1.AuditQuerySpec{ + Name: in.Spec.Name, + Title: in.Spec.Title, + Query: in.Spec.Query, + Description: in.Spec.Description, + }, + } +} + +// FromProtoReport converts the security report from proto. +func FromProtoReport(in *secreportsv1.Report) (*secreports.Report, error) { + spec := secreports.ReportSpec{ + Name: in.GetSpec().GetName(), + Description: in.GetSpec().GetDescription(), + AuditQueries: ToProtoAudiQueriesSpec(in.Spec.GetAuditQueries()), + Title: in.GetSpec().GetTitle(), + Version: in.GetSpec().GetVersion(), + } + out, err := secreports.NewReport(headerv1.FromMetadataProto(in.Header.Metadata), spec) + if err != nil { + return nil, trace.Wrap(err) + } + return out, nil +} + +// FromProtoReports converts the security reports from proto. +func FromProtoReports(in []*secreportsv1.Report) ([]*secreports.Report, error) { + out := make([]*secreports.Report, 0, len(in)) + for _, v := range in { + item, err := FromProtoReport(v) + if err != nil { + return nil, trace.Wrap(err) + } + out = append(out, item) + } + return out, nil +} + +// ToProtoAudiQueriesSpec converts the audit queries spec to proto. +func ToProtoAudiQueriesSpec(in []*secreportsv1.AuditQuerySpec) []*secreports.AuditQuerySpec { + out := make([]*secreports.AuditQuerySpec, 0, len(in)) + for _, v := range in { + out = append(out, &secreports.AuditQuerySpec{ + Name: v.GetName(), + Title: v.GetTitle(), + Description: v.GetDescription(), + Query: v.GetQuery(), + }) + } + return out +} + +// ToProtoReport converts the security report to proto. +func ToProtoReport(in *secreports.Report) *secreportsv1.Report { + return &secreportsv1.Report{ + Header: headerv1.ToResourceHeaderProto(in.ResourceHeader), + Spec: &secreportsv1.ReportSpec{ + Name: in.GetName(), + Description: in.Spec.Description, + AuditQueries: FromProtoAuditQueriesSpec(in.Spec.AuditQueries), + Title: in.Spec.Title, + Version: in.Spec.Version, + }, + } +} + +// FromProtoAuditQueriesSpec converts the audit queries spec from proto. +func FromProtoAuditQueriesSpec(in []*secreports.AuditQuerySpec) []*secreportsv1.AuditQuerySpec { + out := make([]*secreportsv1.AuditQuerySpec, 0, len(in)) + for _, v := range in { + out = append(out, &secreportsv1.AuditQuerySpec{ + Name: v.Name, + Title: v.Title, + Query: v.Query, + Description: v.Description, + }) + } + return out +} + +// FromProtoReportState converts the security report state from proto. +func FromProtoReportState(in *secreportsv1.ReportState) (*secreports.ReportState, error) { + t, err := time.Parse(time.RFC3339, in.GetSpec().GetUpdatedAt()) + if err != nil { + return nil, trace.Wrap(err) + } + spec := secreports.ReportStateSpec{ + Status: secreports.Status(in.GetSpec().GetState()), + UpdatedAt: t.UTC(), + } + out, err := secreports.NewReportState(headerv1.FromMetadataProto(in.GetHeader().GetMetadata()), spec) + if err != nil { + return nil, trace.Wrap(err) + } + return out, nil +} + +// ToProtoReportState converts the security report state to proto. +func ToProtoReportState(in *secreports.ReportState) *secreportsv1.ReportState { + return &secreportsv1.ReportState{ + Header: headerv1.ToResourceHeaderProto(in.ResourceHeader), + Spec: &secreportsv1.ReportStateSpec{ + State: string(in.Spec.Status), + UpdatedAt: in.Spec.UpdatedAt.Format(time.RFC3339), + }, + } +} diff --git a/api/types/secreports/secreports.go b/api/types/secreports/secreports.go new file mode 100644 index 0000000000000..e391be6804878 --- /dev/null +++ b/api/types/secreports/secreports.go @@ -0,0 +1,242 @@ +/* +Copyright 2023 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package secreports + +import ( + "fmt" + "time" + + "github.com/gravitational/trace" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/header" + "github.com/gravitational/teleport/api/types/header/convert/legacy" +) + +// Report is security report. +type Report struct { + // ResourceHeader is the resource header. + header.ResourceHeader + // Spec is the security report spec. + Spec ReportSpec `json:"spec" yaml:"spec"` +} + +// ReportSpec is the security report spec. +type ReportSpec struct { + // Name is the Report name. + Name string `json:"name,omitempty" yaml:"name,omitempty"` + // Title is the Report title. + Title string `json:"title,omitempty" yaml:"title,omitempty"` + // Description is the Report description. + Description string `json:"desc,omitempty" yaml:"desc,omitempty"` + // AuditQueries is the Report audit query. + AuditQueries []*AuditQuerySpec `json:"audit_queries,omitempty" yaml:"queries,omitempty"` + // Version is the Reports version. + Version string `json:"version,omitempty" yaml:"version,omitempty"` +} + +// AuditQuery is the audit query resource. +type AuditQuery struct { + // ResourceHeader is the resource header. + header.ResourceHeader + // Spec is the audit query specification. + Spec AuditQuerySpec `json:"spec" yaml:"spec"` +} + +// AuditQuerySpec is the audit query specification. +type AuditQuerySpec struct { + // Name is the AuditQuery name. + Name string `json:"name,omitempty" yaml:"name,omitempty"` + // Title is the AuditQuery title. + Title string `json:"title,omitempty" yaml:"title,omitempty"` + // Description is the AuditQuery description. + Description string `json:"description,omitempty" yaml:"description,omitempty"` + // Query is the AuditQuery query. + Query string `json:"query,omitempty" yaml:"query,omitempty"` +} + +// CheckAndSetDefaults validates fields and populates empty fields with default values. +func (a *AuditQuery) CheckAndSetDefaults() error { + a.SetKind(types.KindAuditQuery) + a.SetVersion(types.V1) + + if err := a.ResourceHeader.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + return nil +} + +// NewAuditQuery creates a new audit query. +func NewAuditQuery(metadata header.Metadata, spec AuditQuerySpec) (*AuditQuery, error) { + secReport := &AuditQuery{ + ResourceHeader: header.ResourceHeaderFromMetadata(metadata), + Spec: spec, + } + if err := secReport.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + return secReport, nil +} + +// NewReport creates a new security report. +func NewReport(metadata header.Metadata, spec ReportSpec) (*Report, error) { + secReport := &Report{ + ResourceHeader: header.ResourceHeaderFromMetadata(metadata), + Spec: spec, + } + if err := secReport.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + return secReport, nil +} + +// CheckAndSetDefaults validates fields and populates empty fields with default values. +func (a *Report) CheckAndSetDefaults() error { + a.SetKind(types.KindSecurityReport) + a.SetVersion(types.V1) + + if err := a.ResourceHeader.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + return nil +} + +// GetMetadata returns metadata. This is specifically for conforming to the Resource interface, +// and should be removed when possible. +func (a *Report) GetMetadata() types.Metadata { + return legacy.FromHeaderMetadata(a.Metadata) +} + +// GetMetadata returns metadata. This is specifically for conforming to the Resource interface, +// and should be removed when possible. +func (a *AuditQuery) GetMetadata() types.Metadata { + return legacy.FromHeaderMetadata(a.Metadata) +} + +// Status is the status of the security report. +type Status string + +const ( + // Running is the running status. This means the report is currently running. + Running Status = "RUNNING" + // Failed is the failed status. This means the report failed to run. + Failed Status = "FAILED" + // Ready is the ready status. This means the report is ready to be viewed. + Ready Status = "READY" +) + +// ReportState is the security report state. +type ReportState struct { + // ResourceHeader is the resource header. + header.ResourceHeader + // Spec is the security report state specification. + Spec ReportStateSpec `json:"spec,omitempty" yaml:"spec,omitempty"` +} + +// ReportStateSpec is the security report state specification. +type ReportStateSpec struct { + // Name is the Report name. + Status Status `json:"status,omitempty" yaml:"status,omitempty"` + // UpdatedAt is the time the report was updated. + UpdatedAt time.Time `json:"updated_at,omitempty" yaml:"updated_at,omitempty"` +} + +// GetMetadata returns metadata. This is specifically for conforming to the Resource interface, +// and should be removed when possible. +func (a *ReportState) GetMetadata() types.Metadata { + return legacy.FromHeaderMetadata(a.Metadata) +} + +// CheckAndSetDefaults validates fields and populates empty fields with default values. +func (a *ReportState) CheckAndSetDefaults() error { + a.SetKind(types.KindSecurityReportState) + a.SetVersion(types.V1) + + if err := a.ResourceHeader.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + return nil +} + +// NewReportState creates a new security report state. +func NewReportState(metadata header.Metadata, spec ReportStateSpec) (*ReportState, error) { + secReport := &ReportState{ + ResourceHeader: header.ResourceHeaderFromMetadata(metadata), + Spec: spec, + } + if err := secReport.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + return secReport, nil +} + +// ReportExecutionName returns the name of the report execution. +func ReportExecutionName(name string, days int32) string { + return fmt.Sprintf("%s_%d_days", name, days) +} + +// NewCostLimiter creates a new const limiter. +func NewCostLimiter(metadata header.Metadata, spec CostLimiterSpec) (*CostLimiter, error) { + item := &CostLimiter{ + ResourceHeader: header.ResourceHeaderFromMetadata(metadata), + Spec: spec, + } + if err := item.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + return item, nil +} + +// CostLimiter is the security report state. +type CostLimiter struct { + // ResourceHeader is the resource header. + header.ResourceHeader + // Spec is the security report state specification. + Spec CostLimiterSpec `json:"spec,omitempty" yaml:"spec,omitempty"` +} + +// CostLimiterSpec is the security report cost limiter specification. +type CostLimiterSpec struct { + // BytesScanned is the number of bytes scanned. + BytesScanned uint64 `json:"bytes_scanned,omitempty"` + // RefillAt is the time when the limiter should be refilled. + RefillAt time.Time `json:"refill_at,omitempty"` + // RefillAfter is time duration after which the limiter should be refilled. + RefillAfter time.Duration `json:"refill_after,omitempty"` +} + +func (a *CostLimiter) Reset(refillAt time.Time) { + a.Spec.RefillAt = refillAt + a.Spec.BytesScanned = 0 +} + +// GetMetadata returns metadata. This is specifically for conforming to the Resource interface, +// and should be removed when possible. +func (a *CostLimiter) GetMetadata() types.Metadata { + return legacy.FromHeaderMetadata(a.Metadata) +} + +// CheckAndSetDefaults validates fields and populates empty fields with default values. +func (a *CostLimiter) CheckAndSetDefaults() error { + a.SetKind(types.KindSecurityReportCostLimiter) + a.SetVersion(types.V1) + + if err := a.ResourceHeader.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + return nil +} diff --git a/api/types/semaphore.go b/api/types/semaphore.go index f30f5349f939f..6eaf461e6d0f9 100644 --- a/api/types/semaphore.go +++ b/api/types/semaphore.go @@ -42,6 +42,10 @@ const SemaphoreKindKubernetesConnection = "kubernetes_connection" // the number of operations that can occur on a unix user to one at a time const SemaphoreKindHostUserModification = "host_user_modification" +// SemaphoreKindAccessMonitoringLimiter is the semaphore kind used by +// the Access Monitoring feature during handling user queries. +const SemaphoreKindAccessMonitoringLimiter = "access_monitoring_limiter" + // Semaphore represents distributed semaphore concept type Semaphore interface { // Resource contains common resource values diff --git a/gen/go/eventschema/eventtype.go b/gen/go/eventschema/eventtype.go index 3c729e2dd2984..ecba7f5cf3656 100644 --- a/gen/go/eventschema/eventtype.go +++ b/gen/go/eventschema/eventtype.go @@ -43,4 +43,5 @@ var eventTypes = []string{ "user.password_change", "windows.desktop.session.end", "windows.desktop.session.start", + "kube.request", } diff --git a/gen/go/eventschema/getters.go b/gen/go/eventschema/getters.go index b325864596cd8..5fc350cd7d7a3 100644 --- a/gen/go/eventschema/getters.go +++ b/gen/go/eventschema/getters.go @@ -71,87 +71,140 @@ func QueryableEventList() (string, error) { return sb.String(), nil } -// TableSchema returns a CSV description of the event table schema. -// This explains to the query writer which field are available. -// This must not be confused with ViewSchema which returns the Athena SQL -// statements used to build a view extracting content from raw event_data. -func (event *Event) TableSchema() (string, error) { +// TableSchemaDetails describe Athena view schema. +type TableSchemaDetails struct { + // Name is view name + Name string + // SQLViewName is SQL compatible table name. + SQLViewName string + // Description is Athena view description. + Description string + // Columns contains information about columns schema. + Columns []*ColumnSchemaDetails +} + +// CreateView returns a SQL statement to create an Athena view. +// This view is used during a user query execution to extract data from the +// raw event_data column and make data representation more user-friendly. +// CreateView result will be used as in a user SQL query as a query header +// to create dynamic tables. +// Access Monitoring allow users to run any arbitrary Athena SQL query where +// the query scope is limited to by dedicated IAM Role that allows +// only read access to Athena audit event table. +func (d *TableSchemaDetails) CreateView() string { sb := strings.Builder{} - sb.WriteString("column_name, column_type, description\n") - sb.WriteString("event_date, date, is the event date\n") - sb.WriteString("event_time, timestamp, is the event time\n") - for _, prop := range event.Fields { - line, err := prop.TableSchema([]string{prop.Name}) - if err != nil { - return "", trace.Wrap(err) - } - sb.WriteString(line) + sb.WriteString("SELECT\n") + sb.WriteString(" event_date, event_time\n") + for _, v := range d.Columns { + sb.WriteString(viewSchemaLine(v.NameJSON(), v.NameSQL(), v.Type)) } - return sb.String(), nil + return sb.String() } -// TableSchema returns a CSV description of the EventField schema. -// This explains to the query writer which field are available. -func (field *EventField) TableSchema(path []string) (string, error) { +func sqlViewNameForEvent(eventName string) string { + viewName := strings.ReplaceAll(eventName, ".", "_") + return strings.ReplaceAll(viewName, "-", "_") +} + +// ColumnSchemaDetails describe Athena view column schema. +type ColumnSchemaDetails struct { + // Path is column field path. + Path []string + // Type is the column type. + Type string + // Description is the column description. + Description string +} + +func (c *ColumnSchemaDetails) viewSchema() string { + return viewSchemaLine(c.NameJSON(), c.NameSQL(), c.Type) +} + +func (c *ColumnSchemaDetails) tableSchema() string { + return viewSchemaLine(c.NameJSON(), c.NameSQL(), c.Type) +} + +// NameJSON returns a JSON compatible column name. +func (c *ColumnSchemaDetails) NameJSON() string { sb := strings.Builder{} - switch field.Type { - case "object": - for _, prop := range field.Fields { - line, err := prop.TableSchema(append(path, prop.Name)) - if err != nil { - return "", trace.Wrap(err) - } - sb.WriteString(line) - } - case "string", "integer", "boolean", "date-time", "array": - sb.WriteString(tableSchemaLine(sqlFieldName(path), field.dmlType(), field.Description)) - default: - return "", trace.NotImplemented("field type '%s' not supported", field.Type) + sb.WriteString("$") + for _, item := range c.Path { + sb.WriteString(fmt.Sprintf(`["%s"]`, item)) } - return sb.String(), nil + return sb.String() } -// ViewSchema returns the AthenaSQL statement used to build a view extracting -// content from the raw event data. -func (event *Event) ViewSchema() (string, error) { - sb := strings.Builder{} - sb.WriteString("SELECT\n") - sb.WriteString(" event_date, event_time\n") +// NameSQL returns a SQL compatible column name. +func (c *ColumnSchemaDetails) NameSQL() string { + return strings.ReplaceAll(strings.Join(c.Path, "_"), ".", "_") +} +// GetViewsDetails returns a list of Athena view schema. +func GetViewsDetails() ([]*TableSchemaDetails, error) { + var out []*TableSchemaDetails + for _, eventName := range eventTypes { + es, err := GetEventSchemaFromType(eventName) + if err != nil { + return nil, trace.Wrap(err) + } + tb, err := es.TableSchemaDetails() + if err != nil { + return nil, trace.Wrap(err) + } + tb.Name = eventName + tb.SQLViewName = sqlViewNameForEvent(eventName) + out = append(out, tb) + } + return out, nil +} + +// TableSchemaDetails returns a CSV description of the event table schema. +// This explains to the query writer which field are available. +// This must not be confused with ViewSchema which returns the Athena SQL +// statements used to build a view extracting content from raw event_data. +func (event *Event) TableSchemaDetails() (*TableSchemaDetails, error) { + out := TableSchemaDetails{ + Description: event.Description, + } for _, prop := range event.Fields { - line, err := prop.ViewSchema([]string{prop.Name}) + columns, err := prop.TableSchemaDetails([]string{prop.Name}) if err != nil { - return "", trace.Wrap(err) + return nil, trace.Wrap(err) } - sb.WriteString(line) + if columns == nil { + continue + } + out.Columns = append(out.Columns, columns...) } - return sb.String(), nil + return &out, nil } -// ViewSchema returns the AthenaSQL statement used to build a view extracting -// content from the raw event data. -func (field *EventField) ViewSchema(path []string) (string, error) { - sb := strings.Builder{} +// TableSchemaDetails returns a CSV description of the EventField schema. +// This explains to the query writer which field are available. +func (field *EventField) TableSchemaDetails(path []string) ([]*ColumnSchemaDetails, error) { switch field.Type { case "object": + var out []*ColumnSchemaDetails for _, prop := range field.Fields { - line, err := prop.ViewSchema(append(path, prop.Name)) + r, err := prop.TableSchemaDetails(append(path, prop.Name)) if err != nil { - return "", trace.Wrap(err) + return nil, trace.Wrap(err) } - sb.WriteString(line) + out = append(out, r...) } - + return out, nil case "string", "integer", "boolean", "date-time", "array": - sb.WriteString(viewSchemaLine(jsonFieldName(path), sqlFieldName(path), field.dmlType())) + return []*ColumnSchemaDetails{ + { + Path: path, + Type: field.dmlType(), + Description: field.Description, + }, + }, nil default: - return "", trace.NotImplemented("field type '%s' not supported", field.Type) + return nil, trace.NotImplemented("field type '%s' not supported", field.Type) } - return sb.String(), nil -} - -func tableSchemaLine(columnName, columnType, description string) string { - return fmt.Sprintf("%s, %s, %s\n", columnName, columnType, description) + return nil, nil } func (field *EventField) dmlType() string { @@ -217,3 +270,47 @@ func IsValidEventType(input string) bool { } return false } + +// TableSchema returns a CSV description of the event table schema. +// This explains to the query writer which field are available. +// This must not be confused with ViewSchema which returns the Athena SQL +// statements used to build a view extracting content from raw event_data. +func (event *Event) TableSchema() (string, error) { + sb := strings.Builder{} + sb.WriteString("column_name, column_type, description\n") + sb.WriteString("event_date, date, is the event date\n") + sb.WriteString("event_time, timestamp, is the event time\n") + for _, prop := range event.Fields { + line, err := prop.TableSchema([]string{prop.Name}) + if err != nil { + return "", trace.Wrap(err) + } + sb.WriteString(line) + } + return sb.String(), nil +} + +// TableSchema returns a CSV description of the EventField schema. +// This explains to the query writer which field are available. +func (field *EventField) TableSchema(path []string) (string, error) { + sb := strings.Builder{} + switch field.Type { + case "object": + for _, prop := range field.Fields { + line, err := prop.TableSchema(append(path, prop.Name)) + if err != nil { + return "", trace.Wrap(err) + } + sb.WriteString(line) + } + case "string", "integer", "boolean", "date-time", "array": + sb.WriteString(tableSchemaLine(sqlFieldName(path), field.dmlType(), field.Description)) + default: + return "", trace.NotImplemented("field type '%s' not supported", field.Type) + } + return sb.String(), nil +} + +func tableSchemaLine(columnName, columnType, description string) string { + return fmt.Sprintf("%s, %s, %s\n", columnName, columnType, description) +} diff --git a/gen/go/eventschema/getters_test.go b/gen/go/eventschema/getters_test.go index 61e363be5c0f3..7d0fbb7df8b3c 100644 --- a/gen/go/eventschema/getters_test.go +++ b/gen/go/eventschema/getters_test.go @@ -15,6 +15,8 @@ package eventschema import ( + "fmt" + "strings" "testing" "github.com/stretchr/testify/require" @@ -30,16 +32,9 @@ func TestQueryableEventList(t *testing.T) { // Large smoke test that checks if there are no errors when dumping schemas for // all events. func TestAllAthenaSchemas(t *testing.T) { - for _, eventType := range eventTypes { - schema, err := GetEventSchemaFromType(eventType) - require.NoError(t, err) - viewSchema, err := schema.ViewSchema() - require.NoError(t, err) - require.NotEmpty(t, viewSchema) - tableSchema, err := schema.TableSchema() - require.NoError(t, err) - require.NotEmpty(t, tableSchema) - } + details, err := GetViewsDetails() + require.NoError(t, err) + require.Len(t, details, len(eventTypes)) } // Checks that different kinds of event fields are rendered properly. @@ -168,15 +163,59 @@ func TestEventField_Schemas(t *testing.T) { expectedViewSchema: " , CAST(json_extract(event_data, '$[\"foo\"]') AS array(row(bar varchar))) as foo\n", expectedTableSchema: "foo, array(row(bar varchar)), description\n", }, + { + name: "2-level object 2-elements", + field: EventField{ + Type: "object", + Description: testDescription, + Fields: []*EventField{ + { + Name: "bar", + Type: "object", + Description: testDescription, + Fields: []*EventField{ + { + Name: "baz", + Type: "string", + Description: testDescription, + }, + { + Name: "bar", + Type: "string", + Description: testDescription, + }, + }, + }, + }, + }, + fieldName: "foo", + expectedViewSchema: strings.Join([]string{ + " , CAST(json_extract(event_data, '$[\"foo\"][\"bar\"][\"baz\"]') AS varchar) as foo_bar_baz\n", + " , CAST(json_extract(event_data, '$[\"foo\"][\"bar\"][\"bar\"]') AS varchar) as foo_bar_bar\n", + }, ""), + expectedTableSchema: strings.Join([]string{ + "foo_bar_baz, varchar, description\n", + "foo_bar_bar, varchar, description\n", + }, ""), + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { path := []string{tt.fieldName} - viewSchema, err := tt.field.ViewSchema(path) + fields, err := tt.field.TableSchemaDetails(path) + var sb strings.Builder + for _, v := range fields { + sb.WriteString(v.viewSchema()) + } + require.NoError(t, err) - require.Equal(t, tt.expectedViewSchema, viewSchema) - tableSchema, err := tt.field.TableSchema(path) - require.Equal(t, tt.expectedTableSchema, tableSchema) + require.Equal(t, tt.expectedViewSchema, sb.String()) + sb.Reset() + for _, v := range fields { + tableSchema := fmt.Sprintf("%v, %v, %v\n", v.NameSQL(), v.Type, v.Description) + sb.WriteString(tableSchema) + } + require.Equal(t, tt.expectedTableSchema, sb.String()) }) } } diff --git a/gen/go/eventschema/zz_generated.eventschema.go b/gen/go/eventschema/zz_generated.eventschema.go index 1f0a542b643d8..eeb9c4caef833 100644 --- a/gen/go/eventschema/zz_generated.eventschema.go +++ b/gen/go/eventschema/zz_generated.eventschema.go @@ -201,6 +201,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -316,6 +321,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -462,6 +472,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -602,6 +617,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -722,6 +742,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -932,6 +957,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -1122,6 +1152,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -1317,6 +1352,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -1627,6 +1667,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -1772,6 +1817,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -1801,6 +1851,146 @@ var events = map[string]*Event{ }, }, }, + "AuditQueryRun": { + Description: "is emitted when a user runs an audit query", + Fields: []*EventField{ + { + Name: "access_requests", + Description: "are the IDs of access requests created by the user", + Type: "array", + Items: &EventField{ + Type: "string", + }, + }, + { + Name: "aws_role_arn", + Description: "is AWS IAM role user assumes when accessing AWS console", + Type: "string", + }, + { + Name: "azure_identity", + Description: "is the Azure identity user assumes when accessing Azure API", + Type: "string", + }, + { + Name: "cluster_name", + Description: "identifies the originating teleport cluster", + Type: "string", + }, + { + Name: "code", + Description: "is a unique event code", + Type: "string", + }, + { + Name: "data_scanned_in_bytes", + Description: "is the amount of data scanned by the query", + Type: "integer", + }, + { + Name: "days", + Description: "is the number of days time range for the query", + Type: "integer", + }, + { + Name: "ei", + Description: "is a monotonically incremented index in the event sequence", + Type: "integer", + }, + { + Name: "error", + Description: "includes system error message for the failed attempt", + Type: "string", + }, + { + Name: "event", + Description: "is the event type", + Type: "string", + }, + { + Name: "gcp_service_account", + Description: "is the GCP service account user assumes when accessing GCP API", + Type: "string", + }, + { + Name: "impersonator", + Description: "is a user acting on behalf of another user", + Type: "string", + }, + { + Name: "login", + Description: "is OS login", + Type: "string", + }, + { + Name: "message", + Description: "is a user-friendly message for successfull or unsuccessfull auth attempt", + Type: "string", + }, + { + Name: "query", + Description: "is the query that was run", + Type: "string", + }, + { + Name: "success", + Description: "indicates the success or failure of the operation", + Type: "boolean", + }, + { + Name: "time", + Description: "is event time", + Type: "string", + }, + { + Name: "total_execution_time_in_millis", + Description: "is the total execution time of the query", + Type: "integer", + }, + { + Name: "trusted_device", + Description: "contains information about the users' trusted device. Requires a registered and enrolled device to be used during authentication", + Type: "object", + Fields: []*EventField{ + { + Name: "asset_tag", + Description: "inventory identifier", + Type: "string", + }, + { + Name: "credential_id", + Description: "credential identifier", + Type: "string", + }, + { + Name: "device_id", + Description: "of the device", + Type: "string", + }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, + { + Name: "os_type", + Description: "of the device", + Type: "integer", + }, + }, + }, + { + Name: "uid", + Description: "is a unique event identifier", + Type: "string", + }, + { + Name: "user", + Description: "is teleport user name", + Type: "string", + }, + }, + }, "AuthAttempt": { Description: "is emitted upon a failed or successfull authentication attempt", Fields: []*EventField{ @@ -1912,6 +2102,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -2012,6 +2207,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -2112,6 +2312,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -2212,6 +2417,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -2511,6 +2721,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -2704,6 +2919,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -2902,6 +3122,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -3098,6 +3323,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -3557,6 +3787,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -3745,6 +3980,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -3865,6 +4105,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -4058,6 +4303,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -4246,6 +4496,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -4462,6 +4717,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -4725,6 +4985,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -4918,6 +5183,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -5058,6 +5328,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -5193,6 +5468,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -5403,6 +5683,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -5558,6 +5843,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -5728,6 +6018,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -5785,6 +6080,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -5892,6 +6192,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -5959,6 +6264,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -6031,6 +6341,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -6243,6 +6558,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -6471,6 +6791,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -6717,6 +7042,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -6832,6 +7162,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -6952,6 +7287,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -7049,6 +7389,11 @@ var events = map[string]*Event{ Description: "is event time", Type: "string", }, + { + Name: "token_expires", + Description: "contain information about token expiration time. In case of static token the TokenExpiration time is to the Unix epoch start time", + Type: "string", + }, { Name: "token_name", Description: "is the name of the token used to join. This will be omitted for the 'token' join method where the token name is a secret value", @@ -7244,8 +7589,13 @@ var events = map[string]*Event{ Type: "string", }, { - Name: "time", - Description: "is event time", + Name: "sid", + Description: "is a unique UUID of the session", + Type: "string", + }, + { + Name: "time", + Description: "is event time", Type: "string", }, { @@ -7268,6 +7618,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -7290,6 +7645,11 @@ var events = map[string]*Event{ Description: "is the HTTP verb used for this request (e.g. GET, POST, etc)", Type: "string", }, + { + Name: "with_mfa", + Description: "is a UUID of an MFA device used to start this session", + Type: "string", + }, }, }, "KubernetesClusterCreate": { @@ -7398,6 +7758,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -7518,6 +7883,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -7653,6 +8023,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -7825,6 +8200,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -7945,6 +8325,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -8065,6 +8450,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -8185,6 +8575,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -8310,6 +8705,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -8425,6 +8825,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -8613,6 +9018,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -8801,6 +9211,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -8994,6 +9409,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -9187,6 +9607,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -9380,6 +9805,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -9573,6 +10003,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -9761,6 +10196,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -9962,6 +10402,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -10155,6 +10600,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -10356,6 +10806,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -10554,6 +11009,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -10747,6 +11207,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -10940,6 +11405,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -11143,6 +11613,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -11258,6 +11733,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -11378,6 +11858,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -11996,6 +12481,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -12136,6 +12626,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -12337,6 +12832,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -12535,6 +13035,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -12728,6 +13233,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -12929,6 +13439,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -13127,6 +13642,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -13253,6 +13773,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -13363,6 +13888,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -13478,6 +14008,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -13578,6 +14113,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -13809,6 +14349,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -13924,6 +14469,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -14044,6 +14594,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -14164,6 +14719,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -14284,6 +14844,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -14424,6 +14989,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -14869,6 +15439,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -15129,6 +15704,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -15335,6 +15915,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -15424,6 +16009,176 @@ var events = map[string]*Event{ }, }, }, + "SecurityReportRun": { + Description: " is emitted when a user runs an audit query", + Fields: []*EventField{ + { + Name: "access_requests", + Description: "are the IDs of access requests created by the user", + Type: "array", + Items: &EventField{ + Type: "string", + }, + }, + { + Name: "audit_queries", + Description: "is the list of audit queries that were run", + Type: "array", + Items: &EventField{ + Type: "object", + Fields: []*EventField{ + { + Name: "data_scanned_in_bytes", + Description: "is the amount of data scanned by the query", + Type: "integer", + }, + { + Name: "days", + Description: "is the number of days time range for the query", + Type: "integer", + }, + { + Name: "query", + Description: "is the query that was run", + Type: "string", + }, + { + Name: "total_execution_time_in_millis", + Description: "is the total execution time of the query", + Type: "integer", + }, + }, + }, + }, + { + Name: "aws_role_arn", + Description: "is AWS IAM role user assumes when accessing AWS console", + Type: "string", + }, + { + Name: "azure_identity", + Description: "is the Azure identity user assumes when accessing Azure API", + Type: "string", + }, + { + Name: "cluster_name", + Description: "identifies the originating teleport cluster", + Type: "string", + }, + { + Name: "code", + Description: "is a unique event code", + Type: "string", + }, + { + Name: "data_scanned_in_bytes", + Description: "is the amount of data scanned by the query", + Type: "integer", + }, + { + Name: "ei", + Description: "is a monotonically incremented index in the event sequence", + Type: "integer", + }, + { + Name: "error", + Description: "includes system error message for the failed attempt", + Type: "string", + }, + { + Name: "event", + Description: "is the event type", + Type: "string", + }, + { + Name: "gcp_service_account", + Description: "is the GCP service account user assumes when accessing GCP API", + Type: "string", + }, + { + Name: "impersonator", + Description: "is a user acting on behalf of another user", + Type: "string", + }, + { + Name: "login", + Description: "is OS login", + Type: "string", + }, + { + Name: "message", + Description: "is a user-friendly message for successfull or unsuccessfull auth attempt", + Type: "string", + }, + { + Name: "name", + Description: "is the query that was run", + Type: "string", + }, + { + Name: "success", + Description: "indicates the success or failure of the operation", + Type: "boolean", + }, + { + Name: "time", + Description: "is event time", + Type: "string", + }, + { + Name: "total_execution_time_in_millis", + Description: "is the total execution time of the query", + Type: "integer", + }, + { + Name: "trusted_device", + Description: "contains information about the users' trusted device. Requires a registered and enrolled device to be used during authentication", + Type: "object", + Fields: []*EventField{ + { + Name: "asset_tag", + Description: "inventory identifier", + Type: "string", + }, + { + Name: "credential_id", + Description: "credential identifier", + Type: "string", + }, + { + Name: "device_id", + Description: "of the device", + Type: "string", + }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, + { + Name: "os_type", + Description: "of the device", + Type: "integer", + }, + }, + }, + { + Name: "uid", + Description: "is a unique event identifier", + Type: "string", + }, + { + Name: "user", + Description: "is teleport user name", + Type: "string", + }, + { + Name: "version", + Description: "is the version of security report", + Type: "string", + }, + }, + }, "SessionCommand": { Description: "is a session command event", Fields: []*EventField{ @@ -15593,6 +16348,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -15863,6 +16623,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -16053,6 +16818,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -16325,6 +17095,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -16531,6 +17306,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -16701,6 +17481,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -16896,6 +17681,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -17066,6 +17856,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -17236,6 +18031,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -17480,6 +18280,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -17660,6 +18465,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -17770,6 +18580,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -17890,6 +18705,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -18010,6 +18830,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -18175,6 +19000,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -18308,6 +19138,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -18428,6 +19263,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -18608,6 +19448,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -18713,6 +19558,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -18823,6 +19673,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -18986,6 +19841,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -19166,6 +20026,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", @@ -19316,6 +20181,11 @@ var events = map[string]*Event{ Description: "of the device", Type: "string", }, + { + Name: "device_origin", + Description: "origin", + Type: "integer", + }, { Name: "os_type", Description: "of the device", diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto index c2ba486453431..8c3470c2a7ea6 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto @@ -3185,6 +3185,13 @@ message InstanceJoin { (gogoproto.jsontag) = "attributes,omitempty", (gogoproto.casttype) = "Struct" ]; + // TokenExpires contain information about token expiration time. + // In case of static token the TokenExpiration time is to the Unix epoch start time. + google.protobuf.Timestamp TokenExpires = 9 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "token_expires" + ]; } // Unknown is a fallback event used when we don't recognize an event from the backend. diff --git a/lib/auth/auth.go b/lib/auth/auth.go index e0e482de6ef45..749fae940e2b9 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -58,6 +58,7 @@ import ( "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/client" "github.com/gravitational/teleport/api/client/proto" + "github.com/gravitational/teleport/api/client/secreport" "github.com/gravitational/teleport/api/constants" apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/gen/proto/go/assist/v1" @@ -242,6 +243,12 @@ func NewServer(cfg *InitConfig, opts ...ServerOption) (*Server, error) { return nil, trace.Wrap(err) } } + if cfg.SecReports == nil { + cfg.SecReports, err = local.NewSecReportsService(cfg.Backend, cfg.Clock) + if err != nil { + return nil, trace.Wrap(err) + } + } if cfg.AccessLists == nil { cfg.AccessLists, err = local.NewAccessListService(cfg.Backend, cfg.Clock) if err != nil { @@ -325,6 +332,7 @@ func NewServer(cfg *InitConfig, opts ...ServerOption) (*Server, error) { Embeddings: cfg.Embeddings, Okta: cfg.Okta, AccessLists: cfg.AccessLists, + SecReports: cfg.SecReports, UserLoginStates: cfg.UserLoginState, StatusInternal: cfg.Status, UsageReporter: cfg.UsageReporter, @@ -468,6 +476,12 @@ type Services struct { usagereporter.UsageReporter types.Events events.AuditLogSessionStreamer + services.SecReports +} + +// SecReportsClient returns the security reports client. +func (r *Services) SecReportsClient() *secreport.Client { + return nil } // GetWebSession returns existing web session described by req. diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index 50e201f5d9c65..74171f78b50a3 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -40,6 +40,7 @@ import ( "github.com/gravitational/teleport/api/client/externalcloudaudit" "github.com/gravitational/teleport/api/client/okta" "github.com/gravitational/teleport/api/client/proto" + "github.com/gravitational/teleport/api/client/secreport" "github.com/gravitational/teleport/api/client/userloginstate" "github.com/gravitational/teleport/api/constants" apidefaults "github.com/gravitational/teleport/api/defaults" @@ -54,6 +55,7 @@ import ( pluginspb "github.com/gravitational/teleport/api/gen/proto/go/teleport/plugins/v1" resourceusagepb "github.com/gravitational/teleport/api/gen/proto/go/teleport/resourceusage/v1" samlidppb "github.com/gravitational/teleport/api/gen/proto/go/teleport/samlidp/v1" + secreportsv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/secreports/v1" trustpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/trust/v1" userloginstatev1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/userloginstate/v1" userpreferencespb "github.com/gravitational/teleport/api/gen/proto/go/userpreferences/v1" @@ -385,6 +387,15 @@ func (a *ServerWithRoles) UserLoginStateClient() services.UserLoginStates { utils.NewGRPCDummyClientConnection("UserLoginStateClient() should not be called on ServerWithRoles"))) } +// SecReportsClient returns a client for the SecReports service. +// It should not be called through ServerWithRoles, +// as it returns a dummy client that will always respond with "not implemented". +func (a *ServerWithRoles) SecReportsClient() *secreport.Client { + return secreport.NewClient(secreportsv1.NewSecReportsServiceClient( + utils.NewGRPCDummyClientConnection("SecReportsClient() should not be called on ServerWithRoles"), + )) +} + // integrationsService returns an Integrations Service. func (a *ServerWithRoles) integrationsService() (*integrationv1.Service, error) { igSvc, err := integrationv1.NewService(&integrationv1.ServiceConfig{ diff --git a/lib/auth/clt.go b/lib/auth/clt.go index 1938ddc354a9d..77f42dffcdcc5 100644 --- a/lib/auth/clt.go +++ b/lib/auth/clt.go @@ -27,6 +27,7 @@ import ( "github.com/gravitational/teleport/api/client" "github.com/gravitational/teleport/api/client/proto" + "github.com/gravitational/teleport/api/client/secreport" apidefaults "github.com/gravitational/teleport/api/defaults" assistpb "github.com/gravitational/teleport/api/gen/proto/go/assist/v1" devicepb "github.com/gravitational/teleport/api/gen/proto/go/teleport/devicetrust/v1" @@ -439,6 +440,11 @@ func (c *Client) OktaClient() services.Okta { return c.APIClient.OktaClient() } +// SecReportsClient returns a client for security reports. +func (c *Client) SecReportsClient() *secreport.Client { + return c.APIClient.SecReportsClient() +} + func (c *Client) AccessListClient() services.AccessLists { return c.APIClient.AccessListClient() } @@ -881,6 +887,12 @@ type ClientI interface { // (as per the default gRPC behavior). AccessListClient() services.AccessLists + // SecReportsClient returns a client for security reports. + // Clients connecting to older Teleport versions, still get an access list client + // when calling this method, but all RPCs will return "not implemented" errors + // (as per the default gRPC behavior). + SecReportsClient() *secreport.Client + // UserLoginStateClient returns a user login state client. // Clients connecting to older Teleport versions still get a user login state client // when calling this method, but all RPCs will return "not implemented" errors diff --git a/lib/auth/helpers.go b/lib/auth/helpers.go index 41d432dacfde2..62d0a6bbb41a0 100644 --- a/lib/auth/helpers.go +++ b/lib/auth/helpers.go @@ -770,7 +770,7 @@ func NewTestTLSServer(cfg TestTLSServerConfig) (*TestTLSServer, error) { return nil, trace.Wrap(err) } - srv.TLSServer, err = NewTLSServer(TLSServerConfig{ + srv.TLSServer, err = NewTLSServer(context.Background(), TLSServerConfig{ Listener: srv.Listener, AccessPoint: accessPoint, TLS: tlsConfig, diff --git a/lib/auth/init.go b/lib/auth/init.go index 6b328790311e7..24f0421a55bb7 100644 --- a/lib/auth/init.go +++ b/lib/auth/init.go @@ -245,6 +245,9 @@ type InitConfig struct { // UserLoginStates is a service that manages user login states. UserLoginState services.UserLoginStates + // SecReports is a service that manages security reports. + SecReports services.SecReports + // Clock is the clock instance auth uses. Typically you'd only want to set // this during testing. Clock clockwork.Clock diff --git a/lib/auth/join.go b/lib/auth/join.go index 9a8c602335b99..2f3be9cf333e7 100644 --- a/lib/auth/join.go +++ b/lib/auth/join.go @@ -310,11 +310,12 @@ func (a *Server) generateCerts( Status: apievents.Status{ Success: true, }, - NodeName: req.NodeName, - Role: string(req.Role), - Method: string(provisionToken.GetJoinMethod()), - TokenName: provisionToken.GetSafeName(), - HostID: req.HostID, + NodeName: req.NodeName, + Role: string(req.Role), + Method: string(provisionToken.GetJoinMethod()), + TokenName: provisionToken.GetSafeName(), + TokenExpires: provisionToken.Expiry(), + HostID: req.HostID, } if joinAttributeSrc != nil { attributes, err := joinAttributeSrc.JoinAuditAttributes() diff --git a/lib/auth/middleware.go b/lib/auth/middleware.go index b69eaaf3e1cf5..23bccfc68f9e1 100644 --- a/lib/auth/middleware.go +++ b/lib/auth/middleware.go @@ -138,7 +138,7 @@ type TLSServer struct { } // NewTLSServer returns new unstarted TLS server -func NewTLSServer(cfg TLSServerConfig) (*TLSServer, error) { +func NewTLSServer(ctx context.Context, cfg TLSServerConfig) (*TLSServer, error) { if err := cfg.CheckAndSetDefaults(); err != nil { return nil, trace.Wrap(err) } @@ -221,7 +221,7 @@ func NewTLSServer(cfg TLSServerConfig) (*TLSServer, error) { } if cfg.PluginRegistry != nil { - if err := cfg.PluginRegistry.RegisterAuthServices(server.grpcServer); err != nil { + if err := cfg.PluginRegistry.RegisterAuthServices(ctx, server.grpcServer); err != nil { return nil, trace.Wrap(err) } } diff --git a/lib/authz/permissions.go b/lib/authz/permissions.go index 672778d2d85ba..f261b08386103 100644 --- a/lib/authz/permissions.go +++ b/lib/authz/permissions.go @@ -620,6 +620,9 @@ func roleSpecForProxy(clusterName string) types.RoleSpecV6 { types.NewRule(types.KindUserGroup, services.RO()), types.NewRule(types.KindClusterMaintenanceConfig, services.RO()), types.NewRule(types.KindIntegration, append(services.RO(), types.VerbUse)), + types.NewRule(types.KindAuditQuery, services.RO()), + types.NewRule(types.KindSecurityReport, services.RO()), + types.NewRule(types.KindSecurityReportState, services.RO()), // this rule allows cloud proxies to read // plugins of `openai` type, since Assist uses the OpenAI API and runs in Proxy. { diff --git a/lib/cache/cache.go b/lib/cache/cache.go index 24c23fef004fe..0bd69618f8488 100644 --- a/lib/cache/cache.go +++ b/lib/cache/cache.go @@ -37,6 +37,7 @@ import ( apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/discoveryconfig" + "github.com/gravitational/teleport/api/types/secreports" "github.com/gravitational/teleport/api/types/userloginstate" "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/backend" @@ -118,6 +119,9 @@ func ForAuth(cfg Config) Config { {Kind: types.KindHeadlessAuthentication}, {Kind: types.KindUserLoginState}, {Kind: types.KindDiscoveryConfig}, + {Kind: types.KindAuditQuery}, + {Kind: types.KindSecurityReport}, + {Kind: types.KindSecurityReportState}, } cfg.QueueSize = defaults.AuthQueueSize // We don't want to enable partial health for auth cache because auth uses an event stream @@ -164,6 +168,9 @@ func ForProxy(cfg Config) Config { {Kind: types.KindSAMLIdPServiceProvider}, {Kind: types.KindUserGroup}, {Kind: types.KindIntegration}, + {Kind: types.KindAuditQuery}, + {Kind: types.KindSecurityReport}, + {Kind: types.KindSecurityReportState}, } cfg.QueueSize = defaults.ProxyQueueSize return cfg @@ -476,6 +483,7 @@ type Cache struct { integrationsCache services.Integrations discoveryConfigsCache services.DiscoveryConfigs headlessAuthenticationsCache services.HeadlessAuthenticationService + secReportsCache services.SecReports userLoginStateCache services.UserLoginStates eventsFanout *services.FanoutSet @@ -634,6 +642,8 @@ type Config struct { DiscoveryConfigs services.DiscoveryConfigs // UserLoginStates is the user login state service. UserLoginStates services.UserLoginStates + // SecEvents is the security report service. + SecReports services.SecReports // Backend is a backend for local cache Backend backend.Backend // MaxRetryPeriod is the maximum period between cache retries on failures @@ -809,6 +819,12 @@ func New(config Config) (*Cache, error) { return nil, trace.Wrap(err) } + secReprotsCache, err := local.NewSecReportsService(config.Backend, config.Clock) + if err != nil { + cancel() + return nil, trace.Wrap(err) + } + userLoginStatesCache, err := local.NewUserLoginStateService(config.Backend) if err != nil { cancel() @@ -845,6 +861,7 @@ func New(config Config) (*Cache, error) { integrationsCache: integrationsCache, discoveryConfigsCache: discoveryConfigsCache, headlessAuthenticationsCache: local.NewIdentityService(config.Backend), + secReportsCache: secReprotsCache, userLoginStateCache: userLoginStatesCache, eventsFanout: services.NewFanoutSet(), Logger: log.WithFields(log.Fields{ @@ -2505,6 +2522,123 @@ func (c *Cache) GetDiscoveryConfig(ctx context.Context, name string) (*discovery return rg.reader.GetDiscoveryConfig(ctx, name) } +// GetSecurityAuditQuery returns the specified audit query resource. +func (c *Cache) GetSecurityAuditQuery(ctx context.Context, name string) (*secreports.AuditQuery, error) { + ctx, span := c.Tracer.Start(ctx, "cache/GetSecurityAuditQuery") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.auditQueries) + if err != nil { + return nil, trace.Wrap(err) + } + defer rg.Release() + return rg.reader.GetSecurityAuditQuery(ctx, name) +} + +// GetSecurityAuditQueries returns a list of all audit query resources. +func (c *Cache) GetSecurityAuditQueries(ctx context.Context) ([]*secreports.AuditQuery, error) { + ctx, span := c.Tracer.Start(ctx, "cache/GetSecurityAuditQueries") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.auditQueries) + if err != nil { + return nil, trace.Wrap(err) + } + defer rg.Release() + return rg.reader.GetSecurityAuditQueries(ctx) +} + +// ListSecurityAuditQueries returns a paginated list of all audit query resources. +func (c *Cache) ListSecurityAuditQueries(ctx context.Context, pageSize int, nextKey string) ([]*secreports.AuditQuery, string, error) { + ctx, span := c.Tracer.Start(ctx, "cache/ListSecurityAuditQueries") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.auditQueries) + if err != nil { + return nil, "", trace.Wrap(err) + } + defer rg.Release() + return rg.reader.ListSecurityAuditQueries(ctx, pageSize, nextKey) +} + +// GetSecurityReport returns the specified security report resource. +func (c *Cache) GetSecurityReport(ctx context.Context, name string) (*secreports.Report, error) { + ctx, span := c.Tracer.Start(ctx, "cache/GetSecurityReport") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.secReports) + if err != nil { + return nil, trace.Wrap(err) + } + defer rg.Release() + return rg.reader.GetSecurityReport(ctx, name) +} + +// GetSecurityReports returns a list of all security report resources. +func (c *Cache) GetSecurityReports(ctx context.Context) ([]*secreports.Report, error) { + ctx, span := c.Tracer.Start(ctx, "cache/GetSecurityReports") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.secReports) + if err != nil { + return nil, trace.Wrap(err) + } + defer rg.Release() + return rg.reader.GetSecurityReports(ctx) +} + +// ListSecurityReports returns a paginated list of all security report resources. +func (c *Cache) ListSecurityReports(ctx context.Context, pageSize int, nextKey string) ([]*secreports.Report, string, error) { + ctx, span := c.Tracer.Start(ctx, "cache/ListSecurityReports") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.secReports) + if err != nil { + return nil, "", trace.Wrap(err) + } + defer rg.Release() + return rg.reader.ListSecurityReports(ctx, pageSize, nextKey) +} + +// GetSecurityReportState returns the specified security report state resource. +func (c *Cache) GetSecurityReportState(ctx context.Context, name string) (*secreports.ReportState, error) { + ctx, span := c.Tracer.Start(ctx, "cache/GetSecurityReportState") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.secReportsStates) + if err != nil { + return nil, trace.Wrap(err) + } + defer rg.Release() + return rg.reader.GetSecurityReportState(ctx, name) +} + +// GetSecurityReportsStates returns a list of all security report resources. +func (c *Cache) GetSecurityReportsStates(ctx context.Context) ([]*secreports.ReportState, error) { + ctx, span := c.Tracer.Start(ctx, "cache/GetSecurityReportsStates") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.secReportsStates) + if err != nil { + return nil, trace.Wrap(err) + } + defer rg.Release() + return rg.reader.GetSecurityReportsStates(ctx) +} + +// ListSecurityReportsStates returns a paginated list of all security report resources. +func (c *Cache) ListSecurityReportsStates(ctx context.Context, pageSize int, nextKey string) ([]*secreports.ReportState, string, error) { + ctx, span := c.Tracer.Start(ctx, "cache/ListSecurityReportsStates") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.secReportsStates) + if err != nil { + return nil, "", trace.Wrap(err) + } + defer rg.Release() + return rg.reader.ListSecurityReportsStates(ctx, pageSize, nextKey) +} + // GetUserLoginStates returns the all user login state resources. func (c *Cache) GetUserLoginStates(ctx context.Context) ([]*userloginstate.UserLoginState, error) { ctx, span := c.Tracer.Start(ctx, "cache/GetUserLoginStates") diff --git a/lib/cache/cache_test.go b/lib/cache/cache_test.go index 290a6b0102192..9ca94b86faac9 100644 --- a/lib/cache/cache_test.go +++ b/lib/cache/cache_test.go @@ -40,6 +40,7 @@ import ( "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/discoveryconfig" "github.com/gravitational/teleport/api/types/header" + "github.com/gravitational/teleport/api/types/secreports" "github.com/gravitational/teleport/api/types/trait" "github.com/gravitational/teleport/api/types/userloginstate" "github.com/gravitational/teleport/lib/backend" @@ -94,6 +95,7 @@ type testPack struct { integrations services.Integrations discoveryConfigs services.DiscoveryConfigs userLoginStates services.UserLoginStates + secReports services.SecReports } // testFuncs are functions to support testing an object in a cache. @@ -257,6 +259,12 @@ func newPackWithoutCache(dir string, opts ...packOption) (*testPack, error) { } p.userLoginStates = ulsSvc + secReportsSvc, err := local.NewSecReportsService(p.backend, p.backend.Clock()) + if err != nil { + return nil, trace.Wrap(err) + } + p.secReports = secReportsSvc + return p, nil } @@ -296,6 +304,7 @@ func newPack(dir string, setupConfig func(c Config) Config, opts ...packOption) Integrations: p.integrations, DiscoveryConfigs: p.discoveryConfigs, UserLoginStates: p.userLoginStates, + SecReports: p.secReports, MaxRetryPeriod: 200 * time.Millisecond, EventsC: p.eventsC, })) @@ -692,6 +701,7 @@ func TestCompletenessInit(t *testing.T) { Integrations: p.integrations, DiscoveryConfigs: p.discoveryConfigs, UserLoginStates: p.userLoginStates, + SecReports: p.secReports, MaxRetryPeriod: 200 * time.Millisecond, EventsC: p.eventsC, })) @@ -762,6 +772,7 @@ func TestCompletenessReset(t *testing.T) { Integrations: p.integrations, DiscoveryConfigs: p.discoveryConfigs, UserLoginStates: p.userLoginStates, + SecReports: p.secReports, MaxRetryPeriod: 200 * time.Millisecond, EventsC: p.eventsC, })) @@ -944,6 +955,7 @@ func TestListResources_NodesTTLVariant(t *testing.T) { Integrations: p.integrations, DiscoveryConfigs: p.discoveryConfigs, UserLoginStates: p.userLoginStates, + SecReports: p.secReports, MaxRetryPeriod: 200 * time.Millisecond, EventsC: p.eventsC, neverOK: true, // ensure reads are never healthy @@ -1025,6 +1037,7 @@ func initStrategy(t *testing.T) { Integrations: p.integrations, DiscoveryConfigs: p.discoveryConfigs, UserLoginStates: p.userLoginStates, + SecReports: p.secReports, MaxRetryPeriod: 200 * time.Millisecond, EventsC: p.eventsC, })) @@ -2127,6 +2140,87 @@ func TestDiscoveryConfig(t *testing.T) { }) } +// TestAccessListRules tests that CRUD operations on access list rule resources are +// replicated from the backend to the cache. +func TestAuditQuery(t *testing.T) { + t.Parallel() + + p := newTestPack(t, ForAuth) + t.Cleanup(p.Close) + + testResources(t, p, testFuncs[*secreports.AuditQuery]{ + newResource: func(name string) (*secreports.AuditQuery, error) { + return newAuditQuery(t, name), nil + }, + create: func(ctx context.Context, item *secreports.AuditQuery) error { + err := p.secReports.UpsertSecurityAuditQuery(ctx, item) + return trace.Wrap(err) + }, + list: p.secReports.GetSecurityAuditQueries, + cacheGet: p.cache.GetSecurityAuditQuery, + cacheList: p.cache.GetSecurityAuditQueries, + update: func(ctx context.Context, item *secreports.AuditQuery) error { + err := p.secReports.UpsertSecurityAuditQuery(ctx, item) + return trace.Wrap(err) + }, + deleteAll: p.secReports.DeleteAllSecurityAuditQueries, + }) +} + +// TestSecurityReportState tests that CRUD operations on security report state resources are +// replicated from the backend to the cache. +func TestSecurityReports(t *testing.T) { + t.Parallel() + + p := newTestPack(t, ForAuth) + t.Cleanup(p.Close) + + testResources(t, p, testFuncs[*secreports.Report]{ + newResource: func(name string) (*secreports.Report, error) { + return newSecurityReport(t, name), nil + }, + create: func(ctx context.Context, item *secreports.Report) error { + err := p.secReports.UpsertSecurityReport(ctx, item) + return trace.Wrap(err) + }, + list: p.secReports.GetSecurityReports, + cacheGet: p.cache.GetSecurityReport, + cacheList: p.cache.GetSecurityReports, + update: func(ctx context.Context, item *secreports.Report) error { + err := p.secReports.UpsertSecurityReport(ctx, item) + return trace.Wrap(err) + }, + deleteAll: p.secReports.DeleteAllSecurityReports, + }) +} + +// TestSecurityReportState tests that CRUD operations on security report state resources are +// replicated from the backend to the cache. +func TestSecurityReportState(t *testing.T) { + t.Parallel() + + p := newTestPack(t, ForAuth) + t.Cleanup(p.Close) + + testResources(t, p, testFuncs[*secreports.ReportState]{ + newResource: func(name string) (*secreports.ReportState, error) { + return newSecurityReportState(t, name), nil + }, + create: func(ctx context.Context, item *secreports.ReportState) error { + err := p.secReports.UpsertSecurityReportsState(ctx, item) + return trace.Wrap(err) + }, + list: p.secReports.GetSecurityReportsStates, + cacheGet: p.cache.GetSecurityReportState, + cacheList: p.cache.GetSecurityReportsStates, + update: func(ctx context.Context, item *secreports.ReportState) error { + err := p.secReports.UpsertSecurityReportsState(ctx, item) + return trace.Wrap(err) + }, + deleteAll: p.secReports.DeleteAllSecurityReportsStates, + }) +} + // TestUserLoginStates tests that CRUD operations on user login state resources are // replicated from the backend to the cache. func TestUserLoginStates(t *testing.T) { @@ -2607,6 +2701,9 @@ func TestCacheWatchKindExistsInEvents(t *testing.T) { types.KindDiscoveryConfig: newDiscoveryConfig(t, "discovery-config"), types.KindHeadlessAuthentication: &types.HeadlessAuthentication{}, types.KindUserLoginState: newUserLoginState(t, "user-login-state"), + types.KindAuditQuery: newAuditQuery(t, "audit-query"), + types.KindSecurityReport: newSecurityReport(t, "security-report"), + types.KindSecurityReportState: newSecurityReport(t, "security-report-state"), } for name, cfg := range cases { @@ -2827,6 +2924,62 @@ func newDiscoveryConfig(t *testing.T, name string) *discoveryconfig.DiscoveryCon require.NoError(t, err) return discoveryConfig } +func newAuditQuery(t *testing.T, name string) *secreports.AuditQuery { + t.Helper() + + item, err := secreports.NewAuditQuery( + header.Metadata{ + Name: name, + }, + secreports.AuditQuerySpec{ + Name: name, + Title: "title", + Description: "desc", + Query: "query", + }, + ) + require.NoError(t, err) + return item +} + +func newSecurityReport(t *testing.T, name string) *secreports.Report { + t.Helper() + item, err := secreports.NewReport( + header.Metadata{ + Name: name, + }, + secreports.ReportSpec{ + Name: name, + Title: "title", + AuditQueries: []*secreports.AuditQuerySpec{ + { + Name: "name", + Title: "title", + Description: "desc", + Query: "query", + }, + }, + Version: "0.0.0", + }, + ) + require.NoError(t, err) + return item +} + +func newSecurityReportState(t *testing.T, name string) *secreports.ReportState { + t.Helper() + item, err := secreports.NewReportState( + header.Metadata{ + Name: name, + }, + secreports.ReportStateSpec{ + Status: "RUNNING", + UpdatedAt: time.Now().UTC(), + }, + ) + require.NoError(t, err) + return item +} func newUserLoginState(t *testing.T, name string) *userloginstate.UserLoginState { t.Helper() diff --git a/lib/cache/collections.go b/lib/cache/collections.go index ac05f202478c3..77a036a5d9342 100644 --- a/lib/cache/collections.go +++ b/lib/cache/collections.go @@ -28,6 +28,7 @@ import ( apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/discoveryconfig" + "github.com/gravitational/teleport/api/types/secreports" "github.com/gravitational/teleport/api/types/userloginstate" "github.com/gravitational/teleport/lib/services" ) @@ -172,6 +173,9 @@ type cacheCollections struct { // byKind is a map of registered collections by resource Kind/SubKind byKind map[resourceKind]collection + auditQueries collectionReader[services.SecurityAuditQueryGetter] + secReports collectionReader[services.SecurityReportGetter] + secReportsStates collectionReader[services.SecurityReportStateGetter] apps collectionReader[services.AppGetter] nodes collectionReader[nodeGetter] tunnelConnections collectionReader[tunnelConnectionGetter] @@ -603,6 +607,24 @@ func setupCollections(c *Cache, watches []types.WatchKind) (*cacheCollections, e case types.KindHeadlessAuthentication: // For headless authentications, we need only process events. We don't need to keep the cache up to date. collections.byKind[resourceKind] = &genericCollection[*types.HeadlessAuthentication, noReader, noopExecutor]{cache: c, watch: watch} + case types.KindAuditQuery: + if c.SecReports == nil { + return nil, trace.BadParameter("missing parameter SecReports") + } + collections.auditQueries = &genericCollection[*secreports.AuditQuery, services.SecurityAuditQueryGetter, auditQueryExecutor]{cache: c, watch: watch} + collections.byKind[resourceKind] = collections.auditQueries + case types.KindSecurityReport: + if c.SecReports == nil { + return nil, trace.BadParameter("missing parameter KindSecurityReport") + } + collections.secReports = &genericCollection[*secreports.Report, services.SecurityReportGetter, secReportExecutor]{cache: c, watch: watch} + collections.byKind[resourceKind] = collections.secReports + case types.KindSecurityReportState: + if c.SecReports == nil { + return nil, trace.BadParameter("missing parameter KindSecurityReport") + } + collections.secReportsStates = &genericCollection[*secreports.ReportState, services.SecurityReportStateGetter, secReportStateExecutor]{cache: c, watch: watch} + collections.byKind[resourceKind] = collections.secReportsStates case types.KindUserLoginState: if c.UserLoginStates == nil { return nil, trace.BadParameter("missing parameter UserLoginStates") @@ -2367,6 +2389,141 @@ func (discoveryConfigExecutor) getReader(cache *Cache, cacheOK bool) services.Di var _ executor[*discoveryconfig.DiscoveryConfig, services.DiscoveryConfigsGetter] = discoveryConfigExecutor{} +type auditQueryExecutor struct{} + +func (auditQueryExecutor) getAll(ctx context.Context, cache *Cache, loadSecrets bool) ([]*secreports.AuditQuery, error) { + var out []*secreports.AuditQuery + var nextToken string + for { + var page []*secreports.AuditQuery + var err error + + page, nextToken, err = cache.secReportsCache.ListSecurityAuditQueries(ctx, 0 /* default page size */, nextToken) + if err != nil { + return nil, trace.Wrap(err) + } + out = append(out, page...) + if nextToken == "" { + break + } + } + return out, nil +} + +func (auditQueryExecutor) upsert(ctx context.Context, cache *Cache, resource *secreports.AuditQuery) error { + err := cache.secReportsCache.UpsertSecurityAuditQuery(ctx, resource) + return trace.Wrap(err) +} + +func (auditQueryExecutor) deleteAll(ctx context.Context, cache *Cache) error { + return trace.Wrap(cache.secReportsCache.DeleteAllSecurityReports(ctx)) +} + +func (auditQueryExecutor) delete(ctx context.Context, cache *Cache, resource types.Resource) error { + return trace.Wrap(cache.secReportsCache.DeleteSecurityAuditQuery(ctx, resource.GetName())) +} + +func (auditQueryExecutor) isSingleton() bool { return false } + +func (auditQueryExecutor) getReader(cache *Cache, cacheOK bool) services.SecurityAuditQueryGetter { + if cacheOK { + return cache.secReportsCache + } + return cache.Config.SecReports +} + +var _ executor[*secreports.AuditQuery, services.SecurityAuditQueryGetter] = auditQueryExecutor{} + +type secReportExecutor struct{} + +func (secReportExecutor) getAll(ctx context.Context, cache *Cache, loadSecrets bool) ([]*secreports.Report, error) { + var out []*secreports.Report + var nextToken string + for { + var page []*secreports.Report + var err error + + page, nextToken, err = cache.secReportsCache.ListSecurityReports(ctx, 0 /* default page size */, nextToken) + if err != nil { + return nil, trace.Wrap(err) + } + out = append(out, page...) + if nextToken == "" { + break + } + } + return out, nil +} + +func (secReportExecutor) upsert(ctx context.Context, cache *Cache, resource *secreports.Report) error { + err := cache.secReportsCache.UpsertSecurityReport(ctx, resource) + return trace.Wrap(err) +} + +func (secReportExecutor) deleteAll(ctx context.Context, cache *Cache) error { + return trace.Wrap(cache.secReportsCache.DeleteAllSecurityReports(ctx)) +} + +func (secReportExecutor) delete(ctx context.Context, cache *Cache, resource types.Resource) error { + return trace.Wrap(cache.secReportsCache.DeleteSecurityReport(ctx, resource.GetName())) +} + +func (secReportExecutor) isSingleton() bool { return false } + +func (secReportExecutor) getReader(cache *Cache, cacheOK bool) services.SecurityReportGetter { + if cacheOK { + return cache.secReportsCache + } + return cache.Config.SecReports +} + +var _ executor[*secreports.Report, services.SecurityReportGetter] = secReportExecutor{} + +type secReportStateExecutor struct{} + +func (secReportStateExecutor) getAll(ctx context.Context, cache *Cache, loadSecrets bool) ([]*secreports.ReportState, error) { + var out []*secreports.ReportState + var nextToken string + for { + var page []*secreports.ReportState + var err error + + page, nextToken, err = cache.secReportsCache.ListSecurityReportsStates(ctx, 0 /* default page size */, nextToken) + if err != nil { + return nil, trace.Wrap(err) + } + out = append(out, page...) + if nextToken == "" { + break + } + } + return out, nil +} + +func (secReportStateExecutor) upsert(ctx context.Context, cache *Cache, resource *secreports.ReportState) error { + err := cache.secReportsCache.UpsertSecurityReportsState(ctx, resource) + return trace.Wrap(err) +} + +func (secReportStateExecutor) deleteAll(ctx context.Context, cache *Cache) error { + return trace.Wrap(cache.secReportsCache.DeleteAllSecurityReportsStates(ctx)) +} + +func (secReportStateExecutor) delete(ctx context.Context, cache *Cache, resource types.Resource) error { + return trace.Wrap(cache.secReportsCache.DeleteSecurityReportsState(ctx, resource.GetName())) +} + +func (secReportStateExecutor) isSingleton() bool { return false } + +func (secReportStateExecutor) getReader(cache *Cache, cacheOK bool) services.SecurityReportStateGetter { + if cacheOK { + return cache.secReportsCache + } + return cache.Config.SecReports +} + +var _ executor[*secreports.ReportState, services.SecurityReportStateGetter] = secReportStateExecutor{} + // noopExecutor can be used when a resource's events do not need to processed by // the cache itself, only passed on to other watchers. type noopExecutor struct{} diff --git a/lib/config/configuration.go b/lib/config/configuration.go index e5fb6fba099fa..2cada195c831a 100644 --- a/lib/config/configuration.go +++ b/lib/config/configuration.go @@ -858,6 +858,13 @@ func applyAuthConfig(fc *FileConfig, cfg *servicecfg.Config) error { return trace.Wrap(err) } + if fc.Auth.AccessMonitoring != nil { + if fc.Auth.AccessMonitoring.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err, "failed to validate access monitoring config") + } + cfg.Auth.AccessMonitoring = fc.Auth.AccessMonitoring + } + return nil } diff --git a/lib/config/fileconf.go b/lib/config/fileconf.go index c61217b79ee3e..c0dfe516733f4 100644 --- a/lib/config/fileconf.go +++ b/lib/config/fileconf.go @@ -803,6 +803,9 @@ type Auth struct { // Assist is a set of options related to the Teleport Assist feature. Assist *AuthAssistOptions `yaml:"assist,omitempty"` + + // AccessMonitoring is a set of options related to the Access Monitoring feature. + AccessMonitoring *servicecfg.AccessMonitoringOptions `yaml:"access_monitoring,omitempty"` } // PluginService represents the configuration for the plugin service. diff --git a/lib/events/api.go b/lib/events/api.go index c016538a1c1ca..85ee2a6379354 100644 --- a/lib/events/api.go +++ b/lib/events/api.go @@ -78,7 +78,7 @@ const ( // session when the terminal IO event happened SessionEventTimestamp = "ms" - // SessionEvent indicates that session has been initiated + // SessionStartEvent indicates that session has been initiated // or updated by a joining party on the server SessionStartEvent = "session.start" @@ -684,6 +684,12 @@ const ( // UnknownEvent is any event received that isn't recognized as any other event type. UnknownEvent = apievents.UnknownEvent + + // SecReportsAuditQueryRunEvent is emitted when a security report query is run. + SecReportsAuditQueryRunEvent = "secreports.audit.query.run" + + // SecReportsReportRunEvent is emitted when a security report is run. + SecReportsReportRunEvent = "secreports.report.run" ) const ( diff --git a/lib/events/athena/integration_test.go b/lib/events/athena/integration_test.go index 0ab8618ca80f9..cd1aed257ffca 100644 --- a/lib/events/athena/integration_test.go +++ b/lib/events/athena/integration_test.go @@ -16,65 +16,30 @@ package athena import ( "context" - "encoding/json" "errors" - "fmt" - "os" - "strconv" "strings" - "sync" "testing" "time" - "github.com/aws/aws-sdk-go-v2/aws" - awsconfig "github.com/aws/aws-sdk-go-v2/config" - "github.com/aws/aws-sdk-go-v2/service/athena" - athenaTypes "github.com/aws/aws-sdk-go-v2/service/athena/types" - "github.com/aws/aws-sdk-go-v2/service/glue" - glueTypes "github.com/aws/aws-sdk-go-v2/service/glue/types" - "github.com/aws/aws-sdk-go-v2/service/s3" - s3Types "github.com/aws/aws-sdk-go-v2/service/s3/types" - "github.com/aws/aws-sdk-go-v2/service/sns" - "github.com/aws/aws-sdk-go-v2/service/sqs" - sqsTypes "github.com/aws/aws-sdk-go-v2/service/sqs/types" "github.com/google/go-cmp/cmp" "github.com/google/uuid" - "github.com/jonboulle/clockwork" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/types" apievents "github.com/gravitational/teleport/api/types/events" "github.com/gravitational/teleport/api/utils/retryutils" - "github.com/gravitational/teleport/lib/backend/memory" "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/events/test" - "github.com/gravitational/teleport/lib/observability/tracing" ) -type athenaContext struct { - log *Log - clock clockwork.Clock - testID string - database string - bucketForEvents string - bucketForTempFiles string - tablename string - s3eventsLocation string - s3resultsLocation string - s3largePayloads string - batcherInterval time.Duration -} - func TestIntegrationAthenaSearchSessionEventsBySessionID(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) defer cancel() - ac := setupAthenaContext(t, ctx, athenaContextConfig{}) - auditLogger := &eventuallyConsitentAuditLogger{ - inner: ac.log, + ac := SetupAthenaContext(t, ctx, AthenaContextConfig{}) + auditLogger := &EventuallyConsistentAuditLogger{ + Inner: ac.log, // Additional 5s is used to compensate for uploading parquet on s3. - queryDelay: ac.batcherInterval + 5*time.Second, + QueryDelay: ac.batcherInterval + 5*time.Second, } eventsSuite := test.EventsSuite{ Log: auditLogger, @@ -88,11 +53,11 @@ func TestIntegrationAthenaSearchSessionEventsBySessionID(t *testing.T) { func TestIntegrationAthenaSessionEventsCRUD(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) defer cancel() - ac := setupAthenaContext(t, ctx, athenaContextConfig{}) - auditLogger := &eventuallyConsitentAuditLogger{ - inner: ac.log, + ac := SetupAthenaContext(t, ctx, AthenaContextConfig{}) + auditLogger := &EventuallyConsistentAuditLogger{ + Inner: ac.log, // Additional 5s is used to compensate for uploading parquet on s3. - queryDelay: ac.batcherInterval + 5*time.Second, + QueryDelay: ac.batcherInterval + 5*time.Second, } eventsSuite := test.EventsSuite{ Log: auditLogger, @@ -105,11 +70,11 @@ func TestIntegrationAthenaSessionEventsCRUD(t *testing.T) { func TestIntegrationAthenaEventPagination(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) defer cancel() - ac := setupAthenaContext(t, ctx, athenaContextConfig{}) - auditLogger := &eventuallyConsitentAuditLogger{ - inner: ac.log, + ac := SetupAthenaContext(t, ctx, AthenaContextConfig{}) + auditLogger := &EventuallyConsistentAuditLogger{ + Inner: ac.log, // Additional 5s is used to compensate for uploading parquet on s3. - queryDelay: ac.batcherInterval + 5*time.Second, + QueryDelay: ac.batcherInterval + 5*time.Second, } eventsSuite := test.EventsSuite{ Log: auditLogger, @@ -123,7 +88,7 @@ func TestIntegrationAthenaLargeEvents(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) defer cancel() - ac := setupAthenaContext(t, ctx, athenaContextConfig{maxBatchSize: 1}) + ac := SetupAthenaContext(t, ctx, AthenaContextConfig{MaxBatchSize: 1}) in := &apievents.SessionStart{ Metadata: apievents.Metadata{ Index: 2, @@ -157,386 +122,3 @@ func TestIntegrationAthenaLargeEvents(t *testing.T) { require.Len(t, history, 1) require.Empty(t, cmp.Diff(in, history[0])) } - -// athenaContextConfig is optional config to override defaults in athena context. -type athenaContextConfig struct { - maxBatchSize int -} - -func setupAthenaContext(t *testing.T, ctx context.Context, cfg athenaContextConfig) *athenaContext { - testEnabled := os.Getenv(teleport.AWSRunTests) - if ok, _ := strconv.ParseBool(testEnabled); !ok { - t.Skip("Skipping AWS-dependent test suite.") - } - - testID := fmt.Sprintf("auditlogs-integrationtests-%v", uuid.New().String()) - - clock := clockwork.NewRealClock() - - backend, err := memory.New(memory.Config{}) - require.NoError(t, err) - t.Cleanup(func() { - assert.NoError(t, backend.Close()) - }) - bucketWithLocking := "auditlogs-integrationtests-locking" - bucketForTemporaryFiles := "auditlogs-integrationtests" - ac := &athenaContext{ - clock: clock, - testID: testID, - database: "auditlogs_integrationtests", - bucketForEvents: bucketWithLocking, - bucketForTempFiles: bucketForTemporaryFiles, - s3eventsLocation: fmt.Sprintf("s3://%s/%s/events", bucketWithLocking, testID), - s3resultsLocation: fmt.Sprintf("s3://%s/%s/results", bucketForTemporaryFiles, testID), - s3largePayloads: fmt.Sprintf("s3://%s/%s/large_payloads", bucketForTemporaryFiles, testID), - tablename: strings.ReplaceAll(testID, "-", "_"), - batcherInterval: 10 * time.Second, - } - infraOut := ac.setupInfraWithCleanup(t, ctx) - - region := infraOut.region - if region == "" { - region = "eu-central-1" - } - - log, err := New(ctx, Config{ - Region: region, - Clock: clock, - Database: ac.database, - TableName: ac.tablename, - TopicARN: infraOut.topicARN, - QueueURL: infraOut.queueURL, - LocationS3: ac.s3eventsLocation, - QueryResultsS3: ac.s3resultsLocation, - LargeEventsS3: ac.s3largePayloads, - BatchMaxInterval: ac.batcherInterval, - BatchMaxItems: cfg.maxBatchSize, - Backend: backend, - Workgroup: "primary", - }) - require.NoError(t, err) - - ac.log = log - t.Cleanup(func() { - ac.Close(t) - }) - - t.Logf("Initialized Athena test suite %q\n", testID) - - return ac -} - -type infraOutputs struct { - topicARN string - queueURL string - region string -} - -func (ac *athenaContext) setupInfraWithCleanup(t *testing.T, ctx context.Context) *infraOutputs { - const timeoutDurationOnCleanup = 1 * time.Minute - - awsCfg, err := awsconfig.LoadDefaultConfig(ctx) - require.NoError(t, err) - - // Create SNS topic and set cleanup fn. - snsClient := sns.NewFromConfig(awsCfg) - topicCreated, err := snsClient.CreateTopic(ctx, &sns.CreateTopicInput{ - Name: aws.String(ac.testID), - }) - require.NoError(t, err) - t.Cleanup(func() { - cleanupCtx, cancel := context.WithTimeout(context.Background(), timeoutDurationOnCleanup) - defer cancel() - _, err = snsClient.DeleteTopic(cleanupCtx, &sns.DeleteTopicInput{ - TopicArn: topicCreated.TopicArn, - }) - assert.NoError(t, err) - }) - - // Create SQS queue and set cleanup fn. - sqsClient := sqs.NewFromConfig(awsCfg) - queueCreated, err := sqsClient.CreateQueue(ctx, &sqs.CreateQueueInput{ - QueueName: aws.String(ac.testID), - }) - require.NoError(t, err) - t.Cleanup(func() { - cleanupCtx, cancel := context.WithTimeout(context.Background(), timeoutDurationOnCleanup) - defer cancel() - _, err := sqsClient.DeleteQueue(cleanupCtx, &sqs.DeleteQueueInput{ - QueueUrl: queueCreated.QueueUrl, - }) - assert.NoError(t, err) - }) - - // Set created queue as subscriber to topic and use valid permissions. - queueAttr, err := sqsClient.GetQueueAttributes(ctx, &sqs.GetQueueAttributesInput{ - QueueUrl: queueCreated.QueueUrl, - AttributeNames: []sqsTypes.QueueAttributeName{sqsTypes.QueueAttributeNameQueueArn}, - }) - require.NoError(t, err) - queueArn := queueAttr.Attributes["QueueArn"] - type StatementEntry struct { - Effect string - Action []string - Resource string - Principal map[string]string - Condition map[string]map[string]string - } - type PolicyDocument struct { - Version string - Statement []StatementEntry - } - sqsAccessPolicy := PolicyDocument{ - Version: "2012-10-17", - Statement: []StatementEntry{ - { - Effect: "Allow", - Action: []string{"SQS:SendMessage"}, - Resource: queueArn, - Principal: map[string]string{ - "AWS": "*", - }, - Condition: map[string]map[string]string{ - "ArnLike": { - "aws:SourceArn": *topicCreated.TopicArn, - }, - }, - }, - }, - } - marshaledPolicy, err := json.Marshal(sqsAccessPolicy) - require.NoError(t, err) - _, err = sqsClient.SetQueueAttributes(ctx, &sqs.SetQueueAttributesInput{ - Attributes: map[string]string{ - "Policy": string(marshaledPolicy), - }, - QueueUrl: queueCreated.QueueUrl, - }) - require.NoError(t, err) - _, err = snsClient.Subscribe(ctx, &sns.SubscribeInput{ - TopicArn: topicCreated.TopicArn, - Protocol: aws.String("sqs"), - Attributes: map[string]string{ - "RawMessageDelivery": "true", - }, - Endpoint: aws.String(queueArn), - }) - require.NoError(t, err) - - // Create bucket for long term storage if not exists. Bucket will have object locking which - // prevents from deleting objects, that's why it can exists before. - // Retention period will take care of cleanup of files. - s3Client := s3.NewFromConfig(awsCfg) - _, err = s3Client.HeadBucket(ctx, &s3.HeadBucketInput{ - Bucket: aws.String(ac.bucketForEvents), - }) - if err != nil { - var notFound *s3Types.NotFound - if errors.As(err, ¬Found) { - _, err = s3Client.CreateBucket(ctx, &s3.CreateBucketInput{ - Bucket: aws.String(ac.bucketForEvents), - ObjectLockEnabledForBucket: true, - CreateBucketConfiguration: &s3Types.CreateBucketConfiguration{ - LocationConstraint: s3Types.BucketLocationConstraint(awsCfg.Region), - }, - }) - require.NoError(t, err) - _, err = s3Client.PutObjectLockConfiguration(ctx, &s3.PutObjectLockConfigurationInput{ - Bucket: aws.String(ac.bucketForEvents), - ObjectLockConfiguration: &s3Types.ObjectLockConfiguration{ - ObjectLockEnabled: s3Types.ObjectLockEnabledEnabled, - Rule: &s3Types.ObjectLockRule{ - DefaultRetention: &s3Types.DefaultRetention{ - Days: 1, - Mode: s3Types.ObjectLockRetentionModeGovernance, - }, - }, - }, - }) - require.NoError(t, err) - } else { - assert.Fail(t, "unexpected err", err) - } - } - - // Create bucket if not exists for temporary files (large payloads and query results). - // Retention period will take care of cleanup of files. - _, err = s3Client.HeadBucket(ctx, &s3.HeadBucketInput{ - Bucket: aws.String(ac.bucketForTempFiles), - }) - if err != nil { - var notFound *s3Types.NotFound - if errors.As(err, ¬Found) { - _, createErr := s3Client.CreateBucket(ctx, &s3.CreateBucketInput{ - Bucket: aws.String(ac.bucketForTempFiles), - CreateBucketConfiguration: &s3Types.CreateBucketConfiguration{ - LocationConstraint: s3Types.BucketLocationConstraint(awsCfg.Region), - }, - }) - require.NoError(t, createErr) - } else { - assert.Fail(t, "unexpected err", err) - } - } - _, err = s3Client.PutBucketLifecycleConfiguration(ctx, &s3.PutBucketLifecycleConfigurationInput{ - Bucket: aws.String(ac.bucketForTempFiles), - LifecycleConfiguration: &s3Types.BucketLifecycleConfiguration{ - Rules: []s3Types.LifecycleRule{ - { - Status: s3Types.ExpirationStatusEnabled, - Expiration: &s3Types.LifecycleExpiration{ - Days: 1, - }, - // Prefix is required field, empty means set to whole bucket. - Prefix: aws.String(""), - }, - }, - }, - }) - require.NoError(t, err) - - // Create glue db if not exists - glueClient := glue.NewFromConfig(awsCfg) - _, err = glueClient.GetDatabase(ctx, &glue.GetDatabaseInput{ - Name: aws.String(ac.database), - }) - if err != nil { - var notFound *glueTypes.EntityNotFoundException - if errors.As(err, ¬Found) { - _, createErr := glueClient.CreateDatabase(ctx, &glue.CreateDatabaseInput{ - DatabaseInput: &glueTypes.DatabaseInput{ - Name: aws.String(ac.database), - }, - }) - require.NoError(t, createErr) - } else { - assert.Fail(t, "unexpected err: %v", err) - } - } - - // Create athena table - athenaClient := athena.NewFromConfig(awsCfg) - startQueryExecResp, err := athenaClient.StartQueryExecution(ctx, &athena.StartQueryExecutionInput{ - QueryString: aws.String(fmt.Sprintf(createTableQuery, ac.tablename, ac.s3eventsLocation, ac.s3eventsLocation)), - ResultConfiguration: &athenaTypes.ResultConfiguration{ - OutputLocation: aws.String(ac.s3resultsLocation), - }, - QueryExecutionContext: &athenaTypes.QueryExecutionContext{ - Database: aws.String(ac.database), - }, - }) - require.NoError(t, err) - // querier is just used here to get helper fn waitForSuccess. - q := querier{ - athenaClient: athenaClient, - querierConfig: querierConfig{ - getQueryResultsInterval: 100 * time.Millisecond, - clock: ac.clock, - tracer: tracing.NoopTracer(teleport.ComponentAthena), - }, - } - err = q.waitForSuccess(ctx, aws.ToString(startQueryExecResp.QueryExecutionId)) - require.NoError(t, err) - t.Cleanup(func() { - cleanupCtx, cancel := context.WithTimeout(context.Background(), timeoutDurationOnCleanup) - defer cancel() - _, err = athenaClient.StartQueryExecution(cleanupCtx, &athena.StartQueryExecutionInput{ - QueryString: aws.String(fmt.Sprintf("drop table %s;", ac.tablename)), - ResultConfiguration: &athenaTypes.ResultConfiguration{ - OutputLocation: aws.String(ac.s3resultsLocation), - }, - QueryExecutionContext: &athenaTypes.QueryExecutionContext{ - Database: aws.String(ac.database), - }, - }) - assert.NoError(t, err) - }) - - return &infraOutputs{ - topicARN: aws.ToString(topicCreated.TopicArn), - queueURL: aws.ToString(queueCreated.QueueUrl), - region: awsCfg.Region, - } -} - -// createTableQuery is query used to create athena table using parquet on s3. -// Right now only hardcoded in integration tests, in future it may be moved -// to athena main file if we decide to create table on demand from teleport. -var createTableQuery = ` -CREATE EXTERNAL TABLE %s ( - uid string, - session_id string, - event_type string, - event_time timestamp, - user string, - event_data string - ) - PARTITIONED BY ( - event_date DATE - ) - ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' - STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' - OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' - LOCATION "%s/" - TBLPROPERTIES ( - "projection.enabled" = "true", - "projection.event_date.type" = "date", - "projection.event_date.format" = "yyyy-MM-dd", - "projection.event_date.range" = "NOW-4YEARS,NOW", - "projection.event_date.interval" = "1", - "projection.event_date.interval.unit" = "DAYS", - "storage.location.template" = "%s/${event_date}/", - "classification" = "parquet", - "parquet.compression" = "SNAPPY" - ) -` - -func (ac *athenaContext) Close(t *testing.T) { - assert.NoError(t, ac.log.Close()) -} - -// eventuallyConsitentAuditLogger is used to add delay before searching for events -// for eventually consistent audit loggers. -type eventuallyConsitentAuditLogger struct { - inner events.AuditLogger - - // queryDelay specifies how long query should wait after last emit event. - queryDelay time.Duration - - // mu protects field below. - mu sync.Mutex - emitWasAfterLastDelay bool -} - -func (e *eventuallyConsitentAuditLogger) EmitAuditEvent(ctx context.Context, in apievents.AuditEvent) error { - e.mu.Lock() - e.emitWasAfterLastDelay = true - e.mu.Unlock() - return e.inner.EmitAuditEvent(ctx, in) -} - -func (e *eventuallyConsitentAuditLogger) SearchEvents(ctx context.Context, req events.SearchEventsRequest) ([]apievents.AuditEvent, string, error) { - e.mu.Lock() - defer e.mu.Unlock() - if e.emitWasAfterLastDelay { - time.Sleep(e.queryDelay) - // clear emit delay - e.emitWasAfterLastDelay = false - } - return e.inner.SearchEvents(ctx, req) -} - -func (e *eventuallyConsitentAuditLogger) SearchSessionEvents(ctx context.Context, req events.SearchSessionEventsRequest) ([]apievents.AuditEvent, string, error) { - e.mu.Lock() - defer e.mu.Unlock() - if e.emitWasAfterLastDelay { - time.Sleep(e.queryDelay) - // clear emit delay - e.emitWasAfterLastDelay = false - } - return e.inner.SearchSessionEvents(ctx, req) -} - -func (e *eventuallyConsitentAuditLogger) Close() error { - return e.inner.Close() -} diff --git a/lib/events/athena/test.go b/lib/events/athena/test.go new file mode 100644 index 0000000000000..3425dd9069fcd --- /dev/null +++ b/lib/events/athena/test.go @@ -0,0 +1,451 @@ +// Copyright 2023 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package athena + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "os" + "strconv" + "strings" + "sync" + "testing" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + awsconfig "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/athena" + athenaTypes "github.com/aws/aws-sdk-go-v2/service/athena/types" + "github.com/aws/aws-sdk-go-v2/service/glue" + glueTypes "github.com/aws/aws-sdk-go-v2/service/glue/types" + "github.com/aws/aws-sdk-go-v2/service/s3" + s3Types "github.com/aws/aws-sdk-go-v2/service/s3/types" + "github.com/aws/aws-sdk-go-v2/service/sns" + "github.com/aws/aws-sdk-go-v2/service/sqs" + sqsTypes "github.com/aws/aws-sdk-go-v2/service/sqs/types" + "github.com/google/uuid" + "github.com/jonboulle/clockwork" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport" + apievents "github.com/gravitational/teleport/api/types/events" + "github.com/gravitational/teleport/lib/backend/memory" + "github.com/gravitational/teleport/lib/events" + "github.com/gravitational/teleport/lib/observability/tracing" +) + +// createTableQuery is query used to create athena table using parquet on s3. +// Right now only hardcoded in integration tests, in future it may be moved +// to athena main file if we decide to create table on demand from teleport. +var createTableQuery = ` +CREATE EXTERNAL TABLE %s ( + uid string, + session_id string, + event_type string, + event_time timestamp, + user string, + event_data string + ) + PARTITIONED BY ( + event_date DATE + ) + ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' + STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' + OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' + LOCATION "%s/" + TBLPROPERTIES ( + "projection.enabled" = "true", + "projection.event_date.type" = "date", + "projection.event_date.format" = "yyyy-MM-dd", + "projection.event_date.range" = "NOW-4YEARS,NOW", + "projection.event_date.interval" = "1", + "projection.event_date.interval.unit" = "DAYS", + "storage.location.template" = "%s/${event_date}/", + "classification" = "parquet", + "parquet.compression" = "SNAPPY" + ) +` + +type AthenaContext struct { + log *Log + clock clockwork.Clock + testID string + Database string + bucketForEvents string + bucketForTempFiles string + TableName string + s3eventsLocation string + S3ResultsLocation string + s3largePayloads string + batcherInterval time.Duration +} + +func (a *AthenaContext) GetLog() *Log { + return a.log +} + +// AthenaContextConfig is optional config to override defaults in athena context. +type AthenaContextConfig struct { + MaxBatchSize int +} + +type InfraOutputs struct { + TopicARN string + QueueURL string + Region string +} + +func (ac *AthenaContext) Close(t *testing.T) { + assert.NoError(t, ac.log.Close()) +} + +// EventuallyConsistentAuditLogger is used to add delay before searching for events +// for eventually consistent audit loggers. +type EventuallyConsistentAuditLogger struct { + Inner events.AuditLogger + + // QueryDelay specifies how long query should wait after last emit event. + QueryDelay time.Duration + + // mu protects field below. + mu sync.Mutex + emitWasAfterLastDelay bool +} + +func (e *EventuallyConsistentAuditLogger) EmitAuditEvent(ctx context.Context, in apievents.AuditEvent) error { + e.mu.Lock() + e.emitWasAfterLastDelay = true + e.mu.Unlock() + return e.Inner.EmitAuditEvent(ctx, in) +} + +func (e *EventuallyConsistentAuditLogger) SearchEvents(ctx context.Context, req events.SearchEventsRequest) ([]apievents.AuditEvent, string, error) { + e.mu.Lock() + defer e.mu.Unlock() + if e.emitWasAfterLastDelay { + time.Sleep(e.QueryDelay) + // clear emit delay + e.emitWasAfterLastDelay = false + } + return e.Inner.SearchEvents(ctx, req) +} + +func (e *EventuallyConsistentAuditLogger) SearchSessionEvents(ctx context.Context, req events.SearchSessionEventsRequest) ([]apievents.AuditEvent, string, error) { + e.mu.Lock() + defer e.mu.Unlock() + if e.emitWasAfterLastDelay { + time.Sleep(e.QueryDelay) + // clear emit delay + e.emitWasAfterLastDelay = false + } + return e.Inner.SearchSessionEvents(ctx, req) +} + +func (e *EventuallyConsistentAuditLogger) Close() error { + return e.Inner.Close() +} + +func SetupAthenaContext(t *testing.T, ctx context.Context, cfg AthenaContextConfig) *AthenaContext { + testEnabled := os.Getenv(teleport.AWSRunTests) + if ok, _ := strconv.ParseBool(testEnabled); !ok { + t.Skip("Skipping AWS-dependent test suite.") + } + + testID := fmt.Sprintf("auditlogs-integrationtests-%v", uuid.New().String()) + + clock := clockwork.NewRealClock() + + backend, err := memory.New(memory.Config{}) + require.NoError(t, err) + t.Cleanup(func() { + assert.NoError(t, backend.Close()) + }) + bucketWithLocking := "auditlogs-integrationtests-locking" + bucketForTemporaryFiles := "auditlogs-integrationtests" + ac := &AthenaContext{ + clock: clock, + testID: testID, + Database: "auditlogs_integrationtests", + bucketForEvents: bucketWithLocking, + bucketForTempFiles: bucketForTemporaryFiles, + s3eventsLocation: fmt.Sprintf("s3://%s/%s/events", bucketWithLocking, testID), + S3ResultsLocation: fmt.Sprintf("s3://%s/%s/results", bucketForTemporaryFiles, testID), + s3largePayloads: fmt.Sprintf("s3://%s/%s/large_payloads", bucketForTemporaryFiles, testID), + TableName: strings.ReplaceAll(testID, "-", "_"), + batcherInterval: 10 * time.Second, + } + infraOut := ac.setupInfraWithCleanup(t, ctx) + + region := infraOut.Region + if region == "" { + region = "eu-central-1" + } + + log, err := New(ctx, Config{ + Region: region, + Clock: clock, + Database: ac.Database, + TableName: ac.TableName, + TopicARN: infraOut.TopicARN, + QueueURL: infraOut.QueueURL, + LocationS3: ac.s3eventsLocation, + QueryResultsS3: ac.S3ResultsLocation, + LargeEventsS3: ac.s3largePayloads, + BatchMaxInterval: ac.batcherInterval, + BatchMaxItems: cfg.MaxBatchSize, + Backend: backend, + Workgroup: "primary", + }) + require.NoError(t, err) + + ac.log = log + t.Cleanup(func() { + ac.Close(t) + }) + + t.Logf("Initialized Athena test suite %q\n", testID) + + return ac +} + +func (ac *AthenaContext) setupInfraWithCleanup(t *testing.T, ctx context.Context) *InfraOutputs { + const timeoutDurationOnCleanup = 1 * time.Minute + + awsCfg, err := awsconfig.LoadDefaultConfig(ctx) + require.NoError(t, err) + + // Create SNS topic and set cleanup fn. + snsClient := sns.NewFromConfig(awsCfg) + topicCreated, err := snsClient.CreateTopic(ctx, &sns.CreateTopicInput{ + Name: aws.String(ac.testID), + }) + require.NoError(t, err) + t.Cleanup(func() { + cleanupCtx, cancel := context.WithTimeout(context.Background(), timeoutDurationOnCleanup) + defer cancel() + _, err = snsClient.DeleteTopic(cleanupCtx, &sns.DeleteTopicInput{ + TopicArn: topicCreated.TopicArn, + }) + assert.NoError(t, err) + }) + + // Create SQS queue and set cleanup fn. + sqsClient := sqs.NewFromConfig(awsCfg) + queueCreated, err := sqsClient.CreateQueue(ctx, &sqs.CreateQueueInput{ + QueueName: aws.String(ac.testID), + }) + require.NoError(t, err) + t.Cleanup(func() { + cleanupCtx, cancel := context.WithTimeout(context.Background(), timeoutDurationOnCleanup) + defer cancel() + _, err := sqsClient.DeleteQueue(cleanupCtx, &sqs.DeleteQueueInput{ + QueueUrl: queueCreated.QueueUrl, + }) + assert.NoError(t, err) + }) + + // Set created queue as subscriber to topic and use valid permissions. + queueAttr, err := sqsClient.GetQueueAttributes(ctx, &sqs.GetQueueAttributesInput{ + QueueUrl: queueCreated.QueueUrl, + AttributeNames: []sqsTypes.QueueAttributeName{sqsTypes.QueueAttributeNameQueueArn}, + }) + require.NoError(t, err) + queueArn := queueAttr.Attributes["QueueArn"] + type StatementEntry struct { + Effect string + Action []string + Resource string + Principal map[string]string + Condition map[string]map[string]string + } + type PolicyDocument struct { + Version string + Statement []StatementEntry + } + sqsAccessPolicy := PolicyDocument{ + Version: "2012-10-17", + Statement: []StatementEntry{ + { + Effect: "Allow", + Action: []string{"SQS:SendMessage"}, + Resource: queueArn, + Principal: map[string]string{ + "AWS": "*", + }, + Condition: map[string]map[string]string{ + "ArnLike": { + "aws:SourceArn": *topicCreated.TopicArn, + }, + }, + }, + }, + } + marshaledPolicy, err := json.Marshal(sqsAccessPolicy) + require.NoError(t, err) + _, err = sqsClient.SetQueueAttributes(ctx, &sqs.SetQueueAttributesInput{ + Attributes: map[string]string{ + "Policy": string(marshaledPolicy), + }, + QueueUrl: queueCreated.QueueUrl, + }) + require.NoError(t, err) + _, err = snsClient.Subscribe(ctx, &sns.SubscribeInput{ + TopicArn: topicCreated.TopicArn, + Protocol: aws.String("sqs"), + Attributes: map[string]string{ + "RawMessageDelivery": "true", + }, + Endpoint: aws.String(queueArn), + }) + require.NoError(t, err) + + // Create bucket for long term storage if not exists. Bucket will have object locking which + // prevents from deleting objects, that's why it can exists before. + // Retention period will take care of cleanup of files. + s3Client := s3.NewFromConfig(awsCfg) + _, err = s3Client.HeadBucket(ctx, &s3.HeadBucketInput{ + Bucket: aws.String(ac.bucketForEvents), + }) + if err != nil { + var notFound *s3Types.NotFound + if errors.As(err, ¬Found) { + _, err = s3Client.CreateBucket(ctx, &s3.CreateBucketInput{ + Bucket: aws.String(ac.bucketForEvents), + ObjectLockEnabledForBucket: true, + CreateBucketConfiguration: &s3Types.CreateBucketConfiguration{ + LocationConstraint: s3Types.BucketLocationConstraint(awsCfg.Region), + }, + }) + require.NoError(t, err) + _, err = s3Client.PutObjectLockConfiguration(ctx, &s3.PutObjectLockConfigurationInput{ + Bucket: aws.String(ac.bucketForEvents), + ObjectLockConfiguration: &s3Types.ObjectLockConfiguration{ + ObjectLockEnabled: s3Types.ObjectLockEnabledEnabled, + Rule: &s3Types.ObjectLockRule{ + DefaultRetention: &s3Types.DefaultRetention{ + Days: 1, + Mode: s3Types.ObjectLockRetentionModeGovernance, + }, + }, + }, + }) + require.NoError(t, err) + } else { + assert.Fail(t, "unexpected err", err) + } + } + + // Create bucket if not exists for temporary files (large payloads and query results). + // Retention period will take care of cleanup of files. + _, err = s3Client.HeadBucket(ctx, &s3.HeadBucketInput{ + Bucket: aws.String(ac.bucketForTempFiles), + }) + if err != nil { + var notFound *s3Types.NotFound + if errors.As(err, ¬Found) { + _, createErr := s3Client.CreateBucket(ctx, &s3.CreateBucketInput{ + Bucket: aws.String(ac.bucketForTempFiles), + CreateBucketConfiguration: &s3Types.CreateBucketConfiguration{ + LocationConstraint: s3Types.BucketLocationConstraint(awsCfg.Region), + }, + }) + require.NoError(t, createErr) + } else { + assert.Fail(t, "unexpected err", err) + } + } + _, err = s3Client.PutBucketLifecycleConfiguration(ctx, &s3.PutBucketLifecycleConfigurationInput{ + Bucket: aws.String(ac.bucketForTempFiles), + LifecycleConfiguration: &s3Types.BucketLifecycleConfiguration{ + Rules: []s3Types.LifecycleRule{ + { + Status: s3Types.ExpirationStatusEnabled, + Expiration: &s3Types.LifecycleExpiration{ + Days: 1, + }, + // Prefix is required field, empty means set to whole bucket. + Prefix: aws.String(""), + }, + }, + }, + }) + require.NoError(t, err) + + // Create glue db if not exists + glueClient := glue.NewFromConfig(awsCfg) + _, err = glueClient.GetDatabase(ctx, &glue.GetDatabaseInput{ + Name: aws.String(ac.Database), + }) + if err != nil { + var notFound *glueTypes.EntityNotFoundException + if errors.As(err, ¬Found) { + _, createErr := glueClient.CreateDatabase(ctx, &glue.CreateDatabaseInput{ + DatabaseInput: &glueTypes.DatabaseInput{ + Name: aws.String(ac.Database), + }, + }) + require.NoError(t, createErr) + } else { + assert.Fail(t, "unexpected err: %v", err) + } + } + + // Create athena table + athenaClient := athena.NewFromConfig(awsCfg) + startQueryExecResp, err := athenaClient.StartQueryExecution(ctx, &athena.StartQueryExecutionInput{ + QueryString: aws.String(fmt.Sprintf(createTableQuery, ac.TableName, ac.s3eventsLocation, ac.s3eventsLocation)), + ResultConfiguration: &athenaTypes.ResultConfiguration{ + OutputLocation: aws.String(ac.S3ResultsLocation), + }, + QueryExecutionContext: &athenaTypes.QueryExecutionContext{ + Database: aws.String(ac.Database), + }, + }) + require.NoError(t, err) + // querier is just used here to get helper fn waitForSuccess. + q := querier{ + athenaClient: athenaClient, + querierConfig: querierConfig{ + getQueryResultsInterval: 100 * time.Millisecond, + clock: ac.clock, + tracer: tracing.NoopTracer(teleport.ComponentAthena), + }, + } + err = q.waitForSuccess(ctx, aws.ToString(startQueryExecResp.QueryExecutionId)) + require.NoError(t, err) + t.Cleanup(func() { + cleanupCtx, cancel := context.WithTimeout(context.Background(), timeoutDurationOnCleanup) + defer cancel() + _, err = athenaClient.StartQueryExecution(cleanupCtx, &athena.StartQueryExecutionInput{ + QueryString: aws.String(fmt.Sprintf("drop table %s;", ac.TableName)), + ResultConfiguration: &athenaTypes.ResultConfiguration{ + OutputLocation: aws.String(ac.S3ResultsLocation), + }, + QueryExecutionContext: &athenaTypes.QueryExecutionContext{ + Database: aws.String(ac.Database), + }, + }) + assert.NoError(t, err) + }) + + return &InfraOutputs{ + TopicARN: aws.ToString(topicCreated.TopicArn), + QueueURL: aws.ToString(queueCreated.QueueUrl), + Region: awsCfg.Region, + } +} diff --git a/lib/events/codes.go b/lib/events/codes.go index c024f5b7a3148..aad8ba0d74abb 100644 --- a/lib/events/codes.go +++ b/lib/events/codes.go @@ -520,6 +520,12 @@ const ( // AccessListMemberDeleteAllForAccessListFailureCode is the access list member delete failure code. AccessListMemberDeleteAllForAccessListFailureCode = "TAL008E" + // SecReportsAuditQueryRunCode is used when a custom Security Reports Query is run. + SecReportsAuditQueryRunCode = "SRE001I" + + // SecReportsReportRunCode is used when a report in run. + SecReportsReportRunCode = "SRE002I" + // UnknownCode is used when an event of unknown type is encountered. UnknownCode = apievents.UnknownCode ) diff --git a/lib/events/dynamic.go b/lib/events/dynamic.go index 01e543442e4d7..6b2fd0a029d6d 100644 --- a/lib/events/dynamic.go +++ b/lib/events/dynamic.go @@ -327,10 +327,14 @@ func FromEventFields(fields EventFields) (events.AuditEvent, error) { e = &events.AccessListMemberDelete{} case AccessListMemberDeleteAllForAccessListEvent: e = &events.AccessListMemberDeleteAllForAccessList{} + case SecReportsAuditQueryRunEvent: + e = &events.AuditQueryRun{} + case SecReportsReportRunEvent: + e = &events.SecurityReportRun{} + case UnknownEvent: e = &events.Unknown{} - // Cassandra events. case CassandraBatchEventCode: e = &events.CassandraBatch{} case CassandraRegisterEventCode: diff --git a/lib/kube/proxy/forwarder.go b/lib/kube/proxy/forwarder.go index bbba5c91d8f54..9f093d7079095 100644 --- a/lib/kube/proxy/forwarder.go +++ b/lib/kube/proxy/forwarder.go @@ -904,6 +904,9 @@ func (f *Forwarder) emitAuditEvent(req *http.Request, sess *clusterSession, stat Verb: req.Method, ResponseCode: int32(status), KubernetesClusterMetadata: sess.eventClusterMeta(req), + SessionMetadata: apievents.SessionMetadata{ + WithMFA: sess.Identity.GetIdentity().MFAVerified, + }, } r.populateEvent(event) diff --git a/lib/modules/modules.go b/lib/modules/modules.go index 1358e19b8cfc5..ce13363934461 100644 --- a/lib/modules/modules.go +++ b/lib/modules/modules.go @@ -78,6 +78,11 @@ type Features struct { AccessRequests AccessRequestsFeature // CustomTheme holds the name of WebUI custom theme. CustomTheme string + + // IsTrialProduct is true if the cluster is in trial mode. + IsTrialProduct bool + // IsTeam is true if the cluster is a Teleport Team cluster. + IsTeamProduct bool } // DeviceTrustFeature holds the Device Trust feature general and usage-based diff --git a/lib/plugin/registry.go b/lib/plugin/registry.go index 2f169094a5bde..902355dd6bb28 100644 --- a/lib/plugin/registry.go +++ b/lib/plugin/registry.go @@ -16,7 +16,11 @@ limitations under the License. package plugin -import "github.com/gravitational/trace" +import ( + "context" + + "github.com/gravitational/trace" +) // Plugin describes interfaces of the teleport core plugin type Plugin interface { @@ -27,7 +31,7 @@ type Plugin interface { // RegisterAuthWebHandlers registers new methods with the Auth Web Handler RegisterAuthWebHandlers(service interface{}) error // RegisterAuthServices registers new services on the AuthServer - RegisterAuthServices(server interface{}) error + RegisterAuthServices(ctx context.Context, server interface{}) error } // Registry is the plugin registry @@ -41,7 +45,7 @@ type Registry interface { // RegisterAuthWebHandlers registers Teleport Auth web handlers RegisterAuthWebHandlers(handler interface{}) error // RegisterAuthServices registers Teleport AuthServer services - RegisterAuthServices(server interface{}) error + RegisterAuthServices(ctx context.Context, server interface{}) error } // NewRegistry creates an instance of the Registry @@ -103,10 +107,9 @@ func (r *registry) RegisterAuthWebHandlers(handler interface{}) error { return nil } -// RegisterAuthServices registers Teleport AuthServer services -func (r *registry) RegisterAuthServices(server interface{}) error { +func (r *registry) RegisterAuthServices(ctx context.Context, server interface{}) error { for _, p := range r.plugins { - if err := p.RegisterAuthServices(server); err != nil { + if err := p.RegisterAuthServices(ctx, server); err != nil { return trace.Wrap(err, "plugin %v failed to register", p.GetName()) } } diff --git a/lib/service/service.go b/lib/service/service.go index 8dae87e9dae68..e2e9e17cd1000 100644 --- a/lib/service/service.go +++ b/lib/service/service.go @@ -1975,7 +1975,7 @@ func (process *TeleportProcess) initAuthService() error { go mux.Serve() authMetrics := &auth.Metrics{GRPCServerLatency: cfg.Metrics.GRPCServerLatency} - tlsServer, err := auth.NewTLSServer(auth.TLSServerConfig{ + tlsServer, err := auth.NewTLSServer(process.ExitContext(), auth.TLSServerConfig{ TLS: tlsConfig, APIConfig: *apiConf, LimiterConfig: cfg.Auth.Limiter, @@ -2222,6 +2222,7 @@ func (process *TeleportProcess) newAccessCache(cfg accessCacheConfig) (*cache.Ca SAMLIdPServiceProviders: cfg.services, UserGroups: cfg.services, Okta: cfg.services.OktaClient(), + SecReports: cfg.services.SecReportsClient(), UserLoginStates: cfg.services.UserLoginStateClient(), Integrations: cfg.services, DiscoveryConfigs: cfg.services.DiscoveryConfigClient(), diff --git a/lib/service/servicecfg/auth.go b/lib/service/servicecfg/auth.go index ded5ed2864629..60b38be842d67 100644 --- a/lib/service/servicecfg/auth.go +++ b/lib/service/servicecfg/auth.go @@ -16,9 +16,12 @@ package servicecfg import ( "github.com/coreos/go-oidc/oauth2" + "github.com/dustin/go-humanize" + "github.com/gravitational/trace" "github.com/jonboulle/clockwork" "github.com/gravitational/teleport/api/types" + apiutils "github.com/gravitational/teleport/api/utils" "github.com/gravitational/teleport/lib/auth/keystore" "github.com/gravitational/teleport/lib/backend" "github.com/gravitational/teleport/lib/limiter" @@ -110,6 +113,54 @@ type AuthConfig struct { // AssistAPIKey is the OpenAI API key. // TODO: This key will be moved to a plugin once support for plugins is implemented. AssistAPIKey string + + // AccessMonitoring configures access monitoring. + AccessMonitoring *AccessMonitoringOptions +} + +// AccessMonitoringOptions configures access monitoring. +type AccessMonitoringOptions struct { + // EnabledString is the string representation of the Enabled field. + EnabledString string `yaml:"enabled"` + // Enabled is true if access monitoring is enabled. + Enabled bool `yaml:"-"` + + // RoleARN is the ARN of the IAM role to assume when accessing Athena. + RoleARN string `yaml:"role_arn,omitempty"` + // RoleTags are the tags to use when assuming the IAM role. + RoleTags map[string]string `yaml:"role_tags,omitempty"` + + // DataLimitString is the string representation of the DataLimit field. + DataLimitString string `yaml:"data_limit,omitempty"` + // DataLimit is the maximum amount of data that can be returned by a query. + DataLimit uint64 `yaml:"-"` + + // Database is the name of the database to use. + Database string `yaml:"database,omitempty"` + // Table is the name of the table to use. + Table string `yaml:"table,omitempty"` + // Workgroup is the name of the Athena workgroup to use. + Workgroup string `yaml:"workgroup,omitempty"` + // QueryResults is the S3 bucket to use for query results. + QueryResults string `yaml:"query_results,omitempty"` + // ReportResults is the S3 bucket to use for report results. + ReportResults string `yaml:"report_results,omitempty"` +} + +// CheckAndSetDefaults checks and sets default values for any missing fields. +func (a *AccessMonitoringOptions) CheckAndSetDefaults() error { + var err error + if a.DataLimitString != "" { + if a.DataLimit, err = humanize.ParseBytes(a.DataLimitString); err != nil { + return trace.Wrap(err) + } + } + if a.EnabledString != "" { + if a.Enabled, err = apiutils.ParseBool(a.EnabledString); err != nil { + return trace.Wrap(err) + } + } + return nil } // HostedPluginsConfig configures the hosted plugin runtime. diff --git a/lib/services/local/events.go b/lib/services/local/events.go index a0ce86e1d903c..21a2251c7e785 100644 --- a/lib/services/local/events.go +++ b/lib/services/local/events.go @@ -177,6 +177,12 @@ func (e *EventsService) NewWatcher(ctx context.Context, watch types.Watch) (type parser = p case types.KindAccessList: parser = newAccessListParser() + case types.KindAuditQuery: + parser = newAuditQueryParser() + case types.KindSecurityReport: + parser = newSecurityReportParser() + case types.KindSecurityReportState: + parser = newSecurityReportStateParser() case types.KindUserLoginState: parser = newUserLoginStateParser() case types.KindAccessListMember: @@ -1723,6 +1729,78 @@ func (p *accessListParser) parse(event backend.Event) (types.Resource, error) { } } +func newAuditQueryParser() *auditQueryParser { + return &auditQueryParser{ + baseParser: newBaseParser(backend.Key(AuditQueryPrefix)), + } +} + +type auditQueryParser struct { + baseParser +} + +func (p *auditQueryParser) parse(event backend.Event) (types.Resource, error) { + switch event.Type { + case types.OpDelete: + return resourceHeader(event, types.KindAuditQuery, types.V1, 0) + case types.OpPut: + return services.UnmarshalAuditQuery(event.Item.Value, + services.WithResourceID(event.Item.ID), + services.WithExpires(event.Item.Expires), + ) + default: + return nil, trace.BadParameter("event %v is not supported", event.Type) + } +} + +func newSecurityReportParser() *securityReportParser { + return &securityReportParser{ + baseParser: newBaseParser(backend.Key(SecurityReportPrefix)), + } +} + +type securityReportParser struct { + baseParser +} + +func (p *securityReportParser) parse(event backend.Event) (types.Resource, error) { + switch event.Type { + case types.OpDelete: + return resourceHeader(event, types.KindSecurityReport, types.V1, 0) + case types.OpPut: + return services.UnmarshalSecurityReport(event.Item.Value, + services.WithResourceID(event.Item.ID), + services.WithExpires(event.Item.Expires), + ) + default: + return nil, trace.BadParameter("event %v is not supported", event.Type) + } +} + +func newSecurityReportStateParser() *securityReportStateParser { + return &securityReportStateParser{ + baseParser: newBaseParser(backend.Key(SecurityReportStatePrefix)), + } +} + +type securityReportStateParser struct { + baseParser +} + +func (p *securityReportStateParser) parse(event backend.Event) (types.Resource, error) { + switch event.Type { + case types.OpDelete: + return resourceHeader(event, types.KindSecurityReportState, types.V1, 0) + case types.OpPut: + return services.UnmarshalSecurityReportState(event.Item.Value, + services.WithResourceID(event.Item.ID), + services.WithExpires(event.Item.Expires), + ) + default: + return nil, trace.BadParameter("event %v is not supported", event.Type) + } +} + func newUserLoginStateParser() *userLoginStateParser { return &userLoginStateParser{ baseParser: newBaseParser(backend.Key(userLoginStatePrefix)), diff --git a/lib/services/local/generic/generic.go b/lib/services/local/generic/generic.go index 5ab09f0d4c826..3e3601900c733 100644 --- a/lib/services/local/generic/generic.go +++ b/lib/services/local/generic/generic.go @@ -32,7 +32,7 @@ import ( // MarshalFunc is a type signature for a marshaling function. type MarshalFunc[T types.Resource] func(T, ...services.MarshalOption) ([]byte, error) -// UnmarshalFunc is a type signature for an unmarshaling function. +// UnmarshalFunc is a type signature for an unmarshalling function. type UnmarshalFunc[T types.Resource] func([]byte, ...services.MarshalOption) (T, error) // ServiceConfig is the configuration for the service configuration. diff --git a/lib/services/local/secreports.go b/lib/services/local/secreports.go new file mode 100644 index 0000000000000..94f9009521361 --- /dev/null +++ b/lib/services/local/secreports.go @@ -0,0 +1,245 @@ +/* +Copyright 2023 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package local + +import ( + "context" + + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" + "github.com/sirupsen/logrus" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/secreports" + "github.com/gravitational/teleport/lib/backend" + "github.com/gravitational/teleport/lib/services" + "github.com/gravitational/teleport/lib/services/local/generic" +) + +const ( + // AuditQueryPrefix is the prefix for audit queries. + AuditQueryPrefix = "security_report/audit_query" + // SecurityReportPrefix is the prefix for security reports. + SecurityReportPrefix = "security_report/report" + // SecurityReportStatePrefix is the prefix for security report states. + SecurityReportStatePrefix = "security_report/state" + // SecurityReportCostLimiterPrefix is the prefix for security report cost limiter. + SecurityReportCostLimiterPrefix = "security_report/cost_limiter" +) + +// SecReportsService is the local implementation of the SecReports service. +type SecReportsService struct { + log logrus.FieldLogger + clock clockwork.Clock + auditQuerySvc *generic.Service[*secreports.AuditQuery] + securityReportSvc *generic.Service[*secreports.Report] + securityReportStateSvc *generic.Service[*secreports.ReportState] + securityReportCostCostLimiterSvc *generic.Service[*secreports.CostLimiter] +} + +// NewSecReportsService returns a new instance of the SecReports service. +func NewSecReportsService(backend backend.Backend, clock clockwork.Clock) (*SecReportsService, error) { + auditQuerySvc, err := generic.NewService(&generic.ServiceConfig[*secreports.AuditQuery]{ + Backend: backend, + ResourceKind: types.KindAuditQuery, + BackendPrefix: AuditQueryPrefix, + MarshalFunc: services.MarshalAuditQuery, + UnmarshalFunc: services.UnmarshalAuditQuery, + }) + if err != nil { + return nil, trace.Wrap(err) + } + securityReportSvc, err := generic.NewService(&generic.ServiceConfig[*secreports.Report]{ + Backend: backend, + ResourceKind: types.KindSecurityReport, + BackendPrefix: SecurityReportPrefix, + MarshalFunc: services.MarshalSecurityReport, + UnmarshalFunc: services.UnmarshalSecurityReport, + }) + if err != nil { + return nil, trace.Wrap(err) + } + securityReportStateSvc, err := generic.NewService(&generic.ServiceConfig[*secreports.ReportState]{ + Backend: backend, + ResourceKind: types.KindSecurityReportState, + BackendPrefix: SecurityReportStatePrefix, + MarshalFunc: services.MarshalSecurityReportState, + UnmarshalFunc: services.UnmarshalSecurityReportState, + }) + if err != nil { + return nil, trace.Wrap(err) + } + + costSvc, err := generic.NewService(&generic.ServiceConfig[*secreports.CostLimiter]{ + Backend: backend, + ResourceKind: types.KindSecurityReportCostLimiter, + BackendPrefix: SecurityReportCostLimiterPrefix, + MarshalFunc: services.MarshalSecurityCostLimiter, + UnmarshalFunc: services.UnmarshalSecurityCostLimiter, + }) + if err != nil { + return nil, trace.Wrap(err) + } + + return &SecReportsService{ + log: logrus.WithFields(logrus.Fields{trace.Component: "secreports:local-service"}), + clock: clock, + auditQuerySvc: auditQuerySvc, + securityReportSvc: securityReportSvc, + securityReportStateSvc: securityReportStateSvc, + securityReportCostCostLimiterSvc: costSvc, + }, nil +} + +// UpsertSecurityAuditQuery upserts audit query. +func (s *SecReportsService) UpsertSecurityAuditQuery(ctx context.Context, in *secreports.AuditQuery) error { + if err := s.auditQuerySvc.UpsertResource(ctx, in); err != nil { + return trace.Wrap(err) + } + return nil +} + +// GetSecurityAuditQueries returns audit queries. +func (s *SecReportsService) GetSecurityAuditQueries(ctx context.Context) ([]*secreports.AuditQuery, error) { + return s.auditQuerySvc.GetResources(ctx) +} + +// GetSecurityReports returns security reports. +func (s *SecReportsService) GetSecurityReports(ctx context.Context) ([]*secreports.Report, error) { + return s.securityReportSvc.GetResources(ctx) +} + +// GetSecurityReportsStates returns security report states. +func (s *SecReportsService) GetSecurityReportsStates(ctx context.Context) ([]*secreports.ReportState, error) { + return s.securityReportStateSvc.GetResources(ctx) +} + +// GetSecurityAuditQuery returns audit query by name. +func (s *SecReportsService) GetSecurityAuditQuery(ctx context.Context, name string) (*secreports.AuditQuery, error) { + r, err := s.auditQuerySvc.GetResource(ctx, name) + if err != nil { + return nil, trace.Wrap(err) + } + return r, nil +} + +// ListSecurityAuditQueries returns a list of audit queries. +func (s *SecReportsService) ListSecurityAuditQueries(ctx context.Context, pageSize int, nextToken string) ([]*secreports.AuditQuery, string, error) { + items, nextToken, err := s.auditQuerySvc.ListResources(ctx, pageSize, nextToken) + if err != nil { + return nil, "", trace.Wrap(err) + } + return items, nextToken, nil +} + +// DeleteSecurityAuditQuery deletes audit query by name. +func (s *SecReportsService) DeleteSecurityAuditQuery(ctx context.Context, name string) error { + return trace.Wrap(s.auditQuerySvc.DeleteResource(ctx, name)) +} + +// UpsertSecurityReport upserts security report. +func (s *SecReportsService) UpsertSecurityReport(ctx context.Context, item *secreports.Report) error { + if err := s.securityReportSvc.UpsertResource(ctx, item); err != nil { + return trace.Wrap(err) + } + return nil +} + +// GetSecurityReport returns security report by name. +func (s *SecReportsService) GetSecurityReport(ctx context.Context, name string) (*secreports.Report, error) { + r, err := s.securityReportSvc.GetResource(ctx, name) + if err != nil { + return nil, trace.Wrap(err) + } + return r, nil +} + +// ListSecurityReports returns a list of security reports. +func (s *SecReportsService) ListSecurityReports(ctx context.Context, i int, token string) ([]*secreports.Report, string, error) { + items, nextToken, err := s.securityReportSvc.ListResources(ctx, i, token) + if err != nil { + return nil, "", trace.Wrap(err) + } + return items, nextToken, nil +} + +// UpsertSecurityReportsState upserts security report state. +func (s *SecReportsService) UpsertSecurityReportsState(ctx context.Context, item *secreports.ReportState) error { + if err := s.securityReportStateSvc.UpsertResource(ctx, item); err != nil { + return trace.Wrap(err) + } + return nil +} + +// GetSecurityReportState returns security report state by name. +func (s *SecReportsService) GetSecurityReportState(ctx context.Context, name string) (*secreports.ReportState, error) { + r, err := s.securityReportStateSvc.GetResource(ctx, name) + if err != nil { + return nil, trace.Wrap(err) + } + return r, nil +} + +// DeleteSecurityReport deletes security report by name. +func (s *SecReportsService) DeleteSecurityReport(ctx context.Context, name string) error { + return trace.Wrap(s.securityReportSvc.DeleteResource(ctx, name)) +} + +// DeleteAllSecurityAuditQueries deletes all audit queries. +func (s *SecReportsService) DeleteAllSecurityAuditQueries(ctx context.Context) error { + return trace.Wrap(s.auditQuerySvc.DeleteAllResources(ctx)) +} + +// DeleteAllSecurityReports deletes all security reports. +func (s *SecReportsService) DeleteAllSecurityReports(ctx context.Context) error { + return trace.Wrap(s.securityReportSvc.DeleteAllResources(ctx)) +} + +func (s *SecReportsService) ListSecurityReportsStates(ctx context.Context, pageSize int, nextToken string) ([]*secreports.ReportState, string, error) { + items, nextToken, err := s.securityReportStateSvc.ListResources(ctx, pageSize, nextToken) + if err != nil { + return nil, "", trace.Wrap(err) + } + return items, nextToken, nil +} + +// DeleteSecurityReportsState deletes security report state by name. +func (s *SecReportsService) DeleteSecurityReportsState(ctx context.Context, name string) error { + return trace.Wrap(s.securityReportStateSvc.DeleteResource(ctx, name)) +} + +// DeleteAllSecurityReportsStates deletes all security report states. +func (s *SecReportsService) DeleteAllSecurityReportsStates(ctx context.Context) error { + return trace.Wrap(s.securityReportStateSvc.DeleteAllResources(ctx)) +} + +// UpsertCostLimiter upserts cost limiter. +func (s *SecReportsService) UpsertCostLimiter(ctx context.Context, item *secreports.CostLimiter) error { + if err := s.securityReportCostCostLimiterSvc.UpsertResource(ctx, item); err != nil { + return trace.Wrap(err) + } + return nil +} + +// GetCostLimiter returns cost limiter by name. +func (s *SecReportsService) GetCostLimiter(ctx context.Context, name string) (*secreports.CostLimiter, error) { + r, err := s.securityReportCostCostLimiterSvc.GetResource(ctx, name) + if err != nil { + return nil, trace.Wrap(err) + } + return r, nil +} diff --git a/lib/services/presets.go b/lib/services/presets.go index 417f2015992f1..f8d5f1b490843 100644 --- a/lib/services/presets.go +++ b/lib/services/presets.go @@ -164,6 +164,8 @@ func NewPresetEditorRole() types.Role { types.NewRule(types.KindAccessList, RW()), types.NewRule(types.KindNode, RW()), types.NewRule(types.KindDiscoveryConfig, RW()), + types.NewRule(types.KindSecurityReport, append(RW(), types.VerbUse)), + types.NewRule(types.KindAuditQuery, append(RW(), types.VerbUse)), }, }, }, @@ -267,6 +269,8 @@ func NewPresetAuditorRole() types.Role { types.NewRule(types.KindSessionTracker, RO()), types.NewRule(types.KindClusterAlert, RO()), types.NewRule(types.KindInstance, RO()), + types.NewRule(types.KindSecurityReport, append(RO(), types.VerbUse)), + types.NewRule(types.KindAuditQuery, append(RO(), types.VerbUse)), }, }, }, diff --git a/lib/services/resource.go b/lib/services/resource.go index 0c0a1b7cf9f72..4044d1a188944 100644 --- a/lib/services/resource.go +++ b/lib/services/resource.go @@ -214,6 +214,10 @@ func ParseShortcut(in string) (string, error) { return types.KindAccessList, nil case types.KindDiscoveryConfig, types.KindDiscoveryConfig + "s", "discoveryconfig", "discoveryconfigs": return types.KindDiscoveryConfig, nil + case types.KindAuditQuery: + return types.KindAuditQuery, nil + case types.KindSecurityReport: + return types.KindSecurityReport, nil } return "", trace.BadParameter("unsupported resource: %q - resources should be expressed as 'type/name', for example 'connector/github'", in) } diff --git a/lib/services/secreports.go b/lib/services/secreports.go new file mode 100644 index 0000000000000..88f78d23230d9 --- /dev/null +++ b/lib/services/secreports.go @@ -0,0 +1,263 @@ +/* +Copyright 2023 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package services + +import ( + "context" + + "github.com/gravitational/trace" + + "github.com/gravitational/teleport/api/types/secreports" + "github.com/gravitational/teleport/lib/utils" +) + +// SecurityAuditQueryGetter is the interface for audit query getters. +type SecurityAuditQueryGetter interface { + // GetSecurityAuditQuery returns an audit query. + GetSecurityAuditQuery(ctx context.Context, name string) (*secreports.AuditQuery, error) + // GetSecurityAuditQueries returns all audit queries. + GetSecurityAuditQueries(context.Context) ([]*secreports.AuditQuery, error) + // ListSecurityAuditQueries lists audit queries. + ListSecurityAuditQueries(context.Context, int, string) ([]*secreports.AuditQuery, string, error) +} + +// SecurityReportGetter is the interface for security report getters. +type SecurityReportGetter interface { + // GetSecurityReport returns a security report. + GetSecurityReport(ctx context.Context, name string) (*secreports.Report, error) + // GetSecurityReports returns a security report. + GetSecurityReports(ctx context.Context) ([]*secreports.Report, error) + // ListSecurityReports lists security reports. + ListSecurityReports(ctx context.Context, i int, token string) ([]*secreports.Report, string, error) +} + +// SecurityReportStateGetter is the interface for security report state getters. +type SecurityReportStateGetter interface { + // GetSecurityReportState returns a security report state. + GetSecurityReportState(ctx context.Context, name string) (*secreports.ReportState, error) + // GetSecurityReportsStates returns security report states. + GetSecurityReportsStates(context.Context) ([]*secreports.ReportState, error) + // ListSecurityReportsStates lists security report states. + ListSecurityReportsStates(context.Context, int, string) ([]*secreports.ReportState, string, error) +} + +// SecReports is the interface for the SecReports service. +type SecReports interface { + SecurityAuditQueryGetter + // UpsertSecurityAuditQuery upserts an audit query. + UpsertSecurityAuditQuery(ctx context.Context, in *secreports.AuditQuery) error + // DeleteSecurityAuditQuery deletes an audit query. + DeleteSecurityAuditQuery(ctx context.Context, name string) error + // DeleteAllSecurityAuditQueries deletes all audit queries. + DeleteAllSecurityAuditQueries(context.Context) error + + SecurityReportGetter + // UpsertSecurityReport upserts a security report. + UpsertSecurityReport(ctx context.Context, item *secreports.Report) error + // DeleteSecurityReport deletes a security report. + DeleteSecurityReport(ctx context.Context, name string) error + // DeleteAllSecurityReports deletes all audit queries. + DeleteAllSecurityReports(context.Context) error + + SecurityReportStateGetter + // UpsertSecurityReportsState upserts a security report state. + UpsertSecurityReportsState(ctx context.Context, item *secreports.ReportState) error + // DeleteSecurityReportsState deletes all audit queries. + DeleteSecurityReportsState(ctx context.Context, name string) error + // DeleteAllSecurityReportsStates deletes all audit queries. + DeleteAllSecurityReportsStates(context.Context) error +} + +// CostLimiter is the interface for the security cost limiter. +type CostLimiter interface { + // UpsertCostLimiter upserts a security cost limiter. + UpsertCostLimiter(ctx context.Context, item *secreports.CostLimiter) error + // GetCostLimiter returns a security cost limiter. + GetCostLimiter(ctx context.Context, name string) (*secreports.CostLimiter, error) +} + +// MarshalAuditQuery marshals an audit query. +func MarshalAuditQuery(in *secreports.AuditQuery, opts ...MarshalOption) ([]byte, error) { + if err := in.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + + cfg, err := CollectOptions(opts) + if err != nil { + return nil, trace.Wrap(err) + } + + if !cfg.PreserveResourceID { + copy := *in + copy.SetResourceID(0) + in = © + } + return utils.FastMarshal(in) +} + +// UnmarshalAuditQuery unmarshals an audit query. +func UnmarshalAuditQuery(data []byte, opts ...MarshalOption) (*secreports.AuditQuery, error) { + if len(data) == 0 { + return nil, trace.BadParameter("missing access list data") + } + cfg, err := CollectOptions(opts) + if err != nil { + return nil, trace.Wrap(err) + } + var out *secreports.AuditQuery + if err := utils.FastUnmarshal(data, &out); err != nil { + return nil, trace.BadParameter(err.Error()) + } + if err := out.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + if cfg.ID != 0 { + out.SetResourceID(cfg.ID) + } + if !cfg.Expires.IsZero() { + out.SetExpiry(cfg.Expires) + } + return out, nil +} + +// MarshalSecurityReport marshals a security report. +func MarshalSecurityReport(in *secreports.Report, opts ...MarshalOption) ([]byte, error) { + if err := in.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + + cfg, err := CollectOptions(opts) + if err != nil { + return nil, trace.Wrap(err) + } + + if !cfg.PreserveResourceID { + copy := *in + copy.SetResourceID(0) + in = © + } + return utils.FastMarshal(in) +} + +// UnmarshalSecurityReport unmarshals a security report. +func UnmarshalSecurityReport(data []byte, opts ...MarshalOption) (*secreports.Report, error) { + if len(data) == 0 { + return nil, trace.BadParameter("missing access list data") + } + cfg, err := CollectOptions(opts) + if err != nil { + return nil, trace.Wrap(err) + } + var out *secreports.Report + if err := utils.FastUnmarshal(data, &out); err != nil { + return nil, trace.BadParameter(err.Error()) + } + if err := out.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + if cfg.ID != 0 { + out.SetResourceID(cfg.ID) + } + if !cfg.Expires.IsZero() { + out.SetExpiry(cfg.Expires) + } + return out, nil +} + +// MarshalSecurityReportState marshals a security report state. +func MarshalSecurityReportState(in *secreports.ReportState, opts ...MarshalOption) ([]byte, error) { + if err := in.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + cfg, err := CollectOptions(opts) + if err != nil { + return nil, trace.Wrap(err) + } + if !cfg.PreserveResourceID { + copy := *in + copy.SetResourceID(0) + in = © + } + return utils.FastMarshal(in) +} + +// UnmarshalSecurityReportState unmarshals a security report state. +func UnmarshalSecurityReportState(data []byte, opts ...MarshalOption) (*secreports.ReportState, error) { + if len(data) == 0 { + return nil, trace.BadParameter("missing data") + } + cfg, err := CollectOptions(opts) + if err != nil { + return nil, trace.Wrap(err) + } + var out *secreports.ReportState + if err := utils.FastUnmarshal(data, &out); err != nil { + return nil, trace.BadParameter(err.Error()) + } + if err := out.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + if cfg.ID != 0 { + out.SetResourceID(cfg.ID) + } + if !cfg.Expires.IsZero() { + out.SetExpiry(cfg.Expires) + } + return out, nil +} + +// MarshalSecurityCostLimiter marshals a security report state. +func MarshalSecurityCostLimiter(in *secreports.CostLimiter, opts ...MarshalOption) ([]byte, error) { + if err := in.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + cfg, err := CollectOptions(opts) + if err != nil { + return nil, trace.Wrap(err) + } + if !cfg.PreserveResourceID { + copy := *in + copy.SetResourceID(0) + in = © + } + return utils.FastMarshal(in) +} + +// UnmarshalSecurityCostLimiter unmarshals a security report cost limiter. +func UnmarshalSecurityCostLimiter(data []byte, opts ...MarshalOption) (*secreports.CostLimiter, error) { + if len(data) == 0 { + return nil, trace.BadParameter("missing data") + } + cfg, err := CollectOptions(opts) + if err != nil { + return nil, trace.Wrap(err) + } + var out *secreports.CostLimiter + if err := utils.FastUnmarshal(data, &out); err != nil { + return nil, trace.BadParameter(err.Error()) + } + if err := out.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + if cfg.ID != 0 { + out.SetResourceID(cfg.ID) + } + if !cfg.Expires.IsZero() { + out.SetExpiry(cfg.Expires) + } + return out, nil +} diff --git a/lib/services/secreports_test.go b/lib/services/secreports_test.go new file mode 100644 index 0000000000000..fdb85c49f0b71 --- /dev/null +++ b/lib/services/secreports_test.go @@ -0,0 +1,89 @@ +/* +Copyright 2023 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package services + +import ( + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/api/types/header" + "github.com/gravitational/teleport/api/types/secreports" +) + +func TestMarshalUnmarshalAuditQuery(t *testing.T) { + want, err := secreports.NewAuditQuery( + header.Metadata{Name: "audit_query"}, + secreports.AuditQuerySpec{ + Name: "audit_query_example", + Title: "Audit Query Example Title", + Description: "Audit Query Description", + Query: "SELECT 1", + }, + ) + require.NoError(t, err) + data, err := MarshalAuditQuery(want) + require.NoError(t, err) + got, err := UnmarshalAuditQuery(data) + require.NoError(t, err) + require.Equal(t, want, got) +} + +func TestMarshalUnmarshalSecurityReport(t *testing.T) { + want, err := secreports.NewReport( + header.Metadata{Name: "security_report"}, + secreports.ReportSpec{ + Name: "Security Report", + Title: "Security Report Name", + Description: "Description", + AuditQueries: []*secreports.AuditQuerySpec{ + { + Name: "audit_query_example", + Title: "Audit Query Example Title", + Description: "Audit Query Description", + Query: "SELECT 1", + }, + }, + Version: "0.0.1", + }, + ) + + require.NoError(t, err) + data, err := MarshalSecurityReport(want) + require.NoError(t, err) + got, err := UnmarshalSecurityReport(data) + require.NoError(t, err) + require.Equal(t, want, got) +} + +func TestMarshalUnmarshalSecurityReportState(t *testing.T) { + want, err := secreports.NewReportState( + header.Metadata{Name: "security_report_state"}, + secreports.ReportStateSpec{ + Status: secreports.Ready, + UpdatedAt: time.Now().UTC(), + }, + ) + + require.NoError(t, err) + data, err := MarshalSecurityReportState(want) + require.NoError(t, err) + got, err := UnmarshalSecurityReportState(data) + require.NoError(t, err) + require.Equal(t, want, got) +} diff --git a/lib/services/services.go b/lib/services/services.go index 2b9d99b9152b1..6bc422c4068f3 100644 --- a/lib/services/services.go +++ b/lib/services/services.go @@ -17,6 +17,7 @@ limitations under the License. package services import ( + "github.com/gravitational/teleport/api/client/secreport" "github.com/gravitational/teleport/api/types" ) @@ -49,6 +50,7 @@ type Services interface { AccessListClient() AccessLists UserLoginStateClient() UserLoginStates DiscoveryConfigClient() DiscoveryConfigs + SecReportsClient() *secreport.Client } // RotationGetter returns the rotation state. diff --git a/lib/services/useracl.go b/lib/services/useracl.go index 5b6ce49d81610..5c721e91b7dcf 100644 --- a/lib/services/useracl.go +++ b/lib/services/useracl.go @@ -94,6 +94,10 @@ type UserACL struct { AccessList ResourceAccess `json:"accessList"` // DiscoveryConfig defines whether the user has access to manage DiscoveryConfigs. DiscoveryConfig ResourceAccess `json:"discoverConfigs"` + // AuditQuery defines access to audit query management. + AuditQuery ResourceAccess `json:"auditQuery"` + // SecurityReport defines access to security reports. + SecurityReport ResourceAccess `json:"securityReport"` } func hasAccess(roleSet RoleSet, ctx *Context, kind string, verbs ...string) bool { @@ -164,6 +168,8 @@ func NewUserACL(user types.User, userRoles RoleSet, features proto.Features, des discoveryConfigsAccess := newAccess(userRoles, ctx, types.KindDiscoveryConfig) lockAccess := newAccess(userRoles, ctx, types.KindLock) accessListAccess := newAccess(userRoles, ctx, types.KindAccessList) + auditQuery := newAccess(userRoles, ctx, types.KindAuditQuery) + securityReports := newAccess(userRoles, ctx, types.KindSecurityReport) return UserACL{ AccessRequests: requestAccess, @@ -196,5 +202,7 @@ func NewUserACL(user types.User, userRoles RoleSet, features proto.Features, des Assist: assistAccess, SAMLIdpServiceProvider: samlIdpServiceProviderAccess, AccessList: accessListAccess, + AuditQuery: auditQuery, + SecurityReport: securityReports, } } diff --git a/lib/tlsca/ca.go b/lib/tlsca/ca.go index 6f45fffad2c98..303671ee10472 100644 --- a/lib/tlsca/ca.go +++ b/lib/tlsca/ca.go @@ -484,7 +484,7 @@ var ( // the IP the certificate is pinned to. PinnedIPASN1ExtensionOID = asn1.ObjectIdentifier{1, 3, 9999, 2, 15} - // CreateWindowsUserOID + // CreateWindowsUserOID is an extension OID used to indicate that the user should be created. CreateWindowsUserOID = asn1.ObjectIdentifier{1, 3, 9999, 2, 16} // DesktopsLimitExceededOID is an extension OID used indicate if number of non-AD desktops exceeds the limit for OSS distribution. diff --git a/tool/tctl/common/collection.go b/tool/tctl/common/collection.go index f92e2d4b2d794..3e07687cad938 100644 --- a/tool/tctl/common/collection.go +++ b/tool/tctl/common/collection.go @@ -32,6 +32,7 @@ import ( "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/discoveryconfig" "github.com/gravitational/teleport/api/types/externalcloudaudit" + "github.com/gravitational/teleport/api/types/secreports" apiutils "github.com/gravitational/teleport/api/utils" "github.com/gravitational/teleport/lib/asciitable" "github.com/gravitational/teleport/lib/devicetrust" @@ -1250,3 +1251,49 @@ func (c *userGroupCollection) writeText(w io.Writer, verbose bool) error { _, err := t.AsBuffer().WriteTo(w) return trace.Wrap(err) } + +type auditQueryCollection struct { + auditQueries []*secreports.AuditQuery +} + +func (c *auditQueryCollection) resources() []types.Resource { + r := make([]types.Resource, len(c.auditQueries)) + for i, resource := range c.auditQueries { + r[i] = resource + } + return r +} + +func (c *auditQueryCollection) writeText(w io.Writer, verbose bool) error { + t := asciitable.MakeTable([]string{"Name", "Title", "Query", "Description"}) + for _, v := range c.auditQueries { + t.AddRow([]string{v.GetName(), v.Spec.Title, v.Spec.Query, v.Spec.Description}) + } + _, err := t.AsBuffer().WriteTo(w) + return trace.Wrap(err) +} + +type securityReportCollection struct { + items []*secreports.Report +} + +func (c *securityReportCollection) resources() []types.Resource { + r := make([]types.Resource, len(c.items)) + for i, resource := range c.items { + r[i] = resource + } + return r +} + +func (c *securityReportCollection) writeText(w io.Writer, verbose bool) error { + t := asciitable.MakeTable([]string{"Name", "Title", "Audit Queries", "Description"}) + for _, v := range c.items { + auditQueriesNames := make([]string, 0, len(v.Spec.AuditQueries)) + for _, k := range v.Spec.AuditQueries { + auditQueriesNames = append(auditQueriesNames, k.Name) + } + t.AddRow([]string{v.GetName(), v.Spec.Title, strings.Join(auditQueriesNames, ", "), v.Spec.Description}) + } + _, err := t.AsBuffer().WriteTo(w) + return trace.Wrap(err) +} diff --git a/tool/tctl/common/resource_command.go b/tool/tctl/common/resource_command.go index ab16300e608ba..93db3f0c35ee2 100644 --- a/tool/tctl/common/resource_command.go +++ b/tool/tctl/common/resource_command.go @@ -44,6 +44,7 @@ import ( "github.com/gravitational/teleport/api/types/discoveryconfig" "github.com/gravitational/teleport/api/types/externalcloudaudit" "github.com/gravitational/teleport/api/types/installers" + "github.com/gravitational/teleport/api/types/secreports" "github.com/gravitational/teleport/lib/auth" "github.com/gravitational/teleport/lib/client" "github.com/gravitational/teleport/lib/defaults" @@ -135,6 +136,8 @@ func (rc *ResourceCommand) Initialize(app *kingpin.Application, config *servicec types.KindWindowsDesktop: rc.createWindowsDesktop, types.KindAccessList: rc.createAccessList, types.KindDiscoveryConfig: rc.createDiscoveryConfig, + types.KindAuditQuery: rc.createAuditQuery, + types.KindSecurityReport: rc.createSecurityReport, } rc.UpdateHandlers = map[ResourceKind]ResourceCreateHandler{ types.KindUser: rc.updateUser, @@ -1391,6 +1394,17 @@ func (rc *ResourceCommand) Delete(ctx context.Context, client auth.ClientI) (err return trace.Wrap(err) } fmt.Printf("Access list %q has been deleted\n", rc.ref.Name) + case types.KindAuditQuery: + if err := client.SecReportsClient().DeleteSecurityAuditQuery(ctx, rc.ref.Name); err != nil { + return trace.Wrap(err) + } + fmt.Printf("Audit query %q has been deleted\n", rc.ref.Name) + case types.KindSecurityReport: + if err := client.SecReportsClient().DeleteSecurityReport(ctx, rc.ref.Name); err != nil { + return trace.Wrap(err) + } + fmt.Printf("Security report %q has been deleted\n", rc.ref.Name) + default: return trace.BadParameter("deleting resources of type %q is not supported", rc.ref.Kind) } @@ -2167,9 +2181,7 @@ func (rc *ResourceCommand) getCollection(ctx context.Context, client auth.Client break } } - return &integrationCollection{integrations: resources}, nil - case types.KindDiscoveryConfig: remote := client.DiscoveryConfigClient() if rc.ref.Name != "" { @@ -2196,6 +2208,35 @@ func (rc *ResourceCommand) getCollection(ctx context.Context, client auth.Client } return &discoveryConfigCollection{discoveryConfigs: resources}, nil + case types.KindAuditQuery: + if rc.ref.Name != "" { + auditQuery, err := client.SecReportsClient().GetSecurityAuditQuery(ctx, rc.ref.Name) + if err != nil { + return nil, trace.Wrap(err) + } + return &auditQueryCollection{auditQueries: []*secreports.AuditQuery{auditQuery}}, nil + } + + resources, err := client.SecReportsClient().GetSecurityAuditQueries(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + + return &auditQueryCollection{auditQueries: resources}, nil + case types.KindSecurityReport: + if rc.ref.Name != "" { + + resource, err := client.SecReportsClient().GetSecurityReport(ctx, rc.ref.Name) + if err != nil { + return nil, trace.Wrap(err) + } + return &securityReportCollection{items: []*secreports.Report{resource}}, nil + } + resources, err := client.SecReportsClient().GetSecurityReports(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + return &securityReportCollection{items: resources}, nil } return nil, trace.BadParameter("getting %q is not supported", rc.ref.String()) } @@ -2388,3 +2429,39 @@ Use the full resource name that was generated by the Teleport Discovery service, $ tctl rm %s`, ref.String(), resDesc, strings.Join(names, "\n"), exampleRef.String()) } + +func (rc *ResourceCommand) createAuditQuery(ctx context.Context, client auth.ClientI, raw services.UnknownResource) error { + in, err := services.UnmarshalAuditQuery(raw.Raw) + if err != nil { + return trace.Wrap(err) + } + + if err := in.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + + if err = client.SecReportsClient().UpsertSecurityAuditQuery(ctx, in); err != nil { + if err != nil { + return trace.Wrap(err) + } + } + return nil +} + +func (rc *ResourceCommand) createSecurityReport(ctx context.Context, client auth.ClientI, raw services.UnknownResource) error { + in, err := services.UnmarshalSecurityReport(raw.Raw) + if err != nil { + return trace.Wrap(err) + } + + if err := in.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + + if err = client.SecReportsClient().UpsertSecurityReport(ctx, in); err != nil { + if err != nil { + return trace.Wrap(err) + } + } + return nil +} diff --git a/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx b/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx index 75fa0c9c4b444..c5ac4c7552a9a 100644 --- a/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx +++ b/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx @@ -238,6 +238,8 @@ const EventIconMap: Record = { [eventCodes.ACCESS_LIST_MEMBER_DELETE_ALL_FOR_ACCESS_LIST]: Icons.User, [eventCodes.ACCESS_LIST_MEMBER_DELETE_ALL_FOR_ACCESS_LIST_FAILURE]: Icons.Warning, + [eventCodes.SECURITY_REPORT_AUDIT_QUERY_RUN]: Icons.Info, + [eventCodes.SECURITY_REPORT_RUN]: Icons.Info, [eventCodes.UNKNOWN]: Icons.Question, }; diff --git a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap index 0875764281c82..737ef498aa029 100644 --- a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap +++ b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap @@ -437,12 +437,12 @@ exports[`list of all events 1`] = ` - - 212 + 214 of - 212 + 214 + + + + +
+ + + + + + + + Access Monitoring Report Executed +
+ + + User [system] executed [privilege_access_report_90_days] access monitoring report + + + 2023-10-09T09:10:03.633Z + + + + + `User [${updated_by}] failed to remove all members from access list [${access_list_name}]`, }, + [eventCodes.SECURITY_REPORT_AUDIT_QUERY_RUN]: { + type: 'secreports.audit.query.run"', + desc: 'Access Monitoring Query Executed', + format: ({ user, query }) => + `User [${user}] executed Access Monitoring query [${truncateStr( + query, + 80 + )}]`, + }, + [eventCodes.SECURITY_REPORT_RUN]: { + type: 'secreports.report.run""', + desc: 'Access Monitoring Report Executed', + format: ({ user, name }) => + `User [${user}] executed [${name}] access monitoring report`, + }, [eventCodes.UNKNOWN]: { type: 'unknown', desc: 'Unknown Event', diff --git a/web/packages/teleport/src/services/audit/types.ts b/web/packages/teleport/src/services/audit/types.ts index b67458cf8e09d..3e1b7e7b2681d 100644 --- a/web/packages/teleport/src/services/audit/types.ts +++ b/web/packages/teleport/src/services/audit/types.ts @@ -255,6 +255,8 @@ export const eventCodes = { ACCESS_LIST_MEMBER_DELETE_FAILURE: 'TAL007E', ACCESS_LIST_MEMBER_DELETE_ALL_FOR_ACCESS_LIST: 'TAL008I', ACCESS_LIST_MEMBER_DELETE_ALL_FOR_ACCESS_LIST_FAILURE: 'TAL008E', + SECURITY_REPORT_AUDIT_QUERY_RUN: 'SRE001I', + SECURITY_REPORT_RUN: 'SRE002I', } as const; /** @@ -1409,6 +1411,22 @@ export type RawEvents = { updated_by: string; } >; + [eventCodes.SECURITY_REPORT_AUDIT_QUERY_RUN]: RawEvent< + typeof eventCodes.SECURITY_REPORT_AUDIT_QUERY_RUN, + { + query: string; + total_execution_time_in_millis: string; + total_data_scanned_in_bytes: string; + } + >; + [eventCodes.SECURITY_REPORT_RUN]: RawEvent< + typeof eventCodes.SECURITY_REPORT_AUDIT_QUERY_RUN, + { + name: string; + total_execution_time_in_millis: string; + total_data_scanned_in_bytes: string; + } + >; }; /**