diff --git a/Makefile b/Makefile index 229f83af4..d63cf5b4c 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ GOVERSION := $(shell go version | cut -d ' ' -f 3 | cut -d '.' -f 2) .PHONY: build check fmt lint test test-race vet test-cover-html help install proto .DEFAULT_GOAL := build -PROTON_COMMIT := "6ee59f2d0cbeedf1d5fe48adee5e5e41f54f081e" +PROTON_COMMIT := "cca99f3519d6ad94953d75083445ae5e7af00e71" install: @echo "Clean up imports..." diff --git a/cmd/serve.go b/cmd/serve.go index 042d61c80..f8a8e7637 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -238,7 +238,7 @@ func BuildAPIDependencies( resourcePGRepository := postgres.NewResourceRepository(dbc) resourceService := resource.NewService( - logger, resourcePGRepository, resourceBlobRepository, relationService, userService, projectService, organizationService, groupService, activityService) + logger, resourcePGRepository, resourceBlobRepository, relationService, userService, projectService, organizationService, groupService, policyService, namespaceService, activityService) serviceDataRepository := postgres.NewServiceDataRepository(dbc) serviceDataService := servicedata.NewService(logger, serviceDataRepository, resourceService, relationService, projectService, userService, activityService) diff --git a/core/policy/mocks/policy_repository.go b/core/policy/mocks/policy_repository.go index 044369fd3..2a6b29ba3 100644 --- a/core/policy/mocks/policy_repository.go +++ b/core/policy/mocks/policy_repository.go @@ -79,9 +79,9 @@ func (_c *Repository_Get_Call) RunAndReturn(run func(context.Context, string) (p return _c } -// List provides a mock function with given fields: ctx -func (_m *Repository) List(ctx context.Context) ([]policy.Policy, error) { - ret := _m.Called(ctx) +// List provides a mock function with given fields: ctx, filter +func (_m *Repository) List(ctx context.Context, filter policy.Filters) ([]policy.Policy, error) { + ret := _m.Called(ctx, filter) if len(ret) == 0 { panic("no return value specified for List") @@ -89,19 +89,19 @@ func (_m *Repository) List(ctx context.Context) ([]policy.Policy, error) { var r0 []policy.Policy var r1 error - if rf, ok := ret.Get(0).(func(context.Context) ([]policy.Policy, error)); ok { - return rf(ctx) + if rf, ok := ret.Get(0).(func(context.Context, policy.Filters) ([]policy.Policy, error)); ok { + return rf(ctx, filter) } - if rf, ok := ret.Get(0).(func(context.Context) []policy.Policy); ok { - r0 = rf(ctx) + if rf, ok := ret.Get(0).(func(context.Context, policy.Filters) []policy.Policy); ok { + r0 = rf(ctx, filter) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]policy.Policy) } } - if rf, ok := ret.Get(1).(func(context.Context) error); ok { - r1 = rf(ctx) + if rf, ok := ret.Get(1).(func(context.Context, policy.Filters) error); ok { + r1 = rf(ctx, filter) } else { r1 = ret.Error(1) } @@ -116,13 +116,14 @@ type Repository_List_Call struct { // List is a helper method to define mock.On call // - ctx context.Context -func (_e *Repository_Expecter) List(ctx interface{}) *Repository_List_Call { - return &Repository_List_Call{Call: _e.mock.On("List", ctx)} +// - filter policy.Filters +func (_e *Repository_Expecter) List(ctx interface{}, filter interface{}) *Repository_List_Call { + return &Repository_List_Call{Call: _e.mock.On("List", ctx, filter)} } -func (_c *Repository_List_Call) Run(run func(ctx context.Context)) *Repository_List_Call { +func (_c *Repository_List_Call) Run(run func(ctx context.Context, filter policy.Filters)) *Repository_List_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context)) + run(args[0].(context.Context), args[1].(policy.Filters)) }) return _c } @@ -132,7 +133,7 @@ func (_c *Repository_List_Call) Return(_a0 []policy.Policy, _a1 error) *Reposito return _c } -func (_c *Repository_List_Call) RunAndReturn(run func(context.Context) ([]policy.Policy, error)) *Repository_List_Call { +func (_c *Repository_List_Call) RunAndReturn(run func(context.Context, policy.Filters) ([]policy.Policy, error)) *Repository_List_Call { _c.Call.Return(run) return _c } diff --git a/core/policy/policy.go b/core/policy/policy.go index f930c068d..4ed75b003 100644 --- a/core/policy/policy.go +++ b/core/policy/policy.go @@ -8,7 +8,7 @@ const AuditEntity = "policy" type Repository interface { Get(ctx context.Context, id string) (Policy, error) - List(ctx context.Context) ([]Policy, error) + List(ctx context.Context, filter Filters) ([]Policy, error) Upsert(ctx context.Context, pol *Policy) (string, error) Update(ctx context.Context, pol *Policy) (string, error) } diff --git a/core/policy/service.go b/core/policy/service.go index 98b69d07c..dbeb9a6ee 100644 --- a/core/policy/service.go +++ b/core/policy/service.go @@ -42,8 +42,8 @@ func (s Service) Get(ctx context.Context, id string) (Policy, error) { return s.repository.Get(ctx, id) } -func (s Service) List(ctx context.Context) ([]Policy, error) { - return s.repository.List(ctx) +func (s Service) List(ctx context.Context, filter Filters) ([]Policy, error) { + return s.repository.List(ctx, filter) } func (s Service) Upsert(ctx context.Context, pol *Policy) ([]Policy, error) { @@ -58,7 +58,7 @@ func (s Service) Upsert(ctx context.Context, pol *Policy) ([]Policy, error) { } pol.ID = policyID - policies, err := s.repository.List(ctx) + policies, err := s.repository.List(ctx, Filters{}) if err != nil { return []Policy{}, err } @@ -87,7 +87,7 @@ func (s Service) Update(ctx context.Context, pol *Policy) ([]Policy, error) { } pol.ID = policyID - policies, err := s.repository.List(ctx) + policies, err := s.repository.List(ctx, Filters{}) if err != nil { return []Policy{}, err } diff --git a/core/relation/mocks/authz_repository.go b/core/relation/mocks/authz_repository.go index 49a73382c..3637eea97 100644 --- a/core/relation/mocks/authz_repository.go +++ b/core/relation/mocks/authz_repository.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.43.2. DO NOT EDIT. +// Code generated by mockery v2.42.1. DO NOT EDIT. package mocks diff --git a/core/resource/resource.go b/core/resource/resource.go index 9f8b265ea..6cefc3b9d 100644 --- a/core/resource/resource.go +++ b/core/resource/resource.go @@ -72,6 +72,8 @@ type PagedResources struct { Resources []Resource } +type ResourcePermissions = map[string][]string + type LogData struct { Entity string `mapstructure:"entity"` URN string `mapstructure:"urn"` diff --git a/core/resource/service.go b/core/resource/service.go index 5b0b94296..be660999a 100644 --- a/core/resource/service.go +++ b/core/resource/service.go @@ -11,6 +11,7 @@ import ( "github.com/goto/shield/core/group" "github.com/goto/shield/core/namespace" "github.com/goto/shield/core/organization" + "github.com/goto/shield/core/policy" "github.com/goto/shield/core/project" "github.com/goto/shield/core/relation" "github.com/goto/shield/core/user" @@ -22,6 +23,8 @@ import ( const ( auditKeyResourceCreate = "resource.create" auditKeyResourceUpdate = "resource.update" + + userNamespace = schema.UserPrincipal ) type RelationService interface { @@ -30,10 +33,12 @@ type RelationService interface { CheckPermission(ctx context.Context, usr user.User, resourceNS namespace.Namespace, resourceIdxa string, action action.Action) (bool, error) BulkCheckPermission(ctx context.Context, rels []relation.Relation, acts []action.Action) ([]relation.Permission, error) DeleteSubjectRelations(ctx context.Context, resourceType, optionalResourceID string) error + LookupResources(ctx context.Context, resourceType, permission, subjectType, subjectID string) ([]string, error) } type UserService interface { FetchCurrentUser(ctx context.Context) (user.User, error) + Get(ctx context.Context, userID string) (user.User, error) } type ProjectService interface { @@ -52,6 +57,14 @@ type ActivityService interface { Log(ctx context.Context, action string, actor activity.Actor, data any) error } +type PolicyService interface { + List(ctx context.Context, filter policy.Filters) ([]policy.Policy, error) +} + +type NamespaceService interface { + List(ctx context.Context) ([]namespace.Namespace, error) +} + type Service struct { logger log.Logger repository Repository @@ -61,10 +74,12 @@ type Service struct { projectService ProjectService organizationService OrganizationService groupService GroupService + policyService PolicyService + namespaceService NamespaceService activityService ActivityService } -func NewService(logger log.Logger, repository Repository, configRepository ConfigRepository, relationService RelationService, userService UserService, projectService ProjectService, organizationService OrganizationService, groupService GroupService, activityService ActivityService) *Service { +func NewService(logger log.Logger, repository Repository, configRepository ConfigRepository, relationService RelationService, userService UserService, projectService ProjectService, organizationService OrganizationService, groupService GroupService, policyService PolicyService, namespaceService NamespaceService, activityService ActivityService) *Service { return &Service{ logger: logger, repository: repository, @@ -74,6 +89,8 @@ func NewService(logger log.Logger, repository Repository, configRepository Confi projectService: projectService, organizationService: organizationService, groupService: groupService, + policyService: policyService, + namespaceService: namespaceService, activityService: activityService, } } @@ -383,3 +400,84 @@ func (s Service) BulkCheckAuthz(ctx context.Context, resources []Resource, actio } return s.relationService.BulkCheckPermission(ctx, relations, actions) } + +func (s Service) ListUserResourcesByType(ctx context.Context, userID string, resourceType string) (ResourcePermissions, error) { + user, err := s.userService.Get(ctx, userID) + if err != nil { + return ResourcePermissions{}, err + } + + res, err := s.listUserResources(ctx, resourceType, user) + if err != nil { + return ResourcePermissions{}, err + } + + return res, nil +} + +func (s Service) ListAllUserResources(ctx context.Context, userID string, resourceTypes []string) (map[string]ResourcePermissions, error) { + user, err := s.userService.Get(ctx, userID) + if err != nil { + return map[string]ResourcePermissions{}, err + } + + if len(resourceTypes) == 0 { + namespaces, err := s.namespaceService.List(ctx) + if err != nil { + return map[string]ResourcePermissions{}, err + } + + for _, ns := range namespaces { + if namespace.IsSystemNamespaceID(ns.ID) { + continue + } + resourceTypes = append(resourceTypes, ns.ID) + } + } + + result := make(map[string]ResourcePermissions) + for _, res := range resourceTypes { + if _, ok := result[res]; !ok { + list, err := s.listUserResources(ctx, res, user) + if err != nil { + return map[string]ResourcePermissions{}, err + } + if len(list) != 0 { + result[res] = list + } + } + } + + return result, nil +} + +func (s Service) listUserResources(ctx context.Context, resourceType string, user user.User) (ResourcePermissions, error) { + policies, err := s.policyService.List(ctx, policy.Filters{NamespaceID: resourceType}) + if err != nil { + return ResourcePermissions{}, err + } + + resPermissionsMap := make(ResourcePermissions) + actMap := make(map[string]bool) + for _, policy := range policies { + action := strings.Split(policy.ActionID, ".")[0] + if _, ok := actMap[action]; ok { + continue + } + actMap[action] = true + resources, err := s.relationService.LookupResources(ctx, resourceType, action, userNamespace, user.ID) + if err != nil { + return ResourcePermissions{}, err + } + + for _, r := range resources { + if _, ok := resPermissionsMap[r]; !ok { + resPermissionsMap[r] = []string{action} + } else { + resPermissionsMap[r] = append(resPermissionsMap[r], action) + } + } + } + + return resPermissionsMap, nil +} diff --git a/internal/api/v1beta1/mocks/policy_service.go b/internal/api/v1beta1/mocks/policy_service.go index aae6f9ec8..876fedf87 100644 --- a/internal/api/v1beta1/mocks/policy_service.go +++ b/internal/api/v1beta1/mocks/policy_service.go @@ -79,9 +79,9 @@ func (_c *PolicyService_Get_Call) RunAndReturn(run func(context.Context, string) return _c } -// List provides a mock function with given fields: ctx -func (_m *PolicyService) List(ctx context.Context) ([]policy.Policy, error) { - ret := _m.Called(ctx) +// List provides a mock function with given fields: ctx, filter +func (_m *PolicyService) List(ctx context.Context, filter policy.Filters) ([]policy.Policy, error) { + ret := _m.Called(ctx, filter) if len(ret) == 0 { panic("no return value specified for List") @@ -89,19 +89,19 @@ func (_m *PolicyService) List(ctx context.Context) ([]policy.Policy, error) { var r0 []policy.Policy var r1 error - if rf, ok := ret.Get(0).(func(context.Context) ([]policy.Policy, error)); ok { - return rf(ctx) + if rf, ok := ret.Get(0).(func(context.Context, policy.Filters) ([]policy.Policy, error)); ok { + return rf(ctx, filter) } - if rf, ok := ret.Get(0).(func(context.Context) []policy.Policy); ok { - r0 = rf(ctx) + if rf, ok := ret.Get(0).(func(context.Context, policy.Filters) []policy.Policy); ok { + r0 = rf(ctx, filter) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]policy.Policy) } } - if rf, ok := ret.Get(1).(func(context.Context) error); ok { - r1 = rf(ctx) + if rf, ok := ret.Get(1).(func(context.Context, policy.Filters) error); ok { + r1 = rf(ctx, filter) } else { r1 = ret.Error(1) } @@ -116,13 +116,14 @@ type PolicyService_List_Call struct { // List is a helper method to define mock.On call // - ctx context.Context -func (_e *PolicyService_Expecter) List(ctx interface{}) *PolicyService_List_Call { - return &PolicyService_List_Call{Call: _e.mock.On("List", ctx)} +// - filter policy.Filters +func (_e *PolicyService_Expecter) List(ctx interface{}, filter interface{}) *PolicyService_List_Call { + return &PolicyService_List_Call{Call: _e.mock.On("List", ctx, filter)} } -func (_c *PolicyService_List_Call) Run(run func(ctx context.Context)) *PolicyService_List_Call { +func (_c *PolicyService_List_Call) Run(run func(ctx context.Context, filter policy.Filters)) *PolicyService_List_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context)) + run(args[0].(context.Context), args[1].(policy.Filters)) }) return _c } @@ -132,7 +133,7 @@ func (_c *PolicyService_List_Call) Return(_a0 []policy.Policy, _a1 error) *Polic return _c } -func (_c *PolicyService_List_Call) RunAndReturn(run func(context.Context) ([]policy.Policy, error)) *PolicyService_List_Call { +func (_c *PolicyService_List_Call) RunAndReturn(run func(context.Context, policy.Filters) ([]policy.Policy, error)) *PolicyService_List_Call { _c.Call.Return(run) return _c } diff --git a/internal/api/v1beta1/mocks/relation_service.go b/internal/api/v1beta1/mocks/relation_service.go index 41fed1ff7..08e10fc98 100644 --- a/internal/api/v1beta1/mocks/relation_service.go +++ b/internal/api/v1beta1/mocks/relation_service.go @@ -33,6 +33,10 @@ func (_m *RelationService) EXPECT() *RelationService_Expecter { func (_m *RelationService) CheckIsPublic(ctx context.Context, resourceNS namespace.Namespace, resourceIdxa string, _a3 action.Action) (bool, error) { ret := _m.Called(ctx, resourceNS, resourceIdxa, _a3) + if len(ret) == 0 { + panic("no return value specified for CheckIsPublic") + } + var r0 bool var r1 error if rf, ok := ret.Get(0).(func(context.Context, namespace.Namespace, string, action.Action) (bool, error)); ok { diff --git a/internal/api/v1beta1/mocks/resource_service.go b/internal/api/v1beta1/mocks/resource_service.go index cc1339da7..481d98341 100644 --- a/internal/api/v1beta1/mocks/resource_service.go +++ b/internal/api/v1beta1/mocks/resource_service.go @@ -259,6 +259,126 @@ func (_c *ResourceService_List_Call) RunAndReturn(run func(context.Context, reso return _c } +// ListAllUserResources provides a mock function with given fields: ctx, userID, resourceType +func (_m *ResourceService) ListAllUserResources(ctx context.Context, userID string, resourceType []string) (map[string]map[string][]string, error) { + ret := _m.Called(ctx, userID, resourceType) + + if len(ret) == 0 { + panic("no return value specified for ListAllUserResources") + } + + var r0 map[string]map[string][]string + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, []string) (map[string]map[string][]string, error)); ok { + return rf(ctx, userID, resourceType) + } + if rf, ok := ret.Get(0).(func(context.Context, string, []string) map[string]map[string][]string); ok { + r0 = rf(ctx, userID, resourceType) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[string]map[string][]string) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, []string) error); ok { + r1 = rf(ctx, userID, resourceType) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ResourceService_ListAllUserResources_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListAllUserResources' +type ResourceService_ListAllUserResources_Call struct { + *mock.Call +} + +// ListAllUserResources is a helper method to define mock.On call +// - ctx context.Context +// - userID string +// - resourceType []string +func (_e *ResourceService_Expecter) ListAllUserResources(ctx interface{}, userID interface{}, resourceType interface{}) *ResourceService_ListAllUserResources_Call { + return &ResourceService_ListAllUserResources_Call{Call: _e.mock.On("ListAllUserResources", ctx, userID, resourceType)} +} + +func (_c *ResourceService_ListAllUserResources_Call) Run(run func(ctx context.Context, userID string, resourceType []string)) *ResourceService_ListAllUserResources_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string), args[2].([]string)) + }) + return _c +} + +func (_c *ResourceService_ListAllUserResources_Call) Return(_a0 map[string]map[string][]string, _a1 error) *ResourceService_ListAllUserResources_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ResourceService_ListAllUserResources_Call) RunAndReturn(run func(context.Context, string, []string) (map[string]map[string][]string, error)) *ResourceService_ListAllUserResources_Call { + _c.Call.Return(run) + return _c +} + +// ListUserResourcesByType provides a mock function with given fields: ctx, userID, resourceType +func (_m *ResourceService) ListUserResourcesByType(ctx context.Context, userID string, resourceType string) (map[string][]string, error) { + ret := _m.Called(ctx, userID, resourceType) + + if len(ret) == 0 { + panic("no return value specified for ListUserResourcesByType") + } + + var r0 map[string][]string + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, string) (map[string][]string, error)); ok { + return rf(ctx, userID, resourceType) + } + if rf, ok := ret.Get(0).(func(context.Context, string, string) map[string][]string); ok { + r0 = rf(ctx, userID, resourceType) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[string][]string) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, string) error); ok { + r1 = rf(ctx, userID, resourceType) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ResourceService_ListUserResourcesByType_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListUserResourcesByType' +type ResourceService_ListUserResourcesByType_Call struct { + *mock.Call +} + +// ListUserResourcesByType is a helper method to define mock.On call +// - ctx context.Context +// - userID string +// - resourceType string +func (_e *ResourceService_Expecter) ListUserResourcesByType(ctx interface{}, userID interface{}, resourceType interface{}) *ResourceService_ListUserResourcesByType_Call { + return &ResourceService_ListUserResourcesByType_Call{Call: _e.mock.On("ListUserResourcesByType", ctx, userID, resourceType)} +} + +func (_c *ResourceService_ListUserResourcesByType_Call) Run(run func(ctx context.Context, userID string, resourceType string)) *ResourceService_ListUserResourcesByType_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string), args[2].(string)) + }) + return _c +} + +func (_c *ResourceService_ListUserResourcesByType_Call) Return(_a0 map[string][]string, _a1 error) *ResourceService_ListUserResourcesByType_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ResourceService_ListUserResourcesByType_Call) RunAndReturn(run func(context.Context, string, string) (map[string][]string, error)) *ResourceService_ListUserResourcesByType_Call { + _c.Call.Return(run) + return _c +} + // Update provides a mock function with given fields: ctx, id, _a2 func (_m *ResourceService) Update(ctx context.Context, id string, _a2 resource.Resource) (resource.Resource, error) { ret := _m.Called(ctx, id, _a2) diff --git a/internal/api/v1beta1/policy.go b/internal/api/v1beta1/policy.go index e482fb073..c2a3cd525 100644 --- a/internal/api/v1beta1/policy.go +++ b/internal/api/v1beta1/policy.go @@ -16,7 +16,7 @@ import ( type PolicyService interface { Get(ctx context.Context, id string) (policy.Policy, error) - List(ctx context.Context) ([]policy.Policy, error) + List(ctx context.Context, filter policy.Filters) ([]policy.Policy, error) Upsert(ctx context.Context, pol *policy.Policy) ([]policy.Policy, error) Update(ctx context.Context, pol *policy.Policy) ([]policy.Policy, error) } @@ -27,7 +27,7 @@ func (h Handler) ListPolicies(ctx context.Context, request *shieldv1beta1.ListPo logger := grpczap.Extract(ctx) var policies []*shieldv1beta1.Policy - policyList, err := h.policyService.List(ctx) + policyList, err := h.policyService.List(ctx, policy.Filters{}) if err != nil { logger.Error(err.Error()) return nil, grpcInternalServerError diff --git a/internal/api/v1beta1/policy_test.go b/internal/api/v1beta1/policy_test.go index 12a5f33d0..c29f06c00 100644 --- a/internal/api/v1beta1/policy_test.go +++ b/internal/api/v1beta1/policy_test.go @@ -38,7 +38,7 @@ func TestListPolicies(t *testing.T) { { title: "should return internal error if policy service return some error", setup: func(ps *mocks.PolicyService) { - ps.EXPECT().List(mock.Anything).Return([]policy.Policy{}, errors.New("some error")) + ps.EXPECT().List(mock.Anything, policy.Filters{}).Return([]policy.Policy{}, errors.New("some error")) }, want: nil, err: status.Errorf(codes.Internal, ErrInternalServer.Error()), @@ -50,7 +50,7 @@ func TestListPolicies(t *testing.T) { for _, p := range testPolicyMap { testPoliciesList = append(testPoliciesList, p) } - ps.EXPECT().List(mock.Anything).Return(testPoliciesList, nil) + ps.EXPECT().List(mock.Anything, policy.Filters{}).Return(testPoliciesList, nil) }, want: &shieldv1beta1.ListPoliciesResponse{Policies: []*shieldv1beta1.Policy{ { diff --git a/internal/api/v1beta1/resource.go b/internal/api/v1beta1/resource.go index 15818b219..a1a51a77c 100644 --- a/internal/api/v1beta1/resource.go +++ b/internal/api/v1beta1/resource.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/goto/shield/core/action" + "github.com/goto/shield/core/policy" "github.com/goto/shield/core/relation" "github.com/goto/shield/core/resource" "github.com/goto/shield/core/user" @@ -14,6 +15,7 @@ import ( grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -24,6 +26,8 @@ type ResourceService interface { Update(ctx context.Context, id string, resource resource.Resource) (resource.Resource, error) CheckAuthz(ctx context.Context, resource resource.Resource, action action.Action) (bool, error) BulkCheckAuthz(ctx context.Context, resources []resource.Resource, actions []action.Action) ([]relation.Permission, error) + ListUserResourcesByType(ctx context.Context, userID string, resourceType string) (resource.ResourcePermissions, error) + ListAllUserResources(ctx context.Context, userID string, resourceTypes []string) (map[string]resource.ResourcePermissions, error) } var grpcResourceNotFoundErr = status.Errorf(codes.NotFound, "resource doesn't exist") @@ -221,6 +225,79 @@ func (h Handler) UpdateResource(ctx context.Context, request *shieldv1beta1.Upda }, nil } +func (h Handler) ListAllUserResources(ctx context.Context, request *shieldv1beta1.ListAllUserResourcesRequest) (*shieldv1beta1.ListAllUserResourcesResponse, error) { + logger := grpczap.Extract(ctx) + resources, err := h.resourceService.ListAllUserResources(ctx, request.UserId, request.Types) + if err != nil { + logger.Error(err.Error()) + switch { + case errors.Is(err, resource.ErrNotExist): + return nil, grpcResourceNotFoundErr + case errors.Is(err, user.ErrInvalidEmail), + errors.Is(err, user.ErrNotExist), + errors.Is(err, resource.ErrInvalidDetail), + errors.Is(err, resource.ErrInvalidURN), + errors.Is(err, policy.ErrInvalidDetail), + errors.Is(err, relation.ErrInvalidDetail): + return nil, grpcBadBodyError + default: + return nil, grpcInternalServerError + } + } + + result := make(map[string]*structpb.Value) + for key, value := range resources { + resourcePB, err := mapToStructpb(value) + if err != nil { + logger.Error(err.Error()) + return nil, grpcInternalServerError + } + result[key] = &structpb.Value{ + Kind: &structpb.Value_StructValue{StructValue: resourcePB}, + } + } + + resultPB := &structpb.Struct{ + Fields: result, + } + + return &shieldv1beta1.ListAllUserResourcesResponse{ + Resources: resultPB, + }, nil +} + +func (h Handler) ListUserResourcesByType(ctx context.Context, request *shieldv1beta1.ListUserResourcesByTypeRequest) (*shieldv1beta1.ListUserResourcesByTypeResponse, error) { + logger := grpczap.Extract(ctx) + + resources, err := h.resourceService.ListUserResourcesByType(ctx, request.UserId, fmt.Sprintf("%s/%s", request.Namespace, request.Type)) + if err != nil { + logger.Error(err.Error()) + switch { + case errors.Is(err, resource.ErrNotExist): + return nil, grpcResourceNotFoundErr + case errors.Is(err, user.ErrInvalidEmail), + errors.Is(err, user.ErrNotExist), + errors.Is(err, resource.ErrInvalidDetail), + errors.Is(err, resource.ErrInvalidURN), + errors.Is(err, policy.ErrInvalidDetail), + errors.Is(err, relation.ErrInvalidDetail): + return nil, grpcBadBodyError + default: + return nil, grpcInternalServerError + } + } + + resourcesPB, err := mapToStructpb(resources) + if err != nil { + logger.Error(err.Error()) + return nil, grpcInternalServerError + } + + return &shieldv1beta1.ListUserResourcesByTypeResponse{ + Resources: resourcesPB, + }, nil +} + func transformResourceToPB(from resource.Resource) (shieldv1beta1.Resource, error) { // TODO(krtkvrm): will be replaced with IDs return shieldv1beta1.Resource{ @@ -243,3 +320,21 @@ func transformResourceToPB(from resource.Resource) (shieldv1beta1.Resource, erro UpdatedAt: timestamppb.New(from.UpdatedAt), }, nil } + +func mapToStructpb(p resource.ResourcePermissions) (*structpb.Struct, error) { + fields := make(map[string]*structpb.Value) + for key, values := range p { + listValue := &structpb.ListValue{} + for _, value := range values { + listValue.Values = append(listValue.Values, &structpb.Value{ + Kind: &structpb.Value_StringValue{StringValue: value}, + }) + } + + fields[key] = &structpb.Value{ + Kind: &structpb.Value_ListValue{ListValue: listValue}, + } + } + + return &structpb.Struct{Fields: fields}, nil +} diff --git a/internal/api/v1beta1/resource_test.go b/internal/api/v1beta1/resource_test.go index f044191f5..22ecdb154 100644 --- a/internal/api/v1beta1/resource_test.go +++ b/internal/api/v1beta1/resource_test.go @@ -3,9 +3,11 @@ package v1beta1 import ( "context" "errors" + "fmt" "testing" "time" + structpb "github.com/golang/protobuf/ptypes/struct" "github.com/goto/shield/core/organization" "github.com/goto/shield/core/project" "github.com/goto/shield/core/relation" @@ -49,6 +51,12 @@ var ( CreatedAt: timestamppb.New(time.Time{}), UpdatedAt: timestamppb.New(time.Time{}), } + testUserResourcesNamespace = "entropy" + testUserResourcesTypes = []string{"firehose", "dagger"} + testResourcePermissions = resource.ResourcePermissions{ + testResourceID: []string{"view", "edit"}, + uuid.NewString(): []string{"edit"}, + } ) func TestHandler_ListResources(t *testing.T) { @@ -144,6 +152,15 @@ func TestHandler_CreateResource(t *testing.T) { want: nil, wantErr: grpcUnauthenticated, }, + { + name: "should return internal error if no request body", + setup: func(ctx context.Context, rs *mocks.ResourceService, ps *mocks.ProjectService, rls *mocks.RelationService, _ *mocks.RelationTransformer) context.Context { + return user.SetContextWithEmail(ctx, email) + }, + request: &shieldv1beta1.CreateResourceRequest{}, + want: nil, + wantErr: grpcBadBodyError, + }, { name: "should return internal error if project service return some error", setup: func(ctx context.Context, rs *mocks.ResourceService, ps *mocks.ProjectService, rls *mocks.RelationService, _ *mocks.RelationTransformer) context.Context { @@ -166,6 +183,40 @@ func TestHandler_CreateResource(t *testing.T) { want: nil, wantErr: grpcInternalServerError, }, + { + name: "should return unauthenticated error if resource service return missing email or invalid email", + setup: func(ctx context.Context, rs *mocks.ResourceService, ps *mocks.ProjectService, rls *mocks.RelationService, _ *mocks.RelationTransformer) context.Context { + ps.EXPECT().Get(mock.AnythingOfType("*context.valueCtx"), testResource.ProjectID).Return(project.Project{ + ID: testResourceID, + Organization: organization.Organization{ + ID: testResource.OrganizationID, + }, + }, nil) + + rs.EXPECT().Upsert(mock.AnythingOfType("*context.valueCtx"), resource.Resource{ + Name: testResource.Name, + ProjectID: testResource.ProjectID, + NamespaceID: testResource.NamespaceID, + OrganizationID: testResource.OrganizationID, + }).Return(resource.Resource{}, user.ErrInvalidEmail) + return user.SetContextWithEmail(ctx, email) + }, + request: &shieldv1beta1.CreateResourceRequest{ + Body: &shieldv1beta1.ResourceRequestBody{ + Name: testResource.Name, + ProjectId: testResource.ProjectID, + NamespaceId: testResource.NamespaceID, + Relations: []*shieldv1beta1.Relation{ + { + RoleName: "owner", + Subject: "user:" + testUserID, + }, + }, + }, + }, + want: nil, + wantErr: grpcUnauthenticated, + }, { name: "should return internal error if resource service return some error", setup: func(ctx context.Context, rs *mocks.ResourceService, ps *mocks.ProjectService, rls *mocks.RelationService, _ *mocks.RelationTransformer) context.Context { @@ -390,6 +441,14 @@ func TestHandler_UpdateResource(t *testing.T) { want *shieldv1beta1.UpdateResourceResponse wantErr error }{ + { + name: "should return bad body error if request body is empty", + request: &shieldv1beta1.UpdateResourceRequest{ + Id: testResourceID, + }, + want: nil, + wantErr: grpcBadBodyError, + }, { name: "should return internal error if project service return some error", setup: func(rs *mocks.ResourceService, ps *mocks.ProjectService) { @@ -434,6 +493,22 @@ func TestHandler_UpdateResource(t *testing.T) { want: nil, wantErr: grpcInternalServerError, }, + { + name: "should return unauthenticated error if project service return invalid email error", + setup: func(rs *mocks.ResourceService, ps *mocks.ProjectService) { + ps.EXPECT().Get(mock.AnythingOfType("context.todoCtx"), testResource.ProjectID).Return(project.Project{}, user.ErrInvalidEmail) + }, + request: &shieldv1beta1.UpdateResourceRequest{ + Id: testResourceID, + Body: &shieldv1beta1.ResourceRequestBody{ + Name: testResource.Name, + ProjectId: testResource.ProjectID, + NamespaceId: testResource.NamespaceID, + }, + }, + want: nil, + wantErr: grpcUnauthenticated, + }, { name: "should return not found error if id is empty", setup: func(rs *mocks.ResourceService, ps *mocks.ProjectService) { @@ -618,3 +693,202 @@ func TestHandler_UpdateResource(t *testing.T) { }) } } + +func TestHandler_ListUserResourcesByType(t *testing.T) { + testResponse, err := mapToStructpb(testResourcePermissions) + if err != nil { + t.Error("failed setting up test variable") + } + + tests := []struct { + name string + setup func(rs *mocks.ResourceService) + request *shieldv1beta1.ListUserResourcesByTypeRequest + want *shieldv1beta1.ListUserResourcesByTypeResponse + wantErr error + }{ + { + name: "should return success if service return nil err", + setup: func(rs *mocks.ResourceService) { + rs.EXPECT().ListUserResourcesByType(mock.AnythingOfType("context.todoCtx"), testUserID, + fmt.Sprintf("%s/%s", testUserResourcesNamespace, testUserResourcesTypes[0])). + Return(testResourcePermissions, nil) + }, + request: &shieldv1beta1.ListUserResourcesByTypeRequest{ + UserId: testUserID, + Namespace: testUserResourcesNamespace, + Type: testUserResourcesTypes[0], + }, + want: &shieldv1beta1.ListUserResourcesByTypeResponse{ + Resources: testResponse, + }, + wantErr: nil, + }, + { + name: "should return invalid if userID is invalid", + setup: func(rs *mocks.ResourceService) { + rs.EXPECT().ListUserResourcesByType(mock.AnythingOfType("context.todoCtx"), testUserID, + fmt.Sprintf("%s/%s", testUserResourcesNamespace, testUserResourcesTypes[0])). + Return(resource.ResourcePermissions{}, user.ErrInvalidEmail) + }, + request: &shieldv1beta1.ListUserResourcesByTypeRequest{ + UserId: testUserID, + Namespace: testUserResourcesNamespace, + Type: testUserResourcesTypes[0], + }, + want: nil, + wantErr: grpcBadBodyError, + }, + { + name: "should return resource not found if service return resource not found", + setup: func(rs *mocks.ResourceService) { + rs.EXPECT().ListUserResourcesByType(mock.AnythingOfType("context.todoCtx"), testUserID, + fmt.Sprintf("%s/%s", testUserResourcesNamespace, testUserResourcesTypes[0])). + Return(resource.ResourcePermissions{}, resource.ErrNotExist) + }, + request: &shieldv1beta1.ListUserResourcesByTypeRequest{ + UserId: testUserID, + Namespace: testUserResourcesNamespace, + Type: testUserResourcesTypes[0], + }, + want: nil, + wantErr: grpcResourceNotFoundErr, + }, + { + name: "should return internal server error if service return error", + setup: func(rs *mocks.ResourceService) { + rs.EXPECT().ListUserResourcesByType(mock.AnythingOfType("context.todoCtx"), testUserID, + fmt.Sprintf("%s/%s", testUserResourcesNamespace, testUserResourcesTypes[0])). + Return(resource.ResourcePermissions{}, relation.ErrFetchingUser) + }, + request: &shieldv1beta1.ListUserResourcesByTypeRequest{ + UserId: testUserID, + Namespace: testUserResourcesNamespace, + Type: testUserResourcesTypes[0], + }, + want: nil, + wantErr: grpcInternalServerError, + }, + { + name: "should return no error if service return empty permission", + setup: func(rs *mocks.ResourceService) { + rs.EXPECT().ListUserResourcesByType(mock.AnythingOfType("context.todoCtx"), testUserID, + fmt.Sprintf("%s/%s", testUserResourcesNamespace, testUserResourcesTypes[0])). + Return(resource.ResourcePermissions{}, nil) + }, + request: &shieldv1beta1.ListUserResourcesByTypeRequest{ + UserId: testUserID, + Namespace: testUserResourcesNamespace, + Type: testUserResourcesTypes[0], + }, + want: &shieldv1beta1.ListUserResourcesByTypeResponse{Resources: &structpb.Struct{ + Fields: map[string]*structpb.Value{}, + }}, + wantErr: nil, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockResourceSrv := new(mocks.ResourceService) + if tt.setup != nil { + tt.setup(mockResourceSrv) + } + mockDep := Handler{resourceService: mockResourceSrv} + resp, err := mockDep.ListUserResourcesByType(context.TODO(), tt.request) + assert.EqualValues(t, tt.want, resp) + assert.EqualValues(t, tt.wantErr, err) + }) + } +} + +func TestHandler_ListAllUserResources(t *testing.T) { + testResponse, err := mapToStructpb(testResourcePermissions) + if err != nil { + t.Error("failed setting up test variable") + } + + testAllResourcePermissionsResponse := &structpb.Value{ + Kind: &structpb.Value_StructValue{StructValue: testResponse}, + } + + tests := []struct { + name string + setup func(rs *mocks.ResourceService) + request *shieldv1beta1.ListAllUserResourcesRequest + want *shieldv1beta1.ListAllUserResourcesResponse + wantErr error + }{ + { + name: "should return success if service return nil err", + setup: func(rs *mocks.ResourceService) { + rs.EXPECT().ListAllUserResources(mock.AnythingOfType("context.todoCtx"), testUserID, []string{}). + Return(map[string]resource.ResourcePermissions{ + fmt.Sprintf("%s/%s", testUserResourcesNamespace, testUserResourcesTypes[0]): testResourcePermissions, + }, nil) + }, + request: &shieldv1beta1.ListAllUserResourcesRequest{ + UserId: testUserID, + Types: []string{}, + }, + want: &shieldv1beta1.ListAllUserResourcesResponse{ + Resources: &structpb.Struct{ + Fields: map[string]*structpb.Value{ + fmt.Sprintf("%s/%s", testUserResourcesNamespace, testUserResourcesTypes[0]): testAllResourcePermissionsResponse, + }, + }, + }, + wantErr: nil, + }, + { + name: "should return invalid if userID is invalid", + setup: func(rs *mocks.ResourceService) { + rs.EXPECT().ListAllUserResources(mock.AnythingOfType("context.todoCtx"), testUserID, []string{}). + Return(nil, user.ErrInvalidEmail) + }, + request: &shieldv1beta1.ListAllUserResourcesRequest{ + UserId: testUserID, + Types: []string{}, + }, + want: nil, + wantErr: grpcBadBodyError, + }, + { + name: "should return resource not found if service return resource not found", + setup: func(rs *mocks.ResourceService) { + rs.EXPECT().ListAllUserResources(mock.AnythingOfType("context.todoCtx"), testUserID, []string{}). + Return(nil, resource.ErrNotExist) + }, + request: &shieldv1beta1.ListAllUserResourcesRequest{ + UserId: testUserID, + Types: []string{}, + }, + want: nil, + wantErr: grpcResourceNotFoundErr, + }, + { + name: "should return internal server error if service return error", + setup: func(rs *mocks.ResourceService) { + rs.EXPECT().ListAllUserResources(mock.AnythingOfType("context.todoCtx"), testUserID, []string{}). + Return(nil, relation.ErrFetchingUser) + }, + request: &shieldv1beta1.ListAllUserResourcesRequest{ + UserId: testUserID, + Types: []string{}, + }, + want: nil, + wantErr: grpcInternalServerError, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockResourceSrv := new(mocks.ResourceService) + if tt.setup != nil { + tt.setup(mockResourceSrv) + } + mockDep := Handler{resourceService: mockResourceSrv} + resp, err := mockDep.ListAllUserResources(context.TODO(), tt.request) + assert.EqualValues(t, tt.want, resp) + assert.EqualValues(t, tt.wantErr, err) + }) + } +} diff --git a/internal/api/v1beta1/v1beta1.go b/internal/api/v1beta1/v1beta1.go index b5f8ee50b..6186aaa22 100644 --- a/internal/api/v1beta1/v1beta1.go +++ b/internal/api/v1beta1/v1beta1.go @@ -21,6 +21,7 @@ type ServiceDataConfig struct { type Handler struct { shieldv1beta1.UnimplementedShieldServiceServer shieldv1beta1.UnimplementedServiceDataServiceServer + shieldv1beta1.UnimplementedPublicServiceServer orgService OrganizationService projectService ProjectService groupService GroupService @@ -60,5 +61,6 @@ func Register(ctx context.Context, s *grpc.Server, deps api.Deps, checkAPILimit } s.RegisterService(&shieldv1beta1.ShieldService_ServiceDesc, handler) s.RegisterService(&shieldv1beta1.ServiceDataService_ServiceDesc, handler) + s.RegisterService(&shieldv1beta1.PublicService_ServiceDesc, handler) return nil } diff --git a/internal/server/server.go b/internal/server/server.go index 9bca8a0d9..8c904cf83 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -78,6 +78,10 @@ func Serve( return err } + if err := shieldv1beta1.RegisterPublicServiceHandler(ctx, grpcServiceDataGateway, grpcConn); err != nil { + return err + } + grpcServer := grpc.NewServer( grpc.StatsHandler(otelgrpc.NewServerHandler()), getGRPCMiddleware(cfg, logger, nrApp), diff --git a/internal/store/postgres/policy_repository.go b/internal/store/postgres/policy_repository.go index a7cb078c2..6c1dd7b44 100644 --- a/internal/store/postgres/policy_repository.go +++ b/internal/store/postgres/policy_repository.go @@ -93,9 +93,16 @@ func (r PolicyRepository) Get(ctx context.Context, id string) (policy.Policy, er return transformedPolicy, nil } -func (r PolicyRepository) List(ctx context.Context) ([]policy.Policy, error) { +func (r PolicyRepository) List(ctx context.Context, filter policy.Filters) ([]policy.Policy, error) { var fetchedPolicies []Policy - query, params, err := r.buildListQuery().ToSQL() + + listQuery := r.buildListQuery() + + if filter.NamespaceID != "" { + listQuery = listQuery.Where(goqu.Ex{"namespace_id": filter.NamespaceID}) + } + + query, params, err := listQuery.ToSQL() if err != nil { return []policy.Policy{}, fmt.Errorf("%w: %s", queryErr, err) } diff --git a/internal/store/postgres/policy_repository_test.go b/internal/store/postgres/policy_repository_test.go index 8e39b9cf8..abb5230c1 100644 --- a/internal/store/postgres/policy_repository_test.go +++ b/internal/store/postgres/policy_repository_test.go @@ -200,6 +200,7 @@ func (s *PolicyRepositoryTestSuite) TestList() { type testCase struct { Description string ExpectedPolicys []policy.Policy + Filter policy.Filters ErrString string } @@ -224,11 +225,26 @@ func (s *PolicyRepositoryTestSuite) TestList() { }, }, }, + { + Description: "should get all policys with filter", + Filter: policy.Filters{NamespaceID: "ns2"}, + ExpectedPolicys: []policy.Policy{ + { + RoleID: "ns2:role2", + NamespaceID: "ns2", + ActionID: "action2", + }, + }, + }, + { + Description: "should get none policys with filter", + Filter: policy.Filters{NamespaceID: "ns3"}, + }, } for _, tc := range testCases { s.Run(tc.Description, func() { - got, err := s.repository.List(s.ctx) + got, err := s.repository.List(s.ctx, tc.Filter) if tc.ErrString != "" { if err.Error() != tc.ErrString { s.T().Fatalf("got error %s, expected was %s", err.Error(), tc.ErrString) diff --git a/proto/shield.swagger.yaml b/proto/shield.swagger.yaml index 156984e4e..92afa0fc9 100644 --- a/proto/shield.swagger.yaml +++ b/proto/shield.swagger.yaml @@ -1,8 +1,9 @@ swagger: "2.0" info: - title: Service Data - version: 0.1.0 + title: Shield API + version: 0.1.1 tags: + - name: PublicService - name: ServiceDataService - name: ShieldService schemes: @@ -1048,6 +1049,61 @@ paths: type: string tags: - User + /v1beta1/users/{userId}/resources: + get: + summary: Get Resources with Authorized User Access on Any Resource Type + operationId: ShieldService_ListAllUserResources + responses: + "200": + description: A successful response. + schema: + $ref: '#/definitions/ListAllUserResourcesResponse' + default: + description: An unexpected error response. + schema: + $ref: '#/definitions/Status' + parameters: + - name: userId + in: path + required: true + type: string + - name: types + in: query + required: false + type: array + items: + type: string + collectionFormat: multi + tags: + - Resource + /v1beta1/users/{userId}/resources/{namespace}/{type}: + get: + summary: Get Resources with Authorized User Access Under a Resource Type + operationId: PublicService_ListUserResourcesByType + responses: + "200": + description: A successful response. + schema: + $ref: '#/definitions/ListUserResourcesByTypeResponse' + default: + description: An unexpected error response. + schema: + $ref: '#/definitions/Status' + parameters: + - name: userId + in: path + required: true + type: string + - name: namespace + in: path + required: true + type: string + - name: type + in: path + required: true + type: string + tags: + - Resource /v1beta1/users/{userId}/servicedata: get: summary: Get User Service Data Key @@ -1394,6 +1450,11 @@ definitions: items: type: object $ref: '#/definitions/Activity' + ListAllUserResourcesResponse: + type: object + properties: + resources: + type: object ListGroupRelationsResponse: type: object properties: @@ -1493,6 +1554,11 @@ definitions: items: type: object $ref: '#/definitions/Group' + ListUserResourcesByTypeResponse: + type: object + properties: + resources: + type: object ListUsersResponse: type: object properties: diff --git a/proto/v1beta1/public.pb.go b/proto/v1beta1/public.pb.go new file mode 100644 index 000000000..d8f824ad2 --- /dev/null +++ b/proto/v1beta1/public.pb.go @@ -0,0 +1,271 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.32.0 +// protoc (unknown) +// source: gotocompany/shield/v1beta1/public.proto + +package shieldv1beta1 + +import ( + _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ListUserResourcesByTypeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` +} + +func (x *ListUserResourcesByTypeRequest) Reset() { + *x = ListUserResourcesByTypeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_shield_v1beta1_public_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListUserResourcesByTypeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListUserResourcesByTypeRequest) ProtoMessage() {} + +func (x *ListUserResourcesByTypeRequest) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_shield_v1beta1_public_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 ListUserResourcesByTypeRequest.ProtoReflect.Descriptor instead. +func (*ListUserResourcesByTypeRequest) Descriptor() ([]byte, []int) { + return file_gotocompany_shield_v1beta1_public_proto_rawDescGZIP(), []int{0} +} + +func (x *ListUserResourcesByTypeRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *ListUserResourcesByTypeRequest) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *ListUserResourcesByTypeRequest) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +type ListUserResourcesByTypeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Resources *structpb.Struct `protobuf:"bytes,1,opt,name=resources,proto3" json:"resources,omitempty"` +} + +func (x *ListUserResourcesByTypeResponse) Reset() { + *x = ListUserResourcesByTypeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_shield_v1beta1_public_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListUserResourcesByTypeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListUserResourcesByTypeResponse) ProtoMessage() {} + +func (x *ListUserResourcesByTypeResponse) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_shield_v1beta1_public_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 ListUserResourcesByTypeResponse.ProtoReflect.Descriptor instead. +func (*ListUserResourcesByTypeResponse) Descriptor() ([]byte, []int) { + return file_gotocompany_shield_v1beta1_public_proto_rawDescGZIP(), []int{1} +} + +func (x *ListUserResourcesByTypeResponse) GetResources() *structpb.Struct { + if x != nil { + return x.Resources + } + return nil +} + +var File_gotocompany_shield_v1beta1_public_proto protoreflect.FileDescriptor + +var file_gotocompany_shield_v1beta1_public_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2f, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x6b, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x58, + 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x09, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x32, 0xb2, 0x02, 0x0a, 0x0d, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xa0, 0x02, 0x0a, 0x17, 0x4c, + 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x8b, 0x01, 0x92, 0x41, 0x4b, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x3f, 0x47, 0x65, 0x74, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x55, + 0x73, 0x65, 0x72, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x55, 0x6e, 0x64, 0x65, 0x72, + 0x20, 0x61, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x54, 0x79, 0x70, 0x65, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, 0x35, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x42, 0x7a, 0x92, + 0x41, 0x18, 0x12, 0x13, 0x0a, 0x0a, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x41, 0x50, 0x49, + 0x32, 0x05, 0x30, 0x2e, 0x31, 0x2e, 0x31, 0x2a, 0x01, 0x01, 0x0a, 0x25, 0x63, 0x6f, 0x6d, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x6e, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x42, 0x06, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x6e, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_gotocompany_shield_v1beta1_public_proto_rawDescOnce sync.Once + file_gotocompany_shield_v1beta1_public_proto_rawDescData = file_gotocompany_shield_v1beta1_public_proto_rawDesc +) + +func file_gotocompany_shield_v1beta1_public_proto_rawDescGZIP() []byte { + file_gotocompany_shield_v1beta1_public_proto_rawDescOnce.Do(func() { + file_gotocompany_shield_v1beta1_public_proto_rawDescData = protoimpl.X.CompressGZIP(file_gotocompany_shield_v1beta1_public_proto_rawDescData) + }) + return file_gotocompany_shield_v1beta1_public_proto_rawDescData +} + +var file_gotocompany_shield_v1beta1_public_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_gotocompany_shield_v1beta1_public_proto_goTypes = []interface{}{ + (*ListUserResourcesByTypeRequest)(nil), // 0: gotocompany.shield.v1beta1.ListUserResourcesByTypeRequest + (*ListUserResourcesByTypeResponse)(nil), // 1: gotocompany.shield.v1beta1.ListUserResourcesByTypeResponse + (*structpb.Struct)(nil), // 2: google.protobuf.Struct +} +var file_gotocompany_shield_v1beta1_public_proto_depIdxs = []int32{ + 2, // 0: gotocompany.shield.v1beta1.ListUserResourcesByTypeResponse.resources:type_name -> google.protobuf.Struct + 0, // 1: gotocompany.shield.v1beta1.PublicService.ListUserResourcesByType:input_type -> gotocompany.shield.v1beta1.ListUserResourcesByTypeRequest + 1, // 2: gotocompany.shield.v1beta1.PublicService.ListUserResourcesByType:output_type -> gotocompany.shield.v1beta1.ListUserResourcesByTypeResponse + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_gotocompany_shield_v1beta1_public_proto_init() } +func file_gotocompany_shield_v1beta1_public_proto_init() { + if File_gotocompany_shield_v1beta1_public_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gotocompany_shield_v1beta1_public_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListUserResourcesByTypeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_shield_v1beta1_public_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListUserResourcesByTypeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gotocompany_shield_v1beta1_public_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_gotocompany_shield_v1beta1_public_proto_goTypes, + DependencyIndexes: file_gotocompany_shield_v1beta1_public_proto_depIdxs, + MessageInfos: file_gotocompany_shield_v1beta1_public_proto_msgTypes, + }.Build() + File_gotocompany_shield_v1beta1_public_proto = out.File + file_gotocompany_shield_v1beta1_public_proto_rawDesc = nil + file_gotocompany_shield_v1beta1_public_proto_goTypes = nil + file_gotocompany_shield_v1beta1_public_proto_depIdxs = nil +} diff --git a/proto/v1beta1/public.pb.gw.go b/proto/v1beta1/public.pb.gw.go new file mode 100644 index 000000000..dff37b14c --- /dev/null +++ b/proto/v1beta1/public.pb.gw.go @@ -0,0 +1,229 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: gotocompany/shield/v1beta1/public.proto + +/* +Package shieldv1beta1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package shieldv1beta1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_PublicService_ListUserResourcesByType_0(ctx context.Context, marshaler runtime.Marshaler, client PublicServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListUserResourcesByTypeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["user_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "user_id") + } + + protoReq.UserId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "user_id", err) + } + + val, ok = pathParams["namespace"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace") + } + + protoReq.Namespace, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err) + } + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + protoReq.Type, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + msg, err := client.ListUserResourcesByType(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_PublicService_ListUserResourcesByType_0(ctx context.Context, marshaler runtime.Marshaler, server PublicServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListUserResourcesByTypeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["user_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "user_id") + } + + protoReq.UserId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "user_id", err) + } + + val, ok = pathParams["namespace"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace") + } + + protoReq.Namespace, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err) + } + + val, ok = pathParams["type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "type") + } + + protoReq.Type, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "type", err) + } + + msg, err := server.ListUserResourcesByType(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterPublicServiceHandlerServer registers the http handlers for service PublicService to "mux". +// UnaryRPC :call PublicServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPublicServiceHandlerFromEndpoint instead. +func RegisterPublicServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PublicServiceServer) error { + + mux.Handle("GET", pattern_PublicService_ListUserResourcesByType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gotocompany.shield.v1beta1.PublicService/ListUserResourcesByType", runtime.WithHTTPPathPattern("/v1beta1/users/{user_id}/resources/{namespace}/{type}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_PublicService_ListUserResourcesByType_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_PublicService_ListUserResourcesByType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterPublicServiceHandlerFromEndpoint is same as RegisterPublicServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterPublicServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.DialContext(ctx, endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterPublicServiceHandler(ctx, mux, conn) +} + +// RegisterPublicServiceHandler registers the http handlers for service PublicService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterPublicServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterPublicServiceHandlerClient(ctx, mux, NewPublicServiceClient(conn)) +} + +// RegisterPublicServiceHandlerClient registers the http handlers for service PublicService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PublicServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PublicServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "PublicServiceClient" to call the correct interceptors. +func RegisterPublicServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PublicServiceClient) error { + + mux.Handle("GET", pattern_PublicService_ListUserResourcesByType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gotocompany.shield.v1beta1.PublicService/ListUserResourcesByType", runtime.WithHTTPPathPattern("/v1beta1/users/{user_id}/resources/{namespace}/{type}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_PublicService_ListUserResourcesByType_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_PublicService_ListUserResourcesByType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_PublicService_ListUserResourcesByType_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v1beta1", "users", "user_id", "resources", "namespace", "type"}, "")) +) + +var ( + forward_PublicService_ListUserResourcesByType_0 = runtime.ForwardResponseMessage +) diff --git a/proto/v1beta1/public.pb.validate.go b/proto/v1beta1/public.pb.validate.go new file mode 100644 index 000000000..71bb662fb --- /dev/null +++ b/proto/v1beta1/public.pb.validate.go @@ -0,0 +1,277 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: gotocompany/shield/v1beta1/public.proto + +package shieldv1beta1 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "sort" + "strings" + "time" + "unicode/utf8" + + "google.golang.org/protobuf/types/known/anypb" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = anypb.Any{} + _ = sort.Sort +) + +// Validate checks the field values on ListUserResourcesByTypeRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListUserResourcesByTypeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListUserResourcesByTypeRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListUserResourcesByTypeRequestMultiError, or nil if none found. +func (m *ListUserResourcesByTypeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListUserResourcesByTypeRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for UserId + + // no validation rules for Namespace + + // no validation rules for Type + + if len(errors) > 0 { + return ListUserResourcesByTypeRequestMultiError(errors) + } + + return nil +} + +// ListUserResourcesByTypeRequestMultiError is an error wrapping multiple +// validation errors returned by ListUserResourcesByTypeRequest.ValidateAll() +// if the designated constraints aren't met. +type ListUserResourcesByTypeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListUserResourcesByTypeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListUserResourcesByTypeRequestMultiError) AllErrors() []error { return m } + +// ListUserResourcesByTypeRequestValidationError is the validation error +// returned by ListUserResourcesByTypeRequest.Validate if the designated +// constraints aren't met. +type ListUserResourcesByTypeRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListUserResourcesByTypeRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListUserResourcesByTypeRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListUserResourcesByTypeRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListUserResourcesByTypeRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListUserResourcesByTypeRequestValidationError) ErrorName() string { + return "ListUserResourcesByTypeRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e ListUserResourcesByTypeRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListUserResourcesByTypeRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListUserResourcesByTypeRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListUserResourcesByTypeRequestValidationError{} + +// Validate checks the field values on ListUserResourcesByTypeResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListUserResourcesByTypeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListUserResourcesByTypeResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListUserResourcesByTypeResponseMultiError, or nil if none found. +func (m *ListUserResourcesByTypeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListUserResourcesByTypeResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetResources()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListUserResourcesByTypeResponseValidationError{ + field: "Resources", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListUserResourcesByTypeResponseValidationError{ + field: "Resources", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetResources()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListUserResourcesByTypeResponseValidationError{ + field: "Resources", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return ListUserResourcesByTypeResponseMultiError(errors) + } + + return nil +} + +// ListUserResourcesByTypeResponseMultiError is an error wrapping multiple +// validation errors returned by ListUserResourcesByTypeResponse.ValidateAll() +// if the designated constraints aren't met. +type ListUserResourcesByTypeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListUserResourcesByTypeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListUserResourcesByTypeResponseMultiError) AllErrors() []error { return m } + +// ListUserResourcesByTypeResponseValidationError is the validation error +// returned by ListUserResourcesByTypeResponse.Validate if the designated +// constraints aren't met. +type ListUserResourcesByTypeResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListUserResourcesByTypeResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListUserResourcesByTypeResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListUserResourcesByTypeResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListUserResourcesByTypeResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListUserResourcesByTypeResponseValidationError) ErrorName() string { + return "ListUserResourcesByTypeResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ListUserResourcesByTypeResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListUserResourcesByTypeResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListUserResourcesByTypeResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListUserResourcesByTypeResponseValidationError{} diff --git a/proto/v1beta1/public_grpc.pb.go b/proto/v1beta1/public_grpc.pb.go new file mode 100644 index 000000000..eccf15e05 --- /dev/null +++ b/proto/v1beta1/public_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: gotocompany/shield/v1beta1/public.proto + +package shieldv1beta1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + PublicService_ListUserResourcesByType_FullMethodName = "/gotocompany.shield.v1beta1.PublicService/ListUserResourcesByType" +) + +// PublicServiceClient is the client API for PublicService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type PublicServiceClient interface { + ListUserResourcesByType(ctx context.Context, in *ListUserResourcesByTypeRequest, opts ...grpc.CallOption) (*ListUserResourcesByTypeResponse, error) +} + +type publicServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewPublicServiceClient(cc grpc.ClientConnInterface) PublicServiceClient { + return &publicServiceClient{cc} +} + +func (c *publicServiceClient) ListUserResourcesByType(ctx context.Context, in *ListUserResourcesByTypeRequest, opts ...grpc.CallOption) (*ListUserResourcesByTypeResponse, error) { + out := new(ListUserResourcesByTypeResponse) + err := c.cc.Invoke(ctx, PublicService_ListUserResourcesByType_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// PublicServiceServer is the server API for PublicService service. +// All implementations must embed UnimplementedPublicServiceServer +// for forward compatibility +type PublicServiceServer interface { + ListUserResourcesByType(context.Context, *ListUserResourcesByTypeRequest) (*ListUserResourcesByTypeResponse, error) + mustEmbedUnimplementedPublicServiceServer() +} + +// UnimplementedPublicServiceServer must be embedded to have forward compatible implementations. +type UnimplementedPublicServiceServer struct { +} + +func (UnimplementedPublicServiceServer) ListUserResourcesByType(context.Context, *ListUserResourcesByTypeRequest) (*ListUserResourcesByTypeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListUserResourcesByType not implemented") +} +func (UnimplementedPublicServiceServer) mustEmbedUnimplementedPublicServiceServer() {} + +// UnsafePublicServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to PublicServiceServer will +// result in compilation errors. +type UnsafePublicServiceServer interface { + mustEmbedUnimplementedPublicServiceServer() +} + +func RegisterPublicServiceServer(s grpc.ServiceRegistrar, srv PublicServiceServer) { + s.RegisterService(&PublicService_ServiceDesc, srv) +} + +func _PublicService_ListUserResourcesByType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListUserResourcesByTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublicServiceServer).ListUserResourcesByType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: PublicService_ListUserResourcesByType_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublicServiceServer).ListUserResourcesByType(ctx, req.(*ListUserResourcesByTypeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// PublicService_ServiceDesc is the grpc.ServiceDesc for PublicService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var PublicService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "gotocompany.shield.v1beta1.PublicService", + HandlerType: (*PublicServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListUserResourcesByType", + Handler: _PublicService_ListUserResourcesByType_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "gotocompany/shield/v1beta1/public.proto", +} diff --git a/proto/v1beta1/servicedata.pb.go b/proto/v1beta1/servicedata.pb.go index c3bc6e9c0..815c9e324 100644 --- a/proto/v1beta1/servicedata.pb.go +++ b/proto/v1beta1/servicedata.pb.go @@ -876,16 +876,16 @@ var file_gotocompany_shield_v1beta1_servicedata_proto_rawDesc = []byte{ 0x63, 0x65, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x4b, 0x65, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x61, 0x74, 0x61, 0x42, 0x81, 0x01, 0x92, 0x41, 0x1a, 0x12, - 0x15, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x44, 0x61, 0x74, 0x61, 0x32, - 0x05, 0x30, 0x2e, 0x31, 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x0a, 0x25, 0x63, 0x6f, 0x6d, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x6e, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x42, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x5a, 0x2e, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x74, 0x6f, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x3b, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x64, 0x61, 0x74, 0x61, 0x42, 0x8c, 0x01, 0x92, 0x41, 0x25, 0x12, + 0x20, 0x0a, 0x17, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x41, 0x50, 0x49, 0x32, 0x05, 0x30, 0x2e, 0x31, 0x2e, + 0x31, 0x2a, 0x01, 0x01, 0x0a, 0x25, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0b, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, + 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/v1beta1/shield.pb.go b/proto/v1beta1/shield.pb.go index 3900b54f0..a3b92b8ec 100644 --- a/proto/v1beta1/shield.pb.go +++ b/proto/v1beta1/shield.pb.go @@ -6819,6 +6819,108 @@ func (x *CheckResourceUserPermissionResponse) GetResourcePermissions() []*CheckR return nil } +type ListAllUserResourcesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Types []string `protobuf:"bytes,2,rep,name=types,proto3" json:"types,omitempty"` +} + +func (x *ListAllUserResourcesRequest) Reset() { + *x = ListAllUserResourcesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[124] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAllUserResourcesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAllUserResourcesRequest) ProtoMessage() {} + +func (x *ListAllUserResourcesRequest) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[124] + 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 ListAllUserResourcesRequest.ProtoReflect.Descriptor instead. +func (*ListAllUserResourcesRequest) Descriptor() ([]byte, []int) { + return file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP(), []int{124} +} + +func (x *ListAllUserResourcesRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *ListAllUserResourcesRequest) GetTypes() []string { + if x != nil { + return x.Types + } + return nil +} + +type ListAllUserResourcesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Resources *structpb.Struct `protobuf:"bytes,1,opt,name=resources,proto3" json:"resources,omitempty"` +} + +func (x *ListAllUserResourcesResponse) Reset() { + *x = ListAllUserResourcesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[125] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAllUserResourcesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAllUserResourcesResponse) ProtoMessage() {} + +func (x *ListAllUserResourcesResponse) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[125] + 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 ListAllUserResourcesResponse.ProtoReflect.Descriptor instead. +func (*ListAllUserResourcesResponse) Descriptor() ([]byte, []int) { + return file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP(), []int{125} +} + +func (x *ListAllUserResourcesResponse) GetResources() *structpb.Struct { + if x != nil { + return x.Resources + } + return nil +} + type Activity struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6834,7 +6936,7 @@ type Activity struct { func (x *Activity) Reset() { *x = Activity{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[124] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6847,7 +6949,7 @@ func (x *Activity) String() string { func (*Activity) ProtoMessage() {} func (x *Activity) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[124] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[126] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6860,7 +6962,7 @@ func (x *Activity) ProtoReflect() protoreflect.Message { // Deprecated: Use Activity.ProtoReflect.Descriptor instead. func (*Activity) Descriptor() ([]byte, []int) { - return file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP(), []int{124} + return file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP(), []int{126} } func (x *Activity) GetActor() string { @@ -6916,7 +7018,7 @@ type ListActivitiesRequest struct { func (x *ListActivitiesRequest) Reset() { *x = ListActivitiesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[125] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6929,7 +7031,7 @@ func (x *ListActivitiesRequest) String() string { func (*ListActivitiesRequest) ProtoMessage() {} func (x *ListActivitiesRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[125] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[127] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6942,7 +7044,7 @@ func (x *ListActivitiesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListActivitiesRequest.ProtoReflect.Descriptor instead. func (*ListActivitiesRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP(), []int{125} + return file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP(), []int{127} } func (x *ListActivitiesRequest) GetActor() string { @@ -7013,7 +7115,7 @@ type ListActivitiesResponse struct { func (x *ListActivitiesResponse) Reset() { *x = ListActivitiesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[126] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7026,7 +7128,7 @@ func (x *ListActivitiesResponse) String() string { func (*ListActivitiesResponse) ProtoMessage() {} func (x *ListActivitiesResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[126] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[128] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7039,7 +7141,7 @@ func (x *ListActivitiesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListActivitiesResponse.ProtoReflect.Descriptor instead. func (*ListActivitiesResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP(), []int{126} + return file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP(), []int{128} } func (x *ListActivitiesResponse) GetCount() int32 { @@ -7070,7 +7172,7 @@ type CheckResourcePermissionResponse_ResourcePermissionResponse struct { func (x *CheckResourcePermissionResponse_ResourcePermissionResponse) Reset() { *x = CheckResourcePermissionResponse_ResourcePermissionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[127] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7083,7 +7185,7 @@ func (x *CheckResourcePermissionResponse_ResourcePermissionResponse) String() st func (*CheckResourcePermissionResponse_ResourcePermissionResponse) ProtoMessage() {} func (x *CheckResourcePermissionResponse_ResourcePermissionResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[127] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[129] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7141,7 +7243,7 @@ type CheckResourceUserPermissionResponse_ResourcePermissionResponse struct { func (x *CheckResourceUserPermissionResponse_ResourcePermissionResponse) Reset() { *x = CheckResourceUserPermissionResponse_ResourcePermissionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[128] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7154,7 +7256,7 @@ func (x *CheckResourceUserPermissionResponse_ResourcePermissionResponse) String( func (*CheckResourceUserPermissionResponse_ResourcePermissionResponse) ProtoMessage() {} func (x *CheckResourceUserPermissionResponse_ResourcePermissionResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[128] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[130] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8110,596 +8212,623 @@ var file_gotocompany_shield_v1beta1_shield_proto_rawDesc = []byte{ 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x22, 0xfc, - 0x02, 0x0a, 0x08, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x61, - 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x63, 0x74, 0x6f, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x44, 0x61, - 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4e, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x22, 0x4c, + 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, + 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x55, 0x0a, 0x1c, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x22, 0xfc, 0x02, 0x0a, 0x08, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x4e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0x37, 0x0a, 0x09, + 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xdb, 0x03, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x63, 0x74, + 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x5b, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdb, 0x03, - 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x5b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x61, - 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, - 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x74, 0x0a, 0x16, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x0a, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x32, 0xf9, 0x40, 0x0a, 0x0d, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, - 0x92, 0x41, 0x15, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0d, 0x47, 0x65, 0x74, 0x20, 0x41, - 0x6c, 0x6c, 0x20, 0x55, 0x73, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x9f, - 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2d, 0x2e, + 0x22, 0x74, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x44, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x32, 0xfe, 0x42, 0x0a, 0x0d, 0x53, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x15, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0d, + 0x47, 0x65, 0x74, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x55, 0x73, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x32, 0x92, 0x41, 0x13, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0b, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x20, 0x55, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, - 0x13, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, - 0x55, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, - 0x12, 0x9a, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x18, 0x0a, + 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, 0x55, 0x73, 0x65, + 0x72, 0x20, 0x62, 0x79, 0x20, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0xbb, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x18, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x10, 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, - 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xbb, 0x01, - 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, + 0x1d, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x55, 0x73, 0x65, 0x72, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, + 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x12, 0xaf, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, 0x1d, 0x0a, 0x04, 0x55, 0x73, - 0x65, 0x72, 0x12, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x61, 0x20, 0x55, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, - 0x1a, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0xaf, 0x01, 0x0a, 0x0e, - 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x31, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x18, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x10, 0x47, 0x65, 0x74, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x73, 0x65, 0x6c, 0x66, 0x12, 0xaa, 0x01, - 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x19, - 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x55, - 0x73, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, - 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x84, 0x02, 0x0a, 0x1b, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, - 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x92, 0x41, 0x3d, - 0x0a, 0x05, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x12, 0x34, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x12, 0xc1, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x92, 0x41, 0x1b, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, - 0x55, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x1a, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, - 0x2f, 0x73, 0x65, 0x6c, 0x66, 0x12, 0xca, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x23, 0x0a, 0x0c, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x4b, 0x65, 0x79, 0x12, 0x13, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x20, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x4b, 0x65, 0x79, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x14, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x6b, - 0x65, 0x79, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x18, 0x0a, + 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x47, 0x65, 0x74, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x73, 0x65, + 0x6c, 0x66, 0x12, 0xaa, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x31, 0x92, 0x41, 0x17, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x47, 0x65, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x12, 0xa5, 0x01, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x92, 0x41, 0x15, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x08, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x18, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x0f, 0x47, 0x65, 0x74, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb0, 0x01, 0x0a, - 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2e, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x3d, 0x92, 0x41, 0x19, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x11, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x13, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, + 0x84, 0x02, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x3e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x3f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x64, 0x92, 0x41, 0x3d, 0x0a, 0x05, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x12, 0x34, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x75, 0x73, + 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xc1, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, - 0x41, 0x1b, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1c, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, - 0xd4, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x92, 0x41, 0x26, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2e, 0x92, 0x41, 0x15, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0d, 0x47, 0x65, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, - 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, - 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x92, 0x41, 0x1b, 0x0a, 0x04, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x20, 0x55, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x73, 0x65, 0x6c, 0x66, 0x12, 0xca, 0x01, 0x0a, 0x11, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, + 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x32, 0x92, 0x41, 0x13, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0b, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x04, 0x62, - 0x6f, 0x64, 0x79, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x6f, - 0x6c, 0x65, 0x73, 0x12, 0xc7, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x92, 0x41, 0x24, 0x0a, 0x0c, 0x4f, 0x72, 0x67, - 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x47, 0x65, 0x74, 0x20, 0x61, - 0x6c, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xcf, 0x01, - 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x92, 0x41, 0x23, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x4f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1e, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0xc8, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x92, 0x41, - 0x26, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x47, 0x65, 0x74, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xda, 0x01, 0x0a, 0x12, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, + 0x41, 0x23, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x4b, 0x65, 0x79, + 0x12, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x20, 0x4b, 0x65, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x04, 0x62, 0x6f, 0x64, + 0x79, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x6b, 0x65, 0x79, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x17, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x12, 0x0e, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0xa5, 0x01, 0x0a, 0x0b, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x55, 0x92, 0x41, 0x29, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x4f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x1b, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xef, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, - 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x73, 0x12, 0x39, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x92, 0x41, 0x15, 0x0a, 0x05, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, + 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x12, 0x9e, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x92, 0x41, 0x31, 0x0a, 0x0c, - 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x47, 0x65, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x61, 0x6e, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0xa9, 0x01, 0x0a, 0x0c, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x18, 0x0a, 0x05, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0f, 0x47, 0x65, 0x74, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x20, + 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x1b, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x62, 0x79, 0x20, + 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x14, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xd4, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, - 0x41, 0x1a, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0f, 0x47, 0x65, 0x74, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0xb1, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x92, 0x41, 0x26, 0x0a, + 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x09, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x15, 0x0a, 0x04, 0x52, 0x6f, 0x6c, + 0x65, 0x12, 0x0d, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x13, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, + 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x16, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0xc7, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, + 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x92, 0x41, 0x24, + 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, + 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0xcf, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, + 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x92, 0x41, - 0x19, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, - 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0xaa, 0x01, 0x0a, 0x0a, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, + 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x92, 0x41, 0x23, 0x0a, 0x0c, 0x4f, + 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x16, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xc8, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4f, 0x72, 0x67, 0x61, + 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x72, 0x67, + 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x4c, 0x92, 0x41, 0x26, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x47, 0x65, 0x74, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, + 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, + 0xda, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x92, 0x41, 0x29, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, + 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, + 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, + 0x1b, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xef, 0x01, 0x0a, + 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0x39, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x1c, 0x0a, 0x07, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x92, - 0x41, 0x1f, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x14, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, - 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xd0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, + 0x92, 0x41, 0x31, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x21, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x41, 0x64, 0x6d, 0x69, 0x6e, + 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0xa9, + 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, + 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x1a, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x0f, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0xb1, 0x01, 0x0a, 0x0d, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x30, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x3b, 0x92, 0x41, 0x19, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x11, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0xaa, + 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, + 0x1c, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0d, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x30, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x46, 0x92, 0x41, 0x1f, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x04, 0x62, 0x6f, + 0x64, 0x79, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xd0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x26, 0x0a, 0x07, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, + 0x41, 0x26, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x47, 0x65, 0x74, + 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, + 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0xa4, 0x01, + 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, + 0x92, 0x41, 0x19, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x47, 0x65, 0x74, + 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xab, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x92, 0x41, 0x17, 0x0a, 0x06, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x22, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0xb6, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, + 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x47, 0x65, + 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0xbd, 0x01, 0x0a, 0x0f, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x92, 0x41, 0x1d, 0x0a, 0x09, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0xb6, 0x01, 0x0a, 0x0c, + 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2f, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x43, 0x92, 0x41, 0x20, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x13, 0x47, 0x65, 0x74, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x62, + 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xc8, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x19, 0x0a, 0x06, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0xab, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x4c, 0x92, 0x41, 0x23, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, + 0xa7, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x38, 0x92, 0x41, 0x17, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x10, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb6, 0x01, - 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, - 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0xbd, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, + 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x18, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x0e, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x0c, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x41, 0x92, 0x41, 0x1d, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x04, 0x62, 0x6f, 0x64, - 0x79, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0xb6, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x20, 0x0a, - 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x13, 0x47, 0x65, 0x74, 0x20, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, - 0xc8, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x92, 0x41, - 0x23, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x62, - 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x1a, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa7, 0x01, 0x0a, 0x0c, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x6f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, + 0x41, 0x17, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, - 0x92, 0x41, 0x18, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x47, 0x65, 0x74, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x69, 0x65, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x11, + 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x0e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x92, 0x41, 0x1b, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x52, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x04, 0x62, 0x6f, 0x64, + 0x79, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x17, 0x0a, 0x06, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x22, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x52, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, + 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xfa, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x80, 0x01, 0x92, 0x41, 0x39, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x6f, + 0x6c, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x73, 0x75, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x2f, 0x7b, + 0x72, 0x6f, 0x6c, 0x65, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, - 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x61, - 0x6c, 0x6c, 0x20, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3e, 0x92, 0x41, 0x1b, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x12, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0xb0, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x40, 0x92, 0x41, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, - 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x12, 0xfa, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x01, - 0x92, 0x41, 0x39, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, - 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x66, 0x72, - 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x2f, 0x7b, 0x72, 0x6f, 0x6c, 0x65, 0x7d, - 0x12, 0xb0, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, + 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x11, 0x47, 0x65, 0x74, + 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x3e, 0x92, 0x41, 0x1b, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x12, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, - 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x92, - 0x41, 0x1b, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0f, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1a, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0xb0, 0x01, - 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, - 0x92, 0x41, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x47, - 0x65, 0x74, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, - 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x12, 0xc2, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x92, 0x41, 0x21, 0x0a, - 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x17, 0x2f, 0x76, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x92, 0x41, 0x3d, 0x0a, - 0x05, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x12, 0x34, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x70, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x20, 0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xb5, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xc2, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x49, 0x92, 0x41, 0x21, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x15, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, + 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x04, 0x62, 0x6f, 0x64, + 0x79, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x82, 0x02, 0x0a, 0x14, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, + 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x77, 0x92, 0x41, 0x4a, 0x0a, 0x08, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x3e, 0x47, 0x65, 0x74, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x64, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x20, 0x6f, 0x6e, 0x20, 0x41, 0x6e, 0x79, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x20, 0x54, 0x79, 0x70, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, + 0xed, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x3c, 0x92, 0x41, 0x1e, 0x0a, 0x08, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x12, - 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0x76, 0x92, - 0x41, 0x14, 0x12, 0x0f, 0x0a, 0x06, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x05, 0x30, 0x2e, - 0x31, 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x0a, 0x25, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x06, 0x53, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x73, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x92, 0x41, 0x3d, 0x0a, 0x05, 0x41, 0x75, 0x74, 0x68, 0x7a, + 0x12, 0x34, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, + 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x61, + 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, + 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, + 0xb5, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x92, 0x41, 0x1e, 0x0a, 0x08, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, + 0x6c, 0x20, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0x7f, 0x92, 0x41, 0x1e, 0x12, 0x19, 0x0a, 0x10, + 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x20, 0x41, 0x50, 0x49, + 0x32, 0x05, 0x30, 0x2e, 0x31, 0x2e, 0x31, 0x2a, 0x01, 0x01, 0x0a, 0x25, 0x63, 0x6f, 0x6d, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x6e, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x42, 0x05, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, + 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8714,7 +8843,7 @@ func file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP() []byte { return file_gotocompany_shield_v1beta1_shield_proto_rawDescData } -var file_gotocompany_shield_v1beta1_shield_proto_msgTypes = make([]protoimpl.MessageInfo, 133) +var file_gotocompany_shield_v1beta1_shield_proto_msgTypes = make([]protoimpl.MessageInfo, 135) var file_gotocompany_shield_v1beta1_shield_proto_goTypes = []interface{}{ (*UserRequestBody)(nil), // 0: gotocompany.shield.v1beta1.UserRequestBody (*CreateUserRequest)(nil), // 1: gotocompany.shield.v1beta1.CreateUserRequest @@ -8840,24 +8969,26 @@ var file_gotocompany_shield_v1beta1_shield_proto_goTypes = []interface{}{ (*CheckResourcePermissionResponse)(nil), // 121: gotocompany.shield.v1beta1.CheckResourcePermissionResponse (*CheckResourceUserPermissionRequest)(nil), // 122: gotocompany.shield.v1beta1.CheckResourceUserPermissionRequest (*CheckResourceUserPermissionResponse)(nil), // 123: gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse - (*Activity)(nil), // 124: gotocompany.shield.v1beta1.Activity - (*ListActivitiesRequest)(nil), // 125: gotocompany.shield.v1beta1.ListActivitiesRequest - (*ListActivitiesResponse)(nil), // 126: gotocompany.shield.v1beta1.ListActivitiesResponse - (*CheckResourcePermissionResponse_ResourcePermissionResponse)(nil), // 127: gotocompany.shield.v1beta1.CheckResourcePermissionResponse.ResourcePermissionResponse - (*CheckResourceUserPermissionResponse_ResourcePermissionResponse)(nil), // 128: gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.ResourcePermissionResponse - nil, // 129: gotocompany.shield.v1beta1.Activity.DataEntry - nil, // 130: gotocompany.shield.v1beta1.Activity.MetadataEntry - nil, // 131: gotocompany.shield.v1beta1.ListActivitiesRequest.DataEntry - nil, // 132: gotocompany.shield.v1beta1.ListActivitiesRequest.MetadataEntry - (*structpb.Struct)(nil), // 133: google.protobuf.Struct - (*timestamppb.Timestamp)(nil), // 134: google.protobuf.Timestamp + (*ListAllUserResourcesRequest)(nil), // 124: gotocompany.shield.v1beta1.ListAllUserResourcesRequest + (*ListAllUserResourcesResponse)(nil), // 125: gotocompany.shield.v1beta1.ListAllUserResourcesResponse + (*Activity)(nil), // 126: gotocompany.shield.v1beta1.Activity + (*ListActivitiesRequest)(nil), // 127: gotocompany.shield.v1beta1.ListActivitiesRequest + (*ListActivitiesResponse)(nil), // 128: gotocompany.shield.v1beta1.ListActivitiesResponse + (*CheckResourcePermissionResponse_ResourcePermissionResponse)(nil), // 129: gotocompany.shield.v1beta1.CheckResourcePermissionResponse.ResourcePermissionResponse + (*CheckResourceUserPermissionResponse_ResourcePermissionResponse)(nil), // 130: gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.ResourcePermissionResponse + nil, // 131: gotocompany.shield.v1beta1.Activity.DataEntry + nil, // 132: gotocompany.shield.v1beta1.Activity.MetadataEntry + nil, // 133: gotocompany.shield.v1beta1.ListActivitiesRequest.DataEntry + nil, // 134: gotocompany.shield.v1beta1.ListActivitiesRequest.MetadataEntry + (*structpb.Struct)(nil), // 135: google.protobuf.Struct + (*timestamppb.Timestamp)(nil), // 136: google.protobuf.Timestamp } var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ - 133, // 0: gotocompany.shield.v1beta1.UserRequestBody.metadata:type_name -> google.protobuf.Struct + 135, // 0: gotocompany.shield.v1beta1.UserRequestBody.metadata:type_name -> google.protobuf.Struct 0, // 1: gotocompany.shield.v1beta1.CreateUserRequest.body:type_name -> gotocompany.shield.v1beta1.UserRequestBody - 133, // 2: gotocompany.shield.v1beta1.User.metadata:type_name -> google.protobuf.Struct - 134, // 3: gotocompany.shield.v1beta1.User.created_at:type_name -> google.protobuf.Timestamp - 134, // 4: gotocompany.shield.v1beta1.User.updated_at:type_name -> google.protobuf.Timestamp + 135, // 2: gotocompany.shield.v1beta1.User.metadata:type_name -> google.protobuf.Struct + 136, // 3: gotocompany.shield.v1beta1.User.created_at:type_name -> google.protobuf.Timestamp + 136, // 4: gotocompany.shield.v1beta1.User.updated_at:type_name -> google.protobuf.Timestamp 2, // 5: gotocompany.shield.v1beta1.CreateUserResponse.user:type_name -> gotocompany.shield.v1beta1.User 4, // 6: gotocompany.shield.v1beta1.CreateMetadataKeyRequest.body:type_name -> gotocompany.shield.v1beta1.MetadataKeyRequestBody 6, // 7: gotocompany.shield.v1beta1.CreateMetadataKeyResponse.metadatakey:type_name -> gotocompany.shield.v1beta1.MetadataKey @@ -8867,12 +8998,12 @@ var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ 2, // 11: gotocompany.shield.v1beta1.UpdateCurrentUserResponse.user:type_name -> gotocompany.shield.v1beta1.User 0, // 12: gotocompany.shield.v1beta1.UpdateUserRequest.body:type_name -> gotocompany.shield.v1beta1.UserRequestBody 2, // 13: gotocompany.shield.v1beta1.ListUsersResponse.users:type_name -> gotocompany.shield.v1beta1.User - 133, // 14: gotocompany.shield.v1beta1.GroupRequestBody.metadata:type_name -> google.protobuf.Struct + 135, // 14: gotocompany.shield.v1beta1.GroupRequestBody.metadata:type_name -> google.protobuf.Struct 18, // 15: gotocompany.shield.v1beta1.CreateGroupRequest.body:type_name -> gotocompany.shield.v1beta1.GroupRequestBody 21, // 16: gotocompany.shield.v1beta1.ListUserGroupsResponse.groups:type_name -> gotocompany.shield.v1beta1.Group - 133, // 17: gotocompany.shield.v1beta1.Group.metadata:type_name -> google.protobuf.Struct - 134, // 18: gotocompany.shield.v1beta1.Group.created_at:type_name -> google.protobuf.Timestamp - 134, // 19: gotocompany.shield.v1beta1.Group.updated_at:type_name -> google.protobuf.Timestamp + 135, // 17: gotocompany.shield.v1beta1.Group.metadata:type_name -> google.protobuf.Struct + 136, // 18: gotocompany.shield.v1beta1.Group.created_at:type_name -> google.protobuf.Timestamp + 136, // 19: gotocompany.shield.v1beta1.Group.updated_at:type_name -> google.protobuf.Timestamp 21, // 20: gotocompany.shield.v1beta1.CreateGroupResponse.group:type_name -> gotocompany.shield.v1beta1.Group 21, // 21: gotocompany.shield.v1beta1.GetGroupResponse.group:type_name -> gotocompany.shield.v1beta1.Group 21, // 22: gotocompany.shield.v1beta1.UpdateGroupResponse.group:type_name -> gotocompany.shield.v1beta1.Group @@ -8880,32 +9011,32 @@ var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ 0, // 24: gotocompany.shield.v1beta1.UpdateCurrentUserRequest.body:type_name -> gotocompany.shield.v1beta1.UserRequestBody 21, // 25: gotocompany.shield.v1beta1.ListGroupsResponse.groups:type_name -> gotocompany.shield.v1beta1.Group 65, // 26: gotocompany.shield.v1beta1.Role.namespace:type_name -> gotocompany.shield.v1beta1.Namespace - 133, // 27: gotocompany.shield.v1beta1.Role.metadata:type_name -> google.protobuf.Struct - 134, // 28: gotocompany.shield.v1beta1.Role.created_at:type_name -> google.protobuf.Timestamp - 134, // 29: gotocompany.shield.v1beta1.Role.updated_at:type_name -> google.protobuf.Timestamp - 133, // 30: gotocompany.shield.v1beta1.RoleRequestBody.metadata:type_name -> google.protobuf.Struct + 135, // 27: gotocompany.shield.v1beta1.Role.metadata:type_name -> google.protobuf.Struct + 136, // 28: gotocompany.shield.v1beta1.Role.created_at:type_name -> google.protobuf.Timestamp + 136, // 29: gotocompany.shield.v1beta1.Role.updated_at:type_name -> google.protobuf.Timestamp + 135, // 30: gotocompany.shield.v1beta1.RoleRequestBody.metadata:type_name -> google.protobuf.Struct 31, // 31: gotocompany.shield.v1beta1.CreateRoleRequest.body:type_name -> gotocompany.shield.v1beta1.RoleRequestBody 30, // 32: gotocompany.shield.v1beta1.CreateRoleResponse.role:type_name -> gotocompany.shield.v1beta1.Role 30, // 33: gotocompany.shield.v1beta1.GetRoleResponse.role:type_name -> gotocompany.shield.v1beta1.Role 30, // 34: gotocompany.shield.v1beta1.UpdateRoleResponse.role:type_name -> gotocompany.shield.v1beta1.Role 31, // 35: gotocompany.shield.v1beta1.UpdateRoleRequest.body:type_name -> gotocompany.shield.v1beta1.RoleRequestBody 30, // 36: gotocompany.shield.v1beta1.ListRolesResponse.roles:type_name -> gotocompany.shield.v1beta1.Role - 133, // 37: gotocompany.shield.v1beta1.OrganizationRequestBody.metadata:type_name -> google.protobuf.Struct + 135, // 37: gotocompany.shield.v1beta1.OrganizationRequestBody.metadata:type_name -> google.protobuf.Struct 40, // 38: gotocompany.shield.v1beta1.CreateOrganizationRequest.body:type_name -> gotocompany.shield.v1beta1.OrganizationRequestBody - 133, // 39: gotocompany.shield.v1beta1.Organization.metadata:type_name -> google.protobuf.Struct - 134, // 40: gotocompany.shield.v1beta1.Organization.created_at:type_name -> google.protobuf.Timestamp - 134, // 41: gotocompany.shield.v1beta1.Organization.updated_at:type_name -> google.protobuf.Timestamp + 135, // 39: gotocompany.shield.v1beta1.Organization.metadata:type_name -> google.protobuf.Struct + 136, // 40: gotocompany.shield.v1beta1.Organization.created_at:type_name -> google.protobuf.Timestamp + 136, // 41: gotocompany.shield.v1beta1.Organization.updated_at:type_name -> google.protobuf.Timestamp 42, // 42: gotocompany.shield.v1beta1.CreateOrganizationResponse.organization:type_name -> gotocompany.shield.v1beta1.Organization 42, // 43: gotocompany.shield.v1beta1.GetOrganizationResponse.organization:type_name -> gotocompany.shield.v1beta1.Organization 42, // 44: gotocompany.shield.v1beta1.UpdateOrganizationResponse.organization:type_name -> gotocompany.shield.v1beta1.Organization 42, // 45: gotocompany.shield.v1beta1.ListOrganizationsResponse.organizations:type_name -> gotocompany.shield.v1beta1.Organization 40, // 46: gotocompany.shield.v1beta1.UpdateOrganizationRequest.body:type_name -> gotocompany.shield.v1beta1.OrganizationRequestBody 2, // 47: gotocompany.shield.v1beta1.ListOrganizationAdminsResponse.users:type_name -> gotocompany.shield.v1beta1.User - 133, // 48: gotocompany.shield.v1beta1.ProjectRequestBody.metadata:type_name -> google.protobuf.Struct + 135, // 48: gotocompany.shield.v1beta1.ProjectRequestBody.metadata:type_name -> google.protobuf.Struct 52, // 49: gotocompany.shield.v1beta1.CreateProjectRequest.body:type_name -> gotocompany.shield.v1beta1.ProjectRequestBody - 133, // 50: gotocompany.shield.v1beta1.Project.metadata:type_name -> google.protobuf.Struct - 134, // 51: gotocompany.shield.v1beta1.Project.created_at:type_name -> google.protobuf.Timestamp - 134, // 52: gotocompany.shield.v1beta1.Project.updated_at:type_name -> google.protobuf.Timestamp + 135, // 50: gotocompany.shield.v1beta1.Project.metadata:type_name -> google.protobuf.Struct + 136, // 51: gotocompany.shield.v1beta1.Project.created_at:type_name -> google.protobuf.Timestamp + 136, // 52: gotocompany.shield.v1beta1.Project.updated_at:type_name -> google.protobuf.Timestamp 54, // 53: gotocompany.shield.v1beta1.CreateProjectResponse.project:type_name -> gotocompany.shield.v1beta1.Project 54, // 54: gotocompany.shield.v1beta1.GetProjectResponse.project:type_name -> gotocompany.shield.v1beta1.Project 54, // 55: gotocompany.shield.v1beta1.UpdateProjectResponse.project:type_name -> gotocompany.shield.v1beta1.Project @@ -8913,15 +9044,15 @@ var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ 52, // 57: gotocompany.shield.v1beta1.UpdateProjectRequest.body:type_name -> gotocompany.shield.v1beta1.ProjectRequestBody 2, // 58: gotocompany.shield.v1beta1.ListProjectAdminsResponse.users:type_name -> gotocompany.shield.v1beta1.User 65, // 59: gotocompany.shield.v1beta1.Action.namespace:type_name -> gotocompany.shield.v1beta1.Namespace - 134, // 60: gotocompany.shield.v1beta1.Action.created_at:type_name -> google.protobuf.Timestamp - 134, // 61: gotocompany.shield.v1beta1.Action.updated_at:type_name -> google.protobuf.Timestamp - 134, // 62: gotocompany.shield.v1beta1.Namespace.created_at:type_name -> google.protobuf.Timestamp - 134, // 63: gotocompany.shield.v1beta1.Namespace.updated_at:type_name -> google.protobuf.Timestamp + 136, // 60: gotocompany.shield.v1beta1.Action.created_at:type_name -> google.protobuf.Timestamp + 136, // 61: gotocompany.shield.v1beta1.Action.updated_at:type_name -> google.protobuf.Timestamp + 136, // 62: gotocompany.shield.v1beta1.Namespace.created_at:type_name -> google.protobuf.Timestamp + 136, // 63: gotocompany.shield.v1beta1.Namespace.updated_at:type_name -> google.protobuf.Timestamp 30, // 64: gotocompany.shield.v1beta1.Policy.role:type_name -> gotocompany.shield.v1beta1.Role 64, // 65: gotocompany.shield.v1beta1.Policy.action:type_name -> gotocompany.shield.v1beta1.Action 65, // 66: gotocompany.shield.v1beta1.Policy.namespace:type_name -> gotocompany.shield.v1beta1.Namespace - 134, // 67: gotocompany.shield.v1beta1.Policy.created_at:type_name -> google.protobuf.Timestamp - 134, // 68: gotocompany.shield.v1beta1.Policy.updated_at:type_name -> google.protobuf.Timestamp + 136, // 67: gotocompany.shield.v1beta1.Policy.created_at:type_name -> google.protobuf.Timestamp + 136, // 68: gotocompany.shield.v1beta1.Policy.updated_at:type_name -> google.protobuf.Timestamp 64, // 69: gotocompany.shield.v1beta1.ListActionsResponse.actions:type_name -> gotocompany.shield.v1beta1.Action 67, // 70: gotocompany.shield.v1beta1.CreateActionRequest.body:type_name -> gotocompany.shield.v1beta1.ActionRequestBody 64, // 71: gotocompany.shield.v1beta1.CreateActionResponse.action:type_name -> gotocompany.shield.v1beta1.Action @@ -8940,13 +9071,13 @@ var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ 66, // 84: gotocompany.shield.v1beta1.GetPolicyResponse.policy:type_name -> gotocompany.shield.v1beta1.Policy 69, // 85: gotocompany.shield.v1beta1.UpdatePolicyRequest.body:type_name -> gotocompany.shield.v1beta1.PolicyRequestBody 66, // 86: gotocompany.shield.v1beta1.UpdatePolicyResponse.policies:type_name -> gotocompany.shield.v1beta1.Policy - 134, // 87: gotocompany.shield.v1beta1.Relation.created_at:type_name -> google.protobuf.Timestamp - 134, // 88: gotocompany.shield.v1beta1.Relation.updated_at:type_name -> google.protobuf.Timestamp + 136, // 87: gotocompany.shield.v1beta1.Relation.created_at:type_name -> google.protobuf.Timestamp + 136, // 88: gotocompany.shield.v1beta1.Relation.updated_at:type_name -> google.protobuf.Timestamp 54, // 89: gotocompany.shield.v1beta1.Resource.project:type_name -> gotocompany.shield.v1beta1.Project 42, // 90: gotocompany.shield.v1beta1.Resource.organization:type_name -> gotocompany.shield.v1beta1.Organization 65, // 91: gotocompany.shield.v1beta1.Resource.namespace:type_name -> gotocompany.shield.v1beta1.Namespace - 134, // 92: gotocompany.shield.v1beta1.Resource.created_at:type_name -> google.protobuf.Timestamp - 134, // 93: gotocompany.shield.v1beta1.Resource.updated_at:type_name -> google.protobuf.Timestamp + 136, // 92: gotocompany.shield.v1beta1.Resource.created_at:type_name -> google.protobuf.Timestamp + 136, // 93: gotocompany.shield.v1beta1.Resource.updated_at:type_name -> google.protobuf.Timestamp 2, // 94: gotocompany.shield.v1beta1.Resource.user:type_name -> gotocompany.shield.v1beta1.User 2, // 95: gotocompany.shield.v1beta1.GroupRelation.user:type_name -> gotocompany.shield.v1beta1.User 21, // 96: gotocompany.shield.v1beta1.GroupRelation.group:type_name -> gotocompany.shield.v1beta1.Group @@ -8965,108 +9096,111 @@ var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ 112, // 109: gotocompany.shield.v1beta1.UpdateResourceRequest.body:type_name -> gotocompany.shield.v1beta1.ResourceRequestBody 95, // 110: gotocompany.shield.v1beta1.UpdateResourceResponse.resource:type_name -> gotocompany.shield.v1beta1.Resource 119, // 111: gotocompany.shield.v1beta1.CheckResourcePermissionRequest.resource_permissions:type_name -> gotocompany.shield.v1beta1.ResourcePermission - 127, // 112: gotocompany.shield.v1beta1.CheckResourcePermissionResponse.resource_permissions:type_name -> gotocompany.shield.v1beta1.CheckResourcePermissionResponse.ResourcePermissionResponse + 129, // 112: gotocompany.shield.v1beta1.CheckResourcePermissionResponse.resource_permissions:type_name -> gotocompany.shield.v1beta1.CheckResourcePermissionResponse.ResourcePermissionResponse 119, // 113: gotocompany.shield.v1beta1.CheckResourceUserPermissionRequest.resource_permissions:type_name -> gotocompany.shield.v1beta1.ResourcePermission - 128, // 114: gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.resource_permissions:type_name -> gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.ResourcePermissionResponse - 129, // 115: gotocompany.shield.v1beta1.Activity.data:type_name -> gotocompany.shield.v1beta1.Activity.DataEntry - 130, // 116: gotocompany.shield.v1beta1.Activity.metadata:type_name -> gotocompany.shield.v1beta1.Activity.MetadataEntry - 134, // 117: gotocompany.shield.v1beta1.Activity.timestamp:type_name -> google.protobuf.Timestamp - 131, // 118: gotocompany.shield.v1beta1.ListActivitiesRequest.data:type_name -> gotocompany.shield.v1beta1.ListActivitiesRequest.DataEntry - 132, // 119: gotocompany.shield.v1beta1.ListActivitiesRequest.metadata:type_name -> gotocompany.shield.v1beta1.ListActivitiesRequest.MetadataEntry - 124, // 120: gotocompany.shield.v1beta1.ListActivitiesResponse.activities:type_name -> gotocompany.shield.v1beta1.Activity - 16, // 121: gotocompany.shield.v1beta1.ShieldService.ListUsers:input_type -> gotocompany.shield.v1beta1.ListUsersRequest - 1, // 122: gotocompany.shield.v1beta1.ShieldService.CreateUser:input_type -> gotocompany.shield.v1beta1.CreateUserRequest - 13, // 123: gotocompany.shield.v1beta1.ShieldService.GetUser:input_type -> gotocompany.shield.v1beta1.GetUserRequest - 14, // 124: gotocompany.shield.v1beta1.ShieldService.ListUserGroups:input_type -> gotocompany.shield.v1beta1.ListUserGroupsRequest - 15, // 125: gotocompany.shield.v1beta1.ShieldService.GetCurrentUser:input_type -> gotocompany.shield.v1beta1.GetCurrentUserRequest - 12, // 126: gotocompany.shield.v1beta1.ShieldService.UpdateUser:input_type -> gotocompany.shield.v1beta1.UpdateUserRequest - 122, // 127: gotocompany.shield.v1beta1.ShieldService.CheckResourceUserPermission:input_type -> gotocompany.shield.v1beta1.CheckResourceUserPermissionRequest - 26, // 128: gotocompany.shield.v1beta1.ShieldService.UpdateCurrentUser:input_type -> gotocompany.shield.v1beta1.UpdateCurrentUserRequest - 5, // 129: gotocompany.shield.v1beta1.ShieldService.CreateMetadataKey:input_type -> gotocompany.shield.v1beta1.CreateMetadataKeyRequest - 28, // 130: gotocompany.shield.v1beta1.ShieldService.ListGroups:input_type -> gotocompany.shield.v1beta1.ListGroupsRequest - 19, // 131: gotocompany.shield.v1beta1.ShieldService.CreateGroup:input_type -> gotocompany.shield.v1beta1.CreateGroupRequest - 27, // 132: gotocompany.shield.v1beta1.ShieldService.GetGroup:input_type -> gotocompany.shield.v1beta1.GetGroupRequest - 25, // 133: gotocompany.shield.v1beta1.ShieldService.UpdateGroup:input_type -> gotocompany.shield.v1beta1.UpdateGroupRequest - 106, // 134: gotocompany.shield.v1beta1.ShieldService.ListGroupRelations:input_type -> gotocompany.shield.v1beta1.ListGroupRelationsRequest - 38, // 135: gotocompany.shield.v1beta1.ShieldService.ListRoles:input_type -> gotocompany.shield.v1beta1.ListRolesRequest - 32, // 136: gotocompany.shield.v1beta1.ShieldService.CreateRole:input_type -> gotocompany.shield.v1beta1.CreateRoleRequest - 46, // 137: gotocompany.shield.v1beta1.ShieldService.ListOrganizations:input_type -> gotocompany.shield.v1beta1.ListOrganizationsRequest - 41, // 138: gotocompany.shield.v1beta1.ShieldService.CreateOrganization:input_type -> gotocompany.shield.v1beta1.CreateOrganizationRequest - 48, // 139: gotocompany.shield.v1beta1.ShieldService.GetOrganization:input_type -> gotocompany.shield.v1beta1.GetOrganizationRequest - 49, // 140: gotocompany.shield.v1beta1.ShieldService.UpdateOrganization:input_type -> gotocompany.shield.v1beta1.UpdateOrganizationRequest - 50, // 141: gotocompany.shield.v1beta1.ShieldService.ListOrganizationAdmins:input_type -> gotocompany.shield.v1beta1.ListOrganizationAdminsRequest - 58, // 142: gotocompany.shield.v1beta1.ShieldService.ListProjects:input_type -> gotocompany.shield.v1beta1.ListProjectsRequest - 53, // 143: gotocompany.shield.v1beta1.ShieldService.CreateProject:input_type -> gotocompany.shield.v1beta1.CreateProjectRequest - 60, // 144: gotocompany.shield.v1beta1.ShieldService.GetProject:input_type -> gotocompany.shield.v1beta1.GetProjectRequest - 61, // 145: gotocompany.shield.v1beta1.ShieldService.UpdateProject:input_type -> gotocompany.shield.v1beta1.UpdateProjectRequest - 62, // 146: gotocompany.shield.v1beta1.ShieldService.ListProjectAdmins:input_type -> gotocompany.shield.v1beta1.ListProjectAdminsRequest - 70, // 147: gotocompany.shield.v1beta1.ShieldService.ListActions:input_type -> gotocompany.shield.v1beta1.ListActionsRequest - 72, // 148: gotocompany.shield.v1beta1.ShieldService.CreateAction:input_type -> gotocompany.shield.v1beta1.CreateActionRequest - 78, // 149: gotocompany.shield.v1beta1.ShieldService.ListNamespaces:input_type -> gotocompany.shield.v1beta1.ListNamespacesRequest - 80, // 150: gotocompany.shield.v1beta1.ShieldService.CreateNamespace:input_type -> gotocompany.shield.v1beta1.CreateNamespaceRequest - 82, // 151: gotocompany.shield.v1beta1.ShieldService.GetNamespace:input_type -> gotocompany.shield.v1beta1.GetNamespaceRequest - 84, // 152: gotocompany.shield.v1beta1.ShieldService.UpdateNamespace:input_type -> gotocompany.shield.v1beta1.UpdateNamespaceRequest - 86, // 153: gotocompany.shield.v1beta1.ShieldService.ListPolicies:input_type -> gotocompany.shield.v1beta1.ListPoliciesRequest - 88, // 154: gotocompany.shield.v1beta1.ShieldService.CreatePolicy:input_type -> gotocompany.shield.v1beta1.CreatePolicyRequest - 97, // 155: gotocompany.shield.v1beta1.ShieldService.ListRelations:input_type -> gotocompany.shield.v1beta1.ListRelationsRequest - 100, // 156: gotocompany.shield.v1beta1.ShieldService.CreateRelation:input_type -> gotocompany.shield.v1beta1.CreateRelationRequest - 102, // 157: gotocompany.shield.v1beta1.ShieldService.GetRelation:input_type -> gotocompany.shield.v1beta1.GetRelationRequest - 108, // 158: gotocompany.shield.v1beta1.ShieldService.DeleteRelation:input_type -> gotocompany.shield.v1beta1.DeleteRelationRequest - 110, // 159: gotocompany.shield.v1beta1.ShieldService.ListResources:input_type -> gotocompany.shield.v1beta1.ListResourcesRequest - 113, // 160: gotocompany.shield.v1beta1.ShieldService.CreateResource:input_type -> gotocompany.shield.v1beta1.CreateResourceRequest - 115, // 161: gotocompany.shield.v1beta1.ShieldService.GetResource:input_type -> gotocompany.shield.v1beta1.GetResourceRequest - 117, // 162: gotocompany.shield.v1beta1.ShieldService.UpdateResource:input_type -> gotocompany.shield.v1beta1.UpdateResourceRequest - 120, // 163: gotocompany.shield.v1beta1.ShieldService.CheckResourcePermission:input_type -> gotocompany.shield.v1beta1.CheckResourcePermissionRequest - 125, // 164: gotocompany.shield.v1beta1.ShieldService.ListActivities:input_type -> gotocompany.shield.v1beta1.ListActivitiesRequest - 17, // 165: gotocompany.shield.v1beta1.ShieldService.ListUsers:output_type -> gotocompany.shield.v1beta1.ListUsersResponse - 3, // 166: gotocompany.shield.v1beta1.ShieldService.CreateUser:output_type -> gotocompany.shield.v1beta1.CreateUserResponse - 8, // 167: gotocompany.shield.v1beta1.ShieldService.GetUser:output_type -> gotocompany.shield.v1beta1.GetUserResponse - 20, // 168: gotocompany.shield.v1beta1.ShieldService.ListUserGroups:output_type -> gotocompany.shield.v1beta1.ListUserGroupsResponse - 9, // 169: gotocompany.shield.v1beta1.ShieldService.GetCurrentUser:output_type -> gotocompany.shield.v1beta1.GetCurrentUserResponse - 10, // 170: gotocompany.shield.v1beta1.ShieldService.UpdateUser:output_type -> gotocompany.shield.v1beta1.UpdateUserResponse - 123, // 171: gotocompany.shield.v1beta1.ShieldService.CheckResourceUserPermission:output_type -> gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse - 11, // 172: gotocompany.shield.v1beta1.ShieldService.UpdateCurrentUser:output_type -> gotocompany.shield.v1beta1.UpdateCurrentUserResponse - 7, // 173: gotocompany.shield.v1beta1.ShieldService.CreateMetadataKey:output_type -> gotocompany.shield.v1beta1.CreateMetadataKeyResponse - 29, // 174: gotocompany.shield.v1beta1.ShieldService.ListGroups:output_type -> gotocompany.shield.v1beta1.ListGroupsResponse - 22, // 175: gotocompany.shield.v1beta1.ShieldService.CreateGroup:output_type -> gotocompany.shield.v1beta1.CreateGroupResponse - 23, // 176: gotocompany.shield.v1beta1.ShieldService.GetGroup:output_type -> gotocompany.shield.v1beta1.GetGroupResponse - 24, // 177: gotocompany.shield.v1beta1.ShieldService.UpdateGroup:output_type -> gotocompany.shield.v1beta1.UpdateGroupResponse - 107, // 178: gotocompany.shield.v1beta1.ShieldService.ListGroupRelations:output_type -> gotocompany.shield.v1beta1.ListGroupRelationsResponse - 39, // 179: gotocompany.shield.v1beta1.ShieldService.ListRoles:output_type -> gotocompany.shield.v1beta1.ListRolesResponse - 33, // 180: gotocompany.shield.v1beta1.ShieldService.CreateRole:output_type -> gotocompany.shield.v1beta1.CreateRoleResponse - 47, // 181: gotocompany.shield.v1beta1.ShieldService.ListOrganizations:output_type -> gotocompany.shield.v1beta1.ListOrganizationsResponse - 43, // 182: gotocompany.shield.v1beta1.ShieldService.CreateOrganization:output_type -> gotocompany.shield.v1beta1.CreateOrganizationResponse - 44, // 183: gotocompany.shield.v1beta1.ShieldService.GetOrganization:output_type -> gotocompany.shield.v1beta1.GetOrganizationResponse - 45, // 184: gotocompany.shield.v1beta1.ShieldService.UpdateOrganization:output_type -> gotocompany.shield.v1beta1.UpdateOrganizationResponse - 51, // 185: gotocompany.shield.v1beta1.ShieldService.ListOrganizationAdmins:output_type -> gotocompany.shield.v1beta1.ListOrganizationAdminsResponse - 59, // 186: gotocompany.shield.v1beta1.ShieldService.ListProjects:output_type -> gotocompany.shield.v1beta1.ListProjectsResponse - 55, // 187: gotocompany.shield.v1beta1.ShieldService.CreateProject:output_type -> gotocompany.shield.v1beta1.CreateProjectResponse - 56, // 188: gotocompany.shield.v1beta1.ShieldService.GetProject:output_type -> gotocompany.shield.v1beta1.GetProjectResponse - 57, // 189: gotocompany.shield.v1beta1.ShieldService.UpdateProject:output_type -> gotocompany.shield.v1beta1.UpdateProjectResponse - 63, // 190: gotocompany.shield.v1beta1.ShieldService.ListProjectAdmins:output_type -> gotocompany.shield.v1beta1.ListProjectAdminsResponse - 71, // 191: gotocompany.shield.v1beta1.ShieldService.ListActions:output_type -> gotocompany.shield.v1beta1.ListActionsResponse - 73, // 192: gotocompany.shield.v1beta1.ShieldService.CreateAction:output_type -> gotocompany.shield.v1beta1.CreateActionResponse - 79, // 193: gotocompany.shield.v1beta1.ShieldService.ListNamespaces:output_type -> gotocompany.shield.v1beta1.ListNamespacesResponse - 81, // 194: gotocompany.shield.v1beta1.ShieldService.CreateNamespace:output_type -> gotocompany.shield.v1beta1.CreateNamespaceResponse - 83, // 195: gotocompany.shield.v1beta1.ShieldService.GetNamespace:output_type -> gotocompany.shield.v1beta1.GetNamespaceResponse - 85, // 196: gotocompany.shield.v1beta1.ShieldService.UpdateNamespace:output_type -> gotocompany.shield.v1beta1.UpdateNamespaceResponse - 87, // 197: gotocompany.shield.v1beta1.ShieldService.ListPolicies:output_type -> gotocompany.shield.v1beta1.ListPoliciesResponse - 89, // 198: gotocompany.shield.v1beta1.ShieldService.CreatePolicy:output_type -> gotocompany.shield.v1beta1.CreatePolicyResponse - 98, // 199: gotocompany.shield.v1beta1.ShieldService.ListRelations:output_type -> gotocompany.shield.v1beta1.ListRelationsResponse - 101, // 200: gotocompany.shield.v1beta1.ShieldService.CreateRelation:output_type -> gotocompany.shield.v1beta1.CreateRelationResponse - 103, // 201: gotocompany.shield.v1beta1.ShieldService.GetRelation:output_type -> gotocompany.shield.v1beta1.GetRelationResponse - 109, // 202: gotocompany.shield.v1beta1.ShieldService.DeleteRelation:output_type -> gotocompany.shield.v1beta1.DeleteRelationResponse - 111, // 203: gotocompany.shield.v1beta1.ShieldService.ListResources:output_type -> gotocompany.shield.v1beta1.ListResourcesResponse - 114, // 204: gotocompany.shield.v1beta1.ShieldService.CreateResource:output_type -> gotocompany.shield.v1beta1.CreateResourceResponse - 116, // 205: gotocompany.shield.v1beta1.ShieldService.GetResource:output_type -> gotocompany.shield.v1beta1.GetResourceResponse - 118, // 206: gotocompany.shield.v1beta1.ShieldService.UpdateResource:output_type -> gotocompany.shield.v1beta1.UpdateResourceResponse - 121, // 207: gotocompany.shield.v1beta1.ShieldService.CheckResourcePermission:output_type -> gotocompany.shield.v1beta1.CheckResourcePermissionResponse - 126, // 208: gotocompany.shield.v1beta1.ShieldService.ListActivities:output_type -> gotocompany.shield.v1beta1.ListActivitiesResponse - 165, // [165:209] is the sub-list for method output_type - 121, // [121:165] is the sub-list for method input_type - 121, // [121:121] is the sub-list for extension type_name - 121, // [121:121] is the sub-list for extension extendee - 0, // [0:121] is the sub-list for field type_name + 130, // 114: gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.resource_permissions:type_name -> gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.ResourcePermissionResponse + 135, // 115: gotocompany.shield.v1beta1.ListAllUserResourcesResponse.resources:type_name -> google.protobuf.Struct + 131, // 116: gotocompany.shield.v1beta1.Activity.data:type_name -> gotocompany.shield.v1beta1.Activity.DataEntry + 132, // 117: gotocompany.shield.v1beta1.Activity.metadata:type_name -> gotocompany.shield.v1beta1.Activity.MetadataEntry + 136, // 118: gotocompany.shield.v1beta1.Activity.timestamp:type_name -> google.protobuf.Timestamp + 133, // 119: gotocompany.shield.v1beta1.ListActivitiesRequest.data:type_name -> gotocompany.shield.v1beta1.ListActivitiesRequest.DataEntry + 134, // 120: gotocompany.shield.v1beta1.ListActivitiesRequest.metadata:type_name -> gotocompany.shield.v1beta1.ListActivitiesRequest.MetadataEntry + 126, // 121: gotocompany.shield.v1beta1.ListActivitiesResponse.activities:type_name -> gotocompany.shield.v1beta1.Activity + 16, // 122: gotocompany.shield.v1beta1.ShieldService.ListUsers:input_type -> gotocompany.shield.v1beta1.ListUsersRequest + 1, // 123: gotocompany.shield.v1beta1.ShieldService.CreateUser:input_type -> gotocompany.shield.v1beta1.CreateUserRequest + 13, // 124: gotocompany.shield.v1beta1.ShieldService.GetUser:input_type -> gotocompany.shield.v1beta1.GetUserRequest + 14, // 125: gotocompany.shield.v1beta1.ShieldService.ListUserGroups:input_type -> gotocompany.shield.v1beta1.ListUserGroupsRequest + 15, // 126: gotocompany.shield.v1beta1.ShieldService.GetCurrentUser:input_type -> gotocompany.shield.v1beta1.GetCurrentUserRequest + 12, // 127: gotocompany.shield.v1beta1.ShieldService.UpdateUser:input_type -> gotocompany.shield.v1beta1.UpdateUserRequest + 122, // 128: gotocompany.shield.v1beta1.ShieldService.CheckResourceUserPermission:input_type -> gotocompany.shield.v1beta1.CheckResourceUserPermissionRequest + 26, // 129: gotocompany.shield.v1beta1.ShieldService.UpdateCurrentUser:input_type -> gotocompany.shield.v1beta1.UpdateCurrentUserRequest + 5, // 130: gotocompany.shield.v1beta1.ShieldService.CreateMetadataKey:input_type -> gotocompany.shield.v1beta1.CreateMetadataKeyRequest + 28, // 131: gotocompany.shield.v1beta1.ShieldService.ListGroups:input_type -> gotocompany.shield.v1beta1.ListGroupsRequest + 19, // 132: gotocompany.shield.v1beta1.ShieldService.CreateGroup:input_type -> gotocompany.shield.v1beta1.CreateGroupRequest + 27, // 133: gotocompany.shield.v1beta1.ShieldService.GetGroup:input_type -> gotocompany.shield.v1beta1.GetGroupRequest + 25, // 134: gotocompany.shield.v1beta1.ShieldService.UpdateGroup:input_type -> gotocompany.shield.v1beta1.UpdateGroupRequest + 106, // 135: gotocompany.shield.v1beta1.ShieldService.ListGroupRelations:input_type -> gotocompany.shield.v1beta1.ListGroupRelationsRequest + 38, // 136: gotocompany.shield.v1beta1.ShieldService.ListRoles:input_type -> gotocompany.shield.v1beta1.ListRolesRequest + 32, // 137: gotocompany.shield.v1beta1.ShieldService.CreateRole:input_type -> gotocompany.shield.v1beta1.CreateRoleRequest + 46, // 138: gotocompany.shield.v1beta1.ShieldService.ListOrganizations:input_type -> gotocompany.shield.v1beta1.ListOrganizationsRequest + 41, // 139: gotocompany.shield.v1beta1.ShieldService.CreateOrganization:input_type -> gotocompany.shield.v1beta1.CreateOrganizationRequest + 48, // 140: gotocompany.shield.v1beta1.ShieldService.GetOrganization:input_type -> gotocompany.shield.v1beta1.GetOrganizationRequest + 49, // 141: gotocompany.shield.v1beta1.ShieldService.UpdateOrganization:input_type -> gotocompany.shield.v1beta1.UpdateOrganizationRequest + 50, // 142: gotocompany.shield.v1beta1.ShieldService.ListOrganizationAdmins:input_type -> gotocompany.shield.v1beta1.ListOrganizationAdminsRequest + 58, // 143: gotocompany.shield.v1beta1.ShieldService.ListProjects:input_type -> gotocompany.shield.v1beta1.ListProjectsRequest + 53, // 144: gotocompany.shield.v1beta1.ShieldService.CreateProject:input_type -> gotocompany.shield.v1beta1.CreateProjectRequest + 60, // 145: gotocompany.shield.v1beta1.ShieldService.GetProject:input_type -> gotocompany.shield.v1beta1.GetProjectRequest + 61, // 146: gotocompany.shield.v1beta1.ShieldService.UpdateProject:input_type -> gotocompany.shield.v1beta1.UpdateProjectRequest + 62, // 147: gotocompany.shield.v1beta1.ShieldService.ListProjectAdmins:input_type -> gotocompany.shield.v1beta1.ListProjectAdminsRequest + 70, // 148: gotocompany.shield.v1beta1.ShieldService.ListActions:input_type -> gotocompany.shield.v1beta1.ListActionsRequest + 72, // 149: gotocompany.shield.v1beta1.ShieldService.CreateAction:input_type -> gotocompany.shield.v1beta1.CreateActionRequest + 78, // 150: gotocompany.shield.v1beta1.ShieldService.ListNamespaces:input_type -> gotocompany.shield.v1beta1.ListNamespacesRequest + 80, // 151: gotocompany.shield.v1beta1.ShieldService.CreateNamespace:input_type -> gotocompany.shield.v1beta1.CreateNamespaceRequest + 82, // 152: gotocompany.shield.v1beta1.ShieldService.GetNamespace:input_type -> gotocompany.shield.v1beta1.GetNamespaceRequest + 84, // 153: gotocompany.shield.v1beta1.ShieldService.UpdateNamespace:input_type -> gotocompany.shield.v1beta1.UpdateNamespaceRequest + 86, // 154: gotocompany.shield.v1beta1.ShieldService.ListPolicies:input_type -> gotocompany.shield.v1beta1.ListPoliciesRequest + 88, // 155: gotocompany.shield.v1beta1.ShieldService.CreatePolicy:input_type -> gotocompany.shield.v1beta1.CreatePolicyRequest + 97, // 156: gotocompany.shield.v1beta1.ShieldService.ListRelations:input_type -> gotocompany.shield.v1beta1.ListRelationsRequest + 100, // 157: gotocompany.shield.v1beta1.ShieldService.CreateRelation:input_type -> gotocompany.shield.v1beta1.CreateRelationRequest + 102, // 158: gotocompany.shield.v1beta1.ShieldService.GetRelation:input_type -> gotocompany.shield.v1beta1.GetRelationRequest + 108, // 159: gotocompany.shield.v1beta1.ShieldService.DeleteRelation:input_type -> gotocompany.shield.v1beta1.DeleteRelationRequest + 110, // 160: gotocompany.shield.v1beta1.ShieldService.ListResources:input_type -> gotocompany.shield.v1beta1.ListResourcesRequest + 113, // 161: gotocompany.shield.v1beta1.ShieldService.CreateResource:input_type -> gotocompany.shield.v1beta1.CreateResourceRequest + 115, // 162: gotocompany.shield.v1beta1.ShieldService.GetResource:input_type -> gotocompany.shield.v1beta1.GetResourceRequest + 117, // 163: gotocompany.shield.v1beta1.ShieldService.UpdateResource:input_type -> gotocompany.shield.v1beta1.UpdateResourceRequest + 124, // 164: gotocompany.shield.v1beta1.ShieldService.ListAllUserResources:input_type -> gotocompany.shield.v1beta1.ListAllUserResourcesRequest + 120, // 165: gotocompany.shield.v1beta1.ShieldService.CheckResourcePermission:input_type -> gotocompany.shield.v1beta1.CheckResourcePermissionRequest + 127, // 166: gotocompany.shield.v1beta1.ShieldService.ListActivities:input_type -> gotocompany.shield.v1beta1.ListActivitiesRequest + 17, // 167: gotocompany.shield.v1beta1.ShieldService.ListUsers:output_type -> gotocompany.shield.v1beta1.ListUsersResponse + 3, // 168: gotocompany.shield.v1beta1.ShieldService.CreateUser:output_type -> gotocompany.shield.v1beta1.CreateUserResponse + 8, // 169: gotocompany.shield.v1beta1.ShieldService.GetUser:output_type -> gotocompany.shield.v1beta1.GetUserResponse + 20, // 170: gotocompany.shield.v1beta1.ShieldService.ListUserGroups:output_type -> gotocompany.shield.v1beta1.ListUserGroupsResponse + 9, // 171: gotocompany.shield.v1beta1.ShieldService.GetCurrentUser:output_type -> gotocompany.shield.v1beta1.GetCurrentUserResponse + 10, // 172: gotocompany.shield.v1beta1.ShieldService.UpdateUser:output_type -> gotocompany.shield.v1beta1.UpdateUserResponse + 123, // 173: gotocompany.shield.v1beta1.ShieldService.CheckResourceUserPermission:output_type -> gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse + 11, // 174: gotocompany.shield.v1beta1.ShieldService.UpdateCurrentUser:output_type -> gotocompany.shield.v1beta1.UpdateCurrentUserResponse + 7, // 175: gotocompany.shield.v1beta1.ShieldService.CreateMetadataKey:output_type -> gotocompany.shield.v1beta1.CreateMetadataKeyResponse + 29, // 176: gotocompany.shield.v1beta1.ShieldService.ListGroups:output_type -> gotocompany.shield.v1beta1.ListGroupsResponse + 22, // 177: gotocompany.shield.v1beta1.ShieldService.CreateGroup:output_type -> gotocompany.shield.v1beta1.CreateGroupResponse + 23, // 178: gotocompany.shield.v1beta1.ShieldService.GetGroup:output_type -> gotocompany.shield.v1beta1.GetGroupResponse + 24, // 179: gotocompany.shield.v1beta1.ShieldService.UpdateGroup:output_type -> gotocompany.shield.v1beta1.UpdateGroupResponse + 107, // 180: gotocompany.shield.v1beta1.ShieldService.ListGroupRelations:output_type -> gotocompany.shield.v1beta1.ListGroupRelationsResponse + 39, // 181: gotocompany.shield.v1beta1.ShieldService.ListRoles:output_type -> gotocompany.shield.v1beta1.ListRolesResponse + 33, // 182: gotocompany.shield.v1beta1.ShieldService.CreateRole:output_type -> gotocompany.shield.v1beta1.CreateRoleResponse + 47, // 183: gotocompany.shield.v1beta1.ShieldService.ListOrganizations:output_type -> gotocompany.shield.v1beta1.ListOrganizationsResponse + 43, // 184: gotocompany.shield.v1beta1.ShieldService.CreateOrganization:output_type -> gotocompany.shield.v1beta1.CreateOrganizationResponse + 44, // 185: gotocompany.shield.v1beta1.ShieldService.GetOrganization:output_type -> gotocompany.shield.v1beta1.GetOrganizationResponse + 45, // 186: gotocompany.shield.v1beta1.ShieldService.UpdateOrganization:output_type -> gotocompany.shield.v1beta1.UpdateOrganizationResponse + 51, // 187: gotocompany.shield.v1beta1.ShieldService.ListOrganizationAdmins:output_type -> gotocompany.shield.v1beta1.ListOrganizationAdminsResponse + 59, // 188: gotocompany.shield.v1beta1.ShieldService.ListProjects:output_type -> gotocompany.shield.v1beta1.ListProjectsResponse + 55, // 189: gotocompany.shield.v1beta1.ShieldService.CreateProject:output_type -> gotocompany.shield.v1beta1.CreateProjectResponse + 56, // 190: gotocompany.shield.v1beta1.ShieldService.GetProject:output_type -> gotocompany.shield.v1beta1.GetProjectResponse + 57, // 191: gotocompany.shield.v1beta1.ShieldService.UpdateProject:output_type -> gotocompany.shield.v1beta1.UpdateProjectResponse + 63, // 192: gotocompany.shield.v1beta1.ShieldService.ListProjectAdmins:output_type -> gotocompany.shield.v1beta1.ListProjectAdminsResponse + 71, // 193: gotocompany.shield.v1beta1.ShieldService.ListActions:output_type -> gotocompany.shield.v1beta1.ListActionsResponse + 73, // 194: gotocompany.shield.v1beta1.ShieldService.CreateAction:output_type -> gotocompany.shield.v1beta1.CreateActionResponse + 79, // 195: gotocompany.shield.v1beta1.ShieldService.ListNamespaces:output_type -> gotocompany.shield.v1beta1.ListNamespacesResponse + 81, // 196: gotocompany.shield.v1beta1.ShieldService.CreateNamespace:output_type -> gotocompany.shield.v1beta1.CreateNamespaceResponse + 83, // 197: gotocompany.shield.v1beta1.ShieldService.GetNamespace:output_type -> gotocompany.shield.v1beta1.GetNamespaceResponse + 85, // 198: gotocompany.shield.v1beta1.ShieldService.UpdateNamespace:output_type -> gotocompany.shield.v1beta1.UpdateNamespaceResponse + 87, // 199: gotocompany.shield.v1beta1.ShieldService.ListPolicies:output_type -> gotocompany.shield.v1beta1.ListPoliciesResponse + 89, // 200: gotocompany.shield.v1beta1.ShieldService.CreatePolicy:output_type -> gotocompany.shield.v1beta1.CreatePolicyResponse + 98, // 201: gotocompany.shield.v1beta1.ShieldService.ListRelations:output_type -> gotocompany.shield.v1beta1.ListRelationsResponse + 101, // 202: gotocompany.shield.v1beta1.ShieldService.CreateRelation:output_type -> gotocompany.shield.v1beta1.CreateRelationResponse + 103, // 203: gotocompany.shield.v1beta1.ShieldService.GetRelation:output_type -> gotocompany.shield.v1beta1.GetRelationResponse + 109, // 204: gotocompany.shield.v1beta1.ShieldService.DeleteRelation:output_type -> gotocompany.shield.v1beta1.DeleteRelationResponse + 111, // 205: gotocompany.shield.v1beta1.ShieldService.ListResources:output_type -> gotocompany.shield.v1beta1.ListResourcesResponse + 114, // 206: gotocompany.shield.v1beta1.ShieldService.CreateResource:output_type -> gotocompany.shield.v1beta1.CreateResourceResponse + 116, // 207: gotocompany.shield.v1beta1.ShieldService.GetResource:output_type -> gotocompany.shield.v1beta1.GetResourceResponse + 118, // 208: gotocompany.shield.v1beta1.ShieldService.UpdateResource:output_type -> gotocompany.shield.v1beta1.UpdateResourceResponse + 125, // 209: gotocompany.shield.v1beta1.ShieldService.ListAllUserResources:output_type -> gotocompany.shield.v1beta1.ListAllUserResourcesResponse + 121, // 210: gotocompany.shield.v1beta1.ShieldService.CheckResourcePermission:output_type -> gotocompany.shield.v1beta1.CheckResourcePermissionResponse + 128, // 211: gotocompany.shield.v1beta1.ShieldService.ListActivities:output_type -> gotocompany.shield.v1beta1.ListActivitiesResponse + 167, // [167:212] is the sub-list for method output_type + 122, // [122:167] is the sub-list for method input_type + 122, // [122:122] is the sub-list for extension type_name + 122, // [122:122] is the sub-list for extension extendee + 0, // [0:122] is the sub-list for field type_name } func init() { file_gotocompany_shield_v1beta1_shield_proto_init() } @@ -10564,7 +10698,7 @@ func file_gotocompany_shield_v1beta1_shield_proto_init() { } } file_gotocompany_shield_v1beta1_shield_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Activity); i { + switch v := v.(*ListAllUserResourcesRequest); i { case 0: return &v.state case 1: @@ -10576,7 +10710,7 @@ func file_gotocompany_shield_v1beta1_shield_proto_init() { } } file_gotocompany_shield_v1beta1_shield_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListActivitiesRequest); i { + switch v := v.(*ListAllUserResourcesResponse); i { case 0: return &v.state case 1: @@ -10588,7 +10722,7 @@ func file_gotocompany_shield_v1beta1_shield_proto_init() { } } file_gotocompany_shield_v1beta1_shield_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListActivitiesResponse); i { + switch v := v.(*Activity); i { case 0: return &v.state case 1: @@ -10600,7 +10734,7 @@ func file_gotocompany_shield_v1beta1_shield_proto_init() { } } file_gotocompany_shield_v1beta1_shield_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckResourcePermissionResponse_ResourcePermissionResponse); i { + switch v := v.(*ListActivitiesRequest); i { case 0: return &v.state case 1: @@ -10612,6 +10746,30 @@ func file_gotocompany_shield_v1beta1_shield_proto_init() { } } file_gotocompany_shield_v1beta1_shield_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListActivitiesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_shield_v1beta1_shield_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckResourcePermissionResponse_ResourcePermissionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_shield_v1beta1_shield_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CheckResourceUserPermissionResponse_ResourcePermissionResponse); i { case 0: return &v.state @@ -10634,7 +10792,7 @@ func file_gotocompany_shield_v1beta1_shield_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gotocompany_shield_v1beta1_shield_proto_rawDesc, NumEnums: 0, - NumMessages: 133, + NumMessages: 135, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/v1beta1/shield.pb.gw.go b/proto/v1beta1/shield.pb.gw.go index 2f4dea6d5..1f7603fd2 100644 --- a/proto/v1beta1/shield.pb.gw.go +++ b/proto/v1beta1/shield.pb.gw.go @@ -1715,6 +1715,76 @@ func local_request_ShieldService_UpdateResource_0(ctx context.Context, marshaler } +var ( + filter_ShieldService_ListAllUserResources_0 = &utilities.DoubleArray{Encoding: map[string]int{"user_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_ShieldService_ListAllUserResources_0(ctx context.Context, marshaler runtime.Marshaler, client ShieldServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListAllUserResourcesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["user_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "user_id") + } + + protoReq.UserId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "user_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ShieldService_ListAllUserResources_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListAllUserResources(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ShieldService_ListAllUserResources_0(ctx context.Context, marshaler runtime.Marshaler, server ShieldServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListAllUserResourcesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["user_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "user_id") + } + + protoReq.UserId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "user_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ShieldService_ListAllUserResources_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListAllUserResources(ctx, &protoReq) + return msg, metadata, err + +} + func request_ShieldService_CheckResourcePermission_0(ctx context.Context, marshaler runtime.Marshaler, client ShieldServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq CheckResourcePermissionRequest var metadata runtime.ServerMetadata @@ -2833,6 +2903,31 @@ func RegisterShieldServiceHandlerServer(ctx context.Context, mux *runtime.ServeM }) + mux.Handle("GET", pattern_ShieldService_ListAllUserResources_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gotocompany.shield.v1beta1.ShieldService/ListAllUserResources", runtime.WithHTTPPathPattern("/v1beta1/users/{user_id}/resources")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ShieldService_ListAllUserResources_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ShieldService_ListAllUserResources_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_ShieldService_CheckResourcePermission_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3848,6 +3943,28 @@ func RegisterShieldServiceHandlerClient(ctx context.Context, mux *runtime.ServeM }) + mux.Handle("GET", pattern_ShieldService_ListAllUserResources_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gotocompany.shield.v1beta1.ShieldService/ListAllUserResources", runtime.WithHTTPPathPattern("/v1beta1/users/{user_id}/resources")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ShieldService_ListAllUserResources_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ShieldService_ListAllUserResources_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_ShieldService_CheckResourcePermission_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3980,6 +4097,8 @@ var ( pattern_ShieldService_UpdateResource_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "resources", "id"}, "")) + pattern_ShieldService_ListAllUserResources_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "users", "user_id", "resources"}, "")) + pattern_ShieldService_CheckResourcePermission_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "check"}, "")) pattern_ShieldService_ListActivities_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "activities"}, "")) @@ -4070,6 +4189,8 @@ var ( forward_ShieldService_UpdateResource_0 = runtime.ForwardResponseMessage + forward_ShieldService_ListAllUserResources_0 = runtime.ForwardResponseMessage + forward_ShieldService_CheckResourcePermission_0 = runtime.ForwardResponseMessage forward_ShieldService_ListActivities_0 = runtime.ForwardResponseMessage diff --git a/proto/v1beta1/shield.pb.validate.go b/proto/v1beta1/shield.pb.validate.go index d94d21cbc..d96ab632e 100644 --- a/proto/v1beta1/shield.pb.validate.go +++ b/proto/v1beta1/shield.pb.validate.go @@ -16714,6 +16714,243 @@ var _ interface { ErrorName() string } = CheckResourceUserPermissionResponseValidationError{} +// Validate checks the field values on ListAllUserResourcesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListAllUserResourcesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListAllUserResourcesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListAllUserResourcesRequestMultiError, or nil if none found. +func (m *ListAllUserResourcesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListAllUserResourcesRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for UserId + + if len(errors) > 0 { + return ListAllUserResourcesRequestMultiError(errors) + } + + return nil +} + +// ListAllUserResourcesRequestMultiError is an error wrapping multiple +// validation errors returned by ListAllUserResourcesRequest.ValidateAll() if +// the designated constraints aren't met. +type ListAllUserResourcesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListAllUserResourcesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListAllUserResourcesRequestMultiError) AllErrors() []error { return m } + +// ListAllUserResourcesRequestValidationError is the validation error returned +// by ListAllUserResourcesRequest.Validate if the designated constraints +// aren't met. +type ListAllUserResourcesRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListAllUserResourcesRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListAllUserResourcesRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListAllUserResourcesRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListAllUserResourcesRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListAllUserResourcesRequestValidationError) ErrorName() string { + return "ListAllUserResourcesRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e ListAllUserResourcesRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListAllUserResourcesRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListAllUserResourcesRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListAllUserResourcesRequestValidationError{} + +// Validate checks the field values on ListAllUserResourcesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListAllUserResourcesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListAllUserResourcesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListAllUserResourcesResponseMultiError, or nil if none found. +func (m *ListAllUserResourcesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListAllUserResourcesResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetResources()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListAllUserResourcesResponseValidationError{ + field: "Resources", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListAllUserResourcesResponseValidationError{ + field: "Resources", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetResources()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListAllUserResourcesResponseValidationError{ + field: "Resources", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return ListAllUserResourcesResponseMultiError(errors) + } + + return nil +} + +// ListAllUserResourcesResponseMultiError is an error wrapping multiple +// validation errors returned by ListAllUserResourcesResponse.ValidateAll() if +// the designated constraints aren't met. +type ListAllUserResourcesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListAllUserResourcesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListAllUserResourcesResponseMultiError) AllErrors() []error { return m } + +// ListAllUserResourcesResponseValidationError is the validation error returned +// by ListAllUserResourcesResponse.Validate if the designated constraints +// aren't met. +type ListAllUserResourcesResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListAllUserResourcesResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListAllUserResourcesResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListAllUserResourcesResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListAllUserResourcesResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListAllUserResourcesResponseValidationError) ErrorName() string { + return "ListAllUserResourcesResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ListAllUserResourcesResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListAllUserResourcesResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListAllUserResourcesResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListAllUserResourcesResponseValidationError{} + // Validate checks the field values on Activity with the rules defined in the // proto definition for this message. If any rules are violated, the first // error encountered is returned, or nil if there are no violations. diff --git a/proto/v1beta1/shield_grpc.pb.go b/proto/v1beta1/shield_grpc.pb.go index f2103efb5..5e9f548d7 100644 --- a/proto/v1beta1/shield_grpc.pb.go +++ b/proto/v1beta1/shield_grpc.pb.go @@ -61,6 +61,7 @@ const ( ShieldService_CreateResource_FullMethodName = "/gotocompany.shield.v1beta1.ShieldService/CreateResource" ShieldService_GetResource_FullMethodName = "/gotocompany.shield.v1beta1.ShieldService/GetResource" ShieldService_UpdateResource_FullMethodName = "/gotocompany.shield.v1beta1.ShieldService/UpdateResource" + ShieldService_ListAllUserResources_FullMethodName = "/gotocompany.shield.v1beta1.ShieldService/ListAllUserResources" ShieldService_CheckResourcePermission_FullMethodName = "/gotocompany.shield.v1beta1.ShieldService/CheckResourcePermission" ShieldService_ListActivities_FullMethodName = "/gotocompany.shield.v1beta1.ShieldService/ListActivities" ) @@ -121,6 +122,7 @@ type ShieldServiceClient interface { CreateResource(ctx context.Context, in *CreateResourceRequest, opts ...grpc.CallOption) (*CreateResourceResponse, error) GetResource(ctx context.Context, in *GetResourceRequest, opts ...grpc.CallOption) (*GetResourceResponse, error) UpdateResource(ctx context.Context, in *UpdateResourceRequest, opts ...grpc.CallOption) (*UpdateResourceResponse, error) + ListAllUserResources(ctx context.Context, in *ListAllUserResourcesRequest, opts ...grpc.CallOption) (*ListAllUserResourcesResponse, error) // Authz CheckResourcePermission(ctx context.Context, in *CheckResourcePermissionRequest, opts ...grpc.CallOption) (*CheckResourcePermissionResponse, error) // Activity @@ -513,6 +515,15 @@ func (c *shieldServiceClient) UpdateResource(ctx context.Context, in *UpdateReso return out, nil } +func (c *shieldServiceClient) ListAllUserResources(ctx context.Context, in *ListAllUserResourcesRequest, opts ...grpc.CallOption) (*ListAllUserResourcesResponse, error) { + out := new(ListAllUserResourcesResponse) + err := c.cc.Invoke(ctx, ShieldService_ListAllUserResources_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *shieldServiceClient) CheckResourcePermission(ctx context.Context, in *CheckResourcePermissionRequest, opts ...grpc.CallOption) (*CheckResourcePermissionResponse, error) { out := new(CheckResourcePermissionResponse) err := c.cc.Invoke(ctx, ShieldService_CheckResourcePermission_FullMethodName, in, out, opts...) @@ -587,6 +598,7 @@ type ShieldServiceServer interface { CreateResource(context.Context, *CreateResourceRequest) (*CreateResourceResponse, error) GetResource(context.Context, *GetResourceRequest) (*GetResourceResponse, error) UpdateResource(context.Context, *UpdateResourceRequest) (*UpdateResourceResponse, error) + ListAllUserResources(context.Context, *ListAllUserResourcesRequest) (*ListAllUserResourcesResponse, error) // Authz CheckResourcePermission(context.Context, *CheckResourcePermissionRequest) (*CheckResourcePermissionResponse, error) // Activity @@ -724,6 +736,9 @@ func (UnimplementedShieldServiceServer) GetResource(context.Context, *GetResourc func (UnimplementedShieldServiceServer) UpdateResource(context.Context, *UpdateResourceRequest) (*UpdateResourceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateResource not implemented") } +func (UnimplementedShieldServiceServer) ListAllUserResources(context.Context, *ListAllUserResourcesRequest) (*ListAllUserResourcesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListAllUserResources not implemented") +} func (UnimplementedShieldServiceServer) CheckResourcePermission(context.Context, *CheckResourcePermissionRequest) (*CheckResourcePermissionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckResourcePermission not implemented") } @@ -1499,6 +1514,24 @@ func _ShieldService_UpdateResource_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _ShieldService_ListAllUserResources_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListAllUserResourcesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ShieldServiceServer).ListAllUserResources(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ShieldService_ListAllUserResources_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ShieldServiceServer).ListAllUserResources(ctx, req.(*ListAllUserResourcesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ShieldService_CheckResourcePermission_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CheckResourcePermissionRequest) if err := dec(in); err != nil { @@ -1710,6 +1743,10 @@ var ShieldService_ServiceDesc = grpc.ServiceDesc{ MethodName: "UpdateResource", Handler: _ShieldService_UpdateResource_Handler, }, + { + MethodName: "ListAllUserResources", + Handler: _ShieldService_ListAllUserResources_Handler, + }, { MethodName: "CheckResourcePermission", Handler: _ShieldService_CheckResourcePermission_Handler, diff --git a/test/e2e_test/testbench/testdata/configs/rules/rule.yaml b/test/e2e_test/testbench/testdata/configs/rules/rule.yaml index ea699021a..0eba2bfa9 100644 --- a/test/e2e_test/testbench/testdata/configs/rules/rule.yaml +++ b/test/e2e_test/testbench/testdata/configs/rules/rule.yaml @@ -1,7 +1,7 @@ rules: - backends: - name: entropy - target: "http://localhost:59723" + target: "http://localhost:57746" frontends: - name: ping path: "/api/ping"