From 8491335bfe0562755e85bdbee731429ad25c6a80 Mon Sep 17 00:00:00 2001 From: Vladi Bilonenko Date: Sun, 5 May 2024 10:25:17 +0200 Subject: [PATCH] Make GCP storage bucket optional and autocomplete project list --- migrations/000019_dw_job_id.up.sql | 2 + proto/dekart.proto | 10 + src/client/ConnectionModal.js | 34 +- src/client/ConnectionModal.module.css | 4 + src/client/Dataset.js | 16 +- src/client/File.js | 1 + src/client/actions/connection.js | 40 +- src/client/reducers/connectionReducer.js | 14 +- src/proto/dekart.pb.go | 1836 +++++++++-------- src/proto/dekart_grpc.pb.go | 37 + src/proto/dekart_pb.d.ts | 46 + src/proto/dekart_pb.js | 363 +++- src/proto/dekart_pb_service.d.ts | 19 + src/proto/dekart_pb_service.js | 40 + src/server/app/app.go | 2 +- src/server/athenajob/athenajob.go | 3 +- src/server/bqjob/bqjob.go | 46 +- src/server/bqstorage/bqstorage.go | 125 ++ src/server/bqutils/bqutils.go | 19 + src/server/{bqjob => bqutils}/decoder.go | 8 +- .../{bqjob/read.go => bqutils/reader.go} | 8 +- src/server/conn/connctx.go | 40 + src/server/dekart/connection.go | 20 +- src/server/dekart/dataset.go | 44 +- src/server/dekart/file.go | 15 +- src/server/dekart/job.go | 4 + src/server/dekart/query.go | 13 +- src/server/dekart/querysource.go | 25 +- src/server/dekart/server.go | 60 + src/server/errtype/errtype.go | 19 + src/server/job/job.go | 37 +- src/server/main.go | 3 + src/server/pgjob/pgjob.go | 3 +- src/server/snowflakejob/snowflakejob.go | 13 +- src/server/storage/snowflakestorage.go | 19 +- src/server/storage/storage.go | 24 +- src/server/storage/userstorage.go | 43 + 37 files changed, 2083 insertions(+), 972 deletions(-) create mode 100644 migrations/000019_dw_job_id.up.sql create mode 100644 src/server/bqstorage/bqstorage.go create mode 100644 src/server/bqutils/bqutils.go rename src/server/{bqjob => bqutils}/decoder.go (94%) rename src/server/{bqjob/read.go => bqutils/reader.go} (97%) create mode 100644 src/server/conn/connctx.go create mode 100644 src/server/errtype/errtype.go create mode 100644 src/server/storage/userstorage.go diff --git a/migrations/000019_dw_job_id.up.sql b/migrations/000019_dw_job_id.up.sql new file mode 100644 index 00000000..afdb0918 --- /dev/null +++ b/migrations/000019_dw_job_id.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE queries +ADD COLUMN dw_job_id VARCHAR(255) NULL DEFAULT NULL; \ No newline at end of file diff --git a/proto/dekart.proto b/proto/dekart.proto index d09191e1..60cbc040 100644 --- a/proto/dekart.proto +++ b/proto/dekart.proto @@ -37,6 +37,7 @@ service Dekart { //connections rpc CreateConnection(CreateConnectionRequest) returns (CreateConnectionResponse) {} + rpc GetGcpProjectList(GetGcpProjectListRequest) returns (GetGcpProjectListResponse) {} rpc UpdateConnection(UpdateConnectionRequest) returns (UpdateConnectionResponse) {} rpc ArchiveConnection(ArchiveConnectionRequest) returns (ArchiveConnectionResponse) {} rpc GetConnectionList(GetConnectionListRequest) returns (GetConnectionListResponse) {} @@ -44,6 +45,13 @@ service Dekart { rpc SetDefaultConnection(SetDefaultConnectionRequest) returns (SetDefaultConnectionResponse) {} } +message GetGcpProjectListRequest { +} + +message GetGcpProjectListResponse { + repeated string projects = 1; +} + message SetDefaultConnectionRequest { string connection_id = 1; } @@ -117,6 +125,8 @@ message Connection { string author_email = 6; int64 created_at = 7; int64 updated_at = 8; + int64 dataset_count = 9; + bool can_store_files = 10; } message GetUsageRequest {} diff --git a/src/client/ConnectionModal.js b/src/client/ConnectionModal.js index b87f53ac..a4b17b9f 100644 --- a/src/client/ConnectionModal.js +++ b/src/client/ConnectionModal.js @@ -8,12 +8,16 @@ import { useEffect } from 'react' import { archiveConnection, closeConnectionDialog, connectionChanged, saveConnection, testConnection } from './actions/connection' import { CheckCircleTwoTone, ExclamationCircleTwoTone } from '@ant-design/icons' import Tooltip from 'antd/es/tooltip' +import AutoComplete from 'antd/es/auto-complete' +import Alert from 'antd/es/alert' function Footer ({ form }) { const { dialog, test } = useSelector(state => state.connection) const { tested, testing, error: testError, success: testSuccess } = test const { id, loading } = dialog + const connection = useSelector(state => state.connection.list.find(s => s.id === id)) + const dispatch = useDispatch() return ( @@ -33,13 +37,14 @@ function Footer ({ form }) {
-
@@ -47,7 +52,7 @@ function Footer ({ form }) { } export default function ConnectionModal () { - const { dialog } = useSelector(state => state.connection) + const { dialog, projects } = useSelector(state => state.connection) const { visible, id, loading } = dialog const env = useSelector(state => state.env) @@ -88,15 +93,28 @@ export default function ConnectionModal () { if (changedValues.bigqueryProjectId || changedValues.cloudStorageBucket) { dispatch(connectionChanged(allValues)) } + if (changedValues.bigqueryProjectId && !allValues.connectionName) { + form.setFieldsValue({ connectionName: changedValues.bigqueryProjectId }) + } }} > - - - + {connection?.datasetCount > 0 ?
Danger zone! This connection is used in {connection.datasetCount} dataset{connection.datasetCount > 1 ? 's' : ''}.} description="Modifying it may lead to queries and results not being found in reports. Consider creating new connection and archiving this one. Modifying name is safe." type="error" />
: null} - + { + projects.length > 0 && !BIGQUERY_PROJECT_ID + ? ( + ({ value: project, label: project }))} + filterOption={(inputValue, option) => option.value.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1} + /> + ) + : + } + + + - + diff --git a/src/client/ConnectionModal.module.css b/src/client/ConnectionModal.module.css index f2b3ac51..031e7601 100644 --- a/src/client/ConnectionModal.module.css +++ b/src/client/ConnectionModal.module.css @@ -15,4 +15,8 @@ width: 32px; height: 32px; font-size: 18px; +} + +.datasetsCountAlert { + margin-bottom: 20px; } \ No newline at end of file diff --git a/src/client/Dataset.js b/src/client/Dataset.js index 7c22be17..3eba2ffa 100644 --- a/src/client/Dataset.js +++ b/src/client/Dataset.js @@ -17,9 +17,21 @@ function DatasetTypeSelector ({ dataset }) { const dispatch = useDispatch() const userDefinedConnection = useSelector(state => state.connection.userDefined) + const connectionList = useSelector(state => state.connection.list) const env = useSelector(state => state.env) const { ALLOW_FILE_UPLOAD } = env.variables + let allowFileUpload = ALLOW_FILE_UPLOAD + let disabledFileUploadNote = 'File upload is disabled in Dekart configuration' + if (allowFileUpload && userDefinedConnection) { + // check if selected connection supports file upload + const connection = connectionList.find(c => c.id === dataset.connectionId) + allowFileUpload = connection?.canStoreFiles + if (!allowFileUpload) { + disabledFileUploadNote = 'Selected connection does not support file upload' + } + } + return (
@@ -35,8 +47,8 @@ function DatasetTypeSelector ({ dataset }) { { label: 'File upload', icon: , - title: !ALLOW_FILE_UPLOAD ? 'File upload is disabled in Dekart configuration' : null, - disabled: !ALLOW_FILE_UPLOAD, + title: !allowFileUpload ? disabledFileUploadNote : null, + disabled: !allowFileUpload, key: 'file' } ], diff --git a/src/client/File.js b/src/client/File.js index 6a8fc02a..2a5465ad 100644 --- a/src/client/File.js +++ b/src/client/File.js @@ -34,6 +34,7 @@ function getStorageName (env) { storageName = 'S3' break case 'GCS': + case 'USER': // only GCS is supported for user storage storageName = 'Cloud Storage' break default: diff --git a/src/client/actions/connection.js b/src/client/actions/connection.js index 0a4897dd..c211b451 100644 --- a/src/client/actions/connection.js +++ b/src/client/actions/connection.js @@ -1,4 +1,4 @@ -import { ArchiveConnectionRequest, CreateConnectionRequest, GetConnectionListRequest, Connection, TestConnectionRequest, UpdateConnectionRequest, SetDefaultConnectionRequest } from '../../proto/dekart_pb' +import { ArchiveConnectionRequest, CreateConnectionRequest, GetConnectionListRequest, Connection, TestConnectionRequest, UpdateConnectionRequest, SetDefaultConnectionRequest, GetGcpProjectListRequest } from '../../proto/dekart_pb' import { Dekart } from '../../proto/dekart_pb_service' import { updateDatasetConnection } from './dataset' import { grpcCall } from './grpc' @@ -11,8 +11,33 @@ export function closeConnectionDialog () { return { type: closeConnectionDialog.name } } +export function projectListUpdate (projectsList) { + return { type: projectListUpdate.name, projectsList } +} + +export function getProjectList () { + return async (dispatch) => { + dispatch({ type: getProjectList.name }) + const request = new GetGcpProjectListRequest() + const res = await new Promise((resolve, reject) => { + dispatch(grpcCall(Dekart.GetGcpProjectList, request, resolve, (err) => { + resolve({ projectsList: [] }) + if (err.code === 7) { + // insufficient permissions for scopes + return + } + return err + })) + }) + dispatch(projectListUpdate(res.projectsList)) + } +} + export function editConnection (id) { - return { type: editConnection.name, id } + return async (dispatch) => { + dispatch({ type: editConnection.name, id }) + dispatch(getProjectList()) + } } export function selectConnection (id) { @@ -49,21 +74,11 @@ export function archiveConnection (id) { } } -function getDefaultName (connectionsList, suffix = 0) { - const name = suffix ? `BigQuery (${suffix})` : 'BigQuery' - if (connectionsList.find(c => c.connectionName === name)) { - return getDefaultName(connectionsList, suffix + 1) - } - return name -} - export function newConnection (datasetId) { return async (dispatch, getState) => { dispatch({ type: newConnection.name }) - const connectionName = getDefaultName(getState().connection.list) const request = new CreateConnectionRequest() - request.setConnectionName(connectionName) const res = await new Promise((resolve) => { dispatch(grpcCall(Dekart.CreateConnection, request, resolve)) @@ -72,6 +87,7 @@ export function newConnection (datasetId) { dispatch(updateDatasetConnection(datasetId, res.connection.id)) } dispatch(connectionCreated(res.connection)) + dispatch(getProjectList()) } } diff --git a/src/client/reducers/connectionReducer.js b/src/client/reducers/connectionReducer.js index ae9040bd..083d020f 100644 --- a/src/client/reducers/connectionReducer.js +++ b/src/client/reducers/connectionReducer.js @@ -1,5 +1,5 @@ import { combineReducers } from 'redux' -import { closeConnectionDialog, connectionChanged, connectionCreated, connectionListUpdate, connectionSaved, editConnection, newConnection, saveConnection, testConnection, testConnectionResponse } from '../actions/connection' +import { closeConnectionDialog, connectionChanged, connectionCreated, connectionListUpdate, connectionSaved, editConnection, newConnection, projectListUpdate, saveConnection, testConnection, testConnectionResponse } from '../actions/connection' import { setEnv } from '../actions/env' function dialog (state = { @@ -114,10 +114,20 @@ function userDefined (state = false, action) { } } +function projects (state = [], action) { + switch (action.type) { + case projectListUpdate.name: + return action.projectsList + default: + return state + } +} + export default combineReducers({ dialog, test, list, userDefined, - listLoaded + listLoaded, + projects }) diff --git a/src/proto/dekart.pb.go b/src/proto/dekart.pb.go index 1b53364e..9047f251 100644 --- a/src/proto/dekart.pb.go +++ b/src/proto/dekart.pb.go @@ -105,7 +105,7 @@ func (x GetEnvResponse_Variable_Type) Number() protoreflect.EnumNumber { // Deprecated: Use GetEnvResponse_Variable_Type.Descriptor instead. func (GetEnvResponse_Variable_Type) EnumDescriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{25, 0, 0} + return file_proto_dekart_proto_rawDescGZIP(), []int{27, 0, 0} } type AuthState_Action int32 @@ -157,7 +157,7 @@ func (x AuthState_Action) Number() protoreflect.EnumNumber { // Deprecated: Use AuthState_Action.Descriptor instead. func (AuthState_Action) EnumDescriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{27, 0} + return file_proto_dekart_proto_rawDescGZIP(), []int{29, 0} } type Query_JobStatus int32 @@ -215,7 +215,7 @@ func (x Query_JobStatus) Number() protoreflect.EnumNumber { // Deprecated: Use Query_JobStatus.Descriptor instead. func (Query_JobStatus) EnumDescriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{34, 0} + return file_proto_dekart_proto_rawDescGZIP(), []int{36, 0} } type Query_QuerySource int32 @@ -264,7 +264,7 @@ func (x Query_QuerySource) Number() protoreflect.EnumNumber { // Deprecated: Use Query_QuerySource.Descriptor instead. func (Query_QuerySource) EnumDescriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{34, 1} + return file_proto_dekart_proto_rawDescGZIP(), []int{36, 1} } type File_Status int32 @@ -316,7 +316,92 @@ func (x File_Status) Number() protoreflect.EnumNumber { // Deprecated: Use File_Status.Descriptor instead. func (File_Status) EnumDescriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{35, 0} + return file_proto_dekart_proto_rawDescGZIP(), []int{37, 0} +} + +type GetGcpProjectListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetGcpProjectListRequest) Reset() { + *x = GetGcpProjectListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_dekart_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetGcpProjectListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGcpProjectListRequest) ProtoMessage() {} + +func (x *GetGcpProjectListRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_dekart_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 GetGcpProjectListRequest.ProtoReflect.Descriptor instead. +func (*GetGcpProjectListRequest) Descriptor() ([]byte, []int) { + return file_proto_dekart_proto_rawDescGZIP(), []int{0} +} + +type GetGcpProjectListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Projects []string `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects,omitempty"` +} + +func (x *GetGcpProjectListResponse) Reset() { + *x = GetGcpProjectListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_dekart_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetGcpProjectListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGcpProjectListResponse) ProtoMessage() {} + +func (x *GetGcpProjectListResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_dekart_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 GetGcpProjectListResponse.ProtoReflect.Descriptor instead. +func (*GetGcpProjectListResponse) Descriptor() ([]byte, []int) { + return file_proto_dekart_proto_rawDescGZIP(), []int{1} +} + +func (x *GetGcpProjectListResponse) GetProjects() []string { + if x != nil { + return x.Projects + } + return nil } type SetDefaultConnectionRequest struct { @@ -330,7 +415,7 @@ type SetDefaultConnectionRequest struct { func (x *SetDefaultConnectionRequest) Reset() { *x = SetDefaultConnectionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[0] + mi := &file_proto_dekart_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -343,7 +428,7 @@ func (x *SetDefaultConnectionRequest) String() string { func (*SetDefaultConnectionRequest) ProtoMessage() {} func (x *SetDefaultConnectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[0] + mi := &file_proto_dekart_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -356,7 +441,7 @@ func (x *SetDefaultConnectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetDefaultConnectionRequest.ProtoReflect.Descriptor instead. func (*SetDefaultConnectionRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{0} + return file_proto_dekart_proto_rawDescGZIP(), []int{2} } func (x *SetDefaultConnectionRequest) GetConnectionId() string { @@ -375,7 +460,7 @@ type SetDefaultConnectionResponse struct { func (x *SetDefaultConnectionResponse) Reset() { *x = SetDefaultConnectionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[1] + mi := &file_proto_dekart_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -388,7 +473,7 @@ func (x *SetDefaultConnectionResponse) String() string { func (*SetDefaultConnectionResponse) ProtoMessage() {} func (x *SetDefaultConnectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[1] + mi := &file_proto_dekart_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -401,7 +486,7 @@ func (x *SetDefaultConnectionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetDefaultConnectionResponse.ProtoReflect.Descriptor instead. func (*SetDefaultConnectionResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{1} + return file_proto_dekart_proto_rawDescGZIP(), []int{3} } type RunAllQueriesRequest struct { @@ -415,7 +500,7 @@ type RunAllQueriesRequest struct { func (x *RunAllQueriesRequest) Reset() { *x = RunAllQueriesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[2] + mi := &file_proto_dekart_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -428,7 +513,7 @@ func (x *RunAllQueriesRequest) String() string { func (*RunAllQueriesRequest) ProtoMessage() {} func (x *RunAllQueriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[2] + mi := &file_proto_dekart_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -441,7 +526,7 @@ func (x *RunAllQueriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RunAllQueriesRequest.ProtoReflect.Descriptor instead. func (*RunAllQueriesRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{2} + return file_proto_dekart_proto_rawDescGZIP(), []int{4} } func (x *RunAllQueriesRequest) GetReportId() string { @@ -460,7 +545,7 @@ type RunAllQueriesResponse struct { func (x *RunAllQueriesResponse) Reset() { *x = RunAllQueriesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[3] + mi := &file_proto_dekart_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -473,7 +558,7 @@ func (x *RunAllQueriesResponse) String() string { func (*RunAllQueriesResponse) ProtoMessage() {} func (x *RunAllQueriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[3] + mi := &file_proto_dekart_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -486,7 +571,7 @@ func (x *RunAllQueriesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RunAllQueriesResponse.ProtoReflect.Descriptor instead. func (*RunAllQueriesResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{3} + return file_proto_dekart_proto_rawDescGZIP(), []int{5} } type GetConnectionListRequest struct { @@ -498,7 +583,7 @@ type GetConnectionListRequest struct { func (x *GetConnectionListRequest) Reset() { *x = GetConnectionListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[4] + mi := &file_proto_dekart_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -511,7 +596,7 @@ func (x *GetConnectionListRequest) String() string { func (*GetConnectionListRequest) ProtoMessage() {} func (x *GetConnectionListRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[4] + mi := &file_proto_dekart_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -524,7 +609,7 @@ func (x *GetConnectionListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConnectionListRequest.ProtoReflect.Descriptor instead. func (*GetConnectionListRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{4} + return file_proto_dekart_proto_rawDescGZIP(), []int{6} } type GetConnectionListResponse struct { @@ -538,7 +623,7 @@ type GetConnectionListResponse struct { func (x *GetConnectionListResponse) Reset() { *x = GetConnectionListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[5] + mi := &file_proto_dekart_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -551,7 +636,7 @@ func (x *GetConnectionListResponse) String() string { func (*GetConnectionListResponse) ProtoMessage() {} func (x *GetConnectionListResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[5] + mi := &file_proto_dekart_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -564,7 +649,7 @@ func (x *GetConnectionListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConnectionListResponse.ProtoReflect.Descriptor instead. func (*GetConnectionListResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{5} + return file_proto_dekart_proto_rawDescGZIP(), []int{7} } func (x *GetConnectionListResponse) GetConnections() []*Connection { @@ -585,7 +670,7 @@ type GetUserStreamRequest struct { func (x *GetUserStreamRequest) Reset() { *x = GetUserStreamRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[6] + mi := &file_proto_dekart_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -598,7 +683,7 @@ func (x *GetUserStreamRequest) String() string { func (*GetUserStreamRequest) ProtoMessage() {} func (x *GetUserStreamRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[6] + mi := &file_proto_dekart_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -611,7 +696,7 @@ func (x *GetUserStreamRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserStreamRequest.ProtoReflect.Descriptor instead. func (*GetUserStreamRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{6} + return file_proto_dekart_proto_rawDescGZIP(), []int{8} } func (x *GetUserStreamRequest) GetStreamOptions() *StreamOptions { @@ -636,7 +721,7 @@ type GetUserStreamResponse struct { func (x *GetUserStreamResponse) Reset() { *x = GetUserStreamResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[7] + mi := &file_proto_dekart_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -649,7 +734,7 @@ func (x *GetUserStreamResponse) String() string { func (*GetUserStreamResponse) ProtoMessage() {} func (x *GetUserStreamResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[7] + mi := &file_proto_dekart_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -662,7 +747,7 @@ func (x *GetUserStreamResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserStreamResponse.ProtoReflect.Descriptor instead. func (*GetUserStreamResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{7} + return file_proto_dekart_proto_rawDescGZIP(), []int{9} } func (x *GetUserStreamResponse) GetStreamOptions() *StreamOptions { @@ -711,7 +796,7 @@ type TestConnectionRequest struct { func (x *TestConnectionRequest) Reset() { *x = TestConnectionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[8] + mi := &file_proto_dekart_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -724,7 +809,7 @@ func (x *TestConnectionRequest) String() string { func (*TestConnectionRequest) ProtoMessage() {} func (x *TestConnectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[8] + mi := &file_proto_dekart_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -737,7 +822,7 @@ func (x *TestConnectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TestConnectionRequest.ProtoReflect.Descriptor instead. func (*TestConnectionRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{8} + return file_proto_dekart_proto_rawDescGZIP(), []int{10} } func (x *TestConnectionRequest) GetConnection() *Connection { @@ -759,7 +844,7 @@ type TestConnectionResponse struct { func (x *TestConnectionResponse) Reset() { *x = TestConnectionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[9] + mi := &file_proto_dekart_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -772,7 +857,7 @@ func (x *TestConnectionResponse) String() string { func (*TestConnectionResponse) ProtoMessage() {} func (x *TestConnectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[9] + mi := &file_proto_dekart_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -785,7 +870,7 @@ func (x *TestConnectionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TestConnectionResponse.ProtoReflect.Descriptor instead. func (*TestConnectionResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{9} + return file_proto_dekart_proto_rawDescGZIP(), []int{11} } func (x *TestConnectionResponse) GetSuccess() bool { @@ -813,7 +898,7 @@ type ArchiveConnectionRequest struct { func (x *ArchiveConnectionRequest) Reset() { *x = ArchiveConnectionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[10] + mi := &file_proto_dekart_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -826,7 +911,7 @@ func (x *ArchiveConnectionRequest) String() string { func (*ArchiveConnectionRequest) ProtoMessage() {} func (x *ArchiveConnectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[10] + mi := &file_proto_dekart_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -839,7 +924,7 @@ func (x *ArchiveConnectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ArchiveConnectionRequest.ProtoReflect.Descriptor instead. func (*ArchiveConnectionRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{10} + return file_proto_dekart_proto_rawDescGZIP(), []int{12} } func (x *ArchiveConnectionRequest) GetConnectionId() string { @@ -858,7 +943,7 @@ type ArchiveConnectionResponse struct { func (x *ArchiveConnectionResponse) Reset() { *x = ArchiveConnectionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[11] + mi := &file_proto_dekart_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -871,7 +956,7 @@ func (x *ArchiveConnectionResponse) String() string { func (*ArchiveConnectionResponse) ProtoMessage() {} func (x *ArchiveConnectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[11] + mi := &file_proto_dekart_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -884,7 +969,7 @@ func (x *ArchiveConnectionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ArchiveConnectionResponse.ProtoReflect.Descriptor instead. func (*ArchiveConnectionResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{11} + return file_proto_dekart_proto_rawDescGZIP(), []int{13} } type UpdateConnectionRequest struct { @@ -898,7 +983,7 @@ type UpdateConnectionRequest struct { func (x *UpdateConnectionRequest) Reset() { *x = UpdateConnectionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[12] + mi := &file_proto_dekart_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -911,7 +996,7 @@ func (x *UpdateConnectionRequest) String() string { func (*UpdateConnectionRequest) ProtoMessage() {} func (x *UpdateConnectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[12] + mi := &file_proto_dekart_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -924,7 +1009,7 @@ func (x *UpdateConnectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateConnectionRequest.ProtoReflect.Descriptor instead. func (*UpdateConnectionRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{12} + return file_proto_dekart_proto_rawDescGZIP(), []int{14} } func (x *UpdateConnectionRequest) GetConnection() *Connection { @@ -945,7 +1030,7 @@ type UpdateConnectionResponse struct { func (x *UpdateConnectionResponse) Reset() { *x = UpdateConnectionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[13] + mi := &file_proto_dekart_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -958,7 +1043,7 @@ func (x *UpdateConnectionResponse) String() string { func (*UpdateConnectionResponse) ProtoMessage() {} func (x *UpdateConnectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[13] + mi := &file_proto_dekart_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -971,7 +1056,7 @@ func (x *UpdateConnectionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateConnectionResponse.ProtoReflect.Descriptor instead. func (*UpdateConnectionResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{13} + return file_proto_dekart_proto_rawDescGZIP(), []int{15} } func (x *UpdateConnectionResponse) GetConnection() *Connection { @@ -992,7 +1077,7 @@ type CreateConnectionRequest struct { func (x *CreateConnectionRequest) Reset() { *x = CreateConnectionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[14] + mi := &file_proto_dekart_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1005,7 +1090,7 @@ func (x *CreateConnectionRequest) String() string { func (*CreateConnectionRequest) ProtoMessage() {} func (x *CreateConnectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[14] + mi := &file_proto_dekart_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1018,7 +1103,7 @@ func (x *CreateConnectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateConnectionRequest.ProtoReflect.Descriptor instead. func (*CreateConnectionRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{14} + return file_proto_dekart_proto_rawDescGZIP(), []int{16} } func (x *CreateConnectionRequest) GetConnectionName() string { @@ -1039,7 +1124,7 @@ type CreateConnectionResponse struct { func (x *CreateConnectionResponse) Reset() { *x = CreateConnectionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[15] + mi := &file_proto_dekart_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1052,7 +1137,7 @@ func (x *CreateConnectionResponse) String() string { func (*CreateConnectionResponse) ProtoMessage() {} func (x *CreateConnectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[15] + mi := &file_proto_dekart_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1065,7 +1150,7 @@ func (x *CreateConnectionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateConnectionResponse.ProtoReflect.Descriptor instead. func (*CreateConnectionResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{15} + return file_proto_dekart_proto_rawDescGZIP(), []int{17} } func (x *CreateConnectionResponse) GetConnection() *Connection { @@ -1088,12 +1173,14 @@ type Connection struct { AuthorEmail string `protobuf:"bytes,6,opt,name=author_email,json=authorEmail,proto3" json:"author_email,omitempty"` CreatedAt int64 `protobuf:"varint,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` UpdatedAt int64 `protobuf:"varint,8,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + DatasetCount int64 `protobuf:"varint,9,opt,name=dataset_count,json=datasetCount,proto3" json:"dataset_count,omitempty"` + CanStoreFiles bool `protobuf:"varint,10,opt,name=can_store_files,json=canStoreFiles,proto3" json:"can_store_files,omitempty"` } func (x *Connection) Reset() { *x = Connection{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[16] + mi := &file_proto_dekart_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1106,7 +1193,7 @@ func (x *Connection) String() string { func (*Connection) ProtoMessage() {} func (x *Connection) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[16] + mi := &file_proto_dekart_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1119,7 +1206,7 @@ func (x *Connection) ProtoReflect() protoreflect.Message { // Deprecated: Use Connection.ProtoReflect.Descriptor instead. func (*Connection) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{16} + return file_proto_dekart_proto_rawDescGZIP(), []int{18} } func (x *Connection) GetId() string { @@ -1178,6 +1265,20 @@ func (x *Connection) GetUpdatedAt() int64 { return 0 } +func (x *Connection) GetDatasetCount() int64 { + if x != nil { + return x.DatasetCount + } + return 0 +} + +func (x *Connection) GetCanStoreFiles() bool { + if x != nil { + return x.CanStoreFiles + } + return false +} + type GetUsageRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1187,7 +1288,7 @@ type GetUsageRequest struct { func (x *GetUsageRequest) Reset() { *x = GetUsageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[17] + mi := &file_proto_dekart_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1200,7 +1301,7 @@ func (x *GetUsageRequest) String() string { func (*GetUsageRequest) ProtoMessage() {} func (x *GetUsageRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[17] + mi := &file_proto_dekart_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1213,7 +1314,7 @@ func (x *GetUsageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUsageRequest.ProtoReflect.Descriptor instead. func (*GetUsageRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{17} + return file_proto_dekart_proto_rawDescGZIP(), []int{19} } type GetUsageResponse struct { @@ -1230,7 +1331,7 @@ type GetUsageResponse struct { func (x *GetUsageResponse) Reset() { *x = GetUsageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[18] + mi := &file_proto_dekart_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1243,7 +1344,7 @@ func (x *GetUsageResponse) String() string { func (*GetUsageResponse) ProtoMessage() {} func (x *GetUsageResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[18] + mi := &file_proto_dekart_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1256,7 +1357,7 @@ func (x *GetUsageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUsageResponse.ProtoReflect.Descriptor instead. func (*GetUsageResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{18} + return file_proto_dekart_proto_rawDescGZIP(), []int{20} } func (x *GetUsageResponse) GetTotalReports() int64 { @@ -1300,7 +1401,7 @@ type SetDiscoverableRequest struct { func (x *SetDiscoverableRequest) Reset() { *x = SetDiscoverableRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[19] + mi := &file_proto_dekart_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1313,7 +1414,7 @@ func (x *SetDiscoverableRequest) String() string { func (*SetDiscoverableRequest) ProtoMessage() {} func (x *SetDiscoverableRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[19] + mi := &file_proto_dekart_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1326,7 +1427,7 @@ func (x *SetDiscoverableRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetDiscoverableRequest.ProtoReflect.Descriptor instead. func (*SetDiscoverableRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{19} + return file_proto_dekart_proto_rawDescGZIP(), []int{21} } func (x *SetDiscoverableRequest) GetReportId() string { @@ -1359,7 +1460,7 @@ type SetDiscoverableResponse struct { func (x *SetDiscoverableResponse) Reset() { *x = SetDiscoverableResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[20] + mi := &file_proto_dekart_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1372,7 +1473,7 @@ func (x *SetDiscoverableResponse) String() string { func (*SetDiscoverableResponse) ProtoMessage() {} func (x *SetDiscoverableResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[20] + mi := &file_proto_dekart_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1385,7 +1486,7 @@ func (x *SetDiscoverableResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetDiscoverableResponse.ProtoReflect.Descriptor instead. func (*SetDiscoverableResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{20} + return file_proto_dekart_proto_rawDescGZIP(), []int{22} } type RemoveDatasetRequest struct { @@ -1399,7 +1500,7 @@ type RemoveDatasetRequest struct { func (x *RemoveDatasetRequest) Reset() { *x = RemoveDatasetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[21] + mi := &file_proto_dekart_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1412,7 +1513,7 @@ func (x *RemoveDatasetRequest) String() string { func (*RemoveDatasetRequest) ProtoMessage() {} func (x *RemoveDatasetRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[21] + mi := &file_proto_dekart_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1425,7 +1526,7 @@ func (x *RemoveDatasetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveDatasetRequest.ProtoReflect.Descriptor instead. func (*RemoveDatasetRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{21} + return file_proto_dekart_proto_rawDescGZIP(), []int{23} } func (x *RemoveDatasetRequest) GetDatasetId() string { @@ -1446,7 +1547,7 @@ type RemoveDatasetResponse struct { func (x *RemoveDatasetResponse) Reset() { *x = RemoveDatasetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[22] + mi := &file_proto_dekart_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1459,7 +1560,7 @@ func (x *RemoveDatasetResponse) String() string { func (*RemoveDatasetResponse) ProtoMessage() {} func (x *RemoveDatasetResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[22] + mi := &file_proto_dekart_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1472,7 +1573,7 @@ func (x *RemoveDatasetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveDatasetResponse.ProtoReflect.Descriptor instead. func (*RemoveDatasetResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{22} + return file_proto_dekart_proto_rawDescGZIP(), []int{24} } func (x *RemoveDatasetResponse) GetDatasetId() string { @@ -1493,7 +1594,7 @@ type StreamOptions struct { func (x *StreamOptions) Reset() { *x = StreamOptions{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[23] + mi := &file_proto_dekart_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1506,7 +1607,7 @@ func (x *StreamOptions) String() string { func (*StreamOptions) ProtoMessage() {} func (x *StreamOptions) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[23] + mi := &file_proto_dekart_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1519,7 +1620,7 @@ func (x *StreamOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamOptions.ProtoReflect.Descriptor instead. func (*StreamOptions) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{23} + return file_proto_dekart_proto_rawDescGZIP(), []int{25} } func (x *StreamOptions) GetSequence() int64 { @@ -1538,7 +1639,7 @@ type GetEnvRequest struct { func (x *GetEnvRequest) Reset() { *x = GetEnvRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[24] + mi := &file_proto_dekart_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1551,7 +1652,7 @@ func (x *GetEnvRequest) String() string { func (*GetEnvRequest) ProtoMessage() {} func (x *GetEnvRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[24] + mi := &file_proto_dekart_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1564,7 +1665,7 @@ func (x *GetEnvRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEnvRequest.ProtoReflect.Descriptor instead. func (*GetEnvRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{24} + return file_proto_dekart_proto_rawDescGZIP(), []int{26} } type GetEnvResponse struct { @@ -1578,7 +1679,7 @@ type GetEnvResponse struct { func (x *GetEnvResponse) Reset() { *x = GetEnvResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[25] + mi := &file_proto_dekart_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1591,7 +1692,7 @@ func (x *GetEnvResponse) String() string { func (*GetEnvResponse) ProtoMessage() {} func (x *GetEnvResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[25] + mi := &file_proto_dekart_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1604,7 +1705,7 @@ func (x *GetEnvResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEnvResponse.ProtoReflect.Descriptor instead. func (*GetEnvResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{25} + return file_proto_dekart_proto_rawDescGZIP(), []int{27} } func (x *GetEnvResponse) GetVariables() []*GetEnvResponse_Variable { @@ -1627,7 +1728,7 @@ type RedirectState struct { func (x *RedirectState) Reset() { *x = RedirectState{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[26] + mi := &file_proto_dekart_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1640,7 +1741,7 @@ func (x *RedirectState) String() string { func (*RedirectState) ProtoMessage() {} func (x *RedirectState) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[26] + mi := &file_proto_dekart_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1653,7 +1754,7 @@ func (x *RedirectState) ProtoReflect() protoreflect.Message { // Deprecated: Use RedirectState.ProtoReflect.Descriptor instead. func (*RedirectState) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{26} + return file_proto_dekart_proto_rawDescGZIP(), []int{28} } func (x *RedirectState) GetTokenJson() string { @@ -1688,7 +1789,7 @@ type AuthState struct { func (x *AuthState) Reset() { *x = AuthState{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[27] + mi := &file_proto_dekart_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1701,7 +1802,7 @@ func (x *AuthState) String() string { func (*AuthState) ProtoMessage() {} func (x *AuthState) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[27] + mi := &file_proto_dekart_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1714,7 +1815,7 @@ func (x *AuthState) ProtoReflect() protoreflect.Message { // Deprecated: Use AuthState.ProtoReflect.Descriptor instead. func (*AuthState) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{27} + return file_proto_dekart_proto_rawDescGZIP(), []int{29} } func (x *AuthState) GetAction() AuthState_Action { @@ -1778,7 +1879,7 @@ type ArchiveReportRequest struct { func (x *ArchiveReportRequest) Reset() { *x = ArchiveReportRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[28] + mi := &file_proto_dekart_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1791,7 +1892,7 @@ func (x *ArchiveReportRequest) String() string { func (*ArchiveReportRequest) ProtoMessage() {} func (x *ArchiveReportRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[28] + mi := &file_proto_dekart_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1804,7 +1905,7 @@ func (x *ArchiveReportRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ArchiveReportRequest.ProtoReflect.Descriptor instead. func (*ArchiveReportRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{28} + return file_proto_dekart_proto_rawDescGZIP(), []int{30} } func (x *ArchiveReportRequest) GetReportId() string { @@ -1830,7 +1931,7 @@ type ArchiveReportResponse struct { func (x *ArchiveReportResponse) Reset() { *x = ArchiveReportResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[29] + mi := &file_proto_dekart_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1843,7 +1944,7 @@ func (x *ArchiveReportResponse) String() string { func (*ArchiveReportResponse) ProtoMessage() {} func (x *ArchiveReportResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[29] + mi := &file_proto_dekart_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1856,7 +1957,7 @@ func (x *ArchiveReportResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ArchiveReportResponse.ProtoReflect.Descriptor instead. func (*ArchiveReportResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{29} + return file_proto_dekart_proto_rawDescGZIP(), []int{31} } type ReportListRequest struct { @@ -1870,7 +1971,7 @@ type ReportListRequest struct { func (x *ReportListRequest) Reset() { *x = ReportListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[30] + mi := &file_proto_dekart_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1883,7 +1984,7 @@ func (x *ReportListRequest) String() string { func (*ReportListRequest) ProtoMessage() {} func (x *ReportListRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[30] + mi := &file_proto_dekart_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1896,7 +1997,7 @@ func (x *ReportListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportListRequest.ProtoReflect.Descriptor instead. func (*ReportListRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{30} + return file_proto_dekart_proto_rawDescGZIP(), []int{32} } func (x *ReportListRequest) GetStreamOptions() *StreamOptions { @@ -1918,7 +2019,7 @@ type ReportListResponse struct { func (x *ReportListResponse) Reset() { *x = ReportListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[31] + mi := &file_proto_dekart_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1931,7 +2032,7 @@ func (x *ReportListResponse) String() string { func (*ReportListResponse) ProtoMessage() {} func (x *ReportListResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[31] + mi := &file_proto_dekart_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1944,7 +2045,7 @@ func (x *ReportListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportListResponse.ProtoReflect.Descriptor instead. func (*ReportListResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{31} + return file_proto_dekart_proto_rawDescGZIP(), []int{33} } func (x *ReportListResponse) GetReports() []*Report { @@ -1982,7 +2083,7 @@ type Report struct { func (x *Report) Reset() { *x = Report{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[32] + mi := &file_proto_dekart_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1995,7 +2096,7 @@ func (x *Report) String() string { func (*Report) ProtoMessage() {} func (x *Report) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[32] + mi := &file_proto_dekart_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2008,7 +2109,7 @@ func (x *Report) ProtoReflect() protoreflect.Message { // Deprecated: Use Report.ProtoReflect.Descriptor instead. func (*Report) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{32} + return file_proto_dekart_proto_rawDescGZIP(), []int{34} } func (x *Report) GetId() string { @@ -2106,7 +2207,7 @@ type Dataset struct { func (x *Dataset) Reset() { *x = Dataset{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[33] + mi := &file_proto_dekart_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2119,7 +2220,7 @@ func (x *Dataset) String() string { func (*Dataset) ProtoMessage() {} func (x *Dataset) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[33] + mi := &file_proto_dekart_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2132,7 +2233,7 @@ func (x *Dataset) ProtoReflect() protoreflect.Message { // Deprecated: Use Dataset.ProtoReflect.Descriptor instead. func (*Dataset) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{33} + return file_proto_dekart_proto_rawDescGZIP(), []int{35} } func (x *Dataset) GetId() string { @@ -2215,7 +2316,7 @@ type Query struct { func (x *Query) Reset() { *x = Query{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[34] + mi := &file_proto_dekart_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2228,7 +2329,7 @@ func (x *Query) String() string { func (*Query) ProtoMessage() {} func (x *Query) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[34] + mi := &file_proto_dekart_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2241,7 +2342,7 @@ func (x *Query) ProtoReflect() protoreflect.Message { // Deprecated: Use Query.ProtoReflect.Descriptor instead. func (*Query) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{34} + return file_proto_dekart_proto_rawDescGZIP(), []int{36} } func (x *Query) GetId() string { @@ -2354,7 +2455,7 @@ type File struct { func (x *File) Reset() { *x = File{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[35] + mi := &file_proto_dekart_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2367,7 +2468,7 @@ func (x *File) String() string { func (*File) ProtoMessage() {} func (x *File) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[35] + mi := &file_proto_dekart_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2380,7 +2481,7 @@ func (x *File) ProtoReflect() protoreflect.Message { // Deprecated: Use File.ProtoReflect.Descriptor instead. func (*File) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{35} + return file_proto_dekart_proto_rawDescGZIP(), []int{37} } func (x *File) GetId() string { @@ -2458,7 +2559,7 @@ type UpdateReportRequest struct { func (x *UpdateReportRequest) Reset() { *x = UpdateReportRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[36] + mi := &file_proto_dekart_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2471,7 +2572,7 @@ func (x *UpdateReportRequest) String() string { func (*UpdateReportRequest) ProtoMessage() {} func (x *UpdateReportRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[36] + mi := &file_proto_dekart_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2484,7 +2585,7 @@ func (x *UpdateReportRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateReportRequest.ProtoReflect.Descriptor instead. func (*UpdateReportRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{36} + return file_proto_dekart_proto_rawDescGZIP(), []int{38} } func (x *UpdateReportRequest) GetReport() *Report { @@ -2510,7 +2611,7 @@ type UpdateReportResponse struct { func (x *UpdateReportResponse) Reset() { *x = UpdateReportResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[37] + mi := &file_proto_dekart_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2523,7 +2624,7 @@ func (x *UpdateReportResponse) String() string { func (*UpdateReportResponse) ProtoMessage() {} func (x *UpdateReportResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[37] + mi := &file_proto_dekart_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2536,7 +2637,7 @@ func (x *UpdateReportResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateReportResponse.ProtoReflect.Descriptor instead. func (*UpdateReportResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{37} + return file_proto_dekart_proto_rawDescGZIP(), []int{39} } type RunQueryRequest struct { @@ -2551,7 +2652,7 @@ type RunQueryRequest struct { func (x *RunQueryRequest) Reset() { *x = RunQueryRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[38] + mi := &file_proto_dekart_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2564,7 +2665,7 @@ func (x *RunQueryRequest) String() string { func (*RunQueryRequest) ProtoMessage() {} func (x *RunQueryRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[38] + mi := &file_proto_dekart_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2577,7 +2678,7 @@ func (x *RunQueryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RunQueryRequest.ProtoReflect.Descriptor instead. func (*RunQueryRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{38} + return file_proto_dekart_proto_rawDescGZIP(), []int{40} } func (x *RunQueryRequest) GetQueryId() string { @@ -2603,7 +2704,7 @@ type RunQueryResponse struct { func (x *RunQueryResponse) Reset() { *x = RunQueryResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[39] + mi := &file_proto_dekart_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2616,7 +2717,7 @@ func (x *RunQueryResponse) String() string { func (*RunQueryResponse) ProtoMessage() {} func (x *RunQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[39] + mi := &file_proto_dekart_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2629,7 +2730,7 @@ func (x *RunQueryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RunQueryResponse.ProtoReflect.Descriptor instead. func (*RunQueryResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{39} + return file_proto_dekart_proto_rawDescGZIP(), []int{41} } type CancelQueryRequest struct { @@ -2643,7 +2744,7 @@ type CancelQueryRequest struct { func (x *CancelQueryRequest) Reset() { *x = CancelQueryRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[40] + mi := &file_proto_dekart_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2656,7 +2757,7 @@ func (x *CancelQueryRequest) String() string { func (*CancelQueryRequest) ProtoMessage() {} func (x *CancelQueryRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[40] + mi := &file_proto_dekart_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2669,7 +2770,7 @@ func (x *CancelQueryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CancelQueryRequest.ProtoReflect.Descriptor instead. func (*CancelQueryRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{40} + return file_proto_dekart_proto_rawDescGZIP(), []int{42} } func (x *CancelQueryRequest) GetQueryId() string { @@ -2688,7 +2789,7 @@ type CancelQueryResponse struct { func (x *CancelQueryResponse) Reset() { *x = CancelQueryResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[41] + mi := &file_proto_dekart_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2701,7 +2802,7 @@ func (x *CancelQueryResponse) String() string { func (*CancelQueryResponse) ProtoMessage() {} func (x *CancelQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[41] + mi := &file_proto_dekart_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2714,7 +2815,7 @@ func (x *CancelQueryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CancelQueryResponse.ProtoReflect.Descriptor instead. func (*CancelQueryResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{41} + return file_proto_dekart_proto_rawDescGZIP(), []int{43} } type UpdateDatasetNameRequest struct { @@ -2729,7 +2830,7 @@ type UpdateDatasetNameRequest struct { func (x *UpdateDatasetNameRequest) Reset() { *x = UpdateDatasetNameRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[42] + mi := &file_proto_dekart_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2742,7 +2843,7 @@ func (x *UpdateDatasetNameRequest) String() string { func (*UpdateDatasetNameRequest) ProtoMessage() {} func (x *UpdateDatasetNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[42] + mi := &file_proto_dekart_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2755,7 +2856,7 @@ func (x *UpdateDatasetNameRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDatasetNameRequest.ProtoReflect.Descriptor instead. func (*UpdateDatasetNameRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{42} + return file_proto_dekart_proto_rawDescGZIP(), []int{44} } func (x *UpdateDatasetNameRequest) GetDatasetId() string { @@ -2781,7 +2882,7 @@ type UpdateDatasetNameResponse struct { func (x *UpdateDatasetNameResponse) Reset() { *x = UpdateDatasetNameResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[43] + mi := &file_proto_dekart_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2794,7 +2895,7 @@ func (x *UpdateDatasetNameResponse) String() string { func (*UpdateDatasetNameResponse) ProtoMessage() {} func (x *UpdateDatasetNameResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[43] + mi := &file_proto_dekart_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2807,7 +2908,7 @@ func (x *UpdateDatasetNameResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDatasetNameResponse.ProtoReflect.Descriptor instead. func (*UpdateDatasetNameResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{43} + return file_proto_dekart_proto_rawDescGZIP(), []int{45} } type UpdateDatasetConnectionRequest struct { @@ -2822,7 +2923,7 @@ type UpdateDatasetConnectionRequest struct { func (x *UpdateDatasetConnectionRequest) Reset() { *x = UpdateDatasetConnectionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[44] + mi := &file_proto_dekart_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2835,7 +2936,7 @@ func (x *UpdateDatasetConnectionRequest) String() string { func (*UpdateDatasetConnectionRequest) ProtoMessage() {} func (x *UpdateDatasetConnectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[44] + mi := &file_proto_dekart_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2848,7 +2949,7 @@ func (x *UpdateDatasetConnectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDatasetConnectionRequest.ProtoReflect.Descriptor instead. func (*UpdateDatasetConnectionRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{44} + return file_proto_dekart_proto_rawDescGZIP(), []int{46} } func (x *UpdateDatasetConnectionRequest) GetDatasetId() string { @@ -2874,7 +2975,7 @@ type UpdateDatasetConnectionResponse struct { func (x *UpdateDatasetConnectionResponse) Reset() { *x = UpdateDatasetConnectionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[45] + mi := &file_proto_dekart_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2887,7 +2988,7 @@ func (x *UpdateDatasetConnectionResponse) String() string { func (*UpdateDatasetConnectionResponse) ProtoMessage() {} func (x *UpdateDatasetConnectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[45] + mi := &file_proto_dekart_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2900,7 +3001,7 @@ func (x *UpdateDatasetConnectionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDatasetConnectionResponse.ProtoReflect.Descriptor instead. func (*UpdateDatasetConnectionResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{45} + return file_proto_dekart_proto_rawDescGZIP(), []int{47} } type CreateDatasetRequest struct { @@ -2914,7 +3015,7 @@ type CreateDatasetRequest struct { func (x *CreateDatasetRequest) Reset() { *x = CreateDatasetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[46] + mi := &file_proto_dekart_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2927,7 +3028,7 @@ func (x *CreateDatasetRequest) String() string { func (*CreateDatasetRequest) ProtoMessage() {} func (x *CreateDatasetRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[46] + mi := &file_proto_dekart_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2940,7 +3041,7 @@ func (x *CreateDatasetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateDatasetRequest.ProtoReflect.Descriptor instead. func (*CreateDatasetRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{46} + return file_proto_dekart_proto_rawDescGZIP(), []int{48} } func (x *CreateDatasetRequest) GetReportId() string { @@ -2959,7 +3060,7 @@ type CreateDatasetResponse struct { func (x *CreateDatasetResponse) Reset() { *x = CreateDatasetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[47] + mi := &file_proto_dekart_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2972,7 +3073,7 @@ func (x *CreateDatasetResponse) String() string { func (*CreateDatasetResponse) ProtoMessage() {} func (x *CreateDatasetResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[47] + mi := &file_proto_dekart_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2985,7 +3086,7 @@ func (x *CreateDatasetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateDatasetResponse.ProtoReflect.Descriptor instead. func (*CreateDatasetResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{47} + return file_proto_dekart_proto_rawDescGZIP(), []int{49} } type CreateFileRequest struct { @@ -2999,7 +3100,7 @@ type CreateFileRequest struct { func (x *CreateFileRequest) Reset() { *x = CreateFileRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[48] + mi := &file_proto_dekart_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3012,7 +3113,7 @@ func (x *CreateFileRequest) String() string { func (*CreateFileRequest) ProtoMessage() {} func (x *CreateFileRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[48] + mi := &file_proto_dekart_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3025,7 +3126,7 @@ func (x *CreateFileRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFileRequest.ProtoReflect.Descriptor instead. func (*CreateFileRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{48} + return file_proto_dekart_proto_rawDescGZIP(), []int{50} } func (x *CreateFileRequest) GetDatasetId() string { @@ -3046,7 +3147,7 @@ type CreateFileResponse struct { func (x *CreateFileResponse) Reset() { *x = CreateFileResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[49] + mi := &file_proto_dekart_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3059,7 +3160,7 @@ func (x *CreateFileResponse) String() string { func (*CreateFileResponse) ProtoMessage() {} func (x *CreateFileResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[49] + mi := &file_proto_dekart_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3072,7 +3173,7 @@ func (x *CreateFileResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFileResponse.ProtoReflect.Descriptor instead. func (*CreateFileResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{49} + return file_proto_dekart_proto_rawDescGZIP(), []int{51} } func (x *CreateFileResponse) GetFileId() string { @@ -3093,7 +3194,7 @@ type CreateQueryRequest struct { func (x *CreateQueryRequest) Reset() { *x = CreateQueryRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[50] + mi := &file_proto_dekart_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3106,7 +3207,7 @@ func (x *CreateQueryRequest) String() string { func (*CreateQueryRequest) ProtoMessage() {} func (x *CreateQueryRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[50] + mi := &file_proto_dekart_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3119,7 +3220,7 @@ func (x *CreateQueryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateQueryRequest.ProtoReflect.Descriptor instead. func (*CreateQueryRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{50} + return file_proto_dekart_proto_rawDescGZIP(), []int{52} } func (x *CreateQueryRequest) GetDatasetId() string { @@ -3140,7 +3241,7 @@ type CreateQueryResponse struct { func (x *CreateQueryResponse) Reset() { *x = CreateQueryResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[51] + mi := &file_proto_dekart_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3153,7 +3254,7 @@ func (x *CreateQueryResponse) String() string { func (*CreateQueryResponse) ProtoMessage() {} func (x *CreateQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[51] + mi := &file_proto_dekart_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3166,7 +3267,7 @@ func (x *CreateQueryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateQueryResponse.ProtoReflect.Descriptor instead. func (*CreateQueryResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{51} + return file_proto_dekart_proto_rawDescGZIP(), []int{53} } func (x *CreateQueryResponse) GetQuery() *Query { @@ -3188,7 +3289,7 @@ type ReportStreamRequest struct { func (x *ReportStreamRequest) Reset() { *x = ReportStreamRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[52] + mi := &file_proto_dekart_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3201,7 +3302,7 @@ func (x *ReportStreamRequest) String() string { func (*ReportStreamRequest) ProtoMessage() {} func (x *ReportStreamRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[52] + mi := &file_proto_dekart_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3214,7 +3315,7 @@ func (x *ReportStreamRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportStreamRequest.ProtoReflect.Descriptor instead. func (*ReportStreamRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{52} + return file_proto_dekart_proto_rawDescGZIP(), []int{54} } func (x *ReportStreamRequest) GetReport() *Report { @@ -3247,7 +3348,7 @@ type ReportStreamResponse struct { func (x *ReportStreamResponse) Reset() { *x = ReportStreamResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[53] + mi := &file_proto_dekart_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3260,7 +3361,7 @@ func (x *ReportStreamResponse) String() string { func (*ReportStreamResponse) ProtoMessage() {} func (x *ReportStreamResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[53] + mi := &file_proto_dekart_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3273,7 +3374,7 @@ func (x *ReportStreamResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportStreamResponse.ProtoReflect.Descriptor instead. func (*ReportStreamResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{53} + return file_proto_dekart_proto_rawDescGZIP(), []int{55} } func (x *ReportStreamResponse) GetReport() *Report { @@ -3329,7 +3430,7 @@ type ForkReportRequest struct { func (x *ForkReportRequest) Reset() { *x = ForkReportRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[54] + mi := &file_proto_dekart_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3342,7 +3443,7 @@ func (x *ForkReportRequest) String() string { func (*ForkReportRequest) ProtoMessage() {} func (x *ForkReportRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[54] + mi := &file_proto_dekart_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3355,7 +3456,7 @@ func (x *ForkReportRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ForkReportRequest.ProtoReflect.Descriptor instead. func (*ForkReportRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{54} + return file_proto_dekart_proto_rawDescGZIP(), []int{56} } func (x *ForkReportRequest) GetReportId() string { @@ -3376,7 +3477,7 @@ type ForkReportResponse struct { func (x *ForkReportResponse) Reset() { *x = ForkReportResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[55] + mi := &file_proto_dekart_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3389,7 +3490,7 @@ func (x *ForkReportResponse) String() string { func (*ForkReportResponse) ProtoMessage() {} func (x *ForkReportResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[55] + mi := &file_proto_dekart_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3402,7 +3503,7 @@ func (x *ForkReportResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ForkReportResponse.ProtoReflect.Descriptor instead. func (*ForkReportResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{55} + return file_proto_dekart_proto_rawDescGZIP(), []int{57} } func (x *ForkReportResponse) GetReportId() string { @@ -3421,7 +3522,7 @@ type CreateReportRequest struct { func (x *CreateReportRequest) Reset() { *x = CreateReportRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[56] + mi := &file_proto_dekart_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3434,7 +3535,7 @@ func (x *CreateReportRequest) String() string { func (*CreateReportRequest) ProtoMessage() {} func (x *CreateReportRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[56] + mi := &file_proto_dekart_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3447,7 +3548,7 @@ func (x *CreateReportRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateReportRequest.ProtoReflect.Descriptor instead. func (*CreateReportRequest) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{56} + return file_proto_dekart_proto_rawDescGZIP(), []int{58} } type CreateReportResponse struct { @@ -3461,7 +3562,7 @@ type CreateReportResponse struct { func (x *CreateReportResponse) Reset() { *x = CreateReportResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[57] + mi := &file_proto_dekart_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3474,7 +3575,7 @@ func (x *CreateReportResponse) String() string { func (*CreateReportResponse) ProtoMessage() {} func (x *CreateReportResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[57] + mi := &file_proto_dekart_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3487,7 +3588,7 @@ func (x *CreateReportResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateReportResponse.ProtoReflect.Descriptor instead. func (*CreateReportResponse) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{57} + return file_proto_dekart_proto_rawDescGZIP(), []int{59} } func (x *CreateReportResponse) GetReport() *Report { @@ -3509,7 +3610,7 @@ type GetEnvResponse_Variable struct { func (x *GetEnvResponse_Variable) Reset() { *x = GetEnvResponse_Variable{} if protoimpl.UnsafeEnabled { - mi := &file_proto_dekart_proto_msgTypes[58] + mi := &file_proto_dekart_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3522,7 +3623,7 @@ func (x *GetEnvResponse_Variable) String() string { func (*GetEnvResponse_Variable) ProtoMessage() {} func (x *GetEnvResponse_Variable) ProtoReflect() protoreflect.Message { - mi := &file_proto_dekart_proto_msgTypes[58] + mi := &file_proto_dekart_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3535,7 +3636,7 @@ func (x *GetEnvResponse_Variable) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEnvResponse_Variable.ProtoReflect.Descriptor instead. func (*GetEnvResponse_Variable) Descriptor() ([]byte, []int) { - return file_proto_dekart_proto_rawDescGZIP(), []int{25, 0} + return file_proto_dekart_proto_rawDescGZIP(), []int{27, 0} } func (x *GetEnvResponse_Variable) GetType() GetEnvResponse_Variable_Type { @@ -3556,483 +3657,498 @@ var File_proto_dekart_proto protoreflect.FileDescriptor var file_proto_dekart_proto_rawDesc = []byte{ 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x64, 0x65, 0x6b, 0x61, 0x72, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x42, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x14, 0x52, 0x75, 0x6e, 0x41, - 0x6c, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0x17, 0x0a, - 0x15, 0x52, 0x75, 0x6e, 0x41, 0x6c, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x4a, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4d, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8e, 0x02, - 0x0a, 0x15, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, - 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x12, 0x38, 0x0a, 0x18, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x16, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x53, 0x63, - 0x6f, 0x70, 0x65, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x1d, 0x73, - 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x5f, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x1a, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x53, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x63, 0x65, 0x22, 0x44, - 0x0a, 0x15, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x48, 0x0a, 0x16, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3f, - 0x0a, 0x18, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, - 0x1b, 0x0a, 0x19, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x0a, 0x17, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x42, 0x0a, - 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x47, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, - 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x02, 0x0a, 0x0a, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x62, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x11, 0x62, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x12, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x5f, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa2, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x55, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x51, - 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x22, 0x78, 0x0a, 0x16, - 0x53, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x5f, 0x65, 0x64, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x45, 0x64, 0x69, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x35, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74, - 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, - 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, - 0x22, 0x2b, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x0f, 0x0a, - 0x0d, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xe4, - 0x04, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x36, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x09, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x99, 0x04, 0x0a, 0x08, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0xc3, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, - 0x0a, 0x11, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x41, 0x50, 0x42, 0x4f, 0x58, 0x5f, 0x54, 0x4f, - 0x4b, 0x45, 0x4e, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x58, - 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x44, 0x4f, 0x43, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x58, - 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x50, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x55, - 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x06, 0x12, 0x1c, - 0x0a, 0x18, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x5f, 0x41, - 0x4d, 0x41, 0x5a, 0x4f, 0x4e, 0x5f, 0x4f, 0x49, 0x44, 0x43, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x5f, 0x49, 0x41, 0x50, - 0x10, 0x08, 0x12, 0x1c, 0x0a, 0x18, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, - 0x4c, 0x45, 0x5f, 0x55, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x53, 0x10, 0x09, - 0x12, 0x1d, 0x0a, 0x19, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, - 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x10, 0x0a, 0x12, - 0x1c, 0x0a, 0x18, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x49, 0x47, 0x51, 0x55, 0x45, 0x52, 0x59, - 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x44, 0x10, 0x0b, 0x12, 0x1d, 0x0a, - 0x19, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x52, - 0x41, 0x47, 0x45, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x0c, 0x12, 0x22, 0x0a, 0x1e, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x58, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x48, 0x54, 0x4d, 0x4c, 0x10, 0x0d, - 0x12, 0x25, 0x0a, 0x21, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x58, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x49, 0x4e, 0x46, 0x4f, - 0x5f, 0x48, 0x54, 0x4d, 0x4c, 0x10, 0x0e, 0x12, 0x1c, 0x0a, 0x18, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x55, 0x58, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f, - 0x53, 0x51, 0x4c, 0x10, 0x0f, 0x22, 0x44, 0x0a, 0x0d, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, - 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xf4, 0x02, 0x0a, 0x09, - 0x41, 0x75, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x41, 0x75, 0x74, 0x68, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x55, 0x72, 0x6c, 0x12, - 0x15, 0x0a, 0x06, 0x75, 0x69, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x75, 0x69, 0x55, 0x72, 0x6c, 0x12, 0x33, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x54, 0x6f, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x65, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, - 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x48, 0x69, 0x6e, 0x74, 0x22, 0x66, 0x0a, 0x06, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x43, - 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x02, 0x12, - 0x11, 0x0a, 0x0d, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x56, 0x4f, 0x4b, 0x45, - 0x10, 0x03, 0x22, 0x4d, 0x0a, 0x14, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x72, 0x63, 0x68, 0x69, - 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x22, 0x17, 0x0a, 0x15, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x0a, 0x11, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x35, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x6e, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x07, - 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x07, 0x2e, - 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, - 0x35, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xc7, 0x02, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x61, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x45, 0x6d, 0x61, - 0x69, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, - 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, - 0x65, 0x64, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x45, 0x64, 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x22, 0xe1, 0x01, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x37, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x42, 0x0a, 0x1b, 0x53, 0x65, 0x74, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x1e, 0x0a, + 0x1c, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x0a, + 0x14, 0x52, 0x75, 0x6e, 0x41, 0x6c, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x75, 0x6e, 0x41, 0x6c, 0x6c, 0x51, 0x75, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4a, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x4d, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x0e, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x8e, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0e, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x38, 0x0a, 0x18, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, + 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, + 0x12, 0x41, 0x0a, 0x1d, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x63, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x4f, + 0x6e, 0x63, 0x65, 0x22, 0x44, 0x0a, 0x15, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0a, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0b, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x48, 0x0a, 0x16, 0x54, 0x65, 0x73, + 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x3f, 0x0a, 0x18, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xdc, 0x05, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x78, 0x74, 0x12, 0x2f, 0x0a, - 0x0a, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x10, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, - 0x0a, 0x0d, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x6f, 0x62, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, - 0x21, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x77, 0x73, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, 0x77, - 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x46, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0a, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0b, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x18, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x42, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, + 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x47, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0xf4, 0x02, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, + 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x62, 0x69, 0x67, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x62, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, + 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x35, 0x0a, 0x0c, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x12, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x26, 0x0a, 0x0f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x22, 0xa8, 0x01, 0x0a, 0x09, 0x4a, 0x6f, 0x62, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4a, 0x4f, - 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, - 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x10, 0x03, 0x12, 0x1e, - 0x0a, 0x1a, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x41, - 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x04, 0x12, 0x13, - 0x0a, 0x0f, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, - 0x45, 0x10, 0x05, 0x22, 0x5e, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x17, 0x0a, 0x13, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x51, 0x55, 0x45, - 0x52, 0x59, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, - 0x45, 0x10, 0x02, 0x22, 0xe2, 0x02, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2d, 0x0a, 0x0b, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0c, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x58, - 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x45, 0x57, 0x10, 0x01, - 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x43, 0x45, 0x49, - 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x53, 0x54, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x03, 0x22, 0x54, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1f, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x07, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x12, 0x1c, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x06, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x16, - 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, - 0x65, 0x78, 0x74, 0x22, 0x12, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x12, 0x43, 0x61, 0x6e, 0x63, 0x65, - 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x4d, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, + 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x61, 0x6e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa2, 0x01, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, + 0x0a, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x71, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x22, 0x78, + 0x0a, 0x16, 0x53, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x64, 0x69, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x35, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1b, - 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x0a, 0x1e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x22, 0x21, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, - 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x15, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, + 0x49, 0x64, 0x22, 0x2b, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, + 0x0f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0xe4, 0x04, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x99, 0x04, 0x0a, 0x08, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0xc3, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x15, 0x0a, 0x11, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x41, 0x50, 0x42, 0x4f, 0x58, 0x5f, + 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x58, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x44, 0x4f, 0x43, 0x55, 0x4d, 0x45, 0x4e, 0x54, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x58, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x50, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x1a, 0x0a, + 0x16, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x5f, 0x46, 0x49, 0x4c, 0x45, + 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x05, 0x12, 0x10, + 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x06, + 0x12, 0x1c, 0x0a, 0x18, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, + 0x5f, 0x41, 0x4d, 0x41, 0x5a, 0x4f, 0x4e, 0x5f, 0x4f, 0x49, 0x44, 0x43, 0x10, 0x07, 0x12, 0x14, + 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x5f, 0x49, + 0x41, 0x50, 0x10, 0x08, 0x12, 0x1c, 0x0a, 0x18, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x49, 0x53, + 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x55, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x53, + 0x10, 0x09, 0x12, 0x1d, 0x0a, 0x19, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, + 0x52, 0x45, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x10, + 0x0a, 0x12, 0x1c, 0x0a, 0x18, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x49, 0x47, 0x51, 0x55, 0x45, + 0x52, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x44, 0x10, 0x0b, 0x12, + 0x1d, 0x0a, 0x19, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x53, 0x54, + 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x0c, 0x12, 0x22, + 0x0a, 0x1e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x58, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, + 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x48, 0x54, 0x4d, 0x4c, + 0x10, 0x0d, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x58, 0x5f, 0x4e, 0x4f, + 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x49, 0x4e, + 0x46, 0x4f, 0x5f, 0x48, 0x54, 0x4d, 0x4c, 0x10, 0x0e, 0x12, 0x1c, 0x0a, 0x18, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x55, 0x58, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x52, + 0x59, 0x5f, 0x53, 0x51, 0x4c, 0x10, 0x0f, 0x22, 0x44, 0x0a, 0x0d, 0x52, 0x65, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xf4, 0x02, + 0x0a, 0x09, 0x41, 0x75, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x41, 0x75, + 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x75, + 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x55, 0x72, + 0x6c, 0x12, 0x15, 0x0a, 0x06, 0x75, 0x69, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x75, 0x69, 0x55, 0x72, 0x6c, 0x12, 0x33, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x76, 0x6f, + 0x6b, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x54, 0x6f, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x25, 0x0a, + 0x0e, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, + 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x48, 0x69, 0x6e, 0x74, 0x22, 0x66, 0x0a, 0x06, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, + 0x0a, 0x13, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, + 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x43, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, + 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x56, 0x4f, + 0x4b, 0x45, 0x10, 0x03, 0x22, 0x4d, 0x0a, 0x14, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x32, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, - 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x61, 0x74, - 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x2d, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, - 0x69, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x33, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, - 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x33, 0x0a, 0x13, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1c, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x06, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, - 0x6d, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, - 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x82, - 0x02, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x0e, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x24, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x08, 0x64, - 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, - 0x69, 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x30, 0x0a, 0x11, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0x31, 0x0a, 0x12, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x37, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x32, 0x9b, 0x0d, 0x0a, 0x06, 0x44, 0x65, 0x6b, - 0x61, 0x72, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x12, 0x14, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x12, 0x12, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0c, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x2e, 0x55, 0x70, + 0x08, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x72, 0x63, 0x68, + 0x69, 0x76, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x0a, 0x11, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x35, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x6e, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, + 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x07, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x12, 0x35, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xc7, 0x02, 0x0a, 0x06, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, + 0x69, 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x72, 0x63, 0x68, + 0x69, 0x76, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x5f, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x61, 0x6e, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x45, + 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x61, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x45, 0x64, 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x22, 0xe1, 0x01, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, + 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xdc, 0x05, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x78, 0x74, 0x12, + 0x2f, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4a, 0x6f, 0x62, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x22, 0x0a, 0x0d, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x5f, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x6f, 0x62, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x6a, 0x6f, 0x62, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x6f, + 0x77, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, + 0x6f, 0x77, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x35, 0x0a, 0x0c, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x12, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x22, 0xa8, 0x01, 0x0a, 0x09, 0x4a, + 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4a, 0x4f, 0x42, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, + 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, + 0x4e, 0x47, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x10, 0x03, + 0x12, 0x1e, 0x0a, 0x1a, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, + 0x45, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x04, + 0x12, 0x13, 0x0a, 0x0f, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, + 0x4f, 0x4e, 0x45, 0x10, 0x05, 0x22, 0x5e, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x51, + 0x55, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x52, + 0x41, 0x47, 0x45, 0x10, 0x02, 0x22, 0xe2, 0x02, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2d, + 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, + 0x0c, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x58, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x45, 0x57, + 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x43, + 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x03, 0x22, 0x54, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x15, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, 0x41, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x15, 0x2e, 0x41, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0f, - 0x53, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x12, - 0x17, 0x2e, 0x53, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x53, 0x65, 0x74, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x43, + 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x07, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x06, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x54, 0x65, 0x78, 0x74, 0x22, 0x12, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x12, 0x43, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x4d, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, + 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x1b, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x0a, + 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x22, 0x21, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x69, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x2d, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, + 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x33, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x33, 0x0a, 0x13, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x22, 0x6d, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x0e, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0x82, 0x02, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x71, 0x75, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x0e, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x05, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, + 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x30, 0x0a, 0x11, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0x31, 0x0a, 0x12, 0x46, 0x6f, 0x72, 0x6b, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, + 0x09, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x37, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x32, 0xe9, 0x0d, 0x0a, 0x06, 0x44, + 0x65, 0x6b, 0x61, 0x72, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x12, 0x12, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, + 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, + 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x15, 0x2e, + 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, + 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, + 0x65, 0x12, 0x17, 0x2e, 0x53, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x53, 0x65, 0x74, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, - 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x3a, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x08, 0x52, - 0x75, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x10, 0x2e, 0x52, 0x75, 0x6e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x52, 0x75, 0x6e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3a, - 0x0a, 0x0b, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, 0x2e, - 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, 0x52, 0x75, - 0x6e, 0x41, 0x6c, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x15, 0x2e, 0x52, 0x75, - 0x6e, 0x41, 0x6c, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x52, 0x75, 0x6e, 0x41, 0x6c, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2b, 0x0a, 0x06, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x0e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x14, 0x2e, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x42, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x12, 0x12, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, - 0x01, 0x12, 0x42, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x12, 0x15, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x47, 0x65, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x10, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x11, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x19, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x3a, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x13, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, + 0x08, 0x52, 0x75, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x10, 0x2e, 0x52, 0x75, 0x6e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x52, 0x75, + 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x3a, 0x0a, 0x0b, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x13, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, + 0x52, 0x75, 0x6e, 0x41, 0x6c, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x15, 0x2e, + 0x52, 0x75, 0x6e, 0x41, 0x6c, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x52, 0x75, 0x6e, 0x41, 0x6c, 0x6c, 0x51, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2b, + 0x0a, 0x06, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x0e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, + 0x76, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, + 0x76, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x14, + 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, + 0x42, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x12, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x12, 0x15, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x47, 0x65, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x55, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x10, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x10, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x2e, 0x47, 0x65, 0x74, + 0x47, 0x63, 0x70, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, @@ -4074,154 +4190,158 @@ func file_proto_dekart_proto_rawDescGZIP() []byte { } var file_proto_dekart_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_proto_dekart_proto_msgTypes = make([]protoimpl.MessageInfo, 59) +var file_proto_dekart_proto_msgTypes = make([]protoimpl.MessageInfo, 61) var file_proto_dekart_proto_goTypes = []interface{}{ (GetEnvResponse_Variable_Type)(0), // 0: GetEnvResponse.Variable.Type (AuthState_Action)(0), // 1: AuthState.Action (Query_JobStatus)(0), // 2: Query.JobStatus (Query_QuerySource)(0), // 3: Query.QuerySource (File_Status)(0), // 4: File.Status - (*SetDefaultConnectionRequest)(nil), // 5: SetDefaultConnectionRequest - (*SetDefaultConnectionResponse)(nil), // 6: SetDefaultConnectionResponse - (*RunAllQueriesRequest)(nil), // 7: RunAllQueriesRequest - (*RunAllQueriesResponse)(nil), // 8: RunAllQueriesResponse - (*GetConnectionListRequest)(nil), // 9: GetConnectionListRequest - (*GetConnectionListResponse)(nil), // 10: GetConnectionListResponse - (*GetUserStreamRequest)(nil), // 11: GetUserStreamRequest - (*GetUserStreamResponse)(nil), // 12: GetUserStreamResponse - (*TestConnectionRequest)(nil), // 13: TestConnectionRequest - (*TestConnectionResponse)(nil), // 14: TestConnectionResponse - (*ArchiveConnectionRequest)(nil), // 15: ArchiveConnectionRequest - (*ArchiveConnectionResponse)(nil), // 16: ArchiveConnectionResponse - (*UpdateConnectionRequest)(nil), // 17: UpdateConnectionRequest - (*UpdateConnectionResponse)(nil), // 18: UpdateConnectionResponse - (*CreateConnectionRequest)(nil), // 19: CreateConnectionRequest - (*CreateConnectionResponse)(nil), // 20: CreateConnectionResponse - (*Connection)(nil), // 21: Connection - (*GetUsageRequest)(nil), // 22: GetUsageRequest - (*GetUsageResponse)(nil), // 23: GetUsageResponse - (*SetDiscoverableRequest)(nil), // 24: SetDiscoverableRequest - (*SetDiscoverableResponse)(nil), // 25: SetDiscoverableResponse - (*RemoveDatasetRequest)(nil), // 26: RemoveDatasetRequest - (*RemoveDatasetResponse)(nil), // 27: RemoveDatasetResponse - (*StreamOptions)(nil), // 28: StreamOptions - (*GetEnvRequest)(nil), // 29: GetEnvRequest - (*GetEnvResponse)(nil), // 30: GetEnvResponse - (*RedirectState)(nil), // 31: RedirectState - (*AuthState)(nil), // 32: AuthState - (*ArchiveReportRequest)(nil), // 33: ArchiveReportRequest - (*ArchiveReportResponse)(nil), // 34: ArchiveReportResponse - (*ReportListRequest)(nil), // 35: ReportListRequest - (*ReportListResponse)(nil), // 36: ReportListResponse - (*Report)(nil), // 37: Report - (*Dataset)(nil), // 38: Dataset - (*Query)(nil), // 39: Query - (*File)(nil), // 40: File - (*UpdateReportRequest)(nil), // 41: UpdateReportRequest - (*UpdateReportResponse)(nil), // 42: UpdateReportResponse - (*RunQueryRequest)(nil), // 43: RunQueryRequest - (*RunQueryResponse)(nil), // 44: RunQueryResponse - (*CancelQueryRequest)(nil), // 45: CancelQueryRequest - (*CancelQueryResponse)(nil), // 46: CancelQueryResponse - (*UpdateDatasetNameRequest)(nil), // 47: UpdateDatasetNameRequest - (*UpdateDatasetNameResponse)(nil), // 48: UpdateDatasetNameResponse - (*UpdateDatasetConnectionRequest)(nil), // 49: UpdateDatasetConnectionRequest - (*UpdateDatasetConnectionResponse)(nil), // 50: UpdateDatasetConnectionResponse - (*CreateDatasetRequest)(nil), // 51: CreateDatasetRequest - (*CreateDatasetResponse)(nil), // 52: CreateDatasetResponse - (*CreateFileRequest)(nil), // 53: CreateFileRequest - (*CreateFileResponse)(nil), // 54: CreateFileResponse - (*CreateQueryRequest)(nil), // 55: CreateQueryRequest - (*CreateQueryResponse)(nil), // 56: CreateQueryResponse - (*ReportStreamRequest)(nil), // 57: ReportStreamRequest - (*ReportStreamResponse)(nil), // 58: ReportStreamResponse - (*ForkReportRequest)(nil), // 59: ForkReportRequest - (*ForkReportResponse)(nil), // 60: ForkReportResponse - (*CreateReportRequest)(nil), // 61: CreateReportRequest - (*CreateReportResponse)(nil), // 62: CreateReportResponse - (*GetEnvResponse_Variable)(nil), // 63: GetEnvResponse.Variable + (*GetGcpProjectListRequest)(nil), // 5: GetGcpProjectListRequest + (*GetGcpProjectListResponse)(nil), // 6: GetGcpProjectListResponse + (*SetDefaultConnectionRequest)(nil), // 7: SetDefaultConnectionRequest + (*SetDefaultConnectionResponse)(nil), // 8: SetDefaultConnectionResponse + (*RunAllQueriesRequest)(nil), // 9: RunAllQueriesRequest + (*RunAllQueriesResponse)(nil), // 10: RunAllQueriesResponse + (*GetConnectionListRequest)(nil), // 11: GetConnectionListRequest + (*GetConnectionListResponse)(nil), // 12: GetConnectionListResponse + (*GetUserStreamRequest)(nil), // 13: GetUserStreamRequest + (*GetUserStreamResponse)(nil), // 14: GetUserStreamResponse + (*TestConnectionRequest)(nil), // 15: TestConnectionRequest + (*TestConnectionResponse)(nil), // 16: TestConnectionResponse + (*ArchiveConnectionRequest)(nil), // 17: ArchiveConnectionRequest + (*ArchiveConnectionResponse)(nil), // 18: ArchiveConnectionResponse + (*UpdateConnectionRequest)(nil), // 19: UpdateConnectionRequest + (*UpdateConnectionResponse)(nil), // 20: UpdateConnectionResponse + (*CreateConnectionRequest)(nil), // 21: CreateConnectionRequest + (*CreateConnectionResponse)(nil), // 22: CreateConnectionResponse + (*Connection)(nil), // 23: Connection + (*GetUsageRequest)(nil), // 24: GetUsageRequest + (*GetUsageResponse)(nil), // 25: GetUsageResponse + (*SetDiscoverableRequest)(nil), // 26: SetDiscoverableRequest + (*SetDiscoverableResponse)(nil), // 27: SetDiscoverableResponse + (*RemoveDatasetRequest)(nil), // 28: RemoveDatasetRequest + (*RemoveDatasetResponse)(nil), // 29: RemoveDatasetResponse + (*StreamOptions)(nil), // 30: StreamOptions + (*GetEnvRequest)(nil), // 31: GetEnvRequest + (*GetEnvResponse)(nil), // 32: GetEnvResponse + (*RedirectState)(nil), // 33: RedirectState + (*AuthState)(nil), // 34: AuthState + (*ArchiveReportRequest)(nil), // 35: ArchiveReportRequest + (*ArchiveReportResponse)(nil), // 36: ArchiveReportResponse + (*ReportListRequest)(nil), // 37: ReportListRequest + (*ReportListResponse)(nil), // 38: ReportListResponse + (*Report)(nil), // 39: Report + (*Dataset)(nil), // 40: Dataset + (*Query)(nil), // 41: Query + (*File)(nil), // 42: File + (*UpdateReportRequest)(nil), // 43: UpdateReportRequest + (*UpdateReportResponse)(nil), // 44: UpdateReportResponse + (*RunQueryRequest)(nil), // 45: RunQueryRequest + (*RunQueryResponse)(nil), // 46: RunQueryResponse + (*CancelQueryRequest)(nil), // 47: CancelQueryRequest + (*CancelQueryResponse)(nil), // 48: CancelQueryResponse + (*UpdateDatasetNameRequest)(nil), // 49: UpdateDatasetNameRequest + (*UpdateDatasetNameResponse)(nil), // 50: UpdateDatasetNameResponse + (*UpdateDatasetConnectionRequest)(nil), // 51: UpdateDatasetConnectionRequest + (*UpdateDatasetConnectionResponse)(nil), // 52: UpdateDatasetConnectionResponse + (*CreateDatasetRequest)(nil), // 53: CreateDatasetRequest + (*CreateDatasetResponse)(nil), // 54: CreateDatasetResponse + (*CreateFileRequest)(nil), // 55: CreateFileRequest + (*CreateFileResponse)(nil), // 56: CreateFileResponse + (*CreateQueryRequest)(nil), // 57: CreateQueryRequest + (*CreateQueryResponse)(nil), // 58: CreateQueryResponse + (*ReportStreamRequest)(nil), // 59: ReportStreamRequest + (*ReportStreamResponse)(nil), // 60: ReportStreamResponse + (*ForkReportRequest)(nil), // 61: ForkReportRequest + (*ForkReportResponse)(nil), // 62: ForkReportResponse + (*CreateReportRequest)(nil), // 63: CreateReportRequest + (*CreateReportResponse)(nil), // 64: CreateReportResponse + (*GetEnvResponse_Variable)(nil), // 65: GetEnvResponse.Variable } var file_proto_dekart_proto_depIdxs = []int32{ - 21, // 0: GetConnectionListResponse.connections:type_name -> Connection - 28, // 1: GetUserStreamRequest.stream_options:type_name -> StreamOptions - 28, // 2: GetUserStreamResponse.stream_options:type_name -> StreamOptions - 21, // 3: TestConnectionRequest.connection:type_name -> Connection - 21, // 4: UpdateConnectionRequest.connection:type_name -> Connection - 21, // 5: UpdateConnectionResponse.connection:type_name -> Connection - 21, // 6: CreateConnectionResponse.connection:type_name -> Connection - 63, // 7: GetEnvResponse.variables:type_name -> GetEnvResponse.Variable + 23, // 0: GetConnectionListResponse.connections:type_name -> Connection + 30, // 1: GetUserStreamRequest.stream_options:type_name -> StreamOptions + 30, // 2: GetUserStreamResponse.stream_options:type_name -> StreamOptions + 23, // 3: TestConnectionRequest.connection:type_name -> Connection + 23, // 4: UpdateConnectionRequest.connection:type_name -> Connection + 23, // 5: UpdateConnectionResponse.connection:type_name -> Connection + 23, // 6: CreateConnectionResponse.connection:type_name -> Connection + 65, // 7: GetEnvResponse.variables:type_name -> GetEnvResponse.Variable 1, // 8: AuthState.action:type_name -> AuthState.Action - 28, // 9: ReportListRequest.stream_options:type_name -> StreamOptions - 37, // 10: ReportListResponse.reports:type_name -> Report - 28, // 11: ReportListResponse.stream_options:type_name -> StreamOptions + 30, // 9: ReportListRequest.stream_options:type_name -> StreamOptions + 39, // 10: ReportListResponse.reports:type_name -> Report + 30, // 11: ReportListResponse.stream_options:type_name -> StreamOptions 2, // 12: Query.job_status:type_name -> Query.JobStatus 3, // 13: Query.query_source:type_name -> Query.QuerySource 4, // 14: File.file_status:type_name -> File.Status - 37, // 15: UpdateReportRequest.report:type_name -> Report - 39, // 16: UpdateReportRequest.query:type_name -> Query - 39, // 17: CreateQueryResponse.query:type_name -> Query - 37, // 18: ReportStreamRequest.report:type_name -> Report - 28, // 19: ReportStreamRequest.stream_options:type_name -> StreamOptions - 37, // 20: ReportStreamResponse.report:type_name -> Report - 39, // 21: ReportStreamResponse.queries:type_name -> Query - 28, // 22: ReportStreamResponse.stream_options:type_name -> StreamOptions - 38, // 23: ReportStreamResponse.datasets:type_name -> Dataset - 40, // 24: ReportStreamResponse.files:type_name -> File - 21, // 25: ReportStreamResponse.connections:type_name -> Connection - 37, // 26: CreateReportResponse.report:type_name -> Report + 39, // 15: UpdateReportRequest.report:type_name -> Report + 41, // 16: UpdateReportRequest.query:type_name -> Query + 41, // 17: CreateQueryResponse.query:type_name -> Query + 39, // 18: ReportStreamRequest.report:type_name -> Report + 30, // 19: ReportStreamRequest.stream_options:type_name -> StreamOptions + 39, // 20: ReportStreamResponse.report:type_name -> Report + 41, // 21: ReportStreamResponse.queries:type_name -> Query + 30, // 22: ReportStreamResponse.stream_options:type_name -> StreamOptions + 40, // 23: ReportStreamResponse.datasets:type_name -> Dataset + 42, // 24: ReportStreamResponse.files:type_name -> File + 23, // 25: ReportStreamResponse.connections:type_name -> Connection + 39, // 26: CreateReportResponse.report:type_name -> Report 0, // 27: GetEnvResponse.Variable.type:type_name -> GetEnvResponse.Variable.Type - 61, // 28: Dekart.CreateReport:input_type -> CreateReportRequest - 59, // 29: Dekart.ForkReport:input_type -> ForkReportRequest - 41, // 30: Dekart.UpdateReport:input_type -> UpdateReportRequest - 33, // 31: Dekart.ArchiveReport:input_type -> ArchiveReportRequest - 24, // 32: Dekart.SetDiscoverable:input_type -> SetDiscoverableRequest - 51, // 33: Dekart.CreateDataset:input_type -> CreateDatasetRequest - 26, // 34: Dekart.RemoveDataset:input_type -> RemoveDatasetRequest - 47, // 35: Dekart.UpdateDatasetName:input_type -> UpdateDatasetNameRequest - 49, // 36: Dekart.UpdateDatasetConnection:input_type -> UpdateDatasetConnectionRequest - 53, // 37: Dekart.CreateFile:input_type -> CreateFileRequest - 55, // 38: Dekart.CreateQuery:input_type -> CreateQueryRequest - 43, // 39: Dekart.RunQuery:input_type -> RunQueryRequest - 45, // 40: Dekart.CancelQuery:input_type -> CancelQueryRequest - 7, // 41: Dekart.RunAllQueries:input_type -> RunAllQueriesRequest - 29, // 42: Dekart.GetEnv:input_type -> GetEnvRequest - 57, // 43: Dekart.GetReportStream:input_type -> ReportStreamRequest - 35, // 44: Dekart.GetReportListStream:input_type -> ReportListRequest - 11, // 45: Dekart.GetUserStream:input_type -> GetUserStreamRequest - 22, // 46: Dekart.GetUsage:input_type -> GetUsageRequest - 19, // 47: Dekart.CreateConnection:input_type -> CreateConnectionRequest - 17, // 48: Dekart.UpdateConnection:input_type -> UpdateConnectionRequest - 15, // 49: Dekart.ArchiveConnection:input_type -> ArchiveConnectionRequest - 9, // 50: Dekart.GetConnectionList:input_type -> GetConnectionListRequest - 13, // 51: Dekart.TestConnection:input_type -> TestConnectionRequest - 5, // 52: Dekart.SetDefaultConnection:input_type -> SetDefaultConnectionRequest - 62, // 53: Dekart.CreateReport:output_type -> CreateReportResponse - 60, // 54: Dekart.ForkReport:output_type -> ForkReportResponse - 42, // 55: Dekart.UpdateReport:output_type -> UpdateReportResponse - 34, // 56: Dekart.ArchiveReport:output_type -> ArchiveReportResponse - 25, // 57: Dekart.SetDiscoverable:output_type -> SetDiscoverableResponse - 52, // 58: Dekart.CreateDataset:output_type -> CreateDatasetResponse - 27, // 59: Dekart.RemoveDataset:output_type -> RemoveDatasetResponse - 48, // 60: Dekart.UpdateDatasetName:output_type -> UpdateDatasetNameResponse - 50, // 61: Dekart.UpdateDatasetConnection:output_type -> UpdateDatasetConnectionResponse - 54, // 62: Dekart.CreateFile:output_type -> CreateFileResponse - 56, // 63: Dekart.CreateQuery:output_type -> CreateQueryResponse - 44, // 64: Dekart.RunQuery:output_type -> RunQueryResponse - 46, // 65: Dekart.CancelQuery:output_type -> CancelQueryResponse - 8, // 66: Dekart.RunAllQueries:output_type -> RunAllQueriesResponse - 30, // 67: Dekart.GetEnv:output_type -> GetEnvResponse - 58, // 68: Dekart.GetReportStream:output_type -> ReportStreamResponse - 36, // 69: Dekart.GetReportListStream:output_type -> ReportListResponse - 12, // 70: Dekart.GetUserStream:output_type -> GetUserStreamResponse - 23, // 71: Dekart.GetUsage:output_type -> GetUsageResponse - 20, // 72: Dekart.CreateConnection:output_type -> CreateConnectionResponse - 18, // 73: Dekart.UpdateConnection:output_type -> UpdateConnectionResponse - 16, // 74: Dekart.ArchiveConnection:output_type -> ArchiveConnectionResponse - 10, // 75: Dekart.GetConnectionList:output_type -> GetConnectionListResponse - 14, // 76: Dekart.TestConnection:output_type -> TestConnectionResponse - 6, // 77: Dekart.SetDefaultConnection:output_type -> SetDefaultConnectionResponse - 53, // [53:78] is the sub-list for method output_type - 28, // [28:53] is the sub-list for method input_type + 63, // 28: Dekart.CreateReport:input_type -> CreateReportRequest + 61, // 29: Dekart.ForkReport:input_type -> ForkReportRequest + 43, // 30: Dekart.UpdateReport:input_type -> UpdateReportRequest + 35, // 31: Dekart.ArchiveReport:input_type -> ArchiveReportRequest + 26, // 32: Dekart.SetDiscoverable:input_type -> SetDiscoverableRequest + 53, // 33: Dekart.CreateDataset:input_type -> CreateDatasetRequest + 28, // 34: Dekart.RemoveDataset:input_type -> RemoveDatasetRequest + 49, // 35: Dekart.UpdateDatasetName:input_type -> UpdateDatasetNameRequest + 51, // 36: Dekart.UpdateDatasetConnection:input_type -> UpdateDatasetConnectionRequest + 55, // 37: Dekart.CreateFile:input_type -> CreateFileRequest + 57, // 38: Dekart.CreateQuery:input_type -> CreateQueryRequest + 45, // 39: Dekart.RunQuery:input_type -> RunQueryRequest + 47, // 40: Dekart.CancelQuery:input_type -> CancelQueryRequest + 9, // 41: Dekart.RunAllQueries:input_type -> RunAllQueriesRequest + 31, // 42: Dekart.GetEnv:input_type -> GetEnvRequest + 59, // 43: Dekart.GetReportStream:input_type -> ReportStreamRequest + 37, // 44: Dekart.GetReportListStream:input_type -> ReportListRequest + 13, // 45: Dekart.GetUserStream:input_type -> GetUserStreamRequest + 24, // 46: Dekart.GetUsage:input_type -> GetUsageRequest + 21, // 47: Dekart.CreateConnection:input_type -> CreateConnectionRequest + 5, // 48: Dekart.GetGcpProjectList:input_type -> GetGcpProjectListRequest + 19, // 49: Dekart.UpdateConnection:input_type -> UpdateConnectionRequest + 17, // 50: Dekart.ArchiveConnection:input_type -> ArchiveConnectionRequest + 11, // 51: Dekart.GetConnectionList:input_type -> GetConnectionListRequest + 15, // 52: Dekart.TestConnection:input_type -> TestConnectionRequest + 7, // 53: Dekart.SetDefaultConnection:input_type -> SetDefaultConnectionRequest + 64, // 54: Dekart.CreateReport:output_type -> CreateReportResponse + 62, // 55: Dekart.ForkReport:output_type -> ForkReportResponse + 44, // 56: Dekart.UpdateReport:output_type -> UpdateReportResponse + 36, // 57: Dekart.ArchiveReport:output_type -> ArchiveReportResponse + 27, // 58: Dekart.SetDiscoverable:output_type -> SetDiscoverableResponse + 54, // 59: Dekart.CreateDataset:output_type -> CreateDatasetResponse + 29, // 60: Dekart.RemoveDataset:output_type -> RemoveDatasetResponse + 50, // 61: Dekart.UpdateDatasetName:output_type -> UpdateDatasetNameResponse + 52, // 62: Dekart.UpdateDatasetConnection:output_type -> UpdateDatasetConnectionResponse + 56, // 63: Dekart.CreateFile:output_type -> CreateFileResponse + 58, // 64: Dekart.CreateQuery:output_type -> CreateQueryResponse + 46, // 65: Dekart.RunQuery:output_type -> RunQueryResponse + 48, // 66: Dekart.CancelQuery:output_type -> CancelQueryResponse + 10, // 67: Dekart.RunAllQueries:output_type -> RunAllQueriesResponse + 32, // 68: Dekart.GetEnv:output_type -> GetEnvResponse + 60, // 69: Dekart.GetReportStream:output_type -> ReportStreamResponse + 38, // 70: Dekart.GetReportListStream:output_type -> ReportListResponse + 14, // 71: Dekart.GetUserStream:output_type -> GetUserStreamResponse + 25, // 72: Dekart.GetUsage:output_type -> GetUsageResponse + 22, // 73: Dekart.CreateConnection:output_type -> CreateConnectionResponse + 6, // 74: Dekart.GetGcpProjectList:output_type -> GetGcpProjectListResponse + 20, // 75: Dekart.UpdateConnection:output_type -> UpdateConnectionResponse + 18, // 76: Dekart.ArchiveConnection:output_type -> ArchiveConnectionResponse + 12, // 77: Dekart.GetConnectionList:output_type -> GetConnectionListResponse + 16, // 78: Dekart.TestConnection:output_type -> TestConnectionResponse + 8, // 79: Dekart.SetDefaultConnection:output_type -> SetDefaultConnectionResponse + 54, // [54:80] is the sub-list for method output_type + 28, // [28:54] is the sub-list for method input_type 28, // [28:28] is the sub-list for extension type_name 28, // [28:28] is the sub-list for extension extendee 0, // [0:28] is the sub-list for field type_name @@ -4234,7 +4354,7 @@ func file_proto_dekart_proto_init() { } if !protoimpl.UnsafeEnabled { file_proto_dekart_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetDefaultConnectionRequest); i { + switch v := v.(*GetGcpProjectListRequest); i { case 0: return &v.state case 1: @@ -4246,7 +4366,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetDefaultConnectionResponse); i { + switch v := v.(*GetGcpProjectListResponse); i { case 0: return &v.state case 1: @@ -4258,7 +4378,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunAllQueriesRequest); i { + switch v := v.(*SetDefaultConnectionRequest); i { case 0: return &v.state case 1: @@ -4270,7 +4390,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunAllQueriesResponse); i { + switch v := v.(*SetDefaultConnectionResponse); i { case 0: return &v.state case 1: @@ -4282,7 +4402,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConnectionListRequest); i { + switch v := v.(*RunAllQueriesRequest); i { case 0: return &v.state case 1: @@ -4294,7 +4414,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConnectionListResponse); i { + switch v := v.(*RunAllQueriesResponse); i { case 0: return &v.state case 1: @@ -4306,7 +4426,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUserStreamRequest); i { + switch v := v.(*GetConnectionListRequest); i { case 0: return &v.state case 1: @@ -4318,7 +4438,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUserStreamResponse); i { + switch v := v.(*GetConnectionListResponse); i { case 0: return &v.state case 1: @@ -4330,7 +4450,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestConnectionRequest); i { + switch v := v.(*GetUserStreamRequest); i { case 0: return &v.state case 1: @@ -4342,7 +4462,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestConnectionResponse); i { + switch v := v.(*GetUserStreamResponse); i { case 0: return &v.state case 1: @@ -4354,7 +4474,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArchiveConnectionRequest); i { + switch v := v.(*TestConnectionRequest); i { case 0: return &v.state case 1: @@ -4366,7 +4486,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArchiveConnectionResponse); i { + switch v := v.(*TestConnectionResponse); i { case 0: return &v.state case 1: @@ -4378,7 +4498,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateConnectionRequest); i { + switch v := v.(*ArchiveConnectionRequest); i { case 0: return &v.state case 1: @@ -4390,7 +4510,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateConnectionResponse); i { + switch v := v.(*ArchiveConnectionResponse); i { case 0: return &v.state case 1: @@ -4402,7 +4522,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateConnectionRequest); i { + switch v := v.(*UpdateConnectionRequest); i { case 0: return &v.state case 1: @@ -4414,7 +4534,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateConnectionResponse); i { + switch v := v.(*UpdateConnectionResponse); i { case 0: return &v.state case 1: @@ -4426,7 +4546,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Connection); i { + switch v := v.(*CreateConnectionRequest); i { case 0: return &v.state case 1: @@ -4438,7 +4558,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUsageRequest); i { + switch v := v.(*CreateConnectionResponse); i { case 0: return &v.state case 1: @@ -4450,7 +4570,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUsageResponse); i { + switch v := v.(*Connection); i { case 0: return &v.state case 1: @@ -4462,7 +4582,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetDiscoverableRequest); i { + switch v := v.(*GetUsageRequest); i { case 0: return &v.state case 1: @@ -4474,7 +4594,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetDiscoverableResponse); i { + switch v := v.(*GetUsageResponse); i { case 0: return &v.state case 1: @@ -4486,7 +4606,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveDatasetRequest); i { + switch v := v.(*SetDiscoverableRequest); i { case 0: return &v.state case 1: @@ -4498,7 +4618,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveDatasetResponse); i { + switch v := v.(*SetDiscoverableResponse); i { case 0: return &v.state case 1: @@ -4510,7 +4630,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamOptions); i { + switch v := v.(*RemoveDatasetRequest); i { case 0: return &v.state case 1: @@ -4522,7 +4642,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEnvRequest); i { + switch v := v.(*RemoveDatasetResponse); i { case 0: return &v.state case 1: @@ -4534,7 +4654,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEnvResponse); i { + switch v := v.(*StreamOptions); i { case 0: return &v.state case 1: @@ -4546,7 +4666,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RedirectState); i { + switch v := v.(*GetEnvRequest); i { case 0: return &v.state case 1: @@ -4558,7 +4678,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AuthState); i { + switch v := v.(*GetEnvResponse); i { case 0: return &v.state case 1: @@ -4570,7 +4690,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArchiveReportRequest); i { + switch v := v.(*RedirectState); i { case 0: return &v.state case 1: @@ -4582,7 +4702,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArchiveReportResponse); i { + switch v := v.(*AuthState); i { case 0: return &v.state case 1: @@ -4594,7 +4714,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReportListRequest); i { + switch v := v.(*ArchiveReportRequest); i { case 0: return &v.state case 1: @@ -4606,7 +4726,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReportListResponse); i { + switch v := v.(*ArchiveReportResponse); i { case 0: return &v.state case 1: @@ -4618,7 +4738,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Report); i { + switch v := v.(*ReportListRequest); i { case 0: return &v.state case 1: @@ -4630,7 +4750,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Dataset); i { + switch v := v.(*ReportListResponse); i { case 0: return &v.state case 1: @@ -4642,7 +4762,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Query); i { + switch v := v.(*Report); i { case 0: return &v.state case 1: @@ -4654,7 +4774,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*File); i { + switch v := v.(*Dataset); i { case 0: return &v.state case 1: @@ -4666,7 +4786,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateReportRequest); i { + switch v := v.(*Query); i { case 0: return &v.state case 1: @@ -4678,7 +4798,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateReportResponse); i { + switch v := v.(*File); i { case 0: return &v.state case 1: @@ -4690,7 +4810,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunQueryRequest); i { + switch v := v.(*UpdateReportRequest); i { case 0: return &v.state case 1: @@ -4702,7 +4822,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunQueryResponse); i { + switch v := v.(*UpdateReportResponse); i { case 0: return &v.state case 1: @@ -4714,7 +4834,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CancelQueryRequest); i { + switch v := v.(*RunQueryRequest); i { case 0: return &v.state case 1: @@ -4726,7 +4846,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CancelQueryResponse); i { + switch v := v.(*RunQueryResponse); i { case 0: return &v.state case 1: @@ -4738,7 +4858,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateDatasetNameRequest); i { + switch v := v.(*CancelQueryRequest); i { case 0: return &v.state case 1: @@ -4750,7 +4870,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateDatasetNameResponse); i { + switch v := v.(*CancelQueryResponse); i { case 0: return &v.state case 1: @@ -4762,7 +4882,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateDatasetConnectionRequest); i { + switch v := v.(*UpdateDatasetNameRequest); i { case 0: return &v.state case 1: @@ -4774,7 +4894,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateDatasetConnectionResponse); i { + switch v := v.(*UpdateDatasetNameResponse); i { case 0: return &v.state case 1: @@ -4786,7 +4906,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateDatasetRequest); i { + switch v := v.(*UpdateDatasetConnectionRequest); i { case 0: return &v.state case 1: @@ -4798,7 +4918,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateDatasetResponse); i { + switch v := v.(*UpdateDatasetConnectionResponse); i { case 0: return &v.state case 1: @@ -4810,7 +4930,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFileRequest); i { + switch v := v.(*CreateDatasetRequest); i { case 0: return &v.state case 1: @@ -4822,7 +4942,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFileResponse); i { + switch v := v.(*CreateDatasetResponse); i { case 0: return &v.state case 1: @@ -4834,7 +4954,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateQueryRequest); i { + switch v := v.(*CreateFileRequest); i { case 0: return &v.state case 1: @@ -4846,7 +4966,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateQueryResponse); i { + switch v := v.(*CreateFileResponse); i { case 0: return &v.state case 1: @@ -4858,7 +4978,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReportStreamRequest); i { + switch v := v.(*CreateQueryRequest); i { case 0: return &v.state case 1: @@ -4870,7 +4990,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReportStreamResponse); i { + switch v := v.(*CreateQueryResponse); i { case 0: return &v.state case 1: @@ -4882,7 +5002,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ForkReportRequest); i { + switch v := v.(*ReportStreamRequest); i { case 0: return &v.state case 1: @@ -4894,7 +5014,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ForkReportResponse); i { + switch v := v.(*ReportStreamResponse); i { case 0: return &v.state case 1: @@ -4906,7 +5026,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateReportRequest); i { + switch v := v.(*ForkReportRequest); i { case 0: return &v.state case 1: @@ -4918,7 +5038,7 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateReportResponse); i { + switch v := v.(*ForkReportResponse); i { case 0: return &v.state case 1: @@ -4930,6 +5050,30 @@ func file_proto_dekart_proto_init() { } } file_proto_dekart_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateReportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_dekart_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateReportResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_dekart_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetEnvResponse_Variable); i { case 0: return &v.state @@ -4948,7 +5092,7 @@ func file_proto_dekart_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_dekart_proto_rawDesc, NumEnums: 5, - NumMessages: 59, + NumMessages: 61, NumExtensions: 0, NumServices: 1, }, diff --git a/src/proto/dekart_grpc.pb.go b/src/proto/dekart_grpc.pb.go index fa5f298f..95b16f73 100644 --- a/src/proto/dekart_grpc.pb.go +++ b/src/proto/dekart_grpc.pb.go @@ -39,6 +39,7 @@ const ( Dekart_GetUserStream_FullMethodName = "/Dekart/GetUserStream" Dekart_GetUsage_FullMethodName = "/Dekart/GetUsage" Dekart_CreateConnection_FullMethodName = "/Dekart/CreateConnection" + Dekart_GetGcpProjectList_FullMethodName = "/Dekart/GetGcpProjectList" Dekart_UpdateConnection_FullMethodName = "/Dekart/UpdateConnection" Dekart_ArchiveConnection_FullMethodName = "/Dekart/ArchiveConnection" Dekart_GetConnectionList_FullMethodName = "/Dekart/GetConnectionList" @@ -77,6 +78,7 @@ type DekartClient interface { GetUsage(ctx context.Context, in *GetUsageRequest, opts ...grpc.CallOption) (*GetUsageResponse, error) //connections CreateConnection(ctx context.Context, in *CreateConnectionRequest, opts ...grpc.CallOption) (*CreateConnectionResponse, error) + GetGcpProjectList(ctx context.Context, in *GetGcpProjectListRequest, opts ...grpc.CallOption) (*GetGcpProjectListResponse, error) UpdateConnection(ctx context.Context, in *UpdateConnectionRequest, opts ...grpc.CallOption) (*UpdateConnectionResponse, error) ArchiveConnection(ctx context.Context, in *ArchiveConnectionRequest, opts ...grpc.CallOption) (*ArchiveConnectionResponse, error) GetConnectionList(ctx context.Context, in *GetConnectionListRequest, opts ...grpc.CallOption) (*GetConnectionListResponse, error) @@ -341,6 +343,15 @@ func (c *dekartClient) CreateConnection(ctx context.Context, in *CreateConnectio return out, nil } +func (c *dekartClient) GetGcpProjectList(ctx context.Context, in *GetGcpProjectListRequest, opts ...grpc.CallOption) (*GetGcpProjectListResponse, error) { + out := new(GetGcpProjectListResponse) + err := c.cc.Invoke(ctx, Dekart_GetGcpProjectList_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *dekartClient) UpdateConnection(ctx context.Context, in *UpdateConnectionRequest, opts ...grpc.CallOption) (*UpdateConnectionResponse, error) { out := new(UpdateConnectionResponse) err := c.cc.Invoke(ctx, Dekart_UpdateConnection_FullMethodName, in, out, opts...) @@ -417,6 +428,7 @@ type DekartServer interface { GetUsage(context.Context, *GetUsageRequest) (*GetUsageResponse, error) //connections CreateConnection(context.Context, *CreateConnectionRequest) (*CreateConnectionResponse, error) + GetGcpProjectList(context.Context, *GetGcpProjectListRequest) (*GetGcpProjectListResponse, error) UpdateConnection(context.Context, *UpdateConnectionRequest) (*UpdateConnectionResponse, error) ArchiveConnection(context.Context, *ArchiveConnectionRequest) (*ArchiveConnectionResponse, error) GetConnectionList(context.Context, *GetConnectionListRequest) (*GetConnectionListResponse, error) @@ -489,6 +501,9 @@ func (UnimplementedDekartServer) GetUsage(context.Context, *GetUsageRequest) (*G func (UnimplementedDekartServer) CreateConnection(context.Context, *CreateConnectionRequest) (*CreateConnectionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateConnection not implemented") } +func (UnimplementedDekartServer) GetGcpProjectList(context.Context, *GetGcpProjectListRequest) (*GetGcpProjectListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetGcpProjectList not implemented") +} func (UnimplementedDekartServer) UpdateConnection(context.Context, *UpdateConnectionRequest) (*UpdateConnectionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateConnection not implemented") } @@ -886,6 +901,24 @@ func _Dekart_CreateConnection_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Dekart_GetGcpProjectList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGcpProjectListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DekartServer).GetGcpProjectList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Dekart_GetGcpProjectList_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DekartServer).GetGcpProjectList(ctx, req.(*GetGcpProjectListRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Dekart_UpdateConnection_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(UpdateConnectionRequest) if err := dec(in); err != nil { @@ -1051,6 +1084,10 @@ var Dekart_ServiceDesc = grpc.ServiceDesc{ MethodName: "CreateConnection", Handler: _Dekart_CreateConnection_Handler, }, + { + MethodName: "GetGcpProjectList", + Handler: _Dekart_GetGcpProjectList_Handler, + }, { MethodName: "UpdateConnection", Handler: _Dekart_UpdateConnection_Handler, diff --git a/src/proto/dekart_pb.d.ts b/src/proto/dekart_pb.d.ts index 45af16eb..042c541f 100644 --- a/src/proto/dekart_pb.d.ts +++ b/src/proto/dekart_pb.d.ts @@ -3,6 +3,44 @@ import * as jspb from "google-protobuf"; +export class GetGcpProjectListRequest extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetGcpProjectListRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetGcpProjectListRequest): GetGcpProjectListRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetGcpProjectListRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetGcpProjectListRequest; + static deserializeBinaryFromReader(message: GetGcpProjectListRequest, reader: jspb.BinaryReader): GetGcpProjectListRequest; +} + +export namespace GetGcpProjectListRequest { + export type AsObject = { + } +} + +export class GetGcpProjectListResponse extends jspb.Message { + clearProjectsList(): void; + getProjectsList(): Array; + setProjectsList(value: Array): void; + addProjects(value: string, index?: number): string; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetGcpProjectListResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetGcpProjectListResponse): GetGcpProjectListResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetGcpProjectListResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetGcpProjectListResponse; + static deserializeBinaryFromReader(message: GetGcpProjectListResponse, reader: jspb.BinaryReader): GetGcpProjectListResponse; +} + +export namespace GetGcpProjectListResponse { + export type AsObject = { + projectsList: Array, + } +} + export class SetDefaultConnectionRequest extends jspb.Message { getConnectionId(): string; setConnectionId(value: string): void; @@ -366,6 +404,12 @@ export class Connection extends jspb.Message { getUpdatedAt(): number; setUpdatedAt(value: number): void; + getDatasetCount(): number; + setDatasetCount(value: number): void; + + getCanStoreFiles(): boolean; + setCanStoreFiles(value: boolean): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): Connection.AsObject; static toObject(includeInstance: boolean, msg: Connection): Connection.AsObject; @@ -386,6 +430,8 @@ export namespace Connection { authorEmail: string, createdAt: number, updatedAt: number, + datasetCount: number, + canStoreFiles: boolean, } } diff --git a/src/proto/dekart_pb.js b/src/proto/dekart_pb.js index 7533fc4d..1b876f5f 100644 --- a/src/proto/dekart_pb.js +++ b/src/proto/dekart_pb.js @@ -44,6 +44,8 @@ goog.exportSymbol('proto.GetEnvRequest', null, global); goog.exportSymbol('proto.GetEnvResponse', null, global); goog.exportSymbol('proto.GetEnvResponse.Variable', null, global); goog.exportSymbol('proto.GetEnvResponse.Variable.Type', null, global); +goog.exportSymbol('proto.GetGcpProjectListRequest', null, global); +goog.exportSymbol('proto.GetGcpProjectListResponse', null, global); goog.exportSymbol('proto.GetUsageRequest', null, global); goog.exportSymbol('proto.GetUsageResponse', null, global); goog.exportSymbol('proto.GetUserStreamRequest', null, global); @@ -78,6 +80,48 @@ goog.exportSymbol('proto.UpdateDatasetNameRequest', null, global); goog.exportSymbol('proto.UpdateDatasetNameResponse', null, global); goog.exportSymbol('proto.UpdateReportRequest', null, global); goog.exportSymbol('proto.UpdateReportResponse', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.GetGcpProjectListRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.GetGcpProjectListRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.GetGcpProjectListRequest.displayName = 'proto.GetGcpProjectListRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.GetGcpProjectListResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.GetGcpProjectListResponse.repeatedFields_, null); +}; +goog.inherits(proto.GetGcpProjectListResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.GetGcpProjectListResponse.displayName = 'proto.GetGcpProjectListResponse'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -1320,6 +1364,263 @@ if (goog.DEBUG && !COMPILED) { +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.GetGcpProjectListRequest.prototype.toObject = function(opt_includeInstance) { + return proto.GetGcpProjectListRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.GetGcpProjectListRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.GetGcpProjectListRequest.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.GetGcpProjectListRequest} + */ +proto.GetGcpProjectListRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.GetGcpProjectListRequest; + return proto.GetGcpProjectListRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.GetGcpProjectListRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.GetGcpProjectListRequest} + */ +proto.GetGcpProjectListRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.GetGcpProjectListRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.GetGcpProjectListRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.GetGcpProjectListRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.GetGcpProjectListRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.GetGcpProjectListResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.GetGcpProjectListResponse.prototype.toObject = function(opt_includeInstance) { + return proto.GetGcpProjectListResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.GetGcpProjectListResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.GetGcpProjectListResponse.toObject = function(includeInstance, msg) { + var f, obj = { + projectsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.GetGcpProjectListResponse} + */ +proto.GetGcpProjectListResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.GetGcpProjectListResponse; + return proto.GetGcpProjectListResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.GetGcpProjectListResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.GetGcpProjectListResponse} + */ +proto.GetGcpProjectListResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.addProjects(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.GetGcpProjectListResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.GetGcpProjectListResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.GetGcpProjectListResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.GetGcpProjectListResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getProjectsList(); + if (f.length > 0) { + writer.writeRepeatedString( + 1, + f + ); + } +}; + + +/** + * repeated string projects = 1; + * @return {!Array} + */ +proto.GetGcpProjectListResponse.prototype.getProjectsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.GetGcpProjectListResponse} returns this + */ +proto.GetGcpProjectListResponse.prototype.setProjectsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.GetGcpProjectListResponse} returns this + */ +proto.GetGcpProjectListResponse.prototype.addProjects = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.GetGcpProjectListResponse} returns this + */ +proto.GetGcpProjectListResponse.prototype.clearProjectsList = function() { + return this.setProjectsList([]); +}; + + + + + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -3626,7 +3927,9 @@ proto.Connection.toObject = function(includeInstance, msg) { isDefault: jspb.Message.getBooleanFieldWithDefault(msg, 5, false), authorEmail: jspb.Message.getFieldWithDefault(msg, 6, ""), createdAt: jspb.Message.getFieldWithDefault(msg, 7, 0), - updatedAt: jspb.Message.getFieldWithDefault(msg, 8, 0) + updatedAt: jspb.Message.getFieldWithDefault(msg, 8, 0), + datasetCount: jspb.Message.getFieldWithDefault(msg, 9, 0), + canStoreFiles: jspb.Message.getBooleanFieldWithDefault(msg, 10, false) }; if (includeInstance) { @@ -3695,6 +3998,14 @@ proto.Connection.deserializeBinaryFromReader = function(msg, reader) { var value = /** @type {number} */ (reader.readInt64()); msg.setUpdatedAt(value); break; + case 9: + var value = /** @type {number} */ (reader.readInt64()); + msg.setDatasetCount(value); + break; + case 10: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCanStoreFiles(value); + break; default: reader.skipField(); break; @@ -3780,6 +4091,20 @@ proto.Connection.serializeBinaryToWriter = function(message, writer) { f ); } + f = message.getDatasetCount(); + if (f !== 0) { + writer.writeInt64( + 9, + f + ); + } + f = message.getCanStoreFiles(); + if (f) { + writer.writeBool( + 10, + f + ); + } }; @@ -3927,6 +4252,42 @@ proto.Connection.prototype.setUpdatedAt = function(value) { }; +/** + * optional int64 dataset_count = 9; + * @return {number} + */ +proto.Connection.prototype.getDatasetCount = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 9, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.Connection} returns this + */ +proto.Connection.prototype.setDatasetCount = function(value) { + return jspb.Message.setProto3IntField(this, 9, value); +}; + + +/** + * optional bool can_store_files = 10; + * @return {boolean} + */ +proto.Connection.prototype.getCanStoreFiles = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 10, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.Connection} returns this + */ +proto.Connection.prototype.setCanStoreFiles = function(value) { + return jspb.Message.setProto3BooleanField(this, 10, value); +}; + + diff --git a/src/proto/dekart_pb_service.d.ts b/src/proto/dekart_pb_service.d.ts index ba88f729..149ccd0e 100644 --- a/src/proto/dekart_pb_service.d.ts +++ b/src/proto/dekart_pb_service.d.ts @@ -184,6 +184,15 @@ type DekartCreateConnection = { readonly responseType: typeof proto_dekart_pb.CreateConnectionResponse; }; +type DekartGetGcpProjectList = { + readonly methodName: string; + readonly service: typeof Dekart; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof proto_dekart_pb.GetGcpProjectListRequest; + readonly responseType: typeof proto_dekart_pb.GetGcpProjectListResponse; +}; + type DekartUpdateConnection = { readonly methodName: string; readonly service: typeof Dekart; @@ -251,6 +260,7 @@ export class Dekart { static readonly GetUserStream: DekartGetUserStream; static readonly GetUsage: DekartGetUsage; static readonly CreateConnection: DekartCreateConnection; + static readonly GetGcpProjectList: DekartGetGcpProjectList; static readonly UpdateConnection: DekartUpdateConnection; static readonly ArchiveConnection: DekartArchiveConnection; static readonly GetConnectionList: DekartGetConnectionList; @@ -446,6 +456,15 @@ export class DekartClient { requestMessage: proto_dekart_pb.CreateConnectionRequest, callback: (error: ServiceError|null, responseMessage: proto_dekart_pb.CreateConnectionResponse|null) => void ): UnaryResponse; + getGcpProjectList( + requestMessage: proto_dekart_pb.GetGcpProjectListRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: proto_dekart_pb.GetGcpProjectListResponse|null) => void + ): UnaryResponse; + getGcpProjectList( + requestMessage: proto_dekart_pb.GetGcpProjectListRequest, + callback: (error: ServiceError|null, responseMessage: proto_dekart_pb.GetGcpProjectListResponse|null) => void + ): UnaryResponse; updateConnection( requestMessage: proto_dekart_pb.UpdateConnectionRequest, metadata: grpc.Metadata, diff --git a/src/proto/dekart_pb_service.js b/src/proto/dekart_pb_service.js index f3d8d70c..41adaf8c 100644 --- a/src/proto/dekart_pb_service.js +++ b/src/proto/dekart_pb_service.js @@ -190,6 +190,15 @@ Dekart.CreateConnection = { responseType: proto_dekart_pb.CreateConnectionResponse }; +Dekart.GetGcpProjectList = { + methodName: "GetGcpProjectList", + service: Dekart, + requestStream: false, + responseStream: false, + requestType: proto_dekart_pb.GetGcpProjectListRequest, + responseType: proto_dekart_pb.GetGcpProjectListResponse +}; + Dekart.UpdateConnection = { methodName: "UpdateConnection", service: Dekart, @@ -886,6 +895,37 @@ DekartClient.prototype.createConnection = function createConnection(requestMessa }; }; +DekartClient.prototype.getGcpProjectList = function getGcpProjectList(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(Dekart.GetGcpProjectList, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + DekartClient.prototype.updateConnection = function updateConnection(requestMessage, metadata, callback) { if (arguments.length === 2) { callback = arguments[1]; diff --git a/src/server/app/app.go b/src/server/app/app.go index 5a188261..2078507d 100644 --- a/src/server/app/app.go +++ b/src/server/app/app.go @@ -70,7 +70,7 @@ func matchOrigin(origin string) bool { result := origin == allowedOrigin if !result { - log.Warn().Str("origin", origin).Str("allowed origin", allowedOrigin).Msg("Origin is not allowed") + log.Warn().Str("origin", origin).Str("allowedOrigin", allowedOrigin).Msg("Origin is not allowed") } return result } diff --git a/src/server/athenajob/athenajob.go b/src/server/athenajob/athenajob.go index 755550a8..e0cd4ee7 100644 --- a/src/server/athenajob/athenajob.go +++ b/src/server/athenajob/athenajob.go @@ -135,8 +135,7 @@ func (j *Job) wait() { { j.Lock() j.ResultSize = *size - resultID := j.GetID() - j.ResultID = &resultID + j.ResultReady = true j.Unlock() } j.Status() <- int32(proto.Query_JOB_STATUS_DONE) diff --git a/src/server/bqjob/bqjob.go b/src/server/bqjob/bqjob.go index 28ba7a7d..b79119c9 100644 --- a/src/server/bqjob/bqjob.go +++ b/src/server/bqjob/bqjob.go @@ -10,6 +10,9 @@ import ( "strings" "dekart/src/proto" + "dekart/src/server/bqstorage" + "dekart/src/server/bqutils" + "dekart/src/server/errtype" "dekart/src/server/job" "dekart/src/server/storage" "dekart/src/server/user" @@ -29,7 +32,6 @@ type Job struct { client *bigquery.Client } -var contextCancelledRe = regexp.MustCompile(`context canceled`) var orderByRe = regexp.MustCompile(`(?ims)order[\s]+by`) func (job *Job) close(storageWriter io.WriteCloser, csvWriter *csv.Writer) { @@ -40,7 +42,7 @@ func (job *Job) close(storageWriter io.WriteCloser, csvWriter *csv.Writer) { if err == context.Canceled { return } - if contextCancelledRe.MatchString(err.Error()) { + if errtype.ContextCancelledRe.MatchString(err.Error()) { return } job.Logger.Err(err).Send() @@ -57,8 +59,7 @@ func (job *Job) close(storageWriter io.WriteCloser, csvWriter *csv.Writer) { job.Logger.Debug().Msg("Writing Done") job.Lock() job.ResultSize = *resultSize - jobID := job.GetID() - job.ResultID = &jobID + job.ResultReady = true job.Unlock() job.Status() <- int32(proto.Query_JOB_STATUS_DONE) job.Cancel() @@ -104,12 +105,6 @@ func (job *Job) write(csvRows chan []string) { job.close(storageWriter, csvWriter) } -type AvroSchema struct { - Fields []struct { - Name string `json:"name"` - } `json:"fields"` -} - func (job *Job) processApiErrors(err error) { if apiError, ok := err.(*googleapi.Error); ok { for _, e := range apiError.Errors { @@ -122,20 +117,8 @@ func (job *Job) processApiErrors(err error) { } } -func getTableFromJob(job *bigquery.Job) (*bigquery.Table, error) { - cfg, err := job.Config() - if err != nil { - return nil, err - } - queryConfig, ok := cfg.(*bigquery.QueryConfig) - if !ok { - return nil, fmt.Errorf("was expecting QueryConfig type for configuration") - } - return queryConfig.Dst, nil -} - func (job *Job) getResultTable() (*bigquery.Table, error) { - table, err := getTableFromJob(job.bigqueryJob) + table, err := bqutils.GetTableFromJob(job.bigqueryJob) if err != nil { return nil, err } @@ -144,7 +127,7 @@ func (job *Job) getResultTable() (*bigquery.Table, error) { if err != nil { return nil, err } - table, err = getTableFromJob(jobFromJobId) + table, err = bqutils.GetTableFromJob(jobFromJobId) if err != nil { return nil, err } @@ -173,6 +156,19 @@ func (job *Job) wait() { return } + _, isBigQueryStorage := job.storageObject.(bqstorage.BigQueryStorageObject) + if isBigQueryStorage { + // result will stay in BigQuery temp result table and will be read from there + job.Lock() + bqJobID := job.bigqueryJob.ID() + job.DWJobID = &bqJobID // identify result storage + job.ResultReady = true + job.Unlock() + job.Status() <- int32(proto.Query_JOB_STATUS_DONE) + job.Cancel() + return + } + table, err := job.getResultTable() if err != nil { job.CancelWithError(err) @@ -191,7 +187,7 @@ func (job *Job) wait() { errors := make(chan error) // read table rows into csvRows - go Read( + go bqutils.Read( job.GetCtx(), errors, csvRows, diff --git a/src/server/bqstorage/bqstorage.go b/src/server/bqstorage/bqstorage.go new file mode 100644 index 00000000..f78f3685 --- /dev/null +++ b/src/server/bqstorage/bqstorage.go @@ -0,0 +1,125 @@ +package bqstorage + +import ( + "context" + "dekart/src/server/bqutils" + "dekart/src/server/errtype" + "dekart/src/server/user" + "encoding/csv" + "fmt" + "io" + "time" + + "cloud.google.com/go/bigquery" + "github.com/rs/zerolog/log" + "google.golang.org/api/option" +) + +// BigQueryStorageObject implements StorageObject interface for BigQuery temp results tables +type BigQueryStorageObject struct { + JobID string + BigqueryProjectId string +} + +func (s BigQueryStorageObject) GetWriter(ctx context.Context) io.WriteCloser { + log.Fatal().Msg("BigQueryStorageObject GetWriter not implemented") + return nil +} + +func (s BigQueryStorageObject) GetSize(ctx context.Context) (*int64, error) { + err := fmt.Errorf("BigQueryStorageObject GetSize not implemented") + log.Err(err).Send() + return nil, err +} + +func (s BigQueryStorageObject) getClient(ctx context.Context) (*bigquery.Client, error) { + tokenSource := user.GetTokenSource(ctx) + if tokenSource == nil { + return nil, fmt.Errorf("no token source") + } + client, err := bigquery.NewClient( + ctx, + s.BigqueryProjectId, + option.WithTokenSource(tokenSource), + ) + if err != nil { + return nil, err + } + return client, nil +} + +func (s BigQueryStorageObject) GetCreatedAt(ctx context.Context) (*time.Time, error) { + log.Debug().Str("jobID", s.JobID).Msg("BigQueryStorageObject GetCreatedAt") + client, err := s.getClient(ctx) + if err != nil { + return nil, err + } + jobFromJobId, err := client.JobFromID(ctx, s.JobID) + if err != nil { + return nil, err + } + endTime := jobFromJobId.LastStatus().Statistics.EndTime + + if time.Since(endTime) > 23*time.Hour { + return nil, &errtype.Expired{} + } + + return &endTime, nil +} + +func (s BigQueryStorageObject) GetReader(ctx context.Context) (io.ReadCloser, error) { + log.Debug().Str("jobID", s.JobID).Msg("BigQueryStorageObject GetReader") + client, err := s.getClient(ctx) + if err != nil { + return nil, err + } + jobFromJobId, err := client.JobFromID(ctx, s.JobID) + if err != nil { + return nil, err + } + table, err := bqutils.GetTableFromJob(jobFromJobId) + if err != nil { + return nil, err + } + csvRows := make(chan []string, 10) + errors := make(chan error) + + go bqutils.Read( + ctx, + errors, + csvRows, + table, + log.Logger, + 10, + ) + pr, pw := io.Pipe() + csvWriter := csv.NewWriter(pw) + go func() { + for { + csvRow, more := <-csvRows + if !more { + break + } + err := csvWriter.Write(csvRow) + if err == context.Canceled { + break + } + if err != nil { + log.Err(err).Send() + break + } + } + csvWriter.Flush() + err := pw.Close() + if err != nil { + log.Error().Err(err).Msg("Error closing pipe writer") + } + }() + return pr, nil +} + +func (s BigQueryStorageObject) CopyFromS3(ctx context.Context, source string) error { + err := fmt.Errorf("BigQueryStorageObject CopyFromS3 not implemented") + log.Fatal().Err(err).Send() + return err +} diff --git a/src/server/bqutils/bqutils.go b/src/server/bqutils/bqutils.go new file mode 100644 index 00000000..01a2dc48 --- /dev/null +++ b/src/server/bqutils/bqutils.go @@ -0,0 +1,19 @@ +package bqutils + +import ( + "fmt" + + "cloud.google.com/go/bigquery" +) + +func GetTableFromJob(job *bigquery.Job) (*bigquery.Table, error) { + cfg, err := job.Config() + if err != nil { + return nil, err + } + queryConfig, ok := cfg.(*bigquery.QueryConfig) + if !ok { + return nil, fmt.Errorf("was expecting QueryConfig type for configuration") + } + return queryConfig.Dst, nil +} diff --git a/src/server/bqjob/decoder.go b/src/server/bqutils/decoder.go similarity index 94% rename from src/server/bqjob/decoder.go rename to src/server/bqutils/decoder.go index a1ba6fde..e04ab40e 100644 --- a/src/server/bqjob/decoder.go +++ b/src/server/bqutils/decoder.go @@ -1,4 +1,4 @@ -package bqjob +package bqutils import ( "encoding/json" @@ -14,6 +14,12 @@ type Decoder struct { codec *goavro.Codec } +type AvroSchema struct { + Fields []struct { + Name string `json:"name"` + } `json:"fields"` +} + func NewDecoder(session *bqStoragePb.ReadSession) (*Decoder, error) { avroSchema := session.GetAvroSchema() var avroSchemaFields AvroSchema diff --git a/src/server/bqjob/read.go b/src/server/bqutils/reader.go similarity index 97% rename from src/server/bqjob/read.go rename to src/server/bqutils/reader.go index 051391cd..26294584 100644 --- a/src/server/bqjob/read.go +++ b/src/server/bqutils/reader.go @@ -1,8 +1,8 @@ -package bqjob +package bqutils import ( "context" - "dekart/src/server/job" + "dekart/src/server/errtype" "dekart/src/server/user" "fmt" "io" @@ -94,7 +94,7 @@ func (r *Reader) getTableFields() []string { func (r *Reader) getStreams() ([]*bqStoragePb.ReadStream, error) { readStreams := r.session.GetStreams() if len(readStreams) == 0 { - err := &job.EmptyResultError{} + err := &errtype.EmptyResult{} r.logger.Debug().Err(err).Send() return readStreams, err } @@ -192,7 +192,7 @@ func (r *StreamReader) readStream() { if err == context.Canceled { break } - if contextCancelledRe.MatchString(err.Error()) { + if errtype.ContextCancelledRe.MatchString(err.Error()) { break } r.logger.Err(err).Msg("cannot read rows from stream") diff --git a/src/server/conn/connctx.go b/src/server/conn/connctx.go new file mode 100644 index 00000000..58ebf0d7 --- /dev/null +++ b/src/server/conn/connctx.go @@ -0,0 +1,40 @@ +package conn + +import ( + "context" + "dekart/src/proto" + + "github.com/rs/zerolog/log" +) + +type Connection struct { + ID string + ConnectionName string + BigqueryProjectID string + CloudStorageBucket string +} + +type ConnectionContextKey string + +const connectionContextKey ConnectionContextKey = "connection" + +func GetCtx(ctx context.Context, connection *proto.Connection) context.Context { + if connection == nil { + return context.WithValue(ctx, connectionContextKey, Connection{}) + } + return context.WithValue(ctx, connectionContextKey, Connection{ + ID: connection.Id, + ConnectionName: connection.ConnectionName, + BigqueryProjectID: connection.BigqueryProjectId, + CloudStorageBucket: connection.CloudStorageBucket, + }) +} + +func FromCtx(ctx context.Context) Connection { + connection, ok := ctx.Value(connectionContextKey).(Connection) + if !ok { + log.Error().Msg("Connection not found in context") + return Connection{} + } + return connection +} diff --git a/src/server/dekart/connection.go b/src/server/dekart/connection.go index e9c4b692..538b6dab 100644 --- a/src/server/dekart/connection.go +++ b/src/server/dekart/connection.go @@ -27,6 +27,12 @@ func (s Server) TestConnection(ctx context.Context, req *proto.TestConnectionReq if !res.Success { return res, nil } + if req.Connection.CloudStorageBucket == "" { + // if no bucket is provided, temp storage is used + return &proto.TestConnectionResponse{ + Success: true, + }, nil + } return storage.TestConnection(ctx, req.Connection) } @@ -114,7 +120,8 @@ func (s Server) getConnection(ctx context.Context, connectionID string) (*proto. id, connection_name, bigquery_project_id, - cloud_storage_bucket + cloud_storage_bucket, + (select count(*) from datasets where connection_id=connections.id) as dataset_count from connections where id=$1 limit 1`, connectionID, ) @@ -133,10 +140,14 @@ func (s Server) getConnection(ctx context.Context, connectionID string) (*proto. &connection.ConnectionName, &bigqueryProjectId, &cloudStorageBucket, + &connection.DatasetCount, ) connection.Id = ID.String connection.BigqueryProjectId = bigqueryProjectId.String connection.CloudStorageBucket = cloudStorageBucket.String + if connection.CloudStorageBucket != "" { + connection.CanStoreFiles = true + } if err != nil { log.Err(err).Send() return nil, status.Error(codes.Internal, err.Error()) @@ -161,7 +172,8 @@ func (s Server) getConnections(ctx context.Context) ([]*proto.Connection, error) is_default, created_at, updated_at, - author_email + author_email, + (select count(*) from datasets where connection_id=connections.id) as dataset_count from connections where archived=false order by created_at desc`, ) if err != nil { @@ -190,6 +202,7 @@ func (s Server) getConnections(ctx context.Context) ([]*proto.Connection, error) &createdAt, &updatedAt, &connection.AuthorEmail, + &connection.DatasetCount, ) if err != nil { log.Fatal().Err(err).Msg("scan failed") @@ -210,6 +223,9 @@ func (s Server) getConnections(ctx context.Context) ([]*proto.Connection, error) connection.CloudStorageBucket = cloudStorageBucket.String connection.UpdatedAt = updatedAt.Unix() connection.CreatedAt = createdAt.Unix() + if connection.CloudStorageBucket != "" { + connection.CanStoreFiles = true + } connections = append(connections, &connection) } diff --git a/src/server/dekart/dataset.go b/src/server/dekart/dataset.go index 19fef970..1150bb6b 100644 --- a/src/server/dekart/dataset.go +++ b/src/server/dekart/dataset.go @@ -4,6 +4,8 @@ import ( "context" "database/sql" "dekart/src/proto" + "dekart/src/server/conn" + "dekart/src/server/errtype" "dekart/src/server/storage" "dekart/src/server/user" "fmt" @@ -322,13 +324,34 @@ func (s Server) CreateDataset(ctx context.Context, req *proto.CreateDatasetReque // process storage expired error func storageError(w http.ResponseWriter, err error) { - if _, ok := err.(*storage.ExpiredError); ok { + if _, ok := err.(*errtype.Expired); ok { http.Error(w, "expired", http.StatusGone) return } HttpError(w, err) } +func (s Server) getDWJobIDFromResultID(ctx context.Context, resultID string) (string, error) { + var jobID sql.NullString + rows, err := s.db.QueryContext(ctx, + `select dw_job_id from queries where job_result_id=$1`, + resultID, + ) + if err != nil { + return "", err + } + defer rows.Close() + if rows.Next() { + err := rows.Scan(&jobID) + if err != nil { + return "", err + } + return jobID.String, nil + } + return "", nil +} + +// since reading is using connection no auth is needed here func (s Server) ServeDatasetSource(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) ctx := r.Context() @@ -349,7 +372,24 @@ func (s Server) ServeDatasetSource(w http.ResponseWriter, r *http.Request) { bucketName := s.getBucketNameFromConnection(connection) - obj := s.storage.GetObject(bucketName, fmt.Sprintf("%s.%s", vars["source"], vars["extension"])) + conCtx := conn.GetCtx(ctx, connection) + dwJobID, err := s.getDWJobIDFromResultID(ctx, vars["source"]) + if err != nil { + log.Error().Err(err).Msg("Error getting dw job id") + HttpError(w, err) + return + } + + var obj storage.StorageObject + + if dwJobID != "" { + // temp data warehouse table is used as source + obj = s.storage.GetObject(conCtx, bucketName, dwJobID) + } else { + // file stored on the bucket is used as source + obj = s.storage.GetObject(conCtx, bucketName, fmt.Sprintf("%s.%s", vars["source"], vars["extension"])) + } + created, err := obj.GetCreatedAt(ctx) if err != nil { storageError(w, err) diff --git a/src/server/dekart/file.go b/src/server/dekart/file.go index cd285a5c..98de7319 100644 --- a/src/server/dekart/file.go +++ b/src/server/dekart/file.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "dekart/src/proto" + "dekart/src/server/conn" "dekart/src/server/user" "fmt" "io" @@ -77,7 +78,8 @@ func (s Server) moveFileToStorage(reqCtx context.Context, fileSourceID string, f ctx, cancel := context.WithTimeout(user.CopyClaims(reqCtx, context.Background()), 10*time.Minute) defer cancel() - storageWriter := s.storage.GetObject(bucketName, fmt.Sprintf("%s.%s", fileSourceID, fileExtension)).GetWriter(ctx) + // reqCtx is used because it has connection information, ctx does not have it + storageWriter := s.storage.GetObject(reqCtx, bucketName, fmt.Sprintf("%s.%s", fileSourceID, fileExtension)).GetWriter(ctx) _, err := io.Copy(storageWriter, file) if err != nil { log.Err(err).Send() @@ -135,6 +137,14 @@ func (s Server) UploadFile(w http.ResponseWriter, r *http.Request) { if err != nil { log.Err(err).Send() http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + if !connection.CanStoreFiles { + err = fmt.Errorf("connection does not support file storage") + log.Warn().Err(err).Send() + http.Error(w, err.Error(), http.StatusBadRequest) + return } bucketName := s.getBucketNameFromConnection(connection) @@ -171,7 +181,8 @@ func (s Server) UploadFile(w http.ResponseWriter, r *http.Request) { file.Close() return } - go s.moveFileToStorage(ctx, fileSourceID, fileExtension, file, reportIds, bucketName) + conCtx := conn.GetCtx(ctx, connection) + go s.moveFileToStorage(conCtx, fileSourceID, fileExtension, file, reportIds, bucketName) s.reportStreams.PingAll(reportIds) } diff --git a/src/server/dekart/job.go b/src/server/dekart/job.go index 1d5710b9..400113fa 100644 --- a/src/server/dekart/job.go +++ b/src/server/dekart/job.go @@ -23,6 +23,7 @@ func (s Server) updateJobStatus(job job.Job, jobStatus chan int32) { job_status = $1, job_error = $3, job_result_id = $4, + dw_job_id = $5, job_started = CURRENT_TIMESTAMP, total_rows = 0, bytes_processed = 0, @@ -33,6 +34,7 @@ func (s Server) updateJobStatus(job job.Job, jobStatus chan int32) { job.GetQueryID(), job.Err(), job.GetResultID(), + job.GetDWJobID(), ) } else { @@ -45,6 +47,7 @@ func (s Server) updateJobStatus(job job.Job, jobStatus chan int32) { total_rows = $5, bytes_processed = $6, result_size = $7, + dw_job_id = $8, updated_at=now() where id = $2`, status, @@ -54,6 +57,7 @@ func (s Server) updateJobStatus(job job.Job, jobStatus chan int32) { job.GetTotalRows(), job.GetProcessedBytes(), job.GetResultSize(), + job.GetDWJobID(), ) } cancel() diff --git a/src/server/dekart/query.go b/src/server/dekart/query.go index e143a4eb..fba59b5f 100644 --- a/src/server/dekart/query.go +++ b/src/server/dekart/query.go @@ -6,6 +6,7 @@ import ( "fmt" "dekart/src/proto" + "dekart/src/server/conn" "dekart/src/server/user" "github.com/google/uuid" @@ -36,6 +37,8 @@ func (s Server) CreateQuery(ctx context.Context, req *proto.CreateQueryRequest) connection, err := s.getConnectionFromDatasetID(ctx, req.DatasetId) + conCtx := conn.GetCtx(ctx, connection) + bucketName := s.getBucketNameFromConnection(connection) if err != nil { @@ -45,7 +48,7 @@ func (s Server) CreateQuery(ctx context.Context, req *proto.CreateQueryRequest) id := newUUID() - err = s.storeQuerySync(ctx, bucketName, id, "", "") + err = s.storeQuerySync(conCtx, bucketName, id, "", "") if err != nil { if _, ok := err.(*queryWasNotUpdated); !ok { @@ -203,7 +206,7 @@ func (s Server) runQuery(ctx context.Context, i query) error { return err } // Result ID should be same as job ID once available - obj := s.storage.GetObject(i.bucketName, fmt.Sprintf("%s.csv", job.GetID())) + obj := s.storage.GetObject(ctx, i.bucketName, fmt.Sprintf("%s.csv", job.GetID())) go s.updateJobStatus(job, jobStatus) job.Status() <- int32(proto.Query_JOB_STATUS_PENDING) err = job.Run(obj, i.connection) @@ -258,6 +261,8 @@ func (s Server) RunQuery(ctx context.Context, req *proto.RunQueryRequest) (*prot connection, err := s.getConnection(ctx, connectionID.String) + conCtx := conn.GetCtx(ctx, connection) + bucketName := s.getBucketNameFromConnection(connection) if err != nil { @@ -265,7 +270,7 @@ func (s Server) RunQuery(ctx context.Context, req *proto.RunQueryRequest) (*prot return nil, status.Error(codes.Internal, err.Error()) } - err = s.storeQuerySync(ctx, bucketName, req.QueryId, req.QueryText, prevQuerySourceId) + err = s.storeQuerySync(conCtx, bucketName, req.QueryId, req.QueryText, prevQuerySourceId) if err != nil { code := codes.Internal @@ -278,7 +283,7 @@ func (s Server) RunQuery(ctx context.Context, req *proto.RunQueryRequest) (*prot return nil, status.Error(code, err.Error()) } - err = s.runQuery(ctx, query{ + err = s.runQuery(conCtx, query{ reportID: reportID, queryID: req.QueryId, queryText: req.QueryText, diff --git a/src/server/dekart/querysource.go b/src/server/dekart/querysource.go index c137a34a..9dd8b319 100644 --- a/src/server/dekart/querysource.go +++ b/src/server/dekart/querysource.go @@ -5,6 +5,7 @@ import ( "crypto/sha1" "database/sql" "dekart/src/proto" + "dekart/src/server/conn" "dekart/src/server/user" "fmt" "io" @@ -32,15 +33,21 @@ func (s Server) ServeQuerySource(w http.ResponseWriter, r *http.Request) { return } + conCtx := conn.GetCtx(ctx, connection) bucketName := s.getBucketNameFromConnection(connection) - obj := s.storage.GetObject(bucketName, fmt.Sprintf("%s.sql", vars["source"])) - created, err := obj.GetCreatedAt(ctx) + if !s.storage.CanSaveQuery(conCtx, bucketName) { + http.Error(w, "Query source not available for this connection", http.StatusBadRequest) + return + } + + obj := s.storage.GetObject(conCtx, bucketName, fmt.Sprintf("%s.sql", vars["source"])) + created, err := obj.GetCreatedAt(conCtx) if err != nil { HttpError(w, err) return } - objectReader, err := obj.GetReader(ctx) + objectReader, err := obj.GetReader(conCtx) if err != nil { HttpError(w, err) return @@ -69,8 +76,9 @@ func (s Server) storeQuerySync(ctx context.Context, bucketName, queryID string, newQuerySourceId := fmt.Sprintf("%x", h.Sum(nil)) var result sql.Result var err error - if s.storage.CanSaveQuery() { - storageWriter := s.storage.GetObject(bucketName, fmt.Sprintf("%s.sql", newQuerySourceId)).GetWriter(ctx) + if s.storage.CanSaveQuery(ctx, bucketName) { + log.Debug().Str("bucketName", bucketName).Msg("Storing query text in storage") + storageWriter := s.storage.GetObject(ctx, bucketName, fmt.Sprintf("%s.sql", newQuerySourceId)).GetWriter(ctx) _, err = storageWriter.Write(queryTextByte) if err != nil { log.Err(err).Msg("Error writing query_text to storage") @@ -91,6 +99,7 @@ func (s Server) storeQuerySync(ctx context.Context, bucketName, queryID string, prevQuerySourceId, ) } else { + log.Debug().Msg("Storing query text in database") result, err = s.db.ExecContext(ctx, `update queries set query_text=$1, query_source_id=$2, query_source=$3, updated_at=now() where id=$4 and query_source_id=$5`, queryText, @@ -115,6 +124,8 @@ func (s Server) storeQuery(userCtx context.Context, reportID string, queryID str defer cancel() connection, err := s.getConnectionFromQueryID(ctx, queryID) + conCtx := conn.GetCtx(ctx, connection) + if err != nil { log.Err(err).Msg("Error getting connection from query id") return @@ -122,7 +133,7 @@ func (s Server) storeQuery(userCtx context.Context, reportID string, queryID str bucketName := s.getBucketNameFromConnection(connection) - err = s.storeQuerySync(ctx, bucketName, queryID, queryText, prevQuerySourceId) + err = s.storeQuerySync(conCtx, bucketName, queryID, queryText, prevQuerySourceId) if _, ok := err.(*queryWasNotUpdated); ok { log.Warn().Msg("Query text not updated") return @@ -138,7 +149,7 @@ func (s Server) getQueryText(ctx context.Context, querySourceId string, bucketNa if querySourceId == "" { return "", nil } - reader, err := s.storage.GetObject(bucketName, fmt.Sprintf("%s.sql", querySourceId)).GetReader(ctx) + reader, err := s.storage.GetObject(ctx, bucketName, fmt.Sprintf("%s.sql", querySourceId)).GetReader(ctx) if err != nil { return "", err } diff --git a/src/server/dekart/server.go b/src/server/dekart/server.go index 5e060d18..cada62dd 100644 --- a/src/server/dekart/server.go +++ b/src/server/dekart/server.go @@ -8,8 +8,12 @@ import ( "dekart/src/server/report" "dekart/src/server/storage" "dekart/src/server/user" + "encoding/json" + "io/ioutil" + "net/http" "os" + "github.com/rs/zerolog/log" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) @@ -53,6 +57,62 @@ func defaultString(s, def string) string { return s } +type ProjectList struct { + Projects []struct { + Id string `json:"id"` + } `json:"projects"` +} + +// GetGcpProjectList returns list of GCP projects for connection autosuggest +func (s Server) GetGcpProjectList(ctx context.Context, req *proto.GetGcpProjectListRequest) (*proto.GetGcpProjectListResponse, error) { + claims := user.GetClaims(ctx) + if claims == nil { + return nil, Unauthenticated + } + tokenSource := user.GetTokenSource(ctx) + if tokenSource == nil { + log.Warn().Msg("GetGcpProjectList called without token source") + return nil, Unauthenticated + } + + token, err := tokenSource.Token() + if err != nil { + log.Err(err).Msg("Cannot get token") + return nil, status.Error(codes.Internal, err.Error()) + } + httpClient := &http.Client{} + r, err := http.NewRequestWithContext(ctx, "GET", "https://www.googleapis.com/bigquery/v2/projects?maxResults=100000", nil) + if err != nil { + log.Err(err).Msg("Cannot create request") + return nil, status.Error(codes.Internal, err.Error()) + } + token.SetAuthHeader(r) + resp, err := httpClient.Do(r) + if err != nil { + log.Err(err).Msg("Cannot list projects") + return nil, status.Error(codes.Internal, err.Error()) + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + log.Err(err).Msg("Cannot read response") + return nil, status.Error(codes.Internal, err.Error()) + } + projectList := &ProjectList{} + err = json.Unmarshal(body, projectList) + if err != nil { + log.Err(err).Msg("Cannot unmarshal response") + return nil, status.Error(codes.Internal, err.Error()) + } + var projects []string + for _, project := range projectList.Projects { + projects = append(projects, project.Id) + } + return &proto.GetGcpProjectListResponse{ + Projects: projects, + }, nil +} + // GetEnv variables to the client func (s Server) GetEnv(ctx context.Context, req *proto.GetEnvRequest) (*proto.GetEnvResponse, error) { claims := user.GetClaims(ctx) diff --git a/src/server/errtype/errtype.go b/src/server/errtype/errtype.go new file mode 100644 index 00000000..d2a5a09f --- /dev/null +++ b/src/server/errtype/errtype.go @@ -0,0 +1,19 @@ +package errtype + +import "regexp" + +type EmptyResult struct{} + +func (e *EmptyResult) Error() string { + return "Empty result" +} + +var ContextCancelledRe = regexp.MustCompile(`context canceled`) + +// Expired Error is returned when temp storage is expired +type Expired struct { +} + +func (e *Expired) Error() string { + return "expired" +} diff --git a/src/server/job/job.go b/src/server/job/job.go index 39d0d489..6ba50cd5 100644 --- a/src/server/job/job.go +++ b/src/server/job/job.go @@ -3,10 +3,10 @@ package job import ( "context" "dekart/src/proto" + "dekart/src/server/errtype" "dekart/src/server/storage" "dekart/src/server/user" "dekart/src/server/uuid" - "regexp" "sync" "time" @@ -14,12 +14,6 @@ import ( "github.com/rs/zerolog/log" ) -type EmptyResultError struct{} - -func (e *EmptyResultError) Error() string { - return "Empty result" -} - // Store is the interface for the job storage type Store interface { Create(reportID string, queryID string, queryText string, userCtx context.Context) (Job, chan int32, error) @@ -33,7 +27,9 @@ type Job interface { GetID() string GetReportID() string GetQueryID() string - GetResultID() *string // uuid; nil means no result yet + GetResultID() *string // same as GetID(); nil means no result yet + IsResultReady() bool // true if result is ready + GetDWJobID() *string // DW job ID, nil if not applicable or not yet known GetTotalRows() int64 GetProcessedBytes() int64 GetResultSize() int64 @@ -56,7 +52,8 @@ type BasicJob struct { ReportID string QueryText string TotalRows int64 - ResultID *string + ResultReady bool + DWJobID *string ProcessedBytes int64 ResultSize int64 Logger zerolog.Logger @@ -81,11 +78,25 @@ func (j *BasicJob) GetResultSize() int64 { return j.ResultSize } -// nil until result is ready +func (j *BasicJob) IsResultReady() bool { + j.Lock() + defer j.Unlock() + return j.ResultReady +} + func (j *BasicJob) GetResultID() *string { j.Lock() defer j.Unlock() - return j.ResultID + if j.ResultReady { + id := j.GetID() + return &id + } + return nil +} +func (j *BasicJob) GetDWJobID() *string { + j.Lock() + defer j.Unlock() + return j.DWJobID } func (j *BasicJob) Cancel() { @@ -128,10 +139,8 @@ func (j *BasicJob) Err() string { return j.err } -var contextCancelledRe = regexp.MustCompile(`context canceled`) - func (j *BasicJob) CancelWithError(err error) { - if err != context.Canceled && !contextCancelledRe.MatchString(err.Error()) { + if err != context.Canceled && !errtype.ContextCancelledRe.MatchString(err.Error()) { j.Lock() j.err = err.Error() j.Unlock() diff --git a/src/server/main.go b/src/server/main.go index 2379bd2e..9b27fb7d 100644 --- a/src/server/main.go +++ b/src/server/main.go @@ -107,6 +107,9 @@ func configureBucket() storage.Storage { case "SNOWFLAKE": log.Info().Msg("Using SNOWFLAKE query result cache") bucket = storage.NewSnowflakeStorage() + case "USER": + log.Info().Msg("Using USER defined storage backend, based on connection dialog") + bucket = storage.NewUserStorage() default: log.Fatal().Str("DEKART_STORAGE", os.Getenv("DEKART_STORAGE")).Msg("Unknown storage backend") } diff --git a/src/server/pgjob/pgjob.go b/src/server/pgjob/pgjob.go index 5e91bead..06a47a45 100644 --- a/src/server/pgjob/pgjob.go +++ b/src/server/pgjob/pgjob.go @@ -165,8 +165,7 @@ func (j *Job) close(storageWriter io.WriteCloser, csvWriter *csv.Writer) { j.Lock() j.ResultSize = *resultSize - jobID := j.GetID() - j.ResultID = &jobID + j.ResultReady = true j.Unlock() j.Status() <- int32(proto.Query_JOB_STATUS_DONE) diff --git a/src/server/snowflakejob/snowflakejob.go b/src/server/snowflakejob/snowflakejob.go index 0fa0673c..ce4a5c14 100644 --- a/src/server/snowflakejob/snowflakejob.go +++ b/src/server/snowflakejob/snowflakejob.go @@ -4,12 +4,12 @@ import ( "context" "database/sql" "dekart/src/proto" + "dekart/src/server/errtype" "dekart/src/server/job" "dekart/src/server/snowflakeutils" "dekart/src/server/storage" "encoding/csv" "io" - "regexp" "sync" "github.com/rs/zerolog/log" @@ -54,8 +54,6 @@ func (j *Job) write(csvRows chan []string) { j.close(storageWriter, csvWriter) } -var contextCancelledRe = regexp.MustCompile(`context canceled`) - func (j *Job) close(storageWriter io.WriteCloser, csvWriter *csv.Writer) { csvWriter.Flush() err := storageWriter.Close() @@ -64,7 +62,7 @@ func (j *Job) close(storageWriter io.WriteCloser, csvWriter *csv.Writer) { if err == context.Canceled { return } - if contextCancelledRe.MatchString(err.Error()) { + if errtype.ContextCancelledRe.MatchString(err.Error()) { return } j.Logger.Err(err).Send() @@ -81,8 +79,7 @@ func (j *Job) close(storageWriter io.WriteCloser, csvWriter *csv.Writer) { j.Logger.Debug().Msg("Writing Done") j.Lock() j.ResultSize = *resultSize - jobID := j.GetID() - j.ResultID = &jobID // results available now + j.ResultReady = true // results available now j.Unlock() j.Status() <- int32(proto.Query_JOB_STATUS_DONE) j.Cancel() @@ -112,8 +109,8 @@ func (j *Job) fetchQueryMetadata(queryIDChan chan string, resultsReady chan bool } j.Lock() if j.isSnowflakeStorageObject { - // when using SNOWFLAKE storage, resultID is same as queryID and available immediately - j.ResultID = &queryID + j.ResultReady = true + j.DWJobID = &queryID } j.ProcessedBytes = status.ScanBytes j.Unlock() diff --git a/src/server/storage/snowflakestorage.go b/src/server/storage/snowflakestorage.go index 1c8c181e..739dba8e 100644 --- a/src/server/storage/snowflakestorage.go +++ b/src/server/storage/snowflakestorage.go @@ -3,10 +3,10 @@ package storage import ( "context" "database/sql" + "dekart/src/server/errtype" "dekart/src/server/snowflakeutils" "encoding/csv" "io" - "strings" "time" "github.com/rs/zerolog/log" @@ -21,20 +21,17 @@ func NewSnowflakeStorage() *SnowflakeStorage { return &SnowflakeStorage{} } -func (s *SnowflakeStorage) CanSaveQuery() bool { +func (s *SnowflakeStorage) CanSaveQuery(context.Context, string) bool { return false } -func (s *SnowflakeStorage) GetObject(_ string, queryID string) StorageObject { +func (s *SnowflakeStorage) GetObject(_ context.Context, string, queryID string) StorageObject { return NewSnowflakeStorageObject(queryID) } // NewSnowflakeStorageObject -func NewSnowflakeStorageObject(fileName string) StorageObject { +func NewSnowflakeStorageObject(queryID string) StorageObject { connector := snowflakeutils.GetConnector() - parts := strings.Split(fileName, ".") - queryID := parts[0] //extract queryID from fileName like 01b3b0ae-0102-9b06-0001-c28e001599fe.csv - return SnowflakeStorageObject{queryID: queryID, connector: connector} } @@ -44,7 +41,7 @@ type SnowflakeStorageObject struct { connector sf.Connector } -func (s SnowflakeStorageObject) CanSaveQuery() bool { +func (s SnowflakeStorageObject) CanSaveQuery(context.Context, string) bool { return false } @@ -56,7 +53,7 @@ func (s SnowflakeStorageObject) GetReader(ctx context.Context) (io.ReadCloser, e if err != nil { if sfErr, ok := err.(*sf.SnowflakeError); ok { if sfErr.Number == 612 { - return nil, &ExpiredError{} + return nil, &errtype.Expired{} } } log.Error().Err(err).Msg("failed to query snowflake") @@ -118,7 +115,7 @@ func (s SnowflakeStorageObject) GetCreatedAt(ctx context.Context) (*time.Time, e if err != nil { log.Warn().Err(err).Msg("failed to get query status") - return nil, &ExpiredError{} + return nil, &errtype.Expired{} } createdAt := time.Unix(status.EndTime/1000, 0) @@ -126,7 +123,7 @@ func (s SnowflakeStorageObject) GetCreatedAt(ctx context.Context) (*time.Time, e //check if query is older than 1 day (minus 1 hour for safety) if time.Since(createdAt) > 23*time.Hour { - return nil, &ExpiredError{} + return nil, &errtype.Expired{} } return &createdAt, nil } diff --git a/src/server/storage/storage.go b/src/server/storage/storage.go index 5ba9b54e..4b192832 100644 --- a/src/server/storage/storage.go +++ b/src/server/storage/storage.go @@ -30,16 +30,8 @@ type StorageObject interface { } type Storage interface { - GetObject(string, string) StorageObject - CanSaveQuery() bool -} - -// Expired Error is returned when temp storage is expired -type ExpiredError struct { -} - -func (e *ExpiredError) Error() string { - return "expired" + GetObject(context.Context, string, string) StorageObject + CanSaveQuery(context.Context, string) bool } func GetBucketName(userBucketName string) string { @@ -64,8 +56,8 @@ type GoogleCloudStorage struct { } // CanSaveQuery returns true if the storage can save SQL query text -func (s GoogleCloudStorage) CanSaveQuery() bool { - return true +func (s GoogleCloudStorage) CanSaveQuery(_ context.Context, bucketName string) bool { + return bucketName != "" } func (s GoogleCloudStorage) GetDefaultBucketName() string { @@ -129,7 +121,7 @@ func (o BucketNameOption) apply(options *GetObjectConfig) { options.bucketName = o.BucketName } -func (s GoogleCloudStorage) GetObject(bucketName, object string) StorageObject { +func (s GoogleCloudStorage) GetObject(_ context.Context, bucketName, object string) StorageObject { if bucketName == "" { log.Warn().Msg("bucketName is not set") } @@ -224,15 +216,15 @@ func NewS3Storage() Storage { } } -func (s S3Storage) CanSaveQuery() bool { - return true +func (s S3Storage) CanSaveQuery(_ context.Context, bucketName string) bool { + return bucketName != "" } func (s S3Storage) GetDefaultBucketName() string { return s.bucketName } -func (s S3Storage) GetObject(bucketName string, name string) StorageObject { +func (s S3Storage) GetObject(_ context.Context, string, name string) StorageObject { return S3StorageObject{ s, name, diff --git a/src/server/storage/userstorage.go b/src/server/storage/userstorage.go new file mode 100644 index 00000000..c77c349f --- /dev/null +++ b/src/server/storage/userstorage.go @@ -0,0 +1,43 @@ +package storage + +import ( + "context" + "dekart/src/server/bqstorage" + "dekart/src/server/conn" + "strings" + + "github.com/rs/zerolog/log" +) + +// UserStorage implements Storage interface and creates StorageObject based on user connection settings +type UserStorage struct { +} + +func NewUserStorage() *UserStorage { + return &UserStorage{} +} + +func (s *UserStorage) GetObject(ctx context.Context, _ string, object string) StorageObject { + connection := conn.FromCtx(ctx) + log.Debug().Str("CloudStorageBucket", connection.CloudStorageBucket).Str("object", object).Msg("GetObject") + if connection.CloudStorageBucket != "" { + bucketName := connection.CloudStorageBucket + log.Debug().Msg("returning GoogleCloudStorageObject") + return GoogleCloudStorageObject{ + bucketName, + object, + log.With().Str("GoogleCloudStorageObject", object).Logger(), + } + } + parts := strings.Split(object, ".") + log.Debug().Msg("returning BigQueryStorageObject") + return bqstorage.BigQueryStorageObject{ + JobID: parts[0], + BigqueryProjectId: connection.BigqueryProjectID, + } +} + +func (s *UserStorage) CanSaveQuery(ctx context.Context, bucketName string) bool { + connection := conn.FromCtx(ctx) + return connection.CloudStorageBucket != "" || bucketName != "" +}