diff --git a/.github/workflows/buf.yml b/.github/workflows/buf.yml index 30e7e80b..a0a61f55 100644 --- a/.github/workflows/buf.yml +++ b/.github/workflows/buf.yml @@ -53,9 +53,9 @@ jobs: # Regenerate gen/ from proto/ and fail if the committed output is stale. - name: Verify generated protobuf output run: make proto-check - # Same gate for the client-SDK stubs (gen/go-client, gen/python, gen/ts) - # vendored into the standalone SDK repos — these use a separate template - # (buf.gen.clients.yaml) that proto-check does not touch. + # Same gate for the vendored TS stubs (gen/ts, consumed by authorizer-js) + # — these use a separate template (buf.gen.clients.yaml) that proto-check + # does not touch. Go/Python stubs moved to dedicated proto packages. - name: Verify generated client SDK stubs run: make proto-check-clients # Compare against the published module so a PR that would break diff --git a/Makefile b/Makefile index f5c6c40c..d774401c 100644 --- a/Makefile +++ b/Makefile @@ -216,16 +216,17 @@ proto-check: proto-gen @git diff --exit-code -- gen/ || (echo "gen/ is stale; run make proto-gen and commit the result" && exit 1) # Client-SDK stub generation (separate template from proto-gen above). Outputs -# gen/go-client, gen/python and gen/ts, which are vendored into the standalone -# SDK repos (authorizer-go, authorizer-python, authorizer-js). NOT covered by -# proto-gen/proto-check, so they need their own regenerate + staleness gate. +# gen/ts, vendored into authorizer-js. Go and Python stubs are no longer +# generated here — they live in the dedicated authorizer-proto-go / +# authorizer-proto-python packages (BSR-driven, consumed as real dependencies). +# NOT covered by proto-gen/proto-check, so gen/ts needs its own staleness gate. proto-gen-clients: proto-tools cd proto && buf dep update && buf generate --template buf.gen.clients.yaml --include-imports -# Fail when proto sources changed but the vendored client stubs were not +# Fail when proto sources changed but the vendored TS stubs were not # regenerated and committed. proto-check-clients: proto-gen-clients - @git diff --exit-code -- gen/go-client gen/python gen/ts || (echo "client SDK stubs are stale; run make proto-gen-clients and commit the result" && exit 1) + @git diff --exit-code -- gen/ts || (echo "client SDK stubs (gen/ts) are stale; run make proto-gen-clients and commit the result" && exit 1) # ---------------------------------------------------------------------------- # Formatting & linting (Go + TypeScript). `make fmt` before committing, diff --git a/gen/go-client/authorizer/v1/admin.pb.go b/gen/go-client/authorizer/v1/admin.pb.go deleted file mode 100644 index b7daa3d8..00000000 --- a/gen/go-client/authorizer/v1/admin.pb.go +++ /dev/null @@ -1,8661 +0,0 @@ -// proto/authorizer/v1/admin.proto -// -// AuthorizerAdminService exposes Authorizer's super-admin-only operations -// (the `_`-prefixed GraphQL queries/mutations). It is registered on the SAME -// grpc.Server and gateway mux as AuthorizerService. Every RPC requires -// super-admin auth (admin session cookie or x-authorizer-admin-secret header) -// except AdminLogin, which establishes it. Admin operations are intentionally -// NOT exposed over MCP. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.35.2 -// protoc (unknown) -// source: authorizer/v1/admin.proto - -package authorizerv1 - -import ( - _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type AdminLoginRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AdminSecret string `protobuf:"bytes,1,opt,name=admin_secret,json=adminSecret,proto3" json:"admin_secret,omitempty"` -} - -func (x *AdminLoginRequest) Reset() { - *x = AdminLoginRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AdminLoginRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AdminLoginRequest) ProtoMessage() {} - -func (x *AdminLoginRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AdminLoginRequest.ProtoReflect.Descriptor instead. -func (*AdminLoginRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{0} -} - -func (x *AdminLoginRequest) GetAdminSecret() string { - if x != nil { - return x.AdminSecret - } - return "" -} - -type AdminLoginResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *AdminLoginResponse) Reset() { - *x = AdminLoginResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AdminLoginResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AdminLoginResponse) ProtoMessage() {} - -func (x *AdminLoginResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AdminLoginResponse.ProtoReflect.Descriptor instead. -func (*AdminLoginResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{1} -} - -func (x *AdminLoginResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type AdminLogoutRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *AdminLogoutRequest) Reset() { - *x = AdminLogoutRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AdminLogoutRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AdminLogoutRequest) ProtoMessage() {} - -func (x *AdminLogoutRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[2] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AdminLogoutRequest.ProtoReflect.Descriptor instead. -func (*AdminLogoutRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{2} -} - -type AdminLogoutResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *AdminLogoutResponse) Reset() { - *x = AdminLogoutResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AdminLogoutResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AdminLogoutResponse) ProtoMessage() {} - -func (x *AdminLogoutResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[3] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AdminLogoutResponse.ProtoReflect.Descriptor instead. -func (*AdminLogoutResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{3} -} - -func (x *AdminLogoutResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type AdminSessionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *AdminSessionRequest) Reset() { - *x = AdminSessionRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AdminSessionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AdminSessionRequest) ProtoMessage() {} - -func (x *AdminSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[4] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AdminSessionRequest.ProtoReflect.Descriptor instead. -func (*AdminSessionRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{4} -} - -type AdminSessionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *AdminSessionResponse) Reset() { - *x = AdminSessionResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AdminSessionResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AdminSessionResponse) ProtoMessage() {} - -func (x *AdminSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[5] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AdminSessionResponse.ProtoReflect.Descriptor instead. -func (*AdminSessionResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{5} -} - -func (x *AdminSessionResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type AdminMetaRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *AdminMetaRequest) Reset() { - *x = AdminMetaRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AdminMetaRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AdminMetaRequest) ProtoMessage() {} - -func (x *AdminMetaRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[6] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AdminMetaRequest.ProtoReflect.Descriptor instead. -func (*AdminMetaRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{6} -} - -type AdminMetaResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AdminMeta *AdminMeta `protobuf:"bytes,1,opt,name=admin_meta,json=adminMeta,proto3" json:"admin_meta,omitempty"` -} - -func (x *AdminMetaResponse) Reset() { - *x = AdminMetaResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AdminMetaResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AdminMetaResponse) ProtoMessage() {} - -func (x *AdminMetaResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[7] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AdminMetaResponse.ProtoReflect.Descriptor instead. -func (*AdminMetaResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{7} -} - -func (x *AdminMetaResponse) GetAdminMeta() *AdminMeta { - if x != nil { - return x.AdminMeta - } - return nil -} - -// AdminMeta mirrors model.AdminMeta exactly (no version field). -type AdminMeta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Roles []string `protobuf:"bytes,1,rep,name=roles,proto3" json:"roles,omitempty"` - DefaultRoles []string `protobuf:"bytes,2,rep,name=default_roles,json=defaultRoles,proto3" json:"default_roles,omitempty"` - ProtectedRoles []string `protobuf:"bytes,3,rep,name=protected_roles,json=protectedRoles,proto3" json:"protected_roles,omitempty"` - IsMultiFactorAuthServiceEnabled bool `protobuf:"varint,4,opt,name=is_multi_factor_auth_service_enabled,json=isMultiFactorAuthServiceEnabled,proto3" json:"is_multi_factor_auth_service_enabled,omitempty"` -} - -func (x *AdminMeta) Reset() { - *x = AdminMeta{} - mi := &file_authorizer_v1_admin_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AdminMeta) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AdminMeta) ProtoMessage() {} - -func (x *AdminMeta) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[8] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AdminMeta.ProtoReflect.Descriptor instead. -func (*AdminMeta) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{8} -} - -func (x *AdminMeta) GetRoles() []string { - if x != nil { - return x.Roles - } - return nil -} - -func (x *AdminMeta) GetDefaultRoles() []string { - if x != nil { - return x.DefaultRoles - } - return nil -} - -func (x *AdminMeta) GetProtectedRoles() []string { - if x != nil { - return x.ProtectedRoles - } - return nil -} - -func (x *AdminMeta) GetIsMultiFactorAuthServiceEnabled() bool { - if x != nil { - return x.IsMultiFactorAuthServiceEnabled - } - return false -} - -type UsersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pagination *PaginationRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` - // query is an optional case-insensitive substring filter matched against - // email, given_name, family_name and nickname. Empty means no filter. - Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` -} - -func (x *UsersRequest) Reset() { - *x = UsersRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UsersRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UsersRequest) ProtoMessage() {} - -func (x *UsersRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[9] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UsersRequest.ProtoReflect.Descriptor instead. -func (*UsersRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{9} -} - -func (x *UsersRequest) GetPagination() *PaginationRequest { - if x != nil { - return x.Pagination - } - return nil -} - -func (x *UsersRequest) GetQuery() string { - if x != nil { - return x.Query - } - return "" -} - -type UsersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Users []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *UsersResponse) Reset() { - *x = UsersResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UsersResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UsersResponse) ProtoMessage() {} - -func (x *UsersResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[10] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UsersResponse.ProtoReflect.Descriptor instead. -func (*UsersResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{10} -} - -func (x *UsersResponse) GetUsers() []*User { - if x != nil { - return x.Users - } - return nil -} - -func (x *UsersResponse) GetPagination() *Pagination { - if x != nil { - return x.Pagination - } - return nil -} - -// UserRequest fetches a single user by id or email; at least one must be set. -type UserRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` -} - -func (x *UserRequest) Reset() { - *x = UserRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UserRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UserRequest) ProtoMessage() {} - -func (x *UserRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[11] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UserRequest.ProtoReflect.Descriptor instead. -func (*UserRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{11} -} - -func (x *UserRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *UserRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -type UserResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` -} - -func (x *UserResponse) Reset() { - *x = UserResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UserResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UserResponse) ProtoMessage() {} - -func (x *UserResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[12] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UserResponse.ProtoReflect.Descriptor instead. -func (*UserResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{12} -} - -func (x *UserResponse) GetUser() *User { - if x != nil { - return x.User - } - return nil -} - -// UpdateUserRequest mirrors model.UpdateUserRequest. Nullable GraphQL inputs use -// proto3 `optional` so an unset field is distinguishable from an empty value -// (e.g. clearing a name vs leaving it untouched, or email_verified=false). -type UpdateUserRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Email *string `protobuf:"bytes,2,opt,name=email,proto3,oneof" json:"email,omitempty"` - EmailVerified *bool `protobuf:"varint,3,opt,name=email_verified,json=emailVerified,proto3,oneof" json:"email_verified,omitempty"` - GivenName *string `protobuf:"bytes,4,opt,name=given_name,json=givenName,proto3,oneof" json:"given_name,omitempty"` - FamilyName *string `protobuf:"bytes,5,opt,name=family_name,json=familyName,proto3,oneof" json:"family_name,omitempty"` - MiddleName *string `protobuf:"bytes,6,opt,name=middle_name,json=middleName,proto3,oneof" json:"middle_name,omitempty"` - Nickname *string `protobuf:"bytes,7,opt,name=nickname,proto3,oneof" json:"nickname,omitempty"` - Gender *string `protobuf:"bytes,8,opt,name=gender,proto3,oneof" json:"gender,omitempty"` - Birthdate *string `protobuf:"bytes,9,opt,name=birthdate,proto3,oneof" json:"birthdate,omitempty"` - PhoneNumber *string `protobuf:"bytes,10,opt,name=phone_number,json=phoneNumber,proto3,oneof" json:"phone_number,omitempty"` - PhoneNumberVerified *bool `protobuf:"varint,11,opt,name=phone_number_verified,json=phoneNumberVerified,proto3,oneof" json:"phone_number_verified,omitempty"` - Picture *string `protobuf:"bytes,12,opt,name=picture,proto3,oneof" json:"picture,omitempty"` - Roles []string `protobuf:"bytes,13,rep,name=roles,proto3" json:"roles,omitempty"` - IsMultiFactorAuthEnabled *bool `protobuf:"varint,14,opt,name=is_multi_factor_auth_enabled,json=isMultiFactorAuthEnabled,proto3,oneof" json:"is_multi_factor_auth_enabled,omitempty"` - AppData *AppData `protobuf:"bytes,15,opt,name=app_data,json=appData,proto3" json:"app_data,omitempty"` - // Mirrors UpdateUserRequest.reset_mfa in GraphQL — see schema.graphqls' - // doc comment on that field for exact semantics (clears mfa_locked_at, - // is_multi_factor_auth_enabled, has_skipped_mfa_setup_at, deletes all - // authenticators/passkeys). - ResetMfa *bool `protobuf:"varint,16,opt,name=reset_mfa,json=resetMfa,proto3,oneof" json:"reset_mfa,omitempty"` -} - -func (x *UpdateUserRequest) Reset() { - *x = UpdateUserRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateUserRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateUserRequest) ProtoMessage() {} - -func (x *UpdateUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[13] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateUserRequest.ProtoReflect.Descriptor instead. -func (*UpdateUserRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{13} -} - -func (x *UpdateUserRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *UpdateUserRequest) GetEmail() string { - if x != nil && x.Email != nil { - return *x.Email - } - return "" -} - -func (x *UpdateUserRequest) GetEmailVerified() bool { - if x != nil && x.EmailVerified != nil { - return *x.EmailVerified - } - return false -} - -func (x *UpdateUserRequest) GetGivenName() string { - if x != nil && x.GivenName != nil { - return *x.GivenName - } - return "" -} - -func (x *UpdateUserRequest) GetFamilyName() string { - if x != nil && x.FamilyName != nil { - return *x.FamilyName - } - return "" -} - -func (x *UpdateUserRequest) GetMiddleName() string { - if x != nil && x.MiddleName != nil { - return *x.MiddleName - } - return "" -} - -func (x *UpdateUserRequest) GetNickname() string { - if x != nil && x.Nickname != nil { - return *x.Nickname - } - return "" -} - -func (x *UpdateUserRequest) GetGender() string { - if x != nil && x.Gender != nil { - return *x.Gender - } - return "" -} - -func (x *UpdateUserRequest) GetBirthdate() string { - if x != nil && x.Birthdate != nil { - return *x.Birthdate - } - return "" -} - -func (x *UpdateUserRequest) GetPhoneNumber() string { - if x != nil && x.PhoneNumber != nil { - return *x.PhoneNumber - } - return "" -} - -func (x *UpdateUserRequest) GetPhoneNumberVerified() bool { - if x != nil && x.PhoneNumberVerified != nil { - return *x.PhoneNumberVerified - } - return false -} - -func (x *UpdateUserRequest) GetPicture() string { - if x != nil && x.Picture != nil { - return *x.Picture - } - return "" -} - -func (x *UpdateUserRequest) GetRoles() []string { - if x != nil { - return x.Roles - } - return nil -} - -func (x *UpdateUserRequest) GetIsMultiFactorAuthEnabled() bool { - if x != nil && x.IsMultiFactorAuthEnabled != nil { - return *x.IsMultiFactorAuthEnabled - } - return false -} - -func (x *UpdateUserRequest) GetAppData() *AppData { - if x != nil { - return x.AppData - } - return nil -} - -func (x *UpdateUserRequest) GetResetMfa() bool { - if x != nil && x.ResetMfa != nil { - return *x.ResetMfa - } - return false -} - -type UpdateUserResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` -} - -func (x *UpdateUserResponse) Reset() { - *x = UpdateUserResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateUserResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateUserResponse) ProtoMessage() {} - -func (x *UpdateUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[14] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateUserResponse.ProtoReflect.Descriptor instead. -func (*UpdateUserResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{14} -} - -func (x *UpdateUserResponse) GetUser() *User { - if x != nil { - return x.User - } - return nil -} - -// DeleteUserRequest mirrors model.DeleteUserRequest. -type DeleteUserRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` -} - -func (x *DeleteUserRequest) Reset() { - *x = DeleteUserRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteUserRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteUserRequest) ProtoMessage() {} - -func (x *DeleteUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[15] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteUserRequest.ProtoReflect.Descriptor instead. -func (*DeleteUserRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{15} -} - -func (x *DeleteUserRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -type DeleteUserResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *DeleteUserResponse) Reset() { - *x = DeleteUserResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteUserResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteUserResponse) ProtoMessage() {} - -func (x *DeleteUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[16] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteUserResponse.ProtoReflect.Descriptor instead. -func (*DeleteUserResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{16} -} - -func (x *DeleteUserResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type VerificationRequestsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pagination *PaginationRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *VerificationRequestsRequest) Reset() { - *x = VerificationRequestsRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VerificationRequestsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VerificationRequestsRequest) ProtoMessage() {} - -func (x *VerificationRequestsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[17] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VerificationRequestsRequest.ProtoReflect.Descriptor instead. -func (*VerificationRequestsRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{17} -} - -func (x *VerificationRequestsRequest) GetPagination() *PaginationRequest { - if x != nil { - return x.Pagination - } - return nil -} - -type VerificationRequestsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - VerificationRequests []*VerificationRequest `protobuf:"bytes,1,rep,name=verification_requests,json=verificationRequests,proto3" json:"verification_requests,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *VerificationRequestsResponse) Reset() { - *x = VerificationRequestsResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VerificationRequestsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VerificationRequestsResponse) ProtoMessage() {} - -func (x *VerificationRequestsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[18] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VerificationRequestsResponse.ProtoReflect.Descriptor instead. -func (*VerificationRequestsResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{18} -} - -func (x *VerificationRequestsResponse) GetVerificationRequests() []*VerificationRequest { - if x != nil { - return x.VerificationRequests - } - return nil -} - -func (x *VerificationRequestsResponse) GetPagination() *Pagination { - if x != nil { - return x.Pagination - } - return nil -} - -// VerificationRequest mirrors model.VerificationRequest field-for-field. -type VerificationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Identifier string `protobuf:"bytes,2,opt,name=identifier,proto3" json:"identifier,omitempty"` - Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` - Email string `protobuf:"bytes,4,opt,name=email,proto3" json:"email,omitempty"` - Expires int64 `protobuf:"varint,5,opt,name=expires,proto3" json:"expires,omitempty"` - CreatedAt int64 `protobuf:"varint,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt int64 `protobuf:"varint,7,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` - Nonce string `protobuf:"bytes,8,opt,name=nonce,proto3" json:"nonce,omitempty"` - RedirectUri string `protobuf:"bytes,9,opt,name=redirect_uri,json=redirectUri,proto3" json:"redirect_uri,omitempty"` -} - -func (x *VerificationRequest) Reset() { - *x = VerificationRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VerificationRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VerificationRequest) ProtoMessage() {} - -func (x *VerificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[19] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VerificationRequest.ProtoReflect.Descriptor instead. -func (*VerificationRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{19} -} - -func (x *VerificationRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *VerificationRequest) GetIdentifier() string { - if x != nil { - return x.Identifier - } - return "" -} - -func (x *VerificationRequest) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *VerificationRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *VerificationRequest) GetExpires() int64 { - if x != nil { - return x.Expires - } - return 0 -} - -func (x *VerificationRequest) GetCreatedAt() int64 { - if x != nil { - return x.CreatedAt - } - return 0 -} - -func (x *VerificationRequest) GetUpdatedAt() int64 { - if x != nil { - return x.UpdatedAt - } - return 0 -} - -func (x *VerificationRequest) GetNonce() string { - if x != nil { - return x.Nonce - } - return "" -} - -func (x *VerificationRequest) GetRedirectUri() string { - if x != nil { - return x.RedirectUri - } - return "" -} - -// RevokeAccessRequest mirrors model.UpdateAccessRequest (a single user id). It -// is kept distinct from EnableAccessRequest per buf's one-message-per-RPC rule. -type RevokeAccessRequest 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"` -} - -func (x *RevokeAccessRequest) Reset() { - *x = RevokeAccessRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RevokeAccessRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RevokeAccessRequest) ProtoMessage() {} - -func (x *RevokeAccessRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[20] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RevokeAccessRequest.ProtoReflect.Descriptor instead. -func (*RevokeAccessRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{20} -} - -func (x *RevokeAccessRequest) GetUserId() string { - if x != nil { - return x.UserId - } - return "" -} - -type RevokeAccessResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *RevokeAccessResponse) Reset() { - *x = RevokeAccessResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RevokeAccessResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RevokeAccessResponse) ProtoMessage() {} - -func (x *RevokeAccessResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[21] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RevokeAccessResponse.ProtoReflect.Descriptor instead. -func (*RevokeAccessResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{21} -} - -func (x *RevokeAccessResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// EnableAccessRequest mirrors model.UpdateAccessRequest (a single user id). It -// is kept distinct from RevokeAccessRequest per buf's one-message-per-RPC rule. -type EnableAccessRequest 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"` -} - -func (x *EnableAccessRequest) Reset() { - *x = EnableAccessRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *EnableAccessRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EnableAccessRequest) ProtoMessage() {} - -func (x *EnableAccessRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[22] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EnableAccessRequest.ProtoReflect.Descriptor instead. -func (*EnableAccessRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{22} -} - -func (x *EnableAccessRequest) GetUserId() string { - if x != nil { - return x.UserId - } - return "" -} - -type EnableAccessResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *EnableAccessResponse) Reset() { - *x = EnableAccessResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *EnableAccessResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EnableAccessResponse) ProtoMessage() {} - -func (x *EnableAccessResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[23] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EnableAccessResponse.ProtoReflect.Descriptor instead. -func (*EnableAccessResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{23} -} - -func (x *EnableAccessResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// InviteMembersRequest mirrors model.InviteMemberRequest. redirect_uri is -// optional; when unset the configured app URL is used. -type InviteMembersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Emails []string `protobuf:"bytes,1,rep,name=emails,proto3" json:"emails,omitempty"` - RedirectUri *string `protobuf:"bytes,2,opt,name=redirect_uri,json=redirectUri,proto3,oneof" json:"redirect_uri,omitempty"` -} - -func (x *InviteMembersRequest) Reset() { - *x = InviteMembersRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *InviteMembersRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InviteMembersRequest) ProtoMessage() {} - -func (x *InviteMembersRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[24] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InviteMembersRequest.ProtoReflect.Descriptor instead. -func (*InviteMembersRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{24} -} - -func (x *InviteMembersRequest) GetEmails() []string { - if x != nil { - return x.Emails - } - return nil -} - -func (x *InviteMembersRequest) GetRedirectUri() string { - if x != nil && x.RedirectUri != nil { - return *x.RedirectUri - } - return "" -} - -// InviteMembersResponse mirrors model.InviteMembersResponse (a message plus the -// list of newly invited users). -type InviteMembersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - Users []*User `protobuf:"bytes,2,rep,name=users,proto3" json:"users,omitempty"` -} - -func (x *InviteMembersResponse) Reset() { - *x = InviteMembersResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *InviteMembersResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InviteMembersResponse) ProtoMessage() {} - -func (x *InviteMembersResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[25] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InviteMembersResponse.ProtoReflect.Descriptor instead. -func (*InviteMembersResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{25} -} - -func (x *InviteMembersResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -func (x *InviteMembersResponse) GetUsers() []*User { - if x != nil { - return x.Users - } - return nil -} - -// Webhook mirrors model.Webhook field-for-field. headers is a free-form JSON -// object (reusing the shared AppData wrapper around google.protobuf.Struct). -type Webhook struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - EventName string `protobuf:"bytes,2,opt,name=event_name,json=eventName,proto3" json:"event_name,omitempty"` - EventDescription string `protobuf:"bytes,3,opt,name=event_description,json=eventDescription,proto3" json:"event_description,omitempty"` - Endpoint string `protobuf:"bytes,4,opt,name=endpoint,proto3" json:"endpoint,omitempty"` - Enabled bool `protobuf:"varint,5,opt,name=enabled,proto3" json:"enabled,omitempty"` - Headers *AppData `protobuf:"bytes,6,opt,name=headers,proto3" json:"headers,omitempty"` - CreatedAt int64 `protobuf:"varint,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt int64 `protobuf:"varint,8,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` -} - -func (x *Webhook) Reset() { - *x = Webhook{} - mi := &file_authorizer_v1_admin_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Webhook) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Webhook) ProtoMessage() {} - -func (x *Webhook) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[26] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Webhook.ProtoReflect.Descriptor instead. -func (*Webhook) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{26} -} - -func (x *Webhook) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Webhook) GetEventName() string { - if x != nil { - return x.EventName - } - return "" -} - -func (x *Webhook) GetEventDescription() string { - if x != nil { - return x.EventDescription - } - return "" -} - -func (x *Webhook) GetEndpoint() string { - if x != nil { - return x.Endpoint - } - return "" -} - -func (x *Webhook) GetEnabled() bool { - if x != nil { - return x.Enabled - } - return false -} - -func (x *Webhook) GetHeaders() *AppData { - if x != nil { - return x.Headers - } - return nil -} - -func (x *Webhook) GetCreatedAt() int64 { - if x != nil { - return x.CreatedAt - } - return 0 -} - -func (x *Webhook) GetUpdatedAt() int64 { - if x != nil { - return x.UpdatedAt - } - return 0 -} - -// WebhookLog mirrors model.WebhookLog field-for-field. -type WebhookLog struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - HttpStatus int64 `protobuf:"varint,2,opt,name=http_status,json=httpStatus,proto3" json:"http_status,omitempty"` - Response string `protobuf:"bytes,3,opt,name=response,proto3" json:"response,omitempty"` - Request string `protobuf:"bytes,4,opt,name=request,proto3" json:"request,omitempty"` - WebhookId string `protobuf:"bytes,5,opt,name=webhook_id,json=webhookId,proto3" json:"webhook_id,omitempty"` - CreatedAt int64 `protobuf:"varint,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt int64 `protobuf:"varint,7,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` -} - -func (x *WebhookLog) Reset() { - *x = WebhookLog{} - mi := &file_authorizer_v1_admin_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *WebhookLog) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WebhookLog) ProtoMessage() {} - -func (x *WebhookLog) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[27] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WebhookLog.ProtoReflect.Descriptor instead. -func (*WebhookLog) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{27} -} - -func (x *WebhookLog) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *WebhookLog) GetHttpStatus() int64 { - if x != nil { - return x.HttpStatus - } - return 0 -} - -func (x *WebhookLog) GetResponse() string { - if x != nil { - return x.Response - } - return "" -} - -func (x *WebhookLog) GetRequest() string { - if x != nil { - return x.Request - } - return "" -} - -func (x *WebhookLog) GetWebhookId() string { - if x != nil { - return x.WebhookId - } - return "" -} - -func (x *WebhookLog) GetCreatedAt() int64 { - if x != nil { - return x.CreatedAt - } - return 0 -} - -func (x *WebhookLog) GetUpdatedAt() int64 { - if x != nil { - return x.UpdatedAt - } - return 0 -} - -// AddWebhookRequest mirrors model.AddWebhookRequest. event_description is -// optional; when unset it defaults to the event name with dots replaced by -// spaces. -type AddWebhookRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventName string `protobuf:"bytes,1,opt,name=event_name,json=eventName,proto3" json:"event_name,omitempty"` - EventDescription *string `protobuf:"bytes,2,opt,name=event_description,json=eventDescription,proto3,oneof" json:"event_description,omitempty"` - Endpoint string `protobuf:"bytes,3,opt,name=endpoint,proto3" json:"endpoint,omitempty"` - Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` - Headers *AppData `protobuf:"bytes,5,opt,name=headers,proto3" json:"headers,omitempty"` -} - -func (x *AddWebhookRequest) Reset() { - *x = AddWebhookRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AddWebhookRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AddWebhookRequest) ProtoMessage() {} - -func (x *AddWebhookRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[28] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AddWebhookRequest.ProtoReflect.Descriptor instead. -func (*AddWebhookRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{28} -} - -func (x *AddWebhookRequest) GetEventName() string { - if x != nil { - return x.EventName - } - return "" -} - -func (x *AddWebhookRequest) GetEventDescription() string { - if x != nil && x.EventDescription != nil { - return *x.EventDescription - } - return "" -} - -func (x *AddWebhookRequest) GetEndpoint() string { - if x != nil { - return x.Endpoint - } - return "" -} - -func (x *AddWebhookRequest) GetEnabled() bool { - if x != nil { - return x.Enabled - } - return false -} - -func (x *AddWebhookRequest) GetHeaders() *AppData { - if x != nil { - return x.Headers - } - return nil -} - -type AddWebhookResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *AddWebhookResponse) Reset() { - *x = AddWebhookResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AddWebhookResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AddWebhookResponse) ProtoMessage() {} - -func (x *AddWebhookResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[29] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AddWebhookResponse.ProtoReflect.Descriptor instead. -func (*AddWebhookResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{29} -} - -func (x *AddWebhookResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// UpdateWebhookRequest mirrors model.UpdateWebhookRequest. Nullable GraphQL -// inputs use proto3 `optional` so an unset field is distinguishable from an -// empty value. -type UpdateWebhookRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - EventName *string `protobuf:"bytes,2,opt,name=event_name,json=eventName,proto3,oneof" json:"event_name,omitempty"` - EventDescription *string `protobuf:"bytes,3,opt,name=event_description,json=eventDescription,proto3,oneof" json:"event_description,omitempty"` - Endpoint *string `protobuf:"bytes,4,opt,name=endpoint,proto3,oneof" json:"endpoint,omitempty"` - Enabled *bool `protobuf:"varint,5,opt,name=enabled,proto3,oneof" json:"enabled,omitempty"` - Headers *AppData `protobuf:"bytes,6,opt,name=headers,proto3" json:"headers,omitempty"` -} - -func (x *UpdateWebhookRequest) Reset() { - *x = UpdateWebhookRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateWebhookRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateWebhookRequest) ProtoMessage() {} - -func (x *UpdateWebhookRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[30] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateWebhookRequest.ProtoReflect.Descriptor instead. -func (*UpdateWebhookRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{30} -} - -func (x *UpdateWebhookRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *UpdateWebhookRequest) GetEventName() string { - if x != nil && x.EventName != nil { - return *x.EventName - } - return "" -} - -func (x *UpdateWebhookRequest) GetEventDescription() string { - if x != nil && x.EventDescription != nil { - return *x.EventDescription - } - return "" -} - -func (x *UpdateWebhookRequest) GetEndpoint() string { - if x != nil && x.Endpoint != nil { - return *x.Endpoint - } - return "" -} - -func (x *UpdateWebhookRequest) GetEnabled() bool { - if x != nil && x.Enabled != nil { - return *x.Enabled - } - return false -} - -func (x *UpdateWebhookRequest) GetHeaders() *AppData { - if x != nil { - return x.Headers - } - return nil -} - -type UpdateWebhookResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *UpdateWebhookResponse) Reset() { - *x = UpdateWebhookResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateWebhookResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateWebhookResponse) ProtoMessage() {} - -func (x *UpdateWebhookResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[31] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateWebhookResponse.ProtoReflect.Descriptor instead. -func (*UpdateWebhookResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{31} -} - -func (x *UpdateWebhookResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// DeleteWebhookRequest mirrors model.WebhookRequest (a single webhook id). It is -// kept distinct from GetWebhookRequest per buf's one-message-per-RPC rule. -type DeleteWebhookRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteWebhookRequest) Reset() { - *x = DeleteWebhookRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteWebhookRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteWebhookRequest) ProtoMessage() {} - -func (x *DeleteWebhookRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[32] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteWebhookRequest.ProtoReflect.Descriptor instead. -func (*DeleteWebhookRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{32} -} - -func (x *DeleteWebhookRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type DeleteWebhookResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *DeleteWebhookResponse) Reset() { - *x = DeleteWebhookResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteWebhookResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteWebhookResponse) ProtoMessage() {} - -func (x *DeleteWebhookResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[33] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteWebhookResponse.ProtoReflect.Descriptor instead. -func (*DeleteWebhookResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{33} -} - -func (x *DeleteWebhookResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// GetWebhookRequest mirrors model.WebhookRequest (a single webhook id). It is -// kept distinct from DeleteWebhookRequest per buf's one-message-per-RPC rule. -type GetWebhookRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *GetWebhookRequest) Reset() { - *x = GetWebhookRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetWebhookRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetWebhookRequest) ProtoMessage() {} - -func (x *GetWebhookRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[34] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetWebhookRequest.ProtoReflect.Descriptor instead. -func (*GetWebhookRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{34} -} - -func (x *GetWebhookRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type GetWebhookResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Webhook *Webhook `protobuf:"bytes,1,opt,name=webhook,proto3" json:"webhook,omitempty"` -} - -func (x *GetWebhookResponse) Reset() { - *x = GetWebhookResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetWebhookResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetWebhookResponse) ProtoMessage() {} - -func (x *GetWebhookResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[35] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetWebhookResponse.ProtoReflect.Descriptor instead. -func (*GetWebhookResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{35} -} - -func (x *GetWebhookResponse) GetWebhook() *Webhook { - if x != nil { - return x.Webhook - } - return nil -} - -type WebhooksRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pagination *PaginationRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *WebhooksRequest) Reset() { - *x = WebhooksRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *WebhooksRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WebhooksRequest) ProtoMessage() {} - -func (x *WebhooksRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[36] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WebhooksRequest.ProtoReflect.Descriptor instead. -func (*WebhooksRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{36} -} - -func (x *WebhooksRequest) GetPagination() *PaginationRequest { - if x != nil { - return x.Pagination - } - return nil -} - -type WebhooksResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Webhooks []*Webhook `protobuf:"bytes,1,rep,name=webhooks,proto3" json:"webhooks,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *WebhooksResponse) Reset() { - *x = WebhooksResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *WebhooksResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WebhooksResponse) ProtoMessage() {} - -func (x *WebhooksResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[37] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WebhooksResponse.ProtoReflect.Descriptor instead. -func (*WebhooksResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{37} -} - -func (x *WebhooksResponse) GetWebhooks() []*Webhook { - if x != nil { - return x.Webhooks - } - return nil -} - -func (x *WebhooksResponse) GetPagination() *Pagination { - if x != nil { - return x.Pagination - } - return nil -} - -// WebhookLogsRequest mirrors model.ListWebhookLogRequest. webhook_id is -// optional; when unset logs for all webhooks are returned. -type WebhookLogsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pagination *PaginationRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` - WebhookId *string `protobuf:"bytes,2,opt,name=webhook_id,json=webhookId,proto3,oneof" json:"webhook_id,omitempty"` -} - -func (x *WebhookLogsRequest) Reset() { - *x = WebhookLogsRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *WebhookLogsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WebhookLogsRequest) ProtoMessage() {} - -func (x *WebhookLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[38] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WebhookLogsRequest.ProtoReflect.Descriptor instead. -func (*WebhookLogsRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{38} -} - -func (x *WebhookLogsRequest) GetPagination() *PaginationRequest { - if x != nil { - return x.Pagination - } - return nil -} - -func (x *WebhookLogsRequest) GetWebhookId() string { - if x != nil && x.WebhookId != nil { - return *x.WebhookId - } - return "" -} - -type WebhookLogsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - WebhookLogs []*WebhookLog `protobuf:"bytes,1,rep,name=webhook_logs,json=webhookLogs,proto3" json:"webhook_logs,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *WebhookLogsResponse) Reset() { - *x = WebhookLogsResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *WebhookLogsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WebhookLogsResponse) ProtoMessage() {} - -func (x *WebhookLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[39] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WebhookLogsResponse.ProtoReflect.Descriptor instead. -func (*WebhookLogsResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{39} -} - -func (x *WebhookLogsResponse) GetWebhookLogs() []*WebhookLog { - if x != nil { - return x.WebhookLogs - } - return nil -} - -func (x *WebhookLogsResponse) GetPagination() *Pagination { - if x != nil { - return x.Pagination - } - return nil -} - -// TestEndpointRequest mirrors model.TestEndpointRequest. event_description is -// optional and unused by the test payload but accepted for parity. -type TestEndpointRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Endpoint string `protobuf:"bytes,1,opt,name=endpoint,proto3" json:"endpoint,omitempty"` - EventName string `protobuf:"bytes,2,opt,name=event_name,json=eventName,proto3" json:"event_name,omitempty"` - EventDescription *string `protobuf:"bytes,3,opt,name=event_description,json=eventDescription,proto3,oneof" json:"event_description,omitempty"` - Headers *AppData `protobuf:"bytes,4,opt,name=headers,proto3" json:"headers,omitempty"` -} - -func (x *TestEndpointRequest) Reset() { - *x = TestEndpointRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *TestEndpointRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TestEndpointRequest) ProtoMessage() {} - -func (x *TestEndpointRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[40] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TestEndpointRequest.ProtoReflect.Descriptor instead. -func (*TestEndpointRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{40} -} - -func (x *TestEndpointRequest) GetEndpoint() string { - if x != nil { - return x.Endpoint - } - return "" -} - -func (x *TestEndpointRequest) GetEventName() string { - if x != nil { - return x.EventName - } - return "" -} - -func (x *TestEndpointRequest) GetEventDescription() string { - if x != nil && x.EventDescription != nil { - return *x.EventDescription - } - return "" -} - -func (x *TestEndpointRequest) GetHeaders() *AppData { - if x != nil { - return x.Headers - } - return nil -} - -// TestEndpointResponse mirrors model.TestEndpointResponse. -type TestEndpointResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HttpStatus int64 `protobuf:"varint,1,opt,name=http_status,json=httpStatus,proto3" json:"http_status,omitempty"` - Response string `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"` -} - -func (x *TestEndpointResponse) Reset() { - *x = TestEndpointResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *TestEndpointResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TestEndpointResponse) ProtoMessage() {} - -func (x *TestEndpointResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[41] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TestEndpointResponse.ProtoReflect.Descriptor instead. -func (*TestEndpointResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{41} -} - -func (x *TestEndpointResponse) GetHttpStatus() int64 { - if x != nil { - return x.HttpStatus - } - return 0 -} - -func (x *TestEndpointResponse) GetResponse() string { - if x != nil { - return x.Response - } - return "" -} - -// EmailTemplate mirrors model.EmailTemplate field-for-field. -type EmailTemplate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - EventName string `protobuf:"bytes,2,opt,name=event_name,json=eventName,proto3" json:"event_name,omitempty"` - Template string `protobuf:"bytes,3,opt,name=template,proto3" json:"template,omitempty"` - Design string `protobuf:"bytes,4,opt,name=design,proto3" json:"design,omitempty"` - Subject string `protobuf:"bytes,5,opt,name=subject,proto3" json:"subject,omitempty"` - CreatedAt int64 `protobuf:"varint,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt int64 `protobuf:"varint,7,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` -} - -func (x *EmailTemplate) Reset() { - *x = EmailTemplate{} - mi := &file_authorizer_v1_admin_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *EmailTemplate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EmailTemplate) ProtoMessage() {} - -func (x *EmailTemplate) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[42] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EmailTemplate.ProtoReflect.Descriptor instead. -func (*EmailTemplate) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{42} -} - -func (x *EmailTemplate) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *EmailTemplate) GetEventName() string { - if x != nil { - return x.EventName - } - return "" -} - -func (x *EmailTemplate) GetTemplate() string { - if x != nil { - return x.Template - } - return "" -} - -func (x *EmailTemplate) GetDesign() string { - if x != nil { - return x.Design - } - return "" -} - -func (x *EmailTemplate) GetSubject() string { - if x != nil { - return x.Subject - } - return "" -} - -func (x *EmailTemplate) GetCreatedAt() int64 { - if x != nil { - return x.CreatedAt - } - return 0 -} - -func (x *EmailTemplate) GetUpdatedAt() int64 { - if x != nil { - return x.UpdatedAt - } - return 0 -} - -// AddEmailTemplateRequest mirrors model.AddEmailTemplateRequest. design is -// optional. -type AddEmailTemplateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventName string `protobuf:"bytes,1,opt,name=event_name,json=eventName,proto3" json:"event_name,omitempty"` - Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` - Template string `protobuf:"bytes,3,opt,name=template,proto3" json:"template,omitempty"` - Design *string `protobuf:"bytes,4,opt,name=design,proto3,oneof" json:"design,omitempty"` -} - -func (x *AddEmailTemplateRequest) Reset() { - *x = AddEmailTemplateRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AddEmailTemplateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AddEmailTemplateRequest) ProtoMessage() {} - -func (x *AddEmailTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[43] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AddEmailTemplateRequest.ProtoReflect.Descriptor instead. -func (*AddEmailTemplateRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{43} -} - -func (x *AddEmailTemplateRequest) GetEventName() string { - if x != nil { - return x.EventName - } - return "" -} - -func (x *AddEmailTemplateRequest) GetSubject() string { - if x != nil { - return x.Subject - } - return "" -} - -func (x *AddEmailTemplateRequest) GetTemplate() string { - if x != nil { - return x.Template - } - return "" -} - -func (x *AddEmailTemplateRequest) GetDesign() string { - if x != nil && x.Design != nil { - return *x.Design - } - return "" -} - -type AddEmailTemplateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *AddEmailTemplateResponse) Reset() { - *x = AddEmailTemplateResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[44] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AddEmailTemplateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AddEmailTemplateResponse) ProtoMessage() {} - -func (x *AddEmailTemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[44] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AddEmailTemplateResponse.ProtoReflect.Descriptor instead. -func (*AddEmailTemplateResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{44} -} - -func (x *AddEmailTemplateResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// UpdateEmailTemplateRequest mirrors model.UpdateEmailTemplateRequest. Nullable -// GraphQL inputs use proto3 `optional` so an unset field is distinguishable from -// an empty value. -type UpdateEmailTemplateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - EventName *string `protobuf:"bytes,2,opt,name=event_name,json=eventName,proto3,oneof" json:"event_name,omitempty"` - Template *string `protobuf:"bytes,3,opt,name=template,proto3,oneof" json:"template,omitempty"` - Subject *string `protobuf:"bytes,4,opt,name=subject,proto3,oneof" json:"subject,omitempty"` - Design *string `protobuf:"bytes,5,opt,name=design,proto3,oneof" json:"design,omitempty"` -} - -func (x *UpdateEmailTemplateRequest) Reset() { - *x = UpdateEmailTemplateRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[45] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateEmailTemplateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateEmailTemplateRequest) ProtoMessage() {} - -func (x *UpdateEmailTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[45] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateEmailTemplateRequest.ProtoReflect.Descriptor instead. -func (*UpdateEmailTemplateRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{45} -} - -func (x *UpdateEmailTemplateRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *UpdateEmailTemplateRequest) GetEventName() string { - if x != nil && x.EventName != nil { - return *x.EventName - } - return "" -} - -func (x *UpdateEmailTemplateRequest) GetTemplate() string { - if x != nil && x.Template != nil { - return *x.Template - } - return "" -} - -func (x *UpdateEmailTemplateRequest) GetSubject() string { - if x != nil && x.Subject != nil { - return *x.Subject - } - return "" -} - -func (x *UpdateEmailTemplateRequest) GetDesign() string { - if x != nil && x.Design != nil { - return *x.Design - } - return "" -} - -type UpdateEmailTemplateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *UpdateEmailTemplateResponse) Reset() { - *x = UpdateEmailTemplateResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[46] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateEmailTemplateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateEmailTemplateResponse) ProtoMessage() {} - -func (x *UpdateEmailTemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[46] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateEmailTemplateResponse.ProtoReflect.Descriptor instead. -func (*UpdateEmailTemplateResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{46} -} - -func (x *UpdateEmailTemplateResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// DeleteEmailTemplateRequest mirrors model.DeleteEmailTemplateRequest (a single -// email template id). -type DeleteEmailTemplateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteEmailTemplateRequest) Reset() { - *x = DeleteEmailTemplateRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteEmailTemplateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteEmailTemplateRequest) ProtoMessage() {} - -func (x *DeleteEmailTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[47] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteEmailTemplateRequest.ProtoReflect.Descriptor instead. -func (*DeleteEmailTemplateRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{47} -} - -func (x *DeleteEmailTemplateRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type DeleteEmailTemplateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *DeleteEmailTemplateResponse) Reset() { - *x = DeleteEmailTemplateResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteEmailTemplateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteEmailTemplateResponse) ProtoMessage() {} - -func (x *DeleteEmailTemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[48] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteEmailTemplateResponse.ProtoReflect.Descriptor instead. -func (*DeleteEmailTemplateResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{48} -} - -func (x *DeleteEmailTemplateResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type EmailTemplatesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pagination *PaginationRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *EmailTemplatesRequest) Reset() { - *x = EmailTemplatesRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *EmailTemplatesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EmailTemplatesRequest) ProtoMessage() {} - -func (x *EmailTemplatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[49] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EmailTemplatesRequest.ProtoReflect.Descriptor instead. -func (*EmailTemplatesRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{49} -} - -func (x *EmailTemplatesRequest) GetPagination() *PaginationRequest { - if x != nil { - return x.Pagination - } - return nil -} - -type EmailTemplatesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EmailTemplates []*EmailTemplate `protobuf:"bytes,1,rep,name=email_templates,json=emailTemplates,proto3" json:"email_templates,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *EmailTemplatesResponse) Reset() { - *x = EmailTemplatesResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[50] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *EmailTemplatesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EmailTemplatesResponse) ProtoMessage() {} - -func (x *EmailTemplatesResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[50] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EmailTemplatesResponse.ProtoReflect.Descriptor instead. -func (*EmailTemplatesResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{50} -} - -func (x *EmailTemplatesResponse) GetEmailTemplates() []*EmailTemplate { - if x != nil { - return x.EmailTemplates - } - return nil -} - -func (x *EmailTemplatesResponse) GetPagination() *Pagination { - if x != nil { - return x.Pagination - } - return nil -} - -// AuditLog mirrors model.AuditLog field-for-field. -type AuditLog struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ActorId string `protobuf:"bytes,2,opt,name=actor_id,json=actorId,proto3" json:"actor_id,omitempty"` - ActorType string `protobuf:"bytes,3,opt,name=actor_type,json=actorType,proto3" json:"actor_type,omitempty"` - ActorEmail string `protobuf:"bytes,4,opt,name=actor_email,json=actorEmail,proto3" json:"actor_email,omitempty"` - Action string `protobuf:"bytes,5,opt,name=action,proto3" json:"action,omitempty"` - ResourceType string `protobuf:"bytes,6,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - ResourceId string `protobuf:"bytes,7,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - IpAddress string `protobuf:"bytes,8,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` - UserAgent string `protobuf:"bytes,9,opt,name=user_agent,json=userAgent,proto3" json:"user_agent,omitempty"` - Metadata string `protobuf:"bytes,10,opt,name=metadata,proto3" json:"metadata,omitempty"` - CreatedAt int64 `protobuf:"varint,11,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` -} - -func (x *AuditLog) Reset() { - *x = AuditLog{} - mi := &file_authorizer_v1_admin_proto_msgTypes[51] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AuditLog) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AuditLog) ProtoMessage() {} - -func (x *AuditLog) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[51] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AuditLog.ProtoReflect.Descriptor instead. -func (*AuditLog) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{51} -} - -func (x *AuditLog) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *AuditLog) GetActorId() string { - if x != nil { - return x.ActorId - } - return "" -} - -func (x *AuditLog) GetActorType() string { - if x != nil { - return x.ActorType - } - return "" -} - -func (x *AuditLog) GetActorEmail() string { - if x != nil { - return x.ActorEmail - } - return "" -} - -func (x *AuditLog) GetAction() string { - if x != nil { - return x.Action - } - return "" -} - -func (x *AuditLog) GetResourceType() string { - if x != nil { - return x.ResourceType - } - return "" -} - -func (x *AuditLog) GetResourceId() string { - if x != nil { - return x.ResourceId - } - return "" -} - -func (x *AuditLog) GetIpAddress() string { - if x != nil { - return x.IpAddress - } - return "" -} - -func (x *AuditLog) GetUserAgent() string { - if x != nil { - return x.UserAgent - } - return "" -} - -func (x *AuditLog) GetMetadata() string { - if x != nil { - return x.Metadata - } - return "" -} - -func (x *AuditLog) GetCreatedAt() int64 { - if x != nil { - return x.CreatedAt - } - return 0 -} - -// AuditLogsRequest mirrors model.ListAuditLogRequest. All filter fields are -// optional; when unset no filtering is applied for that field. -type AuditLogsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pagination *PaginationRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` - Action *string `protobuf:"bytes,2,opt,name=action,proto3,oneof" json:"action,omitempty"` - ActorId *string `protobuf:"bytes,3,opt,name=actor_id,json=actorId,proto3,oneof" json:"actor_id,omitempty"` - ResourceType *string `protobuf:"bytes,4,opt,name=resource_type,json=resourceType,proto3,oneof" json:"resource_type,omitempty"` - ResourceId *string `protobuf:"bytes,5,opt,name=resource_id,json=resourceId,proto3,oneof" json:"resource_id,omitempty"` - FromTimestamp *int64 `protobuf:"varint,6,opt,name=from_timestamp,json=fromTimestamp,proto3,oneof" json:"from_timestamp,omitempty"` - ToTimestamp *int64 `protobuf:"varint,7,opt,name=to_timestamp,json=toTimestamp,proto3,oneof" json:"to_timestamp,omitempty"` -} - -func (x *AuditLogsRequest) Reset() { - *x = AuditLogsRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[52] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AuditLogsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AuditLogsRequest) ProtoMessage() {} - -func (x *AuditLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[52] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AuditLogsRequest.ProtoReflect.Descriptor instead. -func (*AuditLogsRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{52} -} - -func (x *AuditLogsRequest) GetPagination() *PaginationRequest { - if x != nil { - return x.Pagination - } - return nil -} - -func (x *AuditLogsRequest) GetAction() string { - if x != nil && x.Action != nil { - return *x.Action - } - return "" -} - -func (x *AuditLogsRequest) GetActorId() string { - if x != nil && x.ActorId != nil { - return *x.ActorId - } - return "" -} - -func (x *AuditLogsRequest) GetResourceType() string { - if x != nil && x.ResourceType != nil { - return *x.ResourceType - } - return "" -} - -func (x *AuditLogsRequest) GetResourceId() string { - if x != nil && x.ResourceId != nil { - return *x.ResourceId - } - return "" -} - -func (x *AuditLogsRequest) GetFromTimestamp() int64 { - if x != nil && x.FromTimestamp != nil { - return *x.FromTimestamp - } - return 0 -} - -func (x *AuditLogsRequest) GetToTimestamp() int64 { - if x != nil && x.ToTimestamp != nil { - return *x.ToTimestamp - } - return 0 -} - -type AuditLogsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AuditLogs []*AuditLog `protobuf:"bytes,1,rep,name=audit_logs,json=auditLogs,proto3" json:"audit_logs,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *AuditLogsResponse) Reset() { - *x = AuditLogsResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AuditLogsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AuditLogsResponse) ProtoMessage() {} - -func (x *AuditLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[53] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AuditLogsResponse.ProtoReflect.Descriptor instead. -func (*AuditLogsResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{53} -} - -func (x *AuditLogsResponse) GetAuditLogs() []*AuditLog { - if x != nil { - return x.AuditLogs - } - return nil -} - -func (x *AuditLogsResponse) GetPagination() *Pagination { - if x != nil { - return x.Pagination - } - return nil -} - -// FgaModel is a fine-grained authorization model: its id and DSL form. Mirrors -// model.FgaModel field-for-field. An empty model (both fields empty) is the -// valid "no model written yet" state. -type FgaModel struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Dsl string `protobuf:"bytes,2,opt,name=dsl,proto3" json:"dsl,omitempty"` -} - -func (x *FgaModel) Reset() { - *x = FgaModel{} - mi := &file_authorizer_v1_admin_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaModel) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaModel) ProtoMessage() {} - -func (x *FgaModel) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[54] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaModel.ProtoReflect.Descriptor instead. -func (*FgaModel) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{54} -} - -func (x *FgaModel) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *FgaModel) GetDsl() string { - if x != nil { - return x.Dsl - } - return "" -} - -// FgaTuple is one persisted relationship tuple returned by FgaReadTuples. -// Mirrors model.FgaTuple field-for-field (the read shape; writes use the shared -// FgaTupleInput). -type FgaTuple struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` - Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` - Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` -} - -func (x *FgaTuple) Reset() { - *x = FgaTuple{} - mi := &file_authorizer_v1_admin_proto_msgTypes[55] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaTuple) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaTuple) ProtoMessage() {} - -func (x *FgaTuple) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[55] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaTuple.ProtoReflect.Descriptor instead. -func (*FgaTuple) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{55} -} - -func (x *FgaTuple) GetUser() string { - if x != nil { - return x.User - } - return "" -} - -func (x *FgaTuple) GetRelation() string { - if x != nil { - return x.Relation - } - return "" -} - -func (x *FgaTuple) GetObject() string { - if x != nil { - return x.Object - } - return "" -} - -// FgaGetModelRequest takes no parameters; the active model is implied. -type FgaGetModelRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *FgaGetModelRequest) Reset() { - *x = FgaGetModelRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaGetModelRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaGetModelRequest) ProtoMessage() {} - -func (x *FgaGetModelRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[56] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaGetModelRequest.ProtoReflect.Descriptor instead. -func (*FgaGetModelRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{56} -} - -type FgaGetModelResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Model *FgaModel `protobuf:"bytes,1,opt,name=model,proto3" json:"model,omitempty"` -} - -func (x *FgaGetModelResponse) Reset() { - *x = FgaGetModelResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[57] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaGetModelResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaGetModelResponse) ProtoMessage() {} - -func (x *FgaGetModelResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[57] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaGetModelResponse.ProtoReflect.Descriptor instead. -func (*FgaGetModelResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{57} -} - -func (x *FgaGetModelResponse) GetModel() *FgaModel { - if x != nil { - return x.Model - } - return nil -} - -// FgaWriteModelRequest mirrors model.FgaWriteModelInput (the model DSL). -type FgaWriteModelRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Dsl string `protobuf:"bytes,1,opt,name=dsl,proto3" json:"dsl,omitempty"` -} - -func (x *FgaWriteModelRequest) Reset() { - *x = FgaWriteModelRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[58] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaWriteModelRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaWriteModelRequest) ProtoMessage() {} - -func (x *FgaWriteModelRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[58] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaWriteModelRequest.ProtoReflect.Descriptor instead. -func (*FgaWriteModelRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{58} -} - -func (x *FgaWriteModelRequest) GetDsl() string { - if x != nil { - return x.Dsl - } - return "" -} - -type FgaWriteModelResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Model *FgaModel `protobuf:"bytes,1,opt,name=model,proto3" json:"model,omitempty"` -} - -func (x *FgaWriteModelResponse) Reset() { - *x = FgaWriteModelResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[59] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaWriteModelResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaWriteModelResponse) ProtoMessage() {} - -func (x *FgaWriteModelResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[59] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaWriteModelResponse.ProtoReflect.Descriptor instead. -func (*FgaWriteModelResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{59} -} - -func (x *FgaWriteModelResponse) GetModel() *FgaModel { - if x != nil { - return x.Model - } - return nil -} - -// FgaWriteTuplesRequest mirrors model.FgaWriteTuplesInput, reusing the shared -// FgaTupleInput message. -type FgaWriteTuplesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Tuples []*FgaTupleInput `protobuf:"bytes,1,rep,name=tuples,proto3" json:"tuples,omitempty"` -} - -func (x *FgaWriteTuplesRequest) Reset() { - *x = FgaWriteTuplesRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[60] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaWriteTuplesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaWriteTuplesRequest) ProtoMessage() {} - -func (x *FgaWriteTuplesRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[60] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaWriteTuplesRequest.ProtoReflect.Descriptor instead. -func (*FgaWriteTuplesRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{60} -} - -func (x *FgaWriteTuplesRequest) GetTuples() []*FgaTupleInput { - if x != nil { - return x.Tuples - } - return nil -} - -type FgaWriteTuplesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *FgaWriteTuplesResponse) Reset() { - *x = FgaWriteTuplesResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[61] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaWriteTuplesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaWriteTuplesResponse) ProtoMessage() {} - -func (x *FgaWriteTuplesResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[61] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaWriteTuplesResponse.ProtoReflect.Descriptor instead. -func (*FgaWriteTuplesResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{61} -} - -func (x *FgaWriteTuplesResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// FgaDeleteTuplesRequest mirrors model.FgaWriteTuplesInput (same shape as a -// write; the tuples to remove). -type FgaDeleteTuplesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Tuples []*FgaTupleInput `protobuf:"bytes,1,rep,name=tuples,proto3" json:"tuples,omitempty"` -} - -func (x *FgaDeleteTuplesRequest) Reset() { - *x = FgaDeleteTuplesRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[62] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaDeleteTuplesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaDeleteTuplesRequest) ProtoMessage() {} - -func (x *FgaDeleteTuplesRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[62] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaDeleteTuplesRequest.ProtoReflect.Descriptor instead. -func (*FgaDeleteTuplesRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{62} -} - -func (x *FgaDeleteTuplesRequest) GetTuples() []*FgaTupleInput { - if x != nil { - return x.Tuples - } - return nil -} - -type FgaDeleteTuplesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *FgaDeleteTuplesResponse) Reset() { - *x = FgaDeleteTuplesResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[63] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaDeleteTuplesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaDeleteTuplesResponse) ProtoMessage() {} - -func (x *FgaDeleteTuplesResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[63] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaDeleteTuplesResponse.ProtoReflect.Descriptor instead. -func (*FgaDeleteTuplesResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{63} -} - -func (x *FgaDeleteTuplesResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// FgaReadTuplesRequest mirrors model.FgaReadTuplesInput. All filter fields are -// optional; an empty filter reads all tuples (paginated). -type FgaReadTuplesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - User *string `protobuf:"bytes,1,opt,name=user,proto3,oneof" json:"user,omitempty"` - Relation *string `protobuf:"bytes,2,opt,name=relation,proto3,oneof" json:"relation,omitempty"` - Object *string `protobuf:"bytes,3,opt,name=object,proto3,oneof" json:"object,omitempty"` - PageSize *int64 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3,oneof" json:"page_size,omitempty"` - ContinuationToken *string `protobuf:"bytes,5,opt,name=continuation_token,json=continuationToken,proto3,oneof" json:"continuation_token,omitempty"` -} - -func (x *FgaReadTuplesRequest) Reset() { - *x = FgaReadTuplesRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[64] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaReadTuplesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaReadTuplesRequest) ProtoMessage() {} - -func (x *FgaReadTuplesRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[64] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaReadTuplesRequest.ProtoReflect.Descriptor instead. -func (*FgaReadTuplesRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{64} -} - -func (x *FgaReadTuplesRequest) GetUser() string { - if x != nil && x.User != nil { - return *x.User - } - return "" -} - -func (x *FgaReadTuplesRequest) GetRelation() string { - if x != nil && x.Relation != nil { - return *x.Relation - } - return "" -} - -func (x *FgaReadTuplesRequest) GetObject() string { - if x != nil && x.Object != nil { - return *x.Object - } - return "" -} - -func (x *FgaReadTuplesRequest) GetPageSize() int64 { - if x != nil && x.PageSize != nil { - return *x.PageSize - } - return 0 -} - -func (x *FgaReadTuplesRequest) GetContinuationToken() string { - if x != nil && x.ContinuationToken != nil { - return *x.ContinuationToken - } - return "" -} - -type FgaReadTuplesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Tuples []*FgaTuple `protobuf:"bytes,1,rep,name=tuples,proto3" json:"tuples,omitempty"` - ContinuationToken *string `protobuf:"bytes,2,opt,name=continuation_token,json=continuationToken,proto3,oneof" json:"continuation_token,omitempty"` -} - -func (x *FgaReadTuplesResponse) Reset() { - *x = FgaReadTuplesResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[65] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaReadTuplesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaReadTuplesResponse) ProtoMessage() {} - -func (x *FgaReadTuplesResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[65] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaReadTuplesResponse.ProtoReflect.Descriptor instead. -func (*FgaReadTuplesResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{65} -} - -func (x *FgaReadTuplesResponse) GetTuples() []*FgaTuple { - if x != nil { - return x.Tuples - } - return nil -} - -func (x *FgaReadTuplesResponse) GetContinuationToken() string { - if x != nil && x.ContinuationToken != nil { - return *x.ContinuationToken - } - return "" -} - -// FgaListUsersRequest mirrors model.FgaListUsersInput. -type FgaListUsersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Object string `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` - Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` - UserType string `protobuf:"bytes,3,opt,name=user_type,json=userType,proto3" json:"user_type,omitempty"` -} - -func (x *FgaListUsersRequest) Reset() { - *x = FgaListUsersRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[66] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaListUsersRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaListUsersRequest) ProtoMessage() {} - -func (x *FgaListUsersRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[66] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaListUsersRequest.ProtoReflect.Descriptor instead. -func (*FgaListUsersRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{66} -} - -func (x *FgaListUsersRequest) GetObject() string { - if x != nil { - return x.Object - } - return "" -} - -func (x *FgaListUsersRequest) GetRelation() string { - if x != nil { - return x.Relation - } - return "" -} - -func (x *FgaListUsersRequest) GetUserType() string { - if x != nil { - return x.UserType - } - return "" -} - -type FgaListUsersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Users []string `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` -} - -func (x *FgaListUsersResponse) Reset() { - *x = FgaListUsersResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[67] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaListUsersResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaListUsersResponse) ProtoMessage() {} - -func (x *FgaListUsersResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[67] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaListUsersResponse.ProtoReflect.Descriptor instead. -func (*FgaListUsersResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{67} -} - -func (x *FgaListUsersResponse) GetUsers() []string { - if x != nil { - return x.Users - } - return nil -} - -// FgaExpandRequest mirrors model.FgaExpandInput. -type FgaExpandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Relation string `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"` - Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"` -} - -func (x *FgaExpandRequest) Reset() { - *x = FgaExpandRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[68] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaExpandRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaExpandRequest) ProtoMessage() {} - -func (x *FgaExpandRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[68] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaExpandRequest.ProtoReflect.Descriptor instead. -func (*FgaExpandRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{68} -} - -func (x *FgaExpandRequest) GetRelation() string { - if x != nil { - return x.Relation - } - return "" -} - -func (x *FgaExpandRequest) GetObject() string { - if x != nil { - return x.Object - } - return "" -} - -type FgaExpandResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Tree string `protobuf:"bytes,1,opt,name=tree,proto3" json:"tree,omitempty"` -} - -func (x *FgaExpandResponse) Reset() { - *x = FgaExpandResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[69] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaExpandResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaExpandResponse) ProtoMessage() {} - -func (x *FgaExpandResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[69] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaExpandResponse.ProtoReflect.Descriptor instead. -func (*FgaExpandResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{69} -} - -func (x *FgaExpandResponse) GetTree() string { - if x != nil { - return x.Tree - } - return "" -} - -// FgaResetRequest takes no parameters; the whole store is reset. -type FgaResetRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *FgaResetRequest) Reset() { - *x = FgaResetRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[70] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaResetRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaResetRequest) ProtoMessage() {} - -func (x *FgaResetRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[70] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaResetRequest.ProtoReflect.Descriptor instead. -func (*FgaResetRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{70} -} - -type FgaResetResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *FgaResetResponse) Reset() { - *x = FgaResetResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[71] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaResetResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaResetResponse) ProtoMessage() {} - -func (x *FgaResetResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[71] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaResetResponse.ProtoReflect.Descriptor instead. -func (*FgaResetResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{71} -} - -func (x *FgaResetResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// Client mirrors model.Client field-for-field. The client -// secret is deliberately ABSENT (matching the GraphQL type): it is surfaced -// exactly once, only via CreateClientResponse.client_secret, and is -// never returned by any get/list/update path. -type Client struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - AllowedScopes []string `protobuf:"bytes,4,rep,name=allowed_scopes,json=allowedScopes,proto3" json:"allowed_scopes,omitempty"` - IsActive bool `protobuf:"varint,5,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` - CreatedAt int64 `protobuf:"varint,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt int64 `protobuf:"varint,7,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` - // client_id is the public OAuth identifier presented at the authorize/token - // endpoints, distinct from id (internal surrogate key). - ClientId string `protobuf:"bytes,8,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` -} - -func (x *Client) Reset() { - *x = Client{} - mi := &file_authorizer_v1_admin_proto_msgTypes[72] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Client) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Client) ProtoMessage() {} - -func (x *Client) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[72] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Client.ProtoReflect.Descriptor instead. -func (*Client) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{72} -} - -func (x *Client) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Client) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Client) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Client) GetAllowedScopes() []string { - if x != nil { - return x.AllowedScopes - } - return nil -} - -func (x *Client) GetIsActive() bool { - if x != nil { - return x.IsActive - } - return false -} - -func (x *Client) GetCreatedAt() int64 { - if x != nil { - return x.CreatedAt - } - return 0 -} - -func (x *Client) GetUpdatedAt() int64 { - if x != nil { - return x.UpdatedAt - } - return 0 -} - -func (x *Client) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -// CreateClientRequest mirrors model.CreateClientRequest. -// description is optional; allowed_scopes must be non-empty (an empty scope set -// is DENY-ALL and is rejected by the service layer). -type CreateClientRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` - AllowedScopes []string `protobuf:"bytes,3,rep,name=allowed_scopes,json=allowedScopes,proto3" json:"allowed_scopes,omitempty"` -} - -func (x *CreateClientRequest) Reset() { - *x = CreateClientRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[73] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *CreateClientRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateClientRequest) ProtoMessage() {} - -func (x *CreateClientRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[73] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateClientRequest.ProtoReflect.Descriptor instead. -func (*CreateClientRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{73} -} - -func (x *CreateClientRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *CreateClientRequest) GetDescription() string { - if x != nil && x.Description != nil { - return *x.Description - } - return "" -} - -func (x *CreateClientRequest) GetAllowedScopes() []string { - if x != nil { - return x.AllowedScopes - } - return nil -} - -// CreateClientResponse carries the created service account plus the -// plaintext client_secret, returned exactly once. This is the ONLY admin -// message with a secret field; RotateClientSecret reuses it. -type CreateClientResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Client *Client `protobuf:"bytes,1,opt,name=client,proto3" json:"client,omitempty"` - ClientSecret string `protobuf:"bytes,2,opt,name=client_secret,json=clientSecret,proto3" json:"client_secret,omitempty"` -} - -func (x *CreateClientResponse) Reset() { - *x = CreateClientResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[74] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *CreateClientResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateClientResponse) ProtoMessage() {} - -func (x *CreateClientResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[74] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateClientResponse.ProtoReflect.Descriptor instead. -func (*CreateClientResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{74} -} - -func (x *CreateClientResponse) GetClient() *Client { - if x != nil { - return x.Client - } - return nil -} - -func (x *CreateClientResponse) GetClientSecret() string { - if x != nil { - return x.ClientSecret - } - return "" -} - -// UpdateClientRequest mirrors model.UpdateClientRequest. -// Nullable GraphQL inputs use proto3 `optional`. allowed_scopes, when non-empty, -// replaces the scope set; the service rejects a set that normalizes to empty. -type UpdateClientRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` - Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` - AllowedScopes []string `protobuf:"bytes,4,rep,name=allowed_scopes,json=allowedScopes,proto3" json:"allowed_scopes,omitempty"` - IsActive *bool `protobuf:"varint,5,opt,name=is_active,json=isActive,proto3,oneof" json:"is_active,omitempty"` -} - -func (x *UpdateClientRequest) Reset() { - *x = UpdateClientRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[75] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateClientRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateClientRequest) ProtoMessage() {} - -func (x *UpdateClientRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[75] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateClientRequest.ProtoReflect.Descriptor instead. -func (*UpdateClientRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{75} -} - -func (x *UpdateClientRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *UpdateClientRequest) GetName() string { - if x != nil && x.Name != nil { - return *x.Name - } - return "" -} - -func (x *UpdateClientRequest) GetDescription() string { - if x != nil && x.Description != nil { - return *x.Description - } - return "" -} - -func (x *UpdateClientRequest) GetAllowedScopes() []string { - if x != nil { - return x.AllowedScopes - } - return nil -} - -func (x *UpdateClientRequest) GetIsActive() bool { - if x != nil && x.IsActive != nil { - return *x.IsActive - } - return false -} - -type UpdateClientResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Client *Client `protobuf:"bytes,1,opt,name=client,proto3" json:"client,omitempty"` -} - -func (x *UpdateClientResponse) Reset() { - *x = UpdateClientResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[76] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateClientResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateClientResponse) ProtoMessage() {} - -func (x *UpdateClientResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[76] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateClientResponse.ProtoReflect.Descriptor instead. -func (*UpdateClientResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{76} -} - -func (x *UpdateClientResponse) GetClient() *Client { - if x != nil { - return x.Client - } - return nil -} - -// DeleteClientRequest mirrors model.ClientRequest (a single -// service account id). Kept distinct from GetClientRequest and -// RotateClientSecretRequest per buf's one-message-per-RPC rule. -type DeleteClientRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteClientRequest) Reset() { - *x = DeleteClientRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[77] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteClientRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteClientRequest) ProtoMessage() {} - -func (x *DeleteClientRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[77] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteClientRequest.ProtoReflect.Descriptor instead. -func (*DeleteClientRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{77} -} - -func (x *DeleteClientRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type DeleteClientResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *DeleteClientResponse) Reset() { - *x = DeleteClientResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[78] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteClientResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteClientResponse) ProtoMessage() {} - -func (x *DeleteClientResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[78] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteClientResponse.ProtoReflect.Descriptor instead. -func (*DeleteClientResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{78} -} - -func (x *DeleteClientResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// RotateClientSecretRequest mirrors model.ClientRequest (a -// single service account id). Kept distinct from DeleteClientRequest and -// GetClientRequest per buf's one-message-per-RPC rule. -type RotateClientSecretRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *RotateClientSecretRequest) Reset() { - *x = RotateClientSecretRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[79] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RotateClientSecretRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RotateClientSecretRequest) ProtoMessage() {} - -func (x *RotateClientSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[79] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RotateClientSecretRequest.ProtoReflect.Descriptor instead. -func (*RotateClientSecretRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{79} -} - -func (x *RotateClientSecretRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -// GetClientRequest mirrors model.ClientRequest (a single service -// account id). Kept distinct from DeleteClientRequest and -// RotateClientSecretRequest per buf's one-message-per-RPC rule. -type GetClientRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *GetClientRequest) Reset() { - *x = GetClientRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[80] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetClientRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetClientRequest) ProtoMessage() {} - -func (x *GetClientRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[80] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetClientRequest.ProtoReflect.Descriptor instead. -func (*GetClientRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{80} -} - -func (x *GetClientRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type GetClientResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Client *Client `protobuf:"bytes,1,opt,name=client,proto3" json:"client,omitempty"` -} - -func (x *GetClientResponse) Reset() { - *x = GetClientResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[81] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetClientResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetClientResponse) ProtoMessage() {} - -func (x *GetClientResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[81] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetClientResponse.ProtoReflect.Descriptor instead. -func (*GetClientResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{81} -} - -func (x *GetClientResponse) GetClient() *Client { - if x != nil { - return x.Client - } - return nil -} - -type ClientsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pagination *PaginationRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *ClientsRequest) Reset() { - *x = ClientsRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[82] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ClientsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientsRequest) ProtoMessage() {} - -func (x *ClientsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[82] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientsRequest.ProtoReflect.Descriptor instead. -func (*ClientsRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{82} -} - -func (x *ClientsRequest) GetPagination() *PaginationRequest { - if x != nil { - return x.Pagination - } - return nil -} - -type ClientsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Clients []*Client `protobuf:"bytes,1,rep,name=clients,proto3" json:"clients,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *ClientsResponse) Reset() { - *x = ClientsResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[83] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ClientsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientsResponse) ProtoMessage() {} - -func (x *ClientsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[83] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientsResponse.ProtoReflect.Descriptor instead. -func (*ClientsResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{83} -} - -func (x *ClientsResponse) GetClients() []*Client { - if x != nil { - return x.Clients - } - return nil -} - -func (x *ClientsResponse) GetPagination() *Pagination { - if x != nil { - return x.Pagination - } - return nil -} - -// TrustedIssuer mirrors model.TrustedIssuer field-for-field. It references its -// parent via service_account_id (not app_id). Optional pointer fields collapse -// to zero values on the wire. -type TrustedIssuer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ServiceAccountId string `protobuf:"bytes,2,opt,name=service_account_id,json=serviceAccountId,proto3" json:"service_account_id,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - IssuerUrl string `protobuf:"bytes,4,opt,name=issuer_url,json=issuerUrl,proto3" json:"issuer_url,omitempty"` - KeySourceType string `protobuf:"bytes,5,opt,name=key_source_type,json=keySourceType,proto3" json:"key_source_type,omitempty"` - JwksUrl string `protobuf:"bytes,6,opt,name=jwks_url,json=jwksUrl,proto3" json:"jwks_url,omitempty"` - ExpectedAud string `protobuf:"bytes,7,opt,name=expected_aud,json=expectedAud,proto3" json:"expected_aud,omitempty"` - SubjectClaim string `protobuf:"bytes,8,opt,name=subject_claim,json=subjectClaim,proto3" json:"subject_claim,omitempty"` - IssuerType string `protobuf:"bytes,9,opt,name=issuer_type,json=issuerType,proto3" json:"issuer_type,omitempty"` - IsActive bool `protobuf:"varint,10,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` - SpiffeRefreshHintSeconds int64 `protobuf:"varint,11,opt,name=spiffe_refresh_hint_seconds,json=spiffeRefreshHintSeconds,proto3" json:"spiffe_refresh_hint_seconds,omitempty"` - CreatedAt int64 `protobuf:"varint,12,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt int64 `protobuf:"varint,13,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` - // allowed_subjects: comma-separated exact subject allow-list. Empty = deny-all. - AllowedSubjects string `protobuf:"bytes,14,opt,name=allowed_subjects,json=allowedSubjects,proto3" json:"allowed_subjects,omitempty"` - // enable_token_review activates online Kubernetes TokenReview validation. - EnableTokenReview bool `protobuf:"varint,15,opt,name=enable_token_review,json=enableTokenReview,proto3" json:"enable_token_review,omitempty"` - // kubernetes_api_server_url is the API server called for TokenReview (https). - KubernetesApiServerUrl string `protobuf:"bytes,16,opt,name=kubernetes_api_server_url,json=kubernetesApiServerUrl,proto3" json:"kubernetes_api_server_url,omitempty"` -} - -func (x *TrustedIssuer) Reset() { - *x = TrustedIssuer{} - mi := &file_authorizer_v1_admin_proto_msgTypes[84] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *TrustedIssuer) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TrustedIssuer) ProtoMessage() {} - -func (x *TrustedIssuer) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[84] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TrustedIssuer.ProtoReflect.Descriptor instead. -func (*TrustedIssuer) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{84} -} - -func (x *TrustedIssuer) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *TrustedIssuer) GetServiceAccountId() string { - if x != nil { - return x.ServiceAccountId - } - return "" -} - -func (x *TrustedIssuer) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *TrustedIssuer) GetIssuerUrl() string { - if x != nil { - return x.IssuerUrl - } - return "" -} - -func (x *TrustedIssuer) GetKeySourceType() string { - if x != nil { - return x.KeySourceType - } - return "" -} - -func (x *TrustedIssuer) GetJwksUrl() string { - if x != nil { - return x.JwksUrl - } - return "" -} - -func (x *TrustedIssuer) GetExpectedAud() string { - if x != nil { - return x.ExpectedAud - } - return "" -} - -func (x *TrustedIssuer) GetSubjectClaim() string { - if x != nil { - return x.SubjectClaim - } - return "" -} - -func (x *TrustedIssuer) GetIssuerType() string { - if x != nil { - return x.IssuerType - } - return "" -} - -func (x *TrustedIssuer) GetIsActive() bool { - if x != nil { - return x.IsActive - } - return false -} - -func (x *TrustedIssuer) GetSpiffeRefreshHintSeconds() int64 { - if x != nil { - return x.SpiffeRefreshHintSeconds - } - return 0 -} - -func (x *TrustedIssuer) GetCreatedAt() int64 { - if x != nil { - return x.CreatedAt - } - return 0 -} - -func (x *TrustedIssuer) GetUpdatedAt() int64 { - if x != nil { - return x.UpdatedAt - } - return 0 -} - -func (x *TrustedIssuer) GetAllowedSubjects() string { - if x != nil { - return x.AllowedSubjects - } - return "" -} - -func (x *TrustedIssuer) GetEnableTokenReview() bool { - if x != nil { - return x.EnableTokenReview - } - return false -} - -func (x *TrustedIssuer) GetKubernetesApiServerUrl() string { - if x != nil { - return x.KubernetesApiServerUrl - } - return "" -} - -// AddTrustedIssuerRequest mirrors model.AddTrustedIssuerRequest. jwks_url, -// subject_claim, and spiffe_refresh_hint_seconds are optional; subject_claim -// defaults to "sub" when unset. -type AddTrustedIssuerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServiceAccountId string `protobuf:"bytes,1,opt,name=service_account_id,json=serviceAccountId,proto3" json:"service_account_id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - IssuerUrl string `protobuf:"bytes,3,opt,name=issuer_url,json=issuerUrl,proto3" json:"issuer_url,omitempty"` - KeySourceType string `protobuf:"bytes,4,opt,name=key_source_type,json=keySourceType,proto3" json:"key_source_type,omitempty"` - JwksUrl *string `protobuf:"bytes,5,opt,name=jwks_url,json=jwksUrl,proto3,oneof" json:"jwks_url,omitempty"` - ExpectedAud string `protobuf:"bytes,6,opt,name=expected_aud,json=expectedAud,proto3" json:"expected_aud,omitempty"` - SubjectClaim *string `protobuf:"bytes,7,opt,name=subject_claim,json=subjectClaim,proto3,oneof" json:"subject_claim,omitempty"` - IssuerType string `protobuf:"bytes,8,opt,name=issuer_type,json=issuerType,proto3" json:"issuer_type,omitempty"` - SpiffeRefreshHintSeconds *int64 `protobuf:"varint,9,opt,name=spiffe_refresh_hint_seconds,json=spiffeRefreshHintSeconds,proto3,oneof" json:"spiffe_refresh_hint_seconds,omitempty"` - // allowed_subjects: comma-separated exact subject allow-list. Omitted = deny-all. - AllowedSubjects *string `protobuf:"bytes,10,opt,name=allowed_subjects,json=allowedSubjects,proto3,oneof" json:"allowed_subjects,omitempty"` - // enable_token_review turns on online Kubernetes TokenReview validation. - // kubernetes_api_server_url is required (https) when this is true. - EnableTokenReview *bool `protobuf:"varint,11,opt,name=enable_token_review,json=enableTokenReview,proto3,oneof" json:"enable_token_review,omitempty"` - KubernetesApiServerUrl *string `protobuf:"bytes,12,opt,name=kubernetes_api_server_url,json=kubernetesApiServerUrl,proto3,oneof" json:"kubernetes_api_server_url,omitempty"` -} - -func (x *AddTrustedIssuerRequest) Reset() { - *x = AddTrustedIssuerRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[85] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AddTrustedIssuerRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AddTrustedIssuerRequest) ProtoMessage() {} - -func (x *AddTrustedIssuerRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[85] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AddTrustedIssuerRequest.ProtoReflect.Descriptor instead. -func (*AddTrustedIssuerRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{85} -} - -func (x *AddTrustedIssuerRequest) GetServiceAccountId() string { - if x != nil { - return x.ServiceAccountId - } - return "" -} - -func (x *AddTrustedIssuerRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *AddTrustedIssuerRequest) GetIssuerUrl() string { - if x != nil { - return x.IssuerUrl - } - return "" -} - -func (x *AddTrustedIssuerRequest) GetKeySourceType() string { - if x != nil { - return x.KeySourceType - } - return "" -} - -func (x *AddTrustedIssuerRequest) GetJwksUrl() string { - if x != nil && x.JwksUrl != nil { - return *x.JwksUrl - } - return "" -} - -func (x *AddTrustedIssuerRequest) GetExpectedAud() string { - if x != nil { - return x.ExpectedAud - } - return "" -} - -func (x *AddTrustedIssuerRequest) GetSubjectClaim() string { - if x != nil && x.SubjectClaim != nil { - return *x.SubjectClaim - } - return "" -} - -func (x *AddTrustedIssuerRequest) GetIssuerType() string { - if x != nil { - return x.IssuerType - } - return "" -} - -func (x *AddTrustedIssuerRequest) GetSpiffeRefreshHintSeconds() int64 { - if x != nil && x.SpiffeRefreshHintSeconds != nil { - return *x.SpiffeRefreshHintSeconds - } - return 0 -} - -func (x *AddTrustedIssuerRequest) GetAllowedSubjects() string { - if x != nil && x.AllowedSubjects != nil { - return *x.AllowedSubjects - } - return "" -} - -func (x *AddTrustedIssuerRequest) GetEnableTokenReview() bool { - if x != nil && x.EnableTokenReview != nil { - return *x.EnableTokenReview - } - return false -} - -func (x *AddTrustedIssuerRequest) GetKubernetesApiServerUrl() string { - if x != nil && x.KubernetesApiServerUrl != nil { - return *x.KubernetesApiServerUrl - } - return "" -} - -type AddTrustedIssuerResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TrustedIssuer *TrustedIssuer `protobuf:"bytes,1,opt,name=trusted_issuer,json=trustedIssuer,proto3" json:"trusted_issuer,omitempty"` -} - -func (x *AddTrustedIssuerResponse) Reset() { - *x = AddTrustedIssuerResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[86] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AddTrustedIssuerResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AddTrustedIssuerResponse) ProtoMessage() {} - -func (x *AddTrustedIssuerResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[86] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AddTrustedIssuerResponse.ProtoReflect.Descriptor instead. -func (*AddTrustedIssuerResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{86} -} - -func (x *AddTrustedIssuerResponse) GetTrustedIssuer() *TrustedIssuer { - if x != nil { - return x.TrustedIssuer - } - return nil -} - -// UpdateTrustedIssuerRequest mirrors model.UpdateTrustedIssuerRequest. Nullable -// GraphQL inputs use proto3 `optional` so an unset field is distinguishable from -// an empty value. -type UpdateTrustedIssuerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` - JwksUrl *string `protobuf:"bytes,3,opt,name=jwks_url,json=jwksUrl,proto3,oneof" json:"jwks_url,omitempty"` - ExpectedAud *string `protobuf:"bytes,4,opt,name=expected_aud,json=expectedAud,proto3,oneof" json:"expected_aud,omitempty"` - IsActive *bool `protobuf:"varint,5,opt,name=is_active,json=isActive,proto3,oneof" json:"is_active,omitempty"` - SpiffeRefreshHintSeconds *int64 `protobuf:"varint,6,opt,name=spiffe_refresh_hint_seconds,json=spiffeRefreshHintSeconds,proto3,oneof" json:"spiffe_refresh_hint_seconds,omitempty"` - // allowed_subjects: comma-separated exact subject allow-list. Empty = deny-all. - AllowedSubjects *string `protobuf:"bytes,7,opt,name=allowed_subjects,json=allowedSubjects,proto3,oneof" json:"allowed_subjects,omitempty"` - // enable_token_review / kubernetes_api_server_url: when the effective - // enable_token_review is true, kubernetes_api_server_url must be a non-empty - // https URL. - EnableTokenReview *bool `protobuf:"varint,8,opt,name=enable_token_review,json=enableTokenReview,proto3,oneof" json:"enable_token_review,omitempty"` - KubernetesApiServerUrl *string `protobuf:"bytes,9,opt,name=kubernetes_api_server_url,json=kubernetesApiServerUrl,proto3,oneof" json:"kubernetes_api_server_url,omitempty"` -} - -func (x *UpdateTrustedIssuerRequest) Reset() { - *x = UpdateTrustedIssuerRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[87] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateTrustedIssuerRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateTrustedIssuerRequest) ProtoMessage() {} - -func (x *UpdateTrustedIssuerRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[87] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateTrustedIssuerRequest.ProtoReflect.Descriptor instead. -func (*UpdateTrustedIssuerRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{87} -} - -func (x *UpdateTrustedIssuerRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *UpdateTrustedIssuerRequest) GetName() string { - if x != nil && x.Name != nil { - return *x.Name - } - return "" -} - -func (x *UpdateTrustedIssuerRequest) GetJwksUrl() string { - if x != nil && x.JwksUrl != nil { - return *x.JwksUrl - } - return "" -} - -func (x *UpdateTrustedIssuerRequest) GetExpectedAud() string { - if x != nil && x.ExpectedAud != nil { - return *x.ExpectedAud - } - return "" -} - -func (x *UpdateTrustedIssuerRequest) GetIsActive() bool { - if x != nil && x.IsActive != nil { - return *x.IsActive - } - return false -} - -func (x *UpdateTrustedIssuerRequest) GetSpiffeRefreshHintSeconds() int64 { - if x != nil && x.SpiffeRefreshHintSeconds != nil { - return *x.SpiffeRefreshHintSeconds - } - return 0 -} - -func (x *UpdateTrustedIssuerRequest) GetAllowedSubjects() string { - if x != nil && x.AllowedSubjects != nil { - return *x.AllowedSubjects - } - return "" -} - -func (x *UpdateTrustedIssuerRequest) GetEnableTokenReview() bool { - if x != nil && x.EnableTokenReview != nil { - return *x.EnableTokenReview - } - return false -} - -func (x *UpdateTrustedIssuerRequest) GetKubernetesApiServerUrl() string { - if x != nil && x.KubernetesApiServerUrl != nil { - return *x.KubernetesApiServerUrl - } - return "" -} - -type UpdateTrustedIssuerResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TrustedIssuer *TrustedIssuer `protobuf:"bytes,1,opt,name=trusted_issuer,json=trustedIssuer,proto3" json:"trusted_issuer,omitempty"` -} - -func (x *UpdateTrustedIssuerResponse) Reset() { - *x = UpdateTrustedIssuerResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[88] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateTrustedIssuerResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateTrustedIssuerResponse) ProtoMessage() {} - -func (x *UpdateTrustedIssuerResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[88] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateTrustedIssuerResponse.ProtoReflect.Descriptor instead. -func (*UpdateTrustedIssuerResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{88} -} - -func (x *UpdateTrustedIssuerResponse) GetTrustedIssuer() *TrustedIssuer { - if x != nil { - return x.TrustedIssuer - } - return nil -} - -// DeleteTrustedIssuerRequest mirrors model.TrustedIssuerRequest (a single -// trusted issuer id). Kept distinct from GetTrustedIssuerRequest per buf's -// one-message-per-RPC rule. -type DeleteTrustedIssuerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteTrustedIssuerRequest) Reset() { - *x = DeleteTrustedIssuerRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[89] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteTrustedIssuerRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteTrustedIssuerRequest) ProtoMessage() {} - -func (x *DeleteTrustedIssuerRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[89] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteTrustedIssuerRequest.ProtoReflect.Descriptor instead. -func (*DeleteTrustedIssuerRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{89} -} - -func (x *DeleteTrustedIssuerRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type DeleteTrustedIssuerResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *DeleteTrustedIssuerResponse) Reset() { - *x = DeleteTrustedIssuerResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[90] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteTrustedIssuerResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteTrustedIssuerResponse) ProtoMessage() {} - -func (x *DeleteTrustedIssuerResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[90] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteTrustedIssuerResponse.ProtoReflect.Descriptor instead. -func (*DeleteTrustedIssuerResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{90} -} - -func (x *DeleteTrustedIssuerResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// GetTrustedIssuerRequest mirrors model.TrustedIssuerRequest (a single trusted -// issuer id). Kept distinct from DeleteTrustedIssuerRequest per buf's -// one-message-per-RPC rule. -type GetTrustedIssuerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *GetTrustedIssuerRequest) Reset() { - *x = GetTrustedIssuerRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[91] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetTrustedIssuerRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTrustedIssuerRequest) ProtoMessage() {} - -func (x *GetTrustedIssuerRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[91] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetTrustedIssuerRequest.ProtoReflect.Descriptor instead. -func (*GetTrustedIssuerRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{91} -} - -func (x *GetTrustedIssuerRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type GetTrustedIssuerResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TrustedIssuer *TrustedIssuer `protobuf:"bytes,1,opt,name=trusted_issuer,json=trustedIssuer,proto3" json:"trusted_issuer,omitempty"` -} - -func (x *GetTrustedIssuerResponse) Reset() { - *x = GetTrustedIssuerResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[92] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetTrustedIssuerResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTrustedIssuerResponse) ProtoMessage() {} - -func (x *GetTrustedIssuerResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[92] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetTrustedIssuerResponse.ProtoReflect.Descriptor instead. -func (*GetTrustedIssuerResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{92} -} - -func (x *GetTrustedIssuerResponse) GetTrustedIssuer() *TrustedIssuer { - if x != nil { - return x.TrustedIssuer - } - return nil -} - -// TrustedIssuersRequest mirrors model.ListTrustedIssuersRequest. -// service_account_id is optional; when unset issuers for all accounts are -// returned. -type TrustedIssuersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pagination *PaginationRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` - ServiceAccountId *string `protobuf:"bytes,2,opt,name=service_account_id,json=serviceAccountId,proto3,oneof" json:"service_account_id,omitempty"` -} - -func (x *TrustedIssuersRequest) Reset() { - *x = TrustedIssuersRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[93] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *TrustedIssuersRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TrustedIssuersRequest) ProtoMessage() {} - -func (x *TrustedIssuersRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[93] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TrustedIssuersRequest.ProtoReflect.Descriptor instead. -func (*TrustedIssuersRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{93} -} - -func (x *TrustedIssuersRequest) GetPagination() *PaginationRequest { - if x != nil { - return x.Pagination - } - return nil -} - -func (x *TrustedIssuersRequest) GetServiceAccountId() string { - if x != nil && x.ServiceAccountId != nil { - return *x.ServiceAccountId - } - return "" -} - -type TrustedIssuersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TrustedIssuers []*TrustedIssuer `protobuf:"bytes,1,rep,name=trusted_issuers,json=trustedIssuers,proto3" json:"trusted_issuers,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *TrustedIssuersResponse) Reset() { - *x = TrustedIssuersResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[94] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *TrustedIssuersResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TrustedIssuersResponse) ProtoMessage() {} - -func (x *TrustedIssuersResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[94] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TrustedIssuersResponse.ProtoReflect.Descriptor instead. -func (*TrustedIssuersResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{94} -} - -func (x *TrustedIssuersResponse) GetTrustedIssuers() []*TrustedIssuer { - if x != nil { - return x.TrustedIssuers - } - return nil -} - -func (x *TrustedIssuersResponse) GetPagination() *Pagination { - if x != nil { - return x.Pagination - } - return nil -} - -// SamlServiceProvider mirrors model.SAMLServiceProvider field-for-field. It is a -// downstream SAML 2.0 SP that Authorizer (acting as the IdP) issues signed -// assertions to. Optional pointer fields collapse to zero values on the wire. -type SamlServiceProvider struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - OrgId string `protobuf:"bytes,2,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - // entity_id: the SP entity ID (the AuthnRequest Issuer and assertion Audience). - EntityId string `protobuf:"bytes,4,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` - // acs_url: the SP Assertion Consumer Service URL — the only place assertions - // are POSTed. - AcsUrl string `protobuf:"bytes,5,opt,name=acs_url,json=acsUrl,proto3" json:"acs_url,omitempty"` - // sp_cert_pem: the SP's optional X.509 signing certificate (PEM). - SpCertPem string `protobuf:"bytes,6,opt,name=sp_cert_pem,json=spCertPem,proto3" json:"sp_cert_pem,omitempty"` - // name_id_format: SAML NameID format for the Subject (default emailAddress). - NameIdFormat string `protobuf:"bytes,7,opt,name=name_id_format,json=nameIdFormat,proto3" json:"name_id_format,omitempty"` - // mapped_attributes: JSON mapping profile fields to emitted SAML attribute names. - MappedAttributes string `protobuf:"bytes,8,opt,name=mapped_attributes,json=mappedAttributes,proto3" json:"mapped_attributes,omitempty"` - // allow_idp_initiated: whether unsolicited IdP-initiated SSO is permitted. - AllowIdpInitiated bool `protobuf:"varint,9,opt,name=allow_idp_initiated,json=allowIdpInitiated,proto3" json:"allow_idp_initiated,omitempty"` - IsActive bool `protobuf:"varint,10,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` - CreatedAt int64 `protobuf:"varint,11,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt int64 `protobuf:"varint,12,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` -} - -func (x *SamlServiceProvider) Reset() { - *x = SamlServiceProvider{} - mi := &file_authorizer_v1_admin_proto_msgTypes[95] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SamlServiceProvider) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SamlServiceProvider) ProtoMessage() {} - -func (x *SamlServiceProvider) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[95] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SamlServiceProvider.ProtoReflect.Descriptor instead. -func (*SamlServiceProvider) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{95} -} - -func (x *SamlServiceProvider) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *SamlServiceProvider) GetOrgId() string { - if x != nil { - return x.OrgId - } - return "" -} - -func (x *SamlServiceProvider) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SamlServiceProvider) GetEntityId() string { - if x != nil { - return x.EntityId - } - return "" -} - -func (x *SamlServiceProvider) GetAcsUrl() string { - if x != nil { - return x.AcsUrl - } - return "" -} - -func (x *SamlServiceProvider) GetSpCertPem() string { - if x != nil { - return x.SpCertPem - } - return "" -} - -func (x *SamlServiceProvider) GetNameIdFormat() string { - if x != nil { - return x.NameIdFormat - } - return "" -} - -func (x *SamlServiceProvider) GetMappedAttributes() string { - if x != nil { - return x.MappedAttributes - } - return "" -} - -func (x *SamlServiceProvider) GetAllowIdpInitiated() bool { - if x != nil { - return x.AllowIdpInitiated - } - return false -} - -func (x *SamlServiceProvider) GetIsActive() bool { - if x != nil { - return x.IsActive - } - return false -} - -func (x *SamlServiceProvider) GetCreatedAt() int64 { - if x != nil { - return x.CreatedAt - } - return 0 -} - -func (x *SamlServiceProvider) GetUpdatedAt() int64 { - if x != nil { - return x.UpdatedAt - } - return 0 -} - -// SamlIdpKey mirrors model.SAMLIDPKey. The private key is NEVER projected — only -// the certificate and rotation status. -type SamlIdpKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - OrgId string `protobuf:"bytes,2,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` - // cert_pem: the self-signed X.509 signing certificate (PEM), pinned by SPs. - CertPem string `protobuf:"bytes,3,opt,name=cert_pem,json=certPem,proto3" json:"cert_pem,omitempty"` - Algorithm string `protobuf:"bytes,4,opt,name=algorithm,proto3" json:"algorithm,omitempty"` - // status: "current" (signs new assertions), "active" (published in metadata, - // not signing), or "retired" (neither). - Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - CreatedAt int64 `protobuf:"varint,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt int64 `protobuf:"varint,7,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` -} - -func (x *SamlIdpKey) Reset() { - *x = SamlIdpKey{} - mi := &file_authorizer_v1_admin_proto_msgTypes[96] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SamlIdpKey) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SamlIdpKey) ProtoMessage() {} - -func (x *SamlIdpKey) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[96] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SamlIdpKey.ProtoReflect.Descriptor instead. -func (*SamlIdpKey) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{96} -} - -func (x *SamlIdpKey) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *SamlIdpKey) GetOrgId() string { - if x != nil { - return x.OrgId - } - return "" -} - -func (x *SamlIdpKey) GetCertPem() string { - if x != nil { - return x.CertPem - } - return "" -} - -func (x *SamlIdpKey) GetAlgorithm() string { - if x != nil { - return x.Algorithm - } - return "" -} - -func (x *SamlIdpKey) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -func (x *SamlIdpKey) GetCreatedAt() int64 { - if x != nil { - return x.CreatedAt - } - return 0 -} - -func (x *SamlIdpKey) GetUpdatedAt() int64 { - if x != nil { - return x.UpdatedAt - } - return 0 -} - -// SamlSpMetadataParseResult mirrors model.SAMLSPMetadataParseResult. It does NOT -// create a record — it returns fields to prefill a create call. -type SamlSpMetadataParseResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` - AcsUrl string `protobuf:"bytes,2,opt,name=acs_url,json=acsUrl,proto3" json:"acs_url,omitempty"` - Certificate string `protobuf:"bytes,3,opt,name=certificate,proto3" json:"certificate,omitempty"` -} - -func (x *SamlSpMetadataParseResult) Reset() { - *x = SamlSpMetadataParseResult{} - mi := &file_authorizer_v1_admin_proto_msgTypes[97] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SamlSpMetadataParseResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SamlSpMetadataParseResult) ProtoMessage() {} - -func (x *SamlSpMetadataParseResult) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[97] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SamlSpMetadataParseResult.ProtoReflect.Descriptor instead. -func (*SamlSpMetadataParseResult) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{97} -} - -func (x *SamlSpMetadataParseResult) GetEntityId() string { - if x != nil { - return x.EntityId - } - return "" -} - -func (x *SamlSpMetadataParseResult) GetAcsUrl() string { - if x != nil { - return x.AcsUrl - } - return "" -} - -func (x *SamlSpMetadataParseResult) GetCertificate() string { - if x != nil { - return x.Certificate - } - return "" -} - -// CreateSamlServiceProviderRequest mirrors model.CreateSAMLServiceProviderRequest. -// sp_cert_pem, name_id_format, mapped_attributes, and allow_idp_initiated are -// optional. -type CreateSamlServiceProviderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OrgId string `protobuf:"bytes,1,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - EntityId string `protobuf:"bytes,3,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` - AcsUrl string `protobuf:"bytes,4,opt,name=acs_url,json=acsUrl,proto3" json:"acs_url,omitempty"` - SpCertPem *string `protobuf:"bytes,5,opt,name=sp_cert_pem,json=spCertPem,proto3,oneof" json:"sp_cert_pem,omitempty"` - // name_id_format: default urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress. - NameIdFormat *string `protobuf:"bytes,6,opt,name=name_id_format,json=nameIdFormat,proto3,oneof" json:"name_id_format,omitempty"` - // mapped_attributes: JSON, e.g. {"email":"email","given_name":"firstName"}. - MappedAttributes *string `protobuf:"bytes,7,opt,name=mapped_attributes,json=mappedAttributes,proto3,oneof" json:"mapped_attributes,omitempty"` - // allow_idp_initiated: default false (SP-initiated only). - AllowIdpInitiated *bool `protobuf:"varint,8,opt,name=allow_idp_initiated,json=allowIdpInitiated,proto3,oneof" json:"allow_idp_initiated,omitempty"` -} - -func (x *CreateSamlServiceProviderRequest) Reset() { - *x = CreateSamlServiceProviderRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[98] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *CreateSamlServiceProviderRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateSamlServiceProviderRequest) ProtoMessage() {} - -func (x *CreateSamlServiceProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[98] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateSamlServiceProviderRequest.ProtoReflect.Descriptor instead. -func (*CreateSamlServiceProviderRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{98} -} - -func (x *CreateSamlServiceProviderRequest) GetOrgId() string { - if x != nil { - return x.OrgId - } - return "" -} - -func (x *CreateSamlServiceProviderRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *CreateSamlServiceProviderRequest) GetEntityId() string { - if x != nil { - return x.EntityId - } - return "" -} - -func (x *CreateSamlServiceProviderRequest) GetAcsUrl() string { - if x != nil { - return x.AcsUrl - } - return "" -} - -func (x *CreateSamlServiceProviderRequest) GetSpCertPem() string { - if x != nil && x.SpCertPem != nil { - return *x.SpCertPem - } - return "" -} - -func (x *CreateSamlServiceProviderRequest) GetNameIdFormat() string { - if x != nil && x.NameIdFormat != nil { - return *x.NameIdFormat - } - return "" -} - -func (x *CreateSamlServiceProviderRequest) GetMappedAttributes() string { - if x != nil && x.MappedAttributes != nil { - return *x.MappedAttributes - } - return "" -} - -func (x *CreateSamlServiceProviderRequest) GetAllowIdpInitiated() bool { - if x != nil && x.AllowIdpInitiated != nil { - return *x.AllowIdpInitiated - } - return false -} - -type CreateSamlServiceProviderResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SamlServiceProvider *SamlServiceProvider `protobuf:"bytes,1,opt,name=saml_service_provider,json=samlServiceProvider,proto3" json:"saml_service_provider,omitempty"` -} - -func (x *CreateSamlServiceProviderResponse) Reset() { - *x = CreateSamlServiceProviderResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[99] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *CreateSamlServiceProviderResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateSamlServiceProviderResponse) ProtoMessage() {} - -func (x *CreateSamlServiceProviderResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[99] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateSamlServiceProviderResponse.ProtoReflect.Descriptor instead. -func (*CreateSamlServiceProviderResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{99} -} - -func (x *CreateSamlServiceProviderResponse) GetSamlServiceProvider() *SamlServiceProvider { - if x != nil { - return x.SamlServiceProvider - } - return nil -} - -// UpdateSamlServiceProviderRequest mirrors model.UpdateSAMLServiceProviderRequest. -// Nullable GraphQL inputs use proto3 `optional` so an unset field is -// distinguishable from an empty value. -type UpdateSamlServiceProviderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` - EntityId *string `protobuf:"bytes,3,opt,name=entity_id,json=entityId,proto3,oneof" json:"entity_id,omitempty"` - AcsUrl *string `protobuf:"bytes,4,opt,name=acs_url,json=acsUrl,proto3,oneof" json:"acs_url,omitempty"` - SpCertPem *string `protobuf:"bytes,5,opt,name=sp_cert_pem,json=spCertPem,proto3,oneof" json:"sp_cert_pem,omitempty"` - NameIdFormat *string `protobuf:"bytes,6,opt,name=name_id_format,json=nameIdFormat,proto3,oneof" json:"name_id_format,omitempty"` - MappedAttributes *string `protobuf:"bytes,7,opt,name=mapped_attributes,json=mappedAttributes,proto3,oneof" json:"mapped_attributes,omitempty"` - AllowIdpInitiated *bool `protobuf:"varint,8,opt,name=allow_idp_initiated,json=allowIdpInitiated,proto3,oneof" json:"allow_idp_initiated,omitempty"` - IsActive *bool `protobuf:"varint,9,opt,name=is_active,json=isActive,proto3,oneof" json:"is_active,omitempty"` -} - -func (x *UpdateSamlServiceProviderRequest) Reset() { - *x = UpdateSamlServiceProviderRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[100] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateSamlServiceProviderRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateSamlServiceProviderRequest) ProtoMessage() {} - -func (x *UpdateSamlServiceProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[100] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateSamlServiceProviderRequest.ProtoReflect.Descriptor instead. -func (*UpdateSamlServiceProviderRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{100} -} - -func (x *UpdateSamlServiceProviderRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *UpdateSamlServiceProviderRequest) GetName() string { - if x != nil && x.Name != nil { - return *x.Name - } - return "" -} - -func (x *UpdateSamlServiceProviderRequest) GetEntityId() string { - if x != nil && x.EntityId != nil { - return *x.EntityId - } - return "" -} - -func (x *UpdateSamlServiceProviderRequest) GetAcsUrl() string { - if x != nil && x.AcsUrl != nil { - return *x.AcsUrl - } - return "" -} - -func (x *UpdateSamlServiceProviderRequest) GetSpCertPem() string { - if x != nil && x.SpCertPem != nil { - return *x.SpCertPem - } - return "" -} - -func (x *UpdateSamlServiceProviderRequest) GetNameIdFormat() string { - if x != nil && x.NameIdFormat != nil { - return *x.NameIdFormat - } - return "" -} - -func (x *UpdateSamlServiceProviderRequest) GetMappedAttributes() string { - if x != nil && x.MappedAttributes != nil { - return *x.MappedAttributes - } - return "" -} - -func (x *UpdateSamlServiceProviderRequest) GetAllowIdpInitiated() bool { - if x != nil && x.AllowIdpInitiated != nil { - return *x.AllowIdpInitiated - } - return false -} - -func (x *UpdateSamlServiceProviderRequest) GetIsActive() bool { - if x != nil && x.IsActive != nil { - return *x.IsActive - } - return false -} - -type UpdateSamlServiceProviderResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SamlServiceProvider *SamlServiceProvider `protobuf:"bytes,1,opt,name=saml_service_provider,json=samlServiceProvider,proto3" json:"saml_service_provider,omitempty"` -} - -func (x *UpdateSamlServiceProviderResponse) Reset() { - *x = UpdateSamlServiceProviderResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[101] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateSamlServiceProviderResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateSamlServiceProviderResponse) ProtoMessage() {} - -func (x *UpdateSamlServiceProviderResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[101] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateSamlServiceProviderResponse.ProtoReflect.Descriptor instead. -func (*UpdateSamlServiceProviderResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{101} -} - -func (x *UpdateSamlServiceProviderResponse) GetSamlServiceProvider() *SamlServiceProvider { - if x != nil { - return x.SamlServiceProvider - } - return nil -} - -// DeleteSamlServiceProviderRequest mirrors model.SAMLServiceProviderRequest (a -// single SP id). Kept distinct from GetSamlServiceProviderRequest per buf's -// one-message-per-RPC rule. -type DeleteSamlServiceProviderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteSamlServiceProviderRequest) Reset() { - *x = DeleteSamlServiceProviderRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[102] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteSamlServiceProviderRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteSamlServiceProviderRequest) ProtoMessage() {} - -func (x *DeleteSamlServiceProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[102] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteSamlServiceProviderRequest.ProtoReflect.Descriptor instead. -func (*DeleteSamlServiceProviderRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{102} -} - -func (x *DeleteSamlServiceProviderRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type DeleteSamlServiceProviderResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *DeleteSamlServiceProviderResponse) Reset() { - *x = DeleteSamlServiceProviderResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[103] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteSamlServiceProviderResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteSamlServiceProviderResponse) ProtoMessage() {} - -func (x *DeleteSamlServiceProviderResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[103] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteSamlServiceProviderResponse.ProtoReflect.Descriptor instead. -func (*DeleteSamlServiceProviderResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{103} -} - -func (x *DeleteSamlServiceProviderResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// GetSamlServiceProviderRequest mirrors model.SAMLServiceProviderRequest (a -// single SP id). Kept distinct from DeleteSamlServiceProviderRequest per buf's -// one-message-per-RPC rule. -type GetSamlServiceProviderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *GetSamlServiceProviderRequest) Reset() { - *x = GetSamlServiceProviderRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[104] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetSamlServiceProviderRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetSamlServiceProviderRequest) ProtoMessage() {} - -func (x *GetSamlServiceProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[104] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetSamlServiceProviderRequest.ProtoReflect.Descriptor instead. -func (*GetSamlServiceProviderRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{104} -} - -func (x *GetSamlServiceProviderRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type GetSamlServiceProviderResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SamlServiceProvider *SamlServiceProvider `protobuf:"bytes,1,opt,name=saml_service_provider,json=samlServiceProvider,proto3" json:"saml_service_provider,omitempty"` -} - -func (x *GetSamlServiceProviderResponse) Reset() { - *x = GetSamlServiceProviderResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[105] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetSamlServiceProviderResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetSamlServiceProviderResponse) ProtoMessage() {} - -func (x *GetSamlServiceProviderResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[105] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetSamlServiceProviderResponse.ProtoReflect.Descriptor instead. -func (*GetSamlServiceProviderResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{105} -} - -func (x *GetSamlServiceProviderResponse) GetSamlServiceProvider() *SamlServiceProvider { - if x != nil { - return x.SamlServiceProvider - } - return nil -} - -// ListSamlServiceProvidersRequest mirrors model.ListSAMLServiceProvidersRequest. -type ListSamlServiceProvidersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OrgId string `protobuf:"bytes,1,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` - Pagination *PaginationRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *ListSamlServiceProvidersRequest) Reset() { - *x = ListSamlServiceProvidersRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[106] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ListSamlServiceProvidersRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListSamlServiceProvidersRequest) ProtoMessage() {} - -func (x *ListSamlServiceProvidersRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[106] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListSamlServiceProvidersRequest.ProtoReflect.Descriptor instead. -func (*ListSamlServiceProvidersRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{106} -} - -func (x *ListSamlServiceProvidersRequest) GetOrgId() string { - if x != nil { - return x.OrgId - } - return "" -} - -func (x *ListSamlServiceProvidersRequest) GetPagination() *PaginationRequest { - if x != nil { - return x.Pagination - } - return nil -} - -type ListSamlServiceProvidersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SamlServiceProviders []*SamlServiceProvider `protobuf:"bytes,1,rep,name=saml_service_providers,json=samlServiceProviders,proto3" json:"saml_service_providers,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (x *ListSamlServiceProvidersResponse) Reset() { - *x = ListSamlServiceProvidersResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[107] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ListSamlServiceProvidersResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListSamlServiceProvidersResponse) ProtoMessage() {} - -func (x *ListSamlServiceProvidersResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[107] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListSamlServiceProvidersResponse.ProtoReflect.Descriptor instead. -func (*ListSamlServiceProvidersResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{107} -} - -func (x *ListSamlServiceProvidersResponse) GetSamlServiceProviders() []*SamlServiceProvider { - if x != nil { - return x.SamlServiceProviders - } - return nil -} - -func (x *ListSamlServiceProvidersResponse) GetPagination() *Pagination { - if x != nil { - return x.Pagination - } - return nil -} - -// RotateSamlIdpCertRequest mirrors model.RotateSAMLIDPCertRequest. -type RotateSamlIdpCertRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OrgId string `protobuf:"bytes,1,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` -} - -func (x *RotateSamlIdpCertRequest) Reset() { - *x = RotateSamlIdpCertRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[108] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RotateSamlIdpCertRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RotateSamlIdpCertRequest) ProtoMessage() {} - -func (x *RotateSamlIdpCertRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[108] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RotateSamlIdpCertRequest.ProtoReflect.Descriptor instead. -func (*RotateSamlIdpCertRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{108} -} - -func (x *RotateSamlIdpCertRequest) GetOrgId() string { - if x != nil { - return x.OrgId - } - return "" -} - -type RotateSamlIdpCertResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SamlIdpKey *SamlIdpKey `protobuf:"bytes,1,opt,name=saml_idp_key,json=samlIdpKey,proto3" json:"saml_idp_key,omitempty"` -} - -func (x *RotateSamlIdpCertResponse) Reset() { - *x = RotateSamlIdpCertResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[109] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RotateSamlIdpCertResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RotateSamlIdpCertResponse) ProtoMessage() {} - -func (x *RotateSamlIdpCertResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[109] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RotateSamlIdpCertResponse.ProtoReflect.Descriptor instead. -func (*RotateSamlIdpCertResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{109} -} - -func (x *RotateSamlIdpCertResponse) GetSamlIdpKey() *SamlIdpKey { - if x != nil { - return x.SamlIdpKey - } - return nil -} - -// RetireSamlIdpKeyRequest mirrors model.RetireSAMLIDPKeyRequest (a single key id). -type RetireSamlIdpKeyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *RetireSamlIdpKeyRequest) Reset() { - *x = RetireSamlIdpKeyRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[110] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RetireSamlIdpKeyRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RetireSamlIdpKeyRequest) ProtoMessage() {} - -func (x *RetireSamlIdpKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[110] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RetireSamlIdpKeyRequest.ProtoReflect.Descriptor instead. -func (*RetireSamlIdpKeyRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{110} -} - -func (x *RetireSamlIdpKeyRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type RetireSamlIdpKeyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *RetireSamlIdpKeyResponse) Reset() { - *x = RetireSamlIdpKeyResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[111] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RetireSamlIdpKeyResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RetireSamlIdpKeyResponse) ProtoMessage() {} - -func (x *RetireSamlIdpKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[111] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RetireSamlIdpKeyResponse.ProtoReflect.Descriptor instead. -func (*RetireSamlIdpKeyResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{111} -} - -func (x *RetireSamlIdpKeyResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// ListSamlIdpKeysRequest mirrors model.ListSAMLIDPKeysRequest. -type ListSamlIdpKeysRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OrgId string `protobuf:"bytes,1,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` -} - -func (x *ListSamlIdpKeysRequest) Reset() { - *x = ListSamlIdpKeysRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[112] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ListSamlIdpKeysRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListSamlIdpKeysRequest) ProtoMessage() {} - -func (x *ListSamlIdpKeysRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[112] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListSamlIdpKeysRequest.ProtoReflect.Descriptor instead. -func (*ListSamlIdpKeysRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{112} -} - -func (x *ListSamlIdpKeysRequest) GetOrgId() string { - if x != nil { - return x.OrgId - } - return "" -} - -type ListSamlIdpKeysResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SamlIdpKeys []*SamlIdpKey `protobuf:"bytes,1,rep,name=saml_idp_keys,json=samlIdpKeys,proto3" json:"saml_idp_keys,omitempty"` -} - -func (x *ListSamlIdpKeysResponse) Reset() { - *x = ListSamlIdpKeysResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[113] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ListSamlIdpKeysResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListSamlIdpKeysResponse) ProtoMessage() {} - -func (x *ListSamlIdpKeysResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[113] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListSamlIdpKeysResponse.ProtoReflect.Descriptor instead. -func (*ListSamlIdpKeysResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{113} -} - -func (x *ListSamlIdpKeysResponse) GetSamlIdpKeys() []*SamlIdpKey { - if x != nil { - return x.SamlIdpKeys - } - return nil -} - -// ImportSamlSpMetadataRequest mirrors model.ImportSAMLSPMetadataRequest. The -// metadata is pasted XML — NOT a URL; no remote fetch is performed. -type ImportSamlSpMetadataRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MetadataXml string `protobuf:"bytes,1,opt,name=metadata_xml,json=metadataXml,proto3" json:"metadata_xml,omitempty"` -} - -func (x *ImportSamlSpMetadataRequest) Reset() { - *x = ImportSamlSpMetadataRequest{} - mi := &file_authorizer_v1_admin_proto_msgTypes[114] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ImportSamlSpMetadataRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ImportSamlSpMetadataRequest) ProtoMessage() {} - -func (x *ImportSamlSpMetadataRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[114] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ImportSamlSpMetadataRequest.ProtoReflect.Descriptor instead. -func (*ImportSamlSpMetadataRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{114} -} - -func (x *ImportSamlSpMetadataRequest) GetMetadataXml() string { - if x != nil { - return x.MetadataXml - } - return "" -} - -type ImportSamlSpMetadataResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Result *SamlSpMetadataParseResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` -} - -func (x *ImportSamlSpMetadataResponse) Reset() { - *x = ImportSamlSpMetadataResponse{} - mi := &file_authorizer_v1_admin_proto_msgTypes[115] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ImportSamlSpMetadataResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ImportSamlSpMetadataResponse) ProtoMessage() {} - -func (x *ImportSamlSpMetadataResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_admin_proto_msgTypes[115] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ImportSamlSpMetadataResponse.ProtoReflect.Descriptor instead. -func (*ImportSamlSpMetadataResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_admin_proto_rawDescGZIP(), []int{115} -} - -func (x *ImportSamlSpMetadataResponse) GetResult() *SamlSpMetadataParseResult { - if x != nil { - return x.Result - } - return nil -} - -var File_authorizer_v1_admin_proto protoreflect.FileDescriptor - -var file_authorizer_v1_admin_proto_rawDesc = []byte{ - 0x0a, 0x19, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 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, 0x22, 0x3f, 0x0a, - 0x11, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x2e, - 0x0a, 0x12, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x14, - 0x0a, 0x12, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x2f, 0x0a, 0x13, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, - 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x30, 0x0a, 0x14, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x12, - 0x0a, 0x10, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x11, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, - 0x22, 0xbe, 0x01, 0x0a, 0x09, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x14, - 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, - 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, - 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x6c, - 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x24, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x66, - 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x1f, 0x69, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x41, - 0x75, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x22, 0x66, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x75, 0x0a, 0x0d, 0x55, 0x73, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x33, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x37, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0xcc, - 0x06, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, - 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x01, 0x52, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x09, 0x67, 0x69, 0x76, 0x65, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x66, 0x61, 0x6d, 0x69, - 0x6c, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, - 0x0a, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x24, - 0x0a, 0x0b, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x0a, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x05, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, - 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x88, - 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x74, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x07, 0x52, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, - 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x08, 0x52, 0x0b, 0x70, - 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, - 0x15, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x09, 0x52, 0x13, - 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x48, 0x0a, 0x52, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x0d, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1c, 0x69, - 0x73, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x75, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x0b, 0x52, 0x18, 0x69, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0x41, 0x75, 0x74, 0x68, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x88, 0x01, 0x01, - 0x12, 0x31, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x66, 0x61, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x74, 0x4d, - 0x66, 0x61, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x42, - 0x11, 0x0a, 0x0f, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x09, - 0x0a, 0x07, 0x5f, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x62, 0x69, - 0x72, 0x74, 0x68, 0x64, 0x61, 0x74, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x68, 0x6f, 0x6e, - 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x70, 0x68, 0x6f, - 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x42, 0x1f, - 0x0a, 0x1d, 0x5f, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x66, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, - 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x66, 0x61, 0x22, 0x3d, 0x0a, - 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x32, 0x0a, 0x11, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x22, 0x2e, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x5f, 0x0a, 0x1b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x40, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0xb2, 0x01, 0x0a, 0x1c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x57, 0x0a, 0x15, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x14, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x82, 0x02, 0x0a, 0x13, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, - 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x78, 0x70, - 0x69, 0x72, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x22, 0x37, 0x0a, 0x13, 0x52, - 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x22, 0x30, 0x0a, 0x14, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x37, 0x0a, 0x13, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, - 0x30, 0x0a, 0x14, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x67, 0x0a, 0x14, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0x26, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, - 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x65, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x22, 0x5c, 0x0a, 0x15, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, - 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x8b, 0x02, 0x0a, 0x07, 0x57, 0x65, 0x62, - 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xd0, 0x01, 0x0a, 0x0a, 0x57, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x4c, 0x6f, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xf4, 0x01, 0x0a, 0x11, 0x41, 0x64, - 0x64, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x26, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x08, 0x65, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x2e, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0xb5, 0x02, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x01, 0x52, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x08, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x03, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x0b, 0x0a, 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x0a, 0x0a, 0x08, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x31, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2f, 0x0a, 0x14, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x31, 0x0a, 0x15, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x2c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x46, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x07, 0x77, 0x65, - 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x22, 0x53, 0x0a, 0x0f, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x81, 0x01, 0x0a, 0x10, 0x57, - 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x32, 0x0a, 0x08, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x08, 0x77, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x89, - 0x01, 0x0a, 0x12, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0a, 0x77, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x77, - 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, - 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x22, 0x8e, 0x01, 0x0a, 0x13, 0x57, - 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x6c, 0x6f, - 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, - 0x4c, 0x6f, 0x67, 0x52, 0x0b, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x4c, 0x6f, 0x67, 0x73, - 0x12, 0x39, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xdc, 0x01, 0x0a, 0x13, - 0x54, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, - 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x30, 0x0a, 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, - 0x01, 0x01, 0x12, 0x30, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x53, 0x0a, 0x14, 0x54, 0x65, - 0x73, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xca, 0x01, 0x0a, 0x0d, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, - 0x73, 0x69, 0x67, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xb1, 0x01, 0x0a, - 0x17, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x21, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x23, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x06, 0x64, 0x65, 0x73, 0x69, - 0x67, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x64, 0x65, 0x73, 0x69, - 0x67, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, - 0x22, 0x34, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xe9, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, - 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x88, - 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x03, 0x52, 0x06, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x88, 0x01, 0x01, 0x42, - 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0b, - 0x0a, 0x09, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, - 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x65, 0x73, 0x69, - 0x67, 0x6e, 0x22, 0x37, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, - 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x35, 0x0a, 0x1a, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x37, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, - 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x59, 0x0a, 0x15, 0x45, - 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9a, 0x01, 0x0a, 0x16, 0x45, 0x6d, 0x61, 0x69, 0x6c, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0xcc, 0x02, 0x0a, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, - 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, - 0x74, 0x6f, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x70, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, - 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, - 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x22, 0x93, 0x03, 0x0a, 0x10, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x08, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x61, 0x63, 0x74, 0x6f, - 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, - 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, - 0x12, 0x24, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x04, - 0x52, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x88, - 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0c, 0x74, 0x6f, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x05, 0x52, 0x0b, 0x74, 0x6f, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, - 0x69, 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x74, 0x6f, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x86, 0x01, 0x0a, 0x11, 0x41, 0x75, 0x64, - 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, - 0x0a, 0x0a, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x09, 0x61, 0x75, 0x64, - 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x2c, 0x0a, 0x08, 0x46, 0x67, 0x61, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x64, 0x73, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x73, 0x6c, 0x22, - 0x52, 0x0a, 0x08, 0x46, 0x67, 0x61, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, - 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x46, 0x67, 0x61, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x44, 0x0a, 0x13, 0x46, 0x67, 0x61, - 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2d, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x46, 0x67, 0x61, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x22, - 0x31, 0x0a, 0x14, 0x46, 0x67, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x03, 0x64, 0x73, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x64, - 0x73, 0x6c, 0x22, 0x46, 0x0a, 0x15, 0x46, 0x67, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x22, 0x4d, 0x0a, 0x15, 0x46, 0x67, - 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x52, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x32, 0x0a, 0x16, 0x46, 0x67, 0x61, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4e, 0x0a, - 0x16, 0x46, 0x67, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x54, 0x75, 0x70, 0x6c, 0x65, - 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x33, 0x0a, - 0x17, 0x46, 0x67, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x89, 0x02, 0x0a, 0x14, 0x46, 0x67, 0x61, 0x52, 0x65, 0x61, 0x64, 0x54, 0x75, - 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x88, - 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x04, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, - 0x0a, 0x07, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x93, - 0x01, 0x0a, 0x15, 0x46, 0x67, 0x61, 0x52, 0x65, 0x61, 0x64, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x54, 0x75, 0x70, 0x6c, - 0x65, 0x52, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x12, 0x63, 0x6f, 0x6e, - 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, - 0x13, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x81, 0x01, 0x0a, 0x13, 0x46, 0x67, 0x61, 0x4c, 0x69, 0x73, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x0a, - 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, - 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2c, 0x0a, 0x14, 0x46, 0x67, 0x61, 0x4c, - 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x58, 0x0a, 0x10, 0x46, 0x67, 0x61, 0x45, 0x78, 0x70, - 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x08, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x22, 0x27, 0x0a, 0x11, 0x46, 0x67, 0x61, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x72, 0x65, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x72, 0x65, 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x46, 0x67, 0x61, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x10, - 0x46, 0x67, 0x61, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xed, 0x01, 0x0a, 0x06, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x53, 0x63, 0x6f, 0x70, - 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1b, 0x0a, - 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, - 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6a, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2d, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x22, 0xde, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, - 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x09, 0x69, - 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, - 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, - 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x69, 0x73, 0x5f, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x22, 0x45, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x2e, 0x0a, 0x13, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x30, 0x0a, 0x14, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x34, 0x0a, - 0x19, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x02, 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, - 0x22, 0x42, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x0e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x52, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x0a, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xdc, 0x04, 0x0a, 0x0d, 0x54, 0x72, 0x75, 0x73, - 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, - 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x6b, 0x65, - 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6b, 0x65, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x77, 0x6b, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x77, 0x6b, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x21, 0x0a, - 0x0c, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x75, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x75, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x73, 0x73, 0x75, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x72, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, - 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x48, 0x69, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x29, 0x0a, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x39, 0x0a, 0x19, 0x6b, - 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, - 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x41, 0x70, 0x69, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x22, 0xd9, 0x05, 0x0a, 0x17, 0x41, 0x64, 0x64, 0x54, 0x72, - 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x35, 0x0a, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x09, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x2f, - 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x0d, 0x6b, 0x65, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x1e, 0x0a, 0x08, 0x6a, 0x77, 0x6b, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x07, 0x6a, 0x77, 0x6b, 0x73, 0x55, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x12, - 0x2a, 0x0a, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x75, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, - 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x75, 0x64, 0x12, 0x28, 0x0a, 0x0d, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0b, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x0a, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x42, 0x0a, 0x1b, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, - 0x68, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x18, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x52, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x48, 0x69, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, - 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x13, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x04, 0x52, 0x11, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x19, 0x6b, 0x75, 0x62, 0x65, - 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x48, 0x05, 0x52, 0x16, 0x6b, - 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x41, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x55, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6a, 0x77, 0x6b, - 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x73, 0x70, 0x69, 0x66, - 0x66, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x5f, - 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x16, 0x0a, 0x14, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x42, 0x1c, 0x0a, 0x1a, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, - 0x74, 0x65, 0x73, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, - 0x72, 0x6c, 0x22, 0x5f, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, - 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, - 0x0a, 0x0e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, - 0x73, 0x75, 0x65, 0x72, 0x52, 0x0d, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, - 0x75, 0x65, 0x72, 0x22, 0xc1, 0x04, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, - 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x08, 0x6a, 0x77, 0x6b, 0x73, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x6a, 0x77, 0x6b, 0x73, 0x55, 0x72, - 0x6c, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x75, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0b, 0x65, 0x78, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x75, 0x64, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, - 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, - 0x03, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x88, 0x01, 0x01, 0x12, 0x42, - 0x0a, 0x1b, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, - 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x48, 0x04, 0x52, 0x18, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x52, 0x65, 0x66, - 0x72, 0x65, 0x73, 0x68, 0x48, 0x69, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x05, 0x52, 0x0f, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x33, 0x0a, 0x13, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, - 0x06, 0x52, 0x11, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x19, 0x6b, 0x75, 0x62, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x07, 0x52, 0x16, 0x6b, 0x75, - 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x41, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x55, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6a, 0x77, 0x6b, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x42, 0x0f, 0x0a, - 0x0d, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x75, 0x64, 0x42, 0x0c, - 0x0a, 0x0a, 0x5f, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x42, 0x1e, 0x0a, 0x1c, - 0x5f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, - 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x42, 0x13, 0x0a, 0x11, - 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x42, 0x1c, 0x0a, 0x1a, 0x5f, 0x6b, 0x75, - 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x22, 0x62, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, - 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x0d, 0x74, 0x72, - 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x22, 0x35, 0x0a, 0x1a, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x37, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x72, 0x75, 0x73, - 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x32, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x5f, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, - 0x75, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0e, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, - 0x72, 0x52, 0x0d, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, - 0x22, 0xa3, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x70, 0x61, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x12, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, - 0x15, 0x0a, 0x13, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x9a, 0x01, 0x0a, 0x16, 0x54, 0x72, 0x75, 0x73, 0x74, - 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x73, 0x73, - 0x75, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, - 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x0e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, - 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x84, 0x03, 0x0a, 0x13, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6f, - 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x63, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x1e, 0x0a, 0x0b, - 0x73, 0x70, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x73, 0x70, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x12, 0x24, 0x0a, 0x0e, - 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x46, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, - 0x2e, 0x0a, 0x13, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x70, 0x5f, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x70, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xc2, 0x01, 0x0a, 0x0a, 0x53, - 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x61, - 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, - 0x73, 0x0a, 0x19, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x50, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x63, 0x73, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x73, 0x55, - 0x72, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x22, 0xaf, 0x03, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, - 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x06, 0x6f, 0x72, 0x67, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, - 0x61, 0x63, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, - 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x61, 0x63, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x23, - 0x0a, 0x0b, 0x73, 0x70, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x73, 0x70, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, - 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0e, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x6e, - 0x61, 0x6d, 0x65, 0x49, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x88, 0x01, 0x01, 0x12, 0x30, - 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x10, 0x6d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x88, 0x01, 0x01, - 0x12, 0x33, 0x0a, 0x13, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x70, 0x5f, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, 0x03, 0x52, - 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x70, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, - 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x73, 0x70, 0x5f, 0x63, 0x65, 0x72, - 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x69, - 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x42, 0x16, - 0x0a, 0x14, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x70, 0x5f, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x22, 0x7b, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x15, 0x73, - 0x61, 0x6d, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x6d, 0x6c, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x13, - 0x73, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x22, 0xef, 0x03, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x61, - 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, - 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x07, - 0x61, 0x63, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, - 0x06, 0x61, 0x63, 0x73, 0x55, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0b, 0x73, 0x70, - 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x03, 0x52, 0x09, 0x73, 0x70, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x88, 0x01, 0x01, 0x12, - 0x29, 0x0a, 0x0e, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x11, 0x6d, 0x61, - 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x05, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x13, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x70, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, 0x06, 0x52, 0x11, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x49, 0x64, 0x70, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x88, 0x01, - 0x01, 0x12, 0x20, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x07, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0c, 0x0a, 0x0a, - 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x61, - 0x63, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x73, 0x70, 0x5f, 0x63, 0x65, - 0x72, 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, - 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6d, 0x61, - 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x42, - 0x16, 0x0a, 0x14, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x70, 0x5f, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x69, 0x73, 0x5f, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x7b, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x15, 0x73, 0x61, - 0x6d, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x13, 0x73, - 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x3d, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x38, - 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x78, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x53, - 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x15, 0x73, 0x61, - 0x6d, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x13, 0x73, - 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x22, 0x83, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb7, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, - 0x16, 0x73, 0x61, 0x6d, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, - 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x52, 0x14, 0x73, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x18, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, - 0x49, 0x64, 0x70, 0x43, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, - 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x22, 0x58, - 0x0a, 0x19, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x43, - 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x73, - 0x61, 0x6d, 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x73, 0x61, - 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x4b, 0x65, 0x79, 0x22, 0x32, 0x0a, 0x17, 0x52, 0x65, 0x74, 0x69, - 0x72, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x34, 0x0a, 0x18, - 0x52, 0x65, 0x74, 0x69, 0x72, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x38, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, - 0x70, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x06, - 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x17, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0d, 0x73, 0x61, 0x6d, 0x6c, 0x5f, - 0x69, 0x64, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x73, 0x61, 0x6d, 0x6c, 0x49, - 0x64, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x49, 0x0a, 0x1b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x5f, 0x78, 0x6d, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x58, 0x6d, - 0x6c, 0x22, 0x60, 0x0a, 0x1c, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x53, - 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x50, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x32, 0xde, 0x35, 0x0a, 0x16, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x71, - 0x0a, 0x0a, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x20, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1e, 0xa0, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, - 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x6c, 0x6f, 0x67, 0x69, - 0x6e, 0x12, 0x6e, 0x0a, 0x0b, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, - 0x12, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, - 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, - 0x74, 0x12, 0x72, 0x0a, 0x0c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x09, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4d, 0x65, - 0x74, 0x61, 0x12, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, - 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x5e, 0x0a, - 0x05, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x76, - 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x5a, 0x0a, - 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x12, 0x73, 0x0a, 0x0a, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x12, 0x73, - 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x76, - 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x12, 0x9b, 0x01, 0x0a, 0x14, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, - 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x76, 0x65, 0x72, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x12, 0x7b, 0x0a, 0x0c, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2f, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x7b, - 0x0a, 0x0c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x22, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, - 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x7f, 0x0a, 0x0d, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x23, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, - 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x73, 0x0a, 0x0a, - 0x41, 0x64, 0x64, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x20, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x57, 0x65, - 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, - 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x61, 0x64, 0x64, 0x5f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, - 0x6b, 0x12, 0x7f, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x12, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x65, - 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x77, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x12, 0x7f, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, - 0x6f, 0x6f, 0x6b, 0x12, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, - 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x77, 0x65, 0x62, 0x68, - 0x6f, 0x6f, 0x6b, 0x12, 0x6f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, - 0x6b, 0x12, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, - 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x77, 0x65, 0x62, - 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x6a, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, - 0x12, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, - 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, - 0x12, 0x77, 0x0a, 0x0b, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x4c, 0x6f, 0x67, 0x73, 0x12, - 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, - 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x77, 0x65, 0x62, - 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x7b, 0x0a, 0x0c, 0x54, 0x65, 0x73, - 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x45, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, - 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x8c, 0x01, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x45, 0x6d, - 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x26, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x45, - 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2f, 0x61, 0x64, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, - 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, - 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x12, 0x98, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, - 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x24, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x12, 0x6f, 0x0a, 0x09, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x1f, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, - 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x6c, 0x6f, - 0x67, 0x73, 0x12, 0x71, 0x0a, 0x0b, 0x46, 0x67, 0x61, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, - 0x6c, 0x12, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x46, 0x67, 0x61, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, - 0x12, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x66, 0x67, 0x61, 0x2f, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x7a, 0x0a, 0x0d, 0x46, 0x67, 0x61, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, - 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x76, - 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x66, 0x67, 0x61, 0x2f, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x12, 0x7e, 0x0a, 0x0e, 0x46, 0x67, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x75, 0x70, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, - 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x66, 0x67, 0x61, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x46, 0x67, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x75, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x75, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, - 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x66, 0x67, 0x61, 0x2f, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x80, 0x01, 0x0a, - 0x0d, 0x46, 0x67, 0x61, 0x52, 0x65, 0x61, 0x64, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x23, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, - 0x67, 0x61, 0x52, 0x65, 0x61, 0x64, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x52, 0x65, 0x61, 0x64, 0x54, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, - 0x66, 0x67, 0x61, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x12, - 0x7c, 0x0a, 0x0c, 0x46, 0x67, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, - 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x46, 0x67, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, - 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x66, - 0x67, 0x61, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x6f, 0x0a, - 0x09, 0x46, 0x67, 0x61, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x12, 0x1f, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x45, 0x78, - 0x70, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x45, - 0x78, 0x70, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2f, 0x66, 0x67, 0x61, 0x2f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x12, 0x6b, - 0x0a, 0x08, 0x46, 0x67, 0x61, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x52, 0x65, - 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x52, 0x65, - 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2f, 0x66, 0x67, 0x61, 0x2f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x12, 0x7b, 0x0a, 0x0c, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, - 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x7b, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, - 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x7b, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x12, 0x8e, 0x01, 0x0a, 0x12, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, - 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x72, - 0x6f, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x12, 0x6b, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x12, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, - 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x12, 0x66, 0x0a, 0x07, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x10, 0x41, 0x64, 0x64, - 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x26, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, - 0x64, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, - 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x61, 0x64, 0x64, 0x5f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, - 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x98, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, - 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, - 0x75, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, - 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, - 0x65, 0x72, 0x12, 0x98, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x72, 0x75, - 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x72, 0x75, 0x73, - 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, - 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x88, 0x01, - 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x72, 0x12, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, - 0x75, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, - 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, - 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, - 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x54, 0x72, 0x75, - 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, 0x12, 0x24, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x75, 0x73, - 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, - 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, 0x12, 0xb1, - 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x31, 0x2f, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x61, 0x6d, - 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x12, 0xb1, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, - 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x12, 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, - 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x61, 0x6d, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0xb1, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, - 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x73, 0x61, 0x6d, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0xa1, 0x01, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, - 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x73, 0x61, 0x6d, 0x6c, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0xa8, - 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2f, 0x73, 0x61, 0x6d, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x91, 0x01, 0x0a, 0x11, 0x52, 0x6f, - 0x74, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x43, 0x65, 0x72, 0x74, 0x12, - 0x27, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x43, 0x65, 0x72, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x53, - 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x43, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, - 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x61, 0x6d, 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x12, 0x8d, 0x01, - 0x0a, 0x10, 0x52, 0x65, 0x74, 0x69, 0x72, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x4b, - 0x65, 0x79, 0x12, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x74, 0x69, 0x72, 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x74, 0x69, 0x72, - 0x65, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, - 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x72, 0x65, 0x74, 0x69, 0x72, 0x65, - 0x5f, 0x73, 0x61, 0x6d, 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x12, 0x84, 0x01, - 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x4b, 0x65, 0x79, - 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x49, 0x64, 0x70, 0x4b, 0x65, 0x79, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x61, 0x6d, - 0x6c, 0x49, 0x64, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, - 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x73, 0x61, 0x6d, 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x12, 0x9d, 0x01, 0x0a, 0x14, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, - 0x61, 0x6d, 0x6c, 0x53, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x53, 0x61, 0x6d, 0x6c, 0x53, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x3a, 0x01, - 0x2a, 0x22, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x69, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x61, 0x6d, 0x6c, 0x5f, 0x73, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x42, 0xc6, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x64, - 0x65, 0x76, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2d, 0x67, 0x6f, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x62, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, - 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x56, 0x31, - 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, - 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_authorizer_v1_admin_proto_rawDescOnce sync.Once - file_authorizer_v1_admin_proto_rawDescData = file_authorizer_v1_admin_proto_rawDesc -) - -func file_authorizer_v1_admin_proto_rawDescGZIP() []byte { - file_authorizer_v1_admin_proto_rawDescOnce.Do(func() { - file_authorizer_v1_admin_proto_rawDescData = protoimpl.X.CompressGZIP(file_authorizer_v1_admin_proto_rawDescData) - }) - return file_authorizer_v1_admin_proto_rawDescData -} - -var file_authorizer_v1_admin_proto_msgTypes = make([]protoimpl.MessageInfo, 116) -var file_authorizer_v1_admin_proto_goTypes = []any{ - (*AdminLoginRequest)(nil), // 0: authorizer.v1.AdminLoginRequest - (*AdminLoginResponse)(nil), // 1: authorizer.v1.AdminLoginResponse - (*AdminLogoutRequest)(nil), // 2: authorizer.v1.AdminLogoutRequest - (*AdminLogoutResponse)(nil), // 3: authorizer.v1.AdminLogoutResponse - (*AdminSessionRequest)(nil), // 4: authorizer.v1.AdminSessionRequest - (*AdminSessionResponse)(nil), // 5: authorizer.v1.AdminSessionResponse - (*AdminMetaRequest)(nil), // 6: authorizer.v1.AdminMetaRequest - (*AdminMetaResponse)(nil), // 7: authorizer.v1.AdminMetaResponse - (*AdminMeta)(nil), // 8: authorizer.v1.AdminMeta - (*UsersRequest)(nil), // 9: authorizer.v1.UsersRequest - (*UsersResponse)(nil), // 10: authorizer.v1.UsersResponse - (*UserRequest)(nil), // 11: authorizer.v1.UserRequest - (*UserResponse)(nil), // 12: authorizer.v1.UserResponse - (*UpdateUserRequest)(nil), // 13: authorizer.v1.UpdateUserRequest - (*UpdateUserResponse)(nil), // 14: authorizer.v1.UpdateUserResponse - (*DeleteUserRequest)(nil), // 15: authorizer.v1.DeleteUserRequest - (*DeleteUserResponse)(nil), // 16: authorizer.v1.DeleteUserResponse - (*VerificationRequestsRequest)(nil), // 17: authorizer.v1.VerificationRequestsRequest - (*VerificationRequestsResponse)(nil), // 18: authorizer.v1.VerificationRequestsResponse - (*VerificationRequest)(nil), // 19: authorizer.v1.VerificationRequest - (*RevokeAccessRequest)(nil), // 20: authorizer.v1.RevokeAccessRequest - (*RevokeAccessResponse)(nil), // 21: authorizer.v1.RevokeAccessResponse - (*EnableAccessRequest)(nil), // 22: authorizer.v1.EnableAccessRequest - (*EnableAccessResponse)(nil), // 23: authorizer.v1.EnableAccessResponse - (*InviteMembersRequest)(nil), // 24: authorizer.v1.InviteMembersRequest - (*InviteMembersResponse)(nil), // 25: authorizer.v1.InviteMembersResponse - (*Webhook)(nil), // 26: authorizer.v1.Webhook - (*WebhookLog)(nil), // 27: authorizer.v1.WebhookLog - (*AddWebhookRequest)(nil), // 28: authorizer.v1.AddWebhookRequest - (*AddWebhookResponse)(nil), // 29: authorizer.v1.AddWebhookResponse - (*UpdateWebhookRequest)(nil), // 30: authorizer.v1.UpdateWebhookRequest - (*UpdateWebhookResponse)(nil), // 31: authorizer.v1.UpdateWebhookResponse - (*DeleteWebhookRequest)(nil), // 32: authorizer.v1.DeleteWebhookRequest - (*DeleteWebhookResponse)(nil), // 33: authorizer.v1.DeleteWebhookResponse - (*GetWebhookRequest)(nil), // 34: authorizer.v1.GetWebhookRequest - (*GetWebhookResponse)(nil), // 35: authorizer.v1.GetWebhookResponse - (*WebhooksRequest)(nil), // 36: authorizer.v1.WebhooksRequest - (*WebhooksResponse)(nil), // 37: authorizer.v1.WebhooksResponse - (*WebhookLogsRequest)(nil), // 38: authorizer.v1.WebhookLogsRequest - (*WebhookLogsResponse)(nil), // 39: authorizer.v1.WebhookLogsResponse - (*TestEndpointRequest)(nil), // 40: authorizer.v1.TestEndpointRequest - (*TestEndpointResponse)(nil), // 41: authorizer.v1.TestEndpointResponse - (*EmailTemplate)(nil), // 42: authorizer.v1.EmailTemplate - (*AddEmailTemplateRequest)(nil), // 43: authorizer.v1.AddEmailTemplateRequest - (*AddEmailTemplateResponse)(nil), // 44: authorizer.v1.AddEmailTemplateResponse - (*UpdateEmailTemplateRequest)(nil), // 45: authorizer.v1.UpdateEmailTemplateRequest - (*UpdateEmailTemplateResponse)(nil), // 46: authorizer.v1.UpdateEmailTemplateResponse - (*DeleteEmailTemplateRequest)(nil), // 47: authorizer.v1.DeleteEmailTemplateRequest - (*DeleteEmailTemplateResponse)(nil), // 48: authorizer.v1.DeleteEmailTemplateResponse - (*EmailTemplatesRequest)(nil), // 49: authorizer.v1.EmailTemplatesRequest - (*EmailTemplatesResponse)(nil), // 50: authorizer.v1.EmailTemplatesResponse - (*AuditLog)(nil), // 51: authorizer.v1.AuditLog - (*AuditLogsRequest)(nil), // 52: authorizer.v1.AuditLogsRequest - (*AuditLogsResponse)(nil), // 53: authorizer.v1.AuditLogsResponse - (*FgaModel)(nil), // 54: authorizer.v1.FgaModel - (*FgaTuple)(nil), // 55: authorizer.v1.FgaTuple - (*FgaGetModelRequest)(nil), // 56: authorizer.v1.FgaGetModelRequest - (*FgaGetModelResponse)(nil), // 57: authorizer.v1.FgaGetModelResponse - (*FgaWriteModelRequest)(nil), // 58: authorizer.v1.FgaWriteModelRequest - (*FgaWriteModelResponse)(nil), // 59: authorizer.v1.FgaWriteModelResponse - (*FgaWriteTuplesRequest)(nil), // 60: authorizer.v1.FgaWriteTuplesRequest - (*FgaWriteTuplesResponse)(nil), // 61: authorizer.v1.FgaWriteTuplesResponse - (*FgaDeleteTuplesRequest)(nil), // 62: authorizer.v1.FgaDeleteTuplesRequest - (*FgaDeleteTuplesResponse)(nil), // 63: authorizer.v1.FgaDeleteTuplesResponse - (*FgaReadTuplesRequest)(nil), // 64: authorizer.v1.FgaReadTuplesRequest - (*FgaReadTuplesResponse)(nil), // 65: authorizer.v1.FgaReadTuplesResponse - (*FgaListUsersRequest)(nil), // 66: authorizer.v1.FgaListUsersRequest - (*FgaListUsersResponse)(nil), // 67: authorizer.v1.FgaListUsersResponse - (*FgaExpandRequest)(nil), // 68: authorizer.v1.FgaExpandRequest - (*FgaExpandResponse)(nil), // 69: authorizer.v1.FgaExpandResponse - (*FgaResetRequest)(nil), // 70: authorizer.v1.FgaResetRequest - (*FgaResetResponse)(nil), // 71: authorizer.v1.FgaResetResponse - (*Client)(nil), // 72: authorizer.v1.Client - (*CreateClientRequest)(nil), // 73: authorizer.v1.CreateClientRequest - (*CreateClientResponse)(nil), // 74: authorizer.v1.CreateClientResponse - (*UpdateClientRequest)(nil), // 75: authorizer.v1.UpdateClientRequest - (*UpdateClientResponse)(nil), // 76: authorizer.v1.UpdateClientResponse - (*DeleteClientRequest)(nil), // 77: authorizer.v1.DeleteClientRequest - (*DeleteClientResponse)(nil), // 78: authorizer.v1.DeleteClientResponse - (*RotateClientSecretRequest)(nil), // 79: authorizer.v1.RotateClientSecretRequest - (*GetClientRequest)(nil), // 80: authorizer.v1.GetClientRequest - (*GetClientResponse)(nil), // 81: authorizer.v1.GetClientResponse - (*ClientsRequest)(nil), // 82: authorizer.v1.ClientsRequest - (*ClientsResponse)(nil), // 83: authorizer.v1.ClientsResponse - (*TrustedIssuer)(nil), // 84: authorizer.v1.TrustedIssuer - (*AddTrustedIssuerRequest)(nil), // 85: authorizer.v1.AddTrustedIssuerRequest - (*AddTrustedIssuerResponse)(nil), // 86: authorizer.v1.AddTrustedIssuerResponse - (*UpdateTrustedIssuerRequest)(nil), // 87: authorizer.v1.UpdateTrustedIssuerRequest - (*UpdateTrustedIssuerResponse)(nil), // 88: authorizer.v1.UpdateTrustedIssuerResponse - (*DeleteTrustedIssuerRequest)(nil), // 89: authorizer.v1.DeleteTrustedIssuerRequest - (*DeleteTrustedIssuerResponse)(nil), // 90: authorizer.v1.DeleteTrustedIssuerResponse - (*GetTrustedIssuerRequest)(nil), // 91: authorizer.v1.GetTrustedIssuerRequest - (*GetTrustedIssuerResponse)(nil), // 92: authorizer.v1.GetTrustedIssuerResponse - (*TrustedIssuersRequest)(nil), // 93: authorizer.v1.TrustedIssuersRequest - (*TrustedIssuersResponse)(nil), // 94: authorizer.v1.TrustedIssuersResponse - (*SamlServiceProvider)(nil), // 95: authorizer.v1.SamlServiceProvider - (*SamlIdpKey)(nil), // 96: authorizer.v1.SamlIdpKey - (*SamlSpMetadataParseResult)(nil), // 97: authorizer.v1.SamlSpMetadataParseResult - (*CreateSamlServiceProviderRequest)(nil), // 98: authorizer.v1.CreateSamlServiceProviderRequest - (*CreateSamlServiceProviderResponse)(nil), // 99: authorizer.v1.CreateSamlServiceProviderResponse - (*UpdateSamlServiceProviderRequest)(nil), // 100: authorizer.v1.UpdateSamlServiceProviderRequest - (*UpdateSamlServiceProviderResponse)(nil), // 101: authorizer.v1.UpdateSamlServiceProviderResponse - (*DeleteSamlServiceProviderRequest)(nil), // 102: authorizer.v1.DeleteSamlServiceProviderRequest - (*DeleteSamlServiceProviderResponse)(nil), // 103: authorizer.v1.DeleteSamlServiceProviderResponse - (*GetSamlServiceProviderRequest)(nil), // 104: authorizer.v1.GetSamlServiceProviderRequest - (*GetSamlServiceProviderResponse)(nil), // 105: authorizer.v1.GetSamlServiceProviderResponse - (*ListSamlServiceProvidersRequest)(nil), // 106: authorizer.v1.ListSamlServiceProvidersRequest - (*ListSamlServiceProvidersResponse)(nil), // 107: authorizer.v1.ListSamlServiceProvidersResponse - (*RotateSamlIdpCertRequest)(nil), // 108: authorizer.v1.RotateSamlIdpCertRequest - (*RotateSamlIdpCertResponse)(nil), // 109: authorizer.v1.RotateSamlIdpCertResponse - (*RetireSamlIdpKeyRequest)(nil), // 110: authorizer.v1.RetireSamlIdpKeyRequest - (*RetireSamlIdpKeyResponse)(nil), // 111: authorizer.v1.RetireSamlIdpKeyResponse - (*ListSamlIdpKeysRequest)(nil), // 112: authorizer.v1.ListSamlIdpKeysRequest - (*ListSamlIdpKeysResponse)(nil), // 113: authorizer.v1.ListSamlIdpKeysResponse - (*ImportSamlSpMetadataRequest)(nil), // 114: authorizer.v1.ImportSamlSpMetadataRequest - (*ImportSamlSpMetadataResponse)(nil), // 115: authorizer.v1.ImportSamlSpMetadataResponse - (*PaginationRequest)(nil), // 116: authorizer.v1.PaginationRequest - (*User)(nil), // 117: authorizer.v1.User - (*Pagination)(nil), // 118: authorizer.v1.Pagination - (*AppData)(nil), // 119: authorizer.v1.AppData - (*FgaTupleInput)(nil), // 120: authorizer.v1.FgaTupleInput -} -var file_authorizer_v1_admin_proto_depIdxs = []int32{ - 8, // 0: authorizer.v1.AdminMetaResponse.admin_meta:type_name -> authorizer.v1.AdminMeta - 116, // 1: authorizer.v1.UsersRequest.pagination:type_name -> authorizer.v1.PaginationRequest - 117, // 2: authorizer.v1.UsersResponse.users:type_name -> authorizer.v1.User - 118, // 3: authorizer.v1.UsersResponse.pagination:type_name -> authorizer.v1.Pagination - 117, // 4: authorizer.v1.UserResponse.user:type_name -> authorizer.v1.User - 119, // 5: authorizer.v1.UpdateUserRequest.app_data:type_name -> authorizer.v1.AppData - 117, // 6: authorizer.v1.UpdateUserResponse.user:type_name -> authorizer.v1.User - 116, // 7: authorizer.v1.VerificationRequestsRequest.pagination:type_name -> authorizer.v1.PaginationRequest - 19, // 8: authorizer.v1.VerificationRequestsResponse.verification_requests:type_name -> authorizer.v1.VerificationRequest - 118, // 9: authorizer.v1.VerificationRequestsResponse.pagination:type_name -> authorizer.v1.Pagination - 117, // 10: authorizer.v1.InviteMembersResponse.users:type_name -> authorizer.v1.User - 119, // 11: authorizer.v1.Webhook.headers:type_name -> authorizer.v1.AppData - 119, // 12: authorizer.v1.AddWebhookRequest.headers:type_name -> authorizer.v1.AppData - 119, // 13: authorizer.v1.UpdateWebhookRequest.headers:type_name -> authorizer.v1.AppData - 26, // 14: authorizer.v1.GetWebhookResponse.webhook:type_name -> authorizer.v1.Webhook - 116, // 15: authorizer.v1.WebhooksRequest.pagination:type_name -> authorizer.v1.PaginationRequest - 26, // 16: authorizer.v1.WebhooksResponse.webhooks:type_name -> authorizer.v1.Webhook - 118, // 17: authorizer.v1.WebhooksResponse.pagination:type_name -> authorizer.v1.Pagination - 116, // 18: authorizer.v1.WebhookLogsRequest.pagination:type_name -> authorizer.v1.PaginationRequest - 27, // 19: authorizer.v1.WebhookLogsResponse.webhook_logs:type_name -> authorizer.v1.WebhookLog - 118, // 20: authorizer.v1.WebhookLogsResponse.pagination:type_name -> authorizer.v1.Pagination - 119, // 21: authorizer.v1.TestEndpointRequest.headers:type_name -> authorizer.v1.AppData - 116, // 22: authorizer.v1.EmailTemplatesRequest.pagination:type_name -> authorizer.v1.PaginationRequest - 42, // 23: authorizer.v1.EmailTemplatesResponse.email_templates:type_name -> authorizer.v1.EmailTemplate - 118, // 24: authorizer.v1.EmailTemplatesResponse.pagination:type_name -> authorizer.v1.Pagination - 116, // 25: authorizer.v1.AuditLogsRequest.pagination:type_name -> authorizer.v1.PaginationRequest - 51, // 26: authorizer.v1.AuditLogsResponse.audit_logs:type_name -> authorizer.v1.AuditLog - 118, // 27: authorizer.v1.AuditLogsResponse.pagination:type_name -> authorizer.v1.Pagination - 54, // 28: authorizer.v1.FgaGetModelResponse.model:type_name -> authorizer.v1.FgaModel - 54, // 29: authorizer.v1.FgaWriteModelResponse.model:type_name -> authorizer.v1.FgaModel - 120, // 30: authorizer.v1.FgaWriteTuplesRequest.tuples:type_name -> authorizer.v1.FgaTupleInput - 120, // 31: authorizer.v1.FgaDeleteTuplesRequest.tuples:type_name -> authorizer.v1.FgaTupleInput - 55, // 32: authorizer.v1.FgaReadTuplesResponse.tuples:type_name -> authorizer.v1.FgaTuple - 72, // 33: authorizer.v1.CreateClientResponse.client:type_name -> authorizer.v1.Client - 72, // 34: authorizer.v1.UpdateClientResponse.client:type_name -> authorizer.v1.Client - 72, // 35: authorizer.v1.GetClientResponse.client:type_name -> authorizer.v1.Client - 116, // 36: authorizer.v1.ClientsRequest.pagination:type_name -> authorizer.v1.PaginationRequest - 72, // 37: authorizer.v1.ClientsResponse.clients:type_name -> authorizer.v1.Client - 118, // 38: authorizer.v1.ClientsResponse.pagination:type_name -> authorizer.v1.Pagination - 84, // 39: authorizer.v1.AddTrustedIssuerResponse.trusted_issuer:type_name -> authorizer.v1.TrustedIssuer - 84, // 40: authorizer.v1.UpdateTrustedIssuerResponse.trusted_issuer:type_name -> authorizer.v1.TrustedIssuer - 84, // 41: authorizer.v1.GetTrustedIssuerResponse.trusted_issuer:type_name -> authorizer.v1.TrustedIssuer - 116, // 42: authorizer.v1.TrustedIssuersRequest.pagination:type_name -> authorizer.v1.PaginationRequest - 84, // 43: authorizer.v1.TrustedIssuersResponse.trusted_issuers:type_name -> authorizer.v1.TrustedIssuer - 118, // 44: authorizer.v1.TrustedIssuersResponse.pagination:type_name -> authorizer.v1.Pagination - 95, // 45: authorizer.v1.CreateSamlServiceProviderResponse.saml_service_provider:type_name -> authorizer.v1.SamlServiceProvider - 95, // 46: authorizer.v1.UpdateSamlServiceProviderResponse.saml_service_provider:type_name -> authorizer.v1.SamlServiceProvider - 95, // 47: authorizer.v1.GetSamlServiceProviderResponse.saml_service_provider:type_name -> authorizer.v1.SamlServiceProvider - 116, // 48: authorizer.v1.ListSamlServiceProvidersRequest.pagination:type_name -> authorizer.v1.PaginationRequest - 95, // 49: authorizer.v1.ListSamlServiceProvidersResponse.saml_service_providers:type_name -> authorizer.v1.SamlServiceProvider - 118, // 50: authorizer.v1.ListSamlServiceProvidersResponse.pagination:type_name -> authorizer.v1.Pagination - 96, // 51: authorizer.v1.RotateSamlIdpCertResponse.saml_idp_key:type_name -> authorizer.v1.SamlIdpKey - 96, // 52: authorizer.v1.ListSamlIdpKeysResponse.saml_idp_keys:type_name -> authorizer.v1.SamlIdpKey - 97, // 53: authorizer.v1.ImportSamlSpMetadataResponse.result:type_name -> authorizer.v1.SamlSpMetadataParseResult - 0, // 54: authorizer.v1.AuthorizerAdminService.AdminLogin:input_type -> authorizer.v1.AdminLoginRequest - 2, // 55: authorizer.v1.AuthorizerAdminService.AdminLogout:input_type -> authorizer.v1.AdminLogoutRequest - 4, // 56: authorizer.v1.AuthorizerAdminService.AdminSession:input_type -> authorizer.v1.AdminSessionRequest - 6, // 57: authorizer.v1.AuthorizerAdminService.AdminMeta:input_type -> authorizer.v1.AdminMetaRequest - 9, // 58: authorizer.v1.AuthorizerAdminService.Users:input_type -> authorizer.v1.UsersRequest - 11, // 59: authorizer.v1.AuthorizerAdminService.User:input_type -> authorizer.v1.UserRequest - 13, // 60: authorizer.v1.AuthorizerAdminService.UpdateUser:input_type -> authorizer.v1.UpdateUserRequest - 15, // 61: authorizer.v1.AuthorizerAdminService.DeleteUser:input_type -> authorizer.v1.DeleteUserRequest - 17, // 62: authorizer.v1.AuthorizerAdminService.VerificationRequests:input_type -> authorizer.v1.VerificationRequestsRequest - 20, // 63: authorizer.v1.AuthorizerAdminService.RevokeAccess:input_type -> authorizer.v1.RevokeAccessRequest - 22, // 64: authorizer.v1.AuthorizerAdminService.EnableAccess:input_type -> authorizer.v1.EnableAccessRequest - 24, // 65: authorizer.v1.AuthorizerAdminService.InviteMembers:input_type -> authorizer.v1.InviteMembersRequest - 28, // 66: authorizer.v1.AuthorizerAdminService.AddWebhook:input_type -> authorizer.v1.AddWebhookRequest - 30, // 67: authorizer.v1.AuthorizerAdminService.UpdateWebhook:input_type -> authorizer.v1.UpdateWebhookRequest - 32, // 68: authorizer.v1.AuthorizerAdminService.DeleteWebhook:input_type -> authorizer.v1.DeleteWebhookRequest - 34, // 69: authorizer.v1.AuthorizerAdminService.GetWebhook:input_type -> authorizer.v1.GetWebhookRequest - 36, // 70: authorizer.v1.AuthorizerAdminService.Webhooks:input_type -> authorizer.v1.WebhooksRequest - 38, // 71: authorizer.v1.AuthorizerAdminService.WebhookLogs:input_type -> authorizer.v1.WebhookLogsRequest - 40, // 72: authorizer.v1.AuthorizerAdminService.TestEndpoint:input_type -> authorizer.v1.TestEndpointRequest - 43, // 73: authorizer.v1.AuthorizerAdminService.AddEmailTemplate:input_type -> authorizer.v1.AddEmailTemplateRequest - 45, // 74: authorizer.v1.AuthorizerAdminService.UpdateEmailTemplate:input_type -> authorizer.v1.UpdateEmailTemplateRequest - 47, // 75: authorizer.v1.AuthorizerAdminService.DeleteEmailTemplate:input_type -> authorizer.v1.DeleteEmailTemplateRequest - 49, // 76: authorizer.v1.AuthorizerAdminService.EmailTemplates:input_type -> authorizer.v1.EmailTemplatesRequest - 52, // 77: authorizer.v1.AuthorizerAdminService.AuditLogs:input_type -> authorizer.v1.AuditLogsRequest - 56, // 78: authorizer.v1.AuthorizerAdminService.FgaGetModel:input_type -> authorizer.v1.FgaGetModelRequest - 58, // 79: authorizer.v1.AuthorizerAdminService.FgaWriteModel:input_type -> authorizer.v1.FgaWriteModelRequest - 60, // 80: authorizer.v1.AuthorizerAdminService.FgaWriteTuples:input_type -> authorizer.v1.FgaWriteTuplesRequest - 62, // 81: authorizer.v1.AuthorizerAdminService.FgaDeleteTuples:input_type -> authorizer.v1.FgaDeleteTuplesRequest - 64, // 82: authorizer.v1.AuthorizerAdminService.FgaReadTuples:input_type -> authorizer.v1.FgaReadTuplesRequest - 66, // 83: authorizer.v1.AuthorizerAdminService.FgaListUsers:input_type -> authorizer.v1.FgaListUsersRequest - 68, // 84: authorizer.v1.AuthorizerAdminService.FgaExpand:input_type -> authorizer.v1.FgaExpandRequest - 70, // 85: authorizer.v1.AuthorizerAdminService.FgaReset:input_type -> authorizer.v1.FgaResetRequest - 73, // 86: authorizer.v1.AuthorizerAdminService.CreateClient:input_type -> authorizer.v1.CreateClientRequest - 75, // 87: authorizer.v1.AuthorizerAdminService.UpdateClient:input_type -> authorizer.v1.UpdateClientRequest - 77, // 88: authorizer.v1.AuthorizerAdminService.DeleteClient:input_type -> authorizer.v1.DeleteClientRequest - 79, // 89: authorizer.v1.AuthorizerAdminService.RotateClientSecret:input_type -> authorizer.v1.RotateClientSecretRequest - 80, // 90: authorizer.v1.AuthorizerAdminService.GetClient:input_type -> authorizer.v1.GetClientRequest - 82, // 91: authorizer.v1.AuthorizerAdminService.Clients:input_type -> authorizer.v1.ClientsRequest - 85, // 92: authorizer.v1.AuthorizerAdminService.AddTrustedIssuer:input_type -> authorizer.v1.AddTrustedIssuerRequest - 87, // 93: authorizer.v1.AuthorizerAdminService.UpdateTrustedIssuer:input_type -> authorizer.v1.UpdateTrustedIssuerRequest - 89, // 94: authorizer.v1.AuthorizerAdminService.DeleteTrustedIssuer:input_type -> authorizer.v1.DeleteTrustedIssuerRequest - 91, // 95: authorizer.v1.AuthorizerAdminService.GetTrustedIssuer:input_type -> authorizer.v1.GetTrustedIssuerRequest - 93, // 96: authorizer.v1.AuthorizerAdminService.TrustedIssuers:input_type -> authorizer.v1.TrustedIssuersRequest - 98, // 97: authorizer.v1.AuthorizerAdminService.CreateSamlServiceProvider:input_type -> authorizer.v1.CreateSamlServiceProviderRequest - 100, // 98: authorizer.v1.AuthorizerAdminService.UpdateSamlServiceProvider:input_type -> authorizer.v1.UpdateSamlServiceProviderRequest - 102, // 99: authorizer.v1.AuthorizerAdminService.DeleteSamlServiceProvider:input_type -> authorizer.v1.DeleteSamlServiceProviderRequest - 104, // 100: authorizer.v1.AuthorizerAdminService.GetSamlServiceProvider:input_type -> authorizer.v1.GetSamlServiceProviderRequest - 106, // 101: authorizer.v1.AuthorizerAdminService.ListSamlServiceProviders:input_type -> authorizer.v1.ListSamlServiceProvidersRequest - 108, // 102: authorizer.v1.AuthorizerAdminService.RotateSamlIdpCert:input_type -> authorizer.v1.RotateSamlIdpCertRequest - 110, // 103: authorizer.v1.AuthorizerAdminService.RetireSamlIdpKey:input_type -> authorizer.v1.RetireSamlIdpKeyRequest - 112, // 104: authorizer.v1.AuthorizerAdminService.ListSamlIdpKeys:input_type -> authorizer.v1.ListSamlIdpKeysRequest - 114, // 105: authorizer.v1.AuthorizerAdminService.ImportSamlSpMetadata:input_type -> authorizer.v1.ImportSamlSpMetadataRequest - 1, // 106: authorizer.v1.AuthorizerAdminService.AdminLogin:output_type -> authorizer.v1.AdminLoginResponse - 3, // 107: authorizer.v1.AuthorizerAdminService.AdminLogout:output_type -> authorizer.v1.AdminLogoutResponse - 5, // 108: authorizer.v1.AuthorizerAdminService.AdminSession:output_type -> authorizer.v1.AdminSessionResponse - 7, // 109: authorizer.v1.AuthorizerAdminService.AdminMeta:output_type -> authorizer.v1.AdminMetaResponse - 10, // 110: authorizer.v1.AuthorizerAdminService.Users:output_type -> authorizer.v1.UsersResponse - 12, // 111: authorizer.v1.AuthorizerAdminService.User:output_type -> authorizer.v1.UserResponse - 14, // 112: authorizer.v1.AuthorizerAdminService.UpdateUser:output_type -> authorizer.v1.UpdateUserResponse - 16, // 113: authorizer.v1.AuthorizerAdminService.DeleteUser:output_type -> authorizer.v1.DeleteUserResponse - 18, // 114: authorizer.v1.AuthorizerAdminService.VerificationRequests:output_type -> authorizer.v1.VerificationRequestsResponse - 21, // 115: authorizer.v1.AuthorizerAdminService.RevokeAccess:output_type -> authorizer.v1.RevokeAccessResponse - 23, // 116: authorizer.v1.AuthorizerAdminService.EnableAccess:output_type -> authorizer.v1.EnableAccessResponse - 25, // 117: authorizer.v1.AuthorizerAdminService.InviteMembers:output_type -> authorizer.v1.InviteMembersResponse - 29, // 118: authorizer.v1.AuthorizerAdminService.AddWebhook:output_type -> authorizer.v1.AddWebhookResponse - 31, // 119: authorizer.v1.AuthorizerAdminService.UpdateWebhook:output_type -> authorizer.v1.UpdateWebhookResponse - 33, // 120: authorizer.v1.AuthorizerAdminService.DeleteWebhook:output_type -> authorizer.v1.DeleteWebhookResponse - 35, // 121: authorizer.v1.AuthorizerAdminService.GetWebhook:output_type -> authorizer.v1.GetWebhookResponse - 37, // 122: authorizer.v1.AuthorizerAdminService.Webhooks:output_type -> authorizer.v1.WebhooksResponse - 39, // 123: authorizer.v1.AuthorizerAdminService.WebhookLogs:output_type -> authorizer.v1.WebhookLogsResponse - 41, // 124: authorizer.v1.AuthorizerAdminService.TestEndpoint:output_type -> authorizer.v1.TestEndpointResponse - 44, // 125: authorizer.v1.AuthorizerAdminService.AddEmailTemplate:output_type -> authorizer.v1.AddEmailTemplateResponse - 46, // 126: authorizer.v1.AuthorizerAdminService.UpdateEmailTemplate:output_type -> authorizer.v1.UpdateEmailTemplateResponse - 48, // 127: authorizer.v1.AuthorizerAdminService.DeleteEmailTemplate:output_type -> authorizer.v1.DeleteEmailTemplateResponse - 50, // 128: authorizer.v1.AuthorizerAdminService.EmailTemplates:output_type -> authorizer.v1.EmailTemplatesResponse - 53, // 129: authorizer.v1.AuthorizerAdminService.AuditLogs:output_type -> authorizer.v1.AuditLogsResponse - 57, // 130: authorizer.v1.AuthorizerAdminService.FgaGetModel:output_type -> authorizer.v1.FgaGetModelResponse - 59, // 131: authorizer.v1.AuthorizerAdminService.FgaWriteModel:output_type -> authorizer.v1.FgaWriteModelResponse - 61, // 132: authorizer.v1.AuthorizerAdminService.FgaWriteTuples:output_type -> authorizer.v1.FgaWriteTuplesResponse - 63, // 133: authorizer.v1.AuthorizerAdminService.FgaDeleteTuples:output_type -> authorizer.v1.FgaDeleteTuplesResponse - 65, // 134: authorizer.v1.AuthorizerAdminService.FgaReadTuples:output_type -> authorizer.v1.FgaReadTuplesResponse - 67, // 135: authorizer.v1.AuthorizerAdminService.FgaListUsers:output_type -> authorizer.v1.FgaListUsersResponse - 69, // 136: authorizer.v1.AuthorizerAdminService.FgaExpand:output_type -> authorizer.v1.FgaExpandResponse - 71, // 137: authorizer.v1.AuthorizerAdminService.FgaReset:output_type -> authorizer.v1.FgaResetResponse - 74, // 138: authorizer.v1.AuthorizerAdminService.CreateClient:output_type -> authorizer.v1.CreateClientResponse - 76, // 139: authorizer.v1.AuthorizerAdminService.UpdateClient:output_type -> authorizer.v1.UpdateClientResponse - 78, // 140: authorizer.v1.AuthorizerAdminService.DeleteClient:output_type -> authorizer.v1.DeleteClientResponse - 74, // 141: authorizer.v1.AuthorizerAdminService.RotateClientSecret:output_type -> authorizer.v1.CreateClientResponse - 81, // 142: authorizer.v1.AuthorizerAdminService.GetClient:output_type -> authorizer.v1.GetClientResponse - 83, // 143: authorizer.v1.AuthorizerAdminService.Clients:output_type -> authorizer.v1.ClientsResponse - 86, // 144: authorizer.v1.AuthorizerAdminService.AddTrustedIssuer:output_type -> authorizer.v1.AddTrustedIssuerResponse - 88, // 145: authorizer.v1.AuthorizerAdminService.UpdateTrustedIssuer:output_type -> authorizer.v1.UpdateTrustedIssuerResponse - 90, // 146: authorizer.v1.AuthorizerAdminService.DeleteTrustedIssuer:output_type -> authorizer.v1.DeleteTrustedIssuerResponse - 92, // 147: authorizer.v1.AuthorizerAdminService.GetTrustedIssuer:output_type -> authorizer.v1.GetTrustedIssuerResponse - 94, // 148: authorizer.v1.AuthorizerAdminService.TrustedIssuers:output_type -> authorizer.v1.TrustedIssuersResponse - 99, // 149: authorizer.v1.AuthorizerAdminService.CreateSamlServiceProvider:output_type -> authorizer.v1.CreateSamlServiceProviderResponse - 101, // 150: authorizer.v1.AuthorizerAdminService.UpdateSamlServiceProvider:output_type -> authorizer.v1.UpdateSamlServiceProviderResponse - 103, // 151: authorizer.v1.AuthorizerAdminService.DeleteSamlServiceProvider:output_type -> authorizer.v1.DeleteSamlServiceProviderResponse - 105, // 152: authorizer.v1.AuthorizerAdminService.GetSamlServiceProvider:output_type -> authorizer.v1.GetSamlServiceProviderResponse - 107, // 153: authorizer.v1.AuthorizerAdminService.ListSamlServiceProviders:output_type -> authorizer.v1.ListSamlServiceProvidersResponse - 109, // 154: authorizer.v1.AuthorizerAdminService.RotateSamlIdpCert:output_type -> authorizer.v1.RotateSamlIdpCertResponse - 111, // 155: authorizer.v1.AuthorizerAdminService.RetireSamlIdpKey:output_type -> authorizer.v1.RetireSamlIdpKeyResponse - 113, // 156: authorizer.v1.AuthorizerAdminService.ListSamlIdpKeys:output_type -> authorizer.v1.ListSamlIdpKeysResponse - 115, // 157: authorizer.v1.AuthorizerAdminService.ImportSamlSpMetadata:output_type -> authorizer.v1.ImportSamlSpMetadataResponse - 106, // [106:158] is the sub-list for method output_type - 54, // [54:106] is the sub-list for method input_type - 54, // [54:54] is the sub-list for extension type_name - 54, // [54:54] is the sub-list for extension extendee - 0, // [0:54] is the sub-list for field type_name -} - -func init() { file_authorizer_v1_admin_proto_init() } -func file_authorizer_v1_admin_proto_init() { - if File_authorizer_v1_admin_proto != nil { - return - } - file_authorizer_v1_annotations_proto_init() - file_authorizer_v1_common_proto_init() - file_authorizer_v1_pagination_proto_init() - file_authorizer_v1_types_proto_init() - file_authorizer_v1_admin_proto_msgTypes[13].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[24].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[28].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[30].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[38].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[40].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[43].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[45].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[52].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[64].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[65].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[73].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[75].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[85].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[87].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[93].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[98].OneofWrappers = []any{} - file_authorizer_v1_admin_proto_msgTypes[100].OneofWrappers = []any{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_authorizer_v1_admin_proto_rawDesc, - NumEnums: 0, - NumMessages: 116, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_authorizer_v1_admin_proto_goTypes, - DependencyIndexes: file_authorizer_v1_admin_proto_depIdxs, - MessageInfos: file_authorizer_v1_admin_proto_msgTypes, - }.Build() - File_authorizer_v1_admin_proto = out.File - file_authorizer_v1_admin_proto_rawDesc = nil - file_authorizer_v1_admin_proto_goTypes = nil - file_authorizer_v1_admin_proto_depIdxs = nil -} diff --git a/gen/go-client/authorizer/v1/admin_grpc.pb.go b/gen/go-client/authorizer/v1/admin_grpc.pb.go deleted file mode 100644 index 6f4c4048..00000000 --- a/gen/go-client/authorizer/v1/admin_grpc.pb.go +++ /dev/null @@ -1,2290 +0,0 @@ -// proto/authorizer/v1/admin.proto -// -// AuthorizerAdminService exposes Authorizer's super-admin-only operations -// (the `_`-prefixed GraphQL queries/mutations). It is registered on the SAME -// grpc.Server and gateway mux as AuthorizerService. Every RPC requires -// super-admin auth (admin session cookie or x-authorizer-admin-secret header) -// except AdminLogin, which establishes it. Admin operations are intentionally -// NOT exposed over MCP. - -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc (unknown) -// source: authorizer/v1/admin.proto - -package authorizerv1 - -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.64.0 or later. -const _ = grpc.SupportPackageIsVersion9 - -const ( - AuthorizerAdminService_AdminLogin_FullMethodName = "/authorizer.v1.AuthorizerAdminService/AdminLogin" - AuthorizerAdminService_AdminLogout_FullMethodName = "/authorizer.v1.AuthorizerAdminService/AdminLogout" - AuthorizerAdminService_AdminSession_FullMethodName = "/authorizer.v1.AuthorizerAdminService/AdminSession" - AuthorizerAdminService_AdminMeta_FullMethodName = "/authorizer.v1.AuthorizerAdminService/AdminMeta" - AuthorizerAdminService_Users_FullMethodName = "/authorizer.v1.AuthorizerAdminService/Users" - AuthorizerAdminService_User_FullMethodName = "/authorizer.v1.AuthorizerAdminService/User" - AuthorizerAdminService_UpdateUser_FullMethodName = "/authorizer.v1.AuthorizerAdminService/UpdateUser" - AuthorizerAdminService_DeleteUser_FullMethodName = "/authorizer.v1.AuthorizerAdminService/DeleteUser" - AuthorizerAdminService_VerificationRequests_FullMethodName = "/authorizer.v1.AuthorizerAdminService/VerificationRequests" - AuthorizerAdminService_RevokeAccess_FullMethodName = "/authorizer.v1.AuthorizerAdminService/RevokeAccess" - AuthorizerAdminService_EnableAccess_FullMethodName = "/authorizer.v1.AuthorizerAdminService/EnableAccess" - AuthorizerAdminService_InviteMembers_FullMethodName = "/authorizer.v1.AuthorizerAdminService/InviteMembers" - AuthorizerAdminService_AddWebhook_FullMethodName = "/authorizer.v1.AuthorizerAdminService/AddWebhook" - AuthorizerAdminService_UpdateWebhook_FullMethodName = "/authorizer.v1.AuthorizerAdminService/UpdateWebhook" - AuthorizerAdminService_DeleteWebhook_FullMethodName = "/authorizer.v1.AuthorizerAdminService/DeleteWebhook" - AuthorizerAdminService_GetWebhook_FullMethodName = "/authorizer.v1.AuthorizerAdminService/GetWebhook" - AuthorizerAdminService_Webhooks_FullMethodName = "/authorizer.v1.AuthorizerAdminService/Webhooks" - AuthorizerAdminService_WebhookLogs_FullMethodName = "/authorizer.v1.AuthorizerAdminService/WebhookLogs" - AuthorizerAdminService_TestEndpoint_FullMethodName = "/authorizer.v1.AuthorizerAdminService/TestEndpoint" - AuthorizerAdminService_AddEmailTemplate_FullMethodName = "/authorizer.v1.AuthorizerAdminService/AddEmailTemplate" - AuthorizerAdminService_UpdateEmailTemplate_FullMethodName = "/authorizer.v1.AuthorizerAdminService/UpdateEmailTemplate" - AuthorizerAdminService_DeleteEmailTemplate_FullMethodName = "/authorizer.v1.AuthorizerAdminService/DeleteEmailTemplate" - AuthorizerAdminService_EmailTemplates_FullMethodName = "/authorizer.v1.AuthorizerAdminService/EmailTemplates" - AuthorizerAdminService_AuditLogs_FullMethodName = "/authorizer.v1.AuthorizerAdminService/AuditLogs" - AuthorizerAdminService_FgaGetModel_FullMethodName = "/authorizer.v1.AuthorizerAdminService/FgaGetModel" - AuthorizerAdminService_FgaWriteModel_FullMethodName = "/authorizer.v1.AuthorizerAdminService/FgaWriteModel" - AuthorizerAdminService_FgaWriteTuples_FullMethodName = "/authorizer.v1.AuthorizerAdminService/FgaWriteTuples" - AuthorizerAdminService_FgaDeleteTuples_FullMethodName = "/authorizer.v1.AuthorizerAdminService/FgaDeleteTuples" - AuthorizerAdminService_FgaReadTuples_FullMethodName = "/authorizer.v1.AuthorizerAdminService/FgaReadTuples" - AuthorizerAdminService_FgaListUsers_FullMethodName = "/authorizer.v1.AuthorizerAdminService/FgaListUsers" - AuthorizerAdminService_FgaExpand_FullMethodName = "/authorizer.v1.AuthorizerAdminService/FgaExpand" - AuthorizerAdminService_FgaReset_FullMethodName = "/authorizer.v1.AuthorizerAdminService/FgaReset" - AuthorizerAdminService_CreateClient_FullMethodName = "/authorizer.v1.AuthorizerAdminService/CreateClient" - AuthorizerAdminService_UpdateClient_FullMethodName = "/authorizer.v1.AuthorizerAdminService/UpdateClient" - AuthorizerAdminService_DeleteClient_FullMethodName = "/authorizer.v1.AuthorizerAdminService/DeleteClient" - AuthorizerAdminService_RotateClientSecret_FullMethodName = "/authorizer.v1.AuthorizerAdminService/RotateClientSecret" - AuthorizerAdminService_GetClient_FullMethodName = "/authorizer.v1.AuthorizerAdminService/GetClient" - AuthorizerAdminService_Clients_FullMethodName = "/authorizer.v1.AuthorizerAdminService/Clients" - AuthorizerAdminService_AddTrustedIssuer_FullMethodName = "/authorizer.v1.AuthorizerAdminService/AddTrustedIssuer" - AuthorizerAdminService_UpdateTrustedIssuer_FullMethodName = "/authorizer.v1.AuthorizerAdminService/UpdateTrustedIssuer" - AuthorizerAdminService_DeleteTrustedIssuer_FullMethodName = "/authorizer.v1.AuthorizerAdminService/DeleteTrustedIssuer" - AuthorizerAdminService_GetTrustedIssuer_FullMethodName = "/authorizer.v1.AuthorizerAdminService/GetTrustedIssuer" - AuthorizerAdminService_TrustedIssuers_FullMethodName = "/authorizer.v1.AuthorizerAdminService/TrustedIssuers" - AuthorizerAdminService_CreateSamlServiceProvider_FullMethodName = "/authorizer.v1.AuthorizerAdminService/CreateSamlServiceProvider" - AuthorizerAdminService_UpdateSamlServiceProvider_FullMethodName = "/authorizer.v1.AuthorizerAdminService/UpdateSamlServiceProvider" - AuthorizerAdminService_DeleteSamlServiceProvider_FullMethodName = "/authorizer.v1.AuthorizerAdminService/DeleteSamlServiceProvider" - AuthorizerAdminService_GetSamlServiceProvider_FullMethodName = "/authorizer.v1.AuthorizerAdminService/GetSamlServiceProvider" - AuthorizerAdminService_ListSamlServiceProviders_FullMethodName = "/authorizer.v1.AuthorizerAdminService/ListSamlServiceProviders" - AuthorizerAdminService_RotateSamlIdpCert_FullMethodName = "/authorizer.v1.AuthorizerAdminService/RotateSamlIdpCert" - AuthorizerAdminService_RetireSamlIdpKey_FullMethodName = "/authorizer.v1.AuthorizerAdminService/RetireSamlIdpKey" - AuthorizerAdminService_ListSamlIdpKeys_FullMethodName = "/authorizer.v1.AuthorizerAdminService/ListSamlIdpKeys" - AuthorizerAdminService_ImportSamlSpMetadata_FullMethodName = "/authorizer.v1.AuthorizerAdminService/ImportSamlSpMetadata" -) - -// AuthorizerAdminServiceClient is the client API for AuthorizerAdminService 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. -// -// AuthorizerAdminService is the single gRPC service for Authorizer's admin -// (super-admin-only) API surface. RPCs are added one domain group at a time; -// see specs/2026-06-15-authorizer-admin-service-plan.md. -type AuthorizerAdminServiceClient interface { - // AdminLogin validates the admin secret and establishes an admin session - // (Set-Cookie for browser callers). Public entry point — the ONLY admin RPC - // that does not require an existing super-admin session. - AdminLogin(ctx context.Context, in *AdminLoginRequest, opts ...grpc.CallOption) (*AdminLoginResponse, error) - // AdminLogout clears the admin session cookie. Requires super-admin auth. - AdminLogout(ctx context.Context, in *AdminLogoutRequest, opts ...grpc.CallOption) (*AdminLogoutResponse, error) - // AdminSession refreshes the admin session cookie. Requires super-admin auth. - AdminSession(ctx context.Context, in *AdminSessionRequest, opts ...grpc.CallOption) (*AdminSessionResponse, error) - // AdminMeta returns admin-only configuration metadata (configured roles, - // default roles, protected roles). Requires super-admin auth. - AdminMeta(ctx context.Context, in *AdminMetaRequest, opts ...grpc.CallOption) (*AdminMetaResponse, error) - // Users returns a paginated list of all users. Requires super-admin auth. - Users(ctx context.Context, in *UsersRequest, opts ...grpc.CallOption) (*UsersResponse, error) - // User returns a single user by id or email. Requires super-admin auth. - User(ctx context.Context, in *UserRequest, opts ...grpc.CallOption) (*UserResponse, error) - // UpdateUser updates a user's profile, roles, MFA, or verification state and - // returns the updated user. Requires super-admin auth. - UpdateUser(ctx context.Context, in *UpdateUserRequest, opts ...grpc.CallOption) (*UpdateUserResponse, error) - // DeleteUser deletes a user (and associated OTP/verification data) by email. - // Requires super-admin auth. - DeleteUser(ctx context.Context, in *DeleteUserRequest, opts ...grpc.CallOption) (*DeleteUserResponse, error) - // VerificationRequests returns a paginated list of pending verification - // requests. Requires super-admin auth. - VerificationRequests(ctx context.Context, in *VerificationRequestsRequest, opts ...grpc.CallOption) (*VerificationRequestsResponse, error) - // RevokeAccess revokes a user's access (sets the revoked timestamp), kills - // their sessions, and fires the access-revoked webhook. Requires super-admin - // auth. - RevokeAccess(ctx context.Context, in *RevokeAccessRequest, opts ...grpc.CallOption) (*RevokeAccessResponse, error) - // EnableAccess re-enables a previously revoked user (clears the revoked - // timestamp) and fires the access-enabled webhook. Requires super-admin auth. - EnableAccess(ctx context.Context, in *EnableAccessRequest, opts ...grpc.CallOption) (*EnableAccessResponse, error) - // InviteMembers creates accounts for new emails and sends invite emails. - // Requires super-admin auth and a configured email service. - InviteMembers(ctx context.Context, in *InviteMembersRequest, opts ...grpc.CallOption) (*InviteMembersResponse, error) - // AddWebhook registers a new webhook for an event. Requires super-admin auth. - AddWebhook(ctx context.Context, in *AddWebhookRequest, opts ...grpc.CallOption) (*AddWebhookResponse, error) - // UpdateWebhook updates an existing webhook's event, endpoint, headers, or - // enabled state. Requires super-admin auth. - UpdateWebhook(ctx context.Context, in *UpdateWebhookRequest, opts ...grpc.CallOption) (*UpdateWebhookResponse, error) - // DeleteWebhook deletes a webhook by id. Requires super-admin auth. - DeleteWebhook(ctx context.Context, in *DeleteWebhookRequest, opts ...grpc.CallOption) (*DeleteWebhookResponse, error) - // GetWebhook returns a single webhook by id. Requires super-admin auth. - GetWebhook(ctx context.Context, in *GetWebhookRequest, opts ...grpc.CallOption) (*GetWebhookResponse, error) - // Webhooks returns a paginated list of webhooks. Requires super-admin auth. - Webhooks(ctx context.Context, in *WebhooksRequest, opts ...grpc.CallOption) (*WebhooksResponse, error) - // WebhookLogs returns a paginated list of webhook delivery logs, optionally - // filtered by webhook id. Requires super-admin auth. - WebhookLogs(ctx context.Context, in *WebhookLogsRequest, opts ...grpc.CallOption) (*WebhookLogsResponse, error) - // TestEndpoint sends a synthetic event payload to a webhook endpoint and - // returns the HTTP status and response body. Requires super-admin auth. - TestEndpoint(ctx context.Context, in *TestEndpointRequest, opts ...grpc.CallOption) (*TestEndpointResponse, error) - // AddEmailTemplate creates a new email template for an event. Requires - // super-admin auth. - AddEmailTemplate(ctx context.Context, in *AddEmailTemplateRequest, opts ...grpc.CallOption) (*AddEmailTemplateResponse, error) - // UpdateEmailTemplate updates an existing email template's event, subject, - // body, or design. Requires super-admin auth. - UpdateEmailTemplate(ctx context.Context, in *UpdateEmailTemplateRequest, opts ...grpc.CallOption) (*UpdateEmailTemplateResponse, error) - // DeleteEmailTemplate deletes an email template by id. Requires super-admin - // auth. - DeleteEmailTemplate(ctx context.Context, in *DeleteEmailTemplateRequest, opts ...grpc.CallOption) (*DeleteEmailTemplateResponse, error) - // EmailTemplates returns a paginated list of email templates. Requires - // super-admin auth. - EmailTemplates(ctx context.Context, in *EmailTemplatesRequest, opts ...grpc.CallOption) (*EmailTemplatesResponse, error) - // AuditLogs returns a paginated, optionally-filtered list of audit log - // entries. Requires super-admin auth. - AuditLogs(ctx context.Context, in *AuditLogsRequest, opts ...grpc.CallOption) (*AuditLogsResponse, error) - // FgaGetModel returns the active fine-grained authorization model as DSL. A - // store with no model yet returns an empty model (not an error). Requires - // super-admin auth. - FgaGetModel(ctx context.Context, in *FgaGetModelRequest, opts ...grpc.CallOption) (*FgaGetModelResponse, error) - // FgaWriteModel installs a new fine-grained authorization model from its DSL - // and returns the new model id. Requires super-admin auth. Audited. - FgaWriteModel(ctx context.Context, in *FgaWriteModelRequest, opts ...grpc.CallOption) (*FgaWriteModelResponse, error) - // FgaWriteTuples persists the given relationship tuples (additive). Requires - // super-admin auth. Audited. - FgaWriteTuples(ctx context.Context, in *FgaWriteTuplesRequest, opts ...grpc.CallOption) (*FgaWriteTuplesResponse, error) - // FgaDeleteTuples removes the given relationship tuples. Requires super-admin - // auth. Audited. - FgaDeleteTuples(ctx context.Context, in *FgaDeleteTuplesRequest, opts ...grpc.CallOption) (*FgaDeleteTuplesResponse, error) - // FgaReadTuples returns a page of persisted tuples matching the filter. - // Requires super-admin auth. - FgaReadTuples(ctx context.Context, in *FgaReadTuplesRequest, opts ...grpc.CallOption) (*FgaReadTuplesResponse, error) - // FgaListUsers returns the fully-qualified user ids of user_type that have - // relation on object ("who can access this object?"). Requires super-admin - // auth. - FgaListUsers(ctx context.Context, in *FgaListUsersRequest, opts ...grpc.CallOption) (*FgaListUsersResponse, error) - // FgaExpand returns the OpenFGA relationship/userset tree for (relation, - // object) as a JSON string (the explainability primitive). Requires - // super-admin auth. - FgaExpand(ctx context.Context, in *FgaExpandRequest, opts ...grpc.CallOption) (*FgaExpandResponse, error) - // FgaReset deletes the entire fine-grained authorization store (the model, - // all its versions, and all tuples) and starts a fresh, empty store. Refused - // while any tuples still exist. Requires super-admin auth. Destructive and - // audited. - FgaReset(ctx context.Context, in *FgaResetRequest, opts ...grpc.CallOption) (*FgaResetResponse, error) - // CreateClient provisions a new machine/workload identity and returns - // the generated client secret exactly once (only the bcrypt hash is stored). - // Requires super-admin auth. - CreateClient(ctx context.Context, in *CreateClientRequest, opts ...grpc.CallOption) (*CreateClientResponse, error) - // UpdateClient updates a service account's name, description, allowed - // scopes, or active state. It never touches the client secret. Requires - // super-admin auth. - UpdateClient(ctx context.Context, in *UpdateClientRequest, opts ...grpc.CallOption) (*UpdateClientResponse, error) - // DeleteClient deletes a service account by id, cascading to its - // trusted issuers. Requires super-admin auth. - DeleteClient(ctx context.Context, in *DeleteClientRequest, opts ...grpc.CallOption) (*DeleteClientResponse, error) - // RotateClientSecret replaces the stored client secret with a fresh - // one and returns the new plaintext exactly once (the old secret stops - // validating immediately). Reuses CreateClientResponse — the only - // admin message that carries a secret. Requires super-admin auth. - RotateClientSecret(ctx context.Context, in *RotateClientSecretRequest, opts ...grpc.CallOption) (*CreateClientResponse, error) - // GetClient returns a single service account by id. The client secret - // is never surfaced. Requires super-admin auth. - GetClient(ctx context.Context, in *GetClientRequest, opts ...grpc.CallOption) (*GetClientResponse, error) - // Clients returns a paginated list of service accounts. Client secrets - // are never surfaced. Requires super-admin auth. - Clients(ctx context.Context, in *ClientsRequest, opts ...grpc.CallOption) (*ClientsResponse, error) - // AddTrustedIssuer registers an external JWT issuer for a service account. - // subject_claim defaults to "sub" when omitted. Requires super-admin auth. - AddTrustedIssuer(ctx context.Context, in *AddTrustedIssuerRequest, opts ...grpc.CallOption) (*AddTrustedIssuerResponse, error) - // UpdateTrustedIssuer updates a trusted issuer's name, JWKS URL, expected - // audience, active state, or SPIFFE refresh hint. Requires super-admin auth. - UpdateTrustedIssuer(ctx context.Context, in *UpdateTrustedIssuerRequest, opts ...grpc.CallOption) (*UpdateTrustedIssuerResponse, error) - // DeleteTrustedIssuer deletes a trusted issuer by id. Requires super-admin - // auth. - DeleteTrustedIssuer(ctx context.Context, in *DeleteTrustedIssuerRequest, opts ...grpc.CallOption) (*DeleteTrustedIssuerResponse, error) - // GetTrustedIssuer returns a single trusted issuer by id. Requires super-admin - // auth. - GetTrustedIssuer(ctx context.Context, in *GetTrustedIssuerRequest, opts ...grpc.CallOption) (*GetTrustedIssuerResponse, error) - // TrustedIssuers returns a paginated list of trusted issuers, optionally - // filtered by service_account_id. Requires super-admin auth. - TrustedIssuers(ctx context.Context, in *TrustedIssuersRequest, opts ...grpc.CallOption) (*TrustedIssuersResponse, error) - // CreateSamlServiceProvider registers a downstream SAML 2.0 SP that Authorizer - // (acting as the IdP) issues signed assertions to. Requires super-admin auth. - CreateSamlServiceProvider(ctx context.Context, in *CreateSamlServiceProviderRequest, opts ...grpc.CallOption) (*CreateSamlServiceProviderResponse, error) - // UpdateSamlServiceProvider updates a downstream SP's name, endpoints, - // certificate, attribute mapping, or active state. Requires super-admin auth. - UpdateSamlServiceProvider(ctx context.Context, in *UpdateSamlServiceProviderRequest, opts ...grpc.CallOption) (*UpdateSamlServiceProviderResponse, error) - // DeleteSamlServiceProvider deletes a downstream SP by id. Requires - // super-admin auth. - DeleteSamlServiceProvider(ctx context.Context, in *DeleteSamlServiceProviderRequest, opts ...grpc.CallOption) (*DeleteSamlServiceProviderResponse, error) - // GetSamlServiceProvider returns a single downstream SP by id. Requires - // super-admin auth. - GetSamlServiceProvider(ctx context.Context, in *GetSamlServiceProviderRequest, opts ...grpc.CallOption) (*GetSamlServiceProviderResponse, error) - // ListSamlServiceProviders returns a paginated list of downstream SPs for an - // org. Requires super-admin auth. - ListSamlServiceProviders(ctx context.Context, in *ListSamlServiceProvidersRequest, opts ...grpc.CallOption) (*ListSamlServiceProvidersResponse, error) - // RotateSamlIdpCert generates a new current signing keypair for an org's SAML - // IdP, demoting the previous current key. Requires super-admin auth. - RotateSamlIdpCert(ctx context.Context, in *RotateSamlIdpCertRequest, opts ...grpc.CallOption) (*RotateSamlIdpCertResponse, error) - // RetireSamlIdpKey retires a published-but-not-signing SAML IdP key by id. - // Requires super-admin auth. - RetireSamlIdpKey(ctx context.Context, in *RetireSamlIdpKeyRequest, opts ...grpc.CallOption) (*RetireSamlIdpKeyResponse, error) - // ListSamlIdpKeys returns all SAML IdP signing keys for an org. Requires - // super-admin auth. - ListSamlIdpKeys(ctx context.Context, in *ListSamlIdpKeysRequest, opts ...grpc.CallOption) (*ListSamlIdpKeysResponse, error) - // ImportSamlSpMetadata parses pasted SP metadata XML and returns the fields to - // prefill a create call. It does NOT create a record and performs no remote - // fetch. Requires super-admin auth. - ImportSamlSpMetadata(ctx context.Context, in *ImportSamlSpMetadataRequest, opts ...grpc.CallOption) (*ImportSamlSpMetadataResponse, error) -} - -type authorizerAdminServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewAuthorizerAdminServiceClient(cc grpc.ClientConnInterface) AuthorizerAdminServiceClient { - return &authorizerAdminServiceClient{cc} -} - -func (c *authorizerAdminServiceClient) AdminLogin(ctx context.Context, in *AdminLoginRequest, opts ...grpc.CallOption) (*AdminLoginResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AdminLoginResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_AdminLogin_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) AdminLogout(ctx context.Context, in *AdminLogoutRequest, opts ...grpc.CallOption) (*AdminLogoutResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AdminLogoutResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_AdminLogout_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) AdminSession(ctx context.Context, in *AdminSessionRequest, opts ...grpc.CallOption) (*AdminSessionResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AdminSessionResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_AdminSession_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) AdminMeta(ctx context.Context, in *AdminMetaRequest, opts ...grpc.CallOption) (*AdminMetaResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AdminMetaResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_AdminMeta_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) Users(ctx context.Context, in *UsersRequest, opts ...grpc.CallOption) (*UsersResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(UsersResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_Users_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) User(ctx context.Context, in *UserRequest, opts ...grpc.CallOption) (*UserResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(UserResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_User_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) UpdateUser(ctx context.Context, in *UpdateUserRequest, opts ...grpc.CallOption) (*UpdateUserResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(UpdateUserResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_UpdateUser_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) DeleteUser(ctx context.Context, in *DeleteUserRequest, opts ...grpc.CallOption) (*DeleteUserResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(DeleteUserResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_DeleteUser_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) VerificationRequests(ctx context.Context, in *VerificationRequestsRequest, opts ...grpc.CallOption) (*VerificationRequestsResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(VerificationRequestsResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_VerificationRequests_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) RevokeAccess(ctx context.Context, in *RevokeAccessRequest, opts ...grpc.CallOption) (*RevokeAccessResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(RevokeAccessResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_RevokeAccess_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) EnableAccess(ctx context.Context, in *EnableAccessRequest, opts ...grpc.CallOption) (*EnableAccessResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(EnableAccessResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_EnableAccess_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) InviteMembers(ctx context.Context, in *InviteMembersRequest, opts ...grpc.CallOption) (*InviteMembersResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(InviteMembersResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_InviteMembers_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) AddWebhook(ctx context.Context, in *AddWebhookRequest, opts ...grpc.CallOption) (*AddWebhookResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AddWebhookResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_AddWebhook_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) UpdateWebhook(ctx context.Context, in *UpdateWebhookRequest, opts ...grpc.CallOption) (*UpdateWebhookResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(UpdateWebhookResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_UpdateWebhook_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) DeleteWebhook(ctx context.Context, in *DeleteWebhookRequest, opts ...grpc.CallOption) (*DeleteWebhookResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(DeleteWebhookResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_DeleteWebhook_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) GetWebhook(ctx context.Context, in *GetWebhookRequest, opts ...grpc.CallOption) (*GetWebhookResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(GetWebhookResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_GetWebhook_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) Webhooks(ctx context.Context, in *WebhooksRequest, opts ...grpc.CallOption) (*WebhooksResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(WebhooksResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_Webhooks_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) WebhookLogs(ctx context.Context, in *WebhookLogsRequest, opts ...grpc.CallOption) (*WebhookLogsResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(WebhookLogsResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_WebhookLogs_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) TestEndpoint(ctx context.Context, in *TestEndpointRequest, opts ...grpc.CallOption) (*TestEndpointResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(TestEndpointResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_TestEndpoint_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) AddEmailTemplate(ctx context.Context, in *AddEmailTemplateRequest, opts ...grpc.CallOption) (*AddEmailTemplateResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AddEmailTemplateResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_AddEmailTemplate_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) UpdateEmailTemplate(ctx context.Context, in *UpdateEmailTemplateRequest, opts ...grpc.CallOption) (*UpdateEmailTemplateResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(UpdateEmailTemplateResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_UpdateEmailTemplate_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) DeleteEmailTemplate(ctx context.Context, in *DeleteEmailTemplateRequest, opts ...grpc.CallOption) (*DeleteEmailTemplateResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(DeleteEmailTemplateResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_DeleteEmailTemplate_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) EmailTemplates(ctx context.Context, in *EmailTemplatesRequest, opts ...grpc.CallOption) (*EmailTemplatesResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(EmailTemplatesResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_EmailTemplates_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) AuditLogs(ctx context.Context, in *AuditLogsRequest, opts ...grpc.CallOption) (*AuditLogsResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AuditLogsResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_AuditLogs_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) FgaGetModel(ctx context.Context, in *FgaGetModelRequest, opts ...grpc.CallOption) (*FgaGetModelResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(FgaGetModelResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_FgaGetModel_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) FgaWriteModel(ctx context.Context, in *FgaWriteModelRequest, opts ...grpc.CallOption) (*FgaWriteModelResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(FgaWriteModelResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_FgaWriteModel_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) FgaWriteTuples(ctx context.Context, in *FgaWriteTuplesRequest, opts ...grpc.CallOption) (*FgaWriteTuplesResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(FgaWriteTuplesResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_FgaWriteTuples_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) FgaDeleteTuples(ctx context.Context, in *FgaDeleteTuplesRequest, opts ...grpc.CallOption) (*FgaDeleteTuplesResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(FgaDeleteTuplesResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_FgaDeleteTuples_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) FgaReadTuples(ctx context.Context, in *FgaReadTuplesRequest, opts ...grpc.CallOption) (*FgaReadTuplesResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(FgaReadTuplesResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_FgaReadTuples_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) FgaListUsers(ctx context.Context, in *FgaListUsersRequest, opts ...grpc.CallOption) (*FgaListUsersResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(FgaListUsersResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_FgaListUsers_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) FgaExpand(ctx context.Context, in *FgaExpandRequest, opts ...grpc.CallOption) (*FgaExpandResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(FgaExpandResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_FgaExpand_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) FgaReset(ctx context.Context, in *FgaResetRequest, opts ...grpc.CallOption) (*FgaResetResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(FgaResetResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_FgaReset_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) CreateClient(ctx context.Context, in *CreateClientRequest, opts ...grpc.CallOption) (*CreateClientResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(CreateClientResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_CreateClient_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) UpdateClient(ctx context.Context, in *UpdateClientRequest, opts ...grpc.CallOption) (*UpdateClientResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(UpdateClientResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_UpdateClient_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) DeleteClient(ctx context.Context, in *DeleteClientRequest, opts ...grpc.CallOption) (*DeleteClientResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(DeleteClientResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_DeleteClient_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) RotateClientSecret(ctx context.Context, in *RotateClientSecretRequest, opts ...grpc.CallOption) (*CreateClientResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(CreateClientResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_RotateClientSecret_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) GetClient(ctx context.Context, in *GetClientRequest, opts ...grpc.CallOption) (*GetClientResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(GetClientResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_GetClient_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) Clients(ctx context.Context, in *ClientsRequest, opts ...grpc.CallOption) (*ClientsResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(ClientsResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_Clients_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) AddTrustedIssuer(ctx context.Context, in *AddTrustedIssuerRequest, opts ...grpc.CallOption) (*AddTrustedIssuerResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AddTrustedIssuerResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_AddTrustedIssuer_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) UpdateTrustedIssuer(ctx context.Context, in *UpdateTrustedIssuerRequest, opts ...grpc.CallOption) (*UpdateTrustedIssuerResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(UpdateTrustedIssuerResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_UpdateTrustedIssuer_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) DeleteTrustedIssuer(ctx context.Context, in *DeleteTrustedIssuerRequest, opts ...grpc.CallOption) (*DeleteTrustedIssuerResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(DeleteTrustedIssuerResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_DeleteTrustedIssuer_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) GetTrustedIssuer(ctx context.Context, in *GetTrustedIssuerRequest, opts ...grpc.CallOption) (*GetTrustedIssuerResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(GetTrustedIssuerResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_GetTrustedIssuer_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) TrustedIssuers(ctx context.Context, in *TrustedIssuersRequest, opts ...grpc.CallOption) (*TrustedIssuersResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(TrustedIssuersResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_TrustedIssuers_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) CreateSamlServiceProvider(ctx context.Context, in *CreateSamlServiceProviderRequest, opts ...grpc.CallOption) (*CreateSamlServiceProviderResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(CreateSamlServiceProviderResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_CreateSamlServiceProvider_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) UpdateSamlServiceProvider(ctx context.Context, in *UpdateSamlServiceProviderRequest, opts ...grpc.CallOption) (*UpdateSamlServiceProviderResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(UpdateSamlServiceProviderResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_UpdateSamlServiceProvider_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) DeleteSamlServiceProvider(ctx context.Context, in *DeleteSamlServiceProviderRequest, opts ...grpc.CallOption) (*DeleteSamlServiceProviderResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(DeleteSamlServiceProviderResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_DeleteSamlServiceProvider_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) GetSamlServiceProvider(ctx context.Context, in *GetSamlServiceProviderRequest, opts ...grpc.CallOption) (*GetSamlServiceProviderResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(GetSamlServiceProviderResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_GetSamlServiceProvider_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) ListSamlServiceProviders(ctx context.Context, in *ListSamlServiceProvidersRequest, opts ...grpc.CallOption) (*ListSamlServiceProvidersResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(ListSamlServiceProvidersResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_ListSamlServiceProviders_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) RotateSamlIdpCert(ctx context.Context, in *RotateSamlIdpCertRequest, opts ...grpc.CallOption) (*RotateSamlIdpCertResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(RotateSamlIdpCertResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_RotateSamlIdpCert_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) RetireSamlIdpKey(ctx context.Context, in *RetireSamlIdpKeyRequest, opts ...grpc.CallOption) (*RetireSamlIdpKeyResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(RetireSamlIdpKeyResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_RetireSamlIdpKey_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) ListSamlIdpKeys(ctx context.Context, in *ListSamlIdpKeysRequest, opts ...grpc.CallOption) (*ListSamlIdpKeysResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(ListSamlIdpKeysResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_ListSamlIdpKeys_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerAdminServiceClient) ImportSamlSpMetadata(ctx context.Context, in *ImportSamlSpMetadataRequest, opts ...grpc.CallOption) (*ImportSamlSpMetadataResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(ImportSamlSpMetadataResponse) - err := c.cc.Invoke(ctx, AuthorizerAdminService_ImportSamlSpMetadata_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -// AuthorizerAdminServiceServer is the server API for AuthorizerAdminService service. -// All implementations should embed UnimplementedAuthorizerAdminServiceServer -// for forward compatibility. -// -// AuthorizerAdminService is the single gRPC service for Authorizer's admin -// (super-admin-only) API surface. RPCs are added one domain group at a time; -// see specs/2026-06-15-authorizer-admin-service-plan.md. -type AuthorizerAdminServiceServer interface { - // AdminLogin validates the admin secret and establishes an admin session - // (Set-Cookie for browser callers). Public entry point — the ONLY admin RPC - // that does not require an existing super-admin session. - AdminLogin(context.Context, *AdminLoginRequest) (*AdminLoginResponse, error) - // AdminLogout clears the admin session cookie. Requires super-admin auth. - AdminLogout(context.Context, *AdminLogoutRequest) (*AdminLogoutResponse, error) - // AdminSession refreshes the admin session cookie. Requires super-admin auth. - AdminSession(context.Context, *AdminSessionRequest) (*AdminSessionResponse, error) - // AdminMeta returns admin-only configuration metadata (configured roles, - // default roles, protected roles). Requires super-admin auth. - AdminMeta(context.Context, *AdminMetaRequest) (*AdminMetaResponse, error) - // Users returns a paginated list of all users. Requires super-admin auth. - Users(context.Context, *UsersRequest) (*UsersResponse, error) - // User returns a single user by id or email. Requires super-admin auth. - User(context.Context, *UserRequest) (*UserResponse, error) - // UpdateUser updates a user's profile, roles, MFA, or verification state and - // returns the updated user. Requires super-admin auth. - UpdateUser(context.Context, *UpdateUserRequest) (*UpdateUserResponse, error) - // DeleteUser deletes a user (and associated OTP/verification data) by email. - // Requires super-admin auth. - DeleteUser(context.Context, *DeleteUserRequest) (*DeleteUserResponse, error) - // VerificationRequests returns a paginated list of pending verification - // requests. Requires super-admin auth. - VerificationRequests(context.Context, *VerificationRequestsRequest) (*VerificationRequestsResponse, error) - // RevokeAccess revokes a user's access (sets the revoked timestamp), kills - // their sessions, and fires the access-revoked webhook. Requires super-admin - // auth. - RevokeAccess(context.Context, *RevokeAccessRequest) (*RevokeAccessResponse, error) - // EnableAccess re-enables a previously revoked user (clears the revoked - // timestamp) and fires the access-enabled webhook. Requires super-admin auth. - EnableAccess(context.Context, *EnableAccessRequest) (*EnableAccessResponse, error) - // InviteMembers creates accounts for new emails and sends invite emails. - // Requires super-admin auth and a configured email service. - InviteMembers(context.Context, *InviteMembersRequest) (*InviteMembersResponse, error) - // AddWebhook registers a new webhook for an event. Requires super-admin auth. - AddWebhook(context.Context, *AddWebhookRequest) (*AddWebhookResponse, error) - // UpdateWebhook updates an existing webhook's event, endpoint, headers, or - // enabled state. Requires super-admin auth. - UpdateWebhook(context.Context, *UpdateWebhookRequest) (*UpdateWebhookResponse, error) - // DeleteWebhook deletes a webhook by id. Requires super-admin auth. - DeleteWebhook(context.Context, *DeleteWebhookRequest) (*DeleteWebhookResponse, error) - // GetWebhook returns a single webhook by id. Requires super-admin auth. - GetWebhook(context.Context, *GetWebhookRequest) (*GetWebhookResponse, error) - // Webhooks returns a paginated list of webhooks. Requires super-admin auth. - Webhooks(context.Context, *WebhooksRequest) (*WebhooksResponse, error) - // WebhookLogs returns a paginated list of webhook delivery logs, optionally - // filtered by webhook id. Requires super-admin auth. - WebhookLogs(context.Context, *WebhookLogsRequest) (*WebhookLogsResponse, error) - // TestEndpoint sends a synthetic event payload to a webhook endpoint and - // returns the HTTP status and response body. Requires super-admin auth. - TestEndpoint(context.Context, *TestEndpointRequest) (*TestEndpointResponse, error) - // AddEmailTemplate creates a new email template for an event. Requires - // super-admin auth. - AddEmailTemplate(context.Context, *AddEmailTemplateRequest) (*AddEmailTemplateResponse, error) - // UpdateEmailTemplate updates an existing email template's event, subject, - // body, or design. Requires super-admin auth. - UpdateEmailTemplate(context.Context, *UpdateEmailTemplateRequest) (*UpdateEmailTemplateResponse, error) - // DeleteEmailTemplate deletes an email template by id. Requires super-admin - // auth. - DeleteEmailTemplate(context.Context, *DeleteEmailTemplateRequest) (*DeleteEmailTemplateResponse, error) - // EmailTemplates returns a paginated list of email templates. Requires - // super-admin auth. - EmailTemplates(context.Context, *EmailTemplatesRequest) (*EmailTemplatesResponse, error) - // AuditLogs returns a paginated, optionally-filtered list of audit log - // entries. Requires super-admin auth. - AuditLogs(context.Context, *AuditLogsRequest) (*AuditLogsResponse, error) - // FgaGetModel returns the active fine-grained authorization model as DSL. A - // store with no model yet returns an empty model (not an error). Requires - // super-admin auth. - FgaGetModel(context.Context, *FgaGetModelRequest) (*FgaGetModelResponse, error) - // FgaWriteModel installs a new fine-grained authorization model from its DSL - // and returns the new model id. Requires super-admin auth. Audited. - FgaWriteModel(context.Context, *FgaWriteModelRequest) (*FgaWriteModelResponse, error) - // FgaWriteTuples persists the given relationship tuples (additive). Requires - // super-admin auth. Audited. - FgaWriteTuples(context.Context, *FgaWriteTuplesRequest) (*FgaWriteTuplesResponse, error) - // FgaDeleteTuples removes the given relationship tuples. Requires super-admin - // auth. Audited. - FgaDeleteTuples(context.Context, *FgaDeleteTuplesRequest) (*FgaDeleteTuplesResponse, error) - // FgaReadTuples returns a page of persisted tuples matching the filter. - // Requires super-admin auth. - FgaReadTuples(context.Context, *FgaReadTuplesRequest) (*FgaReadTuplesResponse, error) - // FgaListUsers returns the fully-qualified user ids of user_type that have - // relation on object ("who can access this object?"). Requires super-admin - // auth. - FgaListUsers(context.Context, *FgaListUsersRequest) (*FgaListUsersResponse, error) - // FgaExpand returns the OpenFGA relationship/userset tree for (relation, - // object) as a JSON string (the explainability primitive). Requires - // super-admin auth. - FgaExpand(context.Context, *FgaExpandRequest) (*FgaExpandResponse, error) - // FgaReset deletes the entire fine-grained authorization store (the model, - // all its versions, and all tuples) and starts a fresh, empty store. Refused - // while any tuples still exist. Requires super-admin auth. Destructive and - // audited. - FgaReset(context.Context, *FgaResetRequest) (*FgaResetResponse, error) - // CreateClient provisions a new machine/workload identity and returns - // the generated client secret exactly once (only the bcrypt hash is stored). - // Requires super-admin auth. - CreateClient(context.Context, *CreateClientRequest) (*CreateClientResponse, error) - // UpdateClient updates a service account's name, description, allowed - // scopes, or active state. It never touches the client secret. Requires - // super-admin auth. - UpdateClient(context.Context, *UpdateClientRequest) (*UpdateClientResponse, error) - // DeleteClient deletes a service account by id, cascading to its - // trusted issuers. Requires super-admin auth. - DeleteClient(context.Context, *DeleteClientRequest) (*DeleteClientResponse, error) - // RotateClientSecret replaces the stored client secret with a fresh - // one and returns the new plaintext exactly once (the old secret stops - // validating immediately). Reuses CreateClientResponse — the only - // admin message that carries a secret. Requires super-admin auth. - RotateClientSecret(context.Context, *RotateClientSecretRequest) (*CreateClientResponse, error) - // GetClient returns a single service account by id. The client secret - // is never surfaced. Requires super-admin auth. - GetClient(context.Context, *GetClientRequest) (*GetClientResponse, error) - // Clients returns a paginated list of service accounts. Client secrets - // are never surfaced. Requires super-admin auth. - Clients(context.Context, *ClientsRequest) (*ClientsResponse, error) - // AddTrustedIssuer registers an external JWT issuer for a service account. - // subject_claim defaults to "sub" when omitted. Requires super-admin auth. - AddTrustedIssuer(context.Context, *AddTrustedIssuerRequest) (*AddTrustedIssuerResponse, error) - // UpdateTrustedIssuer updates a trusted issuer's name, JWKS URL, expected - // audience, active state, or SPIFFE refresh hint. Requires super-admin auth. - UpdateTrustedIssuer(context.Context, *UpdateTrustedIssuerRequest) (*UpdateTrustedIssuerResponse, error) - // DeleteTrustedIssuer deletes a trusted issuer by id. Requires super-admin - // auth. - DeleteTrustedIssuer(context.Context, *DeleteTrustedIssuerRequest) (*DeleteTrustedIssuerResponse, error) - // GetTrustedIssuer returns a single trusted issuer by id. Requires super-admin - // auth. - GetTrustedIssuer(context.Context, *GetTrustedIssuerRequest) (*GetTrustedIssuerResponse, error) - // TrustedIssuers returns a paginated list of trusted issuers, optionally - // filtered by service_account_id. Requires super-admin auth. - TrustedIssuers(context.Context, *TrustedIssuersRequest) (*TrustedIssuersResponse, error) - // CreateSamlServiceProvider registers a downstream SAML 2.0 SP that Authorizer - // (acting as the IdP) issues signed assertions to. Requires super-admin auth. - CreateSamlServiceProvider(context.Context, *CreateSamlServiceProviderRequest) (*CreateSamlServiceProviderResponse, error) - // UpdateSamlServiceProvider updates a downstream SP's name, endpoints, - // certificate, attribute mapping, or active state. Requires super-admin auth. - UpdateSamlServiceProvider(context.Context, *UpdateSamlServiceProviderRequest) (*UpdateSamlServiceProviderResponse, error) - // DeleteSamlServiceProvider deletes a downstream SP by id. Requires - // super-admin auth. - DeleteSamlServiceProvider(context.Context, *DeleteSamlServiceProviderRequest) (*DeleteSamlServiceProviderResponse, error) - // GetSamlServiceProvider returns a single downstream SP by id. Requires - // super-admin auth. - GetSamlServiceProvider(context.Context, *GetSamlServiceProviderRequest) (*GetSamlServiceProviderResponse, error) - // ListSamlServiceProviders returns a paginated list of downstream SPs for an - // org. Requires super-admin auth. - ListSamlServiceProviders(context.Context, *ListSamlServiceProvidersRequest) (*ListSamlServiceProvidersResponse, error) - // RotateSamlIdpCert generates a new current signing keypair for an org's SAML - // IdP, demoting the previous current key. Requires super-admin auth. - RotateSamlIdpCert(context.Context, *RotateSamlIdpCertRequest) (*RotateSamlIdpCertResponse, error) - // RetireSamlIdpKey retires a published-but-not-signing SAML IdP key by id. - // Requires super-admin auth. - RetireSamlIdpKey(context.Context, *RetireSamlIdpKeyRequest) (*RetireSamlIdpKeyResponse, error) - // ListSamlIdpKeys returns all SAML IdP signing keys for an org. Requires - // super-admin auth. - ListSamlIdpKeys(context.Context, *ListSamlIdpKeysRequest) (*ListSamlIdpKeysResponse, error) - // ImportSamlSpMetadata parses pasted SP metadata XML and returns the fields to - // prefill a create call. It does NOT create a record and performs no remote - // fetch. Requires super-admin auth. - ImportSamlSpMetadata(context.Context, *ImportSamlSpMetadataRequest) (*ImportSamlSpMetadataResponse, error) -} - -// UnimplementedAuthorizerAdminServiceServer should be embedded to have -// forward compatible implementations. -// -// NOTE: this should be embedded by value instead of pointer to avoid a nil -// pointer dereference when methods are called. -type UnimplementedAuthorizerAdminServiceServer struct{} - -func (UnimplementedAuthorizerAdminServiceServer) AdminLogin(context.Context, *AdminLoginRequest) (*AdminLoginResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminLogin not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) AdminLogout(context.Context, *AdminLogoutRequest) (*AdminLogoutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminLogout not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) AdminSession(context.Context, *AdminSessionRequest) (*AdminSessionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminSession not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) AdminMeta(context.Context, *AdminMetaRequest) (*AdminMetaResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AdminMeta not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) Users(context.Context, *UsersRequest) (*UsersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Users not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) User(context.Context, *UserRequest) (*UserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method User not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) UpdateUser(context.Context, *UpdateUserRequest) (*UpdateUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateUser not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) DeleteUser(context.Context, *DeleteUserRequest) (*DeleteUserResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteUser not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) VerificationRequests(context.Context, *VerificationRequestsRequest) (*VerificationRequestsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method VerificationRequests not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) RevokeAccess(context.Context, *RevokeAccessRequest) (*RevokeAccessResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RevokeAccess not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) EnableAccess(context.Context, *EnableAccessRequest) (*EnableAccessResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EnableAccess not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) InviteMembers(context.Context, *InviteMembersRequest) (*InviteMembersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method InviteMembers not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) AddWebhook(context.Context, *AddWebhookRequest) (*AddWebhookResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AddWebhook not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) UpdateWebhook(context.Context, *UpdateWebhookRequest) (*UpdateWebhookResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateWebhook not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) DeleteWebhook(context.Context, *DeleteWebhookRequest) (*DeleteWebhookResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteWebhook not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) GetWebhook(context.Context, *GetWebhookRequest) (*GetWebhookResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetWebhook not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) Webhooks(context.Context, *WebhooksRequest) (*WebhooksResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Webhooks not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) WebhookLogs(context.Context, *WebhookLogsRequest) (*WebhookLogsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method WebhookLogs not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) TestEndpoint(context.Context, *TestEndpointRequest) (*TestEndpointResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TestEndpoint not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) AddEmailTemplate(context.Context, *AddEmailTemplateRequest) (*AddEmailTemplateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AddEmailTemplate not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) UpdateEmailTemplate(context.Context, *UpdateEmailTemplateRequest) (*UpdateEmailTemplateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateEmailTemplate not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) DeleteEmailTemplate(context.Context, *DeleteEmailTemplateRequest) (*DeleteEmailTemplateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteEmailTemplate not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) EmailTemplates(context.Context, *EmailTemplatesRequest) (*EmailTemplatesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EmailTemplates not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) AuditLogs(context.Context, *AuditLogsRequest) (*AuditLogsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AuditLogs not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) FgaGetModel(context.Context, *FgaGetModelRequest) (*FgaGetModelResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FgaGetModel not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) FgaWriteModel(context.Context, *FgaWriteModelRequest) (*FgaWriteModelResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FgaWriteModel not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) FgaWriteTuples(context.Context, *FgaWriteTuplesRequest) (*FgaWriteTuplesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FgaWriteTuples not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) FgaDeleteTuples(context.Context, *FgaDeleteTuplesRequest) (*FgaDeleteTuplesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FgaDeleteTuples not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) FgaReadTuples(context.Context, *FgaReadTuplesRequest) (*FgaReadTuplesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FgaReadTuples not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) FgaListUsers(context.Context, *FgaListUsersRequest) (*FgaListUsersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FgaListUsers not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) FgaExpand(context.Context, *FgaExpandRequest) (*FgaExpandResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FgaExpand not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) FgaReset(context.Context, *FgaResetRequest) (*FgaResetResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FgaReset not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) CreateClient(context.Context, *CreateClientRequest) (*CreateClientResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateClient not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) UpdateClient(context.Context, *UpdateClientRequest) (*UpdateClientResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateClient not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) DeleteClient(context.Context, *DeleteClientRequest) (*DeleteClientResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteClient not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) RotateClientSecret(context.Context, *RotateClientSecretRequest) (*CreateClientResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RotateClientSecret not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) GetClient(context.Context, *GetClientRequest) (*GetClientResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetClient not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) Clients(context.Context, *ClientsRequest) (*ClientsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Clients not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) AddTrustedIssuer(context.Context, *AddTrustedIssuerRequest) (*AddTrustedIssuerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AddTrustedIssuer not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) UpdateTrustedIssuer(context.Context, *UpdateTrustedIssuerRequest) (*UpdateTrustedIssuerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateTrustedIssuer not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) DeleteTrustedIssuer(context.Context, *DeleteTrustedIssuerRequest) (*DeleteTrustedIssuerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteTrustedIssuer not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) GetTrustedIssuer(context.Context, *GetTrustedIssuerRequest) (*GetTrustedIssuerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetTrustedIssuer not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) TrustedIssuers(context.Context, *TrustedIssuersRequest) (*TrustedIssuersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TrustedIssuers not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) CreateSamlServiceProvider(context.Context, *CreateSamlServiceProviderRequest) (*CreateSamlServiceProviderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateSamlServiceProvider not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) UpdateSamlServiceProvider(context.Context, *UpdateSamlServiceProviderRequest) (*UpdateSamlServiceProviderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateSamlServiceProvider not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) DeleteSamlServiceProvider(context.Context, *DeleteSamlServiceProviderRequest) (*DeleteSamlServiceProviderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteSamlServiceProvider not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) GetSamlServiceProvider(context.Context, *GetSamlServiceProviderRequest) (*GetSamlServiceProviderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetSamlServiceProvider not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) ListSamlServiceProviders(context.Context, *ListSamlServiceProvidersRequest) (*ListSamlServiceProvidersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListSamlServiceProviders not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) RotateSamlIdpCert(context.Context, *RotateSamlIdpCertRequest) (*RotateSamlIdpCertResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RotateSamlIdpCert not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) RetireSamlIdpKey(context.Context, *RetireSamlIdpKeyRequest) (*RetireSamlIdpKeyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RetireSamlIdpKey not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) ListSamlIdpKeys(context.Context, *ListSamlIdpKeysRequest) (*ListSamlIdpKeysResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListSamlIdpKeys not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) ImportSamlSpMetadata(context.Context, *ImportSamlSpMetadataRequest) (*ImportSamlSpMetadataResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ImportSamlSpMetadata not implemented") -} -func (UnimplementedAuthorizerAdminServiceServer) testEmbeddedByValue() {} - -// UnsafeAuthorizerAdminServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to AuthorizerAdminServiceServer will -// result in compilation errors. -type UnsafeAuthorizerAdminServiceServer interface { - mustEmbedUnimplementedAuthorizerAdminServiceServer() -} - -func RegisterAuthorizerAdminServiceServer(s grpc.ServiceRegistrar, srv AuthorizerAdminServiceServer) { - // If the following call pancis, it indicates UnimplementedAuthorizerAdminServiceServer was - // embedded by pointer and is nil. This will cause panics if an - // unimplemented method is ever invoked, so we test this at initialization - // time to prevent it from happening at runtime later due to I/O. - if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { - t.testEmbeddedByValue() - } - s.RegisterService(&AuthorizerAdminService_ServiceDesc, srv) -} - -func _AuthorizerAdminService_AdminLogin_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AdminLoginRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).AdminLogin(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_AdminLogin_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).AdminLogin(ctx, req.(*AdminLoginRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_AdminLogout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AdminLogoutRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).AdminLogout(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_AdminLogout_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).AdminLogout(ctx, req.(*AdminLogoutRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_AdminSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AdminSessionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).AdminSession(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_AdminSession_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).AdminSession(ctx, req.(*AdminSessionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_AdminMeta_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AdminMetaRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).AdminMeta(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_AdminMeta_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).AdminMeta(ctx, req.(*AdminMetaRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_Users_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UsersRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).Users(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_Users_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).Users(ctx, req.(*UsersRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_User_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UserRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).User(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_User_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).User(ctx, req.(*UserRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_UpdateUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateUserRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).UpdateUser(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_UpdateUser_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).UpdateUser(ctx, req.(*UpdateUserRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_DeleteUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteUserRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).DeleteUser(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_DeleteUser_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).DeleteUser(ctx, req.(*DeleteUserRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_VerificationRequests_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(VerificationRequestsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).VerificationRequests(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_VerificationRequests_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).VerificationRequests(ctx, req.(*VerificationRequestsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_RevokeAccess_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RevokeAccessRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).RevokeAccess(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_RevokeAccess_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).RevokeAccess(ctx, req.(*RevokeAccessRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_EnableAccess_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(EnableAccessRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).EnableAccess(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_EnableAccess_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).EnableAccess(ctx, req.(*EnableAccessRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_InviteMembers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(InviteMembersRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).InviteMembers(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_InviteMembers_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).InviteMembers(ctx, req.(*InviteMembersRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_AddWebhook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AddWebhookRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).AddWebhook(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_AddWebhook_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).AddWebhook(ctx, req.(*AddWebhookRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_UpdateWebhook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateWebhookRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).UpdateWebhook(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_UpdateWebhook_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).UpdateWebhook(ctx, req.(*UpdateWebhookRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_DeleteWebhook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteWebhookRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).DeleteWebhook(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_DeleteWebhook_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).DeleteWebhook(ctx, req.(*DeleteWebhookRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_GetWebhook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetWebhookRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).GetWebhook(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_GetWebhook_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).GetWebhook(ctx, req.(*GetWebhookRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_Webhooks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(WebhooksRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).Webhooks(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_Webhooks_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).Webhooks(ctx, req.(*WebhooksRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_WebhookLogs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(WebhookLogsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).WebhookLogs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_WebhookLogs_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).WebhookLogs(ctx, req.(*WebhookLogsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_TestEndpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TestEndpointRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).TestEndpoint(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_TestEndpoint_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).TestEndpoint(ctx, req.(*TestEndpointRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_AddEmailTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AddEmailTemplateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).AddEmailTemplate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_AddEmailTemplate_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).AddEmailTemplate(ctx, req.(*AddEmailTemplateRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_UpdateEmailTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateEmailTemplateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).UpdateEmailTemplate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_UpdateEmailTemplate_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).UpdateEmailTemplate(ctx, req.(*UpdateEmailTemplateRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_DeleteEmailTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteEmailTemplateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).DeleteEmailTemplate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_DeleteEmailTemplate_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).DeleteEmailTemplate(ctx, req.(*DeleteEmailTemplateRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_EmailTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(EmailTemplatesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).EmailTemplates(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_EmailTemplates_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).EmailTemplates(ctx, req.(*EmailTemplatesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_AuditLogs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AuditLogsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).AuditLogs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_AuditLogs_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).AuditLogs(ctx, req.(*AuditLogsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_FgaGetModel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FgaGetModelRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).FgaGetModel(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_FgaGetModel_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).FgaGetModel(ctx, req.(*FgaGetModelRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_FgaWriteModel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FgaWriteModelRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).FgaWriteModel(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_FgaWriteModel_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).FgaWriteModel(ctx, req.(*FgaWriteModelRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_FgaWriteTuples_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FgaWriteTuplesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).FgaWriteTuples(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_FgaWriteTuples_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).FgaWriteTuples(ctx, req.(*FgaWriteTuplesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_FgaDeleteTuples_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FgaDeleteTuplesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).FgaDeleteTuples(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_FgaDeleteTuples_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).FgaDeleteTuples(ctx, req.(*FgaDeleteTuplesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_FgaReadTuples_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FgaReadTuplesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).FgaReadTuples(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_FgaReadTuples_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).FgaReadTuples(ctx, req.(*FgaReadTuplesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_FgaListUsers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FgaListUsersRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).FgaListUsers(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_FgaListUsers_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).FgaListUsers(ctx, req.(*FgaListUsersRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_FgaExpand_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FgaExpandRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).FgaExpand(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_FgaExpand_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).FgaExpand(ctx, req.(*FgaExpandRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_FgaReset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FgaResetRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).FgaReset(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_FgaReset_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).FgaReset(ctx, req.(*FgaResetRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_CreateClient_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateClientRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).CreateClient(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_CreateClient_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).CreateClient(ctx, req.(*CreateClientRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_UpdateClient_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateClientRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).UpdateClient(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_UpdateClient_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).UpdateClient(ctx, req.(*UpdateClientRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_DeleteClient_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteClientRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).DeleteClient(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_DeleteClient_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).DeleteClient(ctx, req.(*DeleteClientRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_RotateClientSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RotateClientSecretRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).RotateClientSecret(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_RotateClientSecret_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).RotateClientSecret(ctx, req.(*RotateClientSecretRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_GetClient_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetClientRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).GetClient(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_GetClient_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).GetClient(ctx, req.(*GetClientRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_Clients_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ClientsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).Clients(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_Clients_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).Clients(ctx, req.(*ClientsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_AddTrustedIssuer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AddTrustedIssuerRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).AddTrustedIssuer(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_AddTrustedIssuer_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).AddTrustedIssuer(ctx, req.(*AddTrustedIssuerRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_UpdateTrustedIssuer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateTrustedIssuerRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).UpdateTrustedIssuer(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_UpdateTrustedIssuer_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).UpdateTrustedIssuer(ctx, req.(*UpdateTrustedIssuerRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_DeleteTrustedIssuer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteTrustedIssuerRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).DeleteTrustedIssuer(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_DeleteTrustedIssuer_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).DeleteTrustedIssuer(ctx, req.(*DeleteTrustedIssuerRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_GetTrustedIssuer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetTrustedIssuerRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).GetTrustedIssuer(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_GetTrustedIssuer_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).GetTrustedIssuer(ctx, req.(*GetTrustedIssuerRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_TrustedIssuers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TrustedIssuersRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).TrustedIssuers(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_TrustedIssuers_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).TrustedIssuers(ctx, req.(*TrustedIssuersRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_CreateSamlServiceProvider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateSamlServiceProviderRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).CreateSamlServiceProvider(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_CreateSamlServiceProvider_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).CreateSamlServiceProvider(ctx, req.(*CreateSamlServiceProviderRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_UpdateSamlServiceProvider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateSamlServiceProviderRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).UpdateSamlServiceProvider(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_UpdateSamlServiceProvider_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).UpdateSamlServiceProvider(ctx, req.(*UpdateSamlServiceProviderRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_DeleteSamlServiceProvider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteSamlServiceProviderRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).DeleteSamlServiceProvider(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_DeleteSamlServiceProvider_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).DeleteSamlServiceProvider(ctx, req.(*DeleteSamlServiceProviderRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_GetSamlServiceProvider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetSamlServiceProviderRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).GetSamlServiceProvider(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_GetSamlServiceProvider_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).GetSamlServiceProvider(ctx, req.(*GetSamlServiceProviderRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_ListSamlServiceProviders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListSamlServiceProvidersRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).ListSamlServiceProviders(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_ListSamlServiceProviders_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).ListSamlServiceProviders(ctx, req.(*ListSamlServiceProvidersRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_RotateSamlIdpCert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RotateSamlIdpCertRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).RotateSamlIdpCert(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_RotateSamlIdpCert_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).RotateSamlIdpCert(ctx, req.(*RotateSamlIdpCertRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_RetireSamlIdpKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RetireSamlIdpKeyRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).RetireSamlIdpKey(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_RetireSamlIdpKey_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).RetireSamlIdpKey(ctx, req.(*RetireSamlIdpKeyRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_ListSamlIdpKeys_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListSamlIdpKeysRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).ListSamlIdpKeys(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_ListSamlIdpKeys_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).ListSamlIdpKeys(ctx, req.(*ListSamlIdpKeysRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerAdminService_ImportSamlSpMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ImportSamlSpMetadataRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerAdminServiceServer).ImportSamlSpMetadata(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerAdminService_ImportSamlSpMetadata_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerAdminServiceServer).ImportSamlSpMetadata(ctx, req.(*ImportSamlSpMetadataRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// AuthorizerAdminService_ServiceDesc is the grpc.ServiceDesc for AuthorizerAdminService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var AuthorizerAdminService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "authorizer.v1.AuthorizerAdminService", - HandlerType: (*AuthorizerAdminServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "AdminLogin", - Handler: _AuthorizerAdminService_AdminLogin_Handler, - }, - { - MethodName: "AdminLogout", - Handler: _AuthorizerAdminService_AdminLogout_Handler, - }, - { - MethodName: "AdminSession", - Handler: _AuthorizerAdminService_AdminSession_Handler, - }, - { - MethodName: "AdminMeta", - Handler: _AuthorizerAdminService_AdminMeta_Handler, - }, - { - MethodName: "Users", - Handler: _AuthorizerAdminService_Users_Handler, - }, - { - MethodName: "User", - Handler: _AuthorizerAdminService_User_Handler, - }, - { - MethodName: "UpdateUser", - Handler: _AuthorizerAdminService_UpdateUser_Handler, - }, - { - MethodName: "DeleteUser", - Handler: _AuthorizerAdminService_DeleteUser_Handler, - }, - { - MethodName: "VerificationRequests", - Handler: _AuthorizerAdminService_VerificationRequests_Handler, - }, - { - MethodName: "RevokeAccess", - Handler: _AuthorizerAdminService_RevokeAccess_Handler, - }, - { - MethodName: "EnableAccess", - Handler: _AuthorizerAdminService_EnableAccess_Handler, - }, - { - MethodName: "InviteMembers", - Handler: _AuthorizerAdminService_InviteMembers_Handler, - }, - { - MethodName: "AddWebhook", - Handler: _AuthorizerAdminService_AddWebhook_Handler, - }, - { - MethodName: "UpdateWebhook", - Handler: _AuthorizerAdminService_UpdateWebhook_Handler, - }, - { - MethodName: "DeleteWebhook", - Handler: _AuthorizerAdminService_DeleteWebhook_Handler, - }, - { - MethodName: "GetWebhook", - Handler: _AuthorizerAdminService_GetWebhook_Handler, - }, - { - MethodName: "Webhooks", - Handler: _AuthorizerAdminService_Webhooks_Handler, - }, - { - MethodName: "WebhookLogs", - Handler: _AuthorizerAdminService_WebhookLogs_Handler, - }, - { - MethodName: "TestEndpoint", - Handler: _AuthorizerAdminService_TestEndpoint_Handler, - }, - { - MethodName: "AddEmailTemplate", - Handler: _AuthorizerAdminService_AddEmailTemplate_Handler, - }, - { - MethodName: "UpdateEmailTemplate", - Handler: _AuthorizerAdminService_UpdateEmailTemplate_Handler, - }, - { - MethodName: "DeleteEmailTemplate", - Handler: _AuthorizerAdminService_DeleteEmailTemplate_Handler, - }, - { - MethodName: "EmailTemplates", - Handler: _AuthorizerAdminService_EmailTemplates_Handler, - }, - { - MethodName: "AuditLogs", - Handler: _AuthorizerAdminService_AuditLogs_Handler, - }, - { - MethodName: "FgaGetModel", - Handler: _AuthorizerAdminService_FgaGetModel_Handler, - }, - { - MethodName: "FgaWriteModel", - Handler: _AuthorizerAdminService_FgaWriteModel_Handler, - }, - { - MethodName: "FgaWriteTuples", - Handler: _AuthorizerAdminService_FgaWriteTuples_Handler, - }, - { - MethodName: "FgaDeleteTuples", - Handler: _AuthorizerAdminService_FgaDeleteTuples_Handler, - }, - { - MethodName: "FgaReadTuples", - Handler: _AuthorizerAdminService_FgaReadTuples_Handler, - }, - { - MethodName: "FgaListUsers", - Handler: _AuthorizerAdminService_FgaListUsers_Handler, - }, - { - MethodName: "FgaExpand", - Handler: _AuthorizerAdminService_FgaExpand_Handler, - }, - { - MethodName: "FgaReset", - Handler: _AuthorizerAdminService_FgaReset_Handler, - }, - { - MethodName: "CreateClient", - Handler: _AuthorizerAdminService_CreateClient_Handler, - }, - { - MethodName: "UpdateClient", - Handler: _AuthorizerAdminService_UpdateClient_Handler, - }, - { - MethodName: "DeleteClient", - Handler: _AuthorizerAdminService_DeleteClient_Handler, - }, - { - MethodName: "RotateClientSecret", - Handler: _AuthorizerAdminService_RotateClientSecret_Handler, - }, - { - MethodName: "GetClient", - Handler: _AuthorizerAdminService_GetClient_Handler, - }, - { - MethodName: "Clients", - Handler: _AuthorizerAdminService_Clients_Handler, - }, - { - MethodName: "AddTrustedIssuer", - Handler: _AuthorizerAdminService_AddTrustedIssuer_Handler, - }, - { - MethodName: "UpdateTrustedIssuer", - Handler: _AuthorizerAdminService_UpdateTrustedIssuer_Handler, - }, - { - MethodName: "DeleteTrustedIssuer", - Handler: _AuthorizerAdminService_DeleteTrustedIssuer_Handler, - }, - { - MethodName: "GetTrustedIssuer", - Handler: _AuthorizerAdminService_GetTrustedIssuer_Handler, - }, - { - MethodName: "TrustedIssuers", - Handler: _AuthorizerAdminService_TrustedIssuers_Handler, - }, - { - MethodName: "CreateSamlServiceProvider", - Handler: _AuthorizerAdminService_CreateSamlServiceProvider_Handler, - }, - { - MethodName: "UpdateSamlServiceProvider", - Handler: _AuthorizerAdminService_UpdateSamlServiceProvider_Handler, - }, - { - MethodName: "DeleteSamlServiceProvider", - Handler: _AuthorizerAdminService_DeleteSamlServiceProvider_Handler, - }, - { - MethodName: "GetSamlServiceProvider", - Handler: _AuthorizerAdminService_GetSamlServiceProvider_Handler, - }, - { - MethodName: "ListSamlServiceProviders", - Handler: _AuthorizerAdminService_ListSamlServiceProviders_Handler, - }, - { - MethodName: "RotateSamlIdpCert", - Handler: _AuthorizerAdminService_RotateSamlIdpCert_Handler, - }, - { - MethodName: "RetireSamlIdpKey", - Handler: _AuthorizerAdminService_RetireSamlIdpKey_Handler, - }, - { - MethodName: "ListSamlIdpKeys", - Handler: _AuthorizerAdminService_ListSamlIdpKeys_Handler, - }, - { - MethodName: "ImportSamlSpMetadata", - Handler: _AuthorizerAdminService_ImportSamlSpMetadata_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "authorizer/v1/admin.proto", -} diff --git a/gen/go-client/authorizer/v1/annotations.pb.go b/gen/go-client/authorizer/v1/annotations.pb.go deleted file mode 100644 index 7e4662d8..00000000 --- a/gen/go-client/authorizer/v1/annotations.pb.go +++ /dev/null @@ -1,331 +0,0 @@ -// proto/authorizer/v1/annotations.proto -// -// Custom proto options that decorate Authorizer service methods with -// authorization, audit, MCP-exposure, and visibility metadata. -// -// All options live on MethodOptions and are read at runtime by the gRPC -// server (auth/permission/audit interceptors) and by the MCP server, and -// at codegen time by the OpenAPI generator. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.35.2 -// protoc (unknown) -// source: authorizer/v1/annotations.proto - -package authorizerv1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - 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) -) - -// PermissionRequirement names one (resource, scope) pair the caller must hold -// to invoke the RPC. Multiple values on a method are AND-combined (the caller -// must hold *all* of them); to express OR semantics, list the alternatives in -// a single PermissionRequirement with a wildcard scope and let the policy -// engine evaluate. -type PermissionRequirement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Resource name as registered in the authz subsystem (e.g. "user", - // "webhook"). Required. - Resource string `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` - // Scope name (e.g. "read", "write", "delete"). Required. - Scope string `protobuf:"bytes,2,opt,name=scope,proto3" json:"scope,omitempty"` -} - -func (x *PermissionRequirement) Reset() { - *x = PermissionRequirement{} - mi := &file_authorizer_v1_annotations_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *PermissionRequirement) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PermissionRequirement) ProtoMessage() {} - -func (x *PermissionRequirement) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_annotations_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PermissionRequirement.ProtoReflect.Descriptor instead. -func (*PermissionRequirement) Descriptor() ([]byte, []int) { - return file_authorizer_v1_annotations_proto_rawDescGZIP(), []int{0} -} - -func (x *PermissionRequirement) GetResource() string { - if x != nil { - return x.Resource - } - return "" -} - -func (x *PermissionRequirement) GetScope() string { - if x != nil { - return x.Scope - } - return "" -} - -// McpTool marks an RPC as exposed via the Authorizer MCP server. -// Defaults to "not exposed" when the option is absent. -type McpTool struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Whether the RPC is reachable as an MCP tool. Default false. - Exposed bool `protobuf:"varint,1,opt,name=exposed,proto3" json:"exposed,omitempty"` - // Optional override for the tool name surfaced to MCP clients. When unset, - // the snake_case form of the RPC method name is used. - ToolName string `protobuf:"bytes,2,opt,name=tool_name,json=toolName,proto3" json:"tool_name,omitempty"` - // Hint to the MCP host that the tool mutates state in a way that warrants - // explicit user confirmation (e.g. delete operations). - Destructive bool `protobuf:"varint,3,opt,name=destructive,proto3" json:"destructive,omitempty"` -} - -func (x *McpTool) Reset() { - *x = McpTool{} - mi := &file_authorizer_v1_annotations_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *McpTool) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*McpTool) ProtoMessage() {} - -func (x *McpTool) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_annotations_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use McpTool.ProtoReflect.Descriptor instead. -func (*McpTool) Descriptor() ([]byte, []int) { - return file_authorizer_v1_annotations_proto_rawDescGZIP(), []int{1} -} - -func (x *McpTool) GetExposed() bool { - if x != nil { - return x.Exposed - } - return false -} - -func (x *McpTool) GetToolName() string { - if x != nil { - return x.ToolName - } - return "" -} - -func (x *McpTool) GetDestructive() bool { - if x != nil { - return x.Destructive - } - return false -} - -var file_authorizer_v1_annotations_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptorpb.MethodOptions)(nil), - ExtensionType: ([]*PermissionRequirement)(nil), - Field: 50001, - Name: "authorizer.v1.required_permissions", - Tag: "bytes,50001,rep,name=required_permissions", - Filename: "authorizer/v1/annotations.proto", - }, - { - ExtendedType: (*descriptorpb.MethodOptions)(nil), - ExtensionType: (*McpTool)(nil), - Field: 50002, - Name: "authorizer.v1.mcp_tool", - Tag: "bytes,50002,opt,name=mcp_tool", - Filename: "authorizer/v1/annotations.proto", - }, - { - ExtendedType: (*descriptorpb.MethodOptions)(nil), - ExtensionType: (*bool)(nil), - Field: 50003, - Name: "authorizer.v1.audit_log", - Tag: "varint,50003,opt,name=audit_log", - Filename: "authorizer/v1/annotations.proto", - }, - { - ExtendedType: (*descriptorpb.MethodOptions)(nil), - ExtensionType: (*bool)(nil), - Field: 50004, - Name: "authorizer.v1.public", - Tag: "varint,50004,opt,name=public", - Filename: "authorizer/v1/annotations.proto", - }, -} - -// Extension fields to descriptorpb.MethodOptions. -var ( - // All permissions the caller must hold (AND). Empty means "no authz check - // beyond the auth interceptor". - // - // repeated authorizer.v1.PermissionRequirement required_permissions = 50001; - E_RequiredPermissions = &file_authorizer_v1_annotations_proto_extTypes[0] - // MCP-tool exposure metadata; absent means "not exposed". - // - // optional authorizer.v1.McpTool mcp_tool = 50002; - E_McpTool = &file_authorizer_v1_annotations_proto_extTypes[1] - // When true, the audit interceptor records an entry for the invocation. - // - // optional bool audit_log = 50003; - E_AuditLog = &file_authorizer_v1_annotations_proto_extTypes[2] - // When true, the auth interceptor allows unauthenticated callers. Use for - // login, signup, magic-link request, password-reset request, etc. - // - // optional bool public = 50004; - E_Public = &file_authorizer_v1_annotations_proto_extTypes[3] -) - -var File_authorizer_v1_annotations_proto protoreflect.FileDescriptor - -var file_authorizer_v1_annotations_proto_rawDesc = []byte{ - 0x0a, 0x1f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x49, 0x0a, 0x15, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x22, 0x62, 0x0a, - 0x07, 0x4d, 0x63, 0x70, 0x54, 0x6f, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x6f, - 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x78, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x3a, 0x79, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xd1, 0x86, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x53, 0x0a, 0x08, - 0x6d, 0x63, 0x70, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xd2, 0x86, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x63, 0x70, 0x54, 0x6f, 0x6f, 0x6c, 0x52, 0x07, 0x6d, 0x63, 0x70, 0x54, 0x6f, 0x6f, - 0x6c, 0x3a, 0x3d, 0x0a, 0x09, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x12, 0x1e, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xd3, - 0x86, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, - 0x3a, 0x38, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xd4, 0x86, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x42, 0xcc, 0x01, 0x0a, 0x11, 0x63, - 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x42, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x64, 0x65, 0x76, 0x2f, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2d, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x62, 0x2f, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0d, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x19, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_authorizer_v1_annotations_proto_rawDescOnce sync.Once - file_authorizer_v1_annotations_proto_rawDescData = file_authorizer_v1_annotations_proto_rawDesc -) - -func file_authorizer_v1_annotations_proto_rawDescGZIP() []byte { - file_authorizer_v1_annotations_proto_rawDescOnce.Do(func() { - file_authorizer_v1_annotations_proto_rawDescData = protoimpl.X.CompressGZIP(file_authorizer_v1_annotations_proto_rawDescData) - }) - return file_authorizer_v1_annotations_proto_rawDescData -} - -var file_authorizer_v1_annotations_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_authorizer_v1_annotations_proto_goTypes = []any{ - (*PermissionRequirement)(nil), // 0: authorizer.v1.PermissionRequirement - (*McpTool)(nil), // 1: authorizer.v1.McpTool - (*descriptorpb.MethodOptions)(nil), // 2: google.protobuf.MethodOptions -} -var file_authorizer_v1_annotations_proto_depIdxs = []int32{ - 2, // 0: authorizer.v1.required_permissions:extendee -> google.protobuf.MethodOptions - 2, // 1: authorizer.v1.mcp_tool:extendee -> google.protobuf.MethodOptions - 2, // 2: authorizer.v1.audit_log:extendee -> google.protobuf.MethodOptions - 2, // 3: authorizer.v1.public:extendee -> google.protobuf.MethodOptions - 0, // 4: authorizer.v1.required_permissions:type_name -> authorizer.v1.PermissionRequirement - 1, // 5: authorizer.v1.mcp_tool:type_name -> authorizer.v1.McpTool - 6, // [6:6] is the sub-list for method output_type - 6, // [6:6] is the sub-list for method input_type - 4, // [4:6] is the sub-list for extension type_name - 0, // [0:4] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_authorizer_v1_annotations_proto_init() } -func file_authorizer_v1_annotations_proto_init() { - if File_authorizer_v1_annotations_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_authorizer_v1_annotations_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 4, - NumServices: 0, - }, - GoTypes: file_authorizer_v1_annotations_proto_goTypes, - DependencyIndexes: file_authorizer_v1_annotations_proto_depIdxs, - MessageInfos: file_authorizer_v1_annotations_proto_msgTypes, - ExtensionInfos: file_authorizer_v1_annotations_proto_extTypes, - }.Build() - File_authorizer_v1_annotations_proto = out.File - file_authorizer_v1_annotations_proto_rawDesc = nil - file_authorizer_v1_annotations_proto_goTypes = nil - file_authorizer_v1_annotations_proto_depIdxs = nil -} diff --git a/gen/go-client/authorizer/v1/authorizer.pb.go b/gen/go-client/authorizer/v1/authorizer.pb.go deleted file mode 100644 index ff68b2cb..00000000 --- a/gen/go-client/authorizer/v1/authorizer.pb.go +++ /dev/null @@ -1,3106 +0,0 @@ -// AuthorizerService is the single gRPC service that exposes Authorizer's -// public API. Method names match the GraphQL operation names 1:1 -// (snake_case in GraphQL → PascalCase in proto): Signup, Login, -// MagicLinkLogin, VerifyEmail, ResendVerifyEmail, ForgotPassword, -// ResetPassword, VerifyOtp, ResendOtp, SkipMfaSetup, LockMfa, -// EmailOtpMfaSetup, SmsOtpMfaSetup, UpdateProfile, DeactivateAccount, -// Revoke, Meta, Session, Profile, ValidateJwtToken, ValidateSession, -// CheckPermissions, ListPermissions, Logout. -// -// Why one service: clients consume a single typed client per language, -// discovery is trivial, and the surface mirrors the GraphQL one users -// already know. The trade-off is that we lose resource-oriented evolution -// (no `List/Get/Create` symmetry per resource) — acceptable for an auth -// surface where most operations are stateless verbs anyway. -// -// REST mapping follows a simple rule: -// - GET /v1/{method} when the request body is empty (Meta, Profile, -// Logout) -// - POST /v1/{method} otherwise - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.35.2 -// protoc (unknown) -// source: authorizer/v1/authorizer.proto - -package authorizerv1 - -import ( - _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type SignupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - PhoneNumber string `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` - Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` - ConfirmPassword string `protobuf:"bytes,4,opt,name=confirm_password,json=confirmPassword,proto3" json:"confirm_password,omitempty"` - GivenName string `protobuf:"bytes,5,opt,name=given_name,json=givenName,proto3" json:"given_name,omitempty"` - FamilyName string `protobuf:"bytes,6,opt,name=family_name,json=familyName,proto3" json:"family_name,omitempty"` - MiddleName string `protobuf:"bytes,7,opt,name=middle_name,json=middleName,proto3" json:"middle_name,omitempty"` - Nickname string `protobuf:"bytes,8,opt,name=nickname,proto3" json:"nickname,omitempty"` - Gender string `protobuf:"bytes,9,opt,name=gender,proto3" json:"gender,omitempty"` - Birthdate string `protobuf:"bytes,10,opt,name=birthdate,proto3" json:"birthdate,omitempty"` - Picture string `protobuf:"bytes,11,opt,name=picture,proto3" json:"picture,omitempty"` - Roles []string `protobuf:"bytes,12,rep,name=roles,proto3" json:"roles,omitempty"` - Scope []string `protobuf:"bytes,13,rep,name=scope,proto3" json:"scope,omitempty"` - RedirectUri string `protobuf:"bytes,14,opt,name=redirect_uri,json=redirectUri,proto3" json:"redirect_uri,omitempty"` - State string `protobuf:"bytes,16,opt,name=state,proto3" json:"state,omitempty"` - AppData *AppData `protobuf:"bytes,17,opt,name=app_data,json=appData,proto3" json:"app_data,omitempty"` -} - -func (x *SignupRequest) Reset() { - *x = SignupRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SignupRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignupRequest) ProtoMessage() {} - -func (x *SignupRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SignupRequest.ProtoReflect.Descriptor instead. -func (*SignupRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{0} -} - -func (x *SignupRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *SignupRequest) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -func (x *SignupRequest) GetPassword() string { - if x != nil { - return x.Password - } - return "" -} - -func (x *SignupRequest) GetConfirmPassword() string { - if x != nil { - return x.ConfirmPassword - } - return "" -} - -func (x *SignupRequest) GetGivenName() string { - if x != nil { - return x.GivenName - } - return "" -} - -func (x *SignupRequest) GetFamilyName() string { - if x != nil { - return x.FamilyName - } - return "" -} - -func (x *SignupRequest) GetMiddleName() string { - if x != nil { - return x.MiddleName - } - return "" -} - -func (x *SignupRequest) GetNickname() string { - if x != nil { - return x.Nickname - } - return "" -} - -func (x *SignupRequest) GetGender() string { - if x != nil { - return x.Gender - } - return "" -} - -func (x *SignupRequest) GetBirthdate() string { - if x != nil { - return x.Birthdate - } - return "" -} - -func (x *SignupRequest) GetPicture() string { - if x != nil { - return x.Picture - } - return "" -} - -func (x *SignupRequest) GetRoles() []string { - if x != nil { - return x.Roles - } - return nil -} - -func (x *SignupRequest) GetScope() []string { - if x != nil { - return x.Scope - } - return nil -} - -func (x *SignupRequest) GetRedirectUri() string { - if x != nil { - return x.RedirectUri - } - return "" -} - -func (x *SignupRequest) GetState() string { - if x != nil { - return x.State - } - return "" -} - -func (x *SignupRequest) GetAppData() *AppData { - if x != nil { - return x.AppData - } - return nil -} - -type LoginRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - PhoneNumber string `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` - Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` - Roles []string `protobuf:"bytes,4,rep,name=roles,proto3" json:"roles,omitempty"` - Scope []string `protobuf:"bytes,5,rep,name=scope,proto3" json:"scope,omitempty"` - State string `protobuf:"bytes,6,opt,name=state,proto3" json:"state,omitempty"` -} - -func (x *LoginRequest) Reset() { - *x = LoginRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *LoginRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoginRequest) ProtoMessage() {} - -func (x *LoginRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoginRequest.ProtoReflect.Descriptor instead. -func (*LoginRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{1} -} - -func (x *LoginRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *LoginRequest) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -func (x *LoginRequest) GetPassword() string { - if x != nil { - return x.Password - } - return "" -} - -func (x *LoginRequest) GetRoles() []string { - if x != nil { - return x.Roles - } - return nil -} - -func (x *LoginRequest) GetScope() []string { - if x != nil { - return x.Scope - } - return nil -} - -func (x *LoginRequest) GetState() string { - if x != nil { - return x.State - } - return "" -} - -type LogoutRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *LogoutRequest) Reset() { - *x = LogoutRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *LogoutRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LogoutRequest) ProtoMessage() {} - -func (x *LogoutRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[2] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LogoutRequest.ProtoReflect.Descriptor instead. -func (*LogoutRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{2} -} - -type LogoutResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *LogoutResponse) Reset() { - *x = LogoutResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *LogoutResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LogoutResponse) ProtoMessage() {} - -func (x *LogoutResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[3] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LogoutResponse.ProtoReflect.Descriptor instead. -func (*LogoutResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{3} -} - -func (x *LogoutResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type MagicLinkLoginRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - Roles []string `protobuf:"bytes,2,rep,name=roles,proto3" json:"roles,omitempty"` - Scope []string `protobuf:"bytes,3,rep,name=scope,proto3" json:"scope,omitempty"` - State string `protobuf:"bytes,4,opt,name=state,proto3" json:"state,omitempty"` - RedirectUri string `protobuf:"bytes,5,opt,name=redirect_uri,json=redirectUri,proto3" json:"redirect_uri,omitempty"` -} - -func (x *MagicLinkLoginRequest) Reset() { - *x = MagicLinkLoginRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *MagicLinkLoginRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MagicLinkLoginRequest) ProtoMessage() {} - -func (x *MagicLinkLoginRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[4] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MagicLinkLoginRequest.ProtoReflect.Descriptor instead. -func (*MagicLinkLoginRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{4} -} - -func (x *MagicLinkLoginRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *MagicLinkLoginRequest) GetRoles() []string { - if x != nil { - return x.Roles - } - return nil -} - -func (x *MagicLinkLoginRequest) GetScope() []string { - if x != nil { - return x.Scope - } - return nil -} - -func (x *MagicLinkLoginRequest) GetState() string { - if x != nil { - return x.State - } - return "" -} - -func (x *MagicLinkLoginRequest) GetRedirectUri() string { - if x != nil { - return x.RedirectUri - } - return "" -} - -type MagicLinkLoginResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *MagicLinkLoginResponse) Reset() { - *x = MagicLinkLoginResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *MagicLinkLoginResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MagicLinkLoginResponse) ProtoMessage() {} - -func (x *MagicLinkLoginResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[5] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MagicLinkLoginResponse.ProtoReflect.Descriptor instead. -func (*MagicLinkLoginResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{5} -} - -func (x *MagicLinkLoginResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type VerifyEmailRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` -} - -func (x *VerifyEmailRequest) Reset() { - *x = VerifyEmailRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VerifyEmailRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VerifyEmailRequest) ProtoMessage() {} - -func (x *VerifyEmailRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[6] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VerifyEmailRequest.ProtoReflect.Descriptor instead. -func (*VerifyEmailRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{6} -} - -func (x *VerifyEmailRequest) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *VerifyEmailRequest) GetState() string { - if x != nil { - return x.State - } - return "" -} - -type ResendVerifyEmailRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - Identifier string `protobuf:"bytes,2,opt,name=identifier,proto3" json:"identifier,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` -} - -func (x *ResendVerifyEmailRequest) Reset() { - *x = ResendVerifyEmailRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ResendVerifyEmailRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResendVerifyEmailRequest) ProtoMessage() {} - -func (x *ResendVerifyEmailRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[7] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ResendVerifyEmailRequest.ProtoReflect.Descriptor instead. -func (*ResendVerifyEmailRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{7} -} - -func (x *ResendVerifyEmailRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *ResendVerifyEmailRequest) GetIdentifier() string { - if x != nil { - return x.Identifier - } - return "" -} - -func (x *ResendVerifyEmailRequest) GetState() string { - if x != nil { - return x.State - } - return "" -} - -type ResendVerifyEmailResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *ResendVerifyEmailResponse) Reset() { - *x = ResendVerifyEmailResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ResendVerifyEmailResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResendVerifyEmailResponse) ProtoMessage() {} - -func (x *ResendVerifyEmailResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[8] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ResendVerifyEmailResponse.ProtoReflect.Descriptor instead. -func (*ResendVerifyEmailResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{8} -} - -func (x *ResendVerifyEmailResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type VerifyOtpRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Exactly one of email / phone_number is required. - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - PhoneNumber string `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` - Otp string `protobuf:"bytes,3,opt,name=otp,proto3" json:"otp,omitempty"` - IsTotp bool `protobuf:"varint,4,opt,name=is_totp,json=isTotp,proto3" json:"is_totp,omitempty"` - State string `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"` -} - -func (x *VerifyOtpRequest) Reset() { - *x = VerifyOtpRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VerifyOtpRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VerifyOtpRequest) ProtoMessage() {} - -func (x *VerifyOtpRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[9] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VerifyOtpRequest.ProtoReflect.Descriptor instead. -func (*VerifyOtpRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{9} -} - -func (x *VerifyOtpRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *VerifyOtpRequest) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -func (x *VerifyOtpRequest) GetOtp() string { - if x != nil { - return x.Otp - } - return "" -} - -func (x *VerifyOtpRequest) GetIsTotp() bool { - if x != nil { - return x.IsTotp - } - return false -} - -func (x *VerifyOtpRequest) GetState() string { - if x != nil { - return x.State - } - return "" -} - -type ResendOtpRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - PhoneNumber string `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` -} - -func (x *ResendOtpRequest) Reset() { - *x = ResendOtpRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ResendOtpRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResendOtpRequest) ProtoMessage() {} - -func (x *ResendOtpRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[10] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ResendOtpRequest.ProtoReflect.Descriptor instead. -func (*ResendOtpRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{10} -} - -func (x *ResendOtpRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *ResendOtpRequest) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -func (x *ResendOtpRequest) GetState() string { - if x != nil { - return x.State - } - return "" -} - -type ResendOtpResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *ResendOtpResponse) Reset() { - *x = ResendOtpResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ResendOtpResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResendOtpResponse) ProtoMessage() {} - -func (x *ResendOtpResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[11] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ResendOtpResponse.ProtoReflect.Descriptor instead. -func (*ResendOtpResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{11} -} - -func (x *ResendOtpResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type SkipMfaSetupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Either email or phone_number is required, to resolve which user's MFA - // session cookie this is. - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - PhoneNumber string `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` -} - -func (x *SkipMfaSetupRequest) Reset() { - *x = SkipMfaSetupRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SkipMfaSetupRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SkipMfaSetupRequest) ProtoMessage() {} - -func (x *SkipMfaSetupRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[12] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SkipMfaSetupRequest.ProtoReflect.Descriptor instead. -func (*SkipMfaSetupRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{12} -} - -func (x *SkipMfaSetupRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *SkipMfaSetupRequest) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -func (x *SkipMfaSetupRequest) GetState() string { - if x != nil { - return x.State - } - return "" -} - -type LockMfaRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Either email or phone_number is required, to resolve which user's MFA - // session cookie this is — same pattern as SkipMfaSetupRequest. - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - PhoneNumber string `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` -} - -func (x *LockMfaRequest) Reset() { - *x = LockMfaRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *LockMfaRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LockMfaRequest) ProtoMessage() {} - -func (x *LockMfaRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[13] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LockMfaRequest.ProtoReflect.Descriptor instead. -func (*LockMfaRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{13} -} - -func (x *LockMfaRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *LockMfaRequest) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -type LockMfaResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *LockMfaResponse) Reset() { - *x = LockMfaResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *LockMfaResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LockMfaResponse) ProtoMessage() {} - -func (x *LockMfaResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[14] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LockMfaResponse.ProtoReflect.Descriptor instead. -func (*LockMfaResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{14} -} - -func (x *LockMfaResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type EmailOtpMfaSetupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Only used in the MFA-session-cookie mode (a caller in the withheld - // first-time-offer state, with no bearer token yet) to resolve which - // user's MFA session cookie this is — same pattern as SkipMfaSetupRequest - // / LockMfaRequest. Ignored when the caller has a valid bearer - // token/session, which already identifies the user. - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - PhoneNumber string `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` -} - -func (x *EmailOtpMfaSetupRequest) Reset() { - *x = EmailOtpMfaSetupRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *EmailOtpMfaSetupRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EmailOtpMfaSetupRequest) ProtoMessage() {} - -func (x *EmailOtpMfaSetupRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[15] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EmailOtpMfaSetupRequest.ProtoReflect.Descriptor instead. -func (*EmailOtpMfaSetupRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{15} -} - -func (x *EmailOtpMfaSetupRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *EmailOtpMfaSetupRequest) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -type EmailOtpMfaSetupResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *EmailOtpMfaSetupResponse) Reset() { - *x = EmailOtpMfaSetupResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *EmailOtpMfaSetupResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EmailOtpMfaSetupResponse) ProtoMessage() {} - -func (x *EmailOtpMfaSetupResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[16] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EmailOtpMfaSetupResponse.ProtoReflect.Descriptor instead. -func (*EmailOtpMfaSetupResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{16} -} - -func (x *EmailOtpMfaSetupResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type SmsOtpMfaSetupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Same dual-mode identification semantics as EmailOtpMfaSetupRequest. - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - PhoneNumber string `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` -} - -func (x *SmsOtpMfaSetupRequest) Reset() { - *x = SmsOtpMfaSetupRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SmsOtpMfaSetupRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SmsOtpMfaSetupRequest) ProtoMessage() {} - -func (x *SmsOtpMfaSetupRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[17] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SmsOtpMfaSetupRequest.ProtoReflect.Descriptor instead. -func (*SmsOtpMfaSetupRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{17} -} - -func (x *SmsOtpMfaSetupRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *SmsOtpMfaSetupRequest) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -type SmsOtpMfaSetupResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *SmsOtpMfaSetupResponse) Reset() { - *x = SmsOtpMfaSetupResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SmsOtpMfaSetupResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SmsOtpMfaSetupResponse) ProtoMessage() {} - -func (x *SmsOtpMfaSetupResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[18] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SmsOtpMfaSetupResponse.ProtoReflect.Descriptor instead. -func (*SmsOtpMfaSetupResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{18} -} - -func (x *SmsOtpMfaSetupResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type ForgotPasswordRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - PhoneNumber string `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - RedirectUri string `protobuf:"bytes,4,opt,name=redirect_uri,json=redirectUri,proto3" json:"redirect_uri,omitempty"` -} - -func (x *ForgotPasswordRequest) Reset() { - *x = ForgotPasswordRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ForgotPasswordRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ForgotPasswordRequest) ProtoMessage() {} - -func (x *ForgotPasswordRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[19] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ForgotPasswordRequest.ProtoReflect.Descriptor instead. -func (*ForgotPasswordRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{19} -} - -func (x *ForgotPasswordRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *ForgotPasswordRequest) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -func (x *ForgotPasswordRequest) GetState() string { - if x != nil { - return x.State - } - return "" -} - -func (x *ForgotPasswordRequest) GetRedirectUri() string { - if x != nil { - return x.RedirectUri - } - return "" -} - -type ForgotPasswordResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - // For SMS-driven flows the UI may need to render an OTP entry screen. - ShouldShowMobileOtpScreen bool `protobuf:"varint,2,opt,name=should_show_mobile_otp_screen,json=shouldShowMobileOtpScreen,proto3" json:"should_show_mobile_otp_screen,omitempty"` -} - -func (x *ForgotPasswordResponse) Reset() { - *x = ForgotPasswordResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ForgotPasswordResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ForgotPasswordResponse) ProtoMessage() {} - -func (x *ForgotPasswordResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[20] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ForgotPasswordResponse.ProtoReflect.Descriptor instead. -func (*ForgotPasswordResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{20} -} - -func (x *ForgotPasswordResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -func (x *ForgotPasswordResponse) GetShouldShowMobileOtpScreen() bool { - if x != nil { - return x.ShouldShowMobileOtpScreen - } - return false -} - -type ResetPasswordRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // For email flows: the token from the reset email. For SMS flows: the OTP. - Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - Otp string `protobuf:"bytes,2,opt,name=otp,proto3" json:"otp,omitempty"` - PhoneNumber string `protobuf:"bytes,3,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` - Password string `protobuf:"bytes,4,opt,name=password,proto3" json:"password,omitempty"` - ConfirmPassword string `protobuf:"bytes,5,opt,name=confirm_password,json=confirmPassword,proto3" json:"confirm_password,omitempty"` -} - -func (x *ResetPasswordRequest) Reset() { - *x = ResetPasswordRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ResetPasswordRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResetPasswordRequest) ProtoMessage() {} - -func (x *ResetPasswordRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[21] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ResetPasswordRequest.ProtoReflect.Descriptor instead. -func (*ResetPasswordRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{21} -} - -func (x *ResetPasswordRequest) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *ResetPasswordRequest) GetOtp() string { - if x != nil { - return x.Otp - } - return "" -} - -func (x *ResetPasswordRequest) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -func (x *ResetPasswordRequest) GetPassword() string { - if x != nil { - return x.Password - } - return "" -} - -func (x *ResetPasswordRequest) GetConfirmPassword() string { - if x != nil { - return x.ConfirmPassword - } - return "" -} - -type ResetPasswordResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *ResetPasswordResponse) Reset() { - *x = ResetPasswordResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ResetPasswordResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResetPasswordResponse) ProtoMessage() {} - -func (x *ResetPasswordResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[22] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ResetPasswordResponse.ProtoReflect.Descriptor instead. -func (*ResetPasswordResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{22} -} - -func (x *ResetPasswordResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type ProfileRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ProfileRequest) Reset() { - *x = ProfileRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProfileRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProfileRequest) ProtoMessage() {} - -func (x *ProfileRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[23] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProfileRequest.ProtoReflect.Descriptor instead. -func (*ProfileRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{23} -} - -type UpdateProfileRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OldPassword string `protobuf:"bytes,1,opt,name=old_password,json=oldPassword,proto3" json:"old_password,omitempty"` - NewPassword string `protobuf:"bytes,2,opt,name=new_password,json=newPassword,proto3" json:"new_password,omitempty"` - ConfirmNewPassword string `protobuf:"bytes,3,opt,name=confirm_new_password,json=confirmNewPassword,proto3" json:"confirm_new_password,omitempty"` - Email string `protobuf:"bytes,4,opt,name=email,proto3" json:"email,omitempty"` - GivenName string `protobuf:"bytes,5,opt,name=given_name,json=givenName,proto3" json:"given_name,omitempty"` - FamilyName string `protobuf:"bytes,6,opt,name=family_name,json=familyName,proto3" json:"family_name,omitempty"` - MiddleName string `protobuf:"bytes,7,opt,name=middle_name,json=middleName,proto3" json:"middle_name,omitempty"` - Nickname string `protobuf:"bytes,8,opt,name=nickname,proto3" json:"nickname,omitempty"` - Gender string `protobuf:"bytes,9,opt,name=gender,proto3" json:"gender,omitempty"` - Birthdate string `protobuf:"bytes,10,opt,name=birthdate,proto3" json:"birthdate,omitempty"` - PhoneNumber string `protobuf:"bytes,11,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` - Picture string `protobuf:"bytes,12,opt,name=picture,proto3" json:"picture,omitempty"` - // optional: absent means "leave MFA unchanged"; present false explicitly - // disables MFA. A non-optional bool would make every partial update send - // false and silently disable MFA. - IsMultiFactorAuthEnabled *bool `protobuf:"varint,13,opt,name=is_multi_factor_auth_enabled,json=isMultiFactorAuthEnabled,proto3,oneof" json:"is_multi_factor_auth_enabled,omitempty"` - AppData *AppData `protobuf:"bytes,14,opt,name=app_data,json=appData,proto3" json:"app_data,omitempty"` -} - -func (x *UpdateProfileRequest) Reset() { - *x = UpdateProfileRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateProfileRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateProfileRequest) ProtoMessage() {} - -func (x *UpdateProfileRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[24] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateProfileRequest.ProtoReflect.Descriptor instead. -func (*UpdateProfileRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{24} -} - -func (x *UpdateProfileRequest) GetOldPassword() string { - if x != nil { - return x.OldPassword - } - return "" -} - -func (x *UpdateProfileRequest) GetNewPassword() string { - if x != nil { - return x.NewPassword - } - return "" -} - -func (x *UpdateProfileRequest) GetConfirmNewPassword() string { - if x != nil { - return x.ConfirmNewPassword - } - return "" -} - -func (x *UpdateProfileRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *UpdateProfileRequest) GetGivenName() string { - if x != nil { - return x.GivenName - } - return "" -} - -func (x *UpdateProfileRequest) GetFamilyName() string { - if x != nil { - return x.FamilyName - } - return "" -} - -func (x *UpdateProfileRequest) GetMiddleName() string { - if x != nil { - return x.MiddleName - } - return "" -} - -func (x *UpdateProfileRequest) GetNickname() string { - if x != nil { - return x.Nickname - } - return "" -} - -func (x *UpdateProfileRequest) GetGender() string { - if x != nil { - return x.Gender - } - return "" -} - -func (x *UpdateProfileRequest) GetBirthdate() string { - if x != nil { - return x.Birthdate - } - return "" -} - -func (x *UpdateProfileRequest) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -func (x *UpdateProfileRequest) GetPicture() string { - if x != nil { - return x.Picture - } - return "" -} - -func (x *UpdateProfileRequest) GetIsMultiFactorAuthEnabled() bool { - if x != nil && x.IsMultiFactorAuthEnabled != nil { - return *x.IsMultiFactorAuthEnabled - } - return false -} - -func (x *UpdateProfileRequest) GetAppData() *AppData { - if x != nil { - return x.AppData - } - return nil -} - -type UpdateProfileResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *UpdateProfileResponse) Reset() { - *x = UpdateProfileResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateProfileResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateProfileResponse) ProtoMessage() {} - -func (x *UpdateProfileResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[25] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateProfileResponse.ProtoReflect.Descriptor instead. -func (*UpdateProfileResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{25} -} - -func (x *UpdateProfileResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type DeactivateAccountRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *DeactivateAccountRequest) Reset() { - *x = DeactivateAccountRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeactivateAccountRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeactivateAccountRequest) ProtoMessage() {} - -func (x *DeactivateAccountRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[26] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeactivateAccountRequest.ProtoReflect.Descriptor instead. -func (*DeactivateAccountRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{26} -} - -type DeactivateAccountResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *DeactivateAccountResponse) Reset() { - *x = DeactivateAccountResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeactivateAccountResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeactivateAccountResponse) ProtoMessage() {} - -func (x *DeactivateAccountResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[27] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeactivateAccountResponse.ProtoReflect.Descriptor instead. -func (*DeactivateAccountResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{27} -} - -func (x *DeactivateAccountResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type RevokeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RefreshToken string `protobuf:"bytes,1,opt,name=refresh_token,json=refreshToken,proto3" json:"refresh_token,omitempty"` -} - -func (x *RevokeRequest) Reset() { - *x = RevokeRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RevokeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RevokeRequest) ProtoMessage() {} - -func (x *RevokeRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[28] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RevokeRequest.ProtoReflect.Descriptor instead. -func (*RevokeRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{28} -} - -func (x *RevokeRequest) GetRefreshToken() string { - if x != nil { - return x.RefreshToken - } - return "" -} - -type RevokeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *RevokeResponse) Reset() { - *x = RevokeResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RevokeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RevokeResponse) ProtoMessage() {} - -func (x *RevokeResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[29] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RevokeResponse.ProtoReflect.Descriptor instead. -func (*RevokeResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{29} -} - -func (x *RevokeResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type SessionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Roles []string `protobuf:"bytes,1,rep,name=roles,proto3" json:"roles,omitempty"` - Scope []string `protobuf:"bytes,2,rep,name=scope,proto3" json:"scope,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - // Optional fine-grained authorization gate: each (relation, object) is - // checked against the authenticated caller with AND semantics, fail-closed. - // Requires fine-grained authorization enabled (--fga-store). - RequiredRelations []*FgaRelationInput `protobuf:"bytes,4,rep,name=required_relations,json=requiredRelations,proto3" json:"required_relations,omitempty"` -} - -func (x *SessionRequest) Reset() { - *x = SessionRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SessionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SessionRequest) ProtoMessage() {} - -func (x *SessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[30] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SessionRequest.ProtoReflect.Descriptor instead. -func (*SessionRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{30} -} - -func (x *SessionRequest) GetRoles() []string { - if x != nil { - return x.Roles - } - return nil -} - -func (x *SessionRequest) GetScope() []string { - if x != nil { - return x.Scope - } - return nil -} - -func (x *SessionRequest) GetState() string { - if x != nil { - return x.State - } - return "" -} - -func (x *SessionRequest) GetRequiredRelations() []*FgaRelationInput { - if x != nil { - return x.RequiredRelations - } - return nil -} - -type ValidateJwtTokenRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TokenType string `protobuf:"bytes,1,opt,name=token_type,json=tokenType,proto3" json:"token_type,omitempty"` - Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"` - Roles []string `protobuf:"bytes,3,rep,name=roles,proto3" json:"roles,omitempty"` - // Optional fine-grained authorization gate (AND semantics, fail-closed). - RequiredRelations []*FgaRelationInput `protobuf:"bytes,4,rep,name=required_relations,json=requiredRelations,proto3" json:"required_relations,omitempty"` -} - -func (x *ValidateJwtTokenRequest) Reset() { - *x = ValidateJwtTokenRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ValidateJwtTokenRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ValidateJwtTokenRequest) ProtoMessage() {} - -func (x *ValidateJwtTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[31] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ValidateJwtTokenRequest.ProtoReflect.Descriptor instead. -func (*ValidateJwtTokenRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{31} -} - -func (x *ValidateJwtTokenRequest) GetTokenType() string { - if x != nil { - return x.TokenType - } - return "" -} - -func (x *ValidateJwtTokenRequest) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *ValidateJwtTokenRequest) GetRoles() []string { - if x != nil { - return x.Roles - } - return nil -} - -func (x *ValidateJwtTokenRequest) GetRequiredRelations() []*FgaRelationInput { - if x != nil { - return x.RequiredRelations - } - return nil -} - -type ValidateJwtTokenResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsValid bool `protobuf:"varint,1,opt,name=is_valid,json=isValid,proto3" json:"is_valid,omitempty"` - // Free-form JWT claims (matches GraphQL ValidateJWTTokenResponse.claims). - Claims *AppData `protobuf:"bytes,2,opt,name=claims,proto3" json:"claims,omitempty"` -} - -func (x *ValidateJwtTokenResponse) Reset() { - *x = ValidateJwtTokenResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ValidateJwtTokenResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ValidateJwtTokenResponse) ProtoMessage() {} - -func (x *ValidateJwtTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[32] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ValidateJwtTokenResponse.ProtoReflect.Descriptor instead. -func (*ValidateJwtTokenResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{32} -} - -func (x *ValidateJwtTokenResponse) GetIsValid() bool { - if x != nil { - return x.IsValid - } - return false -} - -func (x *ValidateJwtTokenResponse) GetClaims() *AppData { - if x != nil { - return x.Claims - } - return nil -} - -type ValidateSessionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Cookie string `protobuf:"bytes,1,opt,name=cookie,proto3" json:"cookie,omitempty"` - Roles []string `protobuf:"bytes,2,rep,name=roles,proto3" json:"roles,omitempty"` - // Optional fine-grained authorization gate (AND semantics, fail-closed). - RequiredRelations []*FgaRelationInput `protobuf:"bytes,3,rep,name=required_relations,json=requiredRelations,proto3" json:"required_relations,omitempty"` -} - -func (x *ValidateSessionRequest) Reset() { - *x = ValidateSessionRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ValidateSessionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ValidateSessionRequest) ProtoMessage() {} - -func (x *ValidateSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[33] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ValidateSessionRequest.ProtoReflect.Descriptor instead. -func (*ValidateSessionRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{33} -} - -func (x *ValidateSessionRequest) GetCookie() string { - if x != nil { - return x.Cookie - } - return "" -} - -func (x *ValidateSessionRequest) GetRoles() []string { - if x != nil { - return x.Roles - } - return nil -} - -func (x *ValidateSessionRequest) GetRequiredRelations() []*FgaRelationInput { - if x != nil { - return x.RequiredRelations - } - return nil -} - -type ValidateSessionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsValid bool `protobuf:"varint,1,opt,name=is_valid,json=isValid,proto3" json:"is_valid,omitempty"` - User *User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` -} - -func (x *ValidateSessionResponse) Reset() { - *x = ValidateSessionResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ValidateSessionResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ValidateSessionResponse) ProtoMessage() {} - -func (x *ValidateSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[34] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ValidateSessionResponse.ProtoReflect.Descriptor instead. -func (*ValidateSessionResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{34} -} - -func (x *ValidateSessionResponse) GetIsValid() bool { - if x != nil { - return x.IsValid - } - return false -} - -func (x *ValidateSessionResponse) GetUser() *User { - if x != nil { - return x.User - } - return nil -} - -type MetaRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *MetaRequest) Reset() { - *x = MetaRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *MetaRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MetaRequest) ProtoMessage() {} - -func (x *MetaRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[35] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MetaRequest.ProtoReflect.Descriptor instead. -func (*MetaRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{35} -} - -type CheckPermissionsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The checks to evaluate; at least one, at most 100. - Checks []*PermissionCheckInput `protobuf:"bytes,1,rep,name=checks,proto3" json:"checks,omitempty"` - // Optional explicit subject ("type:id", or a bare id treated as - // "user:"). Honored only for super-admins or when it equals the - // caller's own token subject; anything else is rejected. - User string `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` -} - -func (x *CheckPermissionsRequest) Reset() { - *x = CheckPermissionsRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *CheckPermissionsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CheckPermissionsRequest) ProtoMessage() {} - -func (x *CheckPermissionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[36] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CheckPermissionsRequest.ProtoReflect.Descriptor instead. -func (*CheckPermissionsRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{36} -} - -func (x *CheckPermissionsRequest) GetChecks() []*PermissionCheckInput { - if x != nil { - return x.Checks - } - return nil -} - -func (x *CheckPermissionsRequest) GetUser() string { - if x != nil { - return x.User - } - return "" -} - -type CheckPermissionsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // One result per supplied check, in order. - Results []*PermissionCheckResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` -} - -func (x *CheckPermissionsResponse) Reset() { - *x = CheckPermissionsResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *CheckPermissionsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CheckPermissionsResponse) ProtoMessage() {} - -func (x *CheckPermissionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[37] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CheckPermissionsResponse.ProtoReflect.Descriptor instead. -func (*CheckPermissionsResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{37} -} - -func (x *CheckPermissionsResponse) GetResults() []*PermissionCheckResult { - if x != nil { - return x.Results - } - return nil -} - -type ListPermissionsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional relation filter (e.g. "can_view"). - Relation string `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"` - // Optional object-type filter (e.g. "document"). - ObjectType string `protobuf:"bytes,2,opt,name=object_type,json=objectType,proto3" json:"object_type,omitempty"` - // Optional explicit subject; same trust rules as CheckPermissionsRequest. - User string `protobuf:"bytes,3,opt,name=user,proto3" json:"user,omitempty"` -} - -func (x *ListPermissionsRequest) Reset() { - *x = ListPermissionsRequest{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ListPermissionsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListPermissionsRequest) ProtoMessage() {} - -func (x *ListPermissionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[38] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListPermissionsRequest.ProtoReflect.Descriptor instead. -func (*ListPermissionsRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{38} -} - -func (x *ListPermissionsRequest) GetRelation() string { - if x != nil { - return x.Relation - } - return "" -} - -func (x *ListPermissionsRequest) GetObjectType() string { - if x != nil { - return x.ObjectType - } - return "" -} - -func (x *ListPermissionsRequest) GetUser() string { - if x != nil { - return x.User - } - return "" -} - -type ListPermissionsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Distinct fully-qualified object ids the subject can access. - Objects []string `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` - // The (object, relation) detail — relevant when no relation filter was - // supplied. - Permissions []*Permission `protobuf:"bytes,2,rep,name=permissions,proto3" json:"permissions,omitempty"` - // True when the result was capped (1000 entries) and more permissions - // exist. - Truncated bool `protobuf:"varint,3,opt,name=truncated,proto3" json:"truncated,omitempty"` -} - -func (x *ListPermissionsResponse) Reset() { - *x = ListPermissionsResponse{} - mi := &file_authorizer_v1_authorizer_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ListPermissionsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListPermissionsResponse) ProtoMessage() {} - -func (x *ListPermissionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_authorizer_proto_msgTypes[39] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListPermissionsResponse.ProtoReflect.Descriptor instead. -func (*ListPermissionsResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_authorizer_proto_rawDescGZIP(), []int{39} -} - -func (x *ListPermissionsResponse) GetObjects() []string { - if x != nil { - return x.Objects - } - return nil -} - -func (x *ListPermissionsResponse) GetPermissions() []*Permission { - if x != nil { - return x.Permissions - } - return nil -} - -func (x *ListPermissionsResponse) GetTruncated() bool { - if x != nil { - return x.Truncated - } - return false -} - -var File_authorizer_v1_authorizer_proto protoreflect.FileDescriptor - -var file_authorizer_v1_authorizer_proto_rawDesc = []byte{ - 0x0a, 0x1e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, - 0x1f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x1a, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 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, 0x22, 0xc3, 0x04, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, 0xc0, 0x02, 0x52, 0x05, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, - 0x02, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x26, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x08, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x35, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x0f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x31, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x44, 0x61, 0x74, 0x61, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x52, 0x1c, 0x69, 0x73, 0x5f, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, - 0xc0, 0x02, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x68, 0x6f, - 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, - 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, - 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, - 0x0f, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x2a, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9c, 0x01, 0x0a, - 0x15, 0x4d, 0x61, 0x67, 0x69, 0x63, 0x4c, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, 0xc0, 0x02, 0x52, - 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, - 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x22, 0x32, 0x0a, 0x16, 0x4d, - 0x61, 0x67, 0x69, 0x63, 0x4c, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x49, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x79, 0x0a, 0x18, 0x52, 0x65, - 0x73, 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, 0xc0, 0x02, 0x52, - 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x27, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x35, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xaa, 0x01, 0x0a, - 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4f, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, 0xc0, 0x02, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x18, 0x20, - 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, - 0x03, 0x6f, 0x74, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xba, 0x48, 0x06, 0x72, - 0x04, 0x10, 0x01, 0x18, 0x10, 0x52, 0x03, 0x6f, 0x74, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, - 0x5f, 0x74, 0x6f, 0x74, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x54, - 0x6f, 0x74, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x74, 0x0a, 0x10, 0x52, 0x65, 0x73, - 0x65, 0x6e, 0x64, 0x4f, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, - 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, - 0x05, 0x72, 0x03, 0x18, 0xc0, 0x02, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2a, 0x0a, - 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x68, - 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, - 0x2d, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x4f, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x77, - 0x0a, 0x13, 0x53, 0x6b, 0x69, 0x70, 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, 0xc0, 0x02, 0x52, 0x05, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, - 0x72, 0x02, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x5c, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x6b, 0x4d, - 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, - 0xc0, 0x02, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x68, 0x6f, - 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x2b, 0x0a, 0x0f, 0x4c, 0x6f, 0x63, 0x6b, 0x4d, 0x66, 0x61, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x65, 0x0a, 0x17, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x4f, 0x74, 0x70, 0x4d, 0x66, - 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, - 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, - 0x05, 0x72, 0x03, 0x18, 0xc0, 0x02, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2a, 0x0a, - 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x68, - 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x34, 0x0a, 0x18, 0x45, 0x6d, 0x61, - 0x69, 0x6c, 0x4f, 0x74, 0x70, 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x63, 0x0a, 0x15, 0x53, 0x6d, 0x73, 0x4f, 0x74, 0x70, 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, 0xc0, - 0x02, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, - 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x72, 0x02, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x22, 0x32, 0x0a, 0x16, 0x53, 0x6d, 0x73, 0x4f, 0x74, 0x70, 0x4d, 0x66, - 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x15, 0x46, 0x6f, 0x72, - 0x67, 0x6f, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, 0xc0, 0x02, 0x52, 0x05, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x18, - 0x20, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x5f, 0x75, 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x22, 0x74, 0x0a, 0x16, 0x46, 0x6f, 0x72, 0x67, 0x6f, - 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x1d, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6d, 0x6f, 0x62, 0x69, 0x6c, - 0x65, 0x5f, 0x6f, 0x74, 0x70, 0x5f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x19, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x53, 0x68, 0x6f, 0x77, 0x4d, 0x6f, - 0x62, 0x69, 0x6c, 0x65, 0x4f, 0x74, 0x70, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x22, 0xc9, 0x01, - 0x0a, 0x14, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x10, 0x0a, 0x03, - 0x6f, 0x74, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x74, 0x70, 0x12, 0x2a, - 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x18, 0x20, 0x52, 0x0b, 0x70, - 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x08, 0x70, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, - 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x12, 0x35, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x5f, 0x70, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, - 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x31, 0x0a, 0x15, 0x52, 0x65, 0x73, - 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x10, 0x0a, 0x0e, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xd4, - 0x04, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x6c, 0x64, 0x5f, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, - 0x6c, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x2b, 0x0a, 0x0c, 0x6e, 0x65, - 0x77, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x3a, 0x0a, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, 0x80, 0x01, 0x52, - 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x4e, 0x65, 0x77, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, 0xc0, 0x02, 0x52, 0x05, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x69, 0x72, 0x74, - 0x68, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x72, - 0x74, 0x68, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, - 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, - 0x04, 0x72, 0x02, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x43, 0x0a, 0x1c, - 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, - 0x61, 0x75, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x00, 0x52, 0x18, 0x69, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x61, 0x63, - 0x74, 0x6f, 0x72, 0x41, 0x75, 0x74, 0x68, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x88, 0x01, - 0x01, 0x12, 0x31, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x44, 0x61, 0x74, 0x61, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x31, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x44, 0x65, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x35, 0x0a, 0x19, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3d, 0x0a, 0x0d, 0x52, - 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x0d, - 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x72, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x2a, 0x0a, 0x0e, 0x52, 0x65, - 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x17, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x77, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x1d, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, - 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, - 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x12, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x46, 0x67, 0x61, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x65, 0x0a, 0x18, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x4a, 0x77, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x16, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x4e, 0x0a, - 0x12, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, 0x61, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x5d, 0x0a, - 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x0d, 0x0a, 0x0b, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x76, 0x0a, 0x17, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x06, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x42, 0x0a, 0xba, 0x48, 0x07, - 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x64, 0x52, 0x06, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x22, 0x5a, 0x0a, 0x18, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3e, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, - 0x69, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x8e, 0x01, 0x0a, 0x17, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x12, 0x3b, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x32, 0xe7, 0x16, 0x0a, 0x11, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x66, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x12, 0x1c, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, - 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x92, 0xb5, 0x18, 0x00, 0x98, 0xb5, 0x18, 0x01, - 0xa0, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x12, 0x63, 0x0a, 0x05, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x12, 0x1b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x92, 0xb5, - 0x18, 0x00, 0x98, 0xb5, 0x18, 0x01, 0xa0, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, - 0x3a, 0x01, 0x2a, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x5d, - 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x98, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0c, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x86, 0x01, - 0x0a, 0x0e, 0x4d, 0x61, 0x67, 0x69, 0x63, 0x4c, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x61, 0x67, 0x69, 0x63, 0x4c, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x67, 0x69, 0x63, 0x4c, 0x69, 0x6e, 0x6b, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x98, - 0xb5, 0x18, 0x01, 0xa0, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, - 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, - 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x72, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x98, 0xb5, 0x18, 0x01, 0xa0, 0xb5, 0x18, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x79, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x8e, 0x01, 0x0a, 0x11, 0x52, - 0x65, 0x73, 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, - 0x12, 0x27, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, - 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x26, 0xa0, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, - 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x76, - 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x6c, 0x0a, 0x09, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x79, 0x4f, 0x74, 0x70, 0x12, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4f, - 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x98, 0xb5, 0x18, 0x01, 0xa0, 0xb5, 0x18, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x76, - 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x6f, 0x74, 0x70, 0x12, 0x6d, 0x0a, 0x09, 0x52, 0x65, 0x73, - 0x65, 0x6e, 0x64, 0x4f, 0x74, 0x70, 0x12, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x4f, 0x74, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x4f, 0x74, - 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0xa0, 0xb5, 0x18, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x74, 0x70, 0x12, 0x76, 0x0a, 0x0c, 0x53, 0x6b, 0x69, 0x70, - 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x69, 0x70, 0x4d, 0x66, 0x61, - 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x98, 0xb5, 0x18, 0x01, 0xa0, - 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x6d, 0x66, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, - 0x12, 0x69, 0x0a, 0x07, 0x4c, 0x6f, 0x63, 0x6b, 0x4d, 0x66, 0x61, 0x12, 0x1d, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, - 0x4d, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x4d, - 0x66, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x98, 0xb5, 0x18, 0x01, - 0xa0, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, - 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x66, 0x61, 0x12, 0x8f, 0x01, 0x0a, 0x10, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x4f, 0x74, 0x70, 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, - 0x12, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x4f, 0x74, 0x70, 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x4f, 0x74, - 0x70, 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2a, 0x98, 0xb5, 0x18, 0x01, 0xa0, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, - 0x6f, 0x74, 0x70, 0x5f, 0x6d, 0x66, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x12, 0x87, 0x01, - 0x0a, 0x0e, 0x53, 0x6d, 0x73, 0x4f, 0x74, 0x70, 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, - 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x6d, 0x73, 0x4f, 0x74, 0x70, 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6d, 0x73, 0x4f, 0x74, 0x70, 0x4d, 0x66, 0x61, - 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x98, - 0xb5, 0x18, 0x01, 0xa0, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, - 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x6d, 0x73, 0x5f, 0x6f, 0x74, 0x70, 0x5f, 0x6d, 0x66, - 0x61, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x12, 0x81, 0x01, 0x0a, 0x0e, 0x46, 0x6f, 0x72, 0x67, - 0x6f, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x67, 0x6f, - 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x46, 0x6f, 0x72, 0x67, 0x6f, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0xa0, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6f, 0x72, 0x67, - 0x6f, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x81, 0x01, 0x0a, 0x0d, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x23, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x98, 0xb5, 0x18, 0x01, 0xa0, 0xb5, - 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, - 0x58, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x22, 0x19, - 0x92, 0xb5, 0x18, 0x02, 0x08, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x7d, 0x0a, 0x0d, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x98, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2b, 0x92, 0xb5, 0x18, 0x02, 0x18, 0x01, 0x98, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x64, - 0x0a, 0x06, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x1c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x98, 0xb5, 0x18, 0x01, 0xa0, 0xb5, 0x18, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x5d, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x8a, 0x01, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x4a, 0x77, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x4a, 0x77, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x27, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x77, 0x74, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0xa0, 0xb5, 0x18, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6a, 0x77, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x85, 0x01, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x23, 0xa0, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, - 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, - 0x12, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x22, 0x1a, 0x92, 0xb5, 0x18, 0x02, 0x08, 0x01, 0xa0, 0xb5, 0x18, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x8b, 0x01, - 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x26, 0x92, 0xb5, 0x18, 0x02, 0x08, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, - 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x0f, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, - 0x92, 0xb5, 0x18, 0x02, 0x08, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, - 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0xcb, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x64, 0x65, 0x76, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2d, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, - 0x67, 0x65, 0x6e, 0x70, 0x62, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x76, 0x31, - 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0xea, 0x02, 0x0e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x3a, - 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_authorizer_v1_authorizer_proto_rawDescOnce sync.Once - file_authorizer_v1_authorizer_proto_rawDescData = file_authorizer_v1_authorizer_proto_rawDesc -) - -func file_authorizer_v1_authorizer_proto_rawDescGZIP() []byte { - file_authorizer_v1_authorizer_proto_rawDescOnce.Do(func() { - file_authorizer_v1_authorizer_proto_rawDescData = protoimpl.X.CompressGZIP(file_authorizer_v1_authorizer_proto_rawDescData) - }) - return file_authorizer_v1_authorizer_proto_rawDescData -} - -var file_authorizer_v1_authorizer_proto_msgTypes = make([]protoimpl.MessageInfo, 40) -var file_authorizer_v1_authorizer_proto_goTypes = []any{ - (*SignupRequest)(nil), // 0: authorizer.v1.SignupRequest - (*LoginRequest)(nil), // 1: authorizer.v1.LoginRequest - (*LogoutRequest)(nil), // 2: authorizer.v1.LogoutRequest - (*LogoutResponse)(nil), // 3: authorizer.v1.LogoutResponse - (*MagicLinkLoginRequest)(nil), // 4: authorizer.v1.MagicLinkLoginRequest - (*MagicLinkLoginResponse)(nil), // 5: authorizer.v1.MagicLinkLoginResponse - (*VerifyEmailRequest)(nil), // 6: authorizer.v1.VerifyEmailRequest - (*ResendVerifyEmailRequest)(nil), // 7: authorizer.v1.ResendVerifyEmailRequest - (*ResendVerifyEmailResponse)(nil), // 8: authorizer.v1.ResendVerifyEmailResponse - (*VerifyOtpRequest)(nil), // 9: authorizer.v1.VerifyOtpRequest - (*ResendOtpRequest)(nil), // 10: authorizer.v1.ResendOtpRequest - (*ResendOtpResponse)(nil), // 11: authorizer.v1.ResendOtpResponse - (*SkipMfaSetupRequest)(nil), // 12: authorizer.v1.SkipMfaSetupRequest - (*LockMfaRequest)(nil), // 13: authorizer.v1.LockMfaRequest - (*LockMfaResponse)(nil), // 14: authorizer.v1.LockMfaResponse - (*EmailOtpMfaSetupRequest)(nil), // 15: authorizer.v1.EmailOtpMfaSetupRequest - (*EmailOtpMfaSetupResponse)(nil), // 16: authorizer.v1.EmailOtpMfaSetupResponse - (*SmsOtpMfaSetupRequest)(nil), // 17: authorizer.v1.SmsOtpMfaSetupRequest - (*SmsOtpMfaSetupResponse)(nil), // 18: authorizer.v1.SmsOtpMfaSetupResponse - (*ForgotPasswordRequest)(nil), // 19: authorizer.v1.ForgotPasswordRequest - (*ForgotPasswordResponse)(nil), // 20: authorizer.v1.ForgotPasswordResponse - (*ResetPasswordRequest)(nil), // 21: authorizer.v1.ResetPasswordRequest - (*ResetPasswordResponse)(nil), // 22: authorizer.v1.ResetPasswordResponse - (*ProfileRequest)(nil), // 23: authorizer.v1.ProfileRequest - (*UpdateProfileRequest)(nil), // 24: authorizer.v1.UpdateProfileRequest - (*UpdateProfileResponse)(nil), // 25: authorizer.v1.UpdateProfileResponse - (*DeactivateAccountRequest)(nil), // 26: authorizer.v1.DeactivateAccountRequest - (*DeactivateAccountResponse)(nil), // 27: authorizer.v1.DeactivateAccountResponse - (*RevokeRequest)(nil), // 28: authorizer.v1.RevokeRequest - (*RevokeResponse)(nil), // 29: authorizer.v1.RevokeResponse - (*SessionRequest)(nil), // 30: authorizer.v1.SessionRequest - (*ValidateJwtTokenRequest)(nil), // 31: authorizer.v1.ValidateJwtTokenRequest - (*ValidateJwtTokenResponse)(nil), // 32: authorizer.v1.ValidateJwtTokenResponse - (*ValidateSessionRequest)(nil), // 33: authorizer.v1.ValidateSessionRequest - (*ValidateSessionResponse)(nil), // 34: authorizer.v1.ValidateSessionResponse - (*MetaRequest)(nil), // 35: authorizer.v1.MetaRequest - (*CheckPermissionsRequest)(nil), // 36: authorizer.v1.CheckPermissionsRequest - (*CheckPermissionsResponse)(nil), // 37: authorizer.v1.CheckPermissionsResponse - (*ListPermissionsRequest)(nil), // 38: authorizer.v1.ListPermissionsRequest - (*ListPermissionsResponse)(nil), // 39: authorizer.v1.ListPermissionsResponse - (*AppData)(nil), // 40: authorizer.v1.AppData - (*FgaRelationInput)(nil), // 41: authorizer.v1.FgaRelationInput - (*User)(nil), // 42: authorizer.v1.User - (*PermissionCheckInput)(nil), // 43: authorizer.v1.PermissionCheckInput - (*PermissionCheckResult)(nil), // 44: authorizer.v1.PermissionCheckResult - (*Permission)(nil), // 45: authorizer.v1.Permission - (*AuthResponse)(nil), // 46: authorizer.v1.AuthResponse - (*Meta)(nil), // 47: authorizer.v1.Meta -} -var file_authorizer_v1_authorizer_proto_depIdxs = []int32{ - 40, // 0: authorizer.v1.SignupRequest.app_data:type_name -> authorizer.v1.AppData - 40, // 1: authorizer.v1.UpdateProfileRequest.app_data:type_name -> authorizer.v1.AppData - 41, // 2: authorizer.v1.SessionRequest.required_relations:type_name -> authorizer.v1.FgaRelationInput - 41, // 3: authorizer.v1.ValidateJwtTokenRequest.required_relations:type_name -> authorizer.v1.FgaRelationInput - 40, // 4: authorizer.v1.ValidateJwtTokenResponse.claims:type_name -> authorizer.v1.AppData - 41, // 5: authorizer.v1.ValidateSessionRequest.required_relations:type_name -> authorizer.v1.FgaRelationInput - 42, // 6: authorizer.v1.ValidateSessionResponse.user:type_name -> authorizer.v1.User - 43, // 7: authorizer.v1.CheckPermissionsRequest.checks:type_name -> authorizer.v1.PermissionCheckInput - 44, // 8: authorizer.v1.CheckPermissionsResponse.results:type_name -> authorizer.v1.PermissionCheckResult - 45, // 9: authorizer.v1.ListPermissionsResponse.permissions:type_name -> authorizer.v1.Permission - 0, // 10: authorizer.v1.AuthorizerService.Signup:input_type -> authorizer.v1.SignupRequest - 1, // 11: authorizer.v1.AuthorizerService.Login:input_type -> authorizer.v1.LoginRequest - 2, // 12: authorizer.v1.AuthorizerService.Logout:input_type -> authorizer.v1.LogoutRequest - 4, // 13: authorizer.v1.AuthorizerService.MagicLinkLogin:input_type -> authorizer.v1.MagicLinkLoginRequest - 6, // 14: authorizer.v1.AuthorizerService.VerifyEmail:input_type -> authorizer.v1.VerifyEmailRequest - 7, // 15: authorizer.v1.AuthorizerService.ResendVerifyEmail:input_type -> authorizer.v1.ResendVerifyEmailRequest - 9, // 16: authorizer.v1.AuthorizerService.VerifyOtp:input_type -> authorizer.v1.VerifyOtpRequest - 10, // 17: authorizer.v1.AuthorizerService.ResendOtp:input_type -> authorizer.v1.ResendOtpRequest - 12, // 18: authorizer.v1.AuthorizerService.SkipMfaSetup:input_type -> authorizer.v1.SkipMfaSetupRequest - 13, // 19: authorizer.v1.AuthorizerService.LockMfa:input_type -> authorizer.v1.LockMfaRequest - 15, // 20: authorizer.v1.AuthorizerService.EmailOtpMfaSetup:input_type -> authorizer.v1.EmailOtpMfaSetupRequest - 17, // 21: authorizer.v1.AuthorizerService.SmsOtpMfaSetup:input_type -> authorizer.v1.SmsOtpMfaSetupRequest - 19, // 22: authorizer.v1.AuthorizerService.ForgotPassword:input_type -> authorizer.v1.ForgotPasswordRequest - 21, // 23: authorizer.v1.AuthorizerService.ResetPassword:input_type -> authorizer.v1.ResetPasswordRequest - 23, // 24: authorizer.v1.AuthorizerService.Profile:input_type -> authorizer.v1.ProfileRequest - 24, // 25: authorizer.v1.AuthorizerService.UpdateProfile:input_type -> authorizer.v1.UpdateProfileRequest - 26, // 26: authorizer.v1.AuthorizerService.DeactivateAccount:input_type -> authorizer.v1.DeactivateAccountRequest - 28, // 27: authorizer.v1.AuthorizerService.Revoke:input_type -> authorizer.v1.RevokeRequest - 30, // 28: authorizer.v1.AuthorizerService.Session:input_type -> authorizer.v1.SessionRequest - 31, // 29: authorizer.v1.AuthorizerService.ValidateJwtToken:input_type -> authorizer.v1.ValidateJwtTokenRequest - 33, // 30: authorizer.v1.AuthorizerService.ValidateSession:input_type -> authorizer.v1.ValidateSessionRequest - 35, // 31: authorizer.v1.AuthorizerService.Meta:input_type -> authorizer.v1.MetaRequest - 36, // 32: authorizer.v1.AuthorizerService.CheckPermissions:input_type -> authorizer.v1.CheckPermissionsRequest - 38, // 33: authorizer.v1.AuthorizerService.ListPermissions:input_type -> authorizer.v1.ListPermissionsRequest - 46, // 34: authorizer.v1.AuthorizerService.Signup:output_type -> authorizer.v1.AuthResponse - 46, // 35: authorizer.v1.AuthorizerService.Login:output_type -> authorizer.v1.AuthResponse - 3, // 36: authorizer.v1.AuthorizerService.Logout:output_type -> authorizer.v1.LogoutResponse - 5, // 37: authorizer.v1.AuthorizerService.MagicLinkLogin:output_type -> authorizer.v1.MagicLinkLoginResponse - 46, // 38: authorizer.v1.AuthorizerService.VerifyEmail:output_type -> authorizer.v1.AuthResponse - 8, // 39: authorizer.v1.AuthorizerService.ResendVerifyEmail:output_type -> authorizer.v1.ResendVerifyEmailResponse - 46, // 40: authorizer.v1.AuthorizerService.VerifyOtp:output_type -> authorizer.v1.AuthResponse - 11, // 41: authorizer.v1.AuthorizerService.ResendOtp:output_type -> authorizer.v1.ResendOtpResponse - 46, // 42: authorizer.v1.AuthorizerService.SkipMfaSetup:output_type -> authorizer.v1.AuthResponse - 14, // 43: authorizer.v1.AuthorizerService.LockMfa:output_type -> authorizer.v1.LockMfaResponse - 16, // 44: authorizer.v1.AuthorizerService.EmailOtpMfaSetup:output_type -> authorizer.v1.EmailOtpMfaSetupResponse - 18, // 45: authorizer.v1.AuthorizerService.SmsOtpMfaSetup:output_type -> authorizer.v1.SmsOtpMfaSetupResponse - 20, // 46: authorizer.v1.AuthorizerService.ForgotPassword:output_type -> authorizer.v1.ForgotPasswordResponse - 22, // 47: authorizer.v1.AuthorizerService.ResetPassword:output_type -> authorizer.v1.ResetPasswordResponse - 42, // 48: authorizer.v1.AuthorizerService.Profile:output_type -> authorizer.v1.User - 25, // 49: authorizer.v1.AuthorizerService.UpdateProfile:output_type -> authorizer.v1.UpdateProfileResponse - 27, // 50: authorizer.v1.AuthorizerService.DeactivateAccount:output_type -> authorizer.v1.DeactivateAccountResponse - 29, // 51: authorizer.v1.AuthorizerService.Revoke:output_type -> authorizer.v1.RevokeResponse - 46, // 52: authorizer.v1.AuthorizerService.Session:output_type -> authorizer.v1.AuthResponse - 32, // 53: authorizer.v1.AuthorizerService.ValidateJwtToken:output_type -> authorizer.v1.ValidateJwtTokenResponse - 34, // 54: authorizer.v1.AuthorizerService.ValidateSession:output_type -> authorizer.v1.ValidateSessionResponse - 47, // 55: authorizer.v1.AuthorizerService.Meta:output_type -> authorizer.v1.Meta - 37, // 56: authorizer.v1.AuthorizerService.CheckPermissions:output_type -> authorizer.v1.CheckPermissionsResponse - 39, // 57: authorizer.v1.AuthorizerService.ListPermissions:output_type -> authorizer.v1.ListPermissionsResponse - 34, // [34:58] is the sub-list for method output_type - 10, // [10:34] is the sub-list for method input_type - 10, // [10:10] is the sub-list for extension type_name - 10, // [10:10] is the sub-list for extension extendee - 0, // [0:10] is the sub-list for field type_name -} - -func init() { file_authorizer_v1_authorizer_proto_init() } -func file_authorizer_v1_authorizer_proto_init() { - if File_authorizer_v1_authorizer_proto != nil { - return - } - file_authorizer_v1_annotations_proto_init() - file_authorizer_v1_common_proto_init() - file_authorizer_v1_types_proto_init() - file_authorizer_v1_authorizer_proto_msgTypes[24].OneofWrappers = []any{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_authorizer_v1_authorizer_proto_rawDesc, - NumEnums: 0, - NumMessages: 40, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_authorizer_v1_authorizer_proto_goTypes, - DependencyIndexes: file_authorizer_v1_authorizer_proto_depIdxs, - MessageInfos: file_authorizer_v1_authorizer_proto_msgTypes, - }.Build() - File_authorizer_v1_authorizer_proto = out.File - file_authorizer_v1_authorizer_proto_rawDesc = nil - file_authorizer_v1_authorizer_proto_goTypes = nil - file_authorizer_v1_authorizer_proto_depIdxs = nil -} diff --git a/gen/go-client/authorizer/v1/authorizer_grpc.pb.go b/gen/go-client/authorizer/v1/authorizer_grpc.pb.go deleted file mode 100644 index 079fab00..00000000 --- a/gen/go-client/authorizer/v1/authorizer_grpc.pb.go +++ /dev/null @@ -1,1117 +0,0 @@ -// AuthorizerService is the single gRPC service that exposes Authorizer's -// public API. Method names match the GraphQL operation names 1:1 -// (snake_case in GraphQL → PascalCase in proto): Signup, Login, -// MagicLinkLogin, VerifyEmail, ResendVerifyEmail, ForgotPassword, -// ResetPassword, VerifyOtp, ResendOtp, SkipMfaSetup, LockMfa, -// EmailOtpMfaSetup, SmsOtpMfaSetup, UpdateProfile, DeactivateAccount, -// Revoke, Meta, Session, Profile, ValidateJwtToken, ValidateSession, -// CheckPermissions, ListPermissions, Logout. -// -// Why one service: clients consume a single typed client per language, -// discovery is trivial, and the surface mirrors the GraphQL one users -// already know. The trade-off is that we lose resource-oriented evolution -// (no `List/Get/Create` symmetry per resource) — acceptable for an auth -// surface where most operations are stateless verbs anyway. -// -// REST mapping follows a simple rule: -// - GET /v1/{method} when the request body is empty (Meta, Profile, -// Logout) -// - POST /v1/{method} otherwise - -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc (unknown) -// source: authorizer/v1/authorizer.proto - -package authorizerv1 - -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.64.0 or later. -const _ = grpc.SupportPackageIsVersion9 - -const ( - AuthorizerService_Signup_FullMethodName = "/authorizer.v1.AuthorizerService/Signup" - AuthorizerService_Login_FullMethodName = "/authorizer.v1.AuthorizerService/Login" - AuthorizerService_Logout_FullMethodName = "/authorizer.v1.AuthorizerService/Logout" - AuthorizerService_MagicLinkLogin_FullMethodName = "/authorizer.v1.AuthorizerService/MagicLinkLogin" - AuthorizerService_VerifyEmail_FullMethodName = "/authorizer.v1.AuthorizerService/VerifyEmail" - AuthorizerService_ResendVerifyEmail_FullMethodName = "/authorizer.v1.AuthorizerService/ResendVerifyEmail" - AuthorizerService_VerifyOtp_FullMethodName = "/authorizer.v1.AuthorizerService/VerifyOtp" - AuthorizerService_ResendOtp_FullMethodName = "/authorizer.v1.AuthorizerService/ResendOtp" - AuthorizerService_SkipMfaSetup_FullMethodName = "/authorizer.v1.AuthorizerService/SkipMfaSetup" - AuthorizerService_LockMfa_FullMethodName = "/authorizer.v1.AuthorizerService/LockMfa" - AuthorizerService_EmailOtpMfaSetup_FullMethodName = "/authorizer.v1.AuthorizerService/EmailOtpMfaSetup" - AuthorizerService_SmsOtpMfaSetup_FullMethodName = "/authorizer.v1.AuthorizerService/SmsOtpMfaSetup" - AuthorizerService_ForgotPassword_FullMethodName = "/authorizer.v1.AuthorizerService/ForgotPassword" - AuthorizerService_ResetPassword_FullMethodName = "/authorizer.v1.AuthorizerService/ResetPassword" - AuthorizerService_Profile_FullMethodName = "/authorizer.v1.AuthorizerService/Profile" - AuthorizerService_UpdateProfile_FullMethodName = "/authorizer.v1.AuthorizerService/UpdateProfile" - AuthorizerService_DeactivateAccount_FullMethodName = "/authorizer.v1.AuthorizerService/DeactivateAccount" - AuthorizerService_Revoke_FullMethodName = "/authorizer.v1.AuthorizerService/Revoke" - AuthorizerService_Session_FullMethodName = "/authorizer.v1.AuthorizerService/Session" - AuthorizerService_ValidateJwtToken_FullMethodName = "/authorizer.v1.AuthorizerService/ValidateJwtToken" - AuthorizerService_ValidateSession_FullMethodName = "/authorizer.v1.AuthorizerService/ValidateSession" - AuthorizerService_Meta_FullMethodName = "/authorizer.v1.AuthorizerService/Meta" - AuthorizerService_CheckPermissions_FullMethodName = "/authorizer.v1.AuthorizerService/CheckPermissions" - AuthorizerService_ListPermissions_FullMethodName = "/authorizer.v1.AuthorizerService/ListPermissions" -) - -// AuthorizerServiceClient is the client API for AuthorizerService 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 AuthorizerServiceClient interface { - // Signup registers a new user. Public; requires sign-up enabled in config. - // Returns AuthResponse with tokens + (browser callers) Set-Cookie headers. - Signup(ctx context.Context, in *SignupRequest, opts ...grpc.CallOption) (*AuthResponse, error) - // Login authenticates with email/phone + password. - Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*AuthResponse, error) - // Logout ends the caller's current session. POST, not GET: logout mutates - // server state (clears the session) and is audit-logged, so it must not be - // a "safe" method per RFC 9110 §9.2.1 — GET would also expose it to CSRF. - Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*LogoutResponse, error) - // MagicLinkLogin dispatches a passwordless email link. The clicked link - // hits the existing /verify_email browser handler. - MagicLinkLogin(ctx context.Context, in *MagicLinkLoginRequest, opts ...grpc.CallOption) (*MagicLinkLoginResponse, error) - VerifyEmail(ctx context.Context, in *VerifyEmailRequest, opts ...grpc.CallOption) (*AuthResponse, error) - ResendVerifyEmail(ctx context.Context, in *ResendVerifyEmailRequest, opts ...grpc.CallOption) (*ResendVerifyEmailResponse, error) - VerifyOtp(ctx context.Context, in *VerifyOtpRequest, opts ...grpc.CallOption) (*AuthResponse, error) - ResendOtp(ctx context.Context, in *ResendOtpRequest, opts ...grpc.CallOption) (*ResendOtpResponse, error) - // SkipMfaSetup completes an in-progress, token-withheld MFA offer by - // recording that the caller explicitly declined it, then issues the - // access token that was withheld. Identified by the MFA session cookie - // (set when the offer screen was returned) plus email/phone_number to - // resolve the pending user — same identification pattern as VerifyOtp. - // Fails with FAILED_PRECONDITION if MFA is organization-enforced - // (enforce-mfa) — enforcement is never skippable. - SkipMfaSetup(ctx context.Context, in *SkipMfaSetupRequest, opts ...grpc.CallOption) (*AuthResponse, error) - // LockMfa records that the caller lost access to their only MFA - // factor(s). Only allowed when the caller has NO verified Email/SMS OTP - // fallback enrolled — if one exists, use it instead of locking. Does not - // issue a token; the account requires admin recovery afterward. - LockMfa(ctx context.Context, in *LockMfaRequest, opts ...grpc.CallOption) (*LockMfaResponse, error) - // EmailOtpMfaSetup sends a one-time code to the caller's own email and - // creates an unverified email-OTP MFA enrollment. Dual-mode permissions: - // (a) an authenticated caller (bearer token) — the settings-screen action - // for an ALREADY-logged-in user adding a second factor; the request body is - // unused in this mode. (b) a caller in the withheld first-time-offer - // state, with no bearer token yet — identified by the MFA session cookie - // plus email/phone_number, same pattern as SkipMfaSetup. Either mode - // reuses the same underlying Authenticator row once VerifyOtp marks it - // verified. - EmailOtpMfaSetup(ctx context.Context, in *EmailOtpMfaSetupRequest, opts ...grpc.CallOption) (*EmailOtpMfaSetupResponse, error) - // SmsOtpMfaSetup sends a one-time code to the caller's own phone number - // and creates an unverified SMS-OTP MFA enrollment. Same dual-mode - // permissions and relationship to VerifyOtp as EmailOtpMfaSetup. - SmsOtpMfaSetup(ctx context.Context, in *SmsOtpMfaSetupRequest, opts ...grpc.CallOption) (*SmsOtpMfaSetupResponse, error) - ForgotPassword(ctx context.Context, in *ForgotPasswordRequest, opts ...grpc.CallOption) (*ForgotPasswordResponse, error) - ResetPassword(ctx context.Context, in *ResetPasswordRequest, opts ...grpc.CallOption) (*ResetPasswordResponse, error) - // Profile returns the authenticated user. - Profile(ctx context.Context, in *ProfileRequest, opts ...grpc.CallOption) (*User, error) - UpdateProfile(ctx context.Context, in *UpdateProfileRequest, opts ...grpc.CallOption) (*UpdateProfileResponse, error) - // DeactivateAccount soft-deletes the caller's account and revokes all - // refresh tokens as a side effect. OAuth has no concept of account - // deactivation; this is the typed equivalent of SCIM PATCH active=false. - DeactivateAccount(ctx context.Context, in *DeactivateAccountRequest, opts ...grpc.CallOption) (*DeactivateAccountResponse, error) - // Revoke invalidates a refresh token. Typed mirror of RFC 7009. - Revoke(ctx context.Context, in *RevokeRequest, opts ...grpc.CallOption) (*RevokeResponse, error) - // Session returns the AuthResponse bound to the caller's session cookie only. - // NOT exposed as an MCP tool — SessionResponse carries access_token, - // refresh_token, id_token, authenticator_secret, and recovery codes, - // none of which should land in an LLM transcript. (Security audit C1.) - Session(ctx context.Context, in *SessionRequest, opts ...grpc.CallOption) (*AuthResponse, error) - ValidateJwtToken(ctx context.Context, in *ValidateJwtTokenRequest, opts ...grpc.CallOption) (*ValidateJwtTokenResponse, error) - ValidateSession(ctx context.Context, in *ValidateSessionRequest, opts ...grpc.CallOption) (*ValidateSessionResponse, error) - // Meta returns server feature flags. No auth required. - Meta(ctx context.Context, in *MetaRequest, opts ...grpc.CallOption) (*Meta, error) - // CheckPermissions evaluates one or more fine-grained permission checks - // ("does the subject have on ?") in a single call and - // returns one result per check, in order. The subject defaults to the - // authenticated caller; an explicit `user` is honored only for super-admins - // or when it equals the caller's own subject. Fail-closed. - CheckPermissions(ctx context.Context, in *CheckPermissionsRequest, opts ...grpc.CallOption) (*CheckPermissionsResponse, error) - // ListPermissions enumerates what the subject can access. With both - // `relation` and `object_type` set it answers "which s can I - // ?"; either or both filters may be omitted to enumerate every - // matching (type, relation) pair of the active model. Results are capped; - // `truncated` reports when more permissions exist. Subject resolution - // follows the same rules as CheckPermissions. - ListPermissions(ctx context.Context, in *ListPermissionsRequest, opts ...grpc.CallOption) (*ListPermissionsResponse, error) -} - -type authorizerServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewAuthorizerServiceClient(cc grpc.ClientConnInterface) AuthorizerServiceClient { - return &authorizerServiceClient{cc} -} - -func (c *authorizerServiceClient) Signup(ctx context.Context, in *SignupRequest, opts ...grpc.CallOption) (*AuthResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AuthResponse) - err := c.cc.Invoke(ctx, AuthorizerService_Signup_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*AuthResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AuthResponse) - err := c.cc.Invoke(ctx, AuthorizerService_Login_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*LogoutResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(LogoutResponse) - err := c.cc.Invoke(ctx, AuthorizerService_Logout_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) MagicLinkLogin(ctx context.Context, in *MagicLinkLoginRequest, opts ...grpc.CallOption) (*MagicLinkLoginResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(MagicLinkLoginResponse) - err := c.cc.Invoke(ctx, AuthorizerService_MagicLinkLogin_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) VerifyEmail(ctx context.Context, in *VerifyEmailRequest, opts ...grpc.CallOption) (*AuthResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AuthResponse) - err := c.cc.Invoke(ctx, AuthorizerService_VerifyEmail_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) ResendVerifyEmail(ctx context.Context, in *ResendVerifyEmailRequest, opts ...grpc.CallOption) (*ResendVerifyEmailResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(ResendVerifyEmailResponse) - err := c.cc.Invoke(ctx, AuthorizerService_ResendVerifyEmail_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) VerifyOtp(ctx context.Context, in *VerifyOtpRequest, opts ...grpc.CallOption) (*AuthResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AuthResponse) - err := c.cc.Invoke(ctx, AuthorizerService_VerifyOtp_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) ResendOtp(ctx context.Context, in *ResendOtpRequest, opts ...grpc.CallOption) (*ResendOtpResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(ResendOtpResponse) - err := c.cc.Invoke(ctx, AuthorizerService_ResendOtp_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) SkipMfaSetup(ctx context.Context, in *SkipMfaSetupRequest, opts ...grpc.CallOption) (*AuthResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AuthResponse) - err := c.cc.Invoke(ctx, AuthorizerService_SkipMfaSetup_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) LockMfa(ctx context.Context, in *LockMfaRequest, opts ...grpc.CallOption) (*LockMfaResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(LockMfaResponse) - err := c.cc.Invoke(ctx, AuthorizerService_LockMfa_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) EmailOtpMfaSetup(ctx context.Context, in *EmailOtpMfaSetupRequest, opts ...grpc.CallOption) (*EmailOtpMfaSetupResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(EmailOtpMfaSetupResponse) - err := c.cc.Invoke(ctx, AuthorizerService_EmailOtpMfaSetup_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) SmsOtpMfaSetup(ctx context.Context, in *SmsOtpMfaSetupRequest, opts ...grpc.CallOption) (*SmsOtpMfaSetupResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(SmsOtpMfaSetupResponse) - err := c.cc.Invoke(ctx, AuthorizerService_SmsOtpMfaSetup_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) ForgotPassword(ctx context.Context, in *ForgotPasswordRequest, opts ...grpc.CallOption) (*ForgotPasswordResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(ForgotPasswordResponse) - err := c.cc.Invoke(ctx, AuthorizerService_ForgotPassword_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) ResetPassword(ctx context.Context, in *ResetPasswordRequest, opts ...grpc.CallOption) (*ResetPasswordResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(ResetPasswordResponse) - err := c.cc.Invoke(ctx, AuthorizerService_ResetPassword_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) Profile(ctx context.Context, in *ProfileRequest, opts ...grpc.CallOption) (*User, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(User) - err := c.cc.Invoke(ctx, AuthorizerService_Profile_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) UpdateProfile(ctx context.Context, in *UpdateProfileRequest, opts ...grpc.CallOption) (*UpdateProfileResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(UpdateProfileResponse) - err := c.cc.Invoke(ctx, AuthorizerService_UpdateProfile_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) DeactivateAccount(ctx context.Context, in *DeactivateAccountRequest, opts ...grpc.CallOption) (*DeactivateAccountResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(DeactivateAccountResponse) - err := c.cc.Invoke(ctx, AuthorizerService_DeactivateAccount_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) Revoke(ctx context.Context, in *RevokeRequest, opts ...grpc.CallOption) (*RevokeResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(RevokeResponse) - err := c.cc.Invoke(ctx, AuthorizerService_Revoke_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) Session(ctx context.Context, in *SessionRequest, opts ...grpc.CallOption) (*AuthResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(AuthResponse) - err := c.cc.Invoke(ctx, AuthorizerService_Session_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) ValidateJwtToken(ctx context.Context, in *ValidateJwtTokenRequest, opts ...grpc.CallOption) (*ValidateJwtTokenResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(ValidateJwtTokenResponse) - err := c.cc.Invoke(ctx, AuthorizerService_ValidateJwtToken_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) ValidateSession(ctx context.Context, in *ValidateSessionRequest, opts ...grpc.CallOption) (*ValidateSessionResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(ValidateSessionResponse) - err := c.cc.Invoke(ctx, AuthorizerService_ValidateSession_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) Meta(ctx context.Context, in *MetaRequest, opts ...grpc.CallOption) (*Meta, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(Meta) - err := c.cc.Invoke(ctx, AuthorizerService_Meta_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) CheckPermissions(ctx context.Context, in *CheckPermissionsRequest, opts ...grpc.CallOption) (*CheckPermissionsResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(CheckPermissionsResponse) - err := c.cc.Invoke(ctx, AuthorizerService_CheckPermissions_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizerServiceClient) ListPermissions(ctx context.Context, in *ListPermissionsRequest, opts ...grpc.CallOption) (*ListPermissionsResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(ListPermissionsResponse) - err := c.cc.Invoke(ctx, AuthorizerService_ListPermissions_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -// AuthorizerServiceServer is the server API for AuthorizerService service. -// All implementations should embed UnimplementedAuthorizerServiceServer -// for forward compatibility. -type AuthorizerServiceServer interface { - // Signup registers a new user. Public; requires sign-up enabled in config. - // Returns AuthResponse with tokens + (browser callers) Set-Cookie headers. - Signup(context.Context, *SignupRequest) (*AuthResponse, error) - // Login authenticates with email/phone + password. - Login(context.Context, *LoginRequest) (*AuthResponse, error) - // Logout ends the caller's current session. POST, not GET: logout mutates - // server state (clears the session) and is audit-logged, so it must not be - // a "safe" method per RFC 9110 §9.2.1 — GET would also expose it to CSRF. - Logout(context.Context, *LogoutRequest) (*LogoutResponse, error) - // MagicLinkLogin dispatches a passwordless email link. The clicked link - // hits the existing /verify_email browser handler. - MagicLinkLogin(context.Context, *MagicLinkLoginRequest) (*MagicLinkLoginResponse, error) - VerifyEmail(context.Context, *VerifyEmailRequest) (*AuthResponse, error) - ResendVerifyEmail(context.Context, *ResendVerifyEmailRequest) (*ResendVerifyEmailResponse, error) - VerifyOtp(context.Context, *VerifyOtpRequest) (*AuthResponse, error) - ResendOtp(context.Context, *ResendOtpRequest) (*ResendOtpResponse, error) - // SkipMfaSetup completes an in-progress, token-withheld MFA offer by - // recording that the caller explicitly declined it, then issues the - // access token that was withheld. Identified by the MFA session cookie - // (set when the offer screen was returned) plus email/phone_number to - // resolve the pending user — same identification pattern as VerifyOtp. - // Fails with FAILED_PRECONDITION if MFA is organization-enforced - // (enforce-mfa) — enforcement is never skippable. - SkipMfaSetup(context.Context, *SkipMfaSetupRequest) (*AuthResponse, error) - // LockMfa records that the caller lost access to their only MFA - // factor(s). Only allowed when the caller has NO verified Email/SMS OTP - // fallback enrolled — if one exists, use it instead of locking. Does not - // issue a token; the account requires admin recovery afterward. - LockMfa(context.Context, *LockMfaRequest) (*LockMfaResponse, error) - // EmailOtpMfaSetup sends a one-time code to the caller's own email and - // creates an unverified email-OTP MFA enrollment. Dual-mode permissions: - // (a) an authenticated caller (bearer token) — the settings-screen action - // for an ALREADY-logged-in user adding a second factor; the request body is - // unused in this mode. (b) a caller in the withheld first-time-offer - // state, with no bearer token yet — identified by the MFA session cookie - // plus email/phone_number, same pattern as SkipMfaSetup. Either mode - // reuses the same underlying Authenticator row once VerifyOtp marks it - // verified. - EmailOtpMfaSetup(context.Context, *EmailOtpMfaSetupRequest) (*EmailOtpMfaSetupResponse, error) - // SmsOtpMfaSetup sends a one-time code to the caller's own phone number - // and creates an unverified SMS-OTP MFA enrollment. Same dual-mode - // permissions and relationship to VerifyOtp as EmailOtpMfaSetup. - SmsOtpMfaSetup(context.Context, *SmsOtpMfaSetupRequest) (*SmsOtpMfaSetupResponse, error) - ForgotPassword(context.Context, *ForgotPasswordRequest) (*ForgotPasswordResponse, error) - ResetPassword(context.Context, *ResetPasswordRequest) (*ResetPasswordResponse, error) - // Profile returns the authenticated user. - Profile(context.Context, *ProfileRequest) (*User, error) - UpdateProfile(context.Context, *UpdateProfileRequest) (*UpdateProfileResponse, error) - // DeactivateAccount soft-deletes the caller's account and revokes all - // refresh tokens as a side effect. OAuth has no concept of account - // deactivation; this is the typed equivalent of SCIM PATCH active=false. - DeactivateAccount(context.Context, *DeactivateAccountRequest) (*DeactivateAccountResponse, error) - // Revoke invalidates a refresh token. Typed mirror of RFC 7009. - Revoke(context.Context, *RevokeRequest) (*RevokeResponse, error) - // Session returns the AuthResponse bound to the caller's session cookie only. - // NOT exposed as an MCP tool — SessionResponse carries access_token, - // refresh_token, id_token, authenticator_secret, and recovery codes, - // none of which should land in an LLM transcript. (Security audit C1.) - Session(context.Context, *SessionRequest) (*AuthResponse, error) - ValidateJwtToken(context.Context, *ValidateJwtTokenRequest) (*ValidateJwtTokenResponse, error) - ValidateSession(context.Context, *ValidateSessionRequest) (*ValidateSessionResponse, error) - // Meta returns server feature flags. No auth required. - Meta(context.Context, *MetaRequest) (*Meta, error) - // CheckPermissions evaluates one or more fine-grained permission checks - // ("does the subject have on ?") in a single call and - // returns one result per check, in order. The subject defaults to the - // authenticated caller; an explicit `user` is honored only for super-admins - // or when it equals the caller's own subject. Fail-closed. - CheckPermissions(context.Context, *CheckPermissionsRequest) (*CheckPermissionsResponse, error) - // ListPermissions enumerates what the subject can access. With both - // `relation` and `object_type` set it answers "which s can I - // ?"; either or both filters may be omitted to enumerate every - // matching (type, relation) pair of the active model. Results are capped; - // `truncated` reports when more permissions exist. Subject resolution - // follows the same rules as CheckPermissions. - ListPermissions(context.Context, *ListPermissionsRequest) (*ListPermissionsResponse, error) -} - -// UnimplementedAuthorizerServiceServer should be embedded to have -// forward compatible implementations. -// -// NOTE: this should be embedded by value instead of pointer to avoid a nil -// pointer dereference when methods are called. -type UnimplementedAuthorizerServiceServer struct{} - -func (UnimplementedAuthorizerServiceServer) Signup(context.Context, *SignupRequest) (*AuthResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Signup not implemented") -} -func (UnimplementedAuthorizerServiceServer) Login(context.Context, *LoginRequest) (*AuthResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Login not implemented") -} -func (UnimplementedAuthorizerServiceServer) Logout(context.Context, *LogoutRequest) (*LogoutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Logout not implemented") -} -func (UnimplementedAuthorizerServiceServer) MagicLinkLogin(context.Context, *MagicLinkLoginRequest) (*MagicLinkLoginResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MagicLinkLogin not implemented") -} -func (UnimplementedAuthorizerServiceServer) VerifyEmail(context.Context, *VerifyEmailRequest) (*AuthResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method VerifyEmail not implemented") -} -func (UnimplementedAuthorizerServiceServer) ResendVerifyEmail(context.Context, *ResendVerifyEmailRequest) (*ResendVerifyEmailResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResendVerifyEmail not implemented") -} -func (UnimplementedAuthorizerServiceServer) VerifyOtp(context.Context, *VerifyOtpRequest) (*AuthResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method VerifyOtp not implemented") -} -func (UnimplementedAuthorizerServiceServer) ResendOtp(context.Context, *ResendOtpRequest) (*ResendOtpResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResendOtp not implemented") -} -func (UnimplementedAuthorizerServiceServer) SkipMfaSetup(context.Context, *SkipMfaSetupRequest) (*AuthResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SkipMfaSetup not implemented") -} -func (UnimplementedAuthorizerServiceServer) LockMfa(context.Context, *LockMfaRequest) (*LockMfaResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LockMfa not implemented") -} -func (UnimplementedAuthorizerServiceServer) EmailOtpMfaSetup(context.Context, *EmailOtpMfaSetupRequest) (*EmailOtpMfaSetupResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EmailOtpMfaSetup not implemented") -} -func (UnimplementedAuthorizerServiceServer) SmsOtpMfaSetup(context.Context, *SmsOtpMfaSetupRequest) (*SmsOtpMfaSetupResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SmsOtpMfaSetup not implemented") -} -func (UnimplementedAuthorizerServiceServer) ForgotPassword(context.Context, *ForgotPasswordRequest) (*ForgotPasswordResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ForgotPassword not implemented") -} -func (UnimplementedAuthorizerServiceServer) ResetPassword(context.Context, *ResetPasswordRequest) (*ResetPasswordResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResetPassword not implemented") -} -func (UnimplementedAuthorizerServiceServer) Profile(context.Context, *ProfileRequest) (*User, error) { - return nil, status.Errorf(codes.Unimplemented, "method Profile not implemented") -} -func (UnimplementedAuthorizerServiceServer) UpdateProfile(context.Context, *UpdateProfileRequest) (*UpdateProfileResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateProfile not implemented") -} -func (UnimplementedAuthorizerServiceServer) DeactivateAccount(context.Context, *DeactivateAccountRequest) (*DeactivateAccountResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeactivateAccount not implemented") -} -func (UnimplementedAuthorizerServiceServer) Revoke(context.Context, *RevokeRequest) (*RevokeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Revoke not implemented") -} -func (UnimplementedAuthorizerServiceServer) Session(context.Context, *SessionRequest) (*AuthResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Session not implemented") -} -func (UnimplementedAuthorizerServiceServer) ValidateJwtToken(context.Context, *ValidateJwtTokenRequest) (*ValidateJwtTokenResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ValidateJwtToken not implemented") -} -func (UnimplementedAuthorizerServiceServer) ValidateSession(context.Context, *ValidateSessionRequest) (*ValidateSessionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ValidateSession not implemented") -} -func (UnimplementedAuthorizerServiceServer) Meta(context.Context, *MetaRequest) (*Meta, error) { - return nil, status.Errorf(codes.Unimplemented, "method Meta not implemented") -} -func (UnimplementedAuthorizerServiceServer) CheckPermissions(context.Context, *CheckPermissionsRequest) (*CheckPermissionsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CheckPermissions not implemented") -} -func (UnimplementedAuthorizerServiceServer) ListPermissions(context.Context, *ListPermissionsRequest) (*ListPermissionsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListPermissions not implemented") -} -func (UnimplementedAuthorizerServiceServer) testEmbeddedByValue() {} - -// UnsafeAuthorizerServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to AuthorizerServiceServer will -// result in compilation errors. -type UnsafeAuthorizerServiceServer interface { - mustEmbedUnimplementedAuthorizerServiceServer() -} - -func RegisterAuthorizerServiceServer(s grpc.ServiceRegistrar, srv AuthorizerServiceServer) { - // If the following call pancis, it indicates UnimplementedAuthorizerServiceServer was - // embedded by pointer and is nil. This will cause panics if an - // unimplemented method is ever invoked, so we test this at initialization - // time to prevent it from happening at runtime later due to I/O. - if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { - t.testEmbeddedByValue() - } - s.RegisterService(&AuthorizerService_ServiceDesc, srv) -} - -func _AuthorizerService_Signup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SignupRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).Signup(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_Signup_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).Signup(ctx, req.(*SignupRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_Login_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LoginRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).Login(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_Login_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).Login(ctx, req.(*LoginRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_Logout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LogoutRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).Logout(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_Logout_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).Logout(ctx, req.(*LogoutRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_MagicLinkLogin_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MagicLinkLoginRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).MagicLinkLogin(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_MagicLinkLogin_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).MagicLinkLogin(ctx, req.(*MagicLinkLoginRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_VerifyEmail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(VerifyEmailRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).VerifyEmail(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_VerifyEmail_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).VerifyEmail(ctx, req.(*VerifyEmailRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_ResendVerifyEmail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ResendVerifyEmailRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).ResendVerifyEmail(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_ResendVerifyEmail_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).ResendVerifyEmail(ctx, req.(*ResendVerifyEmailRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_VerifyOtp_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(VerifyOtpRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).VerifyOtp(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_VerifyOtp_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).VerifyOtp(ctx, req.(*VerifyOtpRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_ResendOtp_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ResendOtpRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).ResendOtp(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_ResendOtp_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).ResendOtp(ctx, req.(*ResendOtpRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_SkipMfaSetup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SkipMfaSetupRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).SkipMfaSetup(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_SkipMfaSetup_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).SkipMfaSetup(ctx, req.(*SkipMfaSetupRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_LockMfa_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LockMfaRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).LockMfa(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_LockMfa_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).LockMfa(ctx, req.(*LockMfaRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_EmailOtpMfaSetup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(EmailOtpMfaSetupRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).EmailOtpMfaSetup(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_EmailOtpMfaSetup_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).EmailOtpMfaSetup(ctx, req.(*EmailOtpMfaSetupRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_SmsOtpMfaSetup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SmsOtpMfaSetupRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).SmsOtpMfaSetup(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_SmsOtpMfaSetup_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).SmsOtpMfaSetup(ctx, req.(*SmsOtpMfaSetupRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_ForgotPassword_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ForgotPasswordRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).ForgotPassword(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_ForgotPassword_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).ForgotPassword(ctx, req.(*ForgotPasswordRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_ResetPassword_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ResetPasswordRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).ResetPassword(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_ResetPassword_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).ResetPassword(ctx, req.(*ResetPasswordRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_Profile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ProfileRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).Profile(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_Profile_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).Profile(ctx, req.(*ProfileRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_UpdateProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateProfileRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).UpdateProfile(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_UpdateProfile_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).UpdateProfile(ctx, req.(*UpdateProfileRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_DeactivateAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeactivateAccountRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).DeactivateAccount(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_DeactivateAccount_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).DeactivateAccount(ctx, req.(*DeactivateAccountRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_Revoke_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RevokeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).Revoke(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_Revoke_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).Revoke(ctx, req.(*RevokeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_Session_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SessionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).Session(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_Session_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).Session(ctx, req.(*SessionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_ValidateJwtToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ValidateJwtTokenRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).ValidateJwtToken(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_ValidateJwtToken_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).ValidateJwtToken(ctx, req.(*ValidateJwtTokenRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_ValidateSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ValidateSessionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).ValidateSession(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_ValidateSession_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).ValidateSession(ctx, req.(*ValidateSessionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_Meta_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MetaRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).Meta(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_Meta_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).Meta(ctx, req.(*MetaRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_CheckPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CheckPermissionsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).CheckPermissions(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_CheckPermissions_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).CheckPermissions(ctx, req.(*CheckPermissionsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizerService_ListPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListPermissionsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizerServiceServer).ListPermissions(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizerService_ListPermissions_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizerServiceServer).ListPermissions(ctx, req.(*ListPermissionsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// AuthorizerService_ServiceDesc is the grpc.ServiceDesc for AuthorizerService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var AuthorizerService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "authorizer.v1.AuthorizerService", - HandlerType: (*AuthorizerServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Signup", - Handler: _AuthorizerService_Signup_Handler, - }, - { - MethodName: "Login", - Handler: _AuthorizerService_Login_Handler, - }, - { - MethodName: "Logout", - Handler: _AuthorizerService_Logout_Handler, - }, - { - MethodName: "MagicLinkLogin", - Handler: _AuthorizerService_MagicLinkLogin_Handler, - }, - { - MethodName: "VerifyEmail", - Handler: _AuthorizerService_VerifyEmail_Handler, - }, - { - MethodName: "ResendVerifyEmail", - Handler: _AuthorizerService_ResendVerifyEmail_Handler, - }, - { - MethodName: "VerifyOtp", - Handler: _AuthorizerService_VerifyOtp_Handler, - }, - { - MethodName: "ResendOtp", - Handler: _AuthorizerService_ResendOtp_Handler, - }, - { - MethodName: "SkipMfaSetup", - Handler: _AuthorizerService_SkipMfaSetup_Handler, - }, - { - MethodName: "LockMfa", - Handler: _AuthorizerService_LockMfa_Handler, - }, - { - MethodName: "EmailOtpMfaSetup", - Handler: _AuthorizerService_EmailOtpMfaSetup_Handler, - }, - { - MethodName: "SmsOtpMfaSetup", - Handler: _AuthorizerService_SmsOtpMfaSetup_Handler, - }, - { - MethodName: "ForgotPassword", - Handler: _AuthorizerService_ForgotPassword_Handler, - }, - { - MethodName: "ResetPassword", - Handler: _AuthorizerService_ResetPassword_Handler, - }, - { - MethodName: "Profile", - Handler: _AuthorizerService_Profile_Handler, - }, - { - MethodName: "UpdateProfile", - Handler: _AuthorizerService_UpdateProfile_Handler, - }, - { - MethodName: "DeactivateAccount", - Handler: _AuthorizerService_DeactivateAccount_Handler, - }, - { - MethodName: "Revoke", - Handler: _AuthorizerService_Revoke_Handler, - }, - { - MethodName: "Session", - Handler: _AuthorizerService_Session_Handler, - }, - { - MethodName: "ValidateJwtToken", - Handler: _AuthorizerService_ValidateJwtToken_Handler, - }, - { - MethodName: "ValidateSession", - Handler: _AuthorizerService_ValidateSession_Handler, - }, - { - MethodName: "Meta", - Handler: _AuthorizerService_Meta_Handler, - }, - { - MethodName: "CheckPermissions", - Handler: _AuthorizerService_CheckPermissions_Handler, - }, - { - MethodName: "ListPermissions", - Handler: _AuthorizerService_ListPermissions_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "authorizer/v1/authorizer.proto", -} diff --git a/gen/go-client/authorizer/v1/common.pb.go b/gen/go-client/authorizer/v1/common.pb.go deleted file mode 100644 index 851c2ee5..00000000 --- a/gen/go-client/authorizer/v1/common.pb.go +++ /dev/null @@ -1,157 +0,0 @@ -// proto/authorizer/v1/common.proto -// -// Shared scalar-ish types used across Authorizer services. -// -// Kept intentionally tiny: only types that don't naturally belong to a single -// resource service live here. Add a new entry only when at least two services -// share it. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.35.2 -// protoc (unknown) -// source: authorizer/v1/common.proto - -package authorizerv1 - -import ( - 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) -) - -// AppData is a free-form key/value bag stored against a user. Mirrors the -// GraphQL `Map` scalar. Values are JSON-typed (string, number, bool, null, -// nested object, nested array) to match what the existing storage layer -// accepts. -type AppData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *structpb.Struct `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *AppData) Reset() { - *x = AppData{} - mi := &file_authorizer_v1_common_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AppData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppData) ProtoMessage() {} - -func (x *AppData) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_common_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AppData.ProtoReflect.Descriptor instead. -func (*AppData) Descriptor() ([]byte, []int) { - return file_authorizer_v1_common_proto_rawDescGZIP(), []int{0} -} - -func (x *AppData) GetValue() *structpb.Struct { - if x != nil { - return x.Value - } - return nil -} - -var File_authorizer_v1_common_proto protoreflect.FileDescriptor - -var file_authorizer_v1_common_proto_rawDesc = []byte{ - 0x0a, 0x1a, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 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, 0x38, 0x0a, 0x07, 0x41, 0x70, 0x70, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 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, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0xc7, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x64, - 0x65, 0x76, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2d, 0x67, 0x6f, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x62, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, - 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x56, 0x31, - 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, - 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_authorizer_v1_common_proto_rawDescOnce sync.Once - file_authorizer_v1_common_proto_rawDescData = file_authorizer_v1_common_proto_rawDesc -) - -func file_authorizer_v1_common_proto_rawDescGZIP() []byte { - file_authorizer_v1_common_proto_rawDescOnce.Do(func() { - file_authorizer_v1_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_authorizer_v1_common_proto_rawDescData) - }) - return file_authorizer_v1_common_proto_rawDescData -} - -var file_authorizer_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_authorizer_v1_common_proto_goTypes = []any{ - (*AppData)(nil), // 0: authorizer.v1.AppData - (*structpb.Struct)(nil), // 1: google.protobuf.Struct -} -var file_authorizer_v1_common_proto_depIdxs = []int32{ - 1, // 0: authorizer.v1.AppData.value:type_name -> google.protobuf.Struct - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] 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_authorizer_v1_common_proto_init() } -func file_authorizer_v1_common_proto_init() { - if File_authorizer_v1_common_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_authorizer_v1_common_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_authorizer_v1_common_proto_goTypes, - DependencyIndexes: file_authorizer_v1_common_proto_depIdxs, - MessageInfos: file_authorizer_v1_common_proto_msgTypes, - }.Build() - File_authorizer_v1_common_proto = out.File - file_authorizer_v1_common_proto_rawDesc = nil - file_authorizer_v1_common_proto_goTypes = nil - file_authorizer_v1_common_proto_depIdxs = nil -} diff --git a/gen/go-client/authorizer/v1/errors.pb.go b/gen/go-client/authorizer/v1/errors.pb.go deleted file mode 100644 index 3acdc28b..00000000 --- a/gen/go-client/authorizer/v1/errors.pb.go +++ /dev/null @@ -1,217 +0,0 @@ -// proto/authorizer/v1/errors.proto -// -// Domain-specific error reasons attached to google.rpc.Status via ErrorInfo. -// -// Wire shape: handlers return standard gRPC status codes (e.g. -// PERMISSION_DENIED, INVALID_ARGUMENT) and attach an ErrorInfo detail whose -// `reason` field is one of the enum values below. The gateway surfaces the -// same ErrorInfo in the REST response body. Clients should branch on the -// enum, not on the human-readable message. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.35.2 -// protoc (unknown) -// source: authorizer/v1/errors.proto - -package authorizerv1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ErrorReason int32 - -const ( - ErrorReason_ERROR_REASON_UNSPECIFIED ErrorReason = 0 - // Authentication failed (bad credentials, expired token, missing cookie). - // Maps to gRPC UNAUTHENTICATED / HTTP 401. - ErrorReason_ERROR_REASON_INVALID_CREDENTIALS ErrorReason = 1 - // Caller is authenticated but lacks the required permission. - // Maps to PERMISSION_DENIED / HTTP 403. - ErrorReason_ERROR_REASON_PERMISSION_DENIED ErrorReason = 2 - // The targeted resource does not exist. NOT_FOUND / 404. - ErrorReason_ERROR_REASON_NOT_FOUND ErrorReason = 3 - // A unique constraint was violated (e.g. email already registered). - // ALREADY_EXISTS / 409. - ErrorReason_ERROR_REASON_ALREADY_EXISTS ErrorReason = 4 - // Request validation failed beyond what protovalidate caught - // (cross-field, business-rule). INVALID_ARGUMENT / 400. - ErrorReason_ERROR_REASON_INVALID_REQUEST ErrorReason = 5 - // A required identity-verification step has not been completed - // (email not verified, phone not verified, MFA required). FAILED_PRECONDITION / 412. - ErrorReason_ERROR_REASON_VERIFICATION_REQUIRED ErrorReason = 6 - // The current configuration disables the requested operation - // (sign-up disabled, magic-link login disabled, etc.). FAILED_PRECONDITION / 412. - ErrorReason_ERROR_REASON_OPERATION_DISABLED ErrorReason = 7 - // Caller exceeded the configured rate limit. RESOURCE_EXHAUSTED / 429. - ErrorReason_ERROR_REASON_RATE_LIMITED ErrorReason = 8 - // A verification token (email, password reset, magic link, OTP) is expired - // or has already been consumed. FAILED_PRECONDITION / 412. - ErrorReason_ERROR_REASON_TOKEN_EXPIRED ErrorReason = 9 - // The account is deactivated or its access has been revoked by an admin. - // FAILED_PRECONDITION / 412. - ErrorReason_ERROR_REASON_ACCOUNT_DEACTIVATED ErrorReason = 10 -) - -// Enum value maps for ErrorReason. -var ( - ErrorReason_name = map[int32]string{ - 0: "ERROR_REASON_UNSPECIFIED", - 1: "ERROR_REASON_INVALID_CREDENTIALS", - 2: "ERROR_REASON_PERMISSION_DENIED", - 3: "ERROR_REASON_NOT_FOUND", - 4: "ERROR_REASON_ALREADY_EXISTS", - 5: "ERROR_REASON_INVALID_REQUEST", - 6: "ERROR_REASON_VERIFICATION_REQUIRED", - 7: "ERROR_REASON_OPERATION_DISABLED", - 8: "ERROR_REASON_RATE_LIMITED", - 9: "ERROR_REASON_TOKEN_EXPIRED", - 10: "ERROR_REASON_ACCOUNT_DEACTIVATED", - } - ErrorReason_value = map[string]int32{ - "ERROR_REASON_UNSPECIFIED": 0, - "ERROR_REASON_INVALID_CREDENTIALS": 1, - "ERROR_REASON_PERMISSION_DENIED": 2, - "ERROR_REASON_NOT_FOUND": 3, - "ERROR_REASON_ALREADY_EXISTS": 4, - "ERROR_REASON_INVALID_REQUEST": 5, - "ERROR_REASON_VERIFICATION_REQUIRED": 6, - "ERROR_REASON_OPERATION_DISABLED": 7, - "ERROR_REASON_RATE_LIMITED": 8, - "ERROR_REASON_TOKEN_EXPIRED": 9, - "ERROR_REASON_ACCOUNT_DEACTIVATED": 10, - } -) - -func (x ErrorReason) Enum() *ErrorReason { - p := new(ErrorReason) - *p = x - return p -} - -func (x ErrorReason) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ErrorReason) Descriptor() protoreflect.EnumDescriptor { - return file_authorizer_v1_errors_proto_enumTypes[0].Descriptor() -} - -func (ErrorReason) Type() protoreflect.EnumType { - return &file_authorizer_v1_errors_proto_enumTypes[0] -} - -func (x ErrorReason) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ErrorReason.Descriptor instead. -func (ErrorReason) EnumDescriptor() ([]byte, []int) { - return file_authorizer_v1_errors_proto_rawDescGZIP(), []int{0} -} - -var File_authorizer_v1_errors_proto protoreflect.FileDescriptor - -var file_authorizer_v1_errors_proto_rawDesc = []byte{ - 0x0a, 0x1a, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2a, 0x86, 0x03, 0x0a, 0x0b, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x18, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x45, 0x52, 0x52, - 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x5f, 0x43, 0x52, 0x45, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x53, 0x10, 0x01, 0x12, - 0x22, 0x0a, 0x1e, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, - 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x49, 0x45, - 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, - 0x53, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x12, - 0x1f, 0x0a, 0x1b, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, - 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x04, - 0x12, 0x20, 0x0a, 0x1c, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, - 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, - 0x10, 0x05, 0x12, 0x26, 0x0a, 0x22, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, 0x53, - 0x4f, 0x4e, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, 0x45, 0x52, - 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x07, 0x12, - 0x1d, 0x0a, 0x19, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, - 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, 0x1e, - 0x0a, 0x1a, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x54, - 0x4f, 0x4b, 0x45, 0x4e, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x45, 0x44, 0x10, 0x09, 0x12, 0x24, - 0x0a, 0x20, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x41, - 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, - 0x45, 0x44, 0x10, 0x0a, 0x42, 0xc7, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, - 0x64, 0x65, 0x76, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2d, 0x67, - 0x6f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x62, - 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, - 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x56, - 0x31, 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, - 0x31, 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, - 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_authorizer_v1_errors_proto_rawDescOnce sync.Once - file_authorizer_v1_errors_proto_rawDescData = file_authorizer_v1_errors_proto_rawDesc -) - -func file_authorizer_v1_errors_proto_rawDescGZIP() []byte { - file_authorizer_v1_errors_proto_rawDescOnce.Do(func() { - file_authorizer_v1_errors_proto_rawDescData = protoimpl.X.CompressGZIP(file_authorizer_v1_errors_proto_rawDescData) - }) - return file_authorizer_v1_errors_proto_rawDescData -} - -var file_authorizer_v1_errors_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_authorizer_v1_errors_proto_goTypes = []any{ - (ErrorReason)(0), // 0: authorizer.v1.ErrorReason -} -var file_authorizer_v1_errors_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_authorizer_v1_errors_proto_init() } -func file_authorizer_v1_errors_proto_init() { - if File_authorizer_v1_errors_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_authorizer_v1_errors_proto_rawDesc, - NumEnums: 1, - NumMessages: 0, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_authorizer_v1_errors_proto_goTypes, - DependencyIndexes: file_authorizer_v1_errors_proto_depIdxs, - EnumInfos: file_authorizer_v1_errors_proto_enumTypes, - }.Build() - File_authorizer_v1_errors_proto = out.File - file_authorizer_v1_errors_proto_rawDesc = nil - file_authorizer_v1_errors_proto_goTypes = nil - file_authorizer_v1_errors_proto_depIdxs = nil -} diff --git a/gen/go-client/authorizer/v1/pagination.pb.go b/gen/go-client/authorizer/v1/pagination.pb.go deleted file mode 100644 index 2e21800b..00000000 --- a/gen/go-client/authorizer/v1/pagination.pb.go +++ /dev/null @@ -1,265 +0,0 @@ -// proto/authorizer/v1/pagination.proto -// -// Pagination types shared across List RPCs. -// -// The Authorizer GraphQL surface uses page+limit (offset-based) pagination. -// To keep the proto surface familiar for current users *and* compatible with -// AIP-158 (page_token-based) clients, both shapes are accepted on -// PaginationRequest; the server picks page_token when set, else falls back to -// page+limit. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.35.2 -// protoc (unknown) -// source: authorizer/v1/pagination.proto - -package authorizerv1 - -import ( - _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type PaginationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 1-based page number. Ignored when page_token is set. Default 1. - Page int64 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"` - // Page size. Server enforces an upper bound (typically 100). Default 10. - Limit int64 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` - // Opaque cursor returned by the previous List call's `next_page_token`. - // Preferred for new clients (AIP-158). When set, `page` is ignored. - PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` -} - -func (x *PaginationRequest) Reset() { - *x = PaginationRequest{} - mi := &file_authorizer_v1_pagination_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *PaginationRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PaginationRequest) ProtoMessage() {} - -func (x *PaginationRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_pagination_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PaginationRequest.ProtoReflect.Descriptor instead. -func (*PaginationRequest) Descriptor() ([]byte, []int) { - return file_authorizer_v1_pagination_proto_rawDescGZIP(), []int{0} -} - -func (x *PaginationRequest) GetPage() int64 { - if x != nil { - return x.Page - } - return 0 -} - -func (x *PaginationRequest) GetLimit() int64 { - if x != nil { - return x.Limit - } - return 0 -} - -func (x *PaginationRequest) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -type Pagination struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Limit int64 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` - Page int64 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` - Offset int64 `protobuf:"varint,3,opt,name=offset,proto3" json:"offset,omitempty"` - Total int64 `protobuf:"varint,4,opt,name=total,proto3" json:"total,omitempty"` - // Opaque cursor for the next page; empty when no more pages. - NextPageToken string `protobuf:"bytes,5,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` -} - -func (x *Pagination) Reset() { - *x = Pagination{} - mi := &file_authorizer_v1_pagination_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Pagination) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Pagination) ProtoMessage() {} - -func (x *Pagination) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_pagination_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Pagination.ProtoReflect.Descriptor instead. -func (*Pagination) Descriptor() ([]byte, []int) { - return file_authorizer_v1_pagination_proto_rawDescGZIP(), []int{1} -} - -func (x *Pagination) GetLimit() int64 { - if x != nil { - return x.Limit - } - return 0 -} - -func (x *Pagination) GetPage() int64 { - if x != nil { - return x.Page - } - return 0 -} - -func (x *Pagination) GetOffset() int64 { - if x != nil { - return x.Offset - } - return 0 -} - -func (x *Pagination) GetTotal() int64 { - if x != nil { - return x.Total - } - return 0 -} - -func (x *Pagination) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -var File_authorizer_v1_pagination_proto protoreflect.FileDescriptor - -var file_authorizer_v1_pagination_proto_rawDesc = []byte{ - 0x0a, 0x1e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, - 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x71, 0x0a, 0x11, - 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, - 0x07, 0xba, 0x48, 0x04, 0x22, 0x02, 0x28, 0x00, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x20, - 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x0a, 0xba, - 0x48, 0x07, 0x22, 0x05, 0x18, 0xe8, 0x07, 0x28, 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, - 0x8c, 0x01, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, - 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, - 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0xcb, - 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x64, 0x65, - 0x76, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2d, 0x67, 0x6f, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x62, 0x2f, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, - 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x56, 0x31, 0xca, - 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, 0xe2, - 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_authorizer_v1_pagination_proto_rawDescOnce sync.Once - file_authorizer_v1_pagination_proto_rawDescData = file_authorizer_v1_pagination_proto_rawDesc -) - -func file_authorizer_v1_pagination_proto_rawDescGZIP() []byte { - file_authorizer_v1_pagination_proto_rawDescOnce.Do(func() { - file_authorizer_v1_pagination_proto_rawDescData = protoimpl.X.CompressGZIP(file_authorizer_v1_pagination_proto_rawDescData) - }) - return file_authorizer_v1_pagination_proto_rawDescData -} - -var file_authorizer_v1_pagination_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_authorizer_v1_pagination_proto_goTypes = []any{ - (*PaginationRequest)(nil), // 0: authorizer.v1.PaginationRequest - (*Pagination)(nil), // 1: authorizer.v1.Pagination -} -var file_authorizer_v1_pagination_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_authorizer_v1_pagination_proto_init() } -func file_authorizer_v1_pagination_proto_init() { - if File_authorizer_v1_pagination_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_authorizer_v1_pagination_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_authorizer_v1_pagination_proto_goTypes, - DependencyIndexes: file_authorizer_v1_pagination_proto_depIdxs, - MessageInfos: file_authorizer_v1_pagination_proto_msgTypes, - }.Build() - File_authorizer_v1_pagination_proto = out.File - file_authorizer_v1_pagination_proto_rawDesc = nil - file_authorizer_v1_pagination_proto_goTypes = nil - file_authorizer_v1_pagination_proto_depIdxs = nil -} diff --git a/gen/go-client/authorizer/v1/types.pb.go b/gen/go-client/authorizer/v1/types.pb.go deleted file mode 100644 index 37c5b163..00000000 --- a/gen/go-client/authorizer/v1/types.pb.go +++ /dev/null @@ -1,1276 +0,0 @@ -// Shared message types used by the Authorizer service. Field naming mirrors -// the GraphQL schema 1:1 so REST/gRPC clients see the same shape. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.35.2 -// protoc (unknown) -// source: authorizer/v1/types.proto - -package authorizerv1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// User mirrors the GraphQL User type. Returned by Profile and embedded in -// AuthResponse. -type User struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Either email or phone_number is always present. - Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` - EmailVerified bool `protobuf:"varint,3,opt,name=email_verified,json=emailVerified,proto3" json:"email_verified,omitempty"` - SignupMethods string `protobuf:"bytes,4,opt,name=signup_methods,json=signupMethods,proto3" json:"signup_methods,omitempty"` - GivenName string `protobuf:"bytes,5,opt,name=given_name,json=givenName,proto3" json:"given_name,omitempty"` - FamilyName string `protobuf:"bytes,6,opt,name=family_name,json=familyName,proto3" json:"family_name,omitempty"` - MiddleName string `protobuf:"bytes,7,opt,name=middle_name,json=middleName,proto3" json:"middle_name,omitempty"` - Nickname string `protobuf:"bytes,8,opt,name=nickname,proto3" json:"nickname,omitempty"` - // Defaults to email when unset. - PreferredUsername string `protobuf:"bytes,9,opt,name=preferred_username,json=preferredUsername,proto3" json:"preferred_username,omitempty"` - Gender string `protobuf:"bytes,10,opt,name=gender,proto3" json:"gender,omitempty"` - Birthdate string `protobuf:"bytes,11,opt,name=birthdate,proto3" json:"birthdate,omitempty"` - PhoneNumber string `protobuf:"bytes,12,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` - PhoneNumberVerified bool `protobuf:"varint,13,opt,name=phone_number_verified,json=phoneNumberVerified,proto3" json:"phone_number_verified,omitempty"` - Picture string `protobuf:"bytes,14,opt,name=picture,proto3" json:"picture,omitempty"` - Roles []string `protobuf:"bytes,15,rep,name=roles,proto3" json:"roles,omitempty"` - CreatedAt int64 `protobuf:"varint,16,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt int64 `protobuf:"varint,17,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` - RevokedTimestamp int64 `protobuf:"varint,18,opt,name=revoked_timestamp,json=revokedTimestamp,proto3" json:"revoked_timestamp,omitempty"` - IsMultiFactorAuthEnabled bool `protobuf:"varint,19,opt,name=is_multi_factor_auth_enabled,json=isMultiFactorAuthEnabled,proto3" json:"is_multi_factor_auth_enabled,omitempty"` - // Free-form key/value bag — same as GraphQL `app_data: Map`. - AppData *AppData `protobuf:"bytes,20,opt,name=app_data,json=appData,proto3" json:"app_data,omitempty"` - // Mirrors User.has_skipped_mfa_setup_at in GraphQL. 0 means never skipped. - HasSkippedMfaSetupAt int64 `protobuf:"varint,21,opt,name=has_skipped_mfa_setup_at,json=hasSkippedMfaSetupAt,proto3" json:"has_skipped_mfa_setup_at,omitempty"` - // Mirrors User.mfa_locked_at in GraphQL. 0 means not locked. - MfaLockedAt int64 `protobuf:"varint,22,opt,name=mfa_locked_at,json=mfaLockedAt,proto3" json:"mfa_locked_at,omitempty"` -} - -func (x *User) Reset() { - *x = User{} - mi := &file_authorizer_v1_types_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *User) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*User) ProtoMessage() {} - -func (x *User) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_types_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use User.ProtoReflect.Descriptor instead. -func (*User) Descriptor() ([]byte, []int) { - return file_authorizer_v1_types_proto_rawDescGZIP(), []int{0} -} - -func (x *User) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *User) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *User) GetEmailVerified() bool { - if x != nil { - return x.EmailVerified - } - return false -} - -func (x *User) GetSignupMethods() string { - if x != nil { - return x.SignupMethods - } - return "" -} - -func (x *User) GetGivenName() string { - if x != nil { - return x.GivenName - } - return "" -} - -func (x *User) GetFamilyName() string { - if x != nil { - return x.FamilyName - } - return "" -} - -func (x *User) GetMiddleName() string { - if x != nil { - return x.MiddleName - } - return "" -} - -func (x *User) GetNickname() string { - if x != nil { - return x.Nickname - } - return "" -} - -func (x *User) GetPreferredUsername() string { - if x != nil { - return x.PreferredUsername - } - return "" -} - -func (x *User) GetGender() string { - if x != nil { - return x.Gender - } - return "" -} - -func (x *User) GetBirthdate() string { - if x != nil { - return x.Birthdate - } - return "" -} - -func (x *User) GetPhoneNumber() string { - if x != nil { - return x.PhoneNumber - } - return "" -} - -func (x *User) GetPhoneNumberVerified() bool { - if x != nil { - return x.PhoneNumberVerified - } - return false -} - -func (x *User) GetPicture() string { - if x != nil { - return x.Picture - } - return "" -} - -func (x *User) GetRoles() []string { - if x != nil { - return x.Roles - } - return nil -} - -func (x *User) GetCreatedAt() int64 { - if x != nil { - return x.CreatedAt - } - return 0 -} - -func (x *User) GetUpdatedAt() int64 { - if x != nil { - return x.UpdatedAt - } - return 0 -} - -func (x *User) GetRevokedTimestamp() int64 { - if x != nil { - return x.RevokedTimestamp - } - return 0 -} - -func (x *User) GetIsMultiFactorAuthEnabled() bool { - if x != nil { - return x.IsMultiFactorAuthEnabled - } - return false -} - -func (x *User) GetAppData() *AppData { - if x != nil { - return x.AppData - } - return nil -} - -func (x *User) GetHasSkippedMfaSetupAt() int64 { - if x != nil { - return x.HasSkippedMfaSetupAt - } - return 0 -} - -func (x *User) GetMfaLockedAt() int64 { - if x != nil { - return x.MfaLockedAt - } - return 0 -} - -// AuthResponse mirrors the GraphQL AuthResponse type. Returned (wrapped) by -// every method that produces a session: Signup, Login, MagicLinkLogin, -// VerifyEmail, VerifyOtp, Session. -type AuthResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - ShouldShowEmailOtpScreen bool `protobuf:"varint,2,opt,name=should_show_email_otp_screen,json=shouldShowEmailOtpScreen,proto3" json:"should_show_email_otp_screen,omitempty"` - ShouldShowMobileOtpScreen bool `protobuf:"varint,3,opt,name=should_show_mobile_otp_screen,json=shouldShowMobileOtpScreen,proto3" json:"should_show_mobile_otp_screen,omitempty"` - ShouldShowTotpScreen bool `protobuf:"varint,4,opt,name=should_show_totp_screen,json=shouldShowTotpScreen,proto3" json:"should_show_totp_screen,omitempty"` - AccessToken string `protobuf:"bytes,5,opt,name=access_token,json=accessToken,proto3" json:"access_token,omitempty"` - IdToken string `protobuf:"bytes,6,opt,name=id_token,json=idToken,proto3" json:"id_token,omitempty"` - RefreshToken string `protobuf:"bytes,7,opt,name=refresh_token,json=refreshToken,proto3" json:"refresh_token,omitempty"` - ExpiresIn int64 `protobuf:"varint,8,opt,name=expires_in,json=expiresIn,proto3" json:"expires_in,omitempty"` - User *User `protobuf:"bytes,9,opt,name=user,proto3" json:"user,omitempty"` - // TOTP enrolment artifacts (populated only when this AuthResponse - // initiates TOTP setup; one-time, never re-shown). - AuthenticatorScannerImage string `protobuf:"bytes,10,opt,name=authenticator_scanner_image,json=authenticatorScannerImage,proto3" json:"authenticator_scanner_image,omitempty"` - AuthenticatorSecret string `protobuf:"bytes,11,opt,name=authenticator_secret,json=authenticatorSecret,proto3" json:"authenticator_secret,omitempty"` - AuthenticatorRecoveryCodes []string `protobuf:"bytes,12,rep,name=authenticator_recovery_codes,json=authenticatorRecoveryCodes,proto3" json:"authenticator_recovery_codes,omitempty"` - // Mirrors AuthResponse.should_offer_webauthn_mfa_verify in GraphQL. - ShouldOfferWebauthnMfaVerify bool `protobuf:"varint,13,opt,name=should_offer_webauthn_mfa_verify,json=shouldOfferWebauthnMfaVerify,proto3" json:"should_offer_webauthn_mfa_verify,omitempty"` - // Mirrors AuthResponse.should_offer_webauthn_mfa_setup in GraphQL. - ShouldOfferWebauthnMfaSetup bool `protobuf:"varint,14,opt,name=should_offer_webauthn_mfa_setup,json=shouldOfferWebauthnMfaSetup,proto3" json:"should_offer_webauthn_mfa_setup,omitempty"` - // Mirrors AuthResponse.should_offer_email_otp_mfa_setup in GraphQL. - ShouldOfferEmailOtpMfaSetup bool `protobuf:"varint,15,opt,name=should_offer_email_otp_mfa_setup,json=shouldOfferEmailOtpMfaSetup,proto3" json:"should_offer_email_otp_mfa_setup,omitempty"` - // Mirrors AuthResponse.should_offer_sms_otp_mfa_setup in GraphQL. - ShouldOfferSmsOtpMfaSetup bool `protobuf:"varint,16,opt,name=should_offer_sms_otp_mfa_setup,json=shouldOfferSmsOtpMfaSetup,proto3" json:"should_offer_sms_otp_mfa_setup,omitempty"` -} - -func (x *AuthResponse) Reset() { - *x = AuthResponse{} - mi := &file_authorizer_v1_types_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AuthResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AuthResponse) ProtoMessage() {} - -func (x *AuthResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_types_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AuthResponse.ProtoReflect.Descriptor instead. -func (*AuthResponse) Descriptor() ([]byte, []int) { - return file_authorizer_v1_types_proto_rawDescGZIP(), []int{1} -} - -func (x *AuthResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -func (x *AuthResponse) GetShouldShowEmailOtpScreen() bool { - if x != nil { - return x.ShouldShowEmailOtpScreen - } - return false -} - -func (x *AuthResponse) GetShouldShowMobileOtpScreen() bool { - if x != nil { - return x.ShouldShowMobileOtpScreen - } - return false -} - -func (x *AuthResponse) GetShouldShowTotpScreen() bool { - if x != nil { - return x.ShouldShowTotpScreen - } - return false -} - -func (x *AuthResponse) GetAccessToken() string { - if x != nil { - return x.AccessToken - } - return "" -} - -func (x *AuthResponse) GetIdToken() string { - if x != nil { - return x.IdToken - } - return "" -} - -func (x *AuthResponse) GetRefreshToken() string { - if x != nil { - return x.RefreshToken - } - return "" -} - -func (x *AuthResponse) GetExpiresIn() int64 { - if x != nil { - return x.ExpiresIn - } - return 0 -} - -func (x *AuthResponse) GetUser() *User { - if x != nil { - return x.User - } - return nil -} - -func (x *AuthResponse) GetAuthenticatorScannerImage() string { - if x != nil { - return x.AuthenticatorScannerImage - } - return "" -} - -func (x *AuthResponse) GetAuthenticatorSecret() string { - if x != nil { - return x.AuthenticatorSecret - } - return "" -} - -func (x *AuthResponse) GetAuthenticatorRecoveryCodes() []string { - if x != nil { - return x.AuthenticatorRecoveryCodes - } - return nil -} - -func (x *AuthResponse) GetShouldOfferWebauthnMfaVerify() bool { - if x != nil { - return x.ShouldOfferWebauthnMfaVerify - } - return false -} - -func (x *AuthResponse) GetShouldOfferWebauthnMfaSetup() bool { - if x != nil { - return x.ShouldOfferWebauthnMfaSetup - } - return false -} - -func (x *AuthResponse) GetShouldOfferEmailOtpMfaSetup() bool { - if x != nil { - return x.ShouldOfferEmailOtpMfaSetup - } - return false -} - -func (x *AuthResponse) GetShouldOfferSmsOtpMfaSetup() bool { - if x != nil { - return x.ShouldOfferSmsOtpMfaSetup - } - return false -} - -// Permission is one (object, relation) pair the subject holds: "subject has -// `relation` on `object`". Mirrors the GraphQL Permission type. -type Permission struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Object string `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` - Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` -} - -func (x *Permission) Reset() { - *x = Permission{} - mi := &file_authorizer_v1_types_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Permission) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Permission) ProtoMessage() {} - -func (x *Permission) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_types_proto_msgTypes[2] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Permission.ProtoReflect.Descriptor instead. -func (*Permission) Descriptor() ([]byte, []int) { - return file_authorizer_v1_types_proto_rawDescGZIP(), []int{2} -} - -func (x *Permission) GetObject() string { - if x != nil { - return x.Object - } - return "" -} - -func (x *Permission) GetRelation() string { - if x != nil { - return x.Relation - } - return "" -} - -// FgaRelationInput is a (relation, object) requirement evaluated against the -// authenticated caller during Session / ValidateJwtToken / ValidateSession. -// AND semantics, fail-closed. Mirrors the GraphQL FgaRelationInput type. -type FgaRelationInput struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Relation string `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"` - Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"` -} - -func (x *FgaRelationInput) Reset() { - *x = FgaRelationInput{} - mi := &file_authorizer_v1_types_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaRelationInput) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaRelationInput) ProtoMessage() {} - -func (x *FgaRelationInput) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_types_proto_msgTypes[3] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaRelationInput.ProtoReflect.Descriptor instead. -func (*FgaRelationInput) Descriptor() ([]byte, []int) { - return file_authorizer_v1_types_proto_rawDescGZIP(), []int{3} -} - -func (x *FgaRelationInput) GetRelation() string { - if x != nil { - return x.Relation - } - return "" -} - -func (x *FgaRelationInput) GetObject() string { - if x != nil { - return x.Object - } - return "" -} - -// FgaTupleInput is one relationship tuple supplied as request-scoped context -// for a permission check; contextual tuples are never persisted. Mirrors the -// GraphQL FgaTupleInput type. -type FgaTupleInput struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` - Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` - Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` -} - -func (x *FgaTupleInput) Reset() { - *x = FgaTupleInput{} - mi := &file_authorizer_v1_types_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FgaTupleInput) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FgaTupleInput) ProtoMessage() {} - -func (x *FgaTupleInput) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_types_proto_msgTypes[4] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FgaTupleInput.ProtoReflect.Descriptor instead. -func (*FgaTupleInput) Descriptor() ([]byte, []int) { - return file_authorizer_v1_types_proto_rawDescGZIP(), []int{4} -} - -func (x *FgaTupleInput) GetUser() string { - if x != nil { - return x.User - } - return "" -} - -func (x *FgaTupleInput) GetRelation() string { - if x != nil { - return x.Relation - } - return "" -} - -func (x *FgaTupleInput) GetObject() string { - if x != nil { - return x.Object - } - return "" -} - -// PermissionCheckInput is one permission to evaluate: "does the subject have -// on ?". Mirrors the GraphQL PermissionCheckInput type. -type PermissionCheckInput struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Relation string `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"` - Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"` - ContextualTuples []*FgaTupleInput `protobuf:"bytes,3,rep,name=contextual_tuples,json=contextualTuples,proto3" json:"contextual_tuples,omitempty"` -} - -func (x *PermissionCheckInput) Reset() { - *x = PermissionCheckInput{} - mi := &file_authorizer_v1_types_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *PermissionCheckInput) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PermissionCheckInput) ProtoMessage() {} - -func (x *PermissionCheckInput) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_types_proto_msgTypes[5] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PermissionCheckInput.ProtoReflect.Descriptor instead. -func (*PermissionCheckInput) Descriptor() ([]byte, []int) { - return file_authorizer_v1_types_proto_rawDescGZIP(), []int{5} -} - -func (x *PermissionCheckInput) GetRelation() string { - if x != nil { - return x.Relation - } - return "" -} - -func (x *PermissionCheckInput) GetObject() string { - if x != nil { - return x.Object - } - return "" -} - -func (x *PermissionCheckInput) GetContextualTuples() []*FgaTupleInput { - if x != nil { - return x.ContextualTuples - } - return nil -} - -// PermissionCheckResult is the outcome of one permission check, echoing the -// checked pair so batch results are self-describing (and positionally -// aligned). Mirrors the GraphQL PermissionCheckResult type. -type PermissionCheckResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Relation string `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"` - Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"` - Allowed bool `protobuf:"varint,3,opt,name=allowed,proto3" json:"allowed,omitempty"` -} - -func (x *PermissionCheckResult) Reset() { - *x = PermissionCheckResult{} - mi := &file_authorizer_v1_types_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *PermissionCheckResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PermissionCheckResult) ProtoMessage() {} - -func (x *PermissionCheckResult) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_types_proto_msgTypes[6] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PermissionCheckResult.ProtoReflect.Descriptor instead. -func (*PermissionCheckResult) Descriptor() ([]byte, []int) { - return file_authorizer_v1_types_proto_rawDescGZIP(), []int{6} -} - -func (x *PermissionCheckResult) GetRelation() string { - if x != nil { - return x.Relation - } - return "" -} - -func (x *PermissionCheckResult) GetObject() string { - if x != nil { - return x.Object - } - return "" -} - -func (x *PermissionCheckResult) GetAllowed() bool { - if x != nil { - return x.Allowed - } - return false -} - -// Meta mirrors the GraphQL Meta type — server feature flags + provider -// availability, returned by the Meta query. -type Meta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` - IsGoogleLoginEnabled bool `protobuf:"varint,3,opt,name=is_google_login_enabled,json=isGoogleLoginEnabled,proto3" json:"is_google_login_enabled,omitempty"` - IsFacebookLoginEnabled bool `protobuf:"varint,4,opt,name=is_facebook_login_enabled,json=isFacebookLoginEnabled,proto3" json:"is_facebook_login_enabled,omitempty"` - IsGithubLoginEnabled bool `protobuf:"varint,5,opt,name=is_github_login_enabled,json=isGithubLoginEnabled,proto3" json:"is_github_login_enabled,omitempty"` - IsLinkedinLoginEnabled bool `protobuf:"varint,6,opt,name=is_linkedin_login_enabled,json=isLinkedinLoginEnabled,proto3" json:"is_linkedin_login_enabled,omitempty"` - IsAppleLoginEnabled bool `protobuf:"varint,7,opt,name=is_apple_login_enabled,json=isAppleLoginEnabled,proto3" json:"is_apple_login_enabled,omitempty"` - IsDiscordLoginEnabled bool `protobuf:"varint,8,opt,name=is_discord_login_enabled,json=isDiscordLoginEnabled,proto3" json:"is_discord_login_enabled,omitempty"` - IsTwitterLoginEnabled bool `protobuf:"varint,9,opt,name=is_twitter_login_enabled,json=isTwitterLoginEnabled,proto3" json:"is_twitter_login_enabled,omitempty"` - IsMicrosoftLoginEnabled bool `protobuf:"varint,10,opt,name=is_microsoft_login_enabled,json=isMicrosoftLoginEnabled,proto3" json:"is_microsoft_login_enabled,omitempty"` - IsTwitchLoginEnabled bool `protobuf:"varint,11,opt,name=is_twitch_login_enabled,json=isTwitchLoginEnabled,proto3" json:"is_twitch_login_enabled,omitempty"` - IsRobloxLoginEnabled bool `protobuf:"varint,12,opt,name=is_roblox_login_enabled,json=isRobloxLoginEnabled,proto3" json:"is_roblox_login_enabled,omitempty"` - IsEmailVerificationEnabled bool `protobuf:"varint,13,opt,name=is_email_verification_enabled,json=isEmailVerificationEnabled,proto3" json:"is_email_verification_enabled,omitempty"` - IsBasicAuthenticationEnabled bool `protobuf:"varint,14,opt,name=is_basic_authentication_enabled,json=isBasicAuthenticationEnabled,proto3" json:"is_basic_authentication_enabled,omitempty"` - IsMagicLinkLoginEnabled bool `protobuf:"varint,15,opt,name=is_magic_link_login_enabled,json=isMagicLinkLoginEnabled,proto3" json:"is_magic_link_login_enabled,omitempty"` - IsSignUpEnabled bool `protobuf:"varint,16,opt,name=is_sign_up_enabled,json=isSignUpEnabled,proto3" json:"is_sign_up_enabled,omitempty"` - IsStrongPasswordEnabled bool `protobuf:"varint,17,opt,name=is_strong_password_enabled,json=isStrongPasswordEnabled,proto3" json:"is_strong_password_enabled,omitempty"` - IsMultiFactorAuthEnabled bool `protobuf:"varint,18,opt,name=is_multi_factor_auth_enabled,json=isMultiFactorAuthEnabled,proto3" json:"is_multi_factor_auth_enabled,omitempty"` - IsMobileBasicAuthenticationEnabled bool `protobuf:"varint,19,opt,name=is_mobile_basic_authentication_enabled,json=isMobileBasicAuthenticationEnabled,proto3" json:"is_mobile_basic_authentication_enabled,omitempty"` - IsPhoneVerificationEnabled bool `protobuf:"varint,20,opt,name=is_phone_verification_enabled,json=isPhoneVerificationEnabled,proto3" json:"is_phone_verification_enabled,omitempty"` - IsOrgDiscoveryEnabled bool `protobuf:"varint,21,opt,name=is_org_discovery_enabled,json=isOrgDiscoveryEnabled,proto3" json:"is_org_discovery_enabled,omitempty"` - IsTotpMfaEnabled bool `protobuf:"varint,22,opt,name=is_totp_mfa_enabled,json=isTotpMfaEnabled,proto3" json:"is_totp_mfa_enabled,omitempty"` - IsEmailOtpMfaEnabled bool `protobuf:"varint,23,opt,name=is_email_otp_mfa_enabled,json=isEmailOtpMfaEnabled,proto3" json:"is_email_otp_mfa_enabled,omitempty"` - IsSmsOtpMfaEnabled bool `protobuf:"varint,24,opt,name=is_sms_otp_mfa_enabled,json=isSmsOtpMfaEnabled,proto3" json:"is_sms_otp_mfa_enabled,omitempty"` - IsWebauthnEnabled bool `protobuf:"varint,25,opt,name=is_webauthn_enabled,json=isWebauthnEnabled,proto3" json:"is_webauthn_enabled,omitempty"` - // Mirrors Meta.is_mfa_enforced in GraphQL. - IsMfaEnforced bool `protobuf:"varint,26,opt,name=is_mfa_enforced,json=isMfaEnforced,proto3" json:"is_mfa_enforced,omitempty"` -} - -func (x *Meta) Reset() { - *x = Meta{} - mi := &file_authorizer_v1_types_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Meta) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Meta) ProtoMessage() {} - -func (x *Meta) ProtoReflect() protoreflect.Message { - mi := &file_authorizer_v1_types_proto_msgTypes[7] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Meta.ProtoReflect.Descriptor instead. -func (*Meta) Descriptor() ([]byte, []int) { - return file_authorizer_v1_types_proto_rawDescGZIP(), []int{7} -} - -func (x *Meta) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -func (x *Meta) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *Meta) GetIsGoogleLoginEnabled() bool { - if x != nil { - return x.IsGoogleLoginEnabled - } - return false -} - -func (x *Meta) GetIsFacebookLoginEnabled() bool { - if x != nil { - return x.IsFacebookLoginEnabled - } - return false -} - -func (x *Meta) GetIsGithubLoginEnabled() bool { - if x != nil { - return x.IsGithubLoginEnabled - } - return false -} - -func (x *Meta) GetIsLinkedinLoginEnabled() bool { - if x != nil { - return x.IsLinkedinLoginEnabled - } - return false -} - -func (x *Meta) GetIsAppleLoginEnabled() bool { - if x != nil { - return x.IsAppleLoginEnabled - } - return false -} - -func (x *Meta) GetIsDiscordLoginEnabled() bool { - if x != nil { - return x.IsDiscordLoginEnabled - } - return false -} - -func (x *Meta) GetIsTwitterLoginEnabled() bool { - if x != nil { - return x.IsTwitterLoginEnabled - } - return false -} - -func (x *Meta) GetIsMicrosoftLoginEnabled() bool { - if x != nil { - return x.IsMicrosoftLoginEnabled - } - return false -} - -func (x *Meta) GetIsTwitchLoginEnabled() bool { - if x != nil { - return x.IsTwitchLoginEnabled - } - return false -} - -func (x *Meta) GetIsRobloxLoginEnabled() bool { - if x != nil { - return x.IsRobloxLoginEnabled - } - return false -} - -func (x *Meta) GetIsEmailVerificationEnabled() bool { - if x != nil { - return x.IsEmailVerificationEnabled - } - return false -} - -func (x *Meta) GetIsBasicAuthenticationEnabled() bool { - if x != nil { - return x.IsBasicAuthenticationEnabled - } - return false -} - -func (x *Meta) GetIsMagicLinkLoginEnabled() bool { - if x != nil { - return x.IsMagicLinkLoginEnabled - } - return false -} - -func (x *Meta) GetIsSignUpEnabled() bool { - if x != nil { - return x.IsSignUpEnabled - } - return false -} - -func (x *Meta) GetIsStrongPasswordEnabled() bool { - if x != nil { - return x.IsStrongPasswordEnabled - } - return false -} - -func (x *Meta) GetIsMultiFactorAuthEnabled() bool { - if x != nil { - return x.IsMultiFactorAuthEnabled - } - return false -} - -func (x *Meta) GetIsMobileBasicAuthenticationEnabled() bool { - if x != nil { - return x.IsMobileBasicAuthenticationEnabled - } - return false -} - -func (x *Meta) GetIsPhoneVerificationEnabled() bool { - if x != nil { - return x.IsPhoneVerificationEnabled - } - return false -} - -func (x *Meta) GetIsOrgDiscoveryEnabled() bool { - if x != nil { - return x.IsOrgDiscoveryEnabled - } - return false -} - -func (x *Meta) GetIsTotpMfaEnabled() bool { - if x != nil { - return x.IsTotpMfaEnabled - } - return false -} - -func (x *Meta) GetIsEmailOtpMfaEnabled() bool { - if x != nil { - return x.IsEmailOtpMfaEnabled - } - return false -} - -func (x *Meta) GetIsSmsOtpMfaEnabled() bool { - if x != nil { - return x.IsSmsOtpMfaEnabled - } - return false -} - -func (x *Meta) GetIsWebauthnEnabled() bool { - if x != nil { - return x.IsWebauthnEnabled - } - return false -} - -func (x *Meta) GetIsMfaEnforced() bool { - if x != nil { - return x.IsMfaEnforced - } - return false -} - -var File_authorizer_v1_types_proto protoreflect.FileDescriptor - -var file_authorizer_v1_types_proto_rawDesc = []byte{ - 0x0a, 0x19, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x1a, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9d, 0x06, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x76, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, - 0x73, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x4d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, - 0x64, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x72, 0x74, - 0x68, 0x64, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x68, 0x6f, - 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x68, 0x6f, 0x6e, - 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, - 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, - 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, - 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3e, 0x0a, 0x1c, 0x69, 0x73, 0x5f, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x69, - 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x41, 0x75, 0x74, 0x68, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x36, 0x0a, 0x18, 0x68, 0x61, - 0x73, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6d, 0x66, 0x61, 0x5f, 0x73, 0x65, - 0x74, 0x75, 0x70, 0x5f, 0x61, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x68, 0x61, - 0x73, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, - 0x41, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x66, 0x61, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x66, 0x61, 0x4c, 0x6f, - 0x63, 0x6b, 0x65, 0x64, 0x41, 0x74, 0x22, 0xd9, 0x06, 0x0a, 0x0c, 0x41, 0x75, 0x74, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x3e, 0x0a, 0x1c, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x73, 0x68, 0x6f, 0x77, - 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x74, 0x70, 0x5f, 0x73, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x53, - 0x68, 0x6f, 0x77, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x4f, 0x74, 0x70, 0x53, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x12, 0x40, 0x0a, 0x1d, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x73, 0x68, 0x6f, 0x77, - 0x5f, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x5f, 0x6f, 0x74, 0x70, 0x5f, 0x73, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, - 0x53, 0x68, 0x6f, 0x77, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x4f, 0x74, 0x70, 0x53, 0x63, 0x72, - 0x65, 0x65, 0x6e, 0x12, 0x35, 0x0a, 0x17, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x73, 0x68, - 0x6f, 0x77, 0x5f, 0x74, 0x6f, 0x74, 0x70, 0x5f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x53, 0x68, 0x6f, 0x77, - 0x54, 0x6f, 0x74, 0x70, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x19, 0x0a, - 0x08, 0x69, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x69, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x72, - 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, - 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x49, 0x6e, 0x12, 0x27, 0x0a, 0x04, - 0x75, 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x1b, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x61, 0x75, 0x74, 0x68, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x14, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x13, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, - 0x6f, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x40, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1a, - 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x20, 0x73, 0x68, - 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x62, 0x61, 0x75, - 0x74, 0x68, 0x6e, 0x5f, 0x6d, 0x66, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x4f, 0x66, 0x66, 0x65, - 0x72, 0x57, 0x65, 0x62, 0x61, 0x75, 0x74, 0x68, 0x6e, 0x4d, 0x66, 0x61, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x12, 0x44, 0x0a, 0x1f, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x6f, 0x66, 0x66, - 0x65, 0x72, 0x5f, 0x77, 0x65, 0x62, 0x61, 0x75, 0x74, 0x68, 0x6e, 0x5f, 0x6d, 0x66, 0x61, 0x5f, - 0x73, 0x65, 0x74, 0x75, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x73, 0x68, 0x6f, - 0x75, 0x6c, 0x64, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x57, 0x65, 0x62, 0x61, 0x75, 0x74, 0x68, 0x6e, - 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x45, 0x0a, 0x20, 0x73, 0x68, 0x6f, 0x75, - 0x6c, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x6f, - 0x74, 0x70, 0x5f, 0x6d, 0x66, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x1b, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x45, - 0x6d, 0x61, 0x69, 0x6c, 0x4f, 0x74, 0x70, 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, - 0x41, 0x0a, 0x1e, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x5f, - 0x73, 0x6d, 0x73, 0x5f, 0x6f, 0x74, 0x70, 0x5f, 0x6d, 0x66, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x75, - 0x70, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x4f, - 0x66, 0x66, 0x65, 0x72, 0x53, 0x6d, 0x73, 0x4f, 0x74, 0x70, 0x4d, 0x66, 0x61, 0x53, 0x65, 0x74, - 0x75, 0x70, 0x22, 0x40, 0x0a, 0x0a, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x46, 0x0a, 0x10, 0x46, 0x67, 0x61, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x57, 0x0a, 0x0d, - 0x46, 0x67, 0x61, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, - 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x14, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x49, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, - 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x67, - 0x61, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x10, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x65, 0x0a, - 0x15, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x65, 0x64, 0x22, 0xa8, 0x0b, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x69, 0x73, 0x5f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x69, - 0x73, 0x5f, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, - 0x69, 0x73, 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x69, 0x73, 0x5f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x47, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x39, 0x0a, - 0x19, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x69, 0x6e, 0x5f, 0x6c, 0x6f, 0x67, - 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x16, 0x69, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x16, 0x69, 0x73, 0x5f, 0x61, - 0x70, 0x70, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x73, 0x41, 0x70, 0x70, 0x6c, - 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, - 0x18, 0x69, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x6c, 0x6f, 0x67, 0x69, - 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x15, 0x69, 0x73, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x69, 0x73, 0x5f, 0x74, 0x77, 0x69, - 0x74, 0x74, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x69, 0x73, 0x54, 0x77, 0x69, 0x74, - 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x3b, 0x0a, 0x1a, 0x69, 0x73, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x5f, - 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x73, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x17, - 0x69, 0x73, 0x5f, 0x74, 0x77, 0x69, 0x74, 0x63, 0x68, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, - 0x73, 0x54, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x69, 0x73, 0x5f, 0x72, 0x6f, 0x62, 0x6c, 0x6f, 0x78, - 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x52, 0x6f, 0x62, 0x6c, 0x6f, 0x78, 0x4c, 0x6f, - 0x67, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x73, - 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x1a, 0x69, 0x73, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x45, 0x0a, - 0x1f, 0x69, 0x73, 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, - 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x69, 0x73, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, - 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x69, 0x73, 0x5f, 0x6d, 0x61, 0x67, 0x69, 0x63, - 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x73, 0x4d, 0x61, 0x67, - 0x69, 0x63, 0x4c, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x69, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x75, 0x70, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, - 0x69, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x70, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x3b, 0x0a, 0x1a, 0x69, 0x73, 0x5f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x73, 0x53, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x1c, - 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, - 0x61, 0x75, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x18, 0x69, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x61, 0x63, 0x74, 0x6f, - 0x72, 0x41, 0x75, 0x74, 0x68, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x52, 0x0a, 0x26, - 0x69, 0x73, 0x5f, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x5f, - 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x22, 0x69, 0x73, - 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x65, - 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x73, 0x5f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, 0x73, 0x50, 0x68, 0x6f, 0x6e, 0x65, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x69, 0x73, 0x5f, 0x6f, 0x72, 0x67, 0x5f, 0x64, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x69, 0x73, 0x4f, 0x72, 0x67, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x13, - 0x69, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x70, 0x5f, 0x6d, 0x66, 0x61, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x54, 0x6f, 0x74, - 0x70, 0x4d, 0x66, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x18, 0x69, - 0x73, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x74, 0x70, 0x5f, 0x6d, 0x66, 0x61, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, - 0x73, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x4f, 0x74, 0x70, 0x4d, 0x66, 0x61, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x16, 0x69, 0x73, 0x5f, 0x73, 0x6d, 0x73, 0x5f, 0x6f, 0x74, - 0x70, 0x5f, 0x6d, 0x66, 0x61, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x18, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x73, 0x53, 0x6d, 0x73, 0x4f, 0x74, 0x70, 0x4d, 0x66, 0x61, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x73, 0x5f, 0x77, 0x65, - 0x62, 0x61, 0x75, 0x74, 0x68, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x19, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x73, 0x57, 0x65, 0x62, 0x61, 0x75, 0x74, 0x68, 0x6e, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x6d, 0x66, - 0x61, 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0d, 0x69, 0x73, 0x4d, 0x66, 0x61, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x42, - 0xc6, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x64, 0x65, 0x76, 0x2f, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2d, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x62, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0d, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x19, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_authorizer_v1_types_proto_rawDescOnce sync.Once - file_authorizer_v1_types_proto_rawDescData = file_authorizer_v1_types_proto_rawDesc -) - -func file_authorizer_v1_types_proto_rawDescGZIP() []byte { - file_authorizer_v1_types_proto_rawDescOnce.Do(func() { - file_authorizer_v1_types_proto_rawDescData = protoimpl.X.CompressGZIP(file_authorizer_v1_types_proto_rawDescData) - }) - return file_authorizer_v1_types_proto_rawDescData -} - -var file_authorizer_v1_types_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_authorizer_v1_types_proto_goTypes = []any{ - (*User)(nil), // 0: authorizer.v1.User - (*AuthResponse)(nil), // 1: authorizer.v1.AuthResponse - (*Permission)(nil), // 2: authorizer.v1.Permission - (*FgaRelationInput)(nil), // 3: authorizer.v1.FgaRelationInput - (*FgaTupleInput)(nil), // 4: authorizer.v1.FgaTupleInput - (*PermissionCheckInput)(nil), // 5: authorizer.v1.PermissionCheckInput - (*PermissionCheckResult)(nil), // 6: authorizer.v1.PermissionCheckResult - (*Meta)(nil), // 7: authorizer.v1.Meta - (*AppData)(nil), // 8: authorizer.v1.AppData -} -var file_authorizer_v1_types_proto_depIdxs = []int32{ - 8, // 0: authorizer.v1.User.app_data:type_name -> authorizer.v1.AppData - 0, // 1: authorizer.v1.AuthResponse.user:type_name -> authorizer.v1.User - 4, // 2: authorizer.v1.PermissionCheckInput.contextual_tuples:type_name -> authorizer.v1.FgaTupleInput - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_authorizer_v1_types_proto_init() } -func file_authorizer_v1_types_proto_init() { - if File_authorizer_v1_types_proto != nil { - return - } - file_authorizer_v1_common_proto_init() - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_authorizer_v1_types_proto_rawDesc, - NumEnums: 0, - NumMessages: 8, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_authorizer_v1_types_proto_goTypes, - DependencyIndexes: file_authorizer_v1_types_proto_depIdxs, - MessageInfos: file_authorizer_v1_types_proto_msgTypes, - }.Build() - File_authorizer_v1_types_proto = out.File - file_authorizer_v1_types_proto_rawDesc = nil - file_authorizer_v1_types_proto_goTypes = nil - file_authorizer_v1_types_proto_depIdxs = nil -} diff --git a/gen/go-client/buf/validate/validate.pb.go b/gen/go-client/buf/validate/validate.pb.go deleted file mode 100644 index 424efa13..00000000 --- a/gen/go-client/buf/validate/validate.pb.go +++ /dev/null @@ -1,11441 +0,0 @@ -// Copyright 2023-2026 Buf Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.35.2 -// protoc (unknown) -// source: buf/validate/validate.proto - -// [Protovalidate](https://protovalidate.com/) is the semantic validation library for Protobuf. -// It provides standard annotations to validate common rules on messages and fields, as well as the ability to use [CEL](https://cel.dev) to write custom rules. -// It's the next generation of [protoc-gen-validate](https://github.com/bufbuild/protoc-gen-validate). -// -// This package provides the options, messages, and enums that power Protovalidate. -// Apply its options to messages, fields, and oneofs in your Protobuf schemas to add validation rules: -// -// ```proto -// message User { -// string id = 1 [(buf.validate.field).string.uuid = true]; -// string first_name = 2 [(buf.validate.field).string.max_len = 64]; -// string last_name = 3 [(buf.validate.field).string.max_len = 64]; -// -// option (buf.validate.message).cel = { -// id: "first_name_requires_last_name" -// message: "last_name must be present if first_name is present" -// expression: "!has(this.first_name) || has(this.last_name)" -// }; -// } -// ``` -// -// These rules are enforced at runtime by language-specific libraries. -// See the [developer quickstart](https://protovalidate.com/quickstart/) to get started, or go directly to the runtime library for your language: -// [Go](https://github.com/bufbuild/protovalidate-go), -// [JavaScript/TypeScript](https://github.com/bufbuild/protovalidate-es), -// [Java](https://github.com/bufbuild/protovalidate-java), -// [Python](https://github.com/bufbuild/protovalidate-python), -// or [C++](https://github.com/bufbuild/protovalidate-cc). - -package validate - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - durationpb "google.golang.org/protobuf/types/known/durationpb" - fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - 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) -) - -// Specifies how `FieldRules.ignore` behaves, depending on the field's value, and -// whether the field tracks presence. -type Ignore int32 - -const ( - // Ignore rules if the field tracks presence and is unset. This is the default - // behavior. - // - // In proto3, only message fields, members of a Protobuf `oneof`, and fields - // with the `optional` label track presence. Consequently, the following fields - // are always validated, whether a value is set or not: - // - // ```proto - // syntax="proto3"; - // - // message RulesApply { - // string email = 1 [ - // (buf.validate.field).string.email = true - // ]; - // int32 age = 2 [ - // (buf.validate.field).int32.gt = 0 - // ]; - // repeated string labels = 3 [ - // (buf.validate.field).repeated.min_items = 1 - // ]; - // } - // - // ``` - // - // In contrast, the following fields track presence, and are only validated if - // a value is set: - // - // ```proto - // syntax="proto3"; - // - // message RulesApplyIfSet { - // optional string email = 1 [ - // (buf.validate.field).string.email = true - // ]; - // oneof ref { - // string reference = 2 [ - // (buf.validate.field).string.uuid = true - // ]; - // string name = 3 [ - // (buf.validate.field).string.min_len = 4 - // ]; - // } - // SomeMessage msg = 4 [ - // (buf.validate.field).cel = {/* ... */} - // ]; - // } - // - // ``` - // - // To ensure that such a field is set, add the `required` rule. - // - // To learn which fields track presence, see the - // [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat). - Ignore_IGNORE_UNSPECIFIED Ignore = 0 - // Ignore rules if the field is unset, or set to the zero value. - // - // The zero value depends on the field type: - // - For strings, the zero value is the empty string. - // - For bytes, the zero value is empty bytes. - // - For bool, the zero value is false. - // - For numeric types, the zero value is zero. - // - For enums, the zero value is the first defined enum value. - // - For repeated fields, the zero is an empty list. - // - For map fields, the zero is an empty map. - // - For message fields, absence of the message (typically a null-value) is considered zero value. - // - // For fields that track presence (e.g. adding the `optional` label in proto3), - // this a no-op and behavior is the same as the default `IGNORE_UNSPECIFIED`. - Ignore_IGNORE_IF_ZERO_VALUE Ignore = 1 - // Always ignore rules, including the `required` rule. - // - // This is useful for ignoring the rules of a referenced message, or to - // temporarily ignore rules during development. - // - // ```proto - // - // message MyMessage { - // // The field's rules will always be ignored, including any validations - // // on value's fields. - // MyOtherMessage value = 1 [ - // (buf.validate.field).ignore = IGNORE_ALWAYS - // ]; - // } - // - // ``` - Ignore_IGNORE_ALWAYS Ignore = 3 -) - -// Enum value maps for Ignore. -var ( - Ignore_name = map[int32]string{ - 0: "IGNORE_UNSPECIFIED", - 1: "IGNORE_IF_ZERO_VALUE", - 3: "IGNORE_ALWAYS", - } - Ignore_value = map[string]int32{ - "IGNORE_UNSPECIFIED": 0, - "IGNORE_IF_ZERO_VALUE": 1, - "IGNORE_ALWAYS": 3, - } -) - -func (x Ignore) Enum() *Ignore { - p := new(Ignore) - *p = x - return p -} - -func (x Ignore) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Ignore) Descriptor() protoreflect.EnumDescriptor { - return file_buf_validate_validate_proto_enumTypes[0].Descriptor() -} - -func (Ignore) Type() protoreflect.EnumType { - return &file_buf_validate_validate_proto_enumTypes[0] -} - -func (x Ignore) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *Ignore) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = Ignore(num) - return nil -} - -// Deprecated: Use Ignore.Descriptor instead. -func (Ignore) EnumDescriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{0} -} - -// KnownRegex contains some well-known patterns. -type KnownRegex int32 - -const ( - KnownRegex_KNOWN_REGEX_UNSPECIFIED KnownRegex = 0 - // HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2). - KnownRegex_KNOWN_REGEX_HTTP_HEADER_NAME KnownRegex = 1 - // HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4). - KnownRegex_KNOWN_REGEX_HTTP_HEADER_VALUE KnownRegex = 2 -) - -// Enum value maps for KnownRegex. -var ( - KnownRegex_name = map[int32]string{ - 0: "KNOWN_REGEX_UNSPECIFIED", - 1: "KNOWN_REGEX_HTTP_HEADER_NAME", - 2: "KNOWN_REGEX_HTTP_HEADER_VALUE", - } - KnownRegex_value = map[string]int32{ - "KNOWN_REGEX_UNSPECIFIED": 0, - "KNOWN_REGEX_HTTP_HEADER_NAME": 1, - "KNOWN_REGEX_HTTP_HEADER_VALUE": 2, - } -) - -func (x KnownRegex) Enum() *KnownRegex { - p := new(KnownRegex) - *p = x - return p -} - -func (x KnownRegex) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (KnownRegex) Descriptor() protoreflect.EnumDescriptor { - return file_buf_validate_validate_proto_enumTypes[1].Descriptor() -} - -func (KnownRegex) Type() protoreflect.EnumType { - return &file_buf_validate_validate_proto_enumTypes[1] -} - -func (x KnownRegex) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *KnownRegex) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = KnownRegex(num) - return nil -} - -// Deprecated: Use KnownRegex.Descriptor instead. -func (KnownRegex) EnumDescriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{1} -} - -// `Rule` represents a validation rule written in the Common Expression -// Language (CEL) syntax. Each Rule includes a unique identifier, an -// optional error message, and the CEL expression to evaluate. For more -// information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/). -// -// ```proto -// -// message Foo { -// option (buf.validate.message).cel = { -// id: "foo.bar" -// message: "bar must be greater than 0" -// expression: "this.bar > 0" -// }; -// int32 bar = 1; -// } -// -// ``` -type Rule struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // `id` is a string that serves as a machine-readable name for this Rule. - // It should be unique within its scope, which could be either a message or a field. - Id *string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` - // `message` is an optional field that provides a human-readable error message - // for this Rule when the CEL expression evaluates to false. If a - // non-empty message is provided, any strings resulting from the CEL - // expression evaluation are ignored. - Message *string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - // `expression` is the actual CEL expression that will be evaluated for - // validation. This string must resolve to either a boolean or a string - // value. If the expression evaluates to false or a non-empty string, the - // validation is considered failed, and the message is rejected. - Expression *string `protobuf:"bytes,3,opt,name=expression" json:"expression,omitempty"` -} - -func (x *Rule) Reset() { - *x = Rule{} - mi := &file_buf_validate_validate_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Rule) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Rule) ProtoMessage() {} - -func (x *Rule) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Rule.ProtoReflect.Descriptor instead. -func (*Rule) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{0} -} - -func (x *Rule) GetId() string { - if x != nil && x.Id != nil { - return *x.Id - } - return "" -} - -func (x *Rule) GetMessage() string { - if x != nil && x.Message != nil { - return *x.Message - } - return "" -} - -func (x *Rule) GetExpression() string { - if x != nil && x.Expression != nil { - return *x.Expression - } - return "" -} - -// MessageRules represents validation rules that are applied to the entire message. -// It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules. -type MessageRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation - // rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax. - // - // This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for - // simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will - // be same as the `expression`. - // - // For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/). - // - // ```proto - // - // message MyMessage { - // // The field `foo` must be greater than 42. - // option (buf.validate.message).cel_expression = "this.foo > 42"; - // // The field `foo` must be less than 84. - // option (buf.validate.message).cel_expression = "this.foo < 84"; - // optional int32 foo = 1; - // } - // - // ``` - CelExpression []string `protobuf:"bytes,5,rep,name=cel_expression,json=celExpression" json:"cel_expression,omitempty"` - // `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message. - // These rules are written in Common Expression Language (CEL) syntax. For more information, - // [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/). - // - // ```proto - // - // message MyMessage { - // // The field `foo` must be greater than 42. - // option (buf.validate.message).cel = { - // id: "my_message.value", - // message: "must be greater than 42", - // expression: "this.foo > 42", - // }; - // optional int32 foo = 1; - // } - // - // ``` - Cel []*Rule `protobuf:"bytes,3,rep,name=cel" json:"cel,omitempty"` - // `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields - // of which at most one can be present. If `required` is also specified, then exactly one - // of the specified fields _must_ be present. - // - // This will enforce oneof-like constraints with a few features not provided by - // actual Protobuf oneof declarations: - // 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof, - // only scalar fields are allowed. - // 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member - // fields have explicit presence. This means that, for the purpose of determining - // how many fields are set, explicitly setting such a field to its zero value is - // effectively the same as not setting it at all. - // 3. This will always generate validation errors for a message unmarshalled from - // serialized data that sets more than one field. With a Protobuf oneof, when - // multiple fields are present in the serialized form, earlier values are usually - // silently ignored when unmarshalling, with only the last field being set when - // unmarshalling completes. - // - // Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means - // only the field that is set will be validated and the unset fields are not validated according to the field rules. - // This behavior can be overridden by setting `ignore` against a field. - // - // ```proto - // - // message MyMessage { - // // Only one of `field1` or `field2` _can_ be present in this message. - // option (buf.validate.message).oneof = { fields: ["field1", "field2"] }; - // // Exactly one of `field3` or `field4` _must_ be present in this message. - // option (buf.validate.message).oneof = { fields: ["field3", "field4"], required: true }; - // string field1 = 1; - // bytes field2 = 2; - // bool field3 = 3; - // int32 field4 = 4; - // } - // - // ``` - Oneof []*MessageOneofRule `protobuf:"bytes,4,rep,name=oneof" json:"oneof,omitempty"` -} - -func (x *MessageRules) Reset() { - *x = MessageRules{} - mi := &file_buf_validate_validate_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *MessageRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MessageRules) ProtoMessage() {} - -func (x *MessageRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MessageRules.ProtoReflect.Descriptor instead. -func (*MessageRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{1} -} - -func (x *MessageRules) GetCelExpression() []string { - if x != nil { - return x.CelExpression - } - return nil -} - -func (x *MessageRules) GetCel() []*Rule { - if x != nil { - return x.Cel - } - return nil -} - -func (x *MessageRules) GetOneof() []*MessageOneofRule { - if x != nil { - return x.Oneof - } - return nil -} - -type MessageOneofRule struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A list of field names to include in the oneof. All field names must be - // defined in the message. At least one field must be specified, and - // duplicates are not permitted. - Fields []string `protobuf:"bytes,1,rep,name=fields" json:"fields,omitempty"` - // If true, one of the fields specified _must_ be set. - Required *bool `protobuf:"varint,2,opt,name=required" json:"required,omitempty"` -} - -func (x *MessageOneofRule) Reset() { - *x = MessageOneofRule{} - mi := &file_buf_validate_validate_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *MessageOneofRule) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MessageOneofRule) ProtoMessage() {} - -func (x *MessageOneofRule) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[2] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MessageOneofRule.ProtoReflect.Descriptor instead. -func (*MessageOneofRule) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{2} -} - -func (x *MessageOneofRule) GetFields() []string { - if x != nil { - return x.Fields - } - return nil -} - -func (x *MessageOneofRule) GetRequired() bool { - if x != nil && x.Required != nil { - return *x.Required - } - return false -} - -// The `OneofRules` message type enables you to manage rules for -// oneof fields in your protobuf messages. -type OneofRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // If `required` is true, exactly one field of the oneof must be set. A - // validation error is returned if no fields in the oneof are set. Further rules - // should be placed on the fields themselves to ensure they are valid values, - // such as `min_len` or `gt`. - // - // ```proto - // - // message MyMessage { - // oneof value { - // // Either `a` or `b` must be set. If `a` is set, it must also be - // // non-empty; whereas if `b` is set, it can still be an empty string. - // option (buf.validate.oneof).required = true; - // string a = 1 [(buf.validate.field).string.min_len = 1]; - // string b = 2; - // } - // } - // - // ``` - Required *bool `protobuf:"varint,1,opt,name=required" json:"required,omitempty"` -} - -func (x *OneofRules) Reset() { - *x = OneofRules{} - mi := &file_buf_validate_validate_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *OneofRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OneofRules) ProtoMessage() {} - -func (x *OneofRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[3] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OneofRules.ProtoReflect.Descriptor instead. -func (*OneofRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{3} -} - -func (x *OneofRules) GetRequired() bool { - if x != nil && x.Required != nil { - return *x.Required - } - return false -} - -// FieldRules encapsulates the rules for each type of field. Depending on -// the field, the correct set should be used to ensure proper validations. -type FieldRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation - // rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax. - // - // This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for - // simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will - // be same as the `expression`. - // - // For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/). - // - // ```proto - // - // message MyMessage { - // // The field `value` must be greater than 42. - // optional int32 value = 1 [(buf.validate.field).cel_expression = "this > 42"]; - // } - // - // ``` - CelExpression []string `protobuf:"bytes,29,rep,name=cel_expression,json=celExpression" json:"cel_expression,omitempty"` - // `cel` is a repeated field used to represent a textual expression - // in the Common Expression Language (CEL) syntax. For more information, - // [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/). - // - // ```proto - // - // message MyMessage { - // // The field `value` must be greater than 42. - // optional int32 value = 1 [(buf.validate.field).cel = { - // id: "my_message.value", - // message: "must be greater than 42", - // expression: "this > 42", - // }]; - // } - // - // ``` - Cel []*Rule `protobuf:"bytes,23,rep,name=cel" json:"cel,omitempty"` - // If `required` is true, the field must be set. A validation error is returned - // if the field is not set. - // - // ```proto - // syntax="proto3"; - // - // message FieldsWithPresence { - // // Requires any string to be set, including the empty string. - // optional string link = 1 [ - // (buf.validate.field).required = true - // ]; - // // Requires true or false to be set. - // optional bool disabled = 2 [ - // (buf.validate.field).required = true - // ]; - // // Requires a message to be set, including the empty message. - // SomeMessage msg = 4 [ - // (buf.validate.field).required = true - // ]; - // } - // - // ``` - // - // All fields in the example above track presence. By default, Protovalidate - // ignores rules on those fields if no value is set. `required` ensures that - // the fields are set and valid. - // - // Fields that don't track presence are always validated by Protovalidate, - // whether they are set or not. It is not necessary to add `required`. It - // can be added to indicate that the field cannot be the zero value. - // - // ```proto - // syntax="proto3"; - // - // message FieldsWithoutPresence { - // // `string.email` always applies, even to an empty string. - // string link = 1 [ - // (buf.validate.field).string.email = true - // ]; - // // `repeated.min_items` always applies, even to an empty list. - // repeated string labels = 2 [ - // (buf.validate.field).repeated.min_items = 1 - // ]; - // // `required`, for fields that don't track presence, indicates - // // the value of the field can't be the zero value. - // int32 zero_value_not_allowed = 3 [ - // (buf.validate.field).required = true - // ]; - // } - // - // ``` - // - // To learn which fields track presence, see the - // [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat). - // - // Note: While field rules can be applied to repeated items, map keys, and map - // values, the elements are always considered to be set. Consequently, - // specifying `repeated.items.required` is redundant. - Required *bool `protobuf:"varint,25,opt,name=required" json:"required,omitempty"` - // Ignore validation rules on the field if its value matches the specified - // criteria. See the `Ignore` enum for details. - // - // ```proto - // - // message UpdateRequest { - // // The uri rule only applies if the field is not an empty string. - // string url = 1 [ - // (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE, - // (buf.validate.field).string.uri = true - // ]; - // } - // - // ``` - Ignore *Ignore `protobuf:"varint,27,opt,name=ignore,enum=buf.validate.Ignore" json:"ignore,omitempty"` - // Types that are assignable to Type: - // - // *FieldRules_Float - // *FieldRules_Double - // *FieldRules_Int32 - // *FieldRules_Int64 - // *FieldRules_Uint32 - // *FieldRules_Uint64 - // *FieldRules_Sint32 - // *FieldRules_Sint64 - // *FieldRules_Fixed32 - // *FieldRules_Fixed64 - // *FieldRules_Sfixed32 - // *FieldRules_Sfixed64 - // *FieldRules_Bool - // *FieldRules_String_ - // *FieldRules_Bytes - // *FieldRules_Enum - // *FieldRules_Repeated - // *FieldRules_Map - // *FieldRules_Any - // *FieldRules_Duration - // *FieldRules_FieldMask - // *FieldRules_Timestamp - Type isFieldRules_Type `protobuf_oneof:"type"` -} - -func (x *FieldRules) Reset() { - *x = FieldRules{} - mi := &file_buf_validate_validate_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FieldRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FieldRules) ProtoMessage() {} - -func (x *FieldRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[4] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FieldRules.ProtoReflect.Descriptor instead. -func (*FieldRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{4} -} - -func (x *FieldRules) GetCelExpression() []string { - if x != nil { - return x.CelExpression - } - return nil -} - -func (x *FieldRules) GetCel() []*Rule { - if x != nil { - return x.Cel - } - return nil -} - -func (x *FieldRules) GetRequired() bool { - if x != nil && x.Required != nil { - return *x.Required - } - return false -} - -func (x *FieldRules) GetIgnore() Ignore { - if x != nil && x.Ignore != nil { - return *x.Ignore - } - return Ignore_IGNORE_UNSPECIFIED -} - -func (m *FieldRules) GetType() isFieldRules_Type { - if m != nil { - return m.Type - } - return nil -} - -func (x *FieldRules) GetFloat() *FloatRules { - if x, ok := x.GetType().(*FieldRules_Float); ok { - return x.Float - } - return nil -} - -func (x *FieldRules) GetDouble() *DoubleRules { - if x, ok := x.GetType().(*FieldRules_Double); ok { - return x.Double - } - return nil -} - -func (x *FieldRules) GetInt32() *Int32Rules { - if x, ok := x.GetType().(*FieldRules_Int32); ok { - return x.Int32 - } - return nil -} - -func (x *FieldRules) GetInt64() *Int64Rules { - if x, ok := x.GetType().(*FieldRules_Int64); ok { - return x.Int64 - } - return nil -} - -func (x *FieldRules) GetUint32() *UInt32Rules { - if x, ok := x.GetType().(*FieldRules_Uint32); ok { - return x.Uint32 - } - return nil -} - -func (x *FieldRules) GetUint64() *UInt64Rules { - if x, ok := x.GetType().(*FieldRules_Uint64); ok { - return x.Uint64 - } - return nil -} - -func (x *FieldRules) GetSint32() *SInt32Rules { - if x, ok := x.GetType().(*FieldRules_Sint32); ok { - return x.Sint32 - } - return nil -} - -func (x *FieldRules) GetSint64() *SInt64Rules { - if x, ok := x.GetType().(*FieldRules_Sint64); ok { - return x.Sint64 - } - return nil -} - -func (x *FieldRules) GetFixed32() *Fixed32Rules { - if x, ok := x.GetType().(*FieldRules_Fixed32); ok { - return x.Fixed32 - } - return nil -} - -func (x *FieldRules) GetFixed64() *Fixed64Rules { - if x, ok := x.GetType().(*FieldRules_Fixed64); ok { - return x.Fixed64 - } - return nil -} - -func (x *FieldRules) GetSfixed32() *SFixed32Rules { - if x, ok := x.GetType().(*FieldRules_Sfixed32); ok { - return x.Sfixed32 - } - return nil -} - -func (x *FieldRules) GetSfixed64() *SFixed64Rules { - if x, ok := x.GetType().(*FieldRules_Sfixed64); ok { - return x.Sfixed64 - } - return nil -} - -func (x *FieldRules) GetBool() *BoolRules { - if x, ok := x.GetType().(*FieldRules_Bool); ok { - return x.Bool - } - return nil -} - -func (x *FieldRules) GetString_() *StringRules { - if x, ok := x.GetType().(*FieldRules_String_); ok { - return x.String_ - } - return nil -} - -func (x *FieldRules) GetBytes() *BytesRules { - if x, ok := x.GetType().(*FieldRules_Bytes); ok { - return x.Bytes - } - return nil -} - -func (x *FieldRules) GetEnum() *EnumRules { - if x, ok := x.GetType().(*FieldRules_Enum); ok { - return x.Enum - } - return nil -} - -func (x *FieldRules) GetRepeated() *RepeatedRules { - if x, ok := x.GetType().(*FieldRules_Repeated); ok { - return x.Repeated - } - return nil -} - -func (x *FieldRules) GetMap() *MapRules { - if x, ok := x.GetType().(*FieldRules_Map); ok { - return x.Map - } - return nil -} - -func (x *FieldRules) GetAny() *AnyRules { - if x, ok := x.GetType().(*FieldRules_Any); ok { - return x.Any - } - return nil -} - -func (x *FieldRules) GetDuration() *DurationRules { - if x, ok := x.GetType().(*FieldRules_Duration); ok { - return x.Duration - } - return nil -} - -func (x *FieldRules) GetFieldMask() *FieldMaskRules { - if x, ok := x.GetType().(*FieldRules_FieldMask); ok { - return x.FieldMask - } - return nil -} - -func (x *FieldRules) GetTimestamp() *TimestampRules { - if x, ok := x.GetType().(*FieldRules_Timestamp); ok { - return x.Timestamp - } - return nil -} - -type isFieldRules_Type interface { - isFieldRules_Type() -} - -type FieldRules_Float struct { - // Scalar Field Types - Float *FloatRules `protobuf:"bytes,1,opt,name=float,oneof"` -} - -type FieldRules_Double struct { - Double *DoubleRules `protobuf:"bytes,2,opt,name=double,oneof"` -} - -type FieldRules_Int32 struct { - Int32 *Int32Rules `protobuf:"bytes,3,opt,name=int32,oneof"` -} - -type FieldRules_Int64 struct { - Int64 *Int64Rules `protobuf:"bytes,4,opt,name=int64,oneof"` -} - -type FieldRules_Uint32 struct { - Uint32 *UInt32Rules `protobuf:"bytes,5,opt,name=uint32,oneof"` -} - -type FieldRules_Uint64 struct { - Uint64 *UInt64Rules `protobuf:"bytes,6,opt,name=uint64,oneof"` -} - -type FieldRules_Sint32 struct { - Sint32 *SInt32Rules `protobuf:"bytes,7,opt,name=sint32,oneof"` -} - -type FieldRules_Sint64 struct { - Sint64 *SInt64Rules `protobuf:"bytes,8,opt,name=sint64,oneof"` -} - -type FieldRules_Fixed32 struct { - Fixed32 *Fixed32Rules `protobuf:"bytes,9,opt,name=fixed32,oneof"` -} - -type FieldRules_Fixed64 struct { - Fixed64 *Fixed64Rules `protobuf:"bytes,10,opt,name=fixed64,oneof"` -} - -type FieldRules_Sfixed32 struct { - Sfixed32 *SFixed32Rules `protobuf:"bytes,11,opt,name=sfixed32,oneof"` -} - -type FieldRules_Sfixed64 struct { - Sfixed64 *SFixed64Rules `protobuf:"bytes,12,opt,name=sfixed64,oneof"` -} - -type FieldRules_Bool struct { - Bool *BoolRules `protobuf:"bytes,13,opt,name=bool,oneof"` -} - -type FieldRules_String_ struct { - String_ *StringRules `protobuf:"bytes,14,opt,name=string,oneof"` -} - -type FieldRules_Bytes struct { - Bytes *BytesRules `protobuf:"bytes,15,opt,name=bytes,oneof"` -} - -type FieldRules_Enum struct { - // Complex Field Types - Enum *EnumRules `protobuf:"bytes,16,opt,name=enum,oneof"` -} - -type FieldRules_Repeated struct { - Repeated *RepeatedRules `protobuf:"bytes,18,opt,name=repeated,oneof"` -} - -type FieldRules_Map struct { - Map *MapRules `protobuf:"bytes,19,opt,name=map,oneof"` -} - -type FieldRules_Any struct { - // Well-Known Field Types - Any *AnyRules `protobuf:"bytes,20,opt,name=any,oneof"` -} - -type FieldRules_Duration struct { - Duration *DurationRules `protobuf:"bytes,21,opt,name=duration,oneof"` -} - -type FieldRules_FieldMask struct { - FieldMask *FieldMaskRules `protobuf:"bytes,28,opt,name=field_mask,json=fieldMask,oneof"` -} - -type FieldRules_Timestamp struct { - Timestamp *TimestampRules `protobuf:"bytes,22,opt,name=timestamp,oneof"` -} - -func (*FieldRules_Float) isFieldRules_Type() {} - -func (*FieldRules_Double) isFieldRules_Type() {} - -func (*FieldRules_Int32) isFieldRules_Type() {} - -func (*FieldRules_Int64) isFieldRules_Type() {} - -func (*FieldRules_Uint32) isFieldRules_Type() {} - -func (*FieldRules_Uint64) isFieldRules_Type() {} - -func (*FieldRules_Sint32) isFieldRules_Type() {} - -func (*FieldRules_Sint64) isFieldRules_Type() {} - -func (*FieldRules_Fixed32) isFieldRules_Type() {} - -func (*FieldRules_Fixed64) isFieldRules_Type() {} - -func (*FieldRules_Sfixed32) isFieldRules_Type() {} - -func (*FieldRules_Sfixed64) isFieldRules_Type() {} - -func (*FieldRules_Bool) isFieldRules_Type() {} - -func (*FieldRules_String_) isFieldRules_Type() {} - -func (*FieldRules_Bytes) isFieldRules_Type() {} - -func (*FieldRules_Enum) isFieldRules_Type() {} - -func (*FieldRules_Repeated) isFieldRules_Type() {} - -func (*FieldRules_Map) isFieldRules_Type() {} - -func (*FieldRules_Any) isFieldRules_Type() {} - -func (*FieldRules_Duration) isFieldRules_Type() {} - -func (*FieldRules_FieldMask) isFieldRules_Type() {} - -func (*FieldRules_Timestamp) isFieldRules_Type() {} - -// PredefinedRules are custom rules that can be re-used with -// multiple fields. -type PredefinedRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // `cel` is a repeated field used to represent a textual expression - // in the Common Expression Language (CEL) syntax. For more information, - // [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/). - // - // ```proto - // - // message MyMessage { - // // The field `value` must be greater than 42. - // optional int32 value = 1 [(buf.validate.predefined).cel = { - // id: "my_message.value", - // message: "must be greater than 42", - // expression: "this > 42", - // }]; - // } - // - // ``` - Cel []*Rule `protobuf:"bytes,1,rep,name=cel" json:"cel,omitempty"` -} - -func (x *PredefinedRules) Reset() { - *x = PredefinedRules{} - mi := &file_buf_validate_validate_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *PredefinedRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PredefinedRules) ProtoMessage() {} - -func (x *PredefinedRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[5] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PredefinedRules.ProtoReflect.Descriptor instead. -func (*PredefinedRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{5} -} - -func (x *PredefinedRules) GetCel() []*Rule { - if x != nil { - return x.Cel - } - return nil -} - -// FloatRules describes the rules applied to `float` values. These -// rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type. -type FloatRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyFloat { - // // value must equal 42.0 - // float value = 1 [(buf.validate.field).float.const = 42.0]; - // } - // - // ``` - Const *float32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *FloatRules_Lt - // *FloatRules_Lte - LessThan isFloatRules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *FloatRules_Gt - // *FloatRules_Gte - GreaterThan isFloatRules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message - // is generated. - // - // ```proto - // - // message MyFloat { - // // must be in list [1.0, 2.0, 3.0] - // float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }]; - // } - // - // ``` - In []float32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error - // message is generated. - // - // ```proto - // - // message MyFloat { - // // value must not be in list [1.0, 2.0, 3.0] - // float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }]; - // } - // - // ``` - NotIn []float32 `protobuf:"fixed32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `finite` requires the field value to be finite. If the field value is - // infinite or NaN, an error message is generated. - Finite *bool `protobuf:"varint,8,opt,name=finite" json:"finite,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyFloat { - // float value = 1 [ - // (buf.validate.field).float.example = 1.0, - // (buf.validate.field).float.example = inf - // ]; - // } - // - // ``` - Example []float32 `protobuf:"fixed32,9,rep,name=example" json:"example,omitempty"` -} - -func (x *FloatRules) Reset() { - *x = FloatRules{} - mi := &file_buf_validate_validate_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FloatRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FloatRules) ProtoMessage() {} - -func (x *FloatRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[6] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FloatRules.ProtoReflect.Descriptor instead. -func (*FloatRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{6} -} - -func (x *FloatRules) GetConst() float32 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *FloatRules) GetLessThan() isFloatRules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *FloatRules) GetLt() float32 { - if x, ok := x.GetLessThan().(*FloatRules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *FloatRules) GetLte() float32 { - if x, ok := x.GetLessThan().(*FloatRules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *FloatRules) GetGreaterThan() isFloatRules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *FloatRules) GetGt() float32 { - if x, ok := x.GetGreaterThan().(*FloatRules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *FloatRules) GetGte() float32 { - if x, ok := x.GetGreaterThan().(*FloatRules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *FloatRules) GetIn() []float32 { - if x != nil { - return x.In - } - return nil -} - -func (x *FloatRules) GetNotIn() []float32 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *FloatRules) GetFinite() bool { - if x != nil && x.Finite != nil { - return *x.Finite - } - return false -} - -func (x *FloatRules) GetExample() []float32 { - if x != nil { - return x.Example - } - return nil -} - -type isFloatRules_LessThan interface { - isFloatRules_LessThan() -} - -type FloatRules_Lt struct { - // `lt` requires the field value to be less than the specified value (field < - // value). If the field value is equal to or greater than the specified value, - // an error message is generated. - // - // ```proto - // - // message MyFloat { - // // must be less than 10.0 - // float value = 1 [(buf.validate.field).float.lt = 10.0]; - // } - // - // ``` - Lt float32 `protobuf:"fixed32,2,opt,name=lt,oneof"` -} - -type FloatRules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified - // value (field <= value). If the field value is greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MyFloat { - // // must be less than or equal to 10.0 - // float value = 1 [(buf.validate.field).float.lte = 10.0]; - // } - // - // ``` - Lte float32 `protobuf:"fixed32,3,opt,name=lte,oneof"` -} - -func (*FloatRules_Lt) isFloatRules_LessThan() {} - -func (*FloatRules_Lte) isFloatRules_LessThan() {} - -type isFloatRules_GreaterThan interface { - isFloatRules_GreaterThan() -} - -type FloatRules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyFloat { - // // must be greater than 5.0 [float.gt] - // float value = 1 [(buf.validate.field).float.gt = 5.0]; - // - // // must be greater than 5 and less than 10.0 [float.gt_lt] - // float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }]; - // - // // must be greater than 10 or less than 5.0 [float.gt_lt_exclusive] - // float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }]; - // } - // - // ``` - Gt float32 `protobuf:"fixed32,4,opt,name=gt,oneof"` -} - -type FloatRules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified - // value (exclusive). If the value of `gte` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyFloat { - // // must be greater than or equal to 5.0 [float.gte] - // float value = 1 [(buf.validate.field).float.gte = 5.0]; - // - // // must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt] - // float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }]; - // - // // must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive] - // float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }]; - // } - // - // ``` - Gte float32 `protobuf:"fixed32,5,opt,name=gte,oneof"` -} - -func (*FloatRules_Gt) isFloatRules_GreaterThan() {} - -func (*FloatRules_Gte) isFloatRules_GreaterThan() {} - -// DoubleRules describes the rules applied to `double` values. These -// rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type. -type DoubleRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyDouble { - // // value must equal 42.0 - // double value = 1 [(buf.validate.field).double.const = 42.0]; - // } - // - // ``` - Const *float64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *DoubleRules_Lt - // *DoubleRules_Lte - LessThan isDoubleRules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *DoubleRules_Gt - // *DoubleRules_Gte - GreaterThan isDoubleRules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message is - // generated. - // - // ```proto - // - // message MyDouble { - // // must be in list [1.0, 2.0, 3.0] - // double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }]; - // } - // - // ``` - In []float64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error - // message is generated. - // - // ```proto - // - // message MyDouble { - // // value must not be in list [1.0, 2.0, 3.0] - // double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }]; - // } - // - // ``` - NotIn []float64 `protobuf:"fixed64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `finite` requires the field value to be finite. If the field value is - // infinite or NaN, an error message is generated. - Finite *bool `protobuf:"varint,8,opt,name=finite" json:"finite,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyDouble { - // double value = 1 [ - // (buf.validate.field).double.example = 1.0, - // (buf.validate.field).double.example = inf - // ]; - // } - // - // ``` - Example []float64 `protobuf:"fixed64,9,rep,name=example" json:"example,omitempty"` -} - -func (x *DoubleRules) Reset() { - *x = DoubleRules{} - mi := &file_buf_validate_validate_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DoubleRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DoubleRules) ProtoMessage() {} - -func (x *DoubleRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[7] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DoubleRules.ProtoReflect.Descriptor instead. -func (*DoubleRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{7} -} - -func (x *DoubleRules) GetConst() float64 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *DoubleRules) GetLessThan() isDoubleRules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *DoubleRules) GetLt() float64 { - if x, ok := x.GetLessThan().(*DoubleRules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *DoubleRules) GetLte() float64 { - if x, ok := x.GetLessThan().(*DoubleRules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *DoubleRules) GetGreaterThan() isDoubleRules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *DoubleRules) GetGt() float64 { - if x, ok := x.GetGreaterThan().(*DoubleRules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *DoubleRules) GetGte() float64 { - if x, ok := x.GetGreaterThan().(*DoubleRules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *DoubleRules) GetIn() []float64 { - if x != nil { - return x.In - } - return nil -} - -func (x *DoubleRules) GetNotIn() []float64 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *DoubleRules) GetFinite() bool { - if x != nil && x.Finite != nil { - return *x.Finite - } - return false -} - -func (x *DoubleRules) GetExample() []float64 { - if x != nil { - return x.Example - } - return nil -} - -type isDoubleRules_LessThan interface { - isDoubleRules_LessThan() -} - -type DoubleRules_Lt struct { - // `lt` requires the field value to be less than the specified value (field < - // value). If the field value is equal to or greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MyDouble { - // // must be less than 10.0 - // double value = 1 [(buf.validate.field).double.lt = 10.0]; - // } - // - // ``` - Lt float64 `protobuf:"fixed64,2,opt,name=lt,oneof"` -} - -type DoubleRules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified value - // (field <= value). If the field value is greater than the specified value, - // an error message is generated. - // - // ```proto - // - // message MyDouble { - // // must be less than or equal to 10.0 - // double value = 1 [(buf.validate.field).double.lte = 10.0]; - // } - // - // ``` - Lte float64 `protobuf:"fixed64,3,opt,name=lte,oneof"` -} - -func (*DoubleRules_Lt) isDoubleRules_LessThan() {} - -func (*DoubleRules_Lte) isDoubleRules_LessThan() {} - -type isDoubleRules_GreaterThan interface { - isDoubleRules_GreaterThan() -} - -type DoubleRules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`, - // the range is reversed, and the field value must be outside the specified - // range. If the field value doesn't meet the required conditions, an error - // message is generated. - // - // ```proto - // - // message MyDouble { - // // must be greater than 5.0 [double.gt] - // double value = 1 [(buf.validate.field).double.gt = 5.0]; - // - // // must be greater than 5 and less than 10.0 [double.gt_lt] - // double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }]; - // - // // must be greater than 10 or less than 5.0 [double.gt_lt_exclusive] - // double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }]; - // } - // - // ``` - Gt float64 `protobuf:"fixed64,4,opt,name=gt,oneof"` -} - -type DoubleRules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified - // value (exclusive). If the value of `gte` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyDouble { - // // must be greater than or equal to 5.0 [double.gte] - // double value = 1 [(buf.validate.field).double.gte = 5.0]; - // - // // must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt] - // double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }]; - // - // // must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive] - // double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }]; - // } - // - // ``` - Gte float64 `protobuf:"fixed64,5,opt,name=gte,oneof"` -} - -func (*DoubleRules_Gt) isDoubleRules_GreaterThan() {} - -func (*DoubleRules_Gte) isDoubleRules_GreaterThan() {} - -// Int32Rules describes the rules applied to `int32` values. These -// rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type. -type Int32Rules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyInt32 { - // // value must equal 42 - // int32 value = 1 [(buf.validate.field).int32.const = 42]; - // } - // - // ``` - Const *int32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *Int32Rules_Lt - // *Int32Rules_Lte - LessThan isInt32Rules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *Int32Rules_Gt - // *Int32Rules_Gte - GreaterThan isInt32Rules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message is - // generated. - // - // ```proto - // - // message MyInt32 { - // // must be in list [1, 2, 3] - // int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }]; - // } - // - // ``` - In []int32 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error message - // is generated. - // - // ```proto - // - // message MyInt32 { - // // value must not be in list [1, 2, 3] - // int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }]; - // } - // - // ``` - NotIn []int32 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyInt32 { - // int32 value = 1 [ - // (buf.validate.field).int32.example = 1, - // (buf.validate.field).int32.example = -10 - // ]; - // } - // - // ``` - Example []int32 `protobuf:"varint,8,rep,name=example" json:"example,omitempty"` -} - -func (x *Int32Rules) Reset() { - *x = Int32Rules{} - mi := &file_buf_validate_validate_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Int32Rules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Int32Rules) ProtoMessage() {} - -func (x *Int32Rules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[8] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Int32Rules.ProtoReflect.Descriptor instead. -func (*Int32Rules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{8} -} - -func (x *Int32Rules) GetConst() int32 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *Int32Rules) GetLessThan() isInt32Rules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *Int32Rules) GetLt() int32 { - if x, ok := x.GetLessThan().(*Int32Rules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *Int32Rules) GetLte() int32 { - if x, ok := x.GetLessThan().(*Int32Rules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *Int32Rules) GetGreaterThan() isInt32Rules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *Int32Rules) GetGt() int32 { - if x, ok := x.GetGreaterThan().(*Int32Rules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *Int32Rules) GetGte() int32 { - if x, ok := x.GetGreaterThan().(*Int32Rules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *Int32Rules) GetIn() []int32 { - if x != nil { - return x.In - } - return nil -} - -func (x *Int32Rules) GetNotIn() []int32 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *Int32Rules) GetExample() []int32 { - if x != nil { - return x.Example - } - return nil -} - -type isInt32Rules_LessThan interface { - isInt32Rules_LessThan() -} - -type Int32Rules_Lt struct { - // `lt` requires the field value to be less than the specified value (field - // < value). If the field value is equal to or greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MyInt32 { - // // must be less than 10 - // int32 value = 1 [(buf.validate.field).int32.lt = 10]; - // } - // - // ``` - Lt int32 `protobuf:"varint,2,opt,name=lt,oneof"` -} - -type Int32Rules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified - // value (field <= value). If the field value is greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MyInt32 { - // // must be less than or equal to 10 - // int32 value = 1 [(buf.validate.field).int32.lte = 10]; - // } - // - // ``` - Lte int32 `protobuf:"varint,3,opt,name=lte,oneof"` -} - -func (*Int32Rules_Lt) isInt32Rules_LessThan() {} - -func (*Int32Rules_Lte) isInt32Rules_LessThan() {} - -type isInt32Rules_GreaterThan interface { - isInt32Rules_GreaterThan() -} - -type Int32Rules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyInt32 { - // // must be greater than 5 [int32.gt] - // int32 value = 1 [(buf.validate.field).int32.gt = 5]; - // - // // must be greater than 5 and less than 10 [int32.gt_lt] - // int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }]; - // - // // must be greater than 10 or less than 5 [int32.gt_lt_exclusive] - // int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }]; - // } - // - // ``` - Gt int32 `protobuf:"varint,4,opt,name=gt,oneof"` -} - -type Int32Rules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified value - // (exclusive). If the value of `gte` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyInt32 { - // // must be greater than or equal to 5 [int32.gte] - // int32 value = 1 [(buf.validate.field).int32.gte = 5]; - // - // // must be greater than or equal to 5 and less than 10 [int32.gte_lt] - // int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }]; - // - // // must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive] - // int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }]; - // } - // - // ``` - Gte int32 `protobuf:"varint,5,opt,name=gte,oneof"` -} - -func (*Int32Rules_Gt) isInt32Rules_GreaterThan() {} - -func (*Int32Rules_Gte) isInt32Rules_GreaterThan() {} - -// Int64Rules describes the rules applied to `int64` values. These -// rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type. -type Int64Rules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyInt64 { - // // value must equal 42 - // int64 value = 1 [(buf.validate.field).int64.const = 42]; - // } - // - // ``` - Const *int64 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *Int64Rules_Lt - // *Int64Rules_Lte - LessThan isInt64Rules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *Int64Rules_Gt - // *Int64Rules_Gte - GreaterThan isInt64Rules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message is - // generated. - // - // ```proto - // - // message MyInt64 { - // // must be in list [1, 2, 3] - // int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }]; - // } - // - // ``` - In []int64 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error - // message is generated. - // - // ```proto - // - // message MyInt64 { - // // value must not be in list [1, 2, 3] - // int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }]; - // } - // - // ``` - NotIn []int64 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyInt64 { - // int64 value = 1 [ - // (buf.validate.field).int64.example = 1, - // (buf.validate.field).int64.example = -10 - // ]; - // } - // - // ``` - Example []int64 `protobuf:"varint,9,rep,name=example" json:"example,omitempty"` -} - -func (x *Int64Rules) Reset() { - *x = Int64Rules{} - mi := &file_buf_validate_validate_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Int64Rules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Int64Rules) ProtoMessage() {} - -func (x *Int64Rules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[9] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Int64Rules.ProtoReflect.Descriptor instead. -func (*Int64Rules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{9} -} - -func (x *Int64Rules) GetConst() int64 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *Int64Rules) GetLessThan() isInt64Rules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *Int64Rules) GetLt() int64 { - if x, ok := x.GetLessThan().(*Int64Rules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *Int64Rules) GetLte() int64 { - if x, ok := x.GetLessThan().(*Int64Rules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *Int64Rules) GetGreaterThan() isInt64Rules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *Int64Rules) GetGt() int64 { - if x, ok := x.GetGreaterThan().(*Int64Rules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *Int64Rules) GetGte() int64 { - if x, ok := x.GetGreaterThan().(*Int64Rules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *Int64Rules) GetIn() []int64 { - if x != nil { - return x.In - } - return nil -} - -func (x *Int64Rules) GetNotIn() []int64 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *Int64Rules) GetExample() []int64 { - if x != nil { - return x.Example - } - return nil -} - -type isInt64Rules_LessThan interface { - isInt64Rules_LessThan() -} - -type Int64Rules_Lt struct { - // `lt` requires the field value to be less than the specified value (field < - // value). If the field value is equal to or greater than the specified value, - // an error message is generated. - // - // ```proto - // - // message MyInt64 { - // // must be less than 10 - // int64 value = 1 [(buf.validate.field).int64.lt = 10]; - // } - // - // ``` - Lt int64 `protobuf:"varint,2,opt,name=lt,oneof"` -} - -type Int64Rules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified - // value (field <= value). If the field value is greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MyInt64 { - // // must be less than or equal to 10 - // int64 value = 1 [(buf.validate.field).int64.lte = 10]; - // } - // - // ``` - Lte int64 `protobuf:"varint,3,opt,name=lte,oneof"` -} - -func (*Int64Rules_Lt) isInt64Rules_LessThan() {} - -func (*Int64Rules_Lte) isInt64Rules_LessThan() {} - -type isInt64Rules_GreaterThan interface { - isInt64Rules_GreaterThan() -} - -type Int64Rules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyInt64 { - // // must be greater than 5 [int64.gt] - // int64 value = 1 [(buf.validate.field).int64.gt = 5]; - // - // // must be greater than 5 and less than 10 [int64.gt_lt] - // int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }]; - // - // // must be greater than 10 or less than 5 [int64.gt_lt_exclusive] - // int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }]; - // } - // - // ``` - Gt int64 `protobuf:"varint,4,opt,name=gt,oneof"` -} - -type Int64Rules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified - // value (exclusive). If the value of `gte` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyInt64 { - // // must be greater than or equal to 5 [int64.gte] - // int64 value = 1 [(buf.validate.field).int64.gte = 5]; - // - // // must be greater than or equal to 5 and less than 10 [int64.gte_lt] - // int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }]; - // - // // must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive] - // int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }]; - // } - // - // ``` - Gte int64 `protobuf:"varint,5,opt,name=gte,oneof"` -} - -func (*Int64Rules_Gt) isInt64Rules_GreaterThan() {} - -func (*Int64Rules_Gte) isInt64Rules_GreaterThan() {} - -// UInt32Rules describes the rules applied to `uint32` values. These -// rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type. -type UInt32Rules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyUInt32 { - // // value must equal 42 - // uint32 value = 1 [(buf.validate.field).uint32.const = 42]; - // } - // - // ``` - Const *uint32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *UInt32Rules_Lt - // *UInt32Rules_Lte - LessThan isUInt32Rules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *UInt32Rules_Gt - // *UInt32Rules_Gte - GreaterThan isUInt32Rules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message is - // generated. - // - // ```proto - // - // message MyUInt32 { - // // must be in list [1, 2, 3] - // uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }]; - // } - // - // ``` - In []uint32 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error - // message is generated. - // - // ```proto - // - // message MyUInt32 { - // // value must not be in list [1, 2, 3] - // uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }]; - // } - // - // ``` - NotIn []uint32 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyUInt32 { - // uint32 value = 1 [ - // (buf.validate.field).uint32.example = 1, - // (buf.validate.field).uint32.example = 10 - // ]; - // } - // - // ``` - Example []uint32 `protobuf:"varint,8,rep,name=example" json:"example,omitempty"` -} - -func (x *UInt32Rules) Reset() { - *x = UInt32Rules{} - mi := &file_buf_validate_validate_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UInt32Rules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UInt32Rules) ProtoMessage() {} - -func (x *UInt32Rules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[10] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UInt32Rules.ProtoReflect.Descriptor instead. -func (*UInt32Rules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{10} -} - -func (x *UInt32Rules) GetConst() uint32 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *UInt32Rules) GetLessThan() isUInt32Rules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *UInt32Rules) GetLt() uint32 { - if x, ok := x.GetLessThan().(*UInt32Rules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *UInt32Rules) GetLte() uint32 { - if x, ok := x.GetLessThan().(*UInt32Rules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *UInt32Rules) GetGreaterThan() isUInt32Rules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *UInt32Rules) GetGt() uint32 { - if x, ok := x.GetGreaterThan().(*UInt32Rules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *UInt32Rules) GetGte() uint32 { - if x, ok := x.GetGreaterThan().(*UInt32Rules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *UInt32Rules) GetIn() []uint32 { - if x != nil { - return x.In - } - return nil -} - -func (x *UInt32Rules) GetNotIn() []uint32 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *UInt32Rules) GetExample() []uint32 { - if x != nil { - return x.Example - } - return nil -} - -type isUInt32Rules_LessThan interface { - isUInt32Rules_LessThan() -} - -type UInt32Rules_Lt struct { - // `lt` requires the field value to be less than the specified value (field < - // value). If the field value is equal to or greater than the specified value, - // an error message is generated. - // - // ```proto - // - // message MyUInt32 { - // // must be less than 10 - // uint32 value = 1 [(buf.validate.field).uint32.lt = 10]; - // } - // - // ``` - Lt uint32 `protobuf:"varint,2,opt,name=lt,oneof"` -} - -type UInt32Rules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified - // value (field <= value). If the field value is greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MyUInt32 { - // // must be less than or equal to 10 - // uint32 value = 1 [(buf.validate.field).uint32.lte = 10]; - // } - // - // ``` - Lte uint32 `protobuf:"varint,3,opt,name=lte,oneof"` -} - -func (*UInt32Rules_Lt) isUInt32Rules_LessThan() {} - -func (*UInt32Rules_Lte) isUInt32Rules_LessThan() {} - -type isUInt32Rules_GreaterThan interface { - isUInt32Rules_GreaterThan() -} - -type UInt32Rules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyUInt32 { - // // must be greater than 5 [uint32.gt] - // uint32 value = 1 [(buf.validate.field).uint32.gt = 5]; - // - // // must be greater than 5 and less than 10 [uint32.gt_lt] - // uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }]; - // - // // must be greater than 10 or less than 5 [uint32.gt_lt_exclusive] - // uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }]; - // } - // - // ``` - Gt uint32 `protobuf:"varint,4,opt,name=gt,oneof"` -} - -type UInt32Rules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified - // value (exclusive). If the value of `gte` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyUInt32 { - // // must be greater than or equal to 5 [uint32.gte] - // uint32 value = 1 [(buf.validate.field).uint32.gte = 5]; - // - // // must be greater than or equal to 5 and less than 10 [uint32.gte_lt] - // uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }]; - // - // // must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive] - // uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }]; - // } - // - // ``` - Gte uint32 `protobuf:"varint,5,opt,name=gte,oneof"` -} - -func (*UInt32Rules_Gt) isUInt32Rules_GreaterThan() {} - -func (*UInt32Rules_Gte) isUInt32Rules_GreaterThan() {} - -// UInt64Rules describes the rules applied to `uint64` values. These -// rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type. -type UInt64Rules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyUInt64 { - // // value must equal 42 - // uint64 value = 1 [(buf.validate.field).uint64.const = 42]; - // } - // - // ``` - Const *uint64 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *UInt64Rules_Lt - // *UInt64Rules_Lte - LessThan isUInt64Rules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *UInt64Rules_Gt - // *UInt64Rules_Gte - GreaterThan isUInt64Rules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message is - // generated. - // - // ```proto - // - // message MyUInt64 { - // // must be in list [1, 2, 3] - // uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }]; - // } - // - // ``` - In []uint64 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error - // message is generated. - // - // ```proto - // - // message MyUInt64 { - // // value must not be in list [1, 2, 3] - // uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }]; - // } - // - // ``` - NotIn []uint64 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyUInt64 { - // uint64 value = 1 [ - // (buf.validate.field).uint64.example = 1, - // (buf.validate.field).uint64.example = 10 - // ]; - // } - // - // ``` - Example []uint64 `protobuf:"varint,8,rep,name=example" json:"example,omitempty"` -} - -func (x *UInt64Rules) Reset() { - *x = UInt64Rules{} - mi := &file_buf_validate_validate_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UInt64Rules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UInt64Rules) ProtoMessage() {} - -func (x *UInt64Rules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[11] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UInt64Rules.ProtoReflect.Descriptor instead. -func (*UInt64Rules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{11} -} - -func (x *UInt64Rules) GetConst() uint64 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *UInt64Rules) GetLessThan() isUInt64Rules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *UInt64Rules) GetLt() uint64 { - if x, ok := x.GetLessThan().(*UInt64Rules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *UInt64Rules) GetLte() uint64 { - if x, ok := x.GetLessThan().(*UInt64Rules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *UInt64Rules) GetGreaterThan() isUInt64Rules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *UInt64Rules) GetGt() uint64 { - if x, ok := x.GetGreaterThan().(*UInt64Rules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *UInt64Rules) GetGte() uint64 { - if x, ok := x.GetGreaterThan().(*UInt64Rules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *UInt64Rules) GetIn() []uint64 { - if x != nil { - return x.In - } - return nil -} - -func (x *UInt64Rules) GetNotIn() []uint64 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *UInt64Rules) GetExample() []uint64 { - if x != nil { - return x.Example - } - return nil -} - -type isUInt64Rules_LessThan interface { - isUInt64Rules_LessThan() -} - -type UInt64Rules_Lt struct { - // `lt` requires the field value to be less than the specified value (field < - // value). If the field value is equal to or greater than the specified value, - // an error message is generated. - // - // ```proto - // - // message MyUInt64 { - // // must be less than 10 - // uint64 value = 1 [(buf.validate.field).uint64.lt = 10]; - // } - // - // ``` - Lt uint64 `protobuf:"varint,2,opt,name=lt,oneof"` -} - -type UInt64Rules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified - // value (field <= value). If the field value is greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MyUInt64 { - // // must be less than or equal to 10 - // uint64 value = 1 [(buf.validate.field).uint64.lte = 10]; - // } - // - // ``` - Lte uint64 `protobuf:"varint,3,opt,name=lte,oneof"` -} - -func (*UInt64Rules_Lt) isUInt64Rules_LessThan() {} - -func (*UInt64Rules_Lte) isUInt64Rules_LessThan() {} - -type isUInt64Rules_GreaterThan interface { - isUInt64Rules_GreaterThan() -} - -type UInt64Rules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyUInt64 { - // // must be greater than 5 [uint64.gt] - // uint64 value = 1 [(buf.validate.field).uint64.gt = 5]; - // - // // must be greater than 5 and less than 10 [uint64.gt_lt] - // uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }]; - // - // // must be greater than 10 or less than 5 [uint64.gt_lt_exclusive] - // uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }]; - // } - // - // ``` - Gt uint64 `protobuf:"varint,4,opt,name=gt,oneof"` -} - -type UInt64Rules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified - // value (exclusive). If the value of `gte` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyUInt64 { - // // must be greater than or equal to 5 [uint64.gte] - // uint64 value = 1 [(buf.validate.field).uint64.gte = 5]; - // - // // must be greater than or equal to 5 and less than 10 [uint64.gte_lt] - // uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }]; - // - // // must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive] - // uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }]; - // } - // - // ``` - Gte uint64 `protobuf:"varint,5,opt,name=gte,oneof"` -} - -func (*UInt64Rules_Gt) isUInt64Rules_GreaterThan() {} - -func (*UInt64Rules_Gte) isUInt64Rules_GreaterThan() {} - -// SInt32Rules describes the rules applied to `sint32` values. -type SInt32Rules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MySInt32 { - // // value must equal 42 - // sint32 value = 1 [(buf.validate.field).sint32.const = 42]; - // } - // - // ``` - Const *int32 `protobuf:"zigzag32,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *SInt32Rules_Lt - // *SInt32Rules_Lte - LessThan isSInt32Rules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *SInt32Rules_Gt - // *SInt32Rules_Gte - GreaterThan isSInt32Rules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message is - // generated. - // - // ```proto - // - // message MySInt32 { - // // must be in list [1, 2, 3] - // sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }]; - // } - // - // ``` - In []int32 `protobuf:"zigzag32,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error - // message is generated. - // - // ```proto - // - // message MySInt32 { - // // value must not be in list [1, 2, 3] - // sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }]; - // } - // - // ``` - NotIn []int32 `protobuf:"zigzag32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MySInt32 { - // sint32 value = 1 [ - // (buf.validate.field).sint32.example = 1, - // (buf.validate.field).sint32.example = -10 - // ]; - // } - // - // ``` - Example []int32 `protobuf:"zigzag32,8,rep,name=example" json:"example,omitempty"` -} - -func (x *SInt32Rules) Reset() { - *x = SInt32Rules{} - mi := &file_buf_validate_validate_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SInt32Rules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SInt32Rules) ProtoMessage() {} - -func (x *SInt32Rules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[12] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SInt32Rules.ProtoReflect.Descriptor instead. -func (*SInt32Rules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{12} -} - -func (x *SInt32Rules) GetConst() int32 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *SInt32Rules) GetLessThan() isSInt32Rules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *SInt32Rules) GetLt() int32 { - if x, ok := x.GetLessThan().(*SInt32Rules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *SInt32Rules) GetLte() int32 { - if x, ok := x.GetLessThan().(*SInt32Rules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *SInt32Rules) GetGreaterThan() isSInt32Rules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *SInt32Rules) GetGt() int32 { - if x, ok := x.GetGreaterThan().(*SInt32Rules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *SInt32Rules) GetGte() int32 { - if x, ok := x.GetGreaterThan().(*SInt32Rules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *SInt32Rules) GetIn() []int32 { - if x != nil { - return x.In - } - return nil -} - -func (x *SInt32Rules) GetNotIn() []int32 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *SInt32Rules) GetExample() []int32 { - if x != nil { - return x.Example - } - return nil -} - -type isSInt32Rules_LessThan interface { - isSInt32Rules_LessThan() -} - -type SInt32Rules_Lt struct { - // `lt` requires the field value to be less than the specified value (field - // < value). If the field value is equal to or greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MySInt32 { - // // must be less than 10 - // sint32 value = 1 [(buf.validate.field).sint32.lt = 10]; - // } - // - // ``` - Lt int32 `protobuf:"zigzag32,2,opt,name=lt,oneof"` -} - -type SInt32Rules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified - // value (field <= value). If the field value is greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MySInt32 { - // // must be less than or equal to 10 - // sint32 value = 1 [(buf.validate.field).sint32.lte = 10]; - // } - // - // ``` - Lte int32 `protobuf:"zigzag32,3,opt,name=lte,oneof"` -} - -func (*SInt32Rules_Lt) isSInt32Rules_LessThan() {} - -func (*SInt32Rules_Lte) isSInt32Rules_LessThan() {} - -type isSInt32Rules_GreaterThan interface { - isSInt32Rules_GreaterThan() -} - -type SInt32Rules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MySInt32 { - // // must be greater than 5 [sint32.gt] - // sint32 value = 1 [(buf.validate.field).sint32.gt = 5]; - // - // // must be greater than 5 and less than 10 [sint32.gt_lt] - // sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }]; - // - // // must be greater than 10 or less than 5 [sint32.gt_lt_exclusive] - // sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }]; - // } - // - // ``` - Gt int32 `protobuf:"zigzag32,4,opt,name=gt,oneof"` -} - -type SInt32Rules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified - // value (exclusive). If the value of `gte` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MySInt32 { - // // must be greater than or equal to 5 [sint32.gte] - // sint32 value = 1 [(buf.validate.field).sint32.gte = 5]; - // - // // must be greater than or equal to 5 and less than 10 [sint32.gte_lt] - // sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }]; - // - // // must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive] - // sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }]; - // } - // - // ``` - Gte int32 `protobuf:"zigzag32,5,opt,name=gte,oneof"` -} - -func (*SInt32Rules_Gt) isSInt32Rules_GreaterThan() {} - -func (*SInt32Rules_Gte) isSInt32Rules_GreaterThan() {} - -// SInt64Rules describes the rules applied to `sint64` values. -type SInt64Rules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MySInt64 { - // // value must equal 42 - // sint64 value = 1 [(buf.validate.field).sint64.const = 42]; - // } - // - // ``` - Const *int64 `protobuf:"zigzag64,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *SInt64Rules_Lt - // *SInt64Rules_Lte - LessThan isSInt64Rules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *SInt64Rules_Gt - // *SInt64Rules_Gte - GreaterThan isSInt64Rules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message - // is generated. - // - // ```proto - // - // message MySInt64 { - // // must be in list [1, 2, 3] - // sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }]; - // } - // - // ``` - In []int64 `protobuf:"zigzag64,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error - // message is generated. - // - // ```proto - // - // message MySInt64 { - // // value must not be in list [1, 2, 3] - // sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }]; - // } - // - // ``` - NotIn []int64 `protobuf:"zigzag64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MySInt64 { - // sint64 value = 1 [ - // (buf.validate.field).sint64.example = 1, - // (buf.validate.field).sint64.example = -10 - // ]; - // } - // - // ``` - Example []int64 `protobuf:"zigzag64,8,rep,name=example" json:"example,omitempty"` -} - -func (x *SInt64Rules) Reset() { - *x = SInt64Rules{} - mi := &file_buf_validate_validate_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SInt64Rules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SInt64Rules) ProtoMessage() {} - -func (x *SInt64Rules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[13] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SInt64Rules.ProtoReflect.Descriptor instead. -func (*SInt64Rules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{13} -} - -func (x *SInt64Rules) GetConst() int64 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *SInt64Rules) GetLessThan() isSInt64Rules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *SInt64Rules) GetLt() int64 { - if x, ok := x.GetLessThan().(*SInt64Rules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *SInt64Rules) GetLte() int64 { - if x, ok := x.GetLessThan().(*SInt64Rules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *SInt64Rules) GetGreaterThan() isSInt64Rules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *SInt64Rules) GetGt() int64 { - if x, ok := x.GetGreaterThan().(*SInt64Rules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *SInt64Rules) GetGte() int64 { - if x, ok := x.GetGreaterThan().(*SInt64Rules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *SInt64Rules) GetIn() []int64 { - if x != nil { - return x.In - } - return nil -} - -func (x *SInt64Rules) GetNotIn() []int64 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *SInt64Rules) GetExample() []int64 { - if x != nil { - return x.Example - } - return nil -} - -type isSInt64Rules_LessThan interface { - isSInt64Rules_LessThan() -} - -type SInt64Rules_Lt struct { - // `lt` requires the field value to be less than the specified value (field - // < value). If the field value is equal to or greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MySInt64 { - // // must be less than 10 - // sint64 value = 1 [(buf.validate.field).sint64.lt = 10]; - // } - // - // ``` - Lt int64 `protobuf:"zigzag64,2,opt,name=lt,oneof"` -} - -type SInt64Rules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified - // value (field <= value). If the field value is greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MySInt64 { - // // must be less than or equal to 10 - // sint64 value = 1 [(buf.validate.field).sint64.lte = 10]; - // } - // - // ``` - Lte int64 `protobuf:"zigzag64,3,opt,name=lte,oneof"` -} - -func (*SInt64Rules_Lt) isSInt64Rules_LessThan() {} - -func (*SInt64Rules_Lte) isSInt64Rules_LessThan() {} - -type isSInt64Rules_GreaterThan interface { - isSInt64Rules_GreaterThan() -} - -type SInt64Rules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MySInt64 { - // // must be greater than 5 [sint64.gt] - // sint64 value = 1 [(buf.validate.field).sint64.gt = 5]; - // - // // must be greater than 5 and less than 10 [sint64.gt_lt] - // sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }]; - // - // // must be greater than 10 or less than 5 [sint64.gt_lt_exclusive] - // sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }]; - // } - // - // ``` - Gt int64 `protobuf:"zigzag64,4,opt,name=gt,oneof"` -} - -type SInt64Rules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified - // value (exclusive). If the value of `gte` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MySInt64 { - // // must be greater than or equal to 5 [sint64.gte] - // sint64 value = 1 [(buf.validate.field).sint64.gte = 5]; - // - // // must be greater than or equal to 5 and less than 10 [sint64.gte_lt] - // sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }]; - // - // // must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive] - // sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }]; - // } - // - // ``` - Gte int64 `protobuf:"zigzag64,5,opt,name=gte,oneof"` -} - -func (*SInt64Rules_Gt) isSInt64Rules_GreaterThan() {} - -func (*SInt64Rules_Gte) isSInt64Rules_GreaterThan() {} - -// Fixed32Rules describes the rules applied to `fixed32` values. -type Fixed32Rules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. - // If the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyFixed32 { - // // value must equal 42 - // fixed32 value = 1 [(buf.validate.field).fixed32.const = 42]; - // } - // - // ``` - Const *uint32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *Fixed32Rules_Lt - // *Fixed32Rules_Lte - LessThan isFixed32Rules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *Fixed32Rules_Gt - // *Fixed32Rules_Gte - GreaterThan isFixed32Rules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message - // is generated. - // - // ```proto - // - // message MyFixed32 { - // // must be in list [1, 2, 3] - // fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }]; - // } - // - // ``` - In []uint32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error - // message is generated. - // - // ```proto - // - // message MyFixed32 { - // // value must not be in list [1, 2, 3] - // fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }]; - // } - // - // ``` - NotIn []uint32 `protobuf:"fixed32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyFixed32 { - // fixed32 value = 1 [ - // (buf.validate.field).fixed32.example = 1, - // (buf.validate.field).fixed32.example = 2 - // ]; - // } - // - // ``` - Example []uint32 `protobuf:"fixed32,8,rep,name=example" json:"example,omitempty"` -} - -func (x *Fixed32Rules) Reset() { - *x = Fixed32Rules{} - mi := &file_buf_validate_validate_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Fixed32Rules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Fixed32Rules) ProtoMessage() {} - -func (x *Fixed32Rules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[14] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Fixed32Rules.ProtoReflect.Descriptor instead. -func (*Fixed32Rules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{14} -} - -func (x *Fixed32Rules) GetConst() uint32 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *Fixed32Rules) GetLessThan() isFixed32Rules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *Fixed32Rules) GetLt() uint32 { - if x, ok := x.GetLessThan().(*Fixed32Rules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *Fixed32Rules) GetLte() uint32 { - if x, ok := x.GetLessThan().(*Fixed32Rules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *Fixed32Rules) GetGreaterThan() isFixed32Rules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *Fixed32Rules) GetGt() uint32 { - if x, ok := x.GetGreaterThan().(*Fixed32Rules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *Fixed32Rules) GetGte() uint32 { - if x, ok := x.GetGreaterThan().(*Fixed32Rules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *Fixed32Rules) GetIn() []uint32 { - if x != nil { - return x.In - } - return nil -} - -func (x *Fixed32Rules) GetNotIn() []uint32 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *Fixed32Rules) GetExample() []uint32 { - if x != nil { - return x.Example - } - return nil -} - -type isFixed32Rules_LessThan interface { - isFixed32Rules_LessThan() -} - -type Fixed32Rules_Lt struct { - // `lt` requires the field value to be less than the specified value (field < - // value). If the field value is equal to or greater than the specified value, - // an error message is generated. - // - // ```proto - // - // message MyFixed32 { - // // must be less than 10 - // fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10]; - // } - // - // ``` - Lt uint32 `protobuf:"fixed32,2,opt,name=lt,oneof"` -} - -type Fixed32Rules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified - // value (field <= value). If the field value is greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MyFixed32 { - // // must be less than or equal to 10 - // fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10]; - // } - // - // ``` - Lte uint32 `protobuf:"fixed32,3,opt,name=lte,oneof"` -} - -func (*Fixed32Rules_Lt) isFixed32Rules_LessThan() {} - -func (*Fixed32Rules_Lte) isFixed32Rules_LessThan() {} - -type isFixed32Rules_GreaterThan interface { - isFixed32Rules_GreaterThan() -} - -type Fixed32Rules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyFixed32 { - // // must be greater than 5 [fixed32.gt] - // fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5]; - // - // // must be greater than 5 and less than 10 [fixed32.gt_lt] - // fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }]; - // - // // must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive] - // fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }]; - // } - // - // ``` - Gt uint32 `protobuf:"fixed32,4,opt,name=gt,oneof"` -} - -type Fixed32Rules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified - // value (exclusive). If the value of `gte` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyFixed32 { - // // must be greater than or equal to 5 [fixed32.gte] - // fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5]; - // - // // must be greater than or equal to 5 and less than 10 [fixed32.gte_lt] - // fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }]; - // - // // must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive] - // fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }]; - // } - // - // ``` - Gte uint32 `protobuf:"fixed32,5,opt,name=gte,oneof"` -} - -func (*Fixed32Rules_Gt) isFixed32Rules_GreaterThan() {} - -func (*Fixed32Rules_Gte) isFixed32Rules_GreaterThan() {} - -// Fixed64Rules describes the rules applied to `fixed64` values. -type Fixed64Rules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyFixed64 { - // // value must equal 42 - // fixed64 value = 1 [(buf.validate.field).fixed64.const = 42]; - // } - // - // ``` - Const *uint64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *Fixed64Rules_Lt - // *Fixed64Rules_Lte - LessThan isFixed64Rules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *Fixed64Rules_Gt - // *Fixed64Rules_Gte - GreaterThan isFixed64Rules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message is - // generated. - // - // ```proto - // - // message MyFixed64 { - // // must be in list [1, 2, 3] - // fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }]; - // } - // - // ``` - In []uint64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error - // message is generated. - // - // ```proto - // - // message MyFixed64 { - // // value must not be in list [1, 2, 3] - // fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }]; - // } - // - // ``` - NotIn []uint64 `protobuf:"fixed64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyFixed64 { - // fixed64 value = 1 [ - // (buf.validate.field).fixed64.example = 1, - // (buf.validate.field).fixed64.example = 2 - // ]; - // } - // - // ``` - Example []uint64 `protobuf:"fixed64,8,rep,name=example" json:"example,omitempty"` -} - -func (x *Fixed64Rules) Reset() { - *x = Fixed64Rules{} - mi := &file_buf_validate_validate_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Fixed64Rules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Fixed64Rules) ProtoMessage() {} - -func (x *Fixed64Rules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[15] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Fixed64Rules.ProtoReflect.Descriptor instead. -func (*Fixed64Rules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{15} -} - -func (x *Fixed64Rules) GetConst() uint64 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *Fixed64Rules) GetLessThan() isFixed64Rules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *Fixed64Rules) GetLt() uint64 { - if x, ok := x.GetLessThan().(*Fixed64Rules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *Fixed64Rules) GetLte() uint64 { - if x, ok := x.GetLessThan().(*Fixed64Rules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *Fixed64Rules) GetGreaterThan() isFixed64Rules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *Fixed64Rules) GetGt() uint64 { - if x, ok := x.GetGreaterThan().(*Fixed64Rules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *Fixed64Rules) GetGte() uint64 { - if x, ok := x.GetGreaterThan().(*Fixed64Rules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *Fixed64Rules) GetIn() []uint64 { - if x != nil { - return x.In - } - return nil -} - -func (x *Fixed64Rules) GetNotIn() []uint64 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *Fixed64Rules) GetExample() []uint64 { - if x != nil { - return x.Example - } - return nil -} - -type isFixed64Rules_LessThan interface { - isFixed64Rules_LessThan() -} - -type Fixed64Rules_Lt struct { - // `lt` requires the field value to be less than the specified value (field < - // value). If the field value is equal to or greater than the specified value, - // an error message is generated. - // - // ```proto - // - // message MyFixed64 { - // // must be less than 10 - // fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10]; - // } - // - // ``` - Lt uint64 `protobuf:"fixed64,2,opt,name=lt,oneof"` -} - -type Fixed64Rules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified - // value (field <= value). If the field value is greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MyFixed64 { - // // must be less than or equal to 10 - // fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10]; - // } - // - // ``` - Lte uint64 `protobuf:"fixed64,3,opt,name=lte,oneof"` -} - -func (*Fixed64Rules_Lt) isFixed64Rules_LessThan() {} - -func (*Fixed64Rules_Lte) isFixed64Rules_LessThan() {} - -type isFixed64Rules_GreaterThan interface { - isFixed64Rules_GreaterThan() -} - -type Fixed64Rules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyFixed64 { - // // must be greater than 5 [fixed64.gt] - // fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5]; - // - // // must be greater than 5 and less than 10 [fixed64.gt_lt] - // fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }]; - // - // // must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive] - // fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }]; - // } - // - // ``` - Gt uint64 `protobuf:"fixed64,4,opt,name=gt,oneof"` -} - -type Fixed64Rules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified - // value (exclusive). If the value of `gte` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyFixed64 { - // // must be greater than or equal to 5 [fixed64.gte] - // fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5]; - // - // // must be greater than or equal to 5 and less than 10 [fixed64.gte_lt] - // fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }]; - // - // // must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive] - // fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }]; - // } - // - // ``` - Gte uint64 `protobuf:"fixed64,5,opt,name=gte,oneof"` -} - -func (*Fixed64Rules_Gt) isFixed64Rules_GreaterThan() {} - -func (*Fixed64Rules_Gte) isFixed64Rules_GreaterThan() {} - -// SFixed32Rules describes the rules applied to `fixed32` values. -type SFixed32Rules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MySFixed32 { - // // value must equal 42 - // sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42]; - // } - // - // ``` - Const *int32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *SFixed32Rules_Lt - // *SFixed32Rules_Lte - LessThan isSFixed32Rules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *SFixed32Rules_Gt - // *SFixed32Rules_Gte - GreaterThan isSFixed32Rules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message is - // generated. - // - // ```proto - // - // message MySFixed32 { - // // must be in list [1, 2, 3] - // sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }]; - // } - // - // ``` - In []int32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error - // message is generated. - // - // ```proto - // - // message MySFixed32 { - // // value must not be in list [1, 2, 3] - // sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }]; - // } - // - // ``` - NotIn []int32 `protobuf:"fixed32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MySFixed32 { - // sfixed32 value = 1 [ - // (buf.validate.field).sfixed32.example = 1, - // (buf.validate.field).sfixed32.example = 2 - // ]; - // } - // - // ``` - Example []int32 `protobuf:"fixed32,8,rep,name=example" json:"example,omitempty"` -} - -func (x *SFixed32Rules) Reset() { - *x = SFixed32Rules{} - mi := &file_buf_validate_validate_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SFixed32Rules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SFixed32Rules) ProtoMessage() {} - -func (x *SFixed32Rules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[16] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SFixed32Rules.ProtoReflect.Descriptor instead. -func (*SFixed32Rules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{16} -} - -func (x *SFixed32Rules) GetConst() int32 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *SFixed32Rules) GetLessThan() isSFixed32Rules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *SFixed32Rules) GetLt() int32 { - if x, ok := x.GetLessThan().(*SFixed32Rules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *SFixed32Rules) GetLte() int32 { - if x, ok := x.GetLessThan().(*SFixed32Rules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *SFixed32Rules) GetGreaterThan() isSFixed32Rules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *SFixed32Rules) GetGt() int32 { - if x, ok := x.GetGreaterThan().(*SFixed32Rules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *SFixed32Rules) GetGte() int32 { - if x, ok := x.GetGreaterThan().(*SFixed32Rules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *SFixed32Rules) GetIn() []int32 { - if x != nil { - return x.In - } - return nil -} - -func (x *SFixed32Rules) GetNotIn() []int32 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *SFixed32Rules) GetExample() []int32 { - if x != nil { - return x.Example - } - return nil -} - -type isSFixed32Rules_LessThan interface { - isSFixed32Rules_LessThan() -} - -type SFixed32Rules_Lt struct { - // `lt` requires the field value to be less than the specified value (field < - // value). If the field value is equal to or greater than the specified value, - // an error message is generated. - // - // ```proto - // - // message MySFixed32 { - // // must be less than 10 - // sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10]; - // } - // - // ``` - Lt int32 `protobuf:"fixed32,2,opt,name=lt,oneof"` -} - -type SFixed32Rules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified - // value (field <= value). If the field value is greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MySFixed32 { - // // must be less than or equal to 10 - // sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10]; - // } - // - // ``` - Lte int32 `protobuf:"fixed32,3,opt,name=lte,oneof"` -} - -func (*SFixed32Rules_Lt) isSFixed32Rules_LessThan() {} - -func (*SFixed32Rules_Lte) isSFixed32Rules_LessThan() {} - -type isSFixed32Rules_GreaterThan interface { - isSFixed32Rules_GreaterThan() -} - -type SFixed32Rules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MySFixed32 { - // // must be greater than 5 [sfixed32.gt] - // sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5]; - // - // // must be greater than 5 and less than 10 [sfixed32.gt_lt] - // sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }]; - // - // // must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive] - // sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }]; - // } - // - // ``` - Gt int32 `protobuf:"fixed32,4,opt,name=gt,oneof"` -} - -type SFixed32Rules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified - // value (exclusive). If the value of `gte` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MySFixed32 { - // // must be greater than or equal to 5 [sfixed32.gte] - // sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5]; - // - // // must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt] - // sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }]; - // - // // must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive] - // sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }]; - // } - // - // ``` - Gte int32 `protobuf:"fixed32,5,opt,name=gte,oneof"` -} - -func (*SFixed32Rules_Gt) isSFixed32Rules_GreaterThan() {} - -func (*SFixed32Rules_Gte) isSFixed32Rules_GreaterThan() {} - -// SFixed64Rules describes the rules applied to `fixed64` values. -type SFixed64Rules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MySFixed64 { - // // value must equal 42 - // sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42]; - // } - // - // ``` - Const *int64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *SFixed64Rules_Lt - // *SFixed64Rules_Lte - LessThan isSFixed64Rules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *SFixed64Rules_Gt - // *SFixed64Rules_Gte - GreaterThan isSFixed64Rules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` requires the field value to be equal to one of the specified values. - // If the field value isn't one of the specified values, an error message is - // generated. - // - // ```proto - // - // message MySFixed64 { - // // must be in list [1, 2, 3] - // sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }]; - // } - // - // ``` - In []int64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not be equal to any of the specified - // values. If the field value is one of the specified values, an error - // message is generated. - // - // ```proto - // - // message MySFixed64 { - // // value must not be in list [1, 2, 3] - // sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }]; - // } - // - // ``` - NotIn []int64 `protobuf:"fixed64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MySFixed64 { - // sfixed64 value = 1 [ - // (buf.validate.field).sfixed64.example = 1, - // (buf.validate.field).sfixed64.example = 2 - // ]; - // } - // - // ``` - Example []int64 `protobuf:"fixed64,8,rep,name=example" json:"example,omitempty"` -} - -func (x *SFixed64Rules) Reset() { - *x = SFixed64Rules{} - mi := &file_buf_validate_validate_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SFixed64Rules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SFixed64Rules) ProtoMessage() {} - -func (x *SFixed64Rules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[17] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SFixed64Rules.ProtoReflect.Descriptor instead. -func (*SFixed64Rules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{17} -} - -func (x *SFixed64Rules) GetConst() int64 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (m *SFixed64Rules) GetLessThan() isSFixed64Rules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *SFixed64Rules) GetLt() int64 { - if x, ok := x.GetLessThan().(*SFixed64Rules_Lt); ok { - return x.Lt - } - return 0 -} - -func (x *SFixed64Rules) GetLte() int64 { - if x, ok := x.GetLessThan().(*SFixed64Rules_Lte); ok { - return x.Lte - } - return 0 -} - -func (m *SFixed64Rules) GetGreaterThan() isSFixed64Rules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *SFixed64Rules) GetGt() int64 { - if x, ok := x.GetGreaterThan().(*SFixed64Rules_Gt); ok { - return x.Gt - } - return 0 -} - -func (x *SFixed64Rules) GetGte() int64 { - if x, ok := x.GetGreaterThan().(*SFixed64Rules_Gte); ok { - return x.Gte - } - return 0 -} - -func (x *SFixed64Rules) GetIn() []int64 { - if x != nil { - return x.In - } - return nil -} - -func (x *SFixed64Rules) GetNotIn() []int64 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *SFixed64Rules) GetExample() []int64 { - if x != nil { - return x.Example - } - return nil -} - -type isSFixed64Rules_LessThan interface { - isSFixed64Rules_LessThan() -} - -type SFixed64Rules_Lt struct { - // `lt` requires the field value to be less than the specified value (field < - // value). If the field value is equal to or greater than the specified value, - // an error message is generated. - // - // ```proto - // - // message MySFixed64 { - // // must be less than 10 - // sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10]; - // } - // - // ``` - Lt int64 `protobuf:"fixed64,2,opt,name=lt,oneof"` -} - -type SFixed64Rules_Lte struct { - // `lte` requires the field value to be less than or equal to the specified - // value (field <= value). If the field value is greater than the specified - // value, an error message is generated. - // - // ```proto - // - // message MySFixed64 { - // // must be less than or equal to 10 - // sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10]; - // } - // - // ``` - Lte int64 `protobuf:"fixed64,3,opt,name=lte,oneof"` -} - -func (*SFixed64Rules_Lt) isSFixed64Rules_LessThan() {} - -func (*SFixed64Rules_Lte) isSFixed64Rules_LessThan() {} - -type isSFixed64Rules_GreaterThan interface { - isSFixed64Rules_GreaterThan() -} - -type SFixed64Rules_Gt struct { - // `gt` requires the field value to be greater than the specified value - // (exclusive). If the value of `gt` is larger than a specified `lt` or - // `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MySFixed64 { - // // must be greater than 5 [sfixed64.gt] - // sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5]; - // - // // must be greater than 5 and less than 10 [sfixed64.gt_lt] - // sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }]; - // - // // must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive] - // sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }]; - // } - // - // ``` - Gt int64 `protobuf:"fixed64,4,opt,name=gt,oneof"` -} - -type SFixed64Rules_Gte struct { - // `gte` requires the field value to be greater than or equal to the specified - // value (exclusive). If the value of `gte` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MySFixed64 { - // // must be greater than or equal to 5 [sfixed64.gte] - // sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5]; - // - // // must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt] - // sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }]; - // - // // must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive] - // sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }]; - // } - // - // ``` - Gte int64 `protobuf:"fixed64,5,opt,name=gte,oneof"` -} - -func (*SFixed64Rules_Gt) isSFixed64Rules_GreaterThan() {} - -func (*SFixed64Rules_Gte) isSFixed64Rules_GreaterThan() {} - -// BoolRules describes the rules applied to `bool` values. These rules -// may also be applied to the `google.protobuf.BoolValue` Well-Known-Type. -type BoolRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified boolean value. - // If the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyBool { - // // value must equal true - // bool value = 1 [(buf.validate.field).bool.const = true]; - // } - // - // ``` - Const *bool `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyBool { - // bool value = 1 [ - // (buf.validate.field).bool.example = true, - // (buf.validate.field).bool.example = false - // ]; - // } - // - // ``` - Example []bool `protobuf:"varint,2,rep,name=example" json:"example,omitempty"` -} - -func (x *BoolRules) Reset() { - *x = BoolRules{} - mi := &file_buf_validate_validate_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *BoolRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BoolRules) ProtoMessage() {} - -func (x *BoolRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[18] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BoolRules.ProtoReflect.Descriptor instead. -func (*BoolRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{18} -} - -func (x *BoolRules) GetConst() bool { - if x != nil && x.Const != nil { - return *x.Const - } - return false -} - -func (x *BoolRules) GetExample() []bool { - if x != nil { - return x.Example - } - return nil -} - -// StringRules describes the rules applied to `string` values These -// rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type. -type StringRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified value. If - // the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyString { - // // value must equal `hello` - // string value = 1 [(buf.validate.field).string.const = "hello"]; - // } - // - // ``` - Const *string `protobuf:"bytes,1,opt,name=const" json:"const,omitempty"` - // `len` dictates that the field value must have the specified - // number of characters (Unicode code points), which may differ from the number - // of bytes in the string. If the field value does not meet the specified - // length, an error message will be generated. - // - // ```proto - // - // message MyString { - // // value length must be 5 characters - // string value = 1 [(buf.validate.field).string.len = 5]; - // } - // - // ``` - Len *uint64 `protobuf:"varint,19,opt,name=len" json:"len,omitempty"` - // `min_len` specifies that the field value must have at least the specified - // number of characters (Unicode code points), which may differ from the number - // of bytes in the string. If the field value contains fewer characters, an error - // message will be generated. - // - // ```proto - // - // message MyString { - // // value length must be at least 3 characters - // string value = 1 [(buf.validate.field).string.min_len = 3]; - // } - // - // ``` - MinLen *uint64 `protobuf:"varint,2,opt,name=min_len,json=minLen" json:"min_len,omitempty"` - // `max_len` specifies that the field value must have no more than the specified - // number of characters (Unicode code points), which may differ from the - // number of bytes in the string. If the field value contains more characters, - // an error message will be generated. - // - // ```proto - // - // message MyString { - // // value length must be at most 10 characters - // string value = 1 [(buf.validate.field).string.max_len = 10]; - // } - // - // ``` - MaxLen *uint64 `protobuf:"varint,3,opt,name=max_len,json=maxLen" json:"max_len,omitempty"` - // `len_bytes` dictates that the field value must have the specified number of - // bytes. If the field value does not match the specified length in bytes, - // an error message will be generated. - // - // ```proto - // - // message MyString { - // // value length must be 6 bytes - // string value = 1 [(buf.validate.field).string.len_bytes = 6]; - // } - // - // ``` - LenBytes *uint64 `protobuf:"varint,20,opt,name=len_bytes,json=lenBytes" json:"len_bytes,omitempty"` - // `min_bytes` specifies that the field value must have at least the specified - // number of bytes. If the field value contains fewer bytes, an error message - // will be generated. - // - // ```proto - // - // message MyString { - // // value length must be at least 4 bytes - // string value = 1 [(buf.validate.field).string.min_bytes = 4]; - // } - // - // ``` - MinBytes *uint64 `protobuf:"varint,4,opt,name=min_bytes,json=minBytes" json:"min_bytes,omitempty"` - // `max_bytes` specifies that the field value must have no more than the - // specified number of bytes. If the field value contains more bytes, an - // error message will be generated. - // - // ```proto - // - // message MyString { - // // value length must be at most 8 bytes - // string value = 1 [(buf.validate.field).string.max_bytes = 8]; - // } - // - // ``` - MaxBytes *uint64 `protobuf:"varint,5,opt,name=max_bytes,json=maxBytes" json:"max_bytes,omitempty"` - // `pattern` specifies that the field value must match the specified - // regular expression (RE2 syntax), with the expression provided without any - // delimiters. If the field value doesn't match the regular expression, an - // error message will be generated. - // - // ```proto - // - // message MyString { - // // value does not match regex pattern `^[a-zA-Z]//$` - // string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"]; - // } - // - // ``` - Pattern *string `protobuf:"bytes,6,opt,name=pattern" json:"pattern,omitempty"` - // `prefix` specifies that the field value must have the - // specified substring at the beginning of the string. If the field value - // doesn't start with the specified prefix, an error message will be - // generated. - // - // ```proto - // - // message MyString { - // // value does not have prefix `pre` - // string value = 1 [(buf.validate.field).string.prefix = "pre"]; - // } - // - // ``` - Prefix *string `protobuf:"bytes,7,opt,name=prefix" json:"prefix,omitempty"` - // `suffix` specifies that the field value must have the - // specified substring at the end of the string. If the field value doesn't - // end with the specified suffix, an error message will be generated. - // - // ```proto - // - // message MyString { - // // value does not have suffix `post` - // string value = 1 [(buf.validate.field).string.suffix = "post"]; - // } - // - // ``` - Suffix *string `protobuf:"bytes,8,opt,name=suffix" json:"suffix,omitempty"` - // `contains` specifies that the field value must have the - // specified substring anywhere in the string. If the field value doesn't - // contain the specified substring, an error message will be generated. - // - // ```proto - // - // message MyString { - // // value does not contain substring `inside`. - // string value = 1 [(buf.validate.field).string.contains = "inside"]; - // } - // - // ``` - Contains *string `protobuf:"bytes,9,opt,name=contains" json:"contains,omitempty"` - // `not_contains` specifies that the field value must not have the - // specified substring anywhere in the string. If the field value contains - // the specified substring, an error message will be generated. - // - // ```proto - // - // message MyString { - // // value contains substring `inside`. - // string value = 1 [(buf.validate.field).string.not_contains = "inside"]; - // } - // - // ``` - NotContains *string `protobuf:"bytes,23,opt,name=not_contains,json=notContains" json:"not_contains,omitempty"` - // `in` specifies that the field value must be equal to one of the specified - // values. If the field value isn't one of the specified values, an error - // message will be generated. - // - // ```proto - // - // message MyString { - // // must be in list ["apple", "banana"] - // string value = 1 [(buf.validate.field).string = { in: ["apple", "banana"] }]; - // } - // - // ``` - In []string `protobuf:"bytes,10,rep,name=in" json:"in,omitempty"` - // `not_in` specifies that the field value cannot be equal to any - // of the specified values. If the field value is one of the specified values, - // an error message will be generated. - // ```proto - // - // message MyString { - // // value must not be in list ["orange", "grape"] - // string value = 1 [(buf.validate.field).string = { not_in: ["orange", "grape"] }]; - // } - // - // ``` - NotIn []string `protobuf:"bytes,11,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `WellKnown` rules provide advanced rules against common string - // patterns. - // - // Types that are assignable to WellKnown: - // - // *StringRules_Email - // *StringRules_Hostname - // *StringRules_Ip - // *StringRules_Ipv4 - // *StringRules_Ipv6 - // *StringRules_Uri - // *StringRules_UriRef - // *StringRules_Address - // *StringRules_Uuid - // *StringRules_Tuuid - // *StringRules_IpWithPrefixlen - // *StringRules_Ipv4WithPrefixlen - // *StringRules_Ipv6WithPrefixlen - // *StringRules_IpPrefix - // *StringRules_Ipv4Prefix - // *StringRules_Ipv6Prefix - // *StringRules_HostAndPort - // *StringRules_Ulid - // *StringRules_ProtobufFqn - // *StringRules_ProtobufDotFqn - // *StringRules_WellKnownRegex - WellKnown isStringRules_WellKnown `protobuf_oneof:"well_known"` - // This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to - // enable strict header validation. By default, this is true, and HTTP header - // validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser - // validations that only disallow `\r\n\0` characters, which can be used to - // bypass header matching rules. - // - // ```proto - // - // message MyString { - // // The field `value` must have be a valid HTTP headers, but not enforced with strict rules. - // string value = 1 [(buf.validate.field).string.strict = false]; - // } - // - // ``` - Strict *bool `protobuf:"varint,25,opt,name=strict" json:"strict,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyString { - // string value = 1 [ - // (buf.validate.field).string.example = "hello", - // (buf.validate.field).string.example = "world" - // ]; - // } - // - // ``` - Example []string `protobuf:"bytes,34,rep,name=example" json:"example,omitempty"` -} - -func (x *StringRules) Reset() { - *x = StringRules{} - mi := &file_buf_validate_validate_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *StringRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StringRules) ProtoMessage() {} - -func (x *StringRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[19] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StringRules.ProtoReflect.Descriptor instead. -func (*StringRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{19} -} - -func (x *StringRules) GetConst() string { - if x != nil && x.Const != nil { - return *x.Const - } - return "" -} - -func (x *StringRules) GetLen() uint64 { - if x != nil && x.Len != nil { - return *x.Len - } - return 0 -} - -func (x *StringRules) GetMinLen() uint64 { - if x != nil && x.MinLen != nil { - return *x.MinLen - } - return 0 -} - -func (x *StringRules) GetMaxLen() uint64 { - if x != nil && x.MaxLen != nil { - return *x.MaxLen - } - return 0 -} - -func (x *StringRules) GetLenBytes() uint64 { - if x != nil && x.LenBytes != nil { - return *x.LenBytes - } - return 0 -} - -func (x *StringRules) GetMinBytes() uint64 { - if x != nil && x.MinBytes != nil { - return *x.MinBytes - } - return 0 -} - -func (x *StringRules) GetMaxBytes() uint64 { - if x != nil && x.MaxBytes != nil { - return *x.MaxBytes - } - return 0 -} - -func (x *StringRules) GetPattern() string { - if x != nil && x.Pattern != nil { - return *x.Pattern - } - return "" -} - -func (x *StringRules) GetPrefix() string { - if x != nil && x.Prefix != nil { - return *x.Prefix - } - return "" -} - -func (x *StringRules) GetSuffix() string { - if x != nil && x.Suffix != nil { - return *x.Suffix - } - return "" -} - -func (x *StringRules) GetContains() string { - if x != nil && x.Contains != nil { - return *x.Contains - } - return "" -} - -func (x *StringRules) GetNotContains() string { - if x != nil && x.NotContains != nil { - return *x.NotContains - } - return "" -} - -func (x *StringRules) GetIn() []string { - if x != nil { - return x.In - } - return nil -} - -func (x *StringRules) GetNotIn() []string { - if x != nil { - return x.NotIn - } - return nil -} - -func (m *StringRules) GetWellKnown() isStringRules_WellKnown { - if m != nil { - return m.WellKnown - } - return nil -} - -func (x *StringRules) GetEmail() bool { - if x, ok := x.GetWellKnown().(*StringRules_Email); ok { - return x.Email - } - return false -} - -func (x *StringRules) GetHostname() bool { - if x, ok := x.GetWellKnown().(*StringRules_Hostname); ok { - return x.Hostname - } - return false -} - -func (x *StringRules) GetIp() bool { - if x, ok := x.GetWellKnown().(*StringRules_Ip); ok { - return x.Ip - } - return false -} - -func (x *StringRules) GetIpv4() bool { - if x, ok := x.GetWellKnown().(*StringRules_Ipv4); ok { - return x.Ipv4 - } - return false -} - -func (x *StringRules) GetIpv6() bool { - if x, ok := x.GetWellKnown().(*StringRules_Ipv6); ok { - return x.Ipv6 - } - return false -} - -func (x *StringRules) GetUri() bool { - if x, ok := x.GetWellKnown().(*StringRules_Uri); ok { - return x.Uri - } - return false -} - -func (x *StringRules) GetUriRef() bool { - if x, ok := x.GetWellKnown().(*StringRules_UriRef); ok { - return x.UriRef - } - return false -} - -func (x *StringRules) GetAddress() bool { - if x, ok := x.GetWellKnown().(*StringRules_Address); ok { - return x.Address - } - return false -} - -func (x *StringRules) GetUuid() bool { - if x, ok := x.GetWellKnown().(*StringRules_Uuid); ok { - return x.Uuid - } - return false -} - -func (x *StringRules) GetTuuid() bool { - if x, ok := x.GetWellKnown().(*StringRules_Tuuid); ok { - return x.Tuuid - } - return false -} - -func (x *StringRules) GetIpWithPrefixlen() bool { - if x, ok := x.GetWellKnown().(*StringRules_IpWithPrefixlen); ok { - return x.IpWithPrefixlen - } - return false -} - -func (x *StringRules) GetIpv4WithPrefixlen() bool { - if x, ok := x.GetWellKnown().(*StringRules_Ipv4WithPrefixlen); ok { - return x.Ipv4WithPrefixlen - } - return false -} - -func (x *StringRules) GetIpv6WithPrefixlen() bool { - if x, ok := x.GetWellKnown().(*StringRules_Ipv6WithPrefixlen); ok { - return x.Ipv6WithPrefixlen - } - return false -} - -func (x *StringRules) GetIpPrefix() bool { - if x, ok := x.GetWellKnown().(*StringRules_IpPrefix); ok { - return x.IpPrefix - } - return false -} - -func (x *StringRules) GetIpv4Prefix() bool { - if x, ok := x.GetWellKnown().(*StringRules_Ipv4Prefix); ok { - return x.Ipv4Prefix - } - return false -} - -func (x *StringRules) GetIpv6Prefix() bool { - if x, ok := x.GetWellKnown().(*StringRules_Ipv6Prefix); ok { - return x.Ipv6Prefix - } - return false -} - -func (x *StringRules) GetHostAndPort() bool { - if x, ok := x.GetWellKnown().(*StringRules_HostAndPort); ok { - return x.HostAndPort - } - return false -} - -func (x *StringRules) GetUlid() bool { - if x, ok := x.GetWellKnown().(*StringRules_Ulid); ok { - return x.Ulid - } - return false -} - -func (x *StringRules) GetProtobufFqn() bool { - if x, ok := x.GetWellKnown().(*StringRules_ProtobufFqn); ok { - return x.ProtobufFqn - } - return false -} - -func (x *StringRules) GetProtobufDotFqn() bool { - if x, ok := x.GetWellKnown().(*StringRules_ProtobufDotFqn); ok { - return x.ProtobufDotFqn - } - return false -} - -func (x *StringRules) GetWellKnownRegex() KnownRegex { - if x, ok := x.GetWellKnown().(*StringRules_WellKnownRegex); ok { - return x.WellKnownRegex - } - return KnownRegex_KNOWN_REGEX_UNSPECIFIED -} - -func (x *StringRules) GetStrict() bool { - if x != nil && x.Strict != nil { - return *x.Strict - } - return false -} - -func (x *StringRules) GetExample() []string { - if x != nil { - return x.Example - } - return nil -} - -type isStringRules_WellKnown interface { - isStringRules_WellKnown() -} - -type StringRules_Email struct { - // `email` specifies that the field value must be a valid email address, for - // example "foo@example.com". - // - // Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address). - // Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322), - // which allows many unexpected forms of email addresses and will easily match - // a typographical error. - // - // If the field value isn't a valid email address, an error message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid email address - // string value = 1 [(buf.validate.field).string.email = true]; - // } - // - // ``` - Email bool `protobuf:"varint,12,opt,name=email,oneof"` -} - -type StringRules_Hostname struct { - // `hostname` specifies that the field value must be a valid hostname, for - // example "foo.example.com". - // - // A valid hostname follows the rules below: - // - The name consists of one or more labels, separated by a dot ("."). - // - Each label can be 1 to 63 alphanumeric characters. - // - A label can contain hyphens ("-"), but must not start or end with a hyphen. - // - The right-most label must not be digits only. - // - The name can have a trailing dot—for example, "foo.example.com.". - // - The name can be 253 characters at most, excluding the optional trailing dot. - // - // If the field value isn't a valid hostname, an error message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid hostname - // string value = 1 [(buf.validate.field).string.hostname = true]; - // } - // - // ``` - Hostname bool `protobuf:"varint,13,opt,name=hostname,oneof"` -} - -type StringRules_Ip struct { - // `ip` specifies that the field value must be a valid IP (v4 or v6) address. - // - // IPv4 addresses are expected in the dotted decimal format—for example, "192.168.5.21". - // IPv6 addresses are expected in their text representation—for example, "::1", - // or "2001:0DB8:ABCD:0012::0". - // - // Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). - // Zone identifiers for IPv6 addresses (for example, "fe80::a%en1") are supported. - // - // If the field value isn't a valid IP address, an error message will be - // generated. - // - // ```proto - // - // message MyString { - // // must be a valid IP address - // string value = 1 [(buf.validate.field).string.ip = true]; - // } - // - // ``` - Ip bool `protobuf:"varint,14,opt,name=ip,oneof"` -} - -type StringRules_Ipv4 struct { - // `ipv4` specifies that the field value must be a valid IPv4 address—for - // example "192.168.5.21". If the field value isn't a valid IPv4 address, an - // error message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid IPv4 address - // string value = 1 [(buf.validate.field).string.ipv4 = true]; - // } - // - // ``` - Ipv4 bool `protobuf:"varint,15,opt,name=ipv4,oneof"` -} - -type StringRules_Ipv6 struct { - // `ipv6` specifies that the field value must be a valid IPv6 address—for - // example "::1", or "d7a:115c:a1e0:ab12:4843:cd96:626b:430b". If the field - // value is not a valid IPv6 address, an error message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid IPv6 address - // string value = 1 [(buf.validate.field).string.ipv6 = true]; - // } - // - // ``` - Ipv6 bool `protobuf:"varint,16,opt,name=ipv6,oneof"` -} - -type StringRules_Uri struct { - // `uri` specifies that the field value must be a valid URI, for example - // "https://example.com/foo/bar?baz=quux#frag". - // - // URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). - // Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)). - // - // If the field value isn't a valid URI, an error message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid URI - // string value = 1 [(buf.validate.field).string.uri = true]; - // } - // - // ``` - Uri bool `protobuf:"varint,17,opt,name=uri,oneof"` -} - -type StringRules_UriRef struct { - // `uri_ref` specifies that the field value must be a valid URI Reference—either - // a URI such as "https://example.com/foo/bar?baz=quux#frag", or a Relative - // Reference such as "./foo/bar?query". - // - // URI, URI Reference, and Relative Reference are defined in the internet - // standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone - // Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)). - // - // If the field value isn't a valid URI Reference, an error message will be - // generated. - // - // ```proto - // - // message MyString { - // // must be a valid URI Reference - // string value = 1 [(buf.validate.field).string.uri_ref = true]; - // } - // - // ``` - UriRef bool `protobuf:"varint,18,opt,name=uri_ref,json=uriRef,oneof"` -} - -type StringRules_Address struct { - // `address` specifies that the field value must be either a valid hostname - // (for example, "example.com"), or a valid IP (v4 or v6) address (for example, - // "192.168.0.1", or "::1"). If the field value isn't a valid hostname or IP, - // an error message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid hostname, or ip address - // string value = 1 [(buf.validate.field).string.address = true]; - // } - // - // ``` - Address bool `protobuf:"varint,21,opt,name=address,oneof"` -} - -type StringRules_Uuid struct { - // `uuid` specifies that the field value must be a valid UUID as defined by - // [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the - // field value isn't a valid UUID, an error message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid UUID - // string value = 1 [(buf.validate.field).string.uuid = true]; - // } - // - // ``` - Uuid bool `protobuf:"varint,22,opt,name=uuid,oneof"` -} - -type StringRules_Tuuid struct { - // `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as - // defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes - // omitted. If the field value isn't a valid UUID without dashes, an error message - // will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid trimmed UUID - // string value = 1 [(buf.validate.field).string.tuuid = true]; - // } - // - // ``` - Tuuid bool `protobuf:"varint,33,opt,name=tuuid,oneof"` -} - -type StringRules_IpWithPrefixlen struct { - // `ip_with_prefixlen` specifies that the field value must be a valid IP - // (v4 or v6) address with prefix length—for example, "192.168.5.21/16" or - // "2001:0DB8:ABCD:0012::F1/64". If the field value isn't a valid IP with - // prefix length, an error message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid IP with prefix length - // string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true]; - // } - // - // ``` - IpWithPrefixlen bool `protobuf:"varint,26,opt,name=ip_with_prefixlen,json=ipWithPrefixlen,oneof"` -} - -type StringRules_Ipv4WithPrefixlen struct { - // `ipv4_with_prefixlen` specifies that the field value must be a valid - // IPv4 address with prefix length—for example, "192.168.5.21/16". If the - // field value isn't a valid IPv4 address with prefix length, an error - // message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid IPv4 address with prefix length - // string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true]; - // } - // - // ``` - Ipv4WithPrefixlen bool `protobuf:"varint,27,opt,name=ipv4_with_prefixlen,json=ipv4WithPrefixlen,oneof"` -} - -type StringRules_Ipv6WithPrefixlen struct { - // `ipv6_with_prefixlen` specifies that the field value must be a valid - // IPv6 address with prefix length—for example, "2001:0DB8:ABCD:0012::F1/64". - // If the field value is not a valid IPv6 address with prefix length, - // an error message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid IPv6 address prefix length - // string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true]; - // } - // - // ``` - Ipv6WithPrefixlen bool `protobuf:"varint,28,opt,name=ipv6_with_prefixlen,json=ipv6WithPrefixlen,oneof"` -} - -type StringRules_IpPrefix struct { - // `ip_prefix` specifies that the field value must be a valid IP (v4 or v6) - // prefix—for example, "192.168.0.0/16" or "2001:0DB8:ABCD:0012::0/64". - // - // The prefix must have all zeros for the unmasked bits. For example, - // "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the - // prefix, and the remaining 64 bits must be zero. - // - // If the field value isn't a valid IP prefix, an error message will be - // generated. - // - // ```proto - // - // message MyString { - // // must be a valid IP prefix - // string value = 1 [(buf.validate.field).string.ip_prefix = true]; - // } - // - // ``` - IpPrefix bool `protobuf:"varint,29,opt,name=ip_prefix,json=ipPrefix,oneof"` -} - -type StringRules_Ipv4Prefix struct { - // `ipv4_prefix` specifies that the field value must be a valid IPv4 - // prefix, for example "192.168.0.0/16". - // - // The prefix must have all zeros for the unmasked bits. For example, - // "192.168.0.0/16" designates the left-most 16 bits for the prefix, - // and the remaining 16 bits must be zero. - // - // If the field value isn't a valid IPv4 prefix, an error message - // will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid IPv4 prefix - // string value = 1 [(buf.validate.field).string.ipv4_prefix = true]; - // } - // - // ``` - Ipv4Prefix bool `protobuf:"varint,30,opt,name=ipv4_prefix,json=ipv4Prefix,oneof"` -} - -type StringRules_Ipv6Prefix struct { - // `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix—for - // example, "2001:0DB8:ABCD:0012::0/64". - // - // The prefix must have all zeros for the unmasked bits. For example, - // "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the - // prefix, and the remaining 64 bits must be zero. - // - // If the field value is not a valid IPv6 prefix, an error message will be - // generated. - // - // ```proto - // - // message MyString { - // // must be a valid IPv6 prefix - // string value = 1 [(buf.validate.field).string.ipv6_prefix = true]; - // } - // - // ``` - Ipv6Prefix bool `protobuf:"varint,31,opt,name=ipv6_prefix,json=ipv6Prefix,oneof"` -} - -type StringRules_HostAndPort struct { - // `host_and_port` specifies that the field value must be a valid host/port - // pair—for example, "example.com:8080". - // - // The host can be one of: - // - An IPv4 address in dotted decimal format—for example, "192.168.5.21". - // - An IPv6 address enclosed in square brackets—for example, "[2001:0DB8:ABCD:0012::F1]". - // - A hostname—for example, "example.com". - // - // The port is separated by a colon. It must be non-empty, with a decimal number - // in the range of 0-65535, inclusive. - HostAndPort bool `protobuf:"varint,32,opt,name=host_and_port,json=hostAndPort,oneof"` -} - -type StringRules_Ulid struct { - // `ulid` specifies that the field value must be a valid ULID (Universally Unique - // Lexicographically Sortable Identifier) as defined by the [ULID specification](https://github.com/ulid/spec). - // If the field value isn't a valid ULID, an error message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid ULID - // string value = 1 [(buf.validate.field).string.ulid = true]; - // } - // - // ``` - Ulid bool `protobuf:"varint,35,opt,name=ulid,oneof"` -} - -type StringRules_ProtobufFqn struct { - // `protobuf_fqn` specifies that the field value must be a valid fully-qualified - // Protobuf name as defined by the [Protobuf Language Specification](https://protobuf.com/docs/language-spec). - // - // A fully-qualified Protobuf name is a dot-separated list of Protobuf identifiers, - // where each identifier starts with a letter or underscore and is followed by zero or - // more letters, underscores, or digits. - // - // Examples: "buf.validate", "google.protobuf.Timestamp", "my_package.MyMessage". - // - // Note: historically, fully-qualified Protobuf names were represented with a leading - // dot (for example, ".buf.validate.StringRules"). Modern Protobuf does not use the - // leading dot, and most fully-qualified names are represented without it. Use - // `protobuf_dot_fqn` if a leading dot is required. - // - // If the field value isn't a valid fully-qualified Protobuf name, an error message - // will be generated. - // - // ```proto - // - // message MyString { - // // value must be a valid fully-qualified Protobuf name - // string value = 1 [(buf.validate.field).string.protobuf_fqn = true]; - // } - // - // ``` - ProtobufFqn bool `protobuf:"varint,37,opt,name=protobuf_fqn,json=protobufFqn,oneof"` -} - -type StringRules_ProtobufDotFqn struct { - // `protobuf_dot_fqn` specifies that the field value must be a valid fully-qualified - // Protobuf name with a leading dot, as defined by the - // [Protobuf Language Specification](https://protobuf.com/docs/language-spec). - // - // A fully-qualified Protobuf name with a leading dot is a dot followed by a - // dot-separated list of Protobuf identifiers, where each identifier starts with a - // letter or underscore and is followed by zero or more letters, underscores, or - // digits. - // - // Examples: ".buf.validate", ".google.protobuf.Timestamp", ".my_package.MyMessage". - // - // Note: this is the historical representation of fully-qualified Protobuf names, - // where a leading dot denotes an absolute reference. Modern Protobuf does not use - // the leading dot, and most fully-qualified names are represented without it. Most - // users will want to use `protobuf_fqn` instead. - // - // If the field value isn't a valid fully-qualified Protobuf name with a leading dot, - // an error message will be generated. - // - // ```proto - // - // message MyString { - // // value must be a valid fully-qualified Protobuf name with a leading dot - // string value = 1 [(buf.validate.field).string.protobuf_dot_fqn = true]; - // } - // - // ``` - ProtobufDotFqn bool `protobuf:"varint,38,opt,name=protobuf_dot_fqn,json=protobufDotFqn,oneof"` -} - -type StringRules_WellKnownRegex struct { - // `well_known_regex` specifies a common well-known pattern - // defined as a regex. If the field value doesn't match the well-known - // regex, an error message will be generated. - // - // ```proto - // - // message MyString { - // // must be a valid HTTP header value - // string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE]; - // } - // - // ``` - // - // #### KnownRegex - // - // `well_known_regex` contains some well-known patterns. - // - // | Name | Number | Description | - // |-------------------------------|--------|-------------------------------------------| - // | KNOWN_REGEX_UNSPECIFIED | 0 | | - // | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) | - // | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) | - WellKnownRegex KnownRegex `protobuf:"varint,24,opt,name=well_known_regex,json=wellKnownRegex,enum=buf.validate.KnownRegex,oneof"` -} - -func (*StringRules_Email) isStringRules_WellKnown() {} - -func (*StringRules_Hostname) isStringRules_WellKnown() {} - -func (*StringRules_Ip) isStringRules_WellKnown() {} - -func (*StringRules_Ipv4) isStringRules_WellKnown() {} - -func (*StringRules_Ipv6) isStringRules_WellKnown() {} - -func (*StringRules_Uri) isStringRules_WellKnown() {} - -func (*StringRules_UriRef) isStringRules_WellKnown() {} - -func (*StringRules_Address) isStringRules_WellKnown() {} - -func (*StringRules_Uuid) isStringRules_WellKnown() {} - -func (*StringRules_Tuuid) isStringRules_WellKnown() {} - -func (*StringRules_IpWithPrefixlen) isStringRules_WellKnown() {} - -func (*StringRules_Ipv4WithPrefixlen) isStringRules_WellKnown() {} - -func (*StringRules_Ipv6WithPrefixlen) isStringRules_WellKnown() {} - -func (*StringRules_IpPrefix) isStringRules_WellKnown() {} - -func (*StringRules_Ipv4Prefix) isStringRules_WellKnown() {} - -func (*StringRules_Ipv6Prefix) isStringRules_WellKnown() {} - -func (*StringRules_HostAndPort) isStringRules_WellKnown() {} - -func (*StringRules_Ulid) isStringRules_WellKnown() {} - -func (*StringRules_ProtobufFqn) isStringRules_WellKnown() {} - -func (*StringRules_ProtobufDotFqn) isStringRules_WellKnown() {} - -func (*StringRules_WellKnownRegex) isStringRules_WellKnown() {} - -// BytesRules describe the rules applied to `bytes` values. These rules -// may also be applied to the `google.protobuf.BytesValue` Well-Known-Type. -type BytesRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified bytes - // value. If the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyBytes { - // // must be "\x01\x02\x03\x04" - // bytes value = 1 [(buf.validate.field).bytes.const = "\x01\x02\x03\x04"]; - // } - // - // ``` - Const []byte `protobuf:"bytes,1,opt,name=const" json:"const,omitempty"` - // `len` requires the field value to have the specified length in bytes. - // If the field value doesn't match, an error message is generated. - // - // ```proto - // - // message MyBytes { - // // value length must be 4 bytes. - // optional bytes value = 1 [(buf.validate.field).bytes.len = 4]; - // } - // - // ``` - Len *uint64 `protobuf:"varint,13,opt,name=len" json:"len,omitempty"` - // `min_len` requires the field value to have at least the specified minimum - // length in bytes. - // If the field value doesn't meet the requirement, an error message is generated. - // - // ```proto - // - // message MyBytes { - // // value length must be at least 2 bytes. - // optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2]; - // } - // - // ``` - MinLen *uint64 `protobuf:"varint,2,opt,name=min_len,json=minLen" json:"min_len,omitempty"` - // `max_len` requires the field value to have at most the specified maximum - // length in bytes. - // If the field value exceeds the requirement, an error message is generated. - // - // ```proto - // - // message MyBytes { - // // must be at most 6 bytes. - // optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6]; - // } - // - // ``` - MaxLen *uint64 `protobuf:"varint,3,opt,name=max_len,json=maxLen" json:"max_len,omitempty"` - // `pattern` requires the field value to match the specified regular - // expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)). - // The value of the field must be valid UTF-8 or validation will fail with a - // runtime error. - // If the field value doesn't match the pattern, an error message is generated. - // - // ```proto - // - // message MyBytes { - // // value must match regex pattern "^[a-zA-Z0-9]+$". - // optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"]; - // } - // - // ``` - Pattern *string `protobuf:"bytes,4,opt,name=pattern" json:"pattern,omitempty"` - // `prefix` requires the field value to have the specified bytes at the - // beginning of the string. - // If the field value doesn't meet the requirement, an error message is generated. - // - // ```proto - // - // message MyBytes { - // // value does not have prefix \x01\x02 - // optional bytes value = 1 [(buf.validate.field).bytes.prefix = "\x01\x02"]; - // } - // - // ``` - Prefix []byte `protobuf:"bytes,5,opt,name=prefix" json:"prefix,omitempty"` - // `suffix` requires the field value to have the specified bytes at the end - // of the string. - // If the field value doesn't meet the requirement, an error message is generated. - // - // ```proto - // - // message MyBytes { - // // value does not have suffix \x03\x04 - // optional bytes value = 1 [(buf.validate.field).bytes.suffix = "\x03\x04"]; - // } - // - // ``` - Suffix []byte `protobuf:"bytes,6,opt,name=suffix" json:"suffix,omitempty"` - // `contains` requires the field value to have the specified bytes anywhere in - // the string. - // If the field value doesn't meet the requirement, an error message is generated. - // - // ```proto - // - // message MyBytes { - // // value does not contain \x02\x03 - // optional bytes value = 1 [(buf.validate.field).bytes.contains = "\x02\x03"]; - // } - // - // ``` - Contains []byte `protobuf:"bytes,7,opt,name=contains" json:"contains,omitempty"` - // `in` requires the field value to be equal to one of the specified - // values. If the field value doesn't match any of the specified values, an - // error message is generated. - // - // ```proto - // - // message MyBytes { - // // value must in ["\x01\x02", "\x02\x03", "\x03\x04"] - // optional bytes value = 1 [(buf.validate.field).bytes = { in: ["\x01\x02", "\x02\x03", "\x03\x04"] }]; - // } - // - // ``` - In [][]byte `protobuf:"bytes,8,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to be not equal to any of the specified - // values. - // If the field value matches any of the specified values, an error message is - // generated. - // - // ```proto - // - // message MyBytes { - // // value must not in ["\x01\x02", "\x02\x03", "\x03\x04"] - // optional bytes value = 1 [(buf.validate.field).bytes = { not_in: ["\x01\x02", "\x02\x03", "\x03\x04"] }]; - // } - // - // ``` - NotIn [][]byte `protobuf:"bytes,9,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // WellKnown rules provide advanced rules against common byte - // patterns - // - // Types that are assignable to WellKnown: - // - // *BytesRules_Ip - // *BytesRules_Ipv4 - // *BytesRules_Ipv6 - // *BytesRules_Uuid - WellKnown isBytesRules_WellKnown `protobuf_oneof:"well_known"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyBytes { - // bytes value = 1 [ - // (buf.validate.field).bytes.example = "\x01\x02", - // (buf.validate.field).bytes.example = "\x02\x03" - // ]; - // } - // - // ``` - Example [][]byte `protobuf:"bytes,14,rep,name=example" json:"example,omitempty"` -} - -func (x *BytesRules) Reset() { - *x = BytesRules{} - mi := &file_buf_validate_validate_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *BytesRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BytesRules) ProtoMessage() {} - -func (x *BytesRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[20] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BytesRules.ProtoReflect.Descriptor instead. -func (*BytesRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{20} -} - -func (x *BytesRules) GetConst() []byte { - if x != nil { - return x.Const - } - return nil -} - -func (x *BytesRules) GetLen() uint64 { - if x != nil && x.Len != nil { - return *x.Len - } - return 0 -} - -func (x *BytesRules) GetMinLen() uint64 { - if x != nil && x.MinLen != nil { - return *x.MinLen - } - return 0 -} - -func (x *BytesRules) GetMaxLen() uint64 { - if x != nil && x.MaxLen != nil { - return *x.MaxLen - } - return 0 -} - -func (x *BytesRules) GetPattern() string { - if x != nil && x.Pattern != nil { - return *x.Pattern - } - return "" -} - -func (x *BytesRules) GetPrefix() []byte { - if x != nil { - return x.Prefix - } - return nil -} - -func (x *BytesRules) GetSuffix() []byte { - if x != nil { - return x.Suffix - } - return nil -} - -func (x *BytesRules) GetContains() []byte { - if x != nil { - return x.Contains - } - return nil -} - -func (x *BytesRules) GetIn() [][]byte { - if x != nil { - return x.In - } - return nil -} - -func (x *BytesRules) GetNotIn() [][]byte { - if x != nil { - return x.NotIn - } - return nil -} - -func (m *BytesRules) GetWellKnown() isBytesRules_WellKnown { - if m != nil { - return m.WellKnown - } - return nil -} - -func (x *BytesRules) GetIp() bool { - if x, ok := x.GetWellKnown().(*BytesRules_Ip); ok { - return x.Ip - } - return false -} - -func (x *BytesRules) GetIpv4() bool { - if x, ok := x.GetWellKnown().(*BytesRules_Ipv4); ok { - return x.Ipv4 - } - return false -} - -func (x *BytesRules) GetIpv6() bool { - if x, ok := x.GetWellKnown().(*BytesRules_Ipv6); ok { - return x.Ipv6 - } - return false -} - -func (x *BytesRules) GetUuid() bool { - if x, ok := x.GetWellKnown().(*BytesRules_Uuid); ok { - return x.Uuid - } - return false -} - -func (x *BytesRules) GetExample() [][]byte { - if x != nil { - return x.Example - } - return nil -} - -type isBytesRules_WellKnown interface { - isBytesRules_WellKnown() -} - -type BytesRules_Ip struct { - // `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format. - // If the field value doesn't meet this rule, an error message is generated. - // - // ```proto - // - // message MyBytes { - // // must be a valid IP address - // optional bytes value = 1 [(buf.validate.field).bytes.ip = true]; - // } - // - // ``` - Ip bool `protobuf:"varint,10,opt,name=ip,oneof"` -} - -type BytesRules_Ipv4 struct { - // `ipv4` ensures that the field `value` is a valid IPv4 address in byte format. - // If the field value doesn't meet this rule, an error message is generated. - // - // ```proto - // - // message MyBytes { - // // must be a valid IPv4 address - // optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true]; - // } - // - // ``` - Ipv4 bool `protobuf:"varint,11,opt,name=ipv4,oneof"` -} - -type BytesRules_Ipv6 struct { - // `ipv6` ensures that the field `value` is a valid IPv6 address in byte format. - // If the field value doesn't meet this rule, an error message is generated. - // ```proto - // - // message MyBytes { - // // must be a valid IPv6 address - // optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true]; - // } - // - // ``` - Ipv6 bool `protobuf:"varint,12,opt,name=ipv6,oneof"` -} - -type BytesRules_Uuid struct { - // `uuid` ensures that the field value encodes 128-bit UUID data as defined - // by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). - // The field must contain exactly 16 bytes representing the UUID. If the - // field value isn't a valid UUID, an error message will be generated. - // - // ```proto - // - // message MyBytes { - // // must be a valid UUID - // optional bytes value = 1 [(buf.validate.field).bytes.uuid = true]; - // } - // - // ``` - Uuid bool `protobuf:"varint,15,opt,name=uuid,oneof"` -} - -func (*BytesRules_Ip) isBytesRules_WellKnown() {} - -func (*BytesRules_Ipv4) isBytesRules_WellKnown() {} - -func (*BytesRules_Ipv6) isBytesRules_WellKnown() {} - -func (*BytesRules_Uuid) isBytesRules_WellKnown() {} - -// EnumRules describe the rules applied to `enum` values. -type EnumRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` requires the field value to exactly match the specified enum value. - // If the field value doesn't match, an error message is generated. - // - // ```proto - // - // enum MyEnum { - // MY_ENUM_UNSPECIFIED = 0; - // MY_ENUM_VALUE1 = 1; - // MY_ENUM_VALUE2 = 2; - // } - // - // message MyMessage { - // // The field `value` must be exactly MY_ENUM_VALUE1. - // MyEnum value = 1 [(buf.validate.field).enum.const = 1]; - // } - // - // ``` - Const *int32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` - // `defined_only` requires the field value to be one of the defined values for - // this enum, failing on any undefined value. - // - // ```proto - // - // enum MyEnum { - // MY_ENUM_UNSPECIFIED = 0; - // MY_ENUM_VALUE1 = 1; - // MY_ENUM_VALUE2 = 2; - // } - // - // message MyMessage { - // // The field `value` must be a defined value of MyEnum. - // MyEnum value = 1 [(buf.validate.field).enum.defined_only = true]; - // } - // - // ``` - DefinedOnly *bool `protobuf:"varint,2,opt,name=defined_only,json=definedOnly" json:"defined_only,omitempty"` - // `in` requires the field value to be equal to one of the - // specified enum values. If the field value doesn't match any of the - // specified values, an error message is generated. - // - // ```proto - // - // enum MyEnum { - // MY_ENUM_UNSPECIFIED = 0; - // MY_ENUM_VALUE1 = 1; - // MY_ENUM_VALUE2 = 2; - // } - // - // message MyMessage { - // // The field `value` must be equal to one of the specified values. - // MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}]; - // } - // - // ``` - In []int32 `protobuf:"varint,3,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to be not equal to any of the - // specified enum values. If the field value matches one of the specified - // values, an error message is generated. - // - // ```proto - // - // enum MyEnum { - // MY_ENUM_UNSPECIFIED = 0; - // MY_ENUM_VALUE1 = 1; - // MY_ENUM_VALUE2 = 2; - // } - // - // message MyMessage { - // // The field `value` must not be equal to any of the specified values. - // MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}]; - // } - // - // ``` - NotIn []int32 `protobuf:"varint,4,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // enum MyEnum { - // MY_ENUM_UNSPECIFIED = 0; - // MY_ENUM_VALUE1 = 1; - // MY_ENUM_VALUE2 = 2; - // } - // - // message MyMessage { - // MyEnum value = 1 [ - // (buf.validate.field).enum.example = 1, - // (buf.validate.field).enum.example = 2 - // ]; - // } - // - // ``` - Example []int32 `protobuf:"varint,5,rep,name=example" json:"example,omitempty"` -} - -func (x *EnumRules) Reset() { - *x = EnumRules{} - mi := &file_buf_validate_validate_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *EnumRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EnumRules) ProtoMessage() {} - -func (x *EnumRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[21] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EnumRules.ProtoReflect.Descriptor instead. -func (*EnumRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{21} -} - -func (x *EnumRules) GetConst() int32 { - if x != nil && x.Const != nil { - return *x.Const - } - return 0 -} - -func (x *EnumRules) GetDefinedOnly() bool { - if x != nil && x.DefinedOnly != nil { - return *x.DefinedOnly - } - return false -} - -func (x *EnumRules) GetIn() []int32 { - if x != nil { - return x.In - } - return nil -} - -func (x *EnumRules) GetNotIn() []int32 { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *EnumRules) GetExample() []int32 { - if x != nil { - return x.Example - } - return nil -} - -// RepeatedRules describe the rules applied to `repeated` values. -type RepeatedRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `min_items` requires that this field must contain at least the specified - // minimum number of items. - // - // Note that `min_items = 1` is equivalent to setting a field as `required`. - // - // ```proto - // - // message MyRepeated { - // // value must contain at least 2 items - // repeated string value = 1 [(buf.validate.field).repeated.min_items = 2]; - // } - // - // ``` - MinItems *uint64 `protobuf:"varint,1,opt,name=min_items,json=minItems" json:"min_items,omitempty"` - // `max_items` denotes that this field must not exceed a - // certain number of items as the upper limit. If the field contains more - // items than specified, an error message will be generated, requiring the - // field to maintain no more than the specified number of items. - // - // ```proto - // - // message MyRepeated { - // // value must contain no more than 3 item(s) - // repeated string value = 1 [(buf.validate.field).repeated.max_items = 3]; - // } - // - // ``` - MaxItems *uint64 `protobuf:"varint,2,opt,name=max_items,json=maxItems" json:"max_items,omitempty"` - // `unique` indicates that all elements in this field must - // be unique. This rule is strictly applicable to scalar and enum - // types, with message types not being supported. - // - // ```proto - // - // message MyRepeated { - // // repeated value must contain unique items - // repeated string value = 1 [(buf.validate.field).repeated.unique = true]; - // } - // - // ``` - Unique *bool `protobuf:"varint,3,opt,name=unique" json:"unique,omitempty"` - // `items` details the rules to be applied to each item - // in the field. Even for repeated message fields, validation is executed - // against each item unless `ignore` is specified. - // - // ```proto - // - // message MyRepeated { - // // The items in the field `value` must follow the specified rules. - // repeated string value = 1 [(buf.validate.field).repeated.items = { - // string: { - // min_len: 3 - // max_len: 10 - // } - // }]; - // } - // - // ``` - // - // Note that the `required` rule does not apply. Repeated items - // cannot be unset. - Items *FieldRules `protobuf:"bytes,4,opt,name=items" json:"items,omitempty"` -} - -func (x *RepeatedRules) Reset() { - *x = RepeatedRules{} - mi := &file_buf_validate_validate_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *RepeatedRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RepeatedRules) ProtoMessage() {} - -func (x *RepeatedRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[22] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RepeatedRules.ProtoReflect.Descriptor instead. -func (*RepeatedRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{22} -} - -func (x *RepeatedRules) GetMinItems() uint64 { - if x != nil && x.MinItems != nil { - return *x.MinItems - } - return 0 -} - -func (x *RepeatedRules) GetMaxItems() uint64 { - if x != nil && x.MaxItems != nil { - return *x.MaxItems - } - return 0 -} - -func (x *RepeatedRules) GetUnique() bool { - if x != nil && x.Unique != nil { - return *x.Unique - } - return false -} - -func (x *RepeatedRules) GetItems() *FieldRules { - if x != nil { - return x.Items - } - return nil -} - -// MapRules describe the rules applied to `map` values. -type MapRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // Specifies the minimum number of key-value pairs allowed. If the field has - // fewer key-value pairs than specified, an error message is generated. - // - // ```proto - // - // message MyMap { - // // The field `value` must have at least 2 key-value pairs. - // map value = 1 [(buf.validate.field).map.min_pairs = 2]; - // } - // - // ``` - MinPairs *uint64 `protobuf:"varint,1,opt,name=min_pairs,json=minPairs" json:"min_pairs,omitempty"` - // Specifies the maximum number of key-value pairs allowed. If the field has - // more key-value pairs than specified, an error message is generated. - // - // ```proto - // - // message MyMap { - // // The field `value` must have at most 3 key-value pairs. - // map value = 1 [(buf.validate.field).map.max_pairs = 3]; - // } - // - // ``` - MaxPairs *uint64 `protobuf:"varint,2,opt,name=max_pairs,json=maxPairs" json:"max_pairs,omitempty"` - // Specifies the rules to be applied to each key in the field. - // - // ```proto - // - // message MyMap { - // // The keys in the field `value` must follow the specified rules. - // map value = 1 [(buf.validate.field).map.keys = { - // string: { - // min_len: 3 - // max_len: 10 - // } - // }]; - // } - // - // ``` - // - // Note that the `required` rule does not apply. Map keys cannot be unset. - Keys *FieldRules `protobuf:"bytes,4,opt,name=keys" json:"keys,omitempty"` - // Specifies the rules to be applied to the value of each key in the - // field. Message values will still have their validations evaluated unless - // `ignore` is specified. - // - // ```proto - // - // message MyMap { - // // The values in the field `value` must follow the specified rules. - // map value = 1 [(buf.validate.field).map.values = { - // string: { - // min_len: 5 - // max_len: 20 - // } - // }]; - // } - // - // ``` - // Note that the `required` rule does not apply. Map values cannot be unset. - Values *FieldRules `protobuf:"bytes,5,opt,name=values" json:"values,omitempty"` -} - -func (x *MapRules) Reset() { - *x = MapRules{} - mi := &file_buf_validate_validate_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *MapRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MapRules) ProtoMessage() {} - -func (x *MapRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[23] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MapRules.ProtoReflect.Descriptor instead. -func (*MapRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{23} -} - -func (x *MapRules) GetMinPairs() uint64 { - if x != nil && x.MinPairs != nil { - return *x.MinPairs - } - return 0 -} - -func (x *MapRules) GetMaxPairs() uint64 { - if x != nil && x.MaxPairs != nil { - return *x.MaxPairs - } - return 0 -} - -func (x *MapRules) GetKeys() *FieldRules { - if x != nil { - return x.Keys - } - return nil -} - -func (x *MapRules) GetValues() *FieldRules { - if x != nil { - return x.Values - } - return nil -} - -// AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type. -type AnyRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // `in` requires the field's `type_url` to be equal to one of the - // specified values. If it doesn't match any of the specified values, an error - // message is generated. - // - // ```proto - // - // message MyAny { - // // The `value` field must have a `type_url` equal to one of the specified values. - // google.protobuf.Any value = 1 [(buf.validate.field).any = { - // in: ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"] - // }]; - // } - // - // ``` - In []string `protobuf:"bytes,2,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated. - // - // ```proto - // - // message MyAny { - // // The `value` field must not have a `type_url` equal to any of the specified values. - // google.protobuf.Any value = 1 [(buf.validate.field).any = { - // not_in: ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"] - // }]; - // } - // - // ``` - NotIn []string `protobuf:"bytes,3,rep,name=not_in,json=notIn" json:"not_in,omitempty"` -} - -func (x *AnyRules) Reset() { - *x = AnyRules{} - mi := &file_buf_validate_validate_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *AnyRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AnyRules) ProtoMessage() {} - -func (x *AnyRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[24] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AnyRules.ProtoReflect.Descriptor instead. -func (*AnyRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{24} -} - -func (x *AnyRules) GetIn() []string { - if x != nil { - return x.In - } - return nil -} - -func (x *AnyRules) GetNotIn() []string { - if x != nil { - return x.NotIn - } - return nil -} - -// DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type. -type DurationRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly. - // If the field's value deviates from the specified value, an error message - // will be generated. - // - // ```proto - // - // message MyDuration { - // // value must equal 5s - // google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = { seconds: 5 }]; - // } - // - // ``` - Const *durationpb.Duration `protobuf:"bytes,2,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *DurationRules_Lt - // *DurationRules_Lte - LessThan isDurationRules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *DurationRules_Gt - // *DurationRules_Gte - GreaterThan isDurationRules_GreaterThan `protobuf_oneof:"greater_than"` - // `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type. - // If the field's value doesn't correspond to any of the specified values, - // an error message will be generated. - // - // ```proto - // - // message MyDuration { - // // must be in list [1s, 2s, 3s] - // google.protobuf.Duration value = 1 [(buf.validate.field).duration = { - // in: [{ seconds: 1 }, { seconds: 2 }, { seconds: 3 }] - // }]; - // } - // - // ``` - In []*durationpb.Duration `protobuf:"bytes,7,rep,name=in" json:"in,omitempty"` - // `not_in` denotes that the field must not be equal to - // any of the specified values of the `google.protobuf.Duration` type. - // If the field's value matches any of these values, an error message will be - // generated. - // - // ```proto - // - // message MyDuration { - // // value must not be in list [1s, 2s, 3s] - // google.protobuf.Duration value = 1 [(buf.validate.field).duration = { - // not_in: [{ seconds: 1 }, { seconds: 2 }, { seconds: 3 }] - // }]; - // } - // - // ``` - NotIn []*durationpb.Duration `protobuf:"bytes,8,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyDuration { - // google.protobuf.Duration value = 1 [ - // (buf.validate.field).duration.example = { seconds: 1 }, - // (buf.validate.field).duration.example = { seconds: 2 } - // ]; - // } - // - // ``` - Example []*durationpb.Duration `protobuf:"bytes,9,rep,name=example" json:"example,omitempty"` -} - -func (x *DurationRules) Reset() { - *x = DurationRules{} - mi := &file_buf_validate_validate_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DurationRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DurationRules) ProtoMessage() {} - -func (x *DurationRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[25] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DurationRules.ProtoReflect.Descriptor instead. -func (*DurationRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{25} -} - -func (x *DurationRules) GetConst() *durationpb.Duration { - if x != nil { - return x.Const - } - return nil -} - -func (m *DurationRules) GetLessThan() isDurationRules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *DurationRules) GetLt() *durationpb.Duration { - if x, ok := x.GetLessThan().(*DurationRules_Lt); ok { - return x.Lt - } - return nil -} - -func (x *DurationRules) GetLte() *durationpb.Duration { - if x, ok := x.GetLessThan().(*DurationRules_Lte); ok { - return x.Lte - } - return nil -} - -func (m *DurationRules) GetGreaterThan() isDurationRules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *DurationRules) GetGt() *durationpb.Duration { - if x, ok := x.GetGreaterThan().(*DurationRules_Gt); ok { - return x.Gt - } - return nil -} - -func (x *DurationRules) GetGte() *durationpb.Duration { - if x, ok := x.GetGreaterThan().(*DurationRules_Gte); ok { - return x.Gte - } - return nil -} - -func (x *DurationRules) GetIn() []*durationpb.Duration { - if x != nil { - return x.In - } - return nil -} - -func (x *DurationRules) GetNotIn() []*durationpb.Duration { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *DurationRules) GetExample() []*durationpb.Duration { - if x != nil { - return x.Example - } - return nil -} - -type isDurationRules_LessThan interface { - isDurationRules_LessThan() -} - -type DurationRules_Lt struct { - // `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type, - // exclusive. If the field's value is greater than or equal to the specified - // value, an error message will be generated. - // - // ```proto - // - // message MyDuration { - // // must be less than 5s - // google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 5 }]; - // } - // - // ``` - Lt *durationpb.Duration `protobuf:"bytes,3,opt,name=lt,oneof"` -} - -type DurationRules_Lte struct { - // `lte` indicates that the field must be less than or equal to the specified - // value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value, - // an error message will be generated. - // - // ```proto - // - // message MyDuration { - // // must be less than or equal to 10s - // google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = { seconds: 10 }]; - // } - // - // ``` - Lte *durationpb.Duration `protobuf:"bytes,4,opt,name=lte,oneof"` -} - -func (*DurationRules_Lt) isDurationRules_LessThan() {} - -func (*DurationRules_Lte) isDurationRules_LessThan() {} - -type isDurationRules_GreaterThan interface { - isDurationRules_GreaterThan() -} - -type DurationRules_Gt struct { - // `gt` requires the duration field value to be greater than the specified - // value (exclusive). If the value of `gt` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyDuration { - // // duration must be greater than 5s [duration.gt] - // google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }]; - // - // // duration must be greater than 5s and less than 10s [duration.gt_lt] - // google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }]; - // - // // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive] - // google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }]; - // } - // - // ``` - Gt *durationpb.Duration `protobuf:"bytes,5,opt,name=gt,oneof"` -} - -type DurationRules_Gte struct { - // `gte` requires the duration field value to be greater than or equal to the - // specified value (exclusive). If the value of `gte` is larger than a - // specified `lt` or `lte`, the range is reversed, and the field value must - // be outside the specified range. If the field value doesn't meet the - // required conditions, an error message is generated. - // - // ```proto - // - // message MyDuration { - // // duration must be greater than or equal to 5s [duration.gte] - // google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }]; - // - // // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt] - // google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }]; - // - // // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive] - // google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }]; - // } - // - // ``` - Gte *durationpb.Duration `protobuf:"bytes,6,opt,name=gte,oneof"` -} - -func (*DurationRules_Gt) isDurationRules_GreaterThan() {} - -func (*DurationRules_Gte) isDurationRules_GreaterThan() {} - -// FieldMaskRules describe rules applied exclusively to the `google.protobuf.FieldMask` well-known type. -type FieldMaskRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` dictates that the field must match the specified value of the `google.protobuf.FieldMask` type exactly. - // If the field's value deviates from the specified value, an error message - // will be generated. - // - // ```proto - // - // message MyFieldMask { - // // value must equal ["a"] - // google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask.const = { - // paths: ["a"] - // }]; - // } - // - // ``` - Const *fieldmaskpb.FieldMask `protobuf:"bytes,1,opt,name=const" json:"const,omitempty"` - // `in` requires the field value to only contain paths matching specified - // values or their subpaths. - // If any of the field value's paths doesn't match the rule, - // an error message is generated. - // See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask - // - // ```proto - // - // message MyFieldMask { - // // The `value` FieldMask must only contain paths listed in `in`. - // google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = { - // in: ["a", "b", "c.a"] - // }]; - // } - // - // ``` - In []string `protobuf:"bytes,2,rep,name=in" json:"in,omitempty"` - // `not_in` requires the field value to not contain paths matching specified - // values or their subpaths. - // If any of the field value's paths matches the rule, - // an error message is generated. - // See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask - // - // ```proto - // - // message MyFieldMask { - // // The `value` FieldMask shall not contain paths listed in `not_in`. - // google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = { - // not_in: ["forbidden", "immutable", "c.a"] - // }]; - // } - // - // ``` - NotIn []string `protobuf:"bytes,3,rep,name=not_in,json=notIn" json:"not_in,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyFieldMask { - // google.protobuf.FieldMask value = 1 [ - // (buf.validate.field).field_mask.example = { paths: ["a", "b"] }, - // (buf.validate.field).field_mask.example = { paths: ["c.a", "d"] } - // ]; - // } - // - // ``` - Example []*fieldmaskpb.FieldMask `protobuf:"bytes,4,rep,name=example" json:"example,omitempty"` -} - -func (x *FieldMaskRules) Reset() { - *x = FieldMaskRules{} - mi := &file_buf_validate_validate_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FieldMaskRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FieldMaskRules) ProtoMessage() {} - -func (x *FieldMaskRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[26] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FieldMaskRules.ProtoReflect.Descriptor instead. -func (*FieldMaskRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{26} -} - -func (x *FieldMaskRules) GetConst() *fieldmaskpb.FieldMask { - if x != nil { - return x.Const - } - return nil -} - -func (x *FieldMaskRules) GetIn() []string { - if x != nil { - return x.In - } - return nil -} - -func (x *FieldMaskRules) GetNotIn() []string { - if x != nil { - return x.NotIn - } - return nil -} - -func (x *FieldMaskRules) GetExample() []*fieldmaskpb.FieldMask { - if x != nil { - return x.Example - } - return nil -} - -// TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type. -type TimestampRules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - // `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated. - // - // ```proto - // - // message MyTimestamp { - // // value must equal 2023-05-03T10:00:00Z - // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}]; - // } - // - // ``` - Const *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=const" json:"const,omitempty"` - // Types that are assignable to LessThan: - // - // *TimestampRules_Lt - // *TimestampRules_Lte - // *TimestampRules_LtNow - LessThan isTimestampRules_LessThan `protobuf_oneof:"less_than"` - // Types that are assignable to GreaterThan: - // - // *TimestampRules_Gt - // *TimestampRules_Gte - // *TimestampRules_GtNow - GreaterThan isTimestampRules_GreaterThan `protobuf_oneof:"greater_than"` - // `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated. - // - // ```proto - // - // message MyTimestamp { - // // must be within 1 hour of now - // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}]; - // } - // - // ``` - Within *durationpb.Duration `protobuf:"bytes,9,opt,name=within" json:"within,omitempty"` - // `example` specifies values that the field may have. These values SHOULD - // conform to other rules. `example` values will not impact validation - // but may be used as helpful guidance on how to populate the given field. - // - // ```proto - // - // message MyTimestamp { - // google.protobuf.Timestamp value = 1 [ - // (buf.validate.field).timestamp.example = { seconds: 1672444800 }, - // (buf.validate.field).timestamp.example = { seconds: 1672531200 } - // ]; - // } - // - // ``` - Example []*timestamppb.Timestamp `protobuf:"bytes,10,rep,name=example" json:"example,omitempty"` -} - -func (x *TimestampRules) Reset() { - *x = TimestampRules{} - mi := &file_buf_validate_validate_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *TimestampRules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TimestampRules) ProtoMessage() {} - -func (x *TimestampRules) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[27] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TimestampRules.ProtoReflect.Descriptor instead. -func (*TimestampRules) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{27} -} - -func (x *TimestampRules) GetConst() *timestamppb.Timestamp { - if x != nil { - return x.Const - } - return nil -} - -func (m *TimestampRules) GetLessThan() isTimestampRules_LessThan { - if m != nil { - return m.LessThan - } - return nil -} - -func (x *TimestampRules) GetLt() *timestamppb.Timestamp { - if x, ok := x.GetLessThan().(*TimestampRules_Lt); ok { - return x.Lt - } - return nil -} - -func (x *TimestampRules) GetLte() *timestamppb.Timestamp { - if x, ok := x.GetLessThan().(*TimestampRules_Lte); ok { - return x.Lte - } - return nil -} - -func (x *TimestampRules) GetLtNow() bool { - if x, ok := x.GetLessThan().(*TimestampRules_LtNow); ok { - return x.LtNow - } - return false -} - -func (m *TimestampRules) GetGreaterThan() isTimestampRules_GreaterThan { - if m != nil { - return m.GreaterThan - } - return nil -} - -func (x *TimestampRules) GetGt() *timestamppb.Timestamp { - if x, ok := x.GetGreaterThan().(*TimestampRules_Gt); ok { - return x.Gt - } - return nil -} - -func (x *TimestampRules) GetGte() *timestamppb.Timestamp { - if x, ok := x.GetGreaterThan().(*TimestampRules_Gte); ok { - return x.Gte - } - return nil -} - -func (x *TimestampRules) GetGtNow() bool { - if x, ok := x.GetGreaterThan().(*TimestampRules_GtNow); ok { - return x.GtNow - } - return false -} - -func (x *TimestampRules) GetWithin() *durationpb.Duration { - if x != nil { - return x.Within - } - return nil -} - -func (x *TimestampRules) GetExample() []*timestamppb.Timestamp { - if x != nil { - return x.Example - } - return nil -} - -type isTimestampRules_LessThan interface { - isTimestampRules_LessThan() -} - -type TimestampRules_Lt struct { - // `lt` requires the timestamp field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated. - // - // ```proto - // - // message MyTimestamp { - // // timestamp must be less than '2023-01-01T00:00:00Z' [timestamp.lt] - // google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lt = { seconds: 1672444800 }]; - // } - // - // ``` - Lt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=lt,oneof"` -} - -type TimestampRules_Lte struct { - // `lte` requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated. - // - // ```proto - // - // message MyTimestamp { - // // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte] - // google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }]; - // } - // - // ``` - Lte *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=lte,oneof"` -} - -type TimestampRules_LtNow struct { - // `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule. - // - // ```proto - // - // message MyTimestamp { - // // must be less than now - // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true]; - // } - // - // ``` - LtNow bool `protobuf:"varint,7,opt,name=lt_now,json=ltNow,oneof"` -} - -func (*TimestampRules_Lt) isTimestampRules_LessThan() {} - -func (*TimestampRules_Lte) isTimestampRules_LessThan() {} - -func (*TimestampRules_LtNow) isTimestampRules_LessThan() {} - -type isTimestampRules_GreaterThan interface { - isTimestampRules_GreaterThan() -} - -type TimestampRules_Gt struct { - // `gt` requires the timestamp field value to be greater than the specified - // value (exclusive). If the value of `gt` is larger than a specified `lt` - // or `lte`, the range is reversed, and the field value must be outside the - // specified range. If the field value doesn't meet the required conditions, - // an error message is generated. - // - // ```proto - // - // message MyTimestamp { - // // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt] - // google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }]; - // - // // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt] - // google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }]; - // - // // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive] - // google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }]; - // } - // - // ``` - Gt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=gt,oneof"` -} - -type TimestampRules_Gte struct { - // `gte` requires the timestamp field value to be greater than or equal to the - // specified value (exclusive). If the value of `gte` is larger than a - // specified `lt` or `lte`, the range is reversed, and the field value - // must be outside the specified range. If the field value doesn't meet - // the required conditions, an error message is generated. - // - // ```proto - // - // message MyTimestamp { - // // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte] - // google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }]; - // - // // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt] - // google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }]; - // - // // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive] - // google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }]; - // } - // - // ``` - Gte *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=gte,oneof"` -} - -type TimestampRules_GtNow struct { - // `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule. - // - // ```proto - // - // message MyTimestamp { - // // must be greater than now - // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true]; - // } - // - // ``` - GtNow bool `protobuf:"varint,8,opt,name=gt_now,json=gtNow,oneof"` -} - -func (*TimestampRules_Gt) isTimestampRules_GreaterThan() {} - -func (*TimestampRules_Gte) isTimestampRules_GreaterThan() {} - -func (*TimestampRules_GtNow) isTimestampRules_GreaterThan() {} - -// `Violations` is a collection of `Violation` messages. This message type is returned by -// Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules. -// Each individual violation is represented by a `Violation` message. -type Violations struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected. - Violations []*Violation `protobuf:"bytes,1,rep,name=violations" json:"violations,omitempty"` -} - -func (x *Violations) Reset() { - *x = Violations{} - mi := &file_buf_validate_validate_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Violations) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Violations) ProtoMessage() {} - -func (x *Violations) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[28] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Violations.ProtoReflect.Descriptor instead. -func (*Violations) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{28} -} - -func (x *Violations) GetViolations() []*Violation { - if x != nil { - return x.Violations - } - return nil -} - -// `Violation` represents a single instance where a validation rule, expressed -// as a `Rule`, was not met. It provides information about the field that -// caused the violation, the specific rule that wasn't fulfilled, and a -// human-readable error message. -// -// For example, consider the following message: -// -// ```proto -// -// message User { -// int32 age = 1 [(buf.validate.field).cel = { -// id: "user.age", -// expression: "this < 18 ? 'User must be at least 18 years old' : ''", -// }]; -// } -// -// ``` -// -// It could produce the following violation: -// -// ```json -// -// { -// "ruleId": "user.age", -// "message": "User must be at least 18 years old", -// "field": { -// "elements": [ -// { -// "fieldNumber": 1, -// "fieldName": "age", -// "fieldType": "TYPE_INT32" -// } -// ] -// }, -// "rule": { -// "elements": [ -// { -// "fieldNumber": 23, -// "fieldName": "cel", -// "fieldType": "TYPE_MESSAGE", -// "index": "0" -// } -// ] -// } -// } -// -// ``` -type Violation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // `field` is a machine-readable path to the field that failed validation. - // This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation. - // - // For example, consider the following message: - // - // ```proto - // - // message Message { - // bool a = 1 [(buf.validate.field).required = true]; - // } - // - // ``` - // - // It could produce the following violation: - // - // ```textproto - // - // violation { - // field { element { field_number: 1, field_name: "a", field_type: 8 } } - // ... - // } - // - // ``` - Field *FieldPath `protobuf:"bytes,5,opt,name=field" json:"field,omitempty"` - // `rule` is a machine-readable path that points to the specific rule that failed validation. - // This will be a nested field starting from the FieldRules of the field that failed validation. - // For custom rules, this will provide the path of the rule, e.g. `cel[0]`. - // - // For example, consider the following message: - // - // ```proto - // - // message Message { - // bool a = 1 [(buf.validate.field).required = true]; - // bool b = 2 [(buf.validate.field).cel = { - // id: "custom_rule", - // expression: "!this ? 'b must be true': ''" - // }]; - // } - // - // ``` - // - // It could produce the following violations: - // - // ```textproto - // - // violation { - // rule { element { field_number: 25, field_name: "required", field_type: 8 } } - // ... - // } - // - // violation { - // rule { element { field_number: 23, field_name: "cel", field_type: 11, index: 0 } } - // ... - // } - // - // ``` - Rule *FieldPath `protobuf:"bytes,6,opt,name=rule" json:"rule,omitempty"` - // `rule_id` is the unique identifier of the `Rule` that was not fulfilled. - // This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated. - RuleId *string `protobuf:"bytes,2,opt,name=rule_id,json=ruleId" json:"rule_id,omitempty"` - // `message` is a human-readable error message that describes the nature of the violation. - // This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation. - Message *string `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` - // `for_key` indicates whether the violation was caused by a map key, rather than a value. - ForKey *bool `protobuf:"varint,4,opt,name=for_key,json=forKey" json:"for_key,omitempty"` -} - -func (x *Violation) Reset() { - *x = Violation{} - mi := &file_buf_validate_validate_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Violation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Violation) ProtoMessage() {} - -func (x *Violation) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[29] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Violation.ProtoReflect.Descriptor instead. -func (*Violation) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{29} -} - -func (x *Violation) GetField() *FieldPath { - if x != nil { - return x.Field - } - return nil -} - -func (x *Violation) GetRule() *FieldPath { - if x != nil { - return x.Rule - } - return nil -} - -func (x *Violation) GetRuleId() string { - if x != nil && x.RuleId != nil { - return *x.RuleId - } - return "" -} - -func (x *Violation) GetMessage() string { - if x != nil && x.Message != nil { - return *x.Message - } - return "" -} - -func (x *Violation) GetForKey() bool { - if x != nil && x.ForKey != nil { - return *x.ForKey - } - return false -} - -// `FieldPath` provides a path to a nested protobuf field. -// -// This message provides enough information to render a dotted field path even without protobuf descriptors. -// It also provides enough information to resolve a nested field through unknown wire data. -type FieldPath struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // `elements` contains each element of the path, starting from the root and recursing downward. - Elements []*FieldPathElement `protobuf:"bytes,1,rep,name=elements" json:"elements,omitempty"` -} - -func (x *FieldPath) Reset() { - *x = FieldPath{} - mi := &file_buf_validate_validate_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FieldPath) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FieldPath) ProtoMessage() {} - -func (x *FieldPath) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[30] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FieldPath.ProtoReflect.Descriptor instead. -func (*FieldPath) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{30} -} - -func (x *FieldPath) GetElements() []*FieldPathElement { - if x != nil { - return x.Elements - } - return nil -} - -// `FieldPathElement` provides enough information to nest through a single protobuf field. -// -// If the selected field is a map or repeated field, the `subscript` value selects a specific element from it. -// A path that refers to a value nested under a map key or repeated field index will have a `subscript` value. -// The `field_type` field allows unambiguous resolution of a field even if descriptors are not available. -type FieldPathElement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // `field_number` is the field number this path element refers to. - FieldNumber *int32 `protobuf:"varint,1,opt,name=field_number,json=fieldNumber" json:"field_number,omitempty"` - // `field_name` contains the field name this path element refers to. - // This can be used to display a human-readable path even if the field number is unknown. - FieldName *string `protobuf:"bytes,2,opt,name=field_name,json=fieldName" json:"field_name,omitempty"` - // `field_type` specifies the type of this field. When using reflection, this value is not needed. - // - // This value is provided to make it possible to traverse unknown fields through wire data. - // When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes. - // - // N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and - // can be explicitly used in Protocol Buffers 2023 Edition. - // - // [1]: https://protobuf.dev/programming-guides/encoding/#packed - // [2]: https://protobuf.dev/programming-guides/encoding/#groups - FieldType *descriptorpb.FieldDescriptorProto_Type `protobuf:"varint,3,opt,name=field_type,json=fieldType,enum=google.protobuf.FieldDescriptorProto_Type" json:"field_type,omitempty"` - // `key_type` specifies the map key type of this field. This value is useful when traversing - // unknown fields through wire data: specifically, it allows handling the differences between - // different integer encodings. - KeyType *descriptorpb.FieldDescriptorProto_Type `protobuf:"varint,4,opt,name=key_type,json=keyType,enum=google.protobuf.FieldDescriptorProto_Type" json:"key_type,omitempty"` - // `value_type` specifies map value type of this field. This is useful if you want to display a - // value inside unknown fields through wire data. - ValueType *descriptorpb.FieldDescriptorProto_Type `protobuf:"varint,5,opt,name=value_type,json=valueType,enum=google.protobuf.FieldDescriptorProto_Type" json:"value_type,omitempty"` - // `subscript` contains a repeated index or map key, if this path element nests into a repeated or map field. - // - // Types that are assignable to Subscript: - // - // *FieldPathElement_Index - // *FieldPathElement_BoolKey - // *FieldPathElement_IntKey - // *FieldPathElement_UintKey - // *FieldPathElement_StringKey - Subscript isFieldPathElement_Subscript `protobuf_oneof:"subscript"` -} - -func (x *FieldPathElement) Reset() { - *x = FieldPathElement{} - mi := &file_buf_validate_validate_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FieldPathElement) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FieldPathElement) ProtoMessage() {} - -func (x *FieldPathElement) ProtoReflect() protoreflect.Message { - mi := &file_buf_validate_validate_proto_msgTypes[31] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FieldPathElement.ProtoReflect.Descriptor instead. -func (*FieldPathElement) Descriptor() ([]byte, []int) { - return file_buf_validate_validate_proto_rawDescGZIP(), []int{31} -} - -func (x *FieldPathElement) GetFieldNumber() int32 { - if x != nil && x.FieldNumber != nil { - return *x.FieldNumber - } - return 0 -} - -func (x *FieldPathElement) GetFieldName() string { - if x != nil && x.FieldName != nil { - return *x.FieldName - } - return "" -} - -func (x *FieldPathElement) GetFieldType() descriptorpb.FieldDescriptorProto_Type { - if x != nil && x.FieldType != nil { - return *x.FieldType - } - return descriptorpb.FieldDescriptorProto_Type(1) -} - -func (x *FieldPathElement) GetKeyType() descriptorpb.FieldDescriptorProto_Type { - if x != nil && x.KeyType != nil { - return *x.KeyType - } - return descriptorpb.FieldDescriptorProto_Type(1) -} - -func (x *FieldPathElement) GetValueType() descriptorpb.FieldDescriptorProto_Type { - if x != nil && x.ValueType != nil { - return *x.ValueType - } - return descriptorpb.FieldDescriptorProto_Type(1) -} - -func (m *FieldPathElement) GetSubscript() isFieldPathElement_Subscript { - if m != nil { - return m.Subscript - } - return nil -} - -func (x *FieldPathElement) GetIndex() uint64 { - if x, ok := x.GetSubscript().(*FieldPathElement_Index); ok { - return x.Index - } - return 0 -} - -func (x *FieldPathElement) GetBoolKey() bool { - if x, ok := x.GetSubscript().(*FieldPathElement_BoolKey); ok { - return x.BoolKey - } - return false -} - -func (x *FieldPathElement) GetIntKey() int64 { - if x, ok := x.GetSubscript().(*FieldPathElement_IntKey); ok { - return x.IntKey - } - return 0 -} - -func (x *FieldPathElement) GetUintKey() uint64 { - if x, ok := x.GetSubscript().(*FieldPathElement_UintKey); ok { - return x.UintKey - } - return 0 -} - -func (x *FieldPathElement) GetStringKey() string { - if x, ok := x.GetSubscript().(*FieldPathElement_StringKey); ok { - return x.StringKey - } - return "" -} - -type isFieldPathElement_Subscript interface { - isFieldPathElement_Subscript() -} - -type FieldPathElement_Index struct { - // `index` specifies a 0-based index into a repeated field. - Index uint64 `protobuf:"varint,6,opt,name=index,oneof"` -} - -type FieldPathElement_BoolKey struct { - // `bool_key` specifies a map key of type bool. - BoolKey bool `protobuf:"varint,7,opt,name=bool_key,json=boolKey,oneof"` -} - -type FieldPathElement_IntKey struct { - // `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64. - IntKey int64 `protobuf:"varint,8,opt,name=int_key,json=intKey,oneof"` -} - -type FieldPathElement_UintKey struct { - // `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64. - UintKey uint64 `protobuf:"varint,9,opt,name=uint_key,json=uintKey,oneof"` -} - -type FieldPathElement_StringKey struct { - // `string_key` specifies a map key of type string. - StringKey string `protobuf:"bytes,10,opt,name=string_key,json=stringKey,oneof"` -} - -func (*FieldPathElement_Index) isFieldPathElement_Subscript() {} - -func (*FieldPathElement_BoolKey) isFieldPathElement_Subscript() {} - -func (*FieldPathElement_IntKey) isFieldPathElement_Subscript() {} - -func (*FieldPathElement_UintKey) isFieldPathElement_Subscript() {} - -func (*FieldPathElement_StringKey) isFieldPathElement_Subscript() {} - -var file_buf_validate_validate_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptorpb.MessageOptions)(nil), - ExtensionType: (*MessageRules)(nil), - Field: 1159, - Name: "buf.validate.message", - Tag: "bytes,1159,opt,name=message", - Filename: "buf/validate/validate.proto", - }, - { - ExtendedType: (*descriptorpb.OneofOptions)(nil), - ExtensionType: (*OneofRules)(nil), - Field: 1159, - Name: "buf.validate.oneof", - Tag: "bytes,1159,opt,name=oneof", - Filename: "buf/validate/validate.proto", - }, - { - ExtendedType: (*descriptorpb.FieldOptions)(nil), - ExtensionType: (*FieldRules)(nil), - Field: 1159, - Name: "buf.validate.field", - Tag: "bytes,1159,opt,name=field", - Filename: "buf/validate/validate.proto", - }, - { - ExtendedType: (*descriptorpb.FieldOptions)(nil), - ExtensionType: (*PredefinedRules)(nil), - Field: 1160, - Name: "buf.validate.predefined", - Tag: "bytes,1160,opt,name=predefined", - Filename: "buf/validate/validate.proto", - }, -} - -// Extension fields to descriptorpb.MessageOptions. -var ( - // Rules specify the validations to be performed on this message. By default, - // no validation is performed against a message. - // - // optional buf.validate.MessageRules message = 1159; - E_Message = &file_buf_validate_validate_proto_extTypes[0] -) - -// Extension fields to descriptorpb.OneofOptions. -var ( - // Rules specify the validations to be performed on this oneof. By default, - // no validation is performed against a oneof. - // - // optional buf.validate.OneofRules oneof = 1159; - E_Oneof = &file_buf_validate_validate_proto_extTypes[1] -) - -// Extension fields to descriptorpb.FieldOptions. -var ( - // Rules specify the validations to be performed on this field. By default, - // no validation is performed against a field. - // - // optional buf.validate.FieldRules field = 1159; - E_Field = &file_buf_validate_validate_proto_extTypes[2] - // Specifies predefined rules. When extending a standard rule message, - // this adds additional CEL expressions that apply when the extension is used. - // - // ```proto - // - // extend buf.validate.Int32Rules { - // bool is_zero = 1001 [(buf.validate.predefined).cel = { - // id: "int32.is_zero", - // message: "must be zero", - // expression: "!rule || this == 0", - // }]; - // } - // - // message Foo { - // int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true]; - // } - // - // ``` - // - // optional buf.validate.PredefinedRules predefined = 1160; - E_Predefined = &file_buf_validate_validate_proto_extTypes[3] -) - -var File_buf_validate_validate_proto protoreflect.FileDescriptor - -var file_buf_validate_validate_proto_rawDesc = []byte{ - 0x0a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x62, - 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x20, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x50, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0xa1, 0x01, 0x0a, 0x0c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x65, 0x6c, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x65, 0x6c, - 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x03, 0x63, 0x65, - 0x6c, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x03, 0x63, 0x65, 0x6c, - 0x12, 0x34, 0x0a, 0x05, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x52, 0x75, 0x6c, 0x65, 0x52, - 0x05, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x08, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x46, 0x0a, 0x10, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x22, 0x28, - 0x0a, 0x0a, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x22, 0xe3, 0x0a, 0x0a, 0x0a, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x65, 0x6c, 0x5f, 0x65, - 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0d, 0x63, 0x65, 0x6c, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, - 0x0a, 0x03, 0x63, 0x65, 0x6c, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x75, - 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, - 0x03, 0x63, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x12, 0x2c, 0x0a, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x14, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, - 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x52, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x12, 0x30, - 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x12, 0x33, 0x0a, 0x06, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, - 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x06, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, - 0x52, 0x05, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x30, 0x0a, 0x05, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x48, 0x00, 0x52, 0x05, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x33, 0x0a, 0x06, 0x75, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x66, 0x2e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, - 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x06, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x33, - 0x0a, 0x06, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x49, - 0x6e, 0x74, 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x06, 0x75, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x2e, 0x53, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, - 0x52, 0x06, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x36, 0x0a, - 0x07, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x07, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x36, 0x0a, 0x07, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x52, 0x75, 0x6c, - 0x65, 0x73, 0x48, 0x00, 0x52, 0x07, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x39, 0x0a, - 0x08, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x53, - 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x39, 0x0a, 0x08, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x75, 0x66, - 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x46, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x12, 0x2d, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, - 0x6f, 0x6c, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, - 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x48, 0x00, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x04, 0x65, 0x6e, 0x75, - 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x48, 0x00, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x39, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x75, 0x66, - 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, - 0x4d, 0x61, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61, 0x70, 0x12, - 0x2a, 0x0a, 0x03, 0x61, 0x6e, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x62, - 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6e, 0x79, 0x52, - 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6e, 0x79, 0x12, 0x39, 0x0a, 0x08, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, - 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x66, - 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, - 0x61, 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04, 0x08, 0x18, 0x10, - 0x19, 0x4a, 0x04, 0x08, 0x1a, 0x10, 0x1b, 0x52, 0x07, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, - 0x52, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x5a, - 0x0a, 0x0f, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x52, 0x75, 0x6c, 0x65, - 0x73, 0x12, 0x24, 0x0a, 0x03, 0x63, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x75, - 0x6c, 0x65, 0x52, 0x03, 0x63, 0x65, 0x6c, 0x4a, 0x04, 0x08, 0x18, 0x10, 0x19, 0x4a, 0x04, 0x08, - 0x1a, 0x10, 0x1b, 0x52, 0x07, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x52, 0x0c, 0x69, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xae, 0x17, 0x0a, 0x0a, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x05, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x42, 0x6e, 0xc2, 0x48, 0x6b, 0x0a, 0x69, - 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x5a, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, - 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x12, 0x9d, 0x01, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x42, 0x8a, 0x01, - 0xc2, 0x48, 0x86, 0x01, 0x0a, 0x83, 0x01, 0x0a, 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x6c, - 0x74, 0x1a, 0x77, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, - 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x74, - 0x12, 0xae, 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x42, 0x99, - 0x01, 0xc2, 0x48, 0x95, 0x01, 0x0a, 0x92, 0x01, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, - 0x6c, 0x74, 0x65, 0x1a, 0x84, 0x01, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x74, - 0x65, 0x12, 0xd4, 0x07, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x42, 0xc1, - 0x07, 0xc2, 0x48, 0xbd, 0x07, 0x0a, 0x86, 0x01, 0x0a, 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, - 0x67, 0x74, 0x1a, 0x7a, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, - 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, - 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbd, - 0x01, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, 0xad, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, - 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, - 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc7, - 0x01, 0x0a, 0x15, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x5f, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xad, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, - 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, - 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xcd, 0x01, 0x0a, 0x0c, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xbc, 0x01, 0x68, 0x61, 0x73, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, - 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd7, 0x01, 0x0a, 0x16, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, - 0x69, 0x76, 0x65, 0x1a, 0xbc, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, - 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, 0x74, 0x12, 0xa1, 0x08, 0x0a, 0x03, 0x67, 0x74, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x42, 0x8c, 0x08, 0xc2, 0x48, 0x88, 0x08, 0x0a, 0x95, 0x01, - 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x67, 0x74, 0x65, 0x1a, 0x87, 0x01, 0x21, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, - 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xcc, 0x01, 0x0a, 0x0c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, - 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, 0xbb, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, - 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, - 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd6, 0x01, 0x0a, 0x16, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x67, - 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, - 0xbb, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x29, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xdc, 0x01, - 0x0a, 0x0d, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x1a, - 0xca, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, - 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, - 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xe6, 0x01, 0x0a, - 0x17, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xca, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, - 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x29, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x7d, 0x0a, 0x02, - 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x02, 0x42, 0x6d, 0xc2, 0x48, 0x6a, 0x0a, 0x68, 0x0a, - 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x77, 0x0a, 0x06, 0x6e, - 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x02, 0x42, 0x60, 0xc2, 0x48, 0x5d, - 0x0a, 0x5b, 0x0a, 0x0c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, - 0x1a, 0x4b, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, - 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x77, 0x0a, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x42, 0x5f, 0xc2, 0x48, 0x5c, 0x0a, 0x5a, 0x0a, 0x0c, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x2e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x1a, 0x4a, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x20, 0x3f, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x69, 0x73, 0x49, 0x6e, 0x66, 0x28, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x12, 0x34, 0x0a, - 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x02, 0x42, 0x1a, - 0xc2, 0x48, 0x17, 0x0a, 0x15, 0x0a, 0x0d, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0b, - 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x22, 0xc0, 0x17, 0x0a, 0x0b, - 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x05, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x42, 0x6f, 0xc2, 0x48, 0x6c, - 0x0a, 0x6a, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x12, 0x9e, 0x01, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, - 0x42, 0x8b, 0x01, 0xc2, 0x48, 0x87, 0x01, 0x0a, 0x84, 0x01, 0x0a, 0x09, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x2e, 0x6c, 0x74, 0x1a, 0x77, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, - 0x52, 0x02, 0x6c, 0x74, 0x12, 0xaf, 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x01, 0x42, 0x9a, 0x01, 0xc2, 0x48, 0x96, 0x01, 0x0a, 0x93, 0x01, 0x0a, 0x0a, 0x64, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x6c, 0x74, 0x65, 0x1a, 0x84, 0x01, 0x21, 0x68, 0x61, 0x73, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, - 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, - 0x00, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0xd9, 0x07, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x01, 0x42, 0xc6, 0x07, 0xc2, 0x48, 0xc2, 0x07, 0x0a, 0x87, 0x01, 0x0a, 0x09, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x67, 0x74, 0x1a, 0x7a, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbe, 0x01, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, - 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, 0xad, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, - 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc8, 0x01, 0x0a, 0x16, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, - 0x1a, 0xad, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x29, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, - 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, - 0x0a, 0xce, 0x01, 0x0a, 0x0d, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x67, 0x74, 0x5f, 0x6c, - 0x74, 0x65, 0x1a, 0xbc, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, - 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x0a, 0xd8, 0x01, 0x0a, 0x17, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x67, 0x74, 0x5f, - 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xbc, 0x01, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, - 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x29, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, - 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, - 0x67, 0x74, 0x12, 0xa6, 0x08, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, - 0x42, 0x91, 0x08, 0xc2, 0x48, 0x8d, 0x08, 0x0a, 0x96, 0x01, 0x0a, 0x0a, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x2e, 0x67, 0x74, 0x65, 0x1a, 0x87, 0x01, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, - 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, - 0x0a, 0xcd, 0x01, 0x0a, 0x0d, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x67, 0x74, 0x65, 0x5f, - 0x6c, 0x74, 0x1a, 0xbb, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, - 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, - 0x0a, 0xd7, 0x01, 0x0a, 0x17, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x67, 0x74, 0x65, 0x5f, - 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xbb, 0x01, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, - 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x29, - 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xdd, 0x01, 0x0a, 0x0e, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xca, 0x01, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, - 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, - 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xe7, 0x01, 0x0a, 0x18, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xca, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, - 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x29, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, - 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x7e, 0x0a, 0x02, 0x69, - 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x01, 0x42, 0x6e, 0xc2, 0x48, 0x6b, 0x0a, 0x69, 0x0a, 0x09, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x78, 0x0a, 0x06, 0x6e, - 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x01, 0x42, 0x61, 0xc2, 0x48, 0x5e, - 0x0a, 0x5c, 0x0a, 0x0d, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, - 0x6e, 0x1a, 0x4b, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, - 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x78, 0x0a, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x42, 0x60, 0xc2, 0x48, 0x5d, 0x0a, 0x5b, 0x0a, 0x0d, 0x64, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x2e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x1a, 0x4a, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x20, 0x3f, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x69, 0x73, 0x4e, 0x61, 0x6e, 0x28, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x69, 0x73, 0x49, 0x6e, 0x66, 0x28, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x27, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x12, - 0x35, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x01, - 0x42, 0x1b, 0xc2, 0x48, 0x18, 0x0a, 0x16, 0x0a, 0x0e, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, - 0x02, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, - 0x0a, 0x0c, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x22, 0xde, - 0x14, 0x0a, 0x0a, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x84, 0x01, - 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x6e, 0xc2, - 0x48, 0x6b, 0x0a, 0x69, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, - 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x42, 0x76, 0xc2, 0x48, 0x73, 0x0a, 0x71, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, - 0x6c, 0x74, 0x1a, 0x65, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x74, 0x12, - 0x9a, 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x85, 0x01, - 0xc2, 0x48, 0x81, 0x01, 0x0a, 0x7f, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x6c, 0x74, - 0x65, 0x1a, 0x72, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0xfd, 0x06, 0x0a, - 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x42, 0xea, 0x06, 0xc2, 0x48, 0xe6, 0x06, - 0x0a, 0x74, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x1a, 0x68, 0x21, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xad, 0x01, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, 0x9d, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, - 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xb5, 0x01, 0x0a, 0x15, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, - 0x1a, 0x9b, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbd, - 0x01, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x1a, - 0xac, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, - 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc5, - 0x01, 0x0a, 0x16, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x5f, - 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xaa, 0x01, 0x68, 0x61, 0x73, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, - 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, 0x74, 0x12, 0xca, 0x07, 0x0a, - 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x42, 0xb5, 0x07, 0xc2, 0x48, 0xb1, - 0x07, 0x0a, 0x82, 0x01, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x1a, - 0x75, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, - 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbc, 0x01, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, 0xab, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc4, 0x01, 0x0a, 0x16, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, - 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, - 0x1a, 0xa9, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xcc, 0x01, 0x0a, - 0x0d, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xba, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd4, 0x01, 0x0a, 0x17, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xb8, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, - 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, - 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, - 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x7d, 0x0a, 0x02, 0x69, 0x6e, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x05, 0x42, 0x6d, 0xc2, 0x48, 0x6a, 0x0a, 0x68, 0x0a, 0x08, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, - 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x77, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, - 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x42, 0x60, 0xc2, 0x48, 0x5d, 0x0a, 0x5b, 0x0a, - 0x0c, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x1a, 0x4b, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, - 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, - 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, - 0x6e, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x05, 0x42, 0x1a, 0xc2, 0x48, 0x17, 0x0a, 0x15, 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, - 0x80, 0x02, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, - 0x0e, 0x0a, 0x0c, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x22, - 0xde, 0x14, 0x0a, 0x0a, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x84, - 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x6e, - 0xc2, 0x48, 0x6b, 0x0a, 0x69, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, - 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, - 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x42, 0x76, 0xc2, 0x48, 0x73, 0x0a, 0x71, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x2e, 0x6c, 0x74, 0x1a, 0x65, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, - 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x74, - 0x12, 0x9a, 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x85, - 0x01, 0xc2, 0x48, 0x81, 0x01, 0x0a, 0x7f, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x6c, - 0x74, 0x65, 0x1a, 0x72, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, - 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0xfd, 0x06, - 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0xea, 0x06, 0xc2, 0x48, 0xe6, - 0x06, 0x0a, 0x74, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x1a, 0x68, 0x21, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xad, 0x01, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, 0x9d, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, - 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xb5, 0x01, 0x0a, 0x15, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, - 0x65, 0x1a, 0x9b, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, - 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, - 0xbd, 0x01, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, - 0x1a, 0xac, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, - 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, - 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, - 0xc5, 0x01, 0x0a, 0x16, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, - 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xaa, 0x01, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, 0x74, 0x12, 0xca, 0x07, - 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x42, 0xb5, 0x07, 0xc2, 0x48, - 0xb1, 0x07, 0x0a, 0x82, 0x01, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, - 0x1a, 0x75, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, - 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbc, 0x01, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, 0xab, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc4, 0x01, 0x0a, 0x16, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, - 0x65, 0x1a, 0xa9, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, - 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xcc, 0x01, - 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x1a, - 0xba, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, - 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, - 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd4, 0x01, 0x0a, - 0x17, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xb8, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, - 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x7d, 0x0a, 0x02, 0x69, 0x6e, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x03, 0x42, 0x6d, 0xc2, 0x48, 0x6a, 0x0a, 0x68, 0x0a, 0x08, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x77, 0x0a, 0x06, 0x6e, 0x6f, 0x74, - 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x03, 0x42, 0x60, 0xc2, 0x48, 0x5d, 0x0a, 0x5b, - 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x1a, 0x4b, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, - 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, - 0x74, 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, - 0x49, 0x6e, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x03, 0x42, 0x1a, 0xc2, 0x48, 0x17, 0x0a, 0x15, 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, - 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, - 0x80, 0x80, 0x02, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, - 0x42, 0x0e, 0x0a, 0x0c, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, - 0x22, 0xf0, 0x14, 0x0a, 0x0b, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x12, 0x85, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x42, 0x6f, 0xc2, 0x48, 0x6c, 0x0a, 0x6a, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, - 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x89, 0x01, 0x0a, 0x02, 0x6c, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x77, 0xc2, 0x48, 0x74, 0x0a, 0x72, 0x0a, 0x09, 0x75, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x6c, 0x74, 0x1a, 0x65, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, - 0x52, 0x02, 0x6c, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x42, 0x87, 0x01, 0xc2, 0x48, 0x83, 0x01, 0x0a, 0x80, 0x01, 0x0a, 0x0a, 0x75, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x6c, 0x74, 0x65, 0x1a, 0x72, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x3f, - 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, - 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x03, - 0x6c, 0x74, 0x65, 0x12, 0x82, 0x07, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x42, 0xef, 0x06, 0xc2, 0x48, 0xeb, 0x06, 0x0a, 0x75, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x2e, 0x67, 0x74, 0x1a, 0x68, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xae, - 0x01, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, - 0x9d, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, - 0xb6, 0x01, 0x0a, 0x16, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, - 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0x9b, 0x01, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, - 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, - 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbe, 0x01, 0x0a, 0x0d, 0x75, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xac, 0x01, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, - 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc6, 0x01, 0x0a, 0x17, 0x75, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xaa, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, - 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, 0x74, 0x12, 0xcf, 0x07, 0x0a, 0x03, 0x67, 0x74, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0xba, 0x07, 0xc2, 0x48, 0xb6, 0x07, 0x0a, 0x83, 0x01, - 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x1a, 0x75, 0x21, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x0a, 0xbd, 0x01, 0x0a, 0x0d, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, - 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, 0xab, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, - 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x0a, 0xc5, 0x01, 0x0a, 0x17, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, - 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, - 0xa9, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xcd, 0x01, 0x0a, 0x0e, - 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xba, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd5, 0x01, 0x0a, 0x18, - 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xb8, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, - 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x7e, 0x0a, 0x02, 0x69, 0x6e, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x6e, 0xc2, 0x48, 0x6b, 0x0a, 0x69, 0x0a, 0x09, 0x75, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x78, 0x0a, 0x06, 0x6e, 0x6f, - 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x61, 0xc2, 0x48, 0x5e, 0x0a, - 0x5c, 0x0a, 0x0d, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, - 0x1a, 0x4b, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, - 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x35, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, - 0x08, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x1b, 0xc2, 0x48, 0x18, 0x0a, 0x16, 0x0a, 0x0e, 0x75, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, - 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, - 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, - 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, - 0x68, 0x61, 0x6e, 0x22, 0xf0, 0x14, 0x0a, 0x0b, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x42, 0x6f, 0xc2, 0x48, 0x6c, 0x0a, 0x6a, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, - 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x89, 0x01, 0x0a, 0x02, - 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x77, 0xc2, 0x48, 0x74, 0x0a, 0x72, 0x0a, - 0x09, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x6c, 0x74, 0x1a, 0x65, 0x21, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x87, 0x01, 0xc2, 0x48, 0x83, 0x01, 0x0a, 0x80, 0x01, 0x0a, - 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x6c, 0x74, 0x65, 0x1a, 0x72, 0x21, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, - 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, - 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, - 0x00, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x82, 0x07, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x04, 0x42, 0xef, 0x06, 0xc2, 0x48, 0xeb, 0x06, 0x0a, 0x75, 0x0a, 0x09, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x1a, 0x68, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x0a, 0xae, 0x01, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x5f, - 0x6c, 0x74, 0x1a, 0x9d, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, - 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, - 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x0a, 0xb6, 0x01, 0x0a, 0x16, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, - 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0x9b, 0x01, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbe, 0x01, 0x0a, 0x0d, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xac, 0x01, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, - 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc6, 0x01, 0x0a, - 0x17, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xaa, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, - 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, - 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, 0x74, 0x12, 0xcf, 0x07, 0x0a, 0x03, - 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0xba, 0x07, 0xc2, 0x48, 0xb6, 0x07, - 0x0a, 0x83, 0x01, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x1a, - 0x75, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, - 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbd, 0x01, 0x0a, 0x0d, 0x75, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, 0xab, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc5, 0x01, 0x0a, 0x17, 0x75, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, - 0x76, 0x65, 0x1a, 0xa9, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, - 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xcd, - 0x01, 0x0a, 0x0e, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, - 0x65, 0x1a, 0xba, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, - 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, - 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd5, - 0x01, 0x0a, 0x18, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, - 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xb8, 0x01, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, - 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, - 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x7e, 0x0a, - 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x04, 0x42, 0x6e, 0xc2, 0x48, 0x6b, 0x0a, 0x69, - 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, - 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x78, 0x0a, - 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x04, 0x42, 0x61, 0xc2, - 0x48, 0x5e, 0x0a, 0x5c, 0x0a, 0x0d, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x6e, 0x6f, 0x74, - 0x5f, 0x69, 0x6e, 0x1a, 0x4b, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, - 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x35, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x04, 0x42, 0x1b, 0xc2, 0x48, 0x18, 0x0a, 0x16, 0x0a, - 0x0e, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, - 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, - 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x65, 0x73, - 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x22, 0xf0, 0x14, 0x0a, 0x0b, 0x53, 0x49, 0x6e, 0x74, 0x33, - 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x42, 0x6f, 0xc2, 0x48, 0x6c, 0x0a, 0x6a, 0x0a, 0x0c, 0x73, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x89, - 0x01, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x11, 0x42, 0x77, 0xc2, 0x48, 0x74, - 0x0a, 0x72, 0x0a, 0x09, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x6c, 0x74, 0x1a, 0x65, 0x21, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, - 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x03, 0x6c, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x42, 0x87, 0x01, 0xc2, 0x48, 0x83, 0x01, 0x0a, - 0x80, 0x01, 0x0a, 0x0a, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x6c, 0x74, 0x65, 0x1a, 0x72, - 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x82, 0x07, 0x0a, 0x02, 0x67, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x11, 0x42, 0xef, 0x06, 0xc2, 0x48, 0xeb, 0x06, 0x0a, 0x75, 0x0a, - 0x09, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x1a, 0x68, 0x21, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xae, 0x01, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, - 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, 0x9d, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, - 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xb6, 0x01, 0x0a, 0x16, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, - 0x1a, 0x9b, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbe, - 0x01, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, - 0x1a, 0xac, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, - 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, - 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, - 0xc6, 0x01, 0x0a, 0x17, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, - 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xaa, 0x01, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, 0x74, 0x12, 0xcf, - 0x07, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x42, 0xba, 0x07, 0xc2, - 0x48, 0xb6, 0x07, 0x0a, 0x83, 0x01, 0x0a, 0x0a, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, - 0x74, 0x65, 0x1a, 0x75, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbd, 0x01, 0x0a, 0x0d, 0x73, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, 0xab, 0x01, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc5, 0x01, 0x0a, 0x17, 0x73, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xa9, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, - 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, - 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, - 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x0a, 0xcd, 0x01, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, - 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xba, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, - 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, - 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x0a, 0xd5, 0x01, 0x0a, 0x18, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, - 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xb8, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, 0x74, 0x65, - 0x12, 0x7e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x11, 0x42, 0x6e, 0xc2, 0x48, - 0x6b, 0x0a, 0x69, 0x0a, 0x09, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, - 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, - 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, - 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, - 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, - 0x12, 0x78, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x11, - 0x42, 0x61, 0xc2, 0x48, 0x5e, 0x0a, 0x5c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, - 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x1a, 0x4b, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, - 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x35, 0x0a, 0x07, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x11, 0x42, 0x1b, 0xc2, 0x48, 0x18, - 0x0a, 0x16, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0b, 0x0a, 0x09, - 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x22, 0xf0, 0x14, 0x0a, 0x0b, 0x53, 0x49, - 0x6e, 0x74, 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x05, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x12, 0x42, 0x6f, 0xc2, 0x48, 0x6c, 0x0a, 0x6a, - 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x5a, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, - 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x12, 0x89, 0x01, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x12, 0x42, 0x77, - 0xc2, 0x48, 0x74, 0x0a, 0x72, 0x0a, 0x09, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x6c, 0x74, - 0x1a, 0x65, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x9c, 0x01, - 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x42, 0x87, 0x01, 0xc2, 0x48, - 0x83, 0x01, 0x0a, 0x80, 0x01, 0x0a, 0x0a, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x6c, 0x74, - 0x65, 0x1a, 0x72, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x82, 0x07, 0x0a, - 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x12, 0x42, 0xef, 0x06, 0xc2, 0x48, 0xeb, 0x06, - 0x0a, 0x75, 0x0a, 0x09, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x1a, 0x68, 0x21, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xae, 0x01, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, 0x9d, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xb6, 0x01, 0x0a, 0x16, 0x73, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, - 0x69, 0x76, 0x65, 0x1a, 0x9b, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, - 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, - 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x0a, 0xbe, 0x01, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x5f, - 0x6c, 0x74, 0x65, 0x1a, 0xac, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, - 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x0a, 0xc6, 0x01, 0x0a, 0x17, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, - 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xaa, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, - 0x74, 0x12, 0xcf, 0x07, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x12, 0x42, - 0xba, 0x07, 0xc2, 0x48, 0xb6, 0x07, 0x0a, 0x83, 0x01, 0x0a, 0x0a, 0x73, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x2e, 0x67, 0x74, 0x65, 0x1a, 0x75, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, - 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbd, 0x01, 0x0a, - 0x0d, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, 0xab, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, - 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc5, 0x01, 0x0a, - 0x17, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x5f, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xa9, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, - 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xcd, 0x01, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, - 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xba, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, - 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd5, 0x01, 0x0a, 0x18, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, - 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, - 0x65, 0x1a, 0xb8, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, - 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, - 0x67, 0x74, 0x65, 0x12, 0x7e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x12, 0x42, - 0x6e, 0xc2, 0x48, 0x6b, 0x0a, 0x69, 0x0a, 0x09, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x69, - 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, - 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, - 0x02, 0x69, 0x6e, 0x12, 0x78, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x12, 0x42, 0x61, 0xc2, 0x48, 0x5e, 0x0a, 0x5c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x1a, 0x4b, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x20, - 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x35, 0x0a, - 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x12, 0x42, 0x1b, - 0xc2, 0x48, 0x18, 0x0a, 0x16, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, - 0x0b, 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, - 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x22, 0x81, 0x15, 0x0a, - 0x0c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x86, 0x01, - 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x42, 0x70, 0xc2, - 0x48, 0x6d, 0x0a, 0x6b, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, - 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, - 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x07, 0x42, 0x78, 0xc2, 0x48, 0x75, 0x0a, 0x73, 0x0a, 0x0a, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x2e, 0x6c, 0x74, 0x1a, 0x65, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, - 0x02, 0x6c, 0x74, 0x12, 0x9d, 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x07, 0x42, 0x88, 0x01, 0xc2, 0x48, 0x84, 0x01, 0x0a, 0x81, 0x01, 0x0a, 0x0b, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x33, 0x32, 0x2e, 0x6c, 0x74, 0x65, 0x1a, 0x72, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x3f, - 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, - 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x03, - 0x6c, 0x74, 0x65, 0x12, 0x87, 0x07, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x07, - 0x42, 0xf4, 0x06, 0xc2, 0x48, 0xf0, 0x06, 0x0a, 0x76, 0x0a, 0x0a, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x2e, 0x67, 0x74, 0x1a, 0x68, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, - 0xaf, 0x01, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, - 0x74, 0x1a, 0x9d, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x0a, 0xb7, 0x01, 0x0a, 0x17, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, - 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0x9b, 0x01, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbf, 0x01, 0x0a, 0x0e, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xac, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc7, 0x01, - 0x0a, 0x18, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, - 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xaa, 0x01, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, 0x74, 0x12, 0xd4, 0x07, - 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x07, 0x42, 0xbf, 0x07, 0xc2, 0x48, - 0xbb, 0x07, 0x0a, 0x84, 0x01, 0x0a, 0x0b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, - 0x74, 0x65, 0x1a, 0x75, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbe, 0x01, 0x0a, 0x0e, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, 0xab, 0x01, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, - 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, - 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, - 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc6, 0x01, 0x0a, 0x18, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xa9, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, - 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, - 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x0a, 0xce, 0x01, 0x0a, 0x0f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, - 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xba, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, - 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd6, 0x01, 0x0a, 0x19, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, - 0x76, 0x65, 0x1a, 0xb8, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, - 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, - 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, - 0x03, 0x67, 0x74, 0x65, 0x12, 0x7f, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x07, - 0x42, 0x6f, 0xc2, 0x48, 0x6c, 0x0a, 0x6a, 0x0a, 0x0a, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x2e, 0x69, 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x67, - 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, - 0x69, 0x6e, 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x79, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x07, 0x42, 0x62, 0xc2, 0x48, 0x5f, 0x0a, 0x5d, 0x0a, 0x0e, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x1a, 0x4b, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, - 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, - 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, - 0x12, 0x36, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x07, 0x42, 0x1c, 0xc2, 0x48, 0x19, 0x0a, 0x17, 0x0a, 0x0f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, - 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, - 0x80, 0x80, 0x02, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, - 0x42, 0x0e, 0x0a, 0x0c, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, - 0x22, 0x81, 0x15, 0x0a, 0x0c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, - 0x73, 0x12, 0x86, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x06, 0x42, 0x70, 0xc2, 0x48, 0x6d, 0x0a, 0x6b, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, - 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, - 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x02, 0x6c, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x06, 0x42, 0x78, 0xc2, 0x48, 0x75, 0x0a, 0x73, 0x0a, 0x0a, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x6c, 0x74, 0x1a, 0x65, 0x21, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x9d, 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x06, 0x42, 0x88, 0x01, 0xc2, 0x48, 0x84, 0x01, 0x0a, 0x81, 0x01, 0x0a, - 0x0b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x6c, 0x74, 0x65, 0x1a, 0x72, 0x21, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, - 0x48, 0x00, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x87, 0x07, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x06, 0x42, 0xf4, 0x06, 0xc2, 0x48, 0xf0, 0x06, 0x0a, 0x76, 0x0a, 0x0a, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x1a, 0x68, 0x21, 0x68, 0x61, 0x73, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x0a, 0xaf, 0x01, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, - 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, 0x9d, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, - 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xb7, 0x01, 0x0a, 0x17, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, - 0x65, 0x1a, 0x9b, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, - 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, - 0xbf, 0x01, 0x0a, 0x0e, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x5f, 0x6c, - 0x74, 0x65, 0x1a, 0xac, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, - 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x0a, 0xc7, 0x01, 0x0a, 0x18, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, - 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xaa, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, - 0x74, 0x12, 0xd4, 0x07, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x06, 0x42, - 0xbf, 0x07, 0xc2, 0x48, 0xbb, 0x07, 0x0a, 0x84, 0x01, 0x0a, 0x0b, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x1a, 0x75, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbe, 0x01, - 0x0a, 0x0e, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, - 0x1a, 0xab, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc6, - 0x01, 0x0a, 0x18, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, - 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xa9, 0x01, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, - 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xce, 0x01, 0x0a, 0x0f, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xba, 0x01, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, - 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd6, 0x01, 0x0a, 0x19, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xb8, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, - 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, - 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x7f, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x06, 0x42, 0x6f, 0xc2, 0x48, 0x6c, 0x0a, 0x6a, 0x0a, 0x0a, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x79, 0x0a, 0x06, 0x6e, 0x6f, 0x74, - 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x06, 0x42, 0x62, 0xc2, 0x48, 0x5f, 0x0a, 0x5d, - 0x0a, 0x0e, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, - 0x1a, 0x4b, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, - 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x36, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, - 0x08, 0x20, 0x03, 0x28, 0x06, 0x42, 0x1c, 0xc2, 0x48, 0x19, 0x0a, 0x17, 0x0a, 0x0f, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, - 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, - 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, - 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, - 0x74, 0x68, 0x61, 0x6e, 0x22, 0x93, 0x15, 0x0a, 0x0d, 0x53, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0f, 0x42, 0x71, 0xc2, 0x48, 0x6e, 0x0a, 0x6c, 0x0a, 0x0e, 0x73, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x5a, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, - 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x12, 0x8b, 0x01, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0f, 0x42, 0x79, 0xc2, - 0x48, 0x76, 0x0a, 0x74, 0x0a, 0x0b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x6c, - 0x74, 0x1a, 0x65, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x9e, - 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0f, 0x42, 0x89, 0x01, 0xc2, - 0x48, 0x85, 0x01, 0x0a, 0x82, 0x01, 0x0a, 0x0c, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x2e, 0x6c, 0x74, 0x65, 0x1a, 0x72, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, - 0x8c, 0x07, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0f, 0x42, 0xf9, 0x06, 0xc2, - 0x48, 0xf5, 0x06, 0x0a, 0x77, 0x0a, 0x0b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, - 0x67, 0x74, 0x1a, 0x68, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xb0, 0x01, 0x0a, - 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, - 0x9d, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, - 0xb8, 0x01, 0x0a, 0x18, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, - 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0x9b, 0x01, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc0, 0x01, 0x0a, 0x0f, 0x73, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xac, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc8, 0x01, - 0x0a, 0x19, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, - 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xaa, 0x01, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, 0x74, 0x12, 0xd9, - 0x07, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0f, 0x42, 0xc4, 0x07, 0xc2, - 0x48, 0xc0, 0x07, 0x0a, 0x85, 0x01, 0x0a, 0x0c, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x2e, 0x67, 0x74, 0x65, 0x1a, 0x75, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xbf, 0x01, 0x0a, 0x0f, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, - 0xab, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc7, 0x01, - 0x0a, 0x19, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, - 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xa9, 0x01, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, - 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xcf, 0x01, 0x0a, 0x10, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xba, 0x01, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd7, 0x01, 0x0a, 0x1a, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xb8, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, - 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x02, 0x69, - 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0f, 0x42, 0x70, 0xc2, 0x48, 0x6d, 0x0a, 0x6b, 0x0a, 0x0b, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, - 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x7a, 0x0a, - 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0f, 0x42, 0x63, 0xc2, - 0x48, 0x60, 0x0a, 0x5e, 0x0a, 0x0f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x6e, - 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x1a, 0x4b, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, - 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x37, 0x0a, 0x07, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0f, 0x42, 0x1d, 0xc2, 0x48, 0x1a, 0x0a, - 0x18, 0x0a, 0x10, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0b, 0x0a, - 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x22, 0x93, 0x15, 0x0a, 0x0d, 0x53, - 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, - 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x10, 0x42, 0x71, 0xc2, 0x48, - 0x6e, 0x0a, 0x6c, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, - 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, - 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x8b, 0x01, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x10, 0x42, 0x79, 0xc2, 0x48, 0x76, 0x0a, 0x74, 0x0a, 0x0b, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x2e, 0x6c, 0x74, 0x1a, 0x65, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, - 0x52, 0x02, 0x6c, 0x74, 0x12, 0x9e, 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x10, 0x42, 0x89, 0x01, 0xc2, 0x48, 0x85, 0x01, 0x0a, 0x82, 0x01, 0x0a, 0x0c, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x6c, 0x74, 0x65, 0x1a, 0x72, 0x21, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, - 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x8c, 0x07, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x10, 0x42, 0xf9, 0x06, 0xc2, 0x48, 0xf5, 0x06, 0x0a, 0x77, 0x0a, 0x0b, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x1a, 0x68, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x3f, - 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x0a, 0xb0, 0x01, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, - 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, 0x9d, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, - 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xb8, 0x01, 0x0a, 0x18, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, - 0x76, 0x65, 0x1a, 0x9b, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, - 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, - 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, - 0x0a, 0xc0, 0x01, 0x0a, 0x0f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, - 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xac, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, - 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x0a, 0xc8, 0x01, 0x0a, 0x19, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, - 0x65, 0x1a, 0xaa, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, - 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, - 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, - 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, - 0x52, 0x02, 0x67, 0x74, 0x12, 0xd9, 0x07, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x10, 0x42, 0xc4, 0x07, 0xc2, 0x48, 0xc0, 0x07, 0x0a, 0x85, 0x01, 0x0a, 0x0c, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x1a, 0x75, 0x21, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x0a, 0xbf, 0x01, 0x0a, 0x0f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, - 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, 0xab, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, - 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x0a, 0xc7, 0x01, 0x0a, 0x19, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, - 0x65, 0x1a, 0xa9, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, - 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xcf, 0x01, - 0x0a, 0x10, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, - 0x74, 0x65, 0x1a, 0xba, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, - 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, - 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, - 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, - 0xd7, 0x01, 0x0a, 0x1a, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x67, 0x74, 0x65, - 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xb8, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, 0x74, 0x65, - 0x12, 0x80, 0x01, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x10, 0x42, 0x70, 0xc2, - 0x48, 0x6d, 0x0a, 0x6b, 0x0a, 0x0b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x2e, 0x69, - 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, - 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, - 0x02, 0x69, 0x6e, 0x12, 0x7a, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x10, 0x42, 0x63, 0xc2, 0x48, 0x60, 0x0a, 0x5e, 0x0a, 0x0f, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x1a, 0x4b, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, - 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, - 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, - 0x37, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x10, - 0x42, 0x1d, 0xc2, 0x48, 0x1a, 0x0a, 0x18, 0x0a, 0x10, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, - 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, - 0x80, 0x80, 0x02, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, - 0x42, 0x0e, 0x0a, 0x0c, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, - 0x22, 0xd1, 0x01, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x83, - 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x6d, - 0xc2, 0x48, 0x6a, 0x0a, 0x68, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, - 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x08, 0x42, 0x19, 0xc2, 0x48, 0x16, 0x0a, 0x14, 0x0a, 0x0c, 0x62, 0x6f, - 0x6f, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, - 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, - 0x80, 0x80, 0x80, 0x02, 0x22, 0xcf, 0x3f, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, - 0x75, 0x6c, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x71, 0xc2, 0x48, 0x6e, 0x0a, 0x6c, 0x0a, 0x0c, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x5c, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x60, 0x25, 0x73, 0x60, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x76, - 0x0a, 0x03, 0x6c, 0x65, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x42, 0x64, 0xc2, 0x48, 0x61, - 0x0a, 0x5f, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6c, 0x65, 0x6e, 0x1a, 0x51, - 0x75, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, - 0x29, 0x20, 0x21, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x20, 0x3f, - 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x25, 0x73, 0x20, 0x63, 0x68, 0x61, - 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x52, 0x03, 0x6c, 0x65, 0x6e, 0x12, 0x91, 0x01, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, - 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x78, 0xc2, 0x48, 0x75, 0x0a, 0x73, 0x0a, - 0x0e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x1a, - 0x61, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, - 0x29, 0x29, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, - 0x65, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x74, - 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x25, 0x73, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, - 0x74, 0x65, 0x72, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x12, 0x90, 0x01, 0x0a, 0x07, 0x6d, - 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x77, 0xc2, 0x48, - 0x74, 0x0a, 0x72, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x61, 0x78, 0x5f, - 0x6c, 0x65, 0x6e, 0x1a, 0x60, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, - 0x69, 0x7a, 0x65, 0x28, 0x29, 0x29, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, - 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x61, 0x74, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x25, 0x73, 0x20, 0x63, 0x68, 0x61, - 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x12, 0x95, 0x01, - 0x0a, 0x09, 0x6c, 0x65, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x04, 0x42, 0x78, 0xc2, 0x48, 0x75, 0x0a, 0x73, 0x0a, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x2e, 0x6c, 0x65, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x1a, 0x5f, 0x75, 0x69, 0x6e, 0x74, - 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x73, 0x69, 0x7a, - 0x65, 0x28, 0x29, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x65, - 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x25, 0x73, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x08, 0x6c, 0x65, 0x6e, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x42, 0x80, 0x01, 0xc2, 0x48, 0x7d, 0x0a, - 0x7b, 0x0a, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x1a, 0x67, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x29, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, - 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, - 0x61, 0x73, 0x74, 0x20, 0x25, 0x73, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x08, 0x6d, 0x69, - 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x9c, 0x01, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0x7f, 0xc2, 0x48, 0x7c, 0x0a, - 0x7a, 0x0a, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x1a, 0x66, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x29, 0x20, 0x3e, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, - 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x74, 0x20, 0x6d, 0x6f, - 0x73, 0x74, 0x20, 0x25, 0x73, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x78, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x08, 0x6d, 0x61, 0x78, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x90, 0x01, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x76, 0xc2, 0x48, 0x73, 0x0a, 0x71, 0x0a, 0x0e, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x1a, 0x5f, - 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x29, 0x20, 0x3f, 0x20, 0x27, - 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x72, - 0x65, 0x67, 0x65, 0x78, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x60, 0x25, 0x73, - 0x60, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, - 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x86, 0x01, 0x0a, 0x06, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x6e, 0xc2, 0x48, 0x6b, 0x0a, 0x69, - 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, - 0x58, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x57, 0x69, 0x74, - 0x68, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x29, 0x20, - 0x3f, 0x20, 0x27, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x60, 0x25, 0x73, 0x60, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x12, 0x84, 0x01, 0x0a, 0x06, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x6c, 0xc2, 0x48, 0x69, 0x0a, 0x67, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x2e, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x1a, 0x56, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x65, 0x6e, 0x64, 0x73, 0x57, 0x69, 0x74, 0x68, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x73, - 0x75, 0x66, 0x66, 0x69, 0x78, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x20, 0x60, - 0x25, 0x73, 0x60, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, - 0x52, 0x06, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x94, 0x01, 0x0a, 0x08, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x78, 0xc2, 0x48, 0x75, - 0x0a, 0x73, 0x0a, 0x0f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x73, 0x1a, 0x60, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x73, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x20, 0x60, 0x25, 0x73, 0x60, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x12, - 0x9e, 0x01, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x42, 0x7b, 0xc2, 0x48, 0x78, 0x0a, 0x76, 0x0a, 0x13, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x73, 0x1a, 0x5f, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x73, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x73, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x25, 0x73, 0x60, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6e, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x52, 0x0b, 0x6e, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, - 0x12, 0x7e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x42, 0x6e, 0xc2, 0x48, - 0x6b, 0x0a, 0x69, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, - 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, - 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, - 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, - 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, - 0x12, 0x78, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, - 0x42, 0x61, 0xc2, 0x48, 0x5e, 0x0a, 0x5c, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, - 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x1a, 0x4b, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, - 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0xe0, 0x01, 0x0a, 0x05, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x42, 0xc7, 0x01, 0xc2, 0x48, 0xc3, - 0x01, 0x0a, 0x5b, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x12, 0x1d, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x1a, 0x2c, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x28, 0x29, 0x0a, 0x64, - 0x0a, 0x12, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x32, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x1a, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, - 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0xeb, 0x01, - 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, - 0x42, 0xcc, 0x01, 0xc2, 0x48, 0xc8, 0x01, 0x0a, 0x5f, 0x0a, 0x0f, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x6f, 0x73, 0x74, - 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x32, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x68, 0x6f, 0x73, - 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, - 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x48, 0x6f, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x29, 0x0a, 0x65, 0x0a, 0x15, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x12, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, - 0x1a, 0x1d, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, - 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, - 0x00, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0xc5, 0x01, 0x0a, 0x02, - 0x69, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x42, 0xb2, 0x01, 0xc2, 0x48, 0xae, 0x01, 0x0a, - 0x4f, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x70, 0x12, 0x1a, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, - 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x26, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x70, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, - 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x49, 0x70, 0x28, 0x29, - 0x0a, 0x5b, 0x0a, 0x0f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x70, 0x5f, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x1a, 0x17, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x20, - 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, - 0x02, 0x69, 0x70, 0x12, 0xd6, 0x01, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x08, 0x42, 0xbf, 0x01, 0xc2, 0x48, 0xbb, 0x01, 0x0a, 0x56, 0x0a, 0x0b, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x70, 0x76, 0x34, 0x12, 0x1c, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x29, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x70, 0x76, 0x34, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, - 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x49, 0x70, 0x28, 0x34, - 0x29, 0x0a, 0x61, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x70, 0x76, 0x34, - 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x31, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, - 0x34, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x19, 0x21, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x70, 0x76, 0x34, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, - 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12, 0xd6, 0x01, 0x0a, - 0x04, 0x69, 0x70, 0x76, 0x36, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x42, 0xbf, 0x01, 0xc2, 0x48, - 0xbb, 0x01, 0x0a, 0x56, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x70, 0x76, - 0x36, 0x12, 0x1c, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, - 0x29, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x76, 0x36, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x69, 0x73, 0x49, 0x70, 0x28, 0x36, 0x29, 0x0a, 0x61, 0x0a, 0x11, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x70, 0x76, 0x36, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x31, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, - 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x1a, 0x19, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x76, 0x36, 0x20, - 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, - 0x04, 0x69, 0x70, 0x76, 0x36, 0x12, 0xbe, 0x01, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x08, 0x42, 0xa9, 0x01, 0xc2, 0x48, 0xa5, 0x01, 0x0a, 0x4b, 0x0a, 0x0a, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x75, 0x72, 0x69, 0x12, 0x13, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x49, 0x1a, 0x28, 0x21, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x75, 0x72, 0x69, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x69, 0x73, 0x55, 0x72, 0x69, 0x28, 0x29, 0x0a, 0x56, 0x0a, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x2e, 0x75, 0x72, 0x69, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x28, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, - 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x20, 0x55, 0x52, 0x49, 0x1a, 0x18, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x75, 0x72, - 0x69, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, - 0x00, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x72, 0x0a, 0x07, 0x75, 0x72, 0x69, 0x5f, 0x72, 0x65, - 0x66, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x42, 0x57, 0xc2, 0x48, 0x54, 0x0a, 0x52, 0x0a, 0x0e, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x75, 0x72, 0x69, 0x5f, 0x72, 0x65, 0x66, 0x12, 0x1d, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, - 0x55, 0x52, 0x49, 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x1a, 0x21, 0x21, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x75, 0x72, 0x69, 0x5f, 0x72, 0x65, 0x66, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x55, 0x72, 0x69, 0x52, 0x65, 0x66, 0x28, 0x29, - 0x48, 0x00, 0x52, 0x06, 0x75, 0x72, 0x69, 0x52, 0x65, 0x66, 0x12, 0x92, 0x02, 0x0a, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x42, 0xf5, 0x01, 0xc2, - 0x48, 0xf1, 0x01, 0x0a, 0x7b, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, - 0x20, 0x6f, 0x72, 0x20, 0x69, 0x70, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x40, - 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x28, - 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x49, 0x70, 0x28, 0x29, - 0x0a, 0x72, 0x0a, 0x14, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, - 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, - 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x70, 0x20, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x1c, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, - 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x98, 0x02, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x42, 0x81, - 0x02, 0xc2, 0x48, 0xfd, 0x01, 0x0a, 0x9f, 0x01, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x2e, 0x75, 0x75, 0x69, 0x64, 0x12, 0x14, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x7a, 0x21, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, - 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, - 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, - 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x27, 0x29, 0x0a, 0x59, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x29, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x19, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x75, 0x75, 0x69, 0x64, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, - 0x27, 0x27, 0x48, 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0xf1, 0x01, 0x0a, 0x05, 0x74, - 0x75, 0x75, 0x69, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x42, 0xd8, 0x01, 0xc2, 0x48, 0xd4, - 0x01, 0x0a, 0x6d, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x74, 0x75, 0x75, 0x69, - 0x64, 0x12, 0x1c, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, - 0x3f, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x74, 0x75, 0x75, 0x69, 0x64, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x30, - 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x24, 0x27, 0x29, - 0x0a, 0x63, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x74, 0x75, 0x75, 0x69, 0x64, - 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x31, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x74, 0x72, 0x69, - 0x6d, 0x6d, 0x65, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x1a, 0x21, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x74, 0x75, 0x75, 0x69, 0x64, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x05, 0x74, 0x75, 0x75, 0x69, 0x64, 0x12, 0xa1, - 0x02, 0x0a, 0x11, 0x69, 0x70, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x6c, 0x65, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x42, 0xf2, 0x01, 0xc2, 0x48, 0xee, - 0x01, 0x0a, 0x72, 0x0a, 0x18, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x70, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x12, 0x19, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, - 0x50, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x3b, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x70, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, - 0x65, 0x6e, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, - 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x49, 0x70, 0x50, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x28, 0x29, 0x0a, 0x78, 0x0a, 0x1e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, - 0x69, 0x70, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, - 0x6e, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, - 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, - 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x26, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x70, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, - 0x6e, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, - 0x00, 0x52, 0x0f, 0x69, 0x70, 0x57, 0x69, 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, - 0x65, 0x6e, 0x12, 0xdc, 0x02, 0x0a, 0x13, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x77, 0x69, 0x74, 0x68, - 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, - 0x42, 0xa9, 0x02, 0xc2, 0x48, 0xa5, 0x02, 0x0a, 0x8d, 0x01, 0x0a, 0x1a, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x2e, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x12, 0x2f, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x1a, 0x3e, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x70, 0x76, 0x34, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x6c, 0x65, 0x6e, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, - 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x49, 0x70, 0x50, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x28, 0x34, 0x29, 0x0a, 0x92, 0x01, 0x0a, 0x20, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x2e, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x44, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x1a, 0x28, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x76, 0x34, 0x5f, - 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x11, - 0x69, 0x70, 0x76, 0x34, 0x57, 0x69, 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, - 0x6e, 0x12, 0xdc, 0x02, 0x0a, 0x13, 0x69, 0x70, 0x76, 0x36, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x42, - 0xa9, 0x02, 0xc2, 0x48, 0xa5, 0x02, 0x0a, 0x8d, 0x01, 0x0a, 0x1a, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x2e, 0x69, 0x70, 0x76, 0x36, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x12, 0x2f, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, - 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x1a, 0x3e, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x70, 0x76, 0x36, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, - 0x65, 0x6e, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, - 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x49, 0x70, 0x50, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x28, 0x36, 0x29, 0x0a, 0x92, 0x01, 0x0a, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x2e, 0x69, 0x70, 0x76, 0x36, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x44, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, - 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x1a, 0x28, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x76, 0x36, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x11, 0x69, - 0x70, 0x76, 0x36, 0x57, 0x69, 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, - 0x12, 0xf6, 0x01, 0x0a, 0x09, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x1d, - 0x20, 0x01, 0x28, 0x08, 0x42, 0xd6, 0x01, 0xc2, 0x48, 0xd2, 0x01, 0x0a, 0x66, 0x0a, 0x10, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, - 0x19, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x20, 0x49, 0x50, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x37, 0x21, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x69, 0x73, 0x49, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x28, 0x74, 0x72, - 0x75, 0x65, 0x29, 0x0a, 0x68, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x70, - 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2e, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x1e, 0x21, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, - 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, - 0x08, 0x69, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x89, 0x02, 0x0a, 0x0b, 0x69, 0x70, - 0x76, 0x34, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x42, - 0xe5, 0x01, 0xc2, 0x48, 0xe1, 0x01, 0x0a, 0x6f, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x2e, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1b, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, - 0x76, 0x34, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x3c, 0x21, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x49, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x28, 0x34, - 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x0a, 0x6e, 0x0a, 0x18, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x2e, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x30, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x70, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x20, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, - 0x76, 0x34, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x70, 0x76, 0x34, 0x50, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x89, 0x02, 0x0a, 0x0b, 0x69, 0x70, 0x76, 0x36, 0x5f, 0x70, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x42, 0xe5, 0x01, 0xc2, 0x48, - 0xe1, 0x01, 0x0a, 0x6f, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x70, 0x76, - 0x36, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1b, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x70, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x3c, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, - 0x76, 0x36, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x69, 0x73, 0x49, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x28, 0x36, 0x2c, 0x20, 0x74, 0x72, - 0x75, 0x65, 0x29, 0x0a, 0x6e, 0x0a, 0x18, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x70, - 0x76, 0x36, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x30, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, - 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x1a, 0x20, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x76, 0x36, 0x5f, 0x70, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, - 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x70, 0x76, 0x36, 0x50, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x12, 0xbc, 0x02, 0x0a, 0x0d, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x20, 0x20, 0x01, 0x28, 0x08, 0x42, 0x95, 0x02, 0xc2, 0x48, 0x91, 0x02, - 0x0a, 0x93, 0x01, 0x0a, 0x14, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x68, 0x6f, 0x73, 0x74, - 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x3b, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, - 0x28, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x50, 0x20, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x72, - 0x74, 0x20, 0x70, 0x61, 0x69, 0x72, 0x1a, 0x3e, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x69, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x50, 0x6f, 0x72, 0x74, - 0x28, 0x74, 0x72, 0x75, 0x65, 0x29, 0x0a, 0x79, 0x0a, 0x1a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x37, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x70, 0x61, 0x69, 0x72, 0x1a, 0x22, 0x21, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, - 0x6f, 0x72, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, - 0x27, 0x48, 0x00, 0x52, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x50, 0x6f, 0x72, 0x74, - 0x12, 0xf4, 0x01, 0x0a, 0x04, 0x75, 0x6c, 0x69, 0x64, 0x18, 0x23, 0x20, 0x01, 0x28, 0x08, 0x42, - 0xdd, 0x01, 0xc2, 0x48, 0xd9, 0x01, 0x0a, 0x7c, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x2e, 0x75, 0x6c, 0x69, 0x64, 0x12, 0x14, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x4c, 0x49, 0x44, 0x1a, 0x57, 0x21, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x75, 0x6c, 0x69, 0x64, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x30, 0x2d, 0x37, 0x5d, 0x5b, 0x30, - 0x2d, 0x39, 0x41, 0x2d, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x2d, 0x54, 0x56, 0x2d, 0x5a, 0x61, - 0x2d, 0x68, 0x6a, 0x6b, 0x6d, 0x6e, 0x70, 0x2d, 0x74, 0x76, 0x2d, 0x7a, 0x5d, 0x7b, 0x32, 0x35, - 0x7d, 0x24, 0x27, 0x29, 0x0a, 0x59, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x75, - 0x6c, 0x69, 0x64, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x29, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, - 0x55, 0x4c, 0x49, 0x44, 0x1a, 0x19, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x75, 0x6c, 0x69, - 0x64, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, - 0x00, 0x52, 0x04, 0x75, 0x6c, 0x69, 0x64, 0x12, 0xe1, 0x02, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x25, 0x20, 0x01, 0x28, 0x08, 0x42, 0xbb, - 0x02, 0xc2, 0x48, 0xb7, 0x02, 0x0a, 0xaf, 0x01, 0x0a, 0x13, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x66, 0x71, 0x6e, 0x12, 0x2d, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x66, - 0x75, 0x6c, 0x6c, 0x79, 0x2d, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x69, 0x21, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x66, 0x71, - 0x6e, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, - 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, - 0x27, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5f, 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x61, - 0x2d, 0x7a, 0x5f, 0x30, 0x2d, 0x39, 0x5d, 0x2a, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x41, 0x2d, 0x5a, - 0x61, 0x2d, 0x7a, 0x5f, 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5f, 0x30, 0x2d, 0x39, - 0x5d, 0x2a, 0x29, 0x2a, 0x24, 0x27, 0x29, 0x0a, 0x82, 0x01, 0x0a, 0x19, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x66, 0x71, 0x6e, 0x5f, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x66, 0x75, 0x6c, 0x6c, - 0x79, 0x2d, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x21, 0x21, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x66, 0x71, 0x6e, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x0b, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x46, 0x71, 0x6e, 0x12, 0xa1, 0x03, 0x0a, 0x10, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x64, 0x6f, 0x74, 0x5f, 0x66, 0x71, 0x6e, - 0x18, 0x26, 0x20, 0x01, 0x28, 0x08, 0x42, 0xf4, 0x02, 0xc2, 0x48, 0xf0, 0x02, 0x0a, 0xcd, 0x01, - 0x0a, 0x17, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x5f, 0x64, 0x6f, 0x74, 0x5f, 0x66, 0x71, 0x6e, 0x12, 0x40, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x79, - 0x2d, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, - 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x6f, 0x74, 0x1a, 0x70, 0x21, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x64, 0x6f, 0x74, - 0x5f, 0x66, 0x71, 0x6e, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, - 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5c, 0x5c, 0x2e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5f, - 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5f, 0x30, 0x2d, 0x39, 0x5d, 0x2a, 0x28, 0x5c, - 0x5c, 0x2e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5f, 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x61, - 0x2d, 0x7a, 0x5f, 0x30, 0x2d, 0x39, 0x5d, 0x2a, 0x29, 0x2a, 0x24, 0x27, 0x29, 0x0a, 0x9d, 0x01, - 0x0a, 0x1d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x5f, 0x64, 0x6f, 0x74, 0x5f, 0x66, 0x71, 0x6e, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x55, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, - 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x2d, 0x71, 0x75, 0x61, 0x6c, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x64, 0x6f, 0x74, 0x1a, 0x25, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x64, 0x6f, 0x74, 0x5f, 0x66, 0x71, 0x6e, 0x20, - 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, - 0x0e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x44, 0x6f, 0x74, 0x46, 0x71, 0x6e, 0x12, - 0xac, 0x05, 0x0a, 0x10, 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x72, - 0x65, 0x67, 0x65, 0x78, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x62, 0x75, 0x66, - 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x52, - 0x65, 0x67, 0x65, 0x78, 0x42, 0xe5, 0x04, 0xc2, 0x48, 0xe1, 0x04, 0x0a, 0xea, 0x01, 0x0a, 0x23, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, - 0x6e, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x20, 0x48, 0x54, 0x54, 0x50, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0xa0, 0x01, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x77, 0x65, - 0x6c, 0x6c, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x20, 0x21, - 0x3d, 0x20, 0x31, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x27, - 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, - 0x73, 0x28, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x74, 0x72, - 0x69, 0x63, 0x74, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x74, - 0x72, 0x69, 0x63, 0x74, 0x20, 0x3f, 0x27, 0x5e, 0x3a, 0x3f, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, - 0x7a, 0x41, 0x2d, 0x5a, 0x21, 0x23, 0x24, 0x25, 0x26, 0x5c, 0x27, 0x2a, 0x2b, 0x2d, 0x2e, 0x5e, - 0x5f, 0x7c, 0x7e, 0x5c, 0x78, 0x36, 0x30, 0x5d, 0x2b, 0x24, 0x27, 0x20, 0x3a, 0x27, 0x5e, 0x5b, - 0x5e, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x30, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x41, 0x5c, 0x75, 0x30, - 0x30, 0x30, 0x44, 0x5d, 0x2b, 0x24, 0x27, 0x29, 0x0a, 0x8d, 0x01, 0x0a, 0x29, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x2e, 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x72, - 0x65, 0x67, 0x65, 0x78, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x35, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x48, 0x54, 0x54, - 0x50, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x29, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, - 0x72, 0x65, 0x67, 0x65, 0x78, 0x20, 0x21, 0x3d, 0x20, 0x31, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x0a, 0xe1, 0x01, 0x0a, 0x24, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x2e, 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x72, - 0x65, 0x67, 0x65, 0x78, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x21, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x48, 0x54, 0x54, 0x50, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x95, 0x01, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x77, 0x65, 0x6c, - 0x6c, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x20, 0x21, 0x3d, - 0x20, 0x32, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x65, 0x73, 0x28, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x74, - 0x72, 0x69, 0x63, 0x74, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x73, - 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x3f, 0x27, 0x5e, 0x5b, 0x5e, 0x5c, 0x75, 0x30, 0x30, 0x30, - 0x30, 0x2d, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x38, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x41, 0x2d, 0x5c, - 0x75, 0x30, 0x30, 0x31, 0x46, 0x5c, 0x75, 0x30, 0x30, 0x37, 0x46, 0x5d, 0x2a, 0x24, 0x27, 0x20, - 0x3a, 0x27, 0x5e, 0x5b, 0x5e, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x30, 0x5c, 0x75, 0x30, 0x30, 0x30, - 0x41, 0x5c, 0x75, 0x30, 0x30, 0x30, 0x44, 0x5d, 0x2a, 0x24, 0x27, 0x29, 0x48, 0x00, 0x52, 0x0e, - 0x77, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x67, 0x65, 0x78, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x42, 0x1b, 0xc2, 0x48, 0x18, 0x0a, 0x16, 0x0a, 0x0e, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, - 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, - 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0c, 0x0a, 0x0a, 0x77, 0x65, 0x6c, 0x6c, - 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x22, 0xca, 0x12, 0x0a, 0x0a, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x6b, 0xc2, 0x48, 0x68, 0x0a, 0x66, 0x0a, 0x0b, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x57, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x25, 0x78, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x70, 0x0a, 0x03, 0x6c, 0x65, 0x6e, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x42, 0x5e, 0xc2, 0x48, 0x5b, 0x0a, 0x59, 0x0a, 0x09, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x1a, 0x4c, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x25, 0x73, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x03, 0x6c, 0x65, 0x6e, 0x12, 0x8b, 0x01, 0x0a, 0x07, - 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x72, 0xc2, - 0x48, 0x6f, 0x0a, 0x6d, 0x0a, 0x0d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, - 0x6c, 0x65, 0x6e, 0x1a, 0x5c, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, - 0x69, 0x7a, 0x65, 0x28, 0x29, 0x29, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, - 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x25, 0x73, 0x20, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x12, 0x8a, 0x01, 0x0a, 0x07, 0x6d, 0x61, - 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x71, 0xc2, 0x48, 0x6e, - 0x0a, 0x6c, 0x0a, 0x0d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, - 0x6e, 0x1a, 0x5b, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, - 0x65, 0x28, 0x29, 0x29, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x78, - 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x61, 0x74, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x25, 0x73, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x06, - 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x12, 0x93, 0x01, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x79, 0xc2, 0x48, 0x76, 0x0a, 0x74, 0x0a, - 0x0d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x1a, 0x63, - 0x21, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x2e, 0x6d, 0x61, - 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x61, 0x74, 0x74, - 0x65, 0x72, 0x6e, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x20, 0x72, 0x65, 0x67, 0x65, 0x78, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, - 0x20, 0x60, 0x25, 0x73, 0x60, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x83, 0x01, 0x0a, - 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x6b, 0xc2, - 0x48, 0x68, 0x0a, 0x66, 0x0a, 0x0c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x1a, 0x56, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, - 0x57, 0x69, 0x74, 0x68, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, - 0x61, 0x76, 0x65, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x25, 0x78, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x12, 0x81, 0x01, 0x0a, 0x06, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0c, 0x42, 0x69, 0xc2, 0x48, 0x66, 0x0a, 0x64, 0x0a, 0x0c, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x2e, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x1a, 0x54, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x65, 0x6e, 0x64, 0x73, 0x57, 0x69, 0x74, 0x68, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x73, - 0x75, 0x66, 0x66, 0x69, 0x78, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x20, 0x25, - 0x78, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x06, - 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x87, 0x01, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x6b, 0xc2, 0x48, 0x68, 0x0a, 0x66, - 0x0a, 0x0e, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, - 0x1a, 0x54, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x29, - 0x20, 0x3f, 0x20, 0x27, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x20, 0x25, 0x78, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x5d, - 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, - 0x12, 0xa5, 0x01, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0c, 0x42, 0x94, 0x01, - 0xc2, 0x48, 0x90, 0x01, 0x0a, 0x8d, 0x01, 0x0a, 0x08, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x1a, 0x80, 0x01, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, - 0x20, 0x3e, 0x20, 0x30, 0x20, 0x26, 0x26, 0x20, 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, - 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x77, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, - 0x69, 0x6e, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0c, 0x42, 0x60, 0xc2, 0x48, 0x5d, 0x0a, 0x5b, 0x0a, - 0x0c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x1a, 0x4b, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, - 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, - 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, - 0x6e, 0x12, 0xe9, 0x01, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x42, 0xd6, - 0x01, 0xc2, 0x48, 0xd2, 0x01, 0x0a, 0x6e, 0x0a, 0x08, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x69, - 0x70, 0x12, 0x1a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x46, 0x21, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x34, - 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, - 0x3d, 0x3d, 0x20, 0x31, 0x36, 0x0a, 0x60, 0x0a, 0x0e, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x69, - 0x70, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, - 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, - 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x1d, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x70, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, - 0x28, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x48, 0x00, 0x52, 0x02, 0x69, 0x70, 0x12, 0xe4, 0x01, - 0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x42, 0xcd, 0x01, 0xc2, - 0x48, 0xc9, 0x01, 0x0a, 0x5f, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x76, - 0x34, 0x12, 0x1c, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, - 0x33, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x76, 0x34, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, - 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, - 0x3d, 0x3d, 0x20, 0x34, 0x0a, 0x66, 0x0a, 0x10, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x69, 0x70, - 0x76, 0x34, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x31, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, - 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, - 0x50, 0x76, 0x34, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x1f, 0x21, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x76, 0x34, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x48, 0x00, 0x52, 0x04, - 0x69, 0x70, 0x76, 0x34, 0x12, 0xe5, 0x01, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x36, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x08, 0x42, 0xce, 0x01, 0xc2, 0x48, 0xca, 0x01, 0x0a, 0x60, 0x0a, 0x0a, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x76, 0x36, 0x12, 0x1c, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x34, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x70, 0x76, 0x36, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, - 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x36, 0x0a, 0x66, 0x0a, 0x10, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x76, 0x36, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x31, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, - 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x1a, 0x1f, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x70, 0x76, 0x36, - 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, - 0x21, 0x3d, 0x20, 0x30, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x36, 0x12, 0xd5, 0x01, 0x0a, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x42, 0xbe, 0x01, 0xc2, 0x48, - 0xba, 0x01, 0x0a, 0x58, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x75, 0x75, 0x69, 0x64, - 0x12, 0x14, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x34, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x75, - 0x75, 0x69, 0x64, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, - 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x36, 0x0a, 0x5e, 0x0a, 0x10, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x29, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, - 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x1f, 0x21, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x48, 0x00, 0x52, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, - 0x0e, 0x20, 0x03, 0x28, 0x0c, 0x42, 0x1a, 0xc2, 0x48, 0x17, 0x0a, 0x15, 0x0a, 0x0d, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, - 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, - 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0c, 0x0a, 0x0a, 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x22, 0xea, 0x03, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x75, 0x6c, 0x65, - 0x73, 0x12, 0x83, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x42, 0x6d, 0xc2, 0x48, 0x6a, 0x0a, 0x68, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, - 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, - 0x71, 0x75, 0x61, 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, - 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, - 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x7c, 0x0a, 0x02, 0x69, 0x6e, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x42, 0x6c, 0xc2, 0x48, 0x69, 0x0a, 0x67, 0x0a, 0x07, 0x65, - 0x6e, 0x75, 0x6d, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, - 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x76, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, - 0x69, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x42, 0x5f, 0xc2, 0x48, 0x5c, 0x0a, 0x5a, 0x0a, - 0x0b, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x1a, 0x4b, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, - 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, - 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, - 0x12, 0x33, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x05, 0x42, 0x19, 0xc2, 0x48, 0x16, 0x0a, 0x14, 0x0a, 0x0c, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, - 0x22, 0x90, 0x04, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x75, 0x6c, - 0x65, 0x73, 0x12, 0xa0, 0x01, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x82, 0x01, 0xc2, 0x48, 0x7f, 0x0a, 0x7d, 0x0a, 0x12, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x1a, 0x67, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, - 0x7a, 0x65, 0x28, 0x29, 0x29, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x69, - 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, - 0x20, 0x25, 0x64, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x28, 0x73, 0x29, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x08, 0x6d, 0x69, 0x6e, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0xa6, 0x01, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x88, 0x01, 0xc2, 0x48, 0x84, 0x01, - 0x0a, 0x81, 0x01, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x6d, 0x61, - 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x6b, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x29, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x6e, 0x6f, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x69, 0x74, 0x65, - 0x6d, 0x28, 0x73, 0x29, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x78, - 0x0a, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x60, - 0xc2, 0x48, 0x5d, 0x0a, 0x5b, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x28, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x1a, 0x1e, 0x21, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, - 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x28, 0x29, - 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x75, 0x6c, 0x65, - 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, - 0x80, 0x80, 0x02, 0x22, 0xac, 0x03, 0x0a, 0x08, 0x4d, 0x61, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x12, 0x99, 0x01, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x42, 0x7c, 0xc2, 0x48, 0x79, 0x0a, 0x77, 0x0a, 0x0d, 0x6d, 0x61, 0x70, - 0x2e, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x1a, 0x66, 0x75, 0x69, 0x6e, 0x74, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x29, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x20, - 0x3f, 0x20, 0x27, 0x6d, 0x61, 0x70, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x25, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x98, 0x01, 0x0a, - 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x42, 0x7b, 0xc2, 0x48, 0x78, 0x0a, 0x76, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x2e, 0x6d, 0x61, 0x78, - 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x1a, 0x65, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x29, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x20, 0x3f, 0x20, 0x27, 0x6d, - 0x61, 0x70, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x74, 0x20, 0x6d, 0x6f, - 0x73, 0x74, 0x20, 0x25, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x27, 0x2e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6d, 0x61, 0x78, - 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x08, 0x6d, - 0x61, 0x78, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, - 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, - 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, - 0x80, 0x02, 0x22, 0x31, 0x0a, 0x08, 0x41, 0x6e, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, - 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x22, 0xec, 0x16, 0x0a, 0x0d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0xa2, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x71, 0xc2, 0x48, 0x6e, 0x0a, 0x6c, 0x0a, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x21, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0xa6, 0x01, 0x0a, - 0x02, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0xc2, 0x48, 0x76, 0x0a, 0x74, 0x0a, 0x0b, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6c, 0x74, 0x1a, 0x65, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x3f, - 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, - 0x00, 0x52, 0x02, 0x6c, 0x74, 0x12, 0xb9, 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x89, - 0x01, 0xc2, 0x48, 0x85, 0x01, 0x0a, 0x82, 0x01, 0x0a, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x6c, 0x74, 0x65, 0x1a, 0x72, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x74, - 0x65, 0x12, 0xa7, 0x07, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0xf9, 0x06, 0xc2, 0x48, 0xf5, 0x06, - 0x0a, 0x77, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x74, 0x1a, - 0x68, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xb0, 0x01, 0x0a, 0x0e, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, 0x9d, 0x01, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xb8, 0x01, 0x0a, - 0x18, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x5f, - 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0x9b, 0x01, 0x68, 0x61, 0x73, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc0, 0x01, 0x0a, 0x0f, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xac, 0x01, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, - 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc8, 0x01, 0x0a, 0x19, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xaa, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, - 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, - 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, 0x74, 0x12, 0xf4, 0x07, 0x0a, 0x03, - 0x67, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0xc4, 0x07, 0xc2, 0x48, 0xc0, 0x07, 0x0a, 0x85, 0x01, 0x0a, 0x0c, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x74, 0x65, 0x1a, 0x75, 0x21, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x0a, 0xbf, 0x01, 0x0a, 0x0f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, 0xab, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, - 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc7, 0x01, 0x0a, 0x19, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, - 0x69, 0x76, 0x65, 0x1a, 0xa9, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, - 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, - 0xcf, 0x01, 0x0a, 0x10, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x74, 0x65, - 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xba, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, - 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, - 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x0a, 0xd7, 0x01, 0x0a, 0x1a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, - 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, - 0x1a, 0xb8, 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, - 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, - 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, - 0x74, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x70, 0xc2, 0x48, 0x6d, 0x0a, - 0x6b, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x69, 0x6e, 0x1a, 0x5c, - 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x29, - 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, - 0x69, 0x73, 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, - 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x52, 0x02, 0x69, 0x6e, - 0x12, 0x95, 0x01, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x63, 0xc2, 0x48, - 0x60, 0x0a, 0x5e, 0x0a, 0x0f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x6f, - 0x74, 0x5f, 0x69, 0x6e, 0x1a, 0x4b, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x73, - 0x74, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, - 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x52, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x1d, 0xc2, 0x48, 0x1a, 0x0a, 0x18, 0x0a, 0x10, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, - 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, - 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, - 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, - 0x74, 0x68, 0x61, 0x6e, 0x22, 0x86, 0x06, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, - 0x73, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0xc0, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, - 0x61, 0x73, 0x6b, 0x42, 0x8d, 0x01, 0xc2, 0x48, 0x89, 0x01, 0x0a, 0x86, 0x01, 0x0a, 0x10, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x1a, - 0x72, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, - 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x73, 0x20, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x74, 0x68, - 0x73, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, - 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x73, 0x5d, 0x29, 0x20, 0x3a, - 0x20, 0x27, 0x27, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0xd7, 0x01, 0x0a, 0x02, 0x69, - 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0xc6, 0x01, 0xc2, 0x48, 0xc2, 0x01, 0x0a, 0xbf, - 0x01, 0x0a, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x69, 0x6e, - 0x1a, 0xad, 0x01, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x73, 0x2e, 0x61, - 0x6c, 0x6c, 0x28, 0x70, 0x2c, 0x20, 0x70, 0x20, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, - 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x2e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, - 0x28, 0x66, 0x2c, 0x20, 0x70, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x57, 0x69, 0x74, 0x68, - 0x28, 0x66, 0x2b, 0x27, 0x2e, 0x27, 0x29, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x70, - 0x61, 0x74, 0x68, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2c, 0x20, 0x27, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, - 0x52, 0x02, 0x69, 0x6e, 0x12, 0xf4, 0x01, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0xdc, 0x01, 0xc2, 0x48, 0xd8, 0x01, 0x0a, 0xd5, 0x01, 0x0a, - 0x11, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x6e, 0x6f, 0x74, 0x5f, - 0x69, 0x6e, 0x1a, 0xbf, 0x01, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x73, - 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x70, 0x2c, 0x20, 0x21, 0x28, 0x70, 0x20, 0x69, 0x6e, 0x20, 0x67, - 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, - 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x65, 0x74, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x6e, 0x6f, 0x74, - 0x5f, 0x69, 0x6e, 0x27, 0x29, 0x2e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x28, 0x66, 0x2c, 0x20, - 0x70, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x57, 0x69, 0x74, 0x68, 0x28, 0x66, 0x2b, 0x27, - 0x2e, 0x27, 0x29, 0x29, 0x29, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, - 0x61, 0x74, 0x68, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x28, 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2c, 0x20, 0x27, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x27, 0x29, 0x5d, 0x29, 0x20, - 0x3a, 0x20, 0x27, 0x27, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x55, 0x0a, 0x07, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x1f, 0xc2, 0x48, 0x1c, 0x0a, 0x1a, 0x0a, - 0x12, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0xe8, 0x17, - 0x0a, 0x0e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x12, 0xa4, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x02, 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, 0x42, 0x72, 0xc2, 0x48, - 0x6f, 0x0a, 0x6d, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x5a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x67, 0x65, - 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x27, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, - 0x71, 0x75, 0x61, 0x6c, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, - 0x5b, 0x67, 0x65, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2c, - 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x27, 0x29, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, - 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0xa8, 0x01, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x03, - 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, - 0x42, 0x7a, 0xc2, 0x48, 0x77, 0x0a, 0x75, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x2e, 0x6c, 0x74, 0x1a, 0x65, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x02, - 0x6c, 0x74, 0x12, 0xbb, 0x01, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x04, 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, 0x42, 0x8a, 0x01, 0xc2, - 0x48, 0x86, 0x01, 0x0a, 0x83, 0x01, 0x0a, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x2e, 0x6c, 0x74, 0x65, 0x1a, 0x72, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x74, 0x65, - 0x12, 0x6d, 0x0a, 0x06, 0x6c, 0x74, 0x5f, 0x6e, 0x6f, 0x77, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x42, 0x54, 0xc2, 0x48, 0x51, 0x0a, 0x4f, 0x0a, 0x10, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x2e, 0x6c, 0x74, 0x5f, 0x6e, 0x6f, 0x77, 0x1a, 0x3b, 0x28, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x74, 0x5f, 0x6e, 0x6f, 0x77, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3e, 0x20, 0x6e, 0x6f, 0x77, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6e, 0x6f, 0x77, - 0x27, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x74, 0x4e, 0x6f, 0x77, 0x12, - 0xad, 0x07, 0x0a, 0x02, 0x67, 0x74, 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, 0x42, 0xfe, 0x06, 0xc2, 0x48, 0xfa, 0x06, 0x0a, - 0x78, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x67, 0x74, 0x1a, - 0x68, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xb1, 0x01, 0x0a, 0x0f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x1a, 0x9d, 0x01, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, - 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, - 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xb9, 0x01, - 0x0a, 0x19, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x67, 0x74, 0x5f, 0x6c, - 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0x9b, 0x01, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, - 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc1, 0x01, 0x0a, 0x10, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x67, 0x74, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xac, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc9, 0x01, - 0x0a, 0x1a, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x67, 0x74, 0x5f, 0x6c, - 0x74, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xaa, 0x01, 0x68, - 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x29, 0x3f, - 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, - 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x02, 0x67, 0x74, 0x12, - 0xfa, 0x07, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x06, 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, 0x42, 0xc9, 0x07, 0xc2, 0x48, 0xc5, 0x07, - 0x0a, 0x86, 0x01, 0x0a, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x67, - 0x74, 0x65, 0x1a, 0x75, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, - 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, - 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, - 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc0, 0x01, 0x0a, 0x10, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x1a, 0xab, - 0x01, 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, - 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, - 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xc8, 0x01, 0x0a, - 0x1a, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, - 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xa9, 0x01, 0x68, 0x61, - 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x20, 0x3c, 0x3d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, 0x27, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, - 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, - 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd0, 0x01, 0x0a, 0x11, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, 0x1a, 0xba, 0x01, - 0x68, 0x61, 0x73, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, - 0x26, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x7c, 0x7c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x65, 0x29, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, - 0x74, 0x6f, 0x20, 0x25, 0x73, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x6c, 0x74, 0x65, 0x5d, 0x29, 0x20, 0x3a, 0x20, 0x27, 0x27, 0x0a, 0xd8, 0x01, 0x0a, 0x1b, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x67, 0x74, 0x65, 0x5f, 0x6c, 0x74, 0x65, - 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x1a, 0xb8, 0x01, 0x68, 0x61, 0x73, - 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x2e, 0x67, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, - 0x74, 0x65, 0x20, 0x3c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x3c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, 0x65, 0x29, 0x3f, 0x20, - 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x20, 0x25, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x25, 0x73, - 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, - 0x67, 0x74, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x74, 0x65, 0x5d, 0x29, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x70, 0x0a, 0x06, - 0x67, 0x74, 0x5f, 0x6e, 0x6f, 0x77, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x42, 0x57, 0xc2, 0x48, - 0x54, 0x0a, 0x52, 0x0a, 0x10, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x67, - 0x74, 0x5f, 0x6e, 0x6f, 0x77, 0x1a, 0x3e, 0x28, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x67, 0x74, - 0x5f, 0x6e, 0x6f, 0x77, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x6e, - 0x6f, 0x77, 0x29, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6e, 0x6f, 0x77, 0x27, - 0x20, 0x3a, 0x20, 0x27, 0x27, 0x48, 0x01, 0x52, 0x05, 0x67, 0x74, 0x4e, 0x6f, 0x77, 0x12, 0xb9, - 0x01, 0x0a, 0x06, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x85, 0x01, 0xc2, 0x48, 0x81, - 0x01, 0x0a, 0x7f, 0x0a, 0x10, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x77, - 0x69, 0x74, 0x68, 0x69, 0x6e, 0x1a, 0x6b, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x20, 0x6e, 0x6f, - 0x77, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x20, 0x6e, 0x6f, 0x77, 0x2b, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x2e, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x27, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x25, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x6e, 0x6f, 0x77, 0x27, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x5b, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x5d, 0x29, 0x20, 0x3a, 0x20, - 0x27, 0x27, 0x52, 0x06, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x03, 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, 0x42, 0x1e, 0xc2, 0x48, 0x1b, 0x0a, 0x19, 0x0a, 0x11, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x1a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0b, 0x0a, 0x09, 0x6c, - 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x22, 0x45, 0x0a, 0x0a, 0x56, 0x69, 0x6f, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x66, - 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0xc5, 0x01, 0x0a, 0x09, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, - 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, - 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x50, 0x61, 0x74, 0x68, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x2b, 0x0a, 0x04, - 0x72, 0x75, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x66, - 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x50, - 0x61, 0x74, 0x68, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, - 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, - 0x66, 0x6f, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, - 0x6f, 0x72, 0x4b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x0a, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x22, 0x47, 0x0a, 0x09, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x50, 0x61, 0x74, 0x68, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x22, 0xcc, 0x03, 0x0a, 0x10, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x07, 0x6b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x08, - 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, - 0x52, 0x07, 0x62, 0x6f, 0x6f, 0x6c, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x0a, 0x07, 0x69, 0x6e, 0x74, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x06, 0x69, 0x6e, - 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x08, 0x75, 0x69, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x07, 0x75, 0x69, 0x6e, 0x74, 0x4b, 0x65, - 0x79, 0x12, 0x1f, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4b, - 0x65, 0x79, 0x42, 0x0b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2a, - 0xa1, 0x01, 0x0a, 0x06, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x47, - 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x49, 0x46, 0x5f, - 0x5a, 0x45, 0x52, 0x4f, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, - 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x57, 0x41, 0x59, 0x53, 0x10, 0x03, 0x22, - 0x04, 0x08, 0x02, 0x10, 0x02, 0x2a, 0x0c, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x45, 0x4d, - 0x50, 0x54, 0x59, 0x2a, 0x0e, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, - 0x55, 0x4c, 0x54, 0x2a, 0x17, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x49, 0x46, 0x5f, 0x44, - 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x2a, 0x15, 0x49, 0x47, - 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x49, 0x46, 0x5f, 0x55, 0x4e, 0x50, 0x4f, 0x50, 0x55, 0x4c, 0x41, - 0x54, 0x45, 0x44, 0x2a, 0x6e, 0x0a, 0x0a, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x67, 0x65, - 0x78, 0x12, 0x1b, 0x0a, 0x17, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x52, 0x45, 0x47, 0x45, 0x58, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x20, - 0x0a, 0x1c, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x52, 0x45, 0x47, 0x45, 0x58, 0x5f, 0x48, 0x54, - 0x54, 0x50, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, - 0x12, 0x21, 0x0a, 0x1d, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x52, 0x45, 0x47, 0x45, 0x58, 0x5f, - 0x48, 0x54, 0x54, 0x50, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x5f, 0x56, 0x41, 0x4c, 0x55, - 0x45, 0x10, 0x02, 0x3a, 0x56, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x87, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x75, 0x6c, - 0x65, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x4e, 0x0a, 0x05, 0x6f, - 0x6e, 0x65, 0x6f, 0x66, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x87, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x75, 0x66, - 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x52, - 0x75, 0x6c, 0x65, 0x73, 0x52, 0x05, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x3a, 0x4e, 0x0a, 0x05, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x87, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x75, 0x66, - 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, - 0x75, 0x6c, 0x65, 0x73, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x5d, 0x0a, 0x0a, 0x70, - 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x88, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x50, - 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x0a, - 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x42, 0xbb, 0x01, 0x0a, 0x10, 0x63, - 0x6f, 0x6d, 0x2e, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x42, - 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x47, 0x62, 0x75, 0x66, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x67, 0x65, 0x6e, 0x2f, - 0x67, 0x6f, 0x2f, 0x62, 0x75, 0x66, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x62, 0x75, 0x66, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0xa2, 0x02, 0x03, 0x42, 0x56, 0x58, 0xaa, - 0x02, 0x0c, 0x42, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0xca, 0x02, - 0x0c, 0x42, 0x75, 0x66, 0x5c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0xe2, 0x02, 0x18, - 0x42, 0x75, 0x66, 0x5c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x42, 0x75, 0x66, 0x3a, 0x3a, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, -} - -var ( - file_buf_validate_validate_proto_rawDescOnce sync.Once - file_buf_validate_validate_proto_rawDescData = file_buf_validate_validate_proto_rawDesc -) - -func file_buf_validate_validate_proto_rawDescGZIP() []byte { - file_buf_validate_validate_proto_rawDescOnce.Do(func() { - file_buf_validate_validate_proto_rawDescData = protoimpl.X.CompressGZIP(file_buf_validate_validate_proto_rawDescData) - }) - return file_buf_validate_validate_proto_rawDescData -} - -var file_buf_validate_validate_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_buf_validate_validate_proto_msgTypes = make([]protoimpl.MessageInfo, 32) -var file_buf_validate_validate_proto_goTypes = []any{ - (Ignore)(0), // 0: buf.validate.Ignore - (KnownRegex)(0), // 1: buf.validate.KnownRegex - (*Rule)(nil), // 2: buf.validate.Rule - (*MessageRules)(nil), // 3: buf.validate.MessageRules - (*MessageOneofRule)(nil), // 4: buf.validate.MessageOneofRule - (*OneofRules)(nil), // 5: buf.validate.OneofRules - (*FieldRules)(nil), // 6: buf.validate.FieldRules - (*PredefinedRules)(nil), // 7: buf.validate.PredefinedRules - (*FloatRules)(nil), // 8: buf.validate.FloatRules - (*DoubleRules)(nil), // 9: buf.validate.DoubleRules - (*Int32Rules)(nil), // 10: buf.validate.Int32Rules - (*Int64Rules)(nil), // 11: buf.validate.Int64Rules - (*UInt32Rules)(nil), // 12: buf.validate.UInt32Rules - (*UInt64Rules)(nil), // 13: buf.validate.UInt64Rules - (*SInt32Rules)(nil), // 14: buf.validate.SInt32Rules - (*SInt64Rules)(nil), // 15: buf.validate.SInt64Rules - (*Fixed32Rules)(nil), // 16: buf.validate.Fixed32Rules - (*Fixed64Rules)(nil), // 17: buf.validate.Fixed64Rules - (*SFixed32Rules)(nil), // 18: buf.validate.SFixed32Rules - (*SFixed64Rules)(nil), // 19: buf.validate.SFixed64Rules - (*BoolRules)(nil), // 20: buf.validate.BoolRules - (*StringRules)(nil), // 21: buf.validate.StringRules - (*BytesRules)(nil), // 22: buf.validate.BytesRules - (*EnumRules)(nil), // 23: buf.validate.EnumRules - (*RepeatedRules)(nil), // 24: buf.validate.RepeatedRules - (*MapRules)(nil), // 25: buf.validate.MapRules - (*AnyRules)(nil), // 26: buf.validate.AnyRules - (*DurationRules)(nil), // 27: buf.validate.DurationRules - (*FieldMaskRules)(nil), // 28: buf.validate.FieldMaskRules - (*TimestampRules)(nil), // 29: buf.validate.TimestampRules - (*Violations)(nil), // 30: buf.validate.Violations - (*Violation)(nil), // 31: buf.validate.Violation - (*FieldPath)(nil), // 32: buf.validate.FieldPath - (*FieldPathElement)(nil), // 33: buf.validate.FieldPathElement - (*durationpb.Duration)(nil), // 34: google.protobuf.Duration - (*fieldmaskpb.FieldMask)(nil), // 35: google.protobuf.FieldMask - (*timestamppb.Timestamp)(nil), // 36: google.protobuf.Timestamp - (descriptorpb.FieldDescriptorProto_Type)(0), // 37: google.protobuf.FieldDescriptorProto.Type - (*descriptorpb.MessageOptions)(nil), // 38: google.protobuf.MessageOptions - (*descriptorpb.OneofOptions)(nil), // 39: google.protobuf.OneofOptions - (*descriptorpb.FieldOptions)(nil), // 40: google.protobuf.FieldOptions -} -var file_buf_validate_validate_proto_depIdxs = []int32{ - 2, // 0: buf.validate.MessageRules.cel:type_name -> buf.validate.Rule - 4, // 1: buf.validate.MessageRules.oneof:type_name -> buf.validate.MessageOneofRule - 2, // 2: buf.validate.FieldRules.cel:type_name -> buf.validate.Rule - 0, // 3: buf.validate.FieldRules.ignore:type_name -> buf.validate.Ignore - 8, // 4: buf.validate.FieldRules.float:type_name -> buf.validate.FloatRules - 9, // 5: buf.validate.FieldRules.double:type_name -> buf.validate.DoubleRules - 10, // 6: buf.validate.FieldRules.int32:type_name -> buf.validate.Int32Rules - 11, // 7: buf.validate.FieldRules.int64:type_name -> buf.validate.Int64Rules - 12, // 8: buf.validate.FieldRules.uint32:type_name -> buf.validate.UInt32Rules - 13, // 9: buf.validate.FieldRules.uint64:type_name -> buf.validate.UInt64Rules - 14, // 10: buf.validate.FieldRules.sint32:type_name -> buf.validate.SInt32Rules - 15, // 11: buf.validate.FieldRules.sint64:type_name -> buf.validate.SInt64Rules - 16, // 12: buf.validate.FieldRules.fixed32:type_name -> buf.validate.Fixed32Rules - 17, // 13: buf.validate.FieldRules.fixed64:type_name -> buf.validate.Fixed64Rules - 18, // 14: buf.validate.FieldRules.sfixed32:type_name -> buf.validate.SFixed32Rules - 19, // 15: buf.validate.FieldRules.sfixed64:type_name -> buf.validate.SFixed64Rules - 20, // 16: buf.validate.FieldRules.bool:type_name -> buf.validate.BoolRules - 21, // 17: buf.validate.FieldRules.string:type_name -> buf.validate.StringRules - 22, // 18: buf.validate.FieldRules.bytes:type_name -> buf.validate.BytesRules - 23, // 19: buf.validate.FieldRules.enum:type_name -> buf.validate.EnumRules - 24, // 20: buf.validate.FieldRules.repeated:type_name -> buf.validate.RepeatedRules - 25, // 21: buf.validate.FieldRules.map:type_name -> buf.validate.MapRules - 26, // 22: buf.validate.FieldRules.any:type_name -> buf.validate.AnyRules - 27, // 23: buf.validate.FieldRules.duration:type_name -> buf.validate.DurationRules - 28, // 24: buf.validate.FieldRules.field_mask:type_name -> buf.validate.FieldMaskRules - 29, // 25: buf.validate.FieldRules.timestamp:type_name -> buf.validate.TimestampRules - 2, // 26: buf.validate.PredefinedRules.cel:type_name -> buf.validate.Rule - 1, // 27: buf.validate.StringRules.well_known_regex:type_name -> buf.validate.KnownRegex - 6, // 28: buf.validate.RepeatedRules.items:type_name -> buf.validate.FieldRules - 6, // 29: buf.validate.MapRules.keys:type_name -> buf.validate.FieldRules - 6, // 30: buf.validate.MapRules.values:type_name -> buf.validate.FieldRules - 34, // 31: buf.validate.DurationRules.const:type_name -> google.protobuf.Duration - 34, // 32: buf.validate.DurationRules.lt:type_name -> google.protobuf.Duration - 34, // 33: buf.validate.DurationRules.lte:type_name -> google.protobuf.Duration - 34, // 34: buf.validate.DurationRules.gt:type_name -> google.protobuf.Duration - 34, // 35: buf.validate.DurationRules.gte:type_name -> google.protobuf.Duration - 34, // 36: buf.validate.DurationRules.in:type_name -> google.protobuf.Duration - 34, // 37: buf.validate.DurationRules.not_in:type_name -> google.protobuf.Duration - 34, // 38: buf.validate.DurationRules.example:type_name -> google.protobuf.Duration - 35, // 39: buf.validate.FieldMaskRules.const:type_name -> google.protobuf.FieldMask - 35, // 40: buf.validate.FieldMaskRules.example:type_name -> google.protobuf.FieldMask - 36, // 41: buf.validate.TimestampRules.const:type_name -> google.protobuf.Timestamp - 36, // 42: buf.validate.TimestampRules.lt:type_name -> google.protobuf.Timestamp - 36, // 43: buf.validate.TimestampRules.lte:type_name -> google.protobuf.Timestamp - 36, // 44: buf.validate.TimestampRules.gt:type_name -> google.protobuf.Timestamp - 36, // 45: buf.validate.TimestampRules.gte:type_name -> google.protobuf.Timestamp - 34, // 46: buf.validate.TimestampRules.within:type_name -> google.protobuf.Duration - 36, // 47: buf.validate.TimestampRules.example:type_name -> google.protobuf.Timestamp - 31, // 48: buf.validate.Violations.violations:type_name -> buf.validate.Violation - 32, // 49: buf.validate.Violation.field:type_name -> buf.validate.FieldPath - 32, // 50: buf.validate.Violation.rule:type_name -> buf.validate.FieldPath - 33, // 51: buf.validate.FieldPath.elements:type_name -> buf.validate.FieldPathElement - 37, // 52: buf.validate.FieldPathElement.field_type:type_name -> google.protobuf.FieldDescriptorProto.Type - 37, // 53: buf.validate.FieldPathElement.key_type:type_name -> google.protobuf.FieldDescriptorProto.Type - 37, // 54: buf.validate.FieldPathElement.value_type:type_name -> google.protobuf.FieldDescriptorProto.Type - 38, // 55: buf.validate.message:extendee -> google.protobuf.MessageOptions - 39, // 56: buf.validate.oneof:extendee -> google.protobuf.OneofOptions - 40, // 57: buf.validate.field:extendee -> google.protobuf.FieldOptions - 40, // 58: buf.validate.predefined:extendee -> google.protobuf.FieldOptions - 3, // 59: buf.validate.message:type_name -> buf.validate.MessageRules - 5, // 60: buf.validate.oneof:type_name -> buf.validate.OneofRules - 6, // 61: buf.validate.field:type_name -> buf.validate.FieldRules - 7, // 62: buf.validate.predefined:type_name -> buf.validate.PredefinedRules - 63, // [63:63] is the sub-list for method output_type - 63, // [63:63] is the sub-list for method input_type - 59, // [59:63] is the sub-list for extension type_name - 55, // [55:59] is the sub-list for extension extendee - 0, // [0:55] is the sub-list for field type_name -} - -func init() { file_buf_validate_validate_proto_init() } -func file_buf_validate_validate_proto_init() { - if File_buf_validate_validate_proto != nil { - return - } - file_buf_validate_validate_proto_msgTypes[4].OneofWrappers = []any{ - (*FieldRules_Float)(nil), - (*FieldRules_Double)(nil), - (*FieldRules_Int32)(nil), - (*FieldRules_Int64)(nil), - (*FieldRules_Uint32)(nil), - (*FieldRules_Uint64)(nil), - (*FieldRules_Sint32)(nil), - (*FieldRules_Sint64)(nil), - (*FieldRules_Fixed32)(nil), - (*FieldRules_Fixed64)(nil), - (*FieldRules_Sfixed32)(nil), - (*FieldRules_Sfixed64)(nil), - (*FieldRules_Bool)(nil), - (*FieldRules_String_)(nil), - (*FieldRules_Bytes)(nil), - (*FieldRules_Enum)(nil), - (*FieldRules_Repeated)(nil), - (*FieldRules_Map)(nil), - (*FieldRules_Any)(nil), - (*FieldRules_Duration)(nil), - (*FieldRules_FieldMask)(nil), - (*FieldRules_Timestamp)(nil), - } - file_buf_validate_validate_proto_msgTypes[6].OneofWrappers = []any{ - (*FloatRules_Lt)(nil), - (*FloatRules_Lte)(nil), - (*FloatRules_Gt)(nil), - (*FloatRules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[7].OneofWrappers = []any{ - (*DoubleRules_Lt)(nil), - (*DoubleRules_Lte)(nil), - (*DoubleRules_Gt)(nil), - (*DoubleRules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[8].OneofWrappers = []any{ - (*Int32Rules_Lt)(nil), - (*Int32Rules_Lte)(nil), - (*Int32Rules_Gt)(nil), - (*Int32Rules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[9].OneofWrappers = []any{ - (*Int64Rules_Lt)(nil), - (*Int64Rules_Lte)(nil), - (*Int64Rules_Gt)(nil), - (*Int64Rules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[10].OneofWrappers = []any{ - (*UInt32Rules_Lt)(nil), - (*UInt32Rules_Lte)(nil), - (*UInt32Rules_Gt)(nil), - (*UInt32Rules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[11].OneofWrappers = []any{ - (*UInt64Rules_Lt)(nil), - (*UInt64Rules_Lte)(nil), - (*UInt64Rules_Gt)(nil), - (*UInt64Rules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[12].OneofWrappers = []any{ - (*SInt32Rules_Lt)(nil), - (*SInt32Rules_Lte)(nil), - (*SInt32Rules_Gt)(nil), - (*SInt32Rules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[13].OneofWrappers = []any{ - (*SInt64Rules_Lt)(nil), - (*SInt64Rules_Lte)(nil), - (*SInt64Rules_Gt)(nil), - (*SInt64Rules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[14].OneofWrappers = []any{ - (*Fixed32Rules_Lt)(nil), - (*Fixed32Rules_Lte)(nil), - (*Fixed32Rules_Gt)(nil), - (*Fixed32Rules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[15].OneofWrappers = []any{ - (*Fixed64Rules_Lt)(nil), - (*Fixed64Rules_Lte)(nil), - (*Fixed64Rules_Gt)(nil), - (*Fixed64Rules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[16].OneofWrappers = []any{ - (*SFixed32Rules_Lt)(nil), - (*SFixed32Rules_Lte)(nil), - (*SFixed32Rules_Gt)(nil), - (*SFixed32Rules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[17].OneofWrappers = []any{ - (*SFixed64Rules_Lt)(nil), - (*SFixed64Rules_Lte)(nil), - (*SFixed64Rules_Gt)(nil), - (*SFixed64Rules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[19].OneofWrappers = []any{ - (*StringRules_Email)(nil), - (*StringRules_Hostname)(nil), - (*StringRules_Ip)(nil), - (*StringRules_Ipv4)(nil), - (*StringRules_Ipv6)(nil), - (*StringRules_Uri)(nil), - (*StringRules_UriRef)(nil), - (*StringRules_Address)(nil), - (*StringRules_Uuid)(nil), - (*StringRules_Tuuid)(nil), - (*StringRules_IpWithPrefixlen)(nil), - (*StringRules_Ipv4WithPrefixlen)(nil), - (*StringRules_Ipv6WithPrefixlen)(nil), - (*StringRules_IpPrefix)(nil), - (*StringRules_Ipv4Prefix)(nil), - (*StringRules_Ipv6Prefix)(nil), - (*StringRules_HostAndPort)(nil), - (*StringRules_Ulid)(nil), - (*StringRules_ProtobufFqn)(nil), - (*StringRules_ProtobufDotFqn)(nil), - (*StringRules_WellKnownRegex)(nil), - } - file_buf_validate_validate_proto_msgTypes[20].OneofWrappers = []any{ - (*BytesRules_Ip)(nil), - (*BytesRules_Ipv4)(nil), - (*BytesRules_Ipv6)(nil), - (*BytesRules_Uuid)(nil), - } - file_buf_validate_validate_proto_msgTypes[25].OneofWrappers = []any{ - (*DurationRules_Lt)(nil), - (*DurationRules_Lte)(nil), - (*DurationRules_Gt)(nil), - (*DurationRules_Gte)(nil), - } - file_buf_validate_validate_proto_msgTypes[27].OneofWrappers = []any{ - (*TimestampRules_Lt)(nil), - (*TimestampRules_Lte)(nil), - (*TimestampRules_LtNow)(nil), - (*TimestampRules_Gt)(nil), - (*TimestampRules_Gte)(nil), - (*TimestampRules_GtNow)(nil), - } - file_buf_validate_validate_proto_msgTypes[31].OneofWrappers = []any{ - (*FieldPathElement_Index)(nil), - (*FieldPathElement_BoolKey)(nil), - (*FieldPathElement_IntKey)(nil), - (*FieldPathElement_UintKey)(nil), - (*FieldPathElement_StringKey)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_buf_validate_validate_proto_rawDesc, - NumEnums: 2, - NumMessages: 32, - NumExtensions: 4, - NumServices: 0, - }, - GoTypes: file_buf_validate_validate_proto_goTypes, - DependencyIndexes: file_buf_validate_validate_proto_depIdxs, - EnumInfos: file_buf_validate_validate_proto_enumTypes, - MessageInfos: file_buf_validate_validate_proto_msgTypes, - ExtensionInfos: file_buf_validate_validate_proto_extTypes, - }.Build() - File_buf_validate_validate_proto = out.File - file_buf_validate_validate_proto_rawDesc = nil - file_buf_validate_validate_proto_goTypes = nil - file_buf_validate_validate_proto_depIdxs = nil -} diff --git a/gen/go-client/google/api/annotations.pb.go b/gen/go-client/google/api/annotations.pb.go deleted file mode 100644 index f0c73e26..00000000 --- a/gen/go-client/google/api/annotations.pb.go +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.35.2 -// protoc (unknown) -// source: google/api/annotations.proto - -package annotations - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - reflect "reflect" -) - -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) -) - -var file_google_api_annotations_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptorpb.MethodOptions)(nil), - ExtensionType: (*HttpRule)(nil), - Field: 72295728, - Name: "google.api.http", - Tag: "bytes,72295728,opt,name=http", - Filename: "google/api/annotations.proto", - }, -} - -// Extension fields to descriptorpb.MethodOptions. -var ( - // See `HttpRule`. - // - // optional google.api.HttpRule http = 72295728; - E_Http = &file_google_api_annotations_proto_extTypes[0] -) - -var File_google_api_annotations_proto protoreflect.FileDescriptor - -var file_google_api_annotations_proto_rawDesc = []byte{ - 0x0a, 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, 0x12, 0x0a, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x15, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x3a, 0x4b, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x12, 0x1e, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xb0, 0xca, 0xbc, 0x22, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, - 0x42, 0xae, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x42, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x03, 0x47, 0x41, 0x58, - 0xaa, 0x02, 0x0a, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x41, 0x70, 0x69, 0xca, 0x02, 0x0a, - 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x41, 0x70, 0x69, 0xe2, 0x02, 0x16, 0x47, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0xea, 0x02, 0x0b, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x41, 0x70, - 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_google_api_annotations_proto_goTypes = []any{ - (*descriptorpb.MethodOptions)(nil), // 0: google.protobuf.MethodOptions - (*HttpRule)(nil), // 1: google.api.HttpRule -} -var file_google_api_annotations_proto_depIdxs = []int32{ - 0, // 0: google.api.http:extendee -> google.protobuf.MethodOptions - 1, // 1: google.api.http:type_name -> google.api.HttpRule - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 1, // [1:2] is the sub-list for extension type_name - 0, // [0:1] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_google_api_annotations_proto_init() } -func file_google_api_annotations_proto_init() { - if File_google_api_annotations_proto != nil { - return - } - file_google_api_http_proto_init() - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_api_annotations_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 1, - NumServices: 0, - }, - GoTypes: file_google_api_annotations_proto_goTypes, - DependencyIndexes: file_google_api_annotations_proto_depIdxs, - ExtensionInfos: file_google_api_annotations_proto_extTypes, - }.Build() - File_google_api_annotations_proto = out.File - file_google_api_annotations_proto_rawDesc = nil - file_google_api_annotations_proto_goTypes = nil - file_google_api_annotations_proto_depIdxs = nil -} diff --git a/gen/go-client/google/api/http.pb.go b/gen/go-client/google/api/http.pb.go deleted file mode 100644 index 3b5306b9..00000000 --- a/gen/go-client/google/api/http.pb.go +++ /dev/null @@ -1,733 +0,0 @@ -// Copyright 2026 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.35.2 -// protoc (unknown) -// source: google/api/http.proto - -package annotations - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Defines the HTTP configuration for an API service. It contains a list of -// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method -// to one or more HTTP REST API methods. -type Http struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A list of HTTP configuration rules that apply to individual API methods. - // - // **NOTE:** All service configuration rules follow "last one wins" order. - Rules []*HttpRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` - // When set to true, URL path parameters will be fully URI-decoded except in - // cases of single segment matches in reserved expansion, where "%2F" will be - // left encoded. - // - // The default behavior is to not decode RFC 6570 reserved characters in multi - // segment matches. - FullyDecodeReservedExpansion bool `protobuf:"varint,2,opt,name=fully_decode_reserved_expansion,json=fullyDecodeReservedExpansion,proto3" json:"fully_decode_reserved_expansion,omitempty"` -} - -func (x *Http) Reset() { - *x = Http{} - mi := &file_google_api_http_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Http) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Http) ProtoMessage() {} - -func (x *Http) ProtoReflect() protoreflect.Message { - mi := &file_google_api_http_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Http.ProtoReflect.Descriptor instead. -func (*Http) Descriptor() ([]byte, []int) { - return file_google_api_http_proto_rawDescGZIP(), []int{0} -} - -func (x *Http) GetRules() []*HttpRule { - if x != nil { - return x.Rules - } - return nil -} - -func (x *Http) GetFullyDecodeReservedExpansion() bool { - if x != nil { - return x.FullyDecodeReservedExpansion - } - return false -} - -// gRPC Transcoding -// -// gRPC Transcoding is a feature for mapping between a gRPC method and one or -// more HTTP REST endpoints. It allows developers to build a single API service -// that supports both gRPC APIs and REST APIs. Many systems, including [Google -// APIs](https://github.com/googleapis/googleapis), -// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC -// Gateway](https://github.com/grpc-ecosystem/grpc-gateway), -// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature -// and use it for large scale production services. -// -// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies -// how different portions of the gRPC request message are mapped to the URL -// path, URL query parameters, and HTTP request body. It also controls how the -// gRPC response message is mapped to the HTTP response body. `HttpRule` is -// typically specified as an `google.api.http` annotation on the gRPC method. -// -// Each mapping specifies a URL path template and an HTTP method. The path -// template may refer to one or more fields in the gRPC request message, as long -// as each field is a non-repeated field with a primitive (non-message) type. -// The path template controls how fields of the request message are mapped to -// the URL path. -// -// Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/{name=messages/*}" -// }; -// } -// } -// message GetMessageRequest { -// string name = 1; // Mapped to URL path. -// } -// message Message { -// string text = 1; // The resource content. -// } -// -// This enables an HTTP REST to gRPC mapping as below: -// -// - HTTP: `GET /v1/messages/123456` -// - gRPC: `GetMessage(name: "messages/123456")` -// -// Any fields in the request message which are not bound by the path template -// automatically become HTTP query parameters if there is no HTTP request body. -// For example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get:"/v1/messages/{message_id}" -// }; -// } -// } -// message GetMessageRequest { -// message SubMessage { -// string subfield = 1; -// } -// string message_id = 1; // Mapped to URL path. -// int64 revision = 2; // Mapped to URL query parameter `revision`. -// SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. -// } -// -// This enables a HTTP JSON to RPC mapping as below: -// -// - HTTP: `GET /v1/messages/123456?revision=2&sub.subfield=foo` -// - gRPC: `GetMessage(message_id: "123456" revision: 2 sub: -// SubMessage(subfield: "foo"))` -// -// Note that fields which are mapped to URL query parameters must have a -// primitive type or a repeated primitive type or a non-repeated message type. -// In the case of a repeated type, the parameter can be repeated in the URL -// as `...?param=A¶m=B`. In the case of a message type, each field of the -// message is mapped to a separate parameter, such as -// `...?foo.a=A&foo.b=B&foo.c=C`. -// -// For HTTP methods that allow a request body, the `body` field -// specifies the mapping. Consider a REST update method on the -// message resource collection: -// -// service Messaging { -// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "message" -// }; -// } -// } -// message UpdateMessageRequest { -// string message_id = 1; // mapped to the URL -// Message message = 2; // mapped to the body -// } -// -// The following HTTP JSON to RPC mapping is enabled, where the -// representation of the JSON in the request body is determined by -// protos JSON encoding: -// -// - HTTP: `PATCH /v1/messages/123456 { "text": "Hi!" }` -// - gRPC: `UpdateMessage(message_id: "123456" message { text: "Hi!" })` -// -// The special name `*` can be used in the body mapping to define that -// every field not bound by the path template should be mapped to the -// request body. This enables the following alternative definition of -// the update method: -// -// service Messaging { -// rpc UpdateMessage(Message) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "*" -// }; -// } -// } -// message Message { -// string message_id = 1; -// string text = 2; -// } -// -// The following HTTP JSON to RPC mapping is enabled: -// -// - HTTP: `PATCH /v1/messages/123456 { "text": "Hi!" }` -// - gRPC: `UpdateMessage(message_id: "123456" text: "Hi!")` -// -// Note that when using `*` in the body mapping, it is not possible to -// have HTTP parameters, as all fields not bound by the path end in -// the body. This makes this option more rarely used in practice when -// defining REST APIs. The common usage of `*` is in custom methods -// which don't use the URL at all for transferring data. -// -// It is possible to define multiple HTTP methods for one RPC by using -// the `additional_bindings` option. Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/messages/{message_id}" -// additional_bindings { -// get: "/v1/users/{user_id}/messages/{message_id}" -// } -// }; -// } -// } -// message GetMessageRequest { -// string message_id = 1; -// string user_id = 2; -// } -// -// This enables the following two alternative HTTP JSON to RPC mappings: -// -// - HTTP: `GET /v1/messages/123456` -// - gRPC: `GetMessage(message_id: "123456")` -// -// - HTTP: `GET /v1/users/me/messages/123456` -// - gRPC: `GetMessage(user_id: "me" message_id: "123456")` -// -// # Rules for HTTP mapping -// -// 1. Leaf request fields (recursive expansion nested messages in the request -// message) are classified into three categories: -// - Fields referred by the path template. They are passed via the URL path. -// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They -// are passed via the HTTP -// request body. -// - All other fields are passed via the URL query parameters, and the -// parameter name is the field path in the request message. A repeated -// field can be represented as multiple query parameters under the same -// name. -// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL -// query parameter, all fields -// are passed via URL path and HTTP request body. -// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP -// request body, all -// fields are passed via URL path and URL query parameters. -// -// Path template syntax -// -// Template = "/" Segments [ Verb ] ; -// Segments = Segment { "/" Segment } ; -// Segment = "*" | "**" | LITERAL | Variable ; -// Variable = "{" FieldPath [ "=" Segments ] "}" ; -// FieldPath = IDENT { "." IDENT } ; -// Verb = ":" LITERAL ; -// -// The syntax `*` matches a single URL path segment. The syntax `**` matches -// zero or more URL path segments, which must be the last part of the URL path -// except the `Verb`. -// -// The syntax `Variable` matches part of the URL path as specified by its -// template. A variable template must not contain other variables. If a variable -// matches a single path segment, its template may be omitted, e.g. `{var}` -// is equivalent to `{var=*}`. -// -// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` -// contains any reserved character, such characters should be percent-encoded -// before the matching. -// -// If a variable contains exactly one path segment, such as `"{var}"` or -// `"{var=*}"`, when such a variable is expanded into a URL path on the client -// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The -// server side does the reverse decoding. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{var}`. -// -// If a variable contains multiple path segments, such as `"{var=foo/*}"` -// or `"{var=**}"`, when such a variable is expanded into a URL path on the -// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. -// The server side does the reverse decoding, except "%2F" and "%2f" are left -// unchanged. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{+var}`. -// -// # Using gRPC API Service Configuration -// -// gRPC API Service Configuration (service config) is a configuration language -// for configuring a gRPC service to become a user-facing product. The -// service config is simply the YAML representation of the `google.api.Service` -// proto message. -// -// As an alternative to annotating your proto file, you can configure gRPC -// transcoding in your service config YAML files. You do this by specifying a -// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same -// effect as the proto annotation. This can be particularly useful if you -// have a proto that is reused in multiple services. Note that any transcoding -// specified in the service config will override any matching transcoding -// configuration in the proto. -// -// The following example selects a gRPC method and applies an `HttpRule` to it: -// -// http: -// rules: -// - selector: example.v1.Messaging.GetMessage -// get: /v1/messages/{message_id}/{sub.subfield} -// -// # Special notes -// -// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the -// proto to JSON conversion must follow the [proto3 -// specification](https://developers.google.com/protocol-buffers/docs/proto3#json). -// -// While the single segment variable follows the semantics of -// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String -// Expansion, the multi segment variable **does not** follow RFC 6570 Section -// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion -// does not expand special characters like `?` and `#`, which would lead -// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding -// for multi segment variables. -// -// The path variables **must not** refer to any repeated or mapped field, -// because client libraries are not capable of handling such variable expansion. -// -// The path variables **must not** capture the leading "/" character. The reason -// is that the most common use case "{var}" does not capture the leading "/" -// character. For consistency, all path variables must share the same behavior. -// -// Repeated message fields must not be mapped to URL query parameters, because -// no client library can support such complicated mapping. -// -// If an API needs to use a JSON array for request or response body, it can map -// the request or response body to a repeated field. However, some gRPC -// Transcoding implementations may not support this feature. -type HttpRule struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Selects a method to which this rule applies. - // - // Refer to [selector][google.api.DocumentationRule.selector] for syntax - // details. - Selector string `protobuf:"bytes,1,opt,name=selector,proto3" json:"selector,omitempty"` - // Determines the URL pattern is matched by this rules. This pattern can be - // used with any of the {get|put|post|delete|patch} methods. A custom method - // can be defined using the 'custom' field. - // - // Types that are assignable to Pattern: - // - // *HttpRule_Get - // *HttpRule_Put - // *HttpRule_Post - // *HttpRule_Delete - // *HttpRule_Patch - // *HttpRule_Custom - Pattern isHttpRule_Pattern `protobuf_oneof:"pattern"` - // The name of the request field whose value is mapped to the HTTP request - // body, or `*` for mapping all request fields not captured by the path - // pattern to the HTTP body, or omitted for not having any HTTP request body. - // - // NOTE: the referred field must be present at the top-level of the request - // message type. - Body string `protobuf:"bytes,7,opt,name=body,proto3" json:"body,omitempty"` - // Optional. The name of the response field whose value is mapped to the HTTP - // response body. When omitted, the entire response message will be used - // as the HTTP response body. - // - // NOTE: The referred field must be present at the top-level of the response - // message type. - ResponseBody string `protobuf:"bytes,12,opt,name=response_body,json=responseBody,proto3" json:"response_body,omitempty"` - // Additional HTTP bindings for the selector. Nested bindings must - // not contain an `additional_bindings` field themselves (that is, - // the nesting may only be one level deep). - AdditionalBindings []*HttpRule `protobuf:"bytes,11,rep,name=additional_bindings,json=additionalBindings,proto3" json:"additional_bindings,omitempty"` -} - -func (x *HttpRule) Reset() { - *x = HttpRule{} - mi := &file_google_api_http_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *HttpRule) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HttpRule) ProtoMessage() {} - -func (x *HttpRule) ProtoReflect() protoreflect.Message { - mi := &file_google_api_http_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HttpRule.ProtoReflect.Descriptor instead. -func (*HttpRule) Descriptor() ([]byte, []int) { - return file_google_api_http_proto_rawDescGZIP(), []int{1} -} - -func (x *HttpRule) GetSelector() string { - if x != nil { - return x.Selector - } - return "" -} - -func (m *HttpRule) GetPattern() isHttpRule_Pattern { - if m != nil { - return m.Pattern - } - return nil -} - -func (x *HttpRule) GetGet() string { - if x, ok := x.GetPattern().(*HttpRule_Get); ok { - return x.Get - } - return "" -} - -func (x *HttpRule) GetPut() string { - if x, ok := x.GetPattern().(*HttpRule_Put); ok { - return x.Put - } - return "" -} - -func (x *HttpRule) GetPost() string { - if x, ok := x.GetPattern().(*HttpRule_Post); ok { - return x.Post - } - return "" -} - -func (x *HttpRule) GetDelete() string { - if x, ok := x.GetPattern().(*HttpRule_Delete); ok { - return x.Delete - } - return "" -} - -func (x *HttpRule) GetPatch() string { - if x, ok := x.GetPattern().(*HttpRule_Patch); ok { - return x.Patch - } - return "" -} - -func (x *HttpRule) GetCustom() *CustomHttpPattern { - if x, ok := x.GetPattern().(*HttpRule_Custom); ok { - return x.Custom - } - return nil -} - -func (x *HttpRule) GetBody() string { - if x != nil { - return x.Body - } - return "" -} - -func (x *HttpRule) GetResponseBody() string { - if x != nil { - return x.ResponseBody - } - return "" -} - -func (x *HttpRule) GetAdditionalBindings() []*HttpRule { - if x != nil { - return x.AdditionalBindings - } - return nil -} - -type isHttpRule_Pattern interface { - isHttpRule_Pattern() -} - -type HttpRule_Get struct { - // Maps to HTTP GET. Used for listing and getting information about - // resources. - Get string `protobuf:"bytes,2,opt,name=get,proto3,oneof"` -} - -type HttpRule_Put struct { - // Maps to HTTP PUT. Used for replacing a resource. - Put string `protobuf:"bytes,3,opt,name=put,proto3,oneof"` -} - -type HttpRule_Post struct { - // Maps to HTTP POST. Used for creating a resource or performing an action. - Post string `protobuf:"bytes,4,opt,name=post,proto3,oneof"` -} - -type HttpRule_Delete struct { - // Maps to HTTP DELETE. Used for deleting a resource. - Delete string `protobuf:"bytes,5,opt,name=delete,proto3,oneof"` -} - -type HttpRule_Patch struct { - // Maps to HTTP PATCH. Used for updating a resource. - Patch string `protobuf:"bytes,6,opt,name=patch,proto3,oneof"` -} - -type HttpRule_Custom struct { - // The custom pattern is used for specifying an HTTP method that is not - // included in the `pattern` field, such as HEAD, or "*" to leave the - // HTTP method unspecified for this rule. The wild-card rule is useful - // for services that provide content to Web (HTML) clients. - Custom *CustomHttpPattern `protobuf:"bytes,8,opt,name=custom,proto3,oneof"` -} - -func (*HttpRule_Get) isHttpRule_Pattern() {} - -func (*HttpRule_Put) isHttpRule_Pattern() {} - -func (*HttpRule_Post) isHttpRule_Pattern() {} - -func (*HttpRule_Delete) isHttpRule_Pattern() {} - -func (*HttpRule_Patch) isHttpRule_Pattern() {} - -func (*HttpRule_Custom) isHttpRule_Pattern() {} - -// A custom pattern is used for defining custom HTTP verb. -type CustomHttpPattern struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of this custom HTTP verb. - Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` - // The path matched by this custom verb. - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` -} - -func (x *CustomHttpPattern) Reset() { - *x = CustomHttpPattern{} - mi := &file_google_api_http_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *CustomHttpPattern) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CustomHttpPattern) ProtoMessage() {} - -func (x *CustomHttpPattern) ProtoReflect() protoreflect.Message { - mi := &file_google_api_http_proto_msgTypes[2] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CustomHttpPattern.ProtoReflect.Descriptor instead. -func (*CustomHttpPattern) Descriptor() ([]byte, []int) { - return file_google_api_http_proto_rawDescGZIP(), []int{2} -} - -func (x *CustomHttpPattern) GetKind() string { - if x != nil { - return x.Kind - } - return "" -} - -func (x *CustomHttpPattern) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -var File_google_api_http_proto protoreflect.FileDescriptor - -var file_google_api_http_proto_rawDesc = []byte{ - 0x0a, 0x15, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, - 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x22, 0x79, 0x0a, 0x04, 0x48, 0x74, 0x74, 0x70, 0x12, 0x2a, 0x0a, 0x05, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x75, 0x6c, 0x65, - 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1f, 0x66, 0x75, 0x6c, 0x6c, 0x79, - 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x1c, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xda, - 0x02, 0x0a, 0x08, 0x48, 0x74, 0x74, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x03, 0x67, 0x65, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x03, 0x70, - 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x70, 0x75, 0x74, 0x12, - 0x14, 0x0a, 0x04, 0x70, 0x6f, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x04, 0x70, 0x6f, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x16, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x74, 0x74, 0x70, 0x50, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x62, 0x6f, 0x64, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x45, 0x0a, 0x13, 0x61, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x12, 0x61, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x22, 0x3b, 0x0a, 0x11, 0x43, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x74, 0x74, 0x70, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0xa7, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x09, 0x48, 0x74, 0x74, - 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x03, 0x47, 0x41, - 0x58, 0xaa, 0x02, 0x0a, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x41, 0x70, 0x69, 0xca, 0x02, - 0x0a, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x41, 0x70, 0x69, 0xe2, 0x02, 0x16, 0x47, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0b, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x41, - 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_google_api_http_proto_rawDescOnce sync.Once - file_google_api_http_proto_rawDescData = file_google_api_http_proto_rawDesc -) - -func file_google_api_http_proto_rawDescGZIP() []byte { - file_google_api_http_proto_rawDescOnce.Do(func() { - file_google_api_http_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_api_http_proto_rawDescData) - }) - return file_google_api_http_proto_rawDescData -} - -var file_google_api_http_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_google_api_http_proto_goTypes = []any{ - (*Http)(nil), // 0: google.api.Http - (*HttpRule)(nil), // 1: google.api.HttpRule - (*CustomHttpPattern)(nil), // 2: google.api.CustomHttpPattern -} -var file_google_api_http_proto_depIdxs = []int32{ - 1, // 0: google.api.Http.rules:type_name -> google.api.HttpRule - 2, // 1: google.api.HttpRule.custom:type_name -> google.api.CustomHttpPattern - 1, // 2: google.api.HttpRule.additional_bindings:type_name -> google.api.HttpRule - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_google_api_http_proto_init() } -func file_google_api_http_proto_init() { - if File_google_api_http_proto != nil { - return - } - file_google_api_http_proto_msgTypes[1].OneofWrappers = []any{ - (*HttpRule_Get)(nil), - (*HttpRule_Put)(nil), - (*HttpRule_Post)(nil), - (*HttpRule_Delete)(nil), - (*HttpRule_Patch)(nil), - (*HttpRule_Custom)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_api_http_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_google_api_http_proto_goTypes, - DependencyIndexes: file_google_api_http_proto_depIdxs, - MessageInfos: file_google_api_http_proto_msgTypes, - }.Build() - File_google_api_http_proto = out.File - file_google_api_http_proto_rawDesc = nil - file_google_api_http_proto_goTypes = nil - file_google_api_http_proto_depIdxs = nil -} diff --git a/gen/python/authorizer/v1/__pycache__/admin_pb2.cpython-314.pyc b/gen/python/authorizer/v1/__pycache__/admin_pb2.cpython-314.pyc deleted file mode 100644 index ee0c8cbf..00000000 Binary files a/gen/python/authorizer/v1/__pycache__/admin_pb2.cpython-314.pyc and /dev/null differ diff --git a/gen/python/authorizer/v1/__pycache__/admin_pb2_grpc.cpython-314.pyc b/gen/python/authorizer/v1/__pycache__/admin_pb2_grpc.cpython-314.pyc deleted file mode 100644 index 3ffdc51e..00000000 Binary files a/gen/python/authorizer/v1/__pycache__/admin_pb2_grpc.cpython-314.pyc and /dev/null differ diff --git a/gen/python/authorizer/v1/__pycache__/types_pb2.cpython-314.pyc b/gen/python/authorizer/v1/__pycache__/types_pb2.cpython-314.pyc deleted file mode 100644 index a9eea8e9..00000000 Binary files a/gen/python/authorizer/v1/__pycache__/types_pb2.cpython-314.pyc and /dev/null differ diff --git a/gen/python/authorizer/v1/admin_pb2.py b/gen/python/authorizer/v1/admin_pb2.py deleted file mode 100644 index 491e8b42..00000000 --- a/gen/python/authorizer/v1/admin_pb2.py +++ /dev/null @@ -1,479 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: authorizer/v1/admin.proto -# Protobuf Python Version: 5.27.3 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 27, - 3, - '', - 'authorizer/v1/admin.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from authorizer.v1 import annotations_pb2 as authorizer_dot_v1_dot_annotations__pb2 -from authorizer.v1 import common_pb2 as authorizer_dot_v1_dot_common__pb2 -from authorizer.v1 import pagination_pb2 as authorizer_dot_v1_dot_pagination__pb2 -from authorizer.v1 import types_pb2 as authorizer_dot_v1_dot_types__pb2 -from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x61uthorizer/v1/admin.proto\x12\rauthorizer.v1\x1a\x1f\x61uthorizer/v1/annotations.proto\x1a\x1a\x61uthorizer/v1/common.proto\x1a\x1e\x61uthorizer/v1/pagination.proto\x1a\x19\x61uthorizer/v1/types.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\"?\n\x11\x41\x64minLoginRequest\x12*\n\x0c\x61\x64min_secret\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x61\x64minSecret\".\n\x12\x41\x64minLoginResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x14\n\x12\x41\x64minLogoutRequest\"/\n\x13\x41\x64minLogoutResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x15\n\x13\x41\x64minSessionRequest\"0\n\x14\x41\x64minSessionResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x12\n\x10\x41\x64minMetaRequest\"L\n\x11\x41\x64minMetaResponse\x12\x37\n\nadmin_meta\x18\x01 \x01(\x0b\x32\x18.authorizer.v1.AdminMetaR\tadminMeta\"\xbe\x01\n\tAdminMeta\x12\x14\n\x05roles\x18\x01 \x03(\tR\x05roles\x12#\n\rdefault_roles\x18\x02 \x03(\tR\x0c\x64\x65\x66\x61ultRoles\x12\'\n\x0fprotected_roles\x18\x03 \x03(\tR\x0eprotectedRoles\x12M\n$is_multi_factor_auth_service_enabled\x18\x04 \x01(\x08R\x1fisMultiFactorAuthServiceEnabled\"f\n\x0cUsersRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\x12\x14\n\x05query\x18\x02 \x01(\tR\x05query\"u\n\rUsersResponse\x12)\n\x05users\x18\x01 \x03(\x0b\x32\x13.authorizer.v1.UserR\x05users\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"3\n\x0bUserRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\"7\n\x0cUserResponse\x12\'\n\x04user\x18\x01 \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\"\xcc\x06\n\x11UpdateUserRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\x19\n\x05\x65mail\x18\x02 \x01(\tH\x00R\x05\x65mail\x88\x01\x01\x12*\n\x0e\x65mail_verified\x18\x03 \x01(\x08H\x01R\remailVerified\x88\x01\x01\x12\"\n\ngiven_name\x18\x04 \x01(\tH\x02R\tgivenName\x88\x01\x01\x12$\n\x0b\x66\x61mily_name\x18\x05 \x01(\tH\x03R\nfamilyName\x88\x01\x01\x12$\n\x0bmiddle_name\x18\x06 \x01(\tH\x04R\nmiddleName\x88\x01\x01\x12\x1f\n\x08nickname\x18\x07 \x01(\tH\x05R\x08nickname\x88\x01\x01\x12\x1b\n\x06gender\x18\x08 \x01(\tH\x06R\x06gender\x88\x01\x01\x12!\n\tbirthdate\x18\t \x01(\tH\x07R\tbirthdate\x88\x01\x01\x12&\n\x0cphone_number\x18\n \x01(\tH\x08R\x0bphoneNumber\x88\x01\x01\x12\x37\n\x15phone_number_verified\x18\x0b \x01(\x08H\tR\x13phoneNumberVerified\x88\x01\x01\x12\x1d\n\x07picture\x18\x0c \x01(\tH\nR\x07picture\x88\x01\x01\x12\x14\n\x05roles\x18\r \x03(\tR\x05roles\x12\x43\n\x1cis_multi_factor_auth_enabled\x18\x0e \x01(\x08H\x0bR\x18isMultiFactorAuthEnabled\x88\x01\x01\x12\x31\n\x08\x61pp_data\x18\x0f \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppData\x12 \n\treset_mfa\x18\x10 \x01(\x08H\x0cR\x08resetMfa\x88\x01\x01\x42\x08\n\x06_emailB\x11\n\x0f_email_verifiedB\r\n\x0b_given_nameB\x0e\n\x0c_family_nameB\x0e\n\x0c_middle_nameB\x0b\n\t_nicknameB\t\n\x07_genderB\x0c\n\n_birthdateB\x0f\n\r_phone_numberB\x18\n\x16_phone_number_verifiedB\n\n\x08_pictureB\x1f\n\x1d_is_multi_factor_auth_enabledB\x0c\n\n_reset_mfa\"=\n\x12UpdateUserResponse\x12\'\n\x04user\x18\x01 \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\"2\n\x11\x44\x65leteUserRequest\x12\x1d\n\x05\x65mail\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05\x65mail\".\n\x12\x44\x65leteUserResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"_\n\x1bVerificationRequestsRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"\xb2\x01\n\x1cVerificationRequestsResponse\x12W\n\x15verification_requests\x18\x01 \x03(\x0b\x32\".authorizer.v1.VerificationRequestR\x14verificationRequests\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\x82\x02\n\x13VerificationRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12\x14\n\x05\x65mail\x18\x04 \x01(\tR\x05\x65mail\x12\x18\n\x07\x65xpires\x18\x05 \x01(\x03R\x07\x65xpires\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\x12\x14\n\x05nonce\x18\x08 \x01(\tR\x05nonce\x12!\n\x0credirect_uri\x18\t \x01(\tR\x0bredirectUri\"7\n\x13RevokeAccessRequest\x12 \n\x07user_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\"0\n\x14RevokeAccessResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"7\n\x13\x45nableAccessRequest\x12 \n\x07user_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\"0\n\x14\x45nableAccessResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"g\n\x14InviteMembersRequest\x12\x16\n\x06\x65mails\x18\x01 \x03(\tR\x06\x65mails\x12&\n\x0credirect_uri\x18\x02 \x01(\tH\x00R\x0bredirectUri\x88\x01\x01\x42\x0f\n\r_redirect_uri\"\\\n\x15InviteMembersResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12)\n\x05users\x18\x02 \x03(\x0b\x32\x13.authorizer.v1.UserR\x05users\"\x8b\x02\n\x07Webhook\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1d\n\nevent_name\x18\x02 \x01(\tR\teventName\x12+\n\x11\x65vent_description\x18\x03 \x01(\tR\x10\x65ventDescription\x12\x1a\n\x08\x65ndpoint\x18\x04 \x01(\tR\x08\x65ndpoint\x12\x18\n\x07\x65nabled\x18\x05 \x01(\x08R\x07\x65nabled\x12\x30\n\x07headers\x18\x06 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headers\x12\x1d\n\ncreated_at\x18\x07 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x08 \x01(\x03R\tupdatedAt\"\xd0\x01\n\nWebhookLog\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1f\n\x0bhttp_status\x18\x02 \x01(\x03R\nhttpStatus\x12\x1a\n\x08response\x18\x03 \x01(\tR\x08response\x12\x18\n\x07request\x18\x04 \x01(\tR\x07request\x12\x1d\n\nwebhook_id\x18\x05 \x01(\tR\twebhookId\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\"\xf4\x01\n\x11\x41\x64\x64WebhookRequest\x12&\n\nevent_name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\teventName\x12\x30\n\x11\x65vent_description\x18\x02 \x01(\tH\x00R\x10\x65ventDescription\x88\x01\x01\x12#\n\x08\x65ndpoint\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08\x65ndpoint\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12\x30\n\x07headers\x18\x05 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headersB\x14\n\x12_event_description\".\n\x12\x41\x64\x64WebhookResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xb5\x02\n\x14UpdateWebhookRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\"\n\nevent_name\x18\x02 \x01(\tH\x00R\teventName\x88\x01\x01\x12\x30\n\x11\x65vent_description\x18\x03 \x01(\tH\x01R\x10\x65ventDescription\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x04 \x01(\tH\x02R\x08\x65ndpoint\x88\x01\x01\x12\x1d\n\x07\x65nabled\x18\x05 \x01(\x08H\x03R\x07\x65nabled\x88\x01\x01\x12\x30\n\x07headers\x18\x06 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headersB\r\n\x0b_event_nameB\x14\n\x12_event_descriptionB\x0b\n\t_endpointB\n\n\x08_enabled\"1\n\x15UpdateWebhookResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"/\n\x14\x44\x65leteWebhookRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"1\n\x15\x44\x65leteWebhookResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\",\n\x11GetWebhookRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"F\n\x12GetWebhookResponse\x12\x30\n\x07webhook\x18\x01 \x01(\x0b\x32\x16.authorizer.v1.WebhookR\x07webhook\"S\n\x0fWebhooksRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"\x81\x01\n\x10WebhooksResponse\x12\x32\n\x08webhooks\x18\x01 \x03(\x0b\x32\x16.authorizer.v1.WebhookR\x08webhooks\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\x89\x01\n\x12WebhookLogsRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\x12\"\n\nwebhook_id\x18\x02 \x01(\tH\x00R\twebhookId\x88\x01\x01\x42\r\n\x0b_webhook_id\"\x8e\x01\n\x13WebhookLogsResponse\x12<\n\x0cwebhook_logs\x18\x01 \x03(\x0b\x32\x19.authorizer.v1.WebhookLogR\x0bwebhookLogs\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\xdc\x01\n\x13TestEndpointRequest\x12#\n\x08\x65ndpoint\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08\x65ndpoint\x12&\n\nevent_name\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\teventName\x12\x30\n\x11\x65vent_description\x18\x03 \x01(\tH\x00R\x10\x65ventDescription\x88\x01\x01\x12\x30\n\x07headers\x18\x04 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07headersB\x14\n\x12_event_description\"S\n\x14TestEndpointResponse\x12\x1f\n\x0bhttp_status\x18\x01 \x01(\x03R\nhttpStatus\x12\x1a\n\x08response\x18\x02 \x01(\tR\x08response\"\xca\x01\n\rEmailTemplate\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1d\n\nevent_name\x18\x02 \x01(\tR\teventName\x12\x1a\n\x08template\x18\x03 \x01(\tR\x08template\x12\x16\n\x06\x64\x65sign\x18\x04 \x01(\tR\x06\x64\x65sign\x12\x18\n\x07subject\x18\x05 \x01(\tR\x07subject\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\"\xb1\x01\n\x17\x41\x64\x64\x45mailTemplateRequest\x12&\n\nevent_name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\teventName\x12!\n\x07subject\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07subject\x12#\n\x08template\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08template\x12\x1b\n\x06\x64\x65sign\x18\x04 \x01(\tH\x00R\x06\x64\x65sign\x88\x01\x01\x42\t\n\x07_design\"4\n\x18\x41\x64\x64\x45mailTemplateResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xe9\x01\n\x1aUpdateEmailTemplateRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\"\n\nevent_name\x18\x02 \x01(\tH\x00R\teventName\x88\x01\x01\x12\x1f\n\x08template\x18\x03 \x01(\tH\x01R\x08template\x88\x01\x01\x12\x1d\n\x07subject\x18\x04 \x01(\tH\x02R\x07subject\x88\x01\x01\x12\x1b\n\x06\x64\x65sign\x18\x05 \x01(\tH\x03R\x06\x64\x65sign\x88\x01\x01\x42\r\n\x0b_event_nameB\x0b\n\t_templateB\n\n\x08_subjectB\t\n\x07_design\"7\n\x1bUpdateEmailTemplateResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"5\n\x1a\x44\x65leteEmailTemplateRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"7\n\x1b\x44\x65leteEmailTemplateResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"Y\n\x15\x45mailTemplatesRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"\x9a\x01\n\x16\x45mailTemplatesResponse\x12\x45\n\x0f\x65mail_templates\x18\x01 \x03(\x0b\x32\x1c.authorizer.v1.EmailTemplateR\x0e\x65mailTemplates\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\xcc\x02\n\x08\x41uditLog\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x1d\n\nactor_type\x18\x03 \x01(\tR\tactorType\x12\x1f\n\x0b\x61\x63tor_email\x18\x04 \x01(\tR\nactorEmail\x12\x16\n\x06\x61\x63tion\x18\x05 \x01(\tR\x06\x61\x63tion\x12#\n\rresource_type\x18\x06 \x01(\tR\x0cresourceType\x12\x1f\n\x0bresource_id\x18\x07 \x01(\tR\nresourceId\x12\x1d\n\nip_address\x18\x08 \x01(\tR\tipAddress\x12\x1d\n\nuser_agent\x18\t \x01(\tR\tuserAgent\x12\x1a\n\x08metadata\x18\n \x01(\tR\x08metadata\x12\x1d\n\ncreated_at\x18\x0b \x01(\x03R\tcreatedAt\"\x93\x03\n\x10\x41uditLogsRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\x12\x1b\n\x06\x61\x63tion\x18\x02 \x01(\tH\x00R\x06\x61\x63tion\x88\x01\x01\x12\x1e\n\x08\x61\x63tor_id\x18\x03 \x01(\tH\x01R\x07\x61\x63torId\x88\x01\x01\x12(\n\rresource_type\x18\x04 \x01(\tH\x02R\x0cresourceType\x88\x01\x01\x12$\n\x0bresource_id\x18\x05 \x01(\tH\x03R\nresourceId\x88\x01\x01\x12*\n\x0e\x66rom_timestamp\x18\x06 \x01(\x03H\x04R\rfromTimestamp\x88\x01\x01\x12&\n\x0cto_timestamp\x18\x07 \x01(\x03H\x05R\x0btoTimestamp\x88\x01\x01\x42\t\n\x07_actionB\x0b\n\t_actor_idB\x10\n\x0e_resource_typeB\x0e\n\x0c_resource_idB\x11\n\x0f_from_timestampB\x0f\n\r_to_timestamp\"\x86\x01\n\x11\x41uditLogsResponse\x12\x36\n\naudit_logs\x18\x01 \x03(\x0b\x32\x17.authorizer.v1.AuditLogR\tauditLogs\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\",\n\x08\x46gaModel\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x10\n\x03\x64sl\x18\x02 \x01(\tR\x03\x64sl\"R\n\x08\x46gaTuple\x12\x12\n\x04user\x18\x01 \x01(\tR\x04user\x12\x1a\n\x08relation\x18\x02 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x03 \x01(\tR\x06object\"\x14\n\x12\x46gaGetModelRequest\"D\n\x13\x46gaGetModelResponse\x12-\n\x05model\x18\x01 \x01(\x0b\x32\x17.authorizer.v1.FgaModelR\x05model\"1\n\x14\x46gaWriteModelRequest\x12\x19\n\x03\x64sl\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x03\x64sl\"F\n\x15\x46gaWriteModelResponse\x12-\n\x05model\x18\x01 \x01(\x0b\x32\x17.authorizer.v1.FgaModelR\x05model\"M\n\x15\x46gaWriteTuplesRequest\x12\x34\n\x06tuples\x18\x01 \x03(\x0b\x32\x1c.authorizer.v1.FgaTupleInputR\x06tuples\"2\n\x16\x46gaWriteTuplesResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"N\n\x16\x46gaDeleteTuplesRequest\x12\x34\n\x06tuples\x18\x01 \x03(\x0b\x32\x1c.authorizer.v1.FgaTupleInputR\x06tuples\"3\n\x17\x46gaDeleteTuplesResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x89\x02\n\x14\x46gaReadTuplesRequest\x12\x17\n\x04user\x18\x01 \x01(\tH\x00R\x04user\x88\x01\x01\x12\x1f\n\x08relation\x18\x02 \x01(\tH\x01R\x08relation\x88\x01\x01\x12\x1b\n\x06object\x18\x03 \x01(\tH\x02R\x06object\x88\x01\x01\x12 \n\tpage_size\x18\x04 \x01(\x03H\x03R\x08pageSize\x88\x01\x01\x12\x32\n\x12\x63ontinuation_token\x18\x05 \x01(\tH\x04R\x11\x63ontinuationToken\x88\x01\x01\x42\x07\n\x05_userB\x0b\n\t_relationB\t\n\x07_objectB\x0c\n\n_page_sizeB\x15\n\x13_continuation_token\"\x93\x01\n\x15\x46gaReadTuplesResponse\x12/\n\x06tuples\x18\x01 \x03(\x0b\x32\x17.authorizer.v1.FgaTupleR\x06tuples\x12\x32\n\x12\x63ontinuation_token\x18\x02 \x01(\tH\x00R\x11\x63ontinuationToken\x88\x01\x01\x42\x15\n\x13_continuation_token\"\x81\x01\n\x13\x46gaListUsersRequest\x12\x1f\n\x06object\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06object\x12#\n\x08relation\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08relation\x12$\n\tuser_type\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08userType\",\n\x14\x46gaListUsersResponse\x12\x14\n\x05users\x18\x01 \x03(\tR\x05users\"X\n\x10\x46gaExpandRequest\x12#\n\x08relation\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08relation\x12\x1f\n\x06object\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06object\"\'\n\x11\x46gaExpandResponse\x12\x12\n\x04tree\x18\x01 \x01(\tR\x04tree\"\x11\n\x0f\x46gaResetRequest\",\n\x10\x46gaResetResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xed\x01\n\x06\x43lient\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12%\n\x0e\x61llowed_scopes\x18\x04 \x03(\tR\rallowedScopes\x12\x1b\n\tis_active\x18\x05 \x01(\x08R\x08isActive\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\x12\x1b\n\tclient_id\x18\x08 \x01(\tR\x08\x63lientId\"\x9a\x01\n\x13\x43reateClientRequest\x12\x1b\n\x04name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12%\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12/\n\x0e\x61llowed_scopes\x18\x03 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x08\x01R\rallowedScopesB\x0e\n\x0c_description\"j\n\x14\x43reateClientResponse\x12-\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x15.authorizer.v1.ClientR\x06\x63lient\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0c\x63lientSecret\"\xde\x01\n\x13UpdateClientRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x01R\x0b\x64\x65scription\x88\x01\x01\x12%\n\x0e\x61llowed_scopes\x18\x04 \x03(\tR\rallowedScopes\x12 \n\tis_active\x18\x05 \x01(\x08H\x02R\x08isActive\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0c\n\n_is_active\"E\n\x14UpdateClientResponse\x12-\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x15.authorizer.v1.ClientR\x06\x63lient\".\n\x13\x44\x65leteClientRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"0\n\x14\x44\x65leteClientResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"4\n\x19RotateClientSecretRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"+\n\x10GetClientRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"B\n\x11GetClientResponse\x12-\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x15.authorizer.v1.ClientR\x06\x63lient\"R\n\x0e\x43lientsRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"}\n\x0f\x43lientsResponse\x12/\n\x07\x63lients\x18\x01 \x03(\x0b\x32\x15.authorizer.v1.ClientR\x07\x63lients\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\xdc\x04\n\rTrustedIssuer\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12,\n\x12service_account_id\x18\x02 \x01(\tR\x10serviceAccountId\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x1d\n\nissuer_url\x18\x04 \x01(\tR\tissuerUrl\x12&\n\x0fkey_source_type\x18\x05 \x01(\tR\rkeySourceType\x12\x19\n\x08jwks_url\x18\x06 \x01(\tR\x07jwksUrl\x12!\n\x0c\x65xpected_aud\x18\x07 \x01(\tR\x0b\x65xpectedAud\x12#\n\rsubject_claim\x18\x08 \x01(\tR\x0csubjectClaim\x12\x1f\n\x0bissuer_type\x18\t \x01(\tR\nissuerType\x12\x1b\n\tis_active\x18\n \x01(\x08R\x08isActive\x12=\n\x1bspiffe_refresh_hint_seconds\x18\x0b \x01(\x03R\x18spiffeRefreshHintSeconds\x12\x1d\n\ncreated_at\x18\x0c \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\r \x01(\x03R\tupdatedAt\x12)\n\x10\x61llowed_subjects\x18\x0e \x01(\tR\x0f\x61llowedSubjects\x12.\n\x13\x65nable_token_review\x18\x0f \x01(\x08R\x11\x65nableTokenReview\x12\x39\n\x19kubernetes_api_server_url\x18\x10 \x01(\tR\x16kubernetesApiServerUrl\"\xd9\x05\n\x17\x41\x64\x64TrustedIssuerRequest\x12\x35\n\x12service_account_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x10serviceAccountId\x12\x1b\n\x04name\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12&\n\nissuer_url\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tissuerUrl\x12/\n\x0fkey_source_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\rkeySourceType\x12\x1e\n\x08jwks_url\x18\x05 \x01(\tH\x00R\x07jwksUrl\x88\x01\x01\x12*\n\x0c\x65xpected_aud\x18\x06 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x65xpectedAud\x12(\n\rsubject_claim\x18\x07 \x01(\tH\x01R\x0csubjectClaim\x88\x01\x01\x12(\n\x0bissuer_type\x18\x08 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nissuerType\x12\x42\n\x1bspiffe_refresh_hint_seconds\x18\t \x01(\x03H\x02R\x18spiffeRefreshHintSeconds\x88\x01\x01\x12.\n\x10\x61llowed_subjects\x18\n \x01(\tH\x03R\x0f\x61llowedSubjects\x88\x01\x01\x12\x33\n\x13\x65nable_token_review\x18\x0b \x01(\x08H\x04R\x11\x65nableTokenReview\x88\x01\x01\x12>\n\x19kubernetes_api_server_url\x18\x0c \x01(\tH\x05R\x16kubernetesApiServerUrl\x88\x01\x01\x42\x0b\n\t_jwks_urlB\x10\n\x0e_subject_claimB\x1e\n\x1c_spiffe_refresh_hint_secondsB\x13\n\x11_allowed_subjectsB\x16\n\x14_enable_token_reviewB\x1c\n\x1a_kubernetes_api_server_url\"_\n\x18\x41\x64\x64TrustedIssuerResponse\x12\x43\n\x0etrusted_issuer\x18\x01 \x01(\x0b\x32\x1c.authorizer.v1.TrustedIssuerR\rtrustedIssuer\"\xc1\x04\n\x1aUpdateTrustedIssuerRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x12\x1e\n\x08jwks_url\x18\x03 \x01(\tH\x01R\x07jwksUrl\x88\x01\x01\x12&\n\x0c\x65xpected_aud\x18\x04 \x01(\tH\x02R\x0b\x65xpectedAud\x88\x01\x01\x12 \n\tis_active\x18\x05 \x01(\x08H\x03R\x08isActive\x88\x01\x01\x12\x42\n\x1bspiffe_refresh_hint_seconds\x18\x06 \x01(\x03H\x04R\x18spiffeRefreshHintSeconds\x88\x01\x01\x12.\n\x10\x61llowed_subjects\x18\x07 \x01(\tH\x05R\x0f\x61llowedSubjects\x88\x01\x01\x12\x33\n\x13\x65nable_token_review\x18\x08 \x01(\x08H\x06R\x11\x65nableTokenReview\x88\x01\x01\x12>\n\x19kubernetes_api_server_url\x18\t \x01(\tH\x07R\x16kubernetesApiServerUrl\x88\x01\x01\x42\x07\n\x05_nameB\x0b\n\t_jwks_urlB\x0f\n\r_expected_audB\x0c\n\n_is_activeB\x1e\n\x1c_spiffe_refresh_hint_secondsB\x13\n\x11_allowed_subjectsB\x16\n\x14_enable_token_reviewB\x1c\n\x1a_kubernetes_api_server_url\"b\n\x1bUpdateTrustedIssuerResponse\x12\x43\n\x0etrusted_issuer\x18\x01 \x01(\x0b\x32\x1c.authorizer.v1.TrustedIssuerR\rtrustedIssuer\"5\n\x1a\x44\x65leteTrustedIssuerRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"7\n\x1b\x44\x65leteTrustedIssuerResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"2\n\x17GetTrustedIssuerRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"_\n\x18GetTrustedIssuerResponse\x12\x43\n\x0etrusted_issuer\x18\x01 \x01(\x0b\x32\x1c.authorizer.v1.TrustedIssuerR\rtrustedIssuer\"\xa3\x01\n\x15TrustedIssuersRequest\x12@\n\npagination\x18\x01 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\x12\x31\n\x12service_account_id\x18\x02 \x01(\tH\x00R\x10serviceAccountId\x88\x01\x01\x42\x15\n\x13_service_account_id\"\x9a\x01\n\x16TrustedIssuersResponse\x12\x45\n\x0ftrusted_issuers\x18\x01 \x03(\x0b\x32\x1c.authorizer.v1.TrustedIssuerR\x0etrustedIssuers\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\"\x84\x03\n\x13SamlServiceProvider\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x1b\n\tentity_id\x18\x04 \x01(\tR\x08\x65ntityId\x12\x17\n\x07\x61\x63s_url\x18\x05 \x01(\tR\x06\x61\x63sUrl\x12\x1e\n\x0bsp_cert_pem\x18\x06 \x01(\tR\tspCertPem\x12$\n\x0ename_id_format\x18\x07 \x01(\tR\x0cnameIdFormat\x12+\n\x11mapped_attributes\x18\x08 \x01(\tR\x10mappedAttributes\x12.\n\x13\x61llow_idp_initiated\x18\t \x01(\x08R\x11\x61llowIdpInitiated\x12\x1b\n\tis_active\x18\n \x01(\x08R\x08isActive\x12\x1d\n\ncreated_at\x18\x0b \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x0c \x01(\x03R\tupdatedAt\"\xc2\x01\n\nSamlIdpKey\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x19\n\x08\x63\x65rt_pem\x18\x03 \x01(\tR\x07\x63\x65rtPem\x12\x1c\n\talgorithm\x18\x04 \x01(\tR\talgorithm\x12\x16\n\x06status\x18\x05 \x01(\tR\x06status\x12\x1d\n\ncreated_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x07 \x01(\x03R\tupdatedAt\"s\n\x19SamlSpMetadataParseResult\x12\x1b\n\tentity_id\x18\x01 \x01(\tR\x08\x65ntityId\x12\x17\n\x07\x61\x63s_url\x18\x02 \x01(\tR\x06\x61\x63sUrl\x12 \n\x0b\x63\x65rtificate\x18\x03 \x01(\tR\x0b\x63\x65rtificate\"\xaf\x03\n CreateSamlServiceProviderRequest\x12\x1e\n\x06org_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05orgId\x12\x1b\n\x04name\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12$\n\tentity_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08\x65ntityId\x12 \n\x07\x61\x63s_url\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06\x61\x63sUrl\x12#\n\x0bsp_cert_pem\x18\x05 \x01(\tH\x00R\tspCertPem\x88\x01\x01\x12)\n\x0ename_id_format\x18\x06 \x01(\tH\x01R\x0cnameIdFormat\x88\x01\x01\x12\x30\n\x11mapped_attributes\x18\x07 \x01(\tH\x02R\x10mappedAttributes\x88\x01\x01\x12\x33\n\x13\x61llow_idp_initiated\x18\x08 \x01(\x08H\x03R\x11\x61llowIdpInitiated\x88\x01\x01\x42\x0e\n\x0c_sp_cert_pemB\x11\n\x0f_name_id_formatB\x14\n\x12_mapped_attributesB\x16\n\x14_allow_idp_initiated\"{\n!CreateSamlServiceProviderResponse\x12V\n\x15saml_service_provider\x18\x01 \x01(\x0b\x32\".authorizer.v1.SamlServiceProviderR\x13samlServiceProvider\"\xef\x03\n UpdateSamlServiceProviderRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x12 \n\tentity_id\x18\x03 \x01(\tH\x01R\x08\x65ntityId\x88\x01\x01\x12\x1c\n\x07\x61\x63s_url\x18\x04 \x01(\tH\x02R\x06\x61\x63sUrl\x88\x01\x01\x12#\n\x0bsp_cert_pem\x18\x05 \x01(\tH\x03R\tspCertPem\x88\x01\x01\x12)\n\x0ename_id_format\x18\x06 \x01(\tH\x04R\x0cnameIdFormat\x88\x01\x01\x12\x30\n\x11mapped_attributes\x18\x07 \x01(\tH\x05R\x10mappedAttributes\x88\x01\x01\x12\x33\n\x13\x61llow_idp_initiated\x18\x08 \x01(\x08H\x06R\x11\x61llowIdpInitiated\x88\x01\x01\x12 \n\tis_active\x18\t \x01(\x08H\x07R\x08isActive\x88\x01\x01\x42\x07\n\x05_nameB\x0c\n\n_entity_idB\n\n\x08_acs_urlB\x0e\n\x0c_sp_cert_pemB\x11\n\x0f_name_id_formatB\x14\n\x12_mapped_attributesB\x16\n\x14_allow_idp_initiatedB\x0c\n\n_is_active\"{\n!UpdateSamlServiceProviderResponse\x12V\n\x15saml_service_provider\x18\x01 \x01(\x0b\x32\".authorizer.v1.SamlServiceProviderR\x13samlServiceProvider\";\n DeleteSamlServiceProviderRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"=\n!DeleteSamlServiceProviderResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"8\n\x1dGetSamlServiceProviderRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"x\n\x1eGetSamlServiceProviderResponse\x12V\n\x15saml_service_provider\x18\x01 \x01(\x0b\x32\".authorizer.v1.SamlServiceProviderR\x13samlServiceProvider\"\x83\x01\n\x1fListSamlServiceProvidersRequest\x12\x1e\n\x06org_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05orgId\x12@\n\npagination\x18\x02 \x01(\x0b\x32 .authorizer.v1.PaginationRequestR\npagination\"\xb7\x01\n ListSamlServiceProvidersResponse\x12X\n\x16saml_service_providers\x18\x01 \x03(\x0b\x32\".authorizer.v1.SamlServiceProviderR\x14samlServiceProviders\x12\x39\n\npagination\x18\x02 \x01(\x0b\x32\x19.authorizer.v1.PaginationR\npagination\":\n\x18RotateSamlIdpCertRequest\x12\x1e\n\x06org_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05orgId\"X\n\x19RotateSamlIdpCertResponse\x12;\n\x0csaml_idp_key\x18\x01 \x01(\x0b\x32\x19.authorizer.v1.SamlIdpKeyR\nsamlIdpKey\"2\n\x17RetireSamlIdpKeyRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x02id\"4\n\x18RetireSamlIdpKeyResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"8\n\x16ListSamlIdpKeysRequest\x12\x1e\n\x06org_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05orgId\"X\n\x17ListSamlIdpKeysResponse\x12=\n\rsaml_idp_keys\x18\x01 \x03(\x0b\x32\x19.authorizer.v1.SamlIdpKeyR\x0bsamlIdpKeys\"I\n\x1bImportSamlSpMetadataRequest\x12*\n\x0cmetadata_xml\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0bmetadataXml\"`\n\x1cImportSamlSpMetadataResponse\x12@\n\x06result\x18\x01 \x01(\x0b\x32(.authorizer.v1.SamlSpMetadataParseResultR\x06result2\xde\x35\n\x16\x41uthorizerAdminService\x12q\n\nAdminLogin\x12 .authorizer.v1.AdminLoginRequest\x1a!.authorizer.v1.AdminLoginResponse\"\x1e\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x14\"\x0f/v1/admin/login:\x01*\x12n\n\x0b\x41\x64minLogout\x12!.authorizer.v1.AdminLogoutRequest\x1a\".authorizer.v1.AdminLogoutResponse\"\x18\x82\xd3\xe4\x93\x02\x12\"\x10/v1/admin/logout\x12r\n\x0c\x41\x64minSession\x12\".authorizer.v1.AdminSessionRequest\x1a#.authorizer.v1.AdminSessionResponse\"\x19\x82\xd3\xe4\x93\x02\x13\x12\x11/v1/admin/session\x12\x66\n\tAdminMeta\x12\x1f.authorizer.v1.AdminMetaRequest\x1a .authorizer.v1.AdminMetaResponse\"\x16\x82\xd3\xe4\x93\x02\x10\x12\x0e/v1/admin/meta\x12^\n\x05Users\x12\x1b.authorizer.v1.UsersRequest\x1a\x1c.authorizer.v1.UsersResponse\"\x1a\x82\xd3\xe4\x93\x02\x14\"\x0f/v1/admin/users:\x01*\x12Z\n\x04User\x12\x1a.authorizer.v1.UserRequest\x1a\x1b.authorizer.v1.UserResponse\"\x19\x82\xd3\xe4\x93\x02\x13\"\x0e/v1/admin/user:\x01*\x12s\n\nUpdateUser\x12 .authorizer.v1.UpdateUserRequest\x1a!.authorizer.v1.UpdateUserResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/v1/admin/update_user:\x01*\x12s\n\nDeleteUser\x12 .authorizer.v1.DeleteUserRequest\x1a!.authorizer.v1.DeleteUserResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/v1/admin/delete_user:\x01*\x12\x9b\x01\n\x14VerificationRequests\x12*.authorizer.v1.VerificationRequestsRequest\x1a+.authorizer.v1.VerificationRequestsResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/verification_requests:\x01*\x12{\n\x0cRevokeAccess\x12\".authorizer.v1.RevokeAccessRequest\x1a#.authorizer.v1.RevokeAccessResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/revoke_access:\x01*\x12{\n\x0c\x45nableAccess\x12\".authorizer.v1.EnableAccessRequest\x1a#.authorizer.v1.EnableAccessResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/enable_access:\x01*\x12\x7f\n\rInviteMembers\x12#.authorizer.v1.InviteMembersRequest\x1a$.authorizer.v1.InviteMembersResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/invite_members:\x01*\x12s\n\nAddWebhook\x12 .authorizer.v1.AddWebhookRequest\x1a!.authorizer.v1.AddWebhookResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/v1/admin/add_webhook:\x01*\x12\x7f\n\rUpdateWebhook\x12#.authorizer.v1.UpdateWebhookRequest\x1a$.authorizer.v1.UpdateWebhookResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/update_webhook:\x01*\x12\x7f\n\rDeleteWebhook\x12#.authorizer.v1.DeleteWebhookRequest\x1a$.authorizer.v1.DeleteWebhookResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/delete_webhook:\x01*\x12o\n\nGetWebhook\x12 .authorizer.v1.GetWebhookRequest\x1a!.authorizer.v1.GetWebhookResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/admin/webhook:\x01*\x12j\n\x08Webhooks\x12\x1e.authorizer.v1.WebhooksRequest\x1a\x1f.authorizer.v1.WebhooksResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\"\x12/v1/admin/webhooks:\x01*\x12w\n\x0bWebhookLogs\x12!.authorizer.v1.WebhookLogsRequest\x1a\".authorizer.v1.WebhookLogsResponse\"!\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/admin/webhook_logs:\x01*\x12{\n\x0cTestEndpoint\x12\".authorizer.v1.TestEndpointRequest\x1a#.authorizer.v1.TestEndpointResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/test_endpoint:\x01*\x12\x8c\x01\n\x10\x41\x64\x64\x45mailTemplate\x12&.authorizer.v1.AddEmailTemplateRequest\x1a\'.authorizer.v1.AddEmailTemplateResponse\"\'\x82\xd3\xe4\x93\x02!\"\x1c/v1/admin/add_email_template:\x01*\x12\x98\x01\n\x13UpdateEmailTemplate\x12).authorizer.v1.UpdateEmailTemplateRequest\x1a*.authorizer.v1.UpdateEmailTemplateResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/update_email_template:\x01*\x12\x98\x01\n\x13\x44\x65leteEmailTemplate\x12).authorizer.v1.DeleteEmailTemplateRequest\x1a*.authorizer.v1.DeleteEmailTemplateResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/delete_email_template:\x01*\x12\x83\x01\n\x0e\x45mailTemplates\x12$.authorizer.v1.EmailTemplatesRequest\x1a%.authorizer.v1.EmailTemplatesResponse\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/v1/admin/email_templates:\x01*\x12o\n\tAuditLogs\x12\x1f.authorizer.v1.AuditLogsRequest\x1a .authorizer.v1.AuditLogsResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/admin/audit_logs:\x01*\x12q\n\x0b\x46gaGetModel\x12!.authorizer.v1.FgaGetModelRequest\x1a\".authorizer.v1.FgaGetModelResponse\"\x1b\x82\xd3\xe4\x93\x02\x15\x12\x13/v1/admin/fga/model\x12z\n\rFgaWriteModel\x12#.authorizer.v1.FgaWriteModelRequest\x1a$.authorizer.v1.FgaWriteModelResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\"\x13/v1/admin/fga/model:\x01*\x12~\n\x0e\x46gaWriteTuples\x12$.authorizer.v1.FgaWriteTuplesRequest\x1a%.authorizer.v1.FgaWriteTuplesResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/admin/fga/tuples:\x01*\x12\x88\x01\n\x0f\x46gaDeleteTuples\x12%.authorizer.v1.FgaDeleteTuplesRequest\x1a&.authorizer.v1.FgaDeleteTuplesResponse\"&\x82\xd3\xe4\x93\x02 \"\x1b/v1/admin/fga/tuples/delete:\x01*\x12\x80\x01\n\rFgaReadTuples\x12#.authorizer.v1.FgaReadTuplesRequest\x1a$.authorizer.v1.FgaReadTuplesResponse\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/v1/admin/fga/tuples/read:\x01*\x12|\n\x0c\x46gaListUsers\x12\".authorizer.v1.FgaListUsersRequest\x1a#.authorizer.v1.FgaListUsersResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/fga/list_users:\x01*\x12o\n\tFgaExpand\x12\x1f.authorizer.v1.FgaExpandRequest\x1a .authorizer.v1.FgaExpandResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/admin/fga/expand:\x01*\x12k\n\x08\x46gaReset\x12\x1e.authorizer.v1.FgaResetRequest\x1a\x1f.authorizer.v1.FgaResetResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\"\x13/v1/admin/fga/reset:\x01*\x12{\n\x0c\x43reateClient\x12\".authorizer.v1.CreateClientRequest\x1a#.authorizer.v1.CreateClientResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/create_client:\x01*\x12{\n\x0cUpdateClient\x12\".authorizer.v1.UpdateClientRequest\x1a#.authorizer.v1.UpdateClientResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/update_client:\x01*\x12{\n\x0c\x44\x65leteClient\x12\".authorizer.v1.DeleteClientRequest\x1a#.authorizer.v1.DeleteClientResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/delete_client:\x01*\x12\x8e\x01\n\x12RotateClientSecret\x12(.authorizer.v1.RotateClientSecretRequest\x1a#.authorizer.v1.CreateClientResponse\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/admin/rotate_client_secret:\x01*\x12k\n\tGetClient\x12\x1f.authorizer.v1.GetClientRequest\x1a .authorizer.v1.GetClientResponse\"\x1b\x82\xd3\xe4\x93\x02\x15\"\x10/v1/admin/client:\x01*\x12\x66\n\x07\x43lients\x12\x1d.authorizer.v1.ClientsRequest\x1a\x1e.authorizer.v1.ClientsResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/admin/clients:\x01*\x12\x8c\x01\n\x10\x41\x64\x64TrustedIssuer\x12&.authorizer.v1.AddTrustedIssuerRequest\x1a\'.authorizer.v1.AddTrustedIssuerResponse\"\'\x82\xd3\xe4\x93\x02!\"\x1c/v1/admin/add_trusted_issuer:\x01*\x12\x98\x01\n\x13UpdateTrustedIssuer\x12).authorizer.v1.UpdateTrustedIssuerRequest\x1a*.authorizer.v1.UpdateTrustedIssuerResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/update_trusted_issuer:\x01*\x12\x98\x01\n\x13\x44\x65leteTrustedIssuer\x12).authorizer.v1.DeleteTrustedIssuerRequest\x1a*.authorizer.v1.DeleteTrustedIssuerResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/delete_trusted_issuer:\x01*\x12\x88\x01\n\x10GetTrustedIssuer\x12&.authorizer.v1.GetTrustedIssuerRequest\x1a\'.authorizer.v1.GetTrustedIssuerResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/admin/trusted_issuer:\x01*\x12\x83\x01\n\x0eTrustedIssuers\x12$.authorizer.v1.TrustedIssuersRequest\x1a%.authorizer.v1.TrustedIssuersResponse\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/v1/admin/trusted_issuers:\x01*\x12\xb1\x01\n\x19\x43reateSamlServiceProvider\x12/.authorizer.v1.CreateSamlServiceProviderRequest\x1a\x30.authorizer.v1.CreateSamlServiceProviderResponse\"1\x82\xd3\xe4\x93\x02+\"&/v1/admin/create_saml_service_provider:\x01*\x12\xb1\x01\n\x19UpdateSamlServiceProvider\x12/.authorizer.v1.UpdateSamlServiceProviderRequest\x1a\x30.authorizer.v1.UpdateSamlServiceProviderResponse\"1\x82\xd3\xe4\x93\x02+\"&/v1/admin/update_saml_service_provider:\x01*\x12\xb1\x01\n\x19\x44\x65leteSamlServiceProvider\x12/.authorizer.v1.DeleteSamlServiceProviderRequest\x1a\x30.authorizer.v1.DeleteSamlServiceProviderResponse\"1\x82\xd3\xe4\x93\x02+\"&/v1/admin/delete_saml_service_provider:\x01*\x12\xa1\x01\n\x16GetSamlServiceProvider\x12,.authorizer.v1.GetSamlServiceProviderRequest\x1a-.authorizer.v1.GetSamlServiceProviderResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/admin/saml_service_provider:\x01*\x12\xa8\x01\n\x18ListSamlServiceProviders\x12..authorizer.v1.ListSamlServiceProvidersRequest\x1a/.authorizer.v1.ListSamlServiceProvidersResponse\"+\x82\xd3\xe4\x93\x02%\" /v1/admin/saml_service_providers:\x01*\x12\x91\x01\n\x11RotateSamlIdpCert\x12\'.authorizer.v1.RotateSamlIdpCertRequest\x1a(.authorizer.v1.RotateSamlIdpCertResponse\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/admin/rotate_saml_idp_cert:\x01*\x12\x8d\x01\n\x10RetireSamlIdpKey\x12&.authorizer.v1.RetireSamlIdpKeyRequest\x1a\'.authorizer.v1.RetireSamlIdpKeyResponse\"(\x82\xd3\xe4\x93\x02\"\"\x1d/v1/admin/retire_saml_idp_key:\x01*\x12\x84\x01\n\x0fListSamlIdpKeys\x12%.authorizer.v1.ListSamlIdpKeysRequest\x1a&.authorizer.v1.ListSamlIdpKeysResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/saml_idp_keys:\x01*\x12\x9d\x01\n\x14ImportSamlSpMetadata\x12*.authorizer.v1.ImportSamlSpMetadataRequest\x1a+.authorizer.v1.ImportSamlSpMetadataResponse\",\x82\xd3\xe4\x93\x02&\"!/v1/admin/import_saml_sp_metadata:\x01*B\xc6\x01\n\x11\x63om.authorizer.v1B\nAdminProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.admin_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\nAdminProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' - _globals['_ADMINLOGINREQUEST'].fields_by_name['admin_secret']._loaded_options = None - _globals['_ADMINLOGINREQUEST'].fields_by_name['admin_secret']._serialized_options = b'\272H\004r\002\020\001' - _globals['_UPDATEUSERREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_UPDATEUSERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_DELETEUSERREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_DELETEUSERREQUEST'].fields_by_name['email']._serialized_options = b'\272H\004r\002\020\001' - _globals['_REVOKEACCESSREQUEST'].fields_by_name['user_id']._loaded_options = None - _globals['_REVOKEACCESSREQUEST'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ENABLEACCESSREQUEST'].fields_by_name['user_id']._loaded_options = None - _globals['_ENABLEACCESSREQUEST'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ADDWEBHOOKREQUEST'].fields_by_name['event_name']._loaded_options = None - _globals['_ADDWEBHOOKREQUEST'].fields_by_name['event_name']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ADDWEBHOOKREQUEST'].fields_by_name['endpoint']._loaded_options = None - _globals['_ADDWEBHOOKREQUEST'].fields_by_name['endpoint']._serialized_options = b'\272H\004r\002\020\001' - _globals['_UPDATEWEBHOOKREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_UPDATEWEBHOOKREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_DELETEWEBHOOKREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_DELETEWEBHOOKREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_GETWEBHOOKREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_GETWEBHOOKREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_TESTENDPOINTREQUEST'].fields_by_name['endpoint']._loaded_options = None - _globals['_TESTENDPOINTREQUEST'].fields_by_name['endpoint']._serialized_options = b'\272H\004r\002\020\001' - _globals['_TESTENDPOINTREQUEST'].fields_by_name['event_name']._loaded_options = None - _globals['_TESTENDPOINTREQUEST'].fields_by_name['event_name']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ADDEMAILTEMPLATEREQUEST'].fields_by_name['event_name']._loaded_options = None - _globals['_ADDEMAILTEMPLATEREQUEST'].fields_by_name['event_name']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ADDEMAILTEMPLATEREQUEST'].fields_by_name['subject']._loaded_options = None - _globals['_ADDEMAILTEMPLATEREQUEST'].fields_by_name['subject']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ADDEMAILTEMPLATEREQUEST'].fields_by_name['template']._loaded_options = None - _globals['_ADDEMAILTEMPLATEREQUEST'].fields_by_name['template']._serialized_options = b'\272H\004r\002\020\001' - _globals['_UPDATEEMAILTEMPLATEREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_UPDATEEMAILTEMPLATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_DELETEEMAILTEMPLATEREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_DELETEEMAILTEMPLATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_FGAWRITEMODELREQUEST'].fields_by_name['dsl']._loaded_options = None - _globals['_FGAWRITEMODELREQUEST'].fields_by_name['dsl']._serialized_options = b'\272H\004r\002\020\001' - _globals['_FGALISTUSERSREQUEST'].fields_by_name['object']._loaded_options = None - _globals['_FGALISTUSERSREQUEST'].fields_by_name['object']._serialized_options = b'\272H\004r\002\020\001' - _globals['_FGALISTUSERSREQUEST'].fields_by_name['relation']._loaded_options = None - _globals['_FGALISTUSERSREQUEST'].fields_by_name['relation']._serialized_options = b'\272H\004r\002\020\001' - _globals['_FGALISTUSERSREQUEST'].fields_by_name['user_type']._loaded_options = None - _globals['_FGALISTUSERSREQUEST'].fields_by_name['user_type']._serialized_options = b'\272H\004r\002\020\001' - _globals['_FGAEXPANDREQUEST'].fields_by_name['relation']._loaded_options = None - _globals['_FGAEXPANDREQUEST'].fields_by_name['relation']._serialized_options = b'\272H\004r\002\020\001' - _globals['_FGAEXPANDREQUEST'].fields_by_name['object']._loaded_options = None - _globals['_FGAEXPANDREQUEST'].fields_by_name['object']._serialized_options = b'\272H\004r\002\020\001' - _globals['_CREATECLIENTREQUEST'].fields_by_name['name']._loaded_options = None - _globals['_CREATECLIENTREQUEST'].fields_by_name['name']._serialized_options = b'\272H\004r\002\020\001' - _globals['_CREATECLIENTREQUEST'].fields_by_name['allowed_scopes']._loaded_options = None - _globals['_CREATECLIENTREQUEST'].fields_by_name['allowed_scopes']._serialized_options = b'\272H\005\222\001\002\010\001' - _globals['_UPDATECLIENTREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_UPDATECLIENTREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_DELETECLIENTREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_DELETECLIENTREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ROTATECLIENTSECRETREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_ROTATECLIENTSECRETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_GETCLIENTREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_GETCLIENTREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['service_account_id']._loaded_options = None - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['service_account_id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['name']._loaded_options = None - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['name']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['issuer_url']._loaded_options = None - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['issuer_url']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['key_source_type']._loaded_options = None - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['key_source_type']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['expected_aud']._loaded_options = None - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['expected_aud']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['issuer_type']._loaded_options = None - _globals['_ADDTRUSTEDISSUERREQUEST'].fields_by_name['issuer_type']._serialized_options = b'\272H\004r\002\020\001' - _globals['_UPDATETRUSTEDISSUERREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_UPDATETRUSTEDISSUERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_DELETETRUSTEDISSUERREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_DELETETRUSTEDISSUERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_GETTRUSTEDISSUERREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_GETTRUSTEDISSUERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['org_id']._loaded_options = None - _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['org_id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['name']._loaded_options = None - _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['name']._serialized_options = b'\272H\004r\002\020\001' - _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['entity_id']._loaded_options = None - _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['entity_id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['acs_url']._loaded_options = None - _globals['_CREATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['acs_url']._serialized_options = b'\272H\004r\002\020\001' - _globals['_UPDATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_UPDATESAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_DELETESAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_DELETESAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_GETSAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_GETSAMLSERVICEPROVIDERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_LISTSAMLSERVICEPROVIDERSREQUEST'].fields_by_name['org_id']._loaded_options = None - _globals['_LISTSAMLSERVICEPROVIDERSREQUEST'].fields_by_name['org_id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_ROTATESAMLIDPCERTREQUEST'].fields_by_name['org_id']._loaded_options = None - _globals['_ROTATESAMLIDPCERTREQUEST'].fields_by_name['org_id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_RETIRESAMLIDPKEYREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_RETIRESAMLIDPKEYREQUEST'].fields_by_name['id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_LISTSAMLIDPKEYSREQUEST'].fields_by_name['org_id']._loaded_options = None - _globals['_LISTSAMLIDPKEYSREQUEST'].fields_by_name['org_id']._serialized_options = b'\272H\004r\002\020\001' - _globals['_IMPORTSAMLSPMETADATAREQUEST'].fields_by_name['metadata_xml']._loaded_options = None - _globals['_IMPORTSAMLSPMETADATAREQUEST'].fields_by_name['metadata_xml']._serialized_options = b'\272H\004r\002\020\001' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AdminLogin']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AdminLogin']._serialized_options = b'\240\265\030\001\202\323\344\223\002\024\"\017/v1/admin/login:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AdminLogout']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AdminLogout']._serialized_options = b'\202\323\344\223\002\022\"\020/v1/admin/logout' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AdminSession']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AdminSession']._serialized_options = b'\202\323\344\223\002\023\022\021/v1/admin/session' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AdminMeta']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AdminMeta']._serialized_options = b'\202\323\344\223\002\020\022\016/v1/admin/meta' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['Users']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['Users']._serialized_options = b'\202\323\344\223\002\024\"\017/v1/admin/users:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['User']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['User']._serialized_options = b'\202\323\344\223\002\023\"\016/v1/admin/user:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateUser']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateUser']._serialized_options = b'\202\323\344\223\002\032\"\025/v1/admin/update_user:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteUser']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteUser']._serialized_options = b'\202\323\344\223\002\032\"\025/v1/admin/delete_user:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['VerificationRequests']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['VerificationRequests']._serialized_options = b'\202\323\344\223\002$\"\037/v1/admin/verification_requests:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RevokeAccess']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RevokeAccess']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/revoke_access:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['EnableAccess']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['EnableAccess']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/enable_access:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['InviteMembers']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['InviteMembers']._serialized_options = b'\202\323\344\223\002\035\"\030/v1/admin/invite_members:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AddWebhook']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AddWebhook']._serialized_options = b'\202\323\344\223\002\032\"\025/v1/admin/add_webhook:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateWebhook']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateWebhook']._serialized_options = b'\202\323\344\223\002\035\"\030/v1/admin/update_webhook:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteWebhook']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteWebhook']._serialized_options = b'\202\323\344\223\002\035\"\030/v1/admin/delete_webhook:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetWebhook']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetWebhook']._serialized_options = b'\202\323\344\223\002\026\"\021/v1/admin/webhook:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['Webhooks']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['Webhooks']._serialized_options = b'\202\323\344\223\002\027\"\022/v1/admin/webhooks:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['WebhookLogs']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['WebhookLogs']._serialized_options = b'\202\323\344\223\002\033\"\026/v1/admin/webhook_logs:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['TestEndpoint']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['TestEndpoint']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/test_endpoint:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AddEmailTemplate']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AddEmailTemplate']._serialized_options = b'\202\323\344\223\002!\"\034/v1/admin/add_email_template:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateEmailTemplate']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateEmailTemplate']._serialized_options = b'\202\323\344\223\002$\"\037/v1/admin/update_email_template:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteEmailTemplate']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteEmailTemplate']._serialized_options = b'\202\323\344\223\002$\"\037/v1/admin/delete_email_template:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['EmailTemplates']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['EmailTemplates']._serialized_options = b'\202\323\344\223\002\036\"\031/v1/admin/email_templates:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AuditLogs']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AuditLogs']._serialized_options = b'\202\323\344\223\002\031\"\024/v1/admin/audit_logs:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaGetModel']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaGetModel']._serialized_options = b'\202\323\344\223\002\025\022\023/v1/admin/fga/model' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaWriteModel']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaWriteModel']._serialized_options = b'\202\323\344\223\002\030\"\023/v1/admin/fga/model:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaWriteTuples']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaWriteTuples']._serialized_options = b'\202\323\344\223\002\031\"\024/v1/admin/fga/tuples:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaDeleteTuples']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaDeleteTuples']._serialized_options = b'\202\323\344\223\002 \"\033/v1/admin/fga/tuples/delete:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaReadTuples']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaReadTuples']._serialized_options = b'\202\323\344\223\002\036\"\031/v1/admin/fga/tuples/read:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaListUsers']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaListUsers']._serialized_options = b'\202\323\344\223\002\035\"\030/v1/admin/fga/list_users:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaExpand']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaExpand']._serialized_options = b'\202\323\344\223\002\031\"\024/v1/admin/fga/expand:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaReset']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['FgaReset']._serialized_options = b'\202\323\344\223\002\030\"\023/v1/admin/fga/reset:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['CreateClient']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['CreateClient']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/create_client:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateClient']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateClient']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/update_client:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteClient']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteClient']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/delete_client:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RotateClientSecret']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RotateClientSecret']._serialized_options = b'\202\323\344\223\002#\"\036/v1/admin/rotate_client_secret:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetClient']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetClient']._serialized_options = b'\202\323\344\223\002\025\"\020/v1/admin/client:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['Clients']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['Clients']._serialized_options = b'\202\323\344\223\002\026\"\021/v1/admin/clients:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AddTrustedIssuer']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['AddTrustedIssuer']._serialized_options = b'\202\323\344\223\002!\"\034/v1/admin/add_trusted_issuer:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateTrustedIssuer']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateTrustedIssuer']._serialized_options = b'\202\323\344\223\002$\"\037/v1/admin/update_trusted_issuer:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteTrustedIssuer']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteTrustedIssuer']._serialized_options = b'\202\323\344\223\002$\"\037/v1/admin/delete_trusted_issuer:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetTrustedIssuer']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetTrustedIssuer']._serialized_options = b'\202\323\344\223\002\035\"\030/v1/admin/trusted_issuer:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['TrustedIssuers']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['TrustedIssuers']._serialized_options = b'\202\323\344\223\002\036\"\031/v1/admin/trusted_issuers:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['CreateSamlServiceProvider']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['CreateSamlServiceProvider']._serialized_options = b'\202\323\344\223\002+\"&/v1/admin/create_saml_service_provider:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateSamlServiceProvider']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['UpdateSamlServiceProvider']._serialized_options = b'\202\323\344\223\002+\"&/v1/admin/update_saml_service_provider:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteSamlServiceProvider']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['DeleteSamlServiceProvider']._serialized_options = b'\202\323\344\223\002+\"&/v1/admin/delete_saml_service_provider:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetSamlServiceProvider']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['GetSamlServiceProvider']._serialized_options = b'\202\323\344\223\002$\"\037/v1/admin/saml_service_provider:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ListSamlServiceProviders']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ListSamlServiceProviders']._serialized_options = b'\202\323\344\223\002%\" /v1/admin/saml_service_providers:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RotateSamlIdpCert']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RotateSamlIdpCert']._serialized_options = b'\202\323\344\223\002#\"\036/v1/admin/rotate_saml_idp_cert:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RetireSamlIdpKey']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['RetireSamlIdpKey']._serialized_options = b'\202\323\344\223\002\"\"\035/v1/admin/retire_saml_idp_key:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ListSamlIdpKeys']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ListSamlIdpKeys']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/saml_idp_keys:\001*' - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ImportSamlSpMetadata']._loaded_options = None - _globals['_AUTHORIZERADMINSERVICE'].methods_by_name['ImportSamlSpMetadata']._serialized_options = b'\202\323\344\223\002&\"!/v1/admin/import_saml_sp_metadata:\001*' - _globals['_ADMINLOGINREQUEST']._serialized_start=223 - _globals['_ADMINLOGINREQUEST']._serialized_end=286 - _globals['_ADMINLOGINRESPONSE']._serialized_start=288 - _globals['_ADMINLOGINRESPONSE']._serialized_end=334 - _globals['_ADMINLOGOUTREQUEST']._serialized_start=336 - _globals['_ADMINLOGOUTREQUEST']._serialized_end=356 - _globals['_ADMINLOGOUTRESPONSE']._serialized_start=358 - _globals['_ADMINLOGOUTRESPONSE']._serialized_end=405 - _globals['_ADMINSESSIONREQUEST']._serialized_start=407 - _globals['_ADMINSESSIONREQUEST']._serialized_end=428 - _globals['_ADMINSESSIONRESPONSE']._serialized_start=430 - _globals['_ADMINSESSIONRESPONSE']._serialized_end=478 - _globals['_ADMINMETAREQUEST']._serialized_start=480 - _globals['_ADMINMETAREQUEST']._serialized_end=498 - _globals['_ADMINMETARESPONSE']._serialized_start=500 - _globals['_ADMINMETARESPONSE']._serialized_end=576 - _globals['_ADMINMETA']._serialized_start=579 - _globals['_ADMINMETA']._serialized_end=769 - _globals['_USERSREQUEST']._serialized_start=771 - _globals['_USERSREQUEST']._serialized_end=873 - _globals['_USERSRESPONSE']._serialized_start=875 - _globals['_USERSRESPONSE']._serialized_end=992 - _globals['_USERREQUEST']._serialized_start=994 - _globals['_USERREQUEST']._serialized_end=1045 - _globals['_USERRESPONSE']._serialized_start=1047 - _globals['_USERRESPONSE']._serialized_end=1102 - _globals['_UPDATEUSERREQUEST']._serialized_start=1105 - _globals['_UPDATEUSERREQUEST']._serialized_end=1949 - _globals['_UPDATEUSERRESPONSE']._serialized_start=1951 - _globals['_UPDATEUSERRESPONSE']._serialized_end=2012 - _globals['_DELETEUSERREQUEST']._serialized_start=2014 - _globals['_DELETEUSERREQUEST']._serialized_end=2064 - _globals['_DELETEUSERRESPONSE']._serialized_start=2066 - _globals['_DELETEUSERRESPONSE']._serialized_end=2112 - _globals['_VERIFICATIONREQUESTSREQUEST']._serialized_start=2114 - _globals['_VERIFICATIONREQUESTSREQUEST']._serialized_end=2209 - _globals['_VERIFICATIONREQUESTSRESPONSE']._serialized_start=2212 - _globals['_VERIFICATIONREQUESTSRESPONSE']._serialized_end=2390 - _globals['_VERIFICATIONREQUEST']._serialized_start=2393 - _globals['_VERIFICATIONREQUEST']._serialized_end=2651 - _globals['_REVOKEACCESSREQUEST']._serialized_start=2653 - _globals['_REVOKEACCESSREQUEST']._serialized_end=2708 - _globals['_REVOKEACCESSRESPONSE']._serialized_start=2710 - _globals['_REVOKEACCESSRESPONSE']._serialized_end=2758 - _globals['_ENABLEACCESSREQUEST']._serialized_start=2760 - _globals['_ENABLEACCESSREQUEST']._serialized_end=2815 - _globals['_ENABLEACCESSRESPONSE']._serialized_start=2817 - _globals['_ENABLEACCESSRESPONSE']._serialized_end=2865 - _globals['_INVITEMEMBERSREQUEST']._serialized_start=2867 - _globals['_INVITEMEMBERSREQUEST']._serialized_end=2970 - _globals['_INVITEMEMBERSRESPONSE']._serialized_start=2972 - _globals['_INVITEMEMBERSRESPONSE']._serialized_end=3064 - _globals['_WEBHOOK']._serialized_start=3067 - _globals['_WEBHOOK']._serialized_end=3334 - _globals['_WEBHOOKLOG']._serialized_start=3337 - _globals['_WEBHOOKLOG']._serialized_end=3545 - _globals['_ADDWEBHOOKREQUEST']._serialized_start=3548 - _globals['_ADDWEBHOOKREQUEST']._serialized_end=3792 - _globals['_ADDWEBHOOKRESPONSE']._serialized_start=3794 - _globals['_ADDWEBHOOKRESPONSE']._serialized_end=3840 - _globals['_UPDATEWEBHOOKREQUEST']._serialized_start=3843 - _globals['_UPDATEWEBHOOKREQUEST']._serialized_end=4152 - _globals['_UPDATEWEBHOOKRESPONSE']._serialized_start=4154 - _globals['_UPDATEWEBHOOKRESPONSE']._serialized_end=4203 - _globals['_DELETEWEBHOOKREQUEST']._serialized_start=4205 - _globals['_DELETEWEBHOOKREQUEST']._serialized_end=4252 - _globals['_DELETEWEBHOOKRESPONSE']._serialized_start=4254 - _globals['_DELETEWEBHOOKRESPONSE']._serialized_end=4303 - _globals['_GETWEBHOOKREQUEST']._serialized_start=4305 - _globals['_GETWEBHOOKREQUEST']._serialized_end=4349 - _globals['_GETWEBHOOKRESPONSE']._serialized_start=4351 - _globals['_GETWEBHOOKRESPONSE']._serialized_end=4421 - _globals['_WEBHOOKSREQUEST']._serialized_start=4423 - _globals['_WEBHOOKSREQUEST']._serialized_end=4506 - _globals['_WEBHOOKSRESPONSE']._serialized_start=4509 - _globals['_WEBHOOKSRESPONSE']._serialized_end=4638 - _globals['_WEBHOOKLOGSREQUEST']._serialized_start=4641 - _globals['_WEBHOOKLOGSREQUEST']._serialized_end=4778 - _globals['_WEBHOOKLOGSRESPONSE']._serialized_start=4781 - _globals['_WEBHOOKLOGSRESPONSE']._serialized_end=4923 - _globals['_TESTENDPOINTREQUEST']._serialized_start=4926 - _globals['_TESTENDPOINTREQUEST']._serialized_end=5146 - _globals['_TESTENDPOINTRESPONSE']._serialized_start=5148 - _globals['_TESTENDPOINTRESPONSE']._serialized_end=5231 - _globals['_EMAILTEMPLATE']._serialized_start=5234 - _globals['_EMAILTEMPLATE']._serialized_end=5436 - _globals['_ADDEMAILTEMPLATEREQUEST']._serialized_start=5439 - _globals['_ADDEMAILTEMPLATEREQUEST']._serialized_end=5616 - _globals['_ADDEMAILTEMPLATERESPONSE']._serialized_start=5618 - _globals['_ADDEMAILTEMPLATERESPONSE']._serialized_end=5670 - _globals['_UPDATEEMAILTEMPLATEREQUEST']._serialized_start=5673 - _globals['_UPDATEEMAILTEMPLATEREQUEST']._serialized_end=5906 - _globals['_UPDATEEMAILTEMPLATERESPONSE']._serialized_start=5908 - _globals['_UPDATEEMAILTEMPLATERESPONSE']._serialized_end=5963 - _globals['_DELETEEMAILTEMPLATEREQUEST']._serialized_start=5965 - _globals['_DELETEEMAILTEMPLATEREQUEST']._serialized_end=6018 - _globals['_DELETEEMAILTEMPLATERESPONSE']._serialized_start=6020 - _globals['_DELETEEMAILTEMPLATERESPONSE']._serialized_end=6075 - _globals['_EMAILTEMPLATESREQUEST']._serialized_start=6077 - _globals['_EMAILTEMPLATESREQUEST']._serialized_end=6166 - _globals['_EMAILTEMPLATESRESPONSE']._serialized_start=6169 - _globals['_EMAILTEMPLATESRESPONSE']._serialized_end=6323 - _globals['_AUDITLOG']._serialized_start=6326 - _globals['_AUDITLOG']._serialized_end=6658 - _globals['_AUDITLOGSREQUEST']._serialized_start=6661 - _globals['_AUDITLOGSREQUEST']._serialized_end=7064 - _globals['_AUDITLOGSRESPONSE']._serialized_start=7067 - _globals['_AUDITLOGSRESPONSE']._serialized_end=7201 - _globals['_FGAMODEL']._serialized_start=7203 - _globals['_FGAMODEL']._serialized_end=7247 - _globals['_FGATUPLE']._serialized_start=7249 - _globals['_FGATUPLE']._serialized_end=7331 - _globals['_FGAGETMODELREQUEST']._serialized_start=7333 - _globals['_FGAGETMODELREQUEST']._serialized_end=7353 - _globals['_FGAGETMODELRESPONSE']._serialized_start=7355 - _globals['_FGAGETMODELRESPONSE']._serialized_end=7423 - _globals['_FGAWRITEMODELREQUEST']._serialized_start=7425 - _globals['_FGAWRITEMODELREQUEST']._serialized_end=7474 - _globals['_FGAWRITEMODELRESPONSE']._serialized_start=7476 - _globals['_FGAWRITEMODELRESPONSE']._serialized_end=7546 - _globals['_FGAWRITETUPLESREQUEST']._serialized_start=7548 - _globals['_FGAWRITETUPLESREQUEST']._serialized_end=7625 - _globals['_FGAWRITETUPLESRESPONSE']._serialized_start=7627 - _globals['_FGAWRITETUPLESRESPONSE']._serialized_end=7677 - _globals['_FGADELETETUPLESREQUEST']._serialized_start=7679 - _globals['_FGADELETETUPLESREQUEST']._serialized_end=7757 - _globals['_FGADELETETUPLESRESPONSE']._serialized_start=7759 - _globals['_FGADELETETUPLESRESPONSE']._serialized_end=7810 - _globals['_FGAREADTUPLESREQUEST']._serialized_start=7813 - _globals['_FGAREADTUPLESREQUEST']._serialized_end=8078 - _globals['_FGAREADTUPLESRESPONSE']._serialized_start=8081 - _globals['_FGAREADTUPLESRESPONSE']._serialized_end=8228 - _globals['_FGALISTUSERSREQUEST']._serialized_start=8231 - _globals['_FGALISTUSERSREQUEST']._serialized_end=8360 - _globals['_FGALISTUSERSRESPONSE']._serialized_start=8362 - _globals['_FGALISTUSERSRESPONSE']._serialized_end=8406 - _globals['_FGAEXPANDREQUEST']._serialized_start=8408 - _globals['_FGAEXPANDREQUEST']._serialized_end=8496 - _globals['_FGAEXPANDRESPONSE']._serialized_start=8498 - _globals['_FGAEXPANDRESPONSE']._serialized_end=8537 - _globals['_FGARESETREQUEST']._serialized_start=8539 - _globals['_FGARESETREQUEST']._serialized_end=8556 - _globals['_FGARESETRESPONSE']._serialized_start=8558 - _globals['_FGARESETRESPONSE']._serialized_end=8602 - _globals['_CLIENT']._serialized_start=8605 - _globals['_CLIENT']._serialized_end=8842 - _globals['_CREATECLIENTREQUEST']._serialized_start=8845 - _globals['_CREATECLIENTREQUEST']._serialized_end=8999 - _globals['_CREATECLIENTRESPONSE']._serialized_start=9001 - _globals['_CREATECLIENTRESPONSE']._serialized_end=9107 - _globals['_UPDATECLIENTREQUEST']._serialized_start=9110 - _globals['_UPDATECLIENTREQUEST']._serialized_end=9332 - _globals['_UPDATECLIENTRESPONSE']._serialized_start=9334 - _globals['_UPDATECLIENTRESPONSE']._serialized_end=9403 - _globals['_DELETECLIENTREQUEST']._serialized_start=9405 - _globals['_DELETECLIENTREQUEST']._serialized_end=9451 - _globals['_DELETECLIENTRESPONSE']._serialized_start=9453 - _globals['_DELETECLIENTRESPONSE']._serialized_end=9501 - _globals['_ROTATECLIENTSECRETREQUEST']._serialized_start=9503 - _globals['_ROTATECLIENTSECRETREQUEST']._serialized_end=9555 - _globals['_GETCLIENTREQUEST']._serialized_start=9557 - _globals['_GETCLIENTREQUEST']._serialized_end=9600 - _globals['_GETCLIENTRESPONSE']._serialized_start=9602 - _globals['_GETCLIENTRESPONSE']._serialized_end=9668 - _globals['_CLIENTSREQUEST']._serialized_start=9670 - _globals['_CLIENTSREQUEST']._serialized_end=9752 - _globals['_CLIENTSRESPONSE']._serialized_start=9754 - _globals['_CLIENTSRESPONSE']._serialized_end=9879 - _globals['_TRUSTEDISSUER']._serialized_start=9882 - _globals['_TRUSTEDISSUER']._serialized_end=10486 - _globals['_ADDTRUSTEDISSUERREQUEST']._serialized_start=10489 - _globals['_ADDTRUSTEDISSUERREQUEST']._serialized_end=11218 - _globals['_ADDTRUSTEDISSUERRESPONSE']._serialized_start=11220 - _globals['_ADDTRUSTEDISSUERRESPONSE']._serialized_end=11315 - _globals['_UPDATETRUSTEDISSUERREQUEST']._serialized_start=11318 - _globals['_UPDATETRUSTEDISSUERREQUEST']._serialized_end=11895 - _globals['_UPDATETRUSTEDISSUERRESPONSE']._serialized_start=11897 - _globals['_UPDATETRUSTEDISSUERRESPONSE']._serialized_end=11995 - _globals['_DELETETRUSTEDISSUERREQUEST']._serialized_start=11997 - _globals['_DELETETRUSTEDISSUERREQUEST']._serialized_end=12050 - _globals['_DELETETRUSTEDISSUERRESPONSE']._serialized_start=12052 - _globals['_DELETETRUSTEDISSUERRESPONSE']._serialized_end=12107 - _globals['_GETTRUSTEDISSUERREQUEST']._serialized_start=12109 - _globals['_GETTRUSTEDISSUERREQUEST']._serialized_end=12159 - _globals['_GETTRUSTEDISSUERRESPONSE']._serialized_start=12161 - _globals['_GETTRUSTEDISSUERRESPONSE']._serialized_end=12256 - _globals['_TRUSTEDISSUERSREQUEST']._serialized_start=12259 - _globals['_TRUSTEDISSUERSREQUEST']._serialized_end=12422 - _globals['_TRUSTEDISSUERSRESPONSE']._serialized_start=12425 - _globals['_TRUSTEDISSUERSRESPONSE']._serialized_end=12579 - _globals['_SAMLSERVICEPROVIDER']._serialized_start=12582 - _globals['_SAMLSERVICEPROVIDER']._serialized_end=12970 - _globals['_SAMLIDPKEY']._serialized_start=12973 - _globals['_SAMLIDPKEY']._serialized_end=13167 - _globals['_SAMLSPMETADATAPARSERESULT']._serialized_start=13169 - _globals['_SAMLSPMETADATAPARSERESULT']._serialized_end=13284 - _globals['_CREATESAMLSERVICEPROVIDERREQUEST']._serialized_start=13287 - _globals['_CREATESAMLSERVICEPROVIDERREQUEST']._serialized_end=13718 - _globals['_CREATESAMLSERVICEPROVIDERRESPONSE']._serialized_start=13720 - _globals['_CREATESAMLSERVICEPROVIDERRESPONSE']._serialized_end=13843 - _globals['_UPDATESAMLSERVICEPROVIDERREQUEST']._serialized_start=13846 - _globals['_UPDATESAMLSERVICEPROVIDERREQUEST']._serialized_end=14341 - _globals['_UPDATESAMLSERVICEPROVIDERRESPONSE']._serialized_start=14343 - _globals['_UPDATESAMLSERVICEPROVIDERRESPONSE']._serialized_end=14466 - _globals['_DELETESAMLSERVICEPROVIDERREQUEST']._serialized_start=14468 - _globals['_DELETESAMLSERVICEPROVIDERREQUEST']._serialized_end=14527 - _globals['_DELETESAMLSERVICEPROVIDERRESPONSE']._serialized_start=14529 - _globals['_DELETESAMLSERVICEPROVIDERRESPONSE']._serialized_end=14590 - _globals['_GETSAMLSERVICEPROVIDERREQUEST']._serialized_start=14592 - _globals['_GETSAMLSERVICEPROVIDERREQUEST']._serialized_end=14648 - _globals['_GETSAMLSERVICEPROVIDERRESPONSE']._serialized_start=14650 - _globals['_GETSAMLSERVICEPROVIDERRESPONSE']._serialized_end=14770 - _globals['_LISTSAMLSERVICEPROVIDERSREQUEST']._serialized_start=14773 - _globals['_LISTSAMLSERVICEPROVIDERSREQUEST']._serialized_end=14904 - _globals['_LISTSAMLSERVICEPROVIDERSRESPONSE']._serialized_start=14907 - _globals['_LISTSAMLSERVICEPROVIDERSRESPONSE']._serialized_end=15090 - _globals['_ROTATESAMLIDPCERTREQUEST']._serialized_start=15092 - _globals['_ROTATESAMLIDPCERTREQUEST']._serialized_end=15150 - _globals['_ROTATESAMLIDPCERTRESPONSE']._serialized_start=15152 - _globals['_ROTATESAMLIDPCERTRESPONSE']._serialized_end=15240 - _globals['_RETIRESAMLIDPKEYREQUEST']._serialized_start=15242 - _globals['_RETIRESAMLIDPKEYREQUEST']._serialized_end=15292 - _globals['_RETIRESAMLIDPKEYRESPONSE']._serialized_start=15294 - _globals['_RETIRESAMLIDPKEYRESPONSE']._serialized_end=15346 - _globals['_LISTSAMLIDPKEYSREQUEST']._serialized_start=15348 - _globals['_LISTSAMLIDPKEYSREQUEST']._serialized_end=15404 - _globals['_LISTSAMLIDPKEYSRESPONSE']._serialized_start=15406 - _globals['_LISTSAMLIDPKEYSRESPONSE']._serialized_end=15494 - _globals['_IMPORTSAMLSPMETADATAREQUEST']._serialized_start=15496 - _globals['_IMPORTSAMLSPMETADATAREQUEST']._serialized_end=15569 - _globals['_IMPORTSAMLSPMETADATARESPONSE']._serialized_start=15571 - _globals['_IMPORTSAMLSPMETADATARESPONSE']._serialized_end=15667 - _globals['_AUTHORIZERADMINSERVICE']._serialized_start=15670 - _globals['_AUTHORIZERADMINSERVICE']._serialized_end=22548 -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/authorizer/v1/admin_pb2_grpc.py b/gen/python/authorizer/v1/admin_pb2_grpc.py deleted file mode 100644 index 0928f578..00000000 --- a/gen/python/authorizer/v1/admin_pb2_grpc.py +++ /dev/null @@ -1,2414 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - -from authorizer.v1 import admin_pb2 as authorizer_dot_v1_dot_admin__pb2 - - -class AuthorizerAdminServiceStub(object): - """AuthorizerAdminService is the single gRPC service for Authorizer's admin - (super-admin-only) API surface. RPCs are added one domain group at a time; - see specs/2026-06-15-authorizer-admin-service-plan.md. - === Admin auth + meta === - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.AdminLogin = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/AdminLogin', - request_serializer=authorizer_dot_v1_dot_admin__pb2.AdminLoginRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.AdminLoginResponse.FromString, - _registered_method=True) - self.AdminLogout = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/AdminLogout', - request_serializer=authorizer_dot_v1_dot_admin__pb2.AdminLogoutRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.AdminLogoutResponse.FromString, - _registered_method=True) - self.AdminSession = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/AdminSession', - request_serializer=authorizer_dot_v1_dot_admin__pb2.AdminSessionRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.AdminSessionResponse.FromString, - _registered_method=True) - self.AdminMeta = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/AdminMeta', - request_serializer=authorizer_dot_v1_dot_admin__pb2.AdminMetaRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.AdminMetaResponse.FromString, - _registered_method=True) - self.Users = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/Users', - request_serializer=authorizer_dot_v1_dot_admin__pb2.UsersRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.UsersResponse.FromString, - _registered_method=True) - self.User = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/User', - request_serializer=authorizer_dot_v1_dot_admin__pb2.UserRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.UserResponse.FromString, - _registered_method=True) - self.UpdateUser = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/UpdateUser', - request_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateUserRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateUserResponse.FromString, - _registered_method=True) - self.DeleteUser = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/DeleteUser', - request_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteUserRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteUserResponse.FromString, - _registered_method=True) - self.VerificationRequests = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/VerificationRequests', - request_serializer=authorizer_dot_v1_dot_admin__pb2.VerificationRequestsRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.VerificationRequestsResponse.FromString, - _registered_method=True) - self.RevokeAccess = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/RevokeAccess', - request_serializer=authorizer_dot_v1_dot_admin__pb2.RevokeAccessRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.RevokeAccessResponse.FromString, - _registered_method=True) - self.EnableAccess = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/EnableAccess', - request_serializer=authorizer_dot_v1_dot_admin__pb2.EnableAccessRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.EnableAccessResponse.FromString, - _registered_method=True) - self.InviteMembers = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/InviteMembers', - request_serializer=authorizer_dot_v1_dot_admin__pb2.InviteMembersRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.InviteMembersResponse.FromString, - _registered_method=True) - self.AddWebhook = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/AddWebhook', - request_serializer=authorizer_dot_v1_dot_admin__pb2.AddWebhookRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.AddWebhookResponse.FromString, - _registered_method=True) - self.UpdateWebhook = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/UpdateWebhook', - request_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateWebhookRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateWebhookResponse.FromString, - _registered_method=True) - self.DeleteWebhook = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/DeleteWebhook', - request_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteWebhookRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteWebhookResponse.FromString, - _registered_method=True) - self.GetWebhook = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/GetWebhook', - request_serializer=authorizer_dot_v1_dot_admin__pb2.GetWebhookRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.GetWebhookResponse.FromString, - _registered_method=True) - self.Webhooks = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/Webhooks', - request_serializer=authorizer_dot_v1_dot_admin__pb2.WebhooksRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.WebhooksResponse.FromString, - _registered_method=True) - self.WebhookLogs = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/WebhookLogs', - request_serializer=authorizer_dot_v1_dot_admin__pb2.WebhookLogsRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.WebhookLogsResponse.FromString, - _registered_method=True) - self.TestEndpoint = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/TestEndpoint', - request_serializer=authorizer_dot_v1_dot_admin__pb2.TestEndpointRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.TestEndpointResponse.FromString, - _registered_method=True) - self.AddEmailTemplate = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/AddEmailTemplate', - request_serializer=authorizer_dot_v1_dot_admin__pb2.AddEmailTemplateRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.AddEmailTemplateResponse.FromString, - _registered_method=True) - self.UpdateEmailTemplate = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/UpdateEmailTemplate', - request_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateEmailTemplateRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateEmailTemplateResponse.FromString, - _registered_method=True) - self.DeleteEmailTemplate = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/DeleteEmailTemplate', - request_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteEmailTemplateRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteEmailTemplateResponse.FromString, - _registered_method=True) - self.EmailTemplates = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/EmailTemplates', - request_serializer=authorizer_dot_v1_dot_admin__pb2.EmailTemplatesRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.EmailTemplatesResponse.FromString, - _registered_method=True) - self.AuditLogs = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/AuditLogs', - request_serializer=authorizer_dot_v1_dot_admin__pb2.AuditLogsRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.AuditLogsResponse.FromString, - _registered_method=True) - self.FgaGetModel = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/FgaGetModel', - request_serializer=authorizer_dot_v1_dot_admin__pb2.FgaGetModelRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaGetModelResponse.FromString, - _registered_method=True) - self.FgaWriteModel = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/FgaWriteModel', - request_serializer=authorizer_dot_v1_dot_admin__pb2.FgaWriteModelRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaWriteModelResponse.FromString, - _registered_method=True) - self.FgaWriteTuples = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/FgaWriteTuples', - request_serializer=authorizer_dot_v1_dot_admin__pb2.FgaWriteTuplesRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaWriteTuplesResponse.FromString, - _registered_method=True) - self.FgaDeleteTuples = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/FgaDeleteTuples', - request_serializer=authorizer_dot_v1_dot_admin__pb2.FgaDeleteTuplesRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaDeleteTuplesResponse.FromString, - _registered_method=True) - self.FgaReadTuples = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/FgaReadTuples', - request_serializer=authorizer_dot_v1_dot_admin__pb2.FgaReadTuplesRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaReadTuplesResponse.FromString, - _registered_method=True) - self.FgaListUsers = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/FgaListUsers', - request_serializer=authorizer_dot_v1_dot_admin__pb2.FgaListUsersRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaListUsersResponse.FromString, - _registered_method=True) - self.FgaExpand = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/FgaExpand', - request_serializer=authorizer_dot_v1_dot_admin__pb2.FgaExpandRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaExpandResponse.FromString, - _registered_method=True) - self.FgaReset = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/FgaReset', - request_serializer=authorizer_dot_v1_dot_admin__pb2.FgaResetRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaResetResponse.FromString, - _registered_method=True) - self.CreateClient = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/CreateClient', - request_serializer=authorizer_dot_v1_dot_admin__pb2.CreateClientRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.FromString, - _registered_method=True) - self.UpdateClient = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/UpdateClient', - request_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateClientRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateClientResponse.FromString, - _registered_method=True) - self.DeleteClient = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/DeleteClient', - request_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteClientRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteClientResponse.FromString, - _registered_method=True) - self.RotateClientSecret = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/RotateClientSecret', - request_serializer=authorizer_dot_v1_dot_admin__pb2.RotateClientSecretRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.FromString, - _registered_method=True) - self.GetClient = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/GetClient', - request_serializer=authorizer_dot_v1_dot_admin__pb2.GetClientRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.GetClientResponse.FromString, - _registered_method=True) - self.Clients = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/Clients', - request_serializer=authorizer_dot_v1_dot_admin__pb2.ClientsRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.ClientsResponse.FromString, - _registered_method=True) - self.AddTrustedIssuer = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/AddTrustedIssuer', - request_serializer=authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerResponse.FromString, - _registered_method=True) - self.UpdateTrustedIssuer = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/UpdateTrustedIssuer', - request_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerResponse.FromString, - _registered_method=True) - self.DeleteTrustedIssuer = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/DeleteTrustedIssuer', - request_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerResponse.FromString, - _registered_method=True) - self.GetTrustedIssuer = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/GetTrustedIssuer', - request_serializer=authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerResponse.FromString, - _registered_method=True) - self.TrustedIssuers = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/TrustedIssuers', - request_serializer=authorizer_dot_v1_dot_admin__pb2.TrustedIssuersRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.TrustedIssuersResponse.FromString, - _registered_method=True) - self.CreateSamlServiceProvider = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/CreateSamlServiceProvider', - request_serializer=authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderResponse.FromString, - _registered_method=True) - self.UpdateSamlServiceProvider = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/UpdateSamlServiceProvider', - request_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderResponse.FromString, - _registered_method=True) - self.DeleteSamlServiceProvider = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/DeleteSamlServiceProvider', - request_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderResponse.FromString, - _registered_method=True) - self.GetSamlServiceProvider = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/GetSamlServiceProvider', - request_serializer=authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderResponse.FromString, - _registered_method=True) - self.ListSamlServiceProviders = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/ListSamlServiceProviders', - request_serializer=authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersResponse.FromString, - _registered_method=True) - self.RotateSamlIdpCert = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/RotateSamlIdpCert', - request_serializer=authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertResponse.FromString, - _registered_method=True) - self.RetireSamlIdpKey = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/RetireSamlIdpKey', - request_serializer=authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyResponse.FromString, - _registered_method=True) - self.ListSamlIdpKeys = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/ListSamlIdpKeys', - request_serializer=authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysResponse.FromString, - _registered_method=True) - self.ImportSamlSpMetadata = channel.unary_unary( - '/authorizer.v1.AuthorizerAdminService/ImportSamlSpMetadata', - request_serializer=authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataResponse.FromString, - _registered_method=True) - - -class AuthorizerAdminServiceServicer(object): - """AuthorizerAdminService is the single gRPC service for Authorizer's admin - (super-admin-only) API surface. RPCs are added one domain group at a time; - see specs/2026-06-15-authorizer-admin-service-plan.md. - === Admin auth + meta === - """ - - def AdminLogin(self, request, context): - """AdminLogin validates the admin secret and establishes an admin session - (Set-Cookie for browser callers). Public entry point — the ONLY admin RPC - that does not require an existing super-admin session. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AdminLogout(self, request, context): - """AdminLogout clears the admin session cookie. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AdminSession(self, request, context): - """AdminSession refreshes the admin session cookie. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AdminMeta(self, request, context): - """AdminMeta returns admin-only configuration metadata (configured roles, - default roles, protected roles). Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Users(self, request, context): - """=== Users === - - Users returns a paginated list of all users. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def User(self, request, context): - """User returns a single user by id or email. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateUser(self, request, context): - """UpdateUser updates a user's profile, roles, MFA, or verification state and - returns the updated user. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteUser(self, request, context): - """DeleteUser deletes a user (and associated OTP/verification data) by email. - Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def VerificationRequests(self, request, context): - """VerificationRequests returns a paginated list of pending verification - requests. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def RevokeAccess(self, request, context): - """=== Access === - - RevokeAccess revokes a user's access (sets the revoked timestamp), kills - their sessions, and fires the access-revoked webhook. Requires super-admin - auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def EnableAccess(self, request, context): - """EnableAccess re-enables a previously revoked user (clears the revoked - timestamp) and fires the access-enabled webhook. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def InviteMembers(self, request, context): - """InviteMembers creates accounts for new emails and sends invite emails. - Requires super-admin auth and a configured email service. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AddWebhook(self, request, context): - """=== Webhooks === - - AddWebhook registers a new webhook for an event. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateWebhook(self, request, context): - """UpdateWebhook updates an existing webhook's event, endpoint, headers, or - enabled state. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteWebhook(self, request, context): - """DeleteWebhook deletes a webhook by id. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def GetWebhook(self, request, context): - """GetWebhook returns a single webhook by id. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Webhooks(self, request, context): - """Webhooks returns a paginated list of webhooks. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def WebhookLogs(self, request, context): - """WebhookLogs returns a paginated list of webhook delivery logs, optionally - filtered by webhook id. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def TestEndpoint(self, request, context): - """TestEndpoint sends a synthetic event payload to a webhook endpoint and - returns the HTTP status and response body. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AddEmailTemplate(self, request, context): - """=== Email templates === - - AddEmailTemplate creates a new email template for an event. Requires - super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateEmailTemplate(self, request, context): - """UpdateEmailTemplate updates an existing email template's event, subject, - body, or design. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteEmailTemplate(self, request, context): - """DeleteEmailTemplate deletes an email template by id. Requires super-admin - auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def EmailTemplates(self, request, context): - """EmailTemplates returns a paginated list of email templates. Requires - super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AuditLogs(self, request, context): - """=== Audit === - - AuditLogs returns a paginated, optionally-filtered list of audit log - entries. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def FgaGetModel(self, request, context): - """=== FGA (fine-grained authorization) admin === - - Every FGA admin RPC fails closed when no authorization engine is configured - (no --fga-store): it returns FailedPrecondition rather than nil-deref or - silently succeeding. Requires super-admin auth. - - FgaGetModel returns the active fine-grained authorization model as DSL. A - store with no model yet returns an empty model (not an error). Requires - super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def FgaWriteModel(self, request, context): - """FgaWriteModel installs a new fine-grained authorization model from its DSL - and returns the new model id. Requires super-admin auth. Audited. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def FgaWriteTuples(self, request, context): - """FgaWriteTuples persists the given relationship tuples (additive). Requires - super-admin auth. Audited. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def FgaDeleteTuples(self, request, context): - """FgaDeleteTuples removes the given relationship tuples. Requires super-admin - auth. Audited. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def FgaReadTuples(self, request, context): - """FgaReadTuples returns a page of persisted tuples matching the filter. - Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def FgaListUsers(self, request, context): - """FgaListUsers returns the fully-qualified user ids of user_type that have - relation on object ("who can access this object?"). Requires super-admin - auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def FgaExpand(self, request, context): - """FgaExpand returns the OpenFGA relationship/userset tree for (relation, - object) as a JSON string (the explainability primitive). Requires - super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def FgaReset(self, request, context): - """FgaReset deletes the entire fine-grained authorization store (the model, - all its versions, and all tuples) and starts a fresh, empty store. Refused - while any tuples still exist. Requires super-admin auth. Destructive and - audited. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def CreateClient(self, request, context): - """=== Service Accounts === - - CreateClient provisions a new machine/workload identity and returns - the generated client secret exactly once (only the bcrypt hash is stored). - Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateClient(self, request, context): - """UpdateClient updates a service account's name, description, allowed - scopes, or active state. It never touches the client secret. Requires - super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteClient(self, request, context): - """DeleteClient deletes a service account by id, cascading to its - trusted issuers. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def RotateClientSecret(self, request, context): - """RotateClientSecret replaces the stored client secret with a fresh - one and returns the new plaintext exactly once (the old secret stops - validating immediately). Reuses CreateClientResponse — the only - admin message that carries a secret. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def GetClient(self, request, context): - """GetClient returns a single service account by id. The client secret - is never surfaced. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Clients(self, request, context): - """Clients returns a paginated list of service accounts. Client secrets - are never surfaced. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AddTrustedIssuer(self, request, context): - """=== Trusted Issuers === - - AddTrustedIssuer registers an external JWT issuer for a service account. - subject_claim defaults to "sub" when omitted. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateTrustedIssuer(self, request, context): - """UpdateTrustedIssuer updates a trusted issuer's name, JWKS URL, expected - audience, active state, or SPIFFE refresh hint. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteTrustedIssuer(self, request, context): - """DeleteTrustedIssuer deletes a trusted issuer by id. Requires super-admin - auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def GetTrustedIssuer(self, request, context): - """GetTrustedIssuer returns a single trusted issuer by id. Requires super-admin - auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def TrustedIssuers(self, request, context): - """TrustedIssuers returns a paginated list of trusted issuers, optionally - filtered by service_account_id. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def CreateSamlServiceProvider(self, request, context): - """=== SAML IdP: downstream service providers === - - CreateSamlServiceProvider registers a downstream SAML 2.0 SP that Authorizer - (acting as the IdP) issues signed assertions to. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateSamlServiceProvider(self, request, context): - """UpdateSamlServiceProvider updates a downstream SP's name, endpoints, - certificate, attribute mapping, or active state. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteSamlServiceProvider(self, request, context): - """DeleteSamlServiceProvider deletes a downstream SP by id. Requires - super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def GetSamlServiceProvider(self, request, context): - """GetSamlServiceProvider returns a single downstream SP by id. Requires - super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ListSamlServiceProviders(self, request, context): - """ListSamlServiceProviders returns a paginated list of downstream SPs for an - org. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def RotateSamlIdpCert(self, request, context): - """=== SAML IdP: signing key rotation & SP-metadata import === - - RotateSamlIdpCert generates a new current signing keypair for an org's SAML - IdP, demoting the previous current key. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def RetireSamlIdpKey(self, request, context): - """RetireSamlIdpKey retires a published-but-not-signing SAML IdP key by id. - Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ListSamlIdpKeys(self, request, context): - """ListSamlIdpKeys returns all SAML IdP signing keys for an org. Requires - super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ImportSamlSpMetadata(self, request, context): - """ImportSamlSpMetadata parses pasted SP metadata XML and returns the fields to - prefill a create call. It does NOT create a record and performs no remote - fetch. Requires super-admin auth. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_AuthorizerAdminServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'AdminLogin': grpc.unary_unary_rpc_method_handler( - servicer.AdminLogin, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.AdminLoginRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.AdminLoginResponse.SerializeToString, - ), - 'AdminLogout': grpc.unary_unary_rpc_method_handler( - servicer.AdminLogout, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.AdminLogoutRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.AdminLogoutResponse.SerializeToString, - ), - 'AdminSession': grpc.unary_unary_rpc_method_handler( - servicer.AdminSession, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.AdminSessionRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.AdminSessionResponse.SerializeToString, - ), - 'AdminMeta': grpc.unary_unary_rpc_method_handler( - servicer.AdminMeta, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.AdminMetaRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.AdminMetaResponse.SerializeToString, - ), - 'Users': grpc.unary_unary_rpc_method_handler( - servicer.Users, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.UsersRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.UsersResponse.SerializeToString, - ), - 'User': grpc.unary_unary_rpc_method_handler( - servicer.User, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.UserRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.UserResponse.SerializeToString, - ), - 'UpdateUser': grpc.unary_unary_rpc_method_handler( - servicer.UpdateUser, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateUserRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateUserResponse.SerializeToString, - ), - 'DeleteUser': grpc.unary_unary_rpc_method_handler( - servicer.DeleteUser, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteUserRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteUserResponse.SerializeToString, - ), - 'VerificationRequests': grpc.unary_unary_rpc_method_handler( - servicer.VerificationRequests, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.VerificationRequestsRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.VerificationRequestsResponse.SerializeToString, - ), - 'RevokeAccess': grpc.unary_unary_rpc_method_handler( - servicer.RevokeAccess, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.RevokeAccessRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.RevokeAccessResponse.SerializeToString, - ), - 'EnableAccess': grpc.unary_unary_rpc_method_handler( - servicer.EnableAccess, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.EnableAccessRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.EnableAccessResponse.SerializeToString, - ), - 'InviteMembers': grpc.unary_unary_rpc_method_handler( - servicer.InviteMembers, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.InviteMembersRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.InviteMembersResponse.SerializeToString, - ), - 'AddWebhook': grpc.unary_unary_rpc_method_handler( - servicer.AddWebhook, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.AddWebhookRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.AddWebhookResponse.SerializeToString, - ), - 'UpdateWebhook': grpc.unary_unary_rpc_method_handler( - servicer.UpdateWebhook, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateWebhookRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateWebhookResponse.SerializeToString, - ), - 'DeleteWebhook': grpc.unary_unary_rpc_method_handler( - servicer.DeleteWebhook, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteWebhookRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteWebhookResponse.SerializeToString, - ), - 'GetWebhook': grpc.unary_unary_rpc_method_handler( - servicer.GetWebhook, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.GetWebhookRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.GetWebhookResponse.SerializeToString, - ), - 'Webhooks': grpc.unary_unary_rpc_method_handler( - servicer.Webhooks, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.WebhooksRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.WebhooksResponse.SerializeToString, - ), - 'WebhookLogs': grpc.unary_unary_rpc_method_handler( - servicer.WebhookLogs, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.WebhookLogsRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.WebhookLogsResponse.SerializeToString, - ), - 'TestEndpoint': grpc.unary_unary_rpc_method_handler( - servicer.TestEndpoint, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.TestEndpointRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.TestEndpointResponse.SerializeToString, - ), - 'AddEmailTemplate': grpc.unary_unary_rpc_method_handler( - servicer.AddEmailTemplate, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.AddEmailTemplateRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.AddEmailTemplateResponse.SerializeToString, - ), - 'UpdateEmailTemplate': grpc.unary_unary_rpc_method_handler( - servicer.UpdateEmailTemplate, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateEmailTemplateRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateEmailTemplateResponse.SerializeToString, - ), - 'DeleteEmailTemplate': grpc.unary_unary_rpc_method_handler( - servicer.DeleteEmailTemplate, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteEmailTemplateRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteEmailTemplateResponse.SerializeToString, - ), - 'EmailTemplates': grpc.unary_unary_rpc_method_handler( - servicer.EmailTemplates, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.EmailTemplatesRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.EmailTemplatesResponse.SerializeToString, - ), - 'AuditLogs': grpc.unary_unary_rpc_method_handler( - servicer.AuditLogs, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.AuditLogsRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.AuditLogsResponse.SerializeToString, - ), - 'FgaGetModel': grpc.unary_unary_rpc_method_handler( - servicer.FgaGetModel, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaGetModelRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.FgaGetModelResponse.SerializeToString, - ), - 'FgaWriteModel': grpc.unary_unary_rpc_method_handler( - servicer.FgaWriteModel, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaWriteModelRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.FgaWriteModelResponse.SerializeToString, - ), - 'FgaWriteTuples': grpc.unary_unary_rpc_method_handler( - servicer.FgaWriteTuples, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaWriteTuplesRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.FgaWriteTuplesResponse.SerializeToString, - ), - 'FgaDeleteTuples': grpc.unary_unary_rpc_method_handler( - servicer.FgaDeleteTuples, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaDeleteTuplesRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.FgaDeleteTuplesResponse.SerializeToString, - ), - 'FgaReadTuples': grpc.unary_unary_rpc_method_handler( - servicer.FgaReadTuples, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaReadTuplesRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.FgaReadTuplesResponse.SerializeToString, - ), - 'FgaListUsers': grpc.unary_unary_rpc_method_handler( - servicer.FgaListUsers, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaListUsersRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.FgaListUsersResponse.SerializeToString, - ), - 'FgaExpand': grpc.unary_unary_rpc_method_handler( - servicer.FgaExpand, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaExpandRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.FgaExpandResponse.SerializeToString, - ), - 'FgaReset': grpc.unary_unary_rpc_method_handler( - servicer.FgaReset, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.FgaResetRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.FgaResetResponse.SerializeToString, - ), - 'CreateClient': grpc.unary_unary_rpc_method_handler( - servicer.CreateClient, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.CreateClientRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.SerializeToString, - ), - 'UpdateClient': grpc.unary_unary_rpc_method_handler( - servicer.UpdateClient, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateClientRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateClientResponse.SerializeToString, - ), - 'DeleteClient': grpc.unary_unary_rpc_method_handler( - servicer.DeleteClient, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteClientRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteClientResponse.SerializeToString, - ), - 'RotateClientSecret': grpc.unary_unary_rpc_method_handler( - servicer.RotateClientSecret, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.RotateClientSecretRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.SerializeToString, - ), - 'GetClient': grpc.unary_unary_rpc_method_handler( - servicer.GetClient, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.GetClientRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.GetClientResponse.SerializeToString, - ), - 'Clients': grpc.unary_unary_rpc_method_handler( - servicer.Clients, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.ClientsRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.ClientsResponse.SerializeToString, - ), - 'AddTrustedIssuer': grpc.unary_unary_rpc_method_handler( - servicer.AddTrustedIssuer, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerResponse.SerializeToString, - ), - 'UpdateTrustedIssuer': grpc.unary_unary_rpc_method_handler( - servicer.UpdateTrustedIssuer, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerResponse.SerializeToString, - ), - 'DeleteTrustedIssuer': grpc.unary_unary_rpc_method_handler( - servicer.DeleteTrustedIssuer, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerResponse.SerializeToString, - ), - 'GetTrustedIssuer': grpc.unary_unary_rpc_method_handler( - servicer.GetTrustedIssuer, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerResponse.SerializeToString, - ), - 'TrustedIssuers': grpc.unary_unary_rpc_method_handler( - servicer.TrustedIssuers, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.TrustedIssuersRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.TrustedIssuersResponse.SerializeToString, - ), - 'CreateSamlServiceProvider': grpc.unary_unary_rpc_method_handler( - servicer.CreateSamlServiceProvider, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderResponse.SerializeToString, - ), - 'UpdateSamlServiceProvider': grpc.unary_unary_rpc_method_handler( - servicer.UpdateSamlServiceProvider, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderResponse.SerializeToString, - ), - 'DeleteSamlServiceProvider': grpc.unary_unary_rpc_method_handler( - servicer.DeleteSamlServiceProvider, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderResponse.SerializeToString, - ), - 'GetSamlServiceProvider': grpc.unary_unary_rpc_method_handler( - servicer.GetSamlServiceProvider, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderResponse.SerializeToString, - ), - 'ListSamlServiceProviders': grpc.unary_unary_rpc_method_handler( - servicer.ListSamlServiceProviders, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersResponse.SerializeToString, - ), - 'RotateSamlIdpCert': grpc.unary_unary_rpc_method_handler( - servicer.RotateSamlIdpCert, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertResponse.SerializeToString, - ), - 'RetireSamlIdpKey': grpc.unary_unary_rpc_method_handler( - servicer.RetireSamlIdpKey, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyResponse.SerializeToString, - ), - 'ListSamlIdpKeys': grpc.unary_unary_rpc_method_handler( - servicer.ListSamlIdpKeys, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysResponse.SerializeToString, - ), - 'ImportSamlSpMetadata': grpc.unary_unary_rpc_method_handler( - servicer.ImportSamlSpMetadata, - request_deserializer=authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataRequest.FromString, - response_serializer=authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'authorizer.v1.AuthorizerAdminService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - server.add_registered_method_handlers('authorizer.v1.AuthorizerAdminService', rpc_method_handlers) - - - # This class is part of an EXPERIMENTAL API. -class AuthorizerAdminService(object): - """AuthorizerAdminService is the single gRPC service for Authorizer's admin - (super-admin-only) API surface. RPCs are added one domain group at a time; - see specs/2026-06-15-authorizer-admin-service-plan.md. - === Admin auth + meta === - """ - - @staticmethod - def AdminLogin(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/AdminLogin', - authorizer_dot_v1_dot_admin__pb2.AdminLoginRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.AdminLoginResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def AdminLogout(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/AdminLogout', - authorizer_dot_v1_dot_admin__pb2.AdminLogoutRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.AdminLogoutResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def AdminSession(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/AdminSession', - authorizer_dot_v1_dot_admin__pb2.AdminSessionRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.AdminSessionResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def AdminMeta(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/AdminMeta', - authorizer_dot_v1_dot_admin__pb2.AdminMetaRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.AdminMetaResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Users(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/Users', - authorizer_dot_v1_dot_admin__pb2.UsersRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.UsersResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def User(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/User', - authorizer_dot_v1_dot_admin__pb2.UserRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.UserResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateUser(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/UpdateUser', - authorizer_dot_v1_dot_admin__pb2.UpdateUserRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.UpdateUserResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def DeleteUser(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/DeleteUser', - authorizer_dot_v1_dot_admin__pb2.DeleteUserRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.DeleteUserResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def VerificationRequests(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/VerificationRequests', - authorizer_dot_v1_dot_admin__pb2.VerificationRequestsRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.VerificationRequestsResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def RevokeAccess(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/RevokeAccess', - authorizer_dot_v1_dot_admin__pb2.RevokeAccessRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.RevokeAccessResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def EnableAccess(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/EnableAccess', - authorizer_dot_v1_dot_admin__pb2.EnableAccessRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.EnableAccessResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def InviteMembers(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/InviteMembers', - authorizer_dot_v1_dot_admin__pb2.InviteMembersRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.InviteMembersResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def AddWebhook(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/AddWebhook', - authorizer_dot_v1_dot_admin__pb2.AddWebhookRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.AddWebhookResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateWebhook(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/UpdateWebhook', - authorizer_dot_v1_dot_admin__pb2.UpdateWebhookRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.UpdateWebhookResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def DeleteWebhook(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/DeleteWebhook', - authorizer_dot_v1_dot_admin__pb2.DeleteWebhookRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.DeleteWebhookResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def GetWebhook(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/GetWebhook', - authorizer_dot_v1_dot_admin__pb2.GetWebhookRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.GetWebhookResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Webhooks(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/Webhooks', - authorizer_dot_v1_dot_admin__pb2.WebhooksRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.WebhooksResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def WebhookLogs(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/WebhookLogs', - authorizer_dot_v1_dot_admin__pb2.WebhookLogsRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.WebhookLogsResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def TestEndpoint(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/TestEndpoint', - authorizer_dot_v1_dot_admin__pb2.TestEndpointRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.TestEndpointResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def AddEmailTemplate(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/AddEmailTemplate', - authorizer_dot_v1_dot_admin__pb2.AddEmailTemplateRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.AddEmailTemplateResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateEmailTemplate(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/UpdateEmailTemplate', - authorizer_dot_v1_dot_admin__pb2.UpdateEmailTemplateRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.UpdateEmailTemplateResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def DeleteEmailTemplate(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/DeleteEmailTemplate', - authorizer_dot_v1_dot_admin__pb2.DeleteEmailTemplateRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.DeleteEmailTemplateResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def EmailTemplates(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/EmailTemplates', - authorizer_dot_v1_dot_admin__pb2.EmailTemplatesRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.EmailTemplatesResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def AuditLogs(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/AuditLogs', - authorizer_dot_v1_dot_admin__pb2.AuditLogsRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.AuditLogsResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def FgaGetModel(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/FgaGetModel', - authorizer_dot_v1_dot_admin__pb2.FgaGetModelRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.FgaGetModelResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def FgaWriteModel(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/FgaWriteModel', - authorizer_dot_v1_dot_admin__pb2.FgaWriteModelRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.FgaWriteModelResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def FgaWriteTuples(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/FgaWriteTuples', - authorizer_dot_v1_dot_admin__pb2.FgaWriteTuplesRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.FgaWriteTuplesResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def FgaDeleteTuples(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/FgaDeleteTuples', - authorizer_dot_v1_dot_admin__pb2.FgaDeleteTuplesRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.FgaDeleteTuplesResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def FgaReadTuples(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/FgaReadTuples', - authorizer_dot_v1_dot_admin__pb2.FgaReadTuplesRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.FgaReadTuplesResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def FgaListUsers(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/FgaListUsers', - authorizer_dot_v1_dot_admin__pb2.FgaListUsersRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.FgaListUsersResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def FgaExpand(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/FgaExpand', - authorizer_dot_v1_dot_admin__pb2.FgaExpandRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.FgaExpandResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def FgaReset(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/FgaReset', - authorizer_dot_v1_dot_admin__pb2.FgaResetRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.FgaResetResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def CreateClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/CreateClient', - authorizer_dot_v1_dot_admin__pb2.CreateClientRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/UpdateClient', - authorizer_dot_v1_dot_admin__pb2.UpdateClientRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.UpdateClientResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def DeleteClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/DeleteClient', - authorizer_dot_v1_dot_admin__pb2.DeleteClientRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.DeleteClientResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def RotateClientSecret(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/RotateClientSecret', - authorizer_dot_v1_dot_admin__pb2.RotateClientSecretRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.CreateClientResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def GetClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/GetClient', - authorizer_dot_v1_dot_admin__pb2.GetClientRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.GetClientResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Clients(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/Clients', - authorizer_dot_v1_dot_admin__pb2.ClientsRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.ClientsResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def AddTrustedIssuer(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/AddTrustedIssuer', - authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.AddTrustedIssuerResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateTrustedIssuer(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/UpdateTrustedIssuer', - authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.UpdateTrustedIssuerResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def DeleteTrustedIssuer(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/DeleteTrustedIssuer', - authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.DeleteTrustedIssuerResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def GetTrustedIssuer(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/GetTrustedIssuer', - authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.GetTrustedIssuerResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def TrustedIssuers(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/TrustedIssuers', - authorizer_dot_v1_dot_admin__pb2.TrustedIssuersRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.TrustedIssuersResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def CreateSamlServiceProvider(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/CreateSamlServiceProvider', - authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.CreateSamlServiceProviderResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateSamlServiceProvider(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/UpdateSamlServiceProvider', - authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.UpdateSamlServiceProviderResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def DeleteSamlServiceProvider(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/DeleteSamlServiceProvider', - authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.DeleteSamlServiceProviderResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def GetSamlServiceProvider(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/GetSamlServiceProvider', - authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.GetSamlServiceProviderResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ListSamlServiceProviders(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/ListSamlServiceProviders', - authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.ListSamlServiceProvidersResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def RotateSamlIdpCert(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/RotateSamlIdpCert', - authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.RotateSamlIdpCertResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def RetireSamlIdpKey(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/RetireSamlIdpKey', - authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.RetireSamlIdpKeyResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ListSamlIdpKeys(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/ListSamlIdpKeys', - authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.ListSamlIdpKeysResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ImportSamlSpMetadata(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerAdminService/ImportSamlSpMetadata', - authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataRequest.SerializeToString, - authorizer_dot_v1_dot_admin__pb2.ImportSamlSpMetadataResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) diff --git a/gen/python/authorizer/v1/annotations_pb2.py b/gen/python/authorizer/v1/annotations_pb2.py deleted file mode 100644 index 30a1f15f..00000000 --- a/gen/python/authorizer/v1/annotations_pb2.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: authorizer/v1/annotations.proto -# Protobuf Python Version: 5.27.3 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 27, - 3, - '', - 'authorizer/v1/annotations.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1f\x61uthorizer/v1/annotations.proto\x12\rauthorizer.v1\x1a google/protobuf/descriptor.proto\"I\n\x15PermissionRequirement\x12\x1a\n\x08resource\x18\x01 \x01(\tR\x08resource\x12\x14\n\x05scope\x18\x02 \x01(\tR\x05scope\"b\n\x07McpTool\x12\x18\n\x07\x65xposed\x18\x01 \x01(\x08R\x07\x65xposed\x12\x1b\n\ttool_name\x18\x02 \x01(\tR\x08toolName\x12 \n\x0b\x64\x65structive\x18\x03 \x01(\x08R\x0b\x64\x65structive:y\n\x14required_permissions\x12\x1e.google.protobuf.MethodOptions\x18\xd1\x86\x03 \x03(\x0b\x32$.authorizer.v1.PermissionRequirementR\x13requiredPermissions:S\n\x08mcp_tool\x12\x1e.google.protobuf.MethodOptions\x18\xd2\x86\x03 \x01(\x0b\x32\x16.authorizer.v1.McpToolR\x07mcpTool:=\n\taudit_log\x12\x1e.google.protobuf.MethodOptions\x18\xd3\x86\x03 \x01(\x08R\x08\x61uditLog:8\n\x06public\x12\x1e.google.protobuf.MethodOptions\x18\xd4\x86\x03 \x01(\x08R\x06publicB\xcc\x01\n\x11\x63om.authorizer.v1B\x10\x41nnotationsProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.annotations_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\020AnnotationsProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' - _globals['_PERMISSIONREQUIREMENT']._serialized_start=84 - _globals['_PERMISSIONREQUIREMENT']._serialized_end=157 - _globals['_MCPTOOL']._serialized_start=159 - _globals['_MCPTOOL']._serialized_end=257 -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/authorizer/v1/annotations_pb2_grpc.py b/gen/python/authorizer/v1/annotations_pb2_grpc.py deleted file mode 100644 index 2daafffe..00000000 --- a/gen/python/authorizer/v1/annotations_pb2_grpc.py +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - diff --git a/gen/python/authorizer/v1/authorizer_pb2.py b/gen/python/authorizer/v1/authorizer_pb2.py deleted file mode 100644 index b37495d7..00000000 --- a/gen/python/authorizer/v1/authorizer_pb2.py +++ /dev/null @@ -1,246 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: authorizer/v1/authorizer.proto -# Protobuf Python Version: 5.27.3 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 27, - 3, - '', - 'authorizer/v1/authorizer.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from authorizer.v1 import annotations_pb2 as authorizer_dot_v1_dot_annotations__pb2 -from authorizer.v1 import common_pb2 as authorizer_dot_v1_dot_common__pb2 -from authorizer.v1 import types_pb2 as authorizer_dot_v1_dot_types__pb2 -from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x61uthorizer/v1/authorizer.proto\x12\rauthorizer.v1\x1a\x1f\x61uthorizer/v1/annotations.proto\x1a\x1a\x61uthorizer/v1/common.proto\x1a\x19\x61uthorizer/v1/types.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\"\xc3\x04\n\rSignupRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12&\n\x08password\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x08password\x12\x35\n\x10\x63onfirm_password\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x0f\x63onfirmPassword\x12\x1d\n\ngiven_name\x18\x05 \x01(\tR\tgivenName\x12\x1f\n\x0b\x66\x61mily_name\x18\x06 \x01(\tR\nfamilyName\x12\x1f\n\x0bmiddle_name\x18\x07 \x01(\tR\nmiddleName\x12\x1a\n\x08nickname\x18\x08 \x01(\tR\x08nickname\x12\x16\n\x06gender\x18\t \x01(\tR\x06gender\x12\x1c\n\tbirthdate\x18\n \x01(\tR\tbirthdate\x12\x18\n\x07picture\x18\x0b \x01(\tR\x07picture\x12\x14\n\x05roles\x18\x0c \x03(\tR\x05roles\x12\x14\n\x05scope\x18\r \x03(\tR\x05scope\x12!\n\x0credirect_uri\x18\x0e \x01(\tR\x0bredirectUri\x12\x14\n\x05state\x18\x10 \x01(\tR\x05state\x12\x31\n\x08\x61pp_data\x18\x11 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppDataJ\x04\x08\x0f\x10\x10R\x1cis_multi_factor_auth_enabled\"\xc4\x01\n\x0cLoginRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12&\n\x08password\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x08password\x12\x14\n\x05roles\x18\x04 \x03(\tR\x05roles\x12\x14\n\x05scope\x18\x05 \x03(\tR\x05scope\x12\x14\n\x05state\x18\x06 \x01(\tR\x05state\"\x0f\n\rLogoutRequest\"*\n\x0eLogoutResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x9c\x01\n\x15MagicLinkLoginRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12\x14\n\x05roles\x18\x02 \x03(\tR\x05roles\x12\x14\n\x05scope\x18\x03 \x03(\tR\x05scope\x12\x14\n\x05state\x18\x04 \x01(\tR\x05state\x12!\n\x0credirect_uri\x18\x05 \x01(\tR\x0bredirectUri\"2\n\x16MagicLinkLoginResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"I\n\x12VerifyEmailRequest\x12\x1d\n\x05token\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05token\x12\x14\n\x05state\x18\x02 \x01(\tR\x05state\"y\n\x18ResendVerifyEmailRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12\'\n\nidentifier\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nidentifier\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\"5\n\x19ResendVerifyEmailResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xaa\x01\n\x10VerifyOtpRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x1b\n\x03otp\x18\x03 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18\x10R\x03otp\x12\x17\n\x07is_totp\x18\x04 \x01(\x08R\x06isTotp\x12\x14\n\x05state\x18\x05 \x01(\tR\x05state\"t\n\x10ResendOtpRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\"-\n\x11ResendOtpResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"w\n\x13SkipMfaSetupRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\"\\\n\x0eLockMfaRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\"+\n\x0fLockMfaResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"e\n\x17\x45mailOtpMfaSetupRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\"4\n\x18\x45mailOtpMfaSetupResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"c\n\x15SmsOtpMfaSetupRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\"2\n\x16SmsOtpMfaSetupResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x9c\x01\n\x15\x46orgotPasswordRequest\x12\x1e\n\x05\x65mail\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12*\n\x0cphone_number\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\x12!\n\x0credirect_uri\x18\x04 \x01(\tR\x0bredirectUri\"t\n\x16\x46orgotPasswordResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12@\n\x1dshould_show_mobile_otp_screen\x18\x02 \x01(\x08R\x19shouldShowMobileOtpScreen\"\xc9\x01\n\x14ResetPasswordRequest\x12\x14\n\x05token\x18\x01 \x01(\tR\x05token\x12\x10\n\x03otp\x18\x02 \x01(\tR\x03otp\x12*\n\x0cphone_number\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12&\n\x08password\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x08password\x12\x35\n\x10\x63onfirm_password\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x0f\x63onfirmPassword\"1\n\x15ResetPasswordResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x10\n\x0eProfileRequest\"\xd4\x04\n\x14UpdateProfileRequest\x12!\n\x0cold_password\x18\x01 \x01(\tR\x0boldPassword\x12+\n\x0cnew_password\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x0bnewPassword\x12:\n\x14\x63onfirm_new_password\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x01R\x12\x63onfirmNewPassword\x12\x1e\n\x05\x65mail\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\x18\xc0\x02R\x05\x65mail\x12\x1d\n\ngiven_name\x18\x05 \x01(\tR\tgivenName\x12\x1f\n\x0b\x66\x61mily_name\x18\x06 \x01(\tR\nfamilyName\x12\x1f\n\x0bmiddle_name\x18\x07 \x01(\tR\nmiddleName\x12\x1a\n\x08nickname\x18\x08 \x01(\tR\x08nickname\x12\x16\n\x06gender\x18\t \x01(\tR\x06gender\x12\x1c\n\tbirthdate\x18\n \x01(\tR\tbirthdate\x12*\n\x0cphone_number\x18\x0b \x01(\tB\x07\xbaH\x04r\x02\x18 R\x0bphoneNumber\x12\x18\n\x07picture\x18\x0c \x01(\tR\x07picture\x12\x43\n\x1cis_multi_factor_auth_enabled\x18\r \x01(\x08H\x00R\x18isMultiFactorAuthEnabled\x88\x01\x01\x12\x31\n\x08\x61pp_data\x18\x0e \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppDataB\x1f\n\x1d_is_multi_factor_auth_enabled\"1\n\x15UpdateProfileResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\x1a\n\x18\x44\x65\x61\x63tivateAccountRequest\"5\n\x19\x44\x65\x61\x63tivateAccountResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"=\n\rRevokeRequest\x12,\n\rrefresh_token\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0crefreshToken\"*\n\x0eRevokeResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xa2\x01\n\x0eSessionRequest\x12\x14\n\x05roles\x18\x01 \x03(\tR\x05roles\x12\x14\n\x05scope\x18\x02 \x03(\tR\x05scope\x12\x14\n\x05state\x18\x03 \x01(\tR\x05state\x12N\n\x12required_relations\x18\x04 \x03(\x0b\x32\x1f.authorizer.v1.FgaRelationInputR\x11requiredRelations\"\xc6\x01\n\x17ValidateJwtTokenRequest\x12&\n\ntoken_type\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\ttokenType\x12\x1d\n\x05token\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05token\x12\x14\n\x05roles\x18\x03 \x03(\tR\x05roles\x12N\n\x12required_relations\x18\x04 \x03(\x0b\x32\x1f.authorizer.v1.FgaRelationInputR\x11requiredRelations\"e\n\x18ValidateJwtTokenResponse\x12\x19\n\x08is_valid\x18\x01 \x01(\x08R\x07isValid\x12.\n\x06\x63laims\x18\x02 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x06\x63laims\"\x9f\x01\n\x16ValidateSessionRequest\x12\x1f\n\x06\x63ookie\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06\x63ookie\x12\x14\n\x05roles\x18\x02 \x03(\tR\x05roles\x12N\n\x12required_relations\x18\x03 \x03(\x0b\x32\x1f.authorizer.v1.FgaRelationInputR\x11requiredRelations\"]\n\x17ValidateSessionResponse\x12\x19\n\x08is_valid\x18\x01 \x01(\x08R\x07isValid\x12\'\n\x04user\x18\x02 \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\"\r\n\x0bMetaRequest\"v\n\x17\x43heckPermissionsRequest\x12G\n\x06\x63hecks\x18\x01 \x03(\x0b\x32#.authorizer.v1.PermissionCheckInputB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\x64R\x06\x63hecks\x12\x12\n\x04user\x18\x02 \x01(\tR\x04user\"Z\n\x18\x43heckPermissionsResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32$.authorizer.v1.PermissionCheckResultR\x07results\"i\n\x16ListPermissionsRequest\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x1f\n\x0bobject_type\x18\x02 \x01(\tR\nobjectType\x12\x12\n\x04user\x18\x03 \x01(\tR\x04user\"\x8e\x01\n\x17ListPermissionsResponse\x12\x18\n\x07objects\x18\x01 \x03(\tR\x07objects\x12;\n\x0bpermissions\x18\x02 \x03(\x0b\x32\x19.authorizer.v1.PermissionR\x0bpermissions\x12\x1c\n\ttruncated\x18\x03 \x01(\x08R\ttruncated2\xe7\x16\n\x11\x41uthorizerService\x12\x66\n\x06Signup\x12\x1c.authorizer.v1.SignupRequest\x1a\x1b.authorizer.v1.AuthResponse\"!\x92\xb5\x18\x00\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0f\"\n/v1/signup:\x01*\x12\x63\n\x05Login\x12\x1b.authorizer.v1.LoginRequest\x1a\x1b.authorizer.v1.AuthResponse\" \x92\xb5\x18\x00\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0e\"\t/v1/login:\x01*\x12]\n\x06Logout\x12\x1c.authorizer.v1.LogoutRequest\x1a\x1d.authorizer.v1.LogoutResponse\"\x16\x98\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0c\"\n/v1/logout\x12\x86\x01\n\x0eMagicLinkLogin\x12$.authorizer.v1.MagicLinkLoginRequest\x1a%.authorizer.v1.MagicLinkLoginResponse\"\'\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x19\"\x14/v1/magic_link_login:\x01*\x12r\n\x0bVerifyEmail\x12!.authorizer.v1.VerifyEmailRequest\x1a\x1b.authorizer.v1.AuthResponse\"#\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x15\"\x10/v1/verify_email:\x01*\x12\x8e\x01\n\x11ResendVerifyEmail\x12\'.authorizer.v1.ResendVerifyEmailRequest\x1a(.authorizer.v1.ResendVerifyEmailResponse\"&\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/resend_verify_email:\x01*\x12l\n\tVerifyOtp\x12\x1f.authorizer.v1.VerifyOtpRequest\x1a\x1b.authorizer.v1.AuthResponse\"!\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x13\"\x0e/v1/verify_otp:\x01*\x12m\n\tResendOtp\x12\x1f.authorizer.v1.ResendOtpRequest\x1a .authorizer.v1.ResendOtpResponse\"\x1d\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x13\"\x0e/v1/resend_otp:\x01*\x12v\n\x0cSkipMfaSetup\x12\".authorizer.v1.SkipMfaSetupRequest\x1a\x1b.authorizer.v1.AuthResponse\"%\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x17\"\x12/v1/skip_mfa_setup:\x01*\x12i\n\x07LockMfa\x12\x1d.authorizer.v1.LockMfaRequest\x1a\x1e.authorizer.v1.LockMfaResponse\"\x1f\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x11\"\x0c/v1/lock_mfa:\x01*\x12\x8f\x01\n\x10\x45mailOtpMfaSetup\x12&.authorizer.v1.EmailOtpMfaSetupRequest\x1a\'.authorizer.v1.EmailOtpMfaSetupResponse\"*\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/email_otp_mfa_setup:\x01*\x12\x87\x01\n\x0eSmsOtpMfaSetup\x12$.authorizer.v1.SmsOtpMfaSetupRequest\x1a%.authorizer.v1.SmsOtpMfaSetupResponse\"(\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1a\"\x15/v1/sms_otp_mfa_setup:\x01*\x12\x81\x01\n\x0e\x46orgotPassword\x12$.authorizer.v1.ForgotPasswordRequest\x1a%.authorizer.v1.ForgotPasswordResponse\"\"\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x18\"\x13/v1/forgot_password:\x01*\x12\x81\x01\n\rResetPassword\x12#.authorizer.v1.ResetPasswordRequest\x1a$.authorizer.v1.ResetPasswordResponse\"%\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x17\"\x12/v1/reset_password:\x01*\x12X\n\x07Profile\x12\x1d.authorizer.v1.ProfileRequest\x1a\x13.authorizer.v1.User\"\x19\x92\xb5\x18\x02\x08\x01\x82\xd3\xe4\x93\x02\r\x12\x0b/v1/profile\x12}\n\rUpdateProfile\x12#.authorizer.v1.UpdateProfileRequest\x1a$.authorizer.v1.UpdateProfileResponse\"!\x98\xb5\x18\x01\x82\xd3\xe4\x93\x02\x17\"\x12/v1/update_profile:\x01*\x12\x93\x01\n\x11\x44\x65\x61\x63tivateAccount\x12\'.authorizer.v1.DeactivateAccountRequest\x1a(.authorizer.v1.DeactivateAccountResponse\"+\x92\xb5\x18\x02\x18\x01\x98\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/deactivate_account:\x01*\x12\x64\n\x06Revoke\x12\x1c.authorizer.v1.RevokeRequest\x1a\x1d.authorizer.v1.RevokeResponse\"\x1d\x98\xb5\x18\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x0f\"\n/v1/revoke:\x01*\x12]\n\x07Session\x12\x1d.authorizer.v1.SessionRequest\x1a\x1b.authorizer.v1.AuthResponse\"\x16\x82\xd3\xe4\x93\x02\x10\"\x0b/v1/session:\x01*\x12\x8a\x01\n\x10ValidateJwtToken\x12&.authorizer.v1.ValidateJwtTokenRequest\x1a\'.authorizer.v1.ValidateJwtTokenResponse\"%\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/validate_jwt_token:\x01*\x12\x85\x01\n\x0fValidateSession\x12%.authorizer.v1.ValidateSessionRequest\x1a&.authorizer.v1.ValidateSessionResponse\"#\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\x19\"\x14/v1/validate_session:\x01*\x12S\n\x04Meta\x12\x1a.authorizer.v1.MetaRequest\x1a\x13.authorizer.v1.Meta\"\x1a\x92\xb5\x18\x02\x08\x01\xa0\xb5\x18\x01\x82\xd3\xe4\x93\x02\n\x12\x08/v1/meta\x12\x8b\x01\n\x10\x43heckPermissions\x12&.authorizer.v1.CheckPermissionsRequest\x1a\'.authorizer.v1.CheckPermissionsResponse\"&\x92\xb5\x18\x02\x08\x01\x82\xd3\xe4\x93\x02\x1a\"\x15/v1/check_permissions:\x01*\x12\x87\x01\n\x0fListPermissions\x12%.authorizer.v1.ListPermissionsRequest\x1a&.authorizer.v1.ListPermissionsResponse\"%\x92\xb5\x18\x02\x08\x01\x82\xd3\xe4\x93\x02\x19\"\x14/v1/list_permissions:\x01*B\xcb\x01\n\x11\x63om.authorizer.v1B\x0f\x41uthorizerProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.authorizer_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\017AuthorizerProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' - _globals['_SIGNUPREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_SIGNUPREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_SIGNUPREQUEST'].fields_by_name['phone_number']._loaded_options = None - _globals['_SIGNUPREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' - _globals['_SIGNUPREQUEST'].fields_by_name['password']._loaded_options = None - _globals['_SIGNUPREQUEST'].fields_by_name['password']._serialized_options = b'\272H\007r\005\020\001\030\200\001' - _globals['_SIGNUPREQUEST'].fields_by_name['confirm_password']._loaded_options = None - _globals['_SIGNUPREQUEST'].fields_by_name['confirm_password']._serialized_options = b'\272H\007r\005\020\001\030\200\001' - _globals['_LOGINREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_LOGINREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_LOGINREQUEST'].fields_by_name['phone_number']._loaded_options = None - _globals['_LOGINREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' - _globals['_LOGINREQUEST'].fields_by_name['password']._loaded_options = None - _globals['_LOGINREQUEST'].fields_by_name['password']._serialized_options = b'\272H\007r\005\020\001\030\200\001' - _globals['_MAGICLINKLOGINREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_MAGICLINKLOGINREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_VERIFYEMAILREQUEST'].fields_by_name['token']._loaded_options = None - _globals['_VERIFYEMAILREQUEST'].fields_by_name['token']._serialized_options = b'\272H\004r\002\020\001' - _globals['_RESENDVERIFYEMAILREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_RESENDVERIFYEMAILREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_RESENDVERIFYEMAILREQUEST'].fields_by_name['identifier']._loaded_options = None - _globals['_RESENDVERIFYEMAILREQUEST'].fields_by_name['identifier']._serialized_options = b'\272H\004r\002\020\001' - _globals['_VERIFYOTPREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_VERIFYOTPREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_VERIFYOTPREQUEST'].fields_by_name['phone_number']._loaded_options = None - _globals['_VERIFYOTPREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' - _globals['_VERIFYOTPREQUEST'].fields_by_name['otp']._loaded_options = None - _globals['_VERIFYOTPREQUEST'].fields_by_name['otp']._serialized_options = b'\272H\006r\004\020\001\030\020' - _globals['_RESENDOTPREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_RESENDOTPREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_RESENDOTPREQUEST'].fields_by_name['phone_number']._loaded_options = None - _globals['_RESENDOTPREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' - _globals['_SKIPMFASETUPREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_SKIPMFASETUPREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_SKIPMFASETUPREQUEST'].fields_by_name['phone_number']._loaded_options = None - _globals['_SKIPMFASETUPREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' - _globals['_LOCKMFAREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_LOCKMFAREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_LOCKMFAREQUEST'].fields_by_name['phone_number']._loaded_options = None - _globals['_LOCKMFAREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' - _globals['_EMAILOTPMFASETUPREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_EMAILOTPMFASETUPREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_EMAILOTPMFASETUPREQUEST'].fields_by_name['phone_number']._loaded_options = None - _globals['_EMAILOTPMFASETUPREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' - _globals['_SMSOTPMFASETUPREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_SMSOTPMFASETUPREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_SMSOTPMFASETUPREQUEST'].fields_by_name['phone_number']._loaded_options = None - _globals['_SMSOTPMFASETUPREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' - _globals['_FORGOTPASSWORDREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_FORGOTPASSWORDREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_FORGOTPASSWORDREQUEST'].fields_by_name['phone_number']._loaded_options = None - _globals['_FORGOTPASSWORDREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' - _globals['_RESETPASSWORDREQUEST'].fields_by_name['phone_number']._loaded_options = None - _globals['_RESETPASSWORDREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' - _globals['_RESETPASSWORDREQUEST'].fields_by_name['password']._loaded_options = None - _globals['_RESETPASSWORDREQUEST'].fields_by_name['password']._serialized_options = b'\272H\007r\005\020\001\030\200\001' - _globals['_RESETPASSWORDREQUEST'].fields_by_name['confirm_password']._loaded_options = None - _globals['_RESETPASSWORDREQUEST'].fields_by_name['confirm_password']._serialized_options = b'\272H\007r\005\020\001\030\200\001' - _globals['_UPDATEPROFILEREQUEST'].fields_by_name['new_password']._loaded_options = None - _globals['_UPDATEPROFILEREQUEST'].fields_by_name['new_password']._serialized_options = b'\272H\005r\003\030\200\001' - _globals['_UPDATEPROFILEREQUEST'].fields_by_name['confirm_new_password']._loaded_options = None - _globals['_UPDATEPROFILEREQUEST'].fields_by_name['confirm_new_password']._serialized_options = b'\272H\005r\003\030\200\001' - _globals['_UPDATEPROFILEREQUEST'].fields_by_name['email']._loaded_options = None - _globals['_UPDATEPROFILEREQUEST'].fields_by_name['email']._serialized_options = b'\272H\005r\003\030\300\002' - _globals['_UPDATEPROFILEREQUEST'].fields_by_name['phone_number']._loaded_options = None - _globals['_UPDATEPROFILEREQUEST'].fields_by_name['phone_number']._serialized_options = b'\272H\004r\002\030 ' - _globals['_REVOKEREQUEST'].fields_by_name['refresh_token']._loaded_options = None - _globals['_REVOKEREQUEST'].fields_by_name['refresh_token']._serialized_options = b'\272H\004r\002\020\001' - _globals['_VALIDATEJWTTOKENREQUEST'].fields_by_name['token_type']._loaded_options = None - _globals['_VALIDATEJWTTOKENREQUEST'].fields_by_name['token_type']._serialized_options = b'\272H\004r\002\020\001' - _globals['_VALIDATEJWTTOKENREQUEST'].fields_by_name['token']._loaded_options = None - _globals['_VALIDATEJWTTOKENREQUEST'].fields_by_name['token']._serialized_options = b'\272H\004r\002\020\001' - _globals['_VALIDATESESSIONREQUEST'].fields_by_name['cookie']._loaded_options = None - _globals['_VALIDATESESSIONREQUEST'].fields_by_name['cookie']._serialized_options = b'\272H\004r\002\020\001' - _globals['_CHECKPERMISSIONSREQUEST'].fields_by_name['checks']._loaded_options = None - _globals['_CHECKPERMISSIONSREQUEST'].fields_by_name['checks']._serialized_options = b'\272H\007\222\001\004\010\001\020d' - _globals['_AUTHORIZERSERVICE'].methods_by_name['Signup']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['Signup']._serialized_options = b'\222\265\030\000\230\265\030\001\240\265\030\001\202\323\344\223\002\017\"\n/v1/signup:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['Login']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['Login']._serialized_options = b'\222\265\030\000\230\265\030\001\240\265\030\001\202\323\344\223\002\016\"\t/v1/login:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['Logout']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['Logout']._serialized_options = b'\230\265\030\001\202\323\344\223\002\014\"\n/v1/logout' - _globals['_AUTHORIZERSERVICE'].methods_by_name['MagicLinkLogin']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['MagicLinkLogin']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\031\"\024/v1/magic_link_login:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['VerifyEmail']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['VerifyEmail']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\025\"\020/v1/verify_email:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['ResendVerifyEmail']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['ResendVerifyEmail']._serialized_options = b'\240\265\030\001\202\323\344\223\002\034\"\027/v1/resend_verify_email:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['VerifyOtp']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['VerifyOtp']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\023\"\016/v1/verify_otp:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['ResendOtp']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['ResendOtp']._serialized_options = b'\240\265\030\001\202\323\344\223\002\023\"\016/v1/resend_otp:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['SkipMfaSetup']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['SkipMfaSetup']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\027\"\022/v1/skip_mfa_setup:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['LockMfa']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['LockMfa']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\021\"\014/v1/lock_mfa:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['EmailOtpMfaSetup']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['EmailOtpMfaSetup']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\034\"\027/v1/email_otp_mfa_setup:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['SmsOtpMfaSetup']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['SmsOtpMfaSetup']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\032\"\025/v1/sms_otp_mfa_setup:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['ForgotPassword']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['ForgotPassword']._serialized_options = b'\240\265\030\001\202\323\344\223\002\030\"\023/v1/forgot_password:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['ResetPassword']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['ResetPassword']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\027\"\022/v1/reset_password:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['Profile']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['Profile']._serialized_options = b'\222\265\030\002\010\001\202\323\344\223\002\r\022\013/v1/profile' - _globals['_AUTHORIZERSERVICE'].methods_by_name['UpdateProfile']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['UpdateProfile']._serialized_options = b'\230\265\030\001\202\323\344\223\002\027\"\022/v1/update_profile:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['DeactivateAccount']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['DeactivateAccount']._serialized_options = b'\222\265\030\002\030\001\230\265\030\001\202\323\344\223\002\033\"\026/v1/deactivate_account:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['Revoke']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['Revoke']._serialized_options = b'\230\265\030\001\240\265\030\001\202\323\344\223\002\017\"\n/v1/revoke:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['Session']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['Session']._serialized_options = b'\202\323\344\223\002\020\"\013/v1/session:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['ValidateJwtToken']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['ValidateJwtToken']._serialized_options = b'\240\265\030\001\202\323\344\223\002\033\"\026/v1/validate_jwt_token:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['ValidateSession']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['ValidateSession']._serialized_options = b'\240\265\030\001\202\323\344\223\002\031\"\024/v1/validate_session:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['Meta']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['Meta']._serialized_options = b'\222\265\030\002\010\001\240\265\030\001\202\323\344\223\002\n\022\010/v1/meta' - _globals['_AUTHORIZERSERVICE'].methods_by_name['CheckPermissions']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['CheckPermissions']._serialized_options = b'\222\265\030\002\010\001\202\323\344\223\002\032\"\025/v1/check_permissions:\001*' - _globals['_AUTHORIZERSERVICE'].methods_by_name['ListPermissions']._loaded_options = None - _globals['_AUTHORIZERSERVICE'].methods_by_name['ListPermissions']._serialized_options = b'\222\265\030\002\010\001\202\323\344\223\002\031\"\024/v1/list_permissions:\001*' - _globals['_SIGNUPREQUEST']._serialized_start=197 - _globals['_SIGNUPREQUEST']._serialized_end=776 - _globals['_LOGINREQUEST']._serialized_start=779 - _globals['_LOGINREQUEST']._serialized_end=975 - _globals['_LOGOUTREQUEST']._serialized_start=977 - _globals['_LOGOUTREQUEST']._serialized_end=992 - _globals['_LOGOUTRESPONSE']._serialized_start=994 - _globals['_LOGOUTRESPONSE']._serialized_end=1036 - _globals['_MAGICLINKLOGINREQUEST']._serialized_start=1039 - _globals['_MAGICLINKLOGINREQUEST']._serialized_end=1195 - _globals['_MAGICLINKLOGINRESPONSE']._serialized_start=1197 - _globals['_MAGICLINKLOGINRESPONSE']._serialized_end=1247 - _globals['_VERIFYEMAILREQUEST']._serialized_start=1249 - _globals['_VERIFYEMAILREQUEST']._serialized_end=1322 - _globals['_RESENDVERIFYEMAILREQUEST']._serialized_start=1324 - _globals['_RESENDVERIFYEMAILREQUEST']._serialized_end=1445 - _globals['_RESENDVERIFYEMAILRESPONSE']._serialized_start=1447 - _globals['_RESENDVERIFYEMAILRESPONSE']._serialized_end=1500 - _globals['_VERIFYOTPREQUEST']._serialized_start=1503 - _globals['_VERIFYOTPREQUEST']._serialized_end=1673 - _globals['_RESENDOTPREQUEST']._serialized_start=1675 - _globals['_RESENDOTPREQUEST']._serialized_end=1791 - _globals['_RESENDOTPRESPONSE']._serialized_start=1793 - _globals['_RESENDOTPRESPONSE']._serialized_end=1838 - _globals['_SKIPMFASETUPREQUEST']._serialized_start=1840 - _globals['_SKIPMFASETUPREQUEST']._serialized_end=1959 - _globals['_LOCKMFAREQUEST']._serialized_start=1961 - _globals['_LOCKMFAREQUEST']._serialized_end=2053 - _globals['_LOCKMFARESPONSE']._serialized_start=2055 - _globals['_LOCKMFARESPONSE']._serialized_end=2098 - _globals['_EMAILOTPMFASETUPREQUEST']._serialized_start=2100 - _globals['_EMAILOTPMFASETUPREQUEST']._serialized_end=2201 - _globals['_EMAILOTPMFASETUPRESPONSE']._serialized_start=2203 - _globals['_EMAILOTPMFASETUPRESPONSE']._serialized_end=2255 - _globals['_SMSOTPMFASETUPREQUEST']._serialized_start=2257 - _globals['_SMSOTPMFASETUPREQUEST']._serialized_end=2356 - _globals['_SMSOTPMFASETUPRESPONSE']._serialized_start=2358 - _globals['_SMSOTPMFASETUPRESPONSE']._serialized_end=2408 - _globals['_FORGOTPASSWORDREQUEST']._serialized_start=2411 - _globals['_FORGOTPASSWORDREQUEST']._serialized_end=2567 - _globals['_FORGOTPASSWORDRESPONSE']._serialized_start=2569 - _globals['_FORGOTPASSWORDRESPONSE']._serialized_end=2685 - _globals['_RESETPASSWORDREQUEST']._serialized_start=2688 - _globals['_RESETPASSWORDREQUEST']._serialized_end=2889 - _globals['_RESETPASSWORDRESPONSE']._serialized_start=2891 - _globals['_RESETPASSWORDRESPONSE']._serialized_end=2940 - _globals['_PROFILEREQUEST']._serialized_start=2942 - _globals['_PROFILEREQUEST']._serialized_end=2958 - _globals['_UPDATEPROFILEREQUEST']._serialized_start=2961 - _globals['_UPDATEPROFILEREQUEST']._serialized_end=3557 - _globals['_UPDATEPROFILERESPONSE']._serialized_start=3559 - _globals['_UPDATEPROFILERESPONSE']._serialized_end=3608 - _globals['_DEACTIVATEACCOUNTREQUEST']._serialized_start=3610 - _globals['_DEACTIVATEACCOUNTREQUEST']._serialized_end=3636 - _globals['_DEACTIVATEACCOUNTRESPONSE']._serialized_start=3638 - _globals['_DEACTIVATEACCOUNTRESPONSE']._serialized_end=3691 - _globals['_REVOKEREQUEST']._serialized_start=3693 - _globals['_REVOKEREQUEST']._serialized_end=3754 - _globals['_REVOKERESPONSE']._serialized_start=3756 - _globals['_REVOKERESPONSE']._serialized_end=3798 - _globals['_SESSIONREQUEST']._serialized_start=3801 - _globals['_SESSIONREQUEST']._serialized_end=3963 - _globals['_VALIDATEJWTTOKENREQUEST']._serialized_start=3966 - _globals['_VALIDATEJWTTOKENREQUEST']._serialized_end=4164 - _globals['_VALIDATEJWTTOKENRESPONSE']._serialized_start=4166 - _globals['_VALIDATEJWTTOKENRESPONSE']._serialized_end=4267 - _globals['_VALIDATESESSIONREQUEST']._serialized_start=4270 - _globals['_VALIDATESESSIONREQUEST']._serialized_end=4429 - _globals['_VALIDATESESSIONRESPONSE']._serialized_start=4431 - _globals['_VALIDATESESSIONRESPONSE']._serialized_end=4524 - _globals['_METAREQUEST']._serialized_start=4526 - _globals['_METAREQUEST']._serialized_end=4539 - _globals['_CHECKPERMISSIONSREQUEST']._serialized_start=4541 - _globals['_CHECKPERMISSIONSREQUEST']._serialized_end=4659 - _globals['_CHECKPERMISSIONSRESPONSE']._serialized_start=4661 - _globals['_CHECKPERMISSIONSRESPONSE']._serialized_end=4751 - _globals['_LISTPERMISSIONSREQUEST']._serialized_start=4753 - _globals['_LISTPERMISSIONSREQUEST']._serialized_end=4858 - _globals['_LISTPERMISSIONSRESPONSE']._serialized_start=4861 - _globals['_LISTPERMISSIONSRESPONSE']._serialized_end=5003 - _globals['_AUTHORIZERSERVICE']._serialized_start=5006 - _globals['_AUTHORIZERSERVICE']._serialized_end=7925 -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/authorizer/v1/authorizer_pb2_grpc.py b/gen/python/authorizer/v1/authorizer_pb2_grpc.py deleted file mode 100644 index c0457cf6..00000000 --- a/gen/python/authorizer/v1/authorizer_pb2_grpc.py +++ /dev/null @@ -1,1132 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - -from authorizer.v1 import authorizer_pb2 as authorizer_dot_v1_dot_authorizer__pb2 -from authorizer.v1 import types_pb2 as authorizer_dot_v1_dot_types__pb2 - - -class AuthorizerServiceStub(object): - """=== Identity creation & authentication === - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.Signup = channel.unary_unary( - '/authorizer.v1.AuthorizerService/Signup', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.SignupRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - _registered_method=True) - self.Login = channel.unary_unary( - '/authorizer.v1.AuthorizerService/Login', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.LoginRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - _registered_method=True) - self.Logout = channel.unary_unary( - '/authorizer.v1.AuthorizerService/Logout', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.LogoutRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.LogoutResponse.FromString, - _registered_method=True) - self.MagicLinkLogin = channel.unary_unary( - '/authorizer.v1.AuthorizerService/MagicLinkLogin', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.MagicLinkLoginRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.MagicLinkLoginResponse.FromString, - _registered_method=True) - self.VerifyEmail = channel.unary_unary( - '/authorizer.v1.AuthorizerService/VerifyEmail', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.VerifyEmailRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - _registered_method=True) - self.ResendVerifyEmail = channel.unary_unary( - '/authorizer.v1.AuthorizerService/ResendVerifyEmail', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.ResendVerifyEmailRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ResendVerifyEmailResponse.FromString, - _registered_method=True) - self.VerifyOtp = channel.unary_unary( - '/authorizer.v1.AuthorizerService/VerifyOtp', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.VerifyOtpRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - _registered_method=True) - self.ResendOtp = channel.unary_unary( - '/authorizer.v1.AuthorizerService/ResendOtp', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.ResendOtpRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ResendOtpResponse.FromString, - _registered_method=True) - self.SkipMfaSetup = channel.unary_unary( - '/authorizer.v1.AuthorizerService/SkipMfaSetup', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.SkipMfaSetupRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - _registered_method=True) - self.LockMfa = channel.unary_unary( - '/authorizer.v1.AuthorizerService/LockMfa', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.LockMfaRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.LockMfaResponse.FromString, - _registered_method=True) - self.EmailOtpMfaSetup = channel.unary_unary( - '/authorizer.v1.AuthorizerService/EmailOtpMfaSetup', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupResponse.FromString, - _registered_method=True) - self.SmsOtpMfaSetup = channel.unary_unary( - '/authorizer.v1.AuthorizerService/SmsOtpMfaSetup', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupResponse.FromString, - _registered_method=True) - self.ForgotPassword = channel.unary_unary( - '/authorizer.v1.AuthorizerService/ForgotPassword', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.ForgotPasswordRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ForgotPasswordResponse.FromString, - _registered_method=True) - self.ResetPassword = channel.unary_unary( - '/authorizer.v1.AuthorizerService/ResetPassword', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.ResetPasswordRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ResetPasswordResponse.FromString, - _registered_method=True) - self.Profile = channel.unary_unary( - '/authorizer.v1.AuthorizerService/Profile', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.ProfileRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_types__pb2.User.FromString, - _registered_method=True) - self.UpdateProfile = channel.unary_unary( - '/authorizer.v1.AuthorizerService/UpdateProfile', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.UpdateProfileRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.UpdateProfileResponse.FromString, - _registered_method=True) - self.DeactivateAccount = channel.unary_unary( - '/authorizer.v1.AuthorizerService/DeactivateAccount', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.DeactivateAccountRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.DeactivateAccountResponse.FromString, - _registered_method=True) - self.Revoke = channel.unary_unary( - '/authorizer.v1.AuthorizerService/Revoke', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.RevokeRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.RevokeResponse.FromString, - _registered_method=True) - self.Session = channel.unary_unary( - '/authorizer.v1.AuthorizerService/Session', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.SessionRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - _registered_method=True) - self.ValidateJwtToken = channel.unary_unary( - '/authorizer.v1.AuthorizerService/ValidateJwtToken', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.ValidateJwtTokenRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ValidateJwtTokenResponse.FromString, - _registered_method=True) - self.ValidateSession = channel.unary_unary( - '/authorizer.v1.AuthorizerService/ValidateSession', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.ValidateSessionRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ValidateSessionResponse.FromString, - _registered_method=True) - self.Meta = channel.unary_unary( - '/authorizer.v1.AuthorizerService/Meta', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.MetaRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_types__pb2.Meta.FromString, - _registered_method=True) - self.CheckPermissions = channel.unary_unary( - '/authorizer.v1.AuthorizerService/CheckPermissions', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.CheckPermissionsRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.CheckPermissionsResponse.FromString, - _registered_method=True) - self.ListPermissions = channel.unary_unary( - '/authorizer.v1.AuthorizerService/ListPermissions', - request_serializer=authorizer_dot_v1_dot_authorizer__pb2.ListPermissionsRequest.SerializeToString, - response_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ListPermissionsResponse.FromString, - _registered_method=True) - - -class AuthorizerServiceServicer(object): - """=== Identity creation & authentication === - """ - - def Signup(self, request, context): - """Signup registers a new user. Public; requires sign-up enabled in config. - Returns AuthResponse with tokens + (browser callers) Set-Cookie headers. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Login(self, request, context): - """Login authenticates with email/phone + password. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Logout(self, request, context): - """Logout ends the caller's current session. POST, not GET: logout mutates - server state (clears the session) and is audit-logged, so it must not be - a "safe" method per RFC 9110 §9.2.1 — GET would also expose it to CSRF. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def MagicLinkLogin(self, request, context): - """MagicLinkLogin dispatches a passwordless email link. The clicked link - hits the existing /verify_email browser handler. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def VerifyEmail(self, request, context): - """=== Email + OTP verification === - - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ResendVerifyEmail(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def VerifyOtp(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ResendOtp(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def SkipMfaSetup(self, request, context): - """SkipMfaSetup completes an in-progress, token-withheld MFA offer by - recording that the caller explicitly declined it, then issues the - access token that was withheld. Identified by the MFA session cookie - (set when the offer screen was returned) plus email/phone_number to - resolve the pending user — same identification pattern as VerifyOtp. - Fails with FAILED_PRECONDITION if MFA is organization-enforced - (enforce-mfa) — enforcement is never skippable. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def LockMfa(self, request, context): - """LockMfa records that the caller lost access to their only MFA - factor(s). Only allowed when the caller has NO verified Email/SMS OTP - fallback enrolled — if one exists, use it instead of locking. Does not - issue a token; the account requires admin recovery afterward. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def EmailOtpMfaSetup(self, request, context): - """EmailOtpMfaSetup sends a one-time code to the caller's own email and - creates an unverified email-OTP MFA enrollment. Dual-mode permissions: - (a) an authenticated caller (bearer token) — the settings-screen action - for an ALREADY-logged-in user adding a second factor; the request body is - unused in this mode. (b) a caller in the withheld first-time-offer - state, with no bearer token yet — identified by the MFA session cookie - plus email/phone_number, same pattern as SkipMfaSetup. Either mode - reuses the same underlying Authenticator row once VerifyOtp marks it - verified. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def SmsOtpMfaSetup(self, request, context): - """SmsOtpMfaSetup sends a one-time code to the caller's own phone number - and creates an unverified SMS-OTP MFA enrollment. Same dual-mode - permissions and relationship to VerifyOtp as EmailOtpMfaSetup. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ForgotPassword(self, request, context): - """=== Password lifecycle === - - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ResetPassword(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Profile(self, request, context): - """=== Profile + account === - - Profile returns the authenticated user. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateProfile(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeactivateAccount(self, request, context): - """DeactivateAccount soft-deletes the caller's account and revokes all - refresh tokens as a side effect. OAuth has no concept of account - deactivation; this is the typed equivalent of SCIM PATCH active=false. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Revoke(self, request, context): - """=== Token + session === - - Revoke invalidates a refresh token. Typed mirror of RFC 7009. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Session(self, request, context): - """Session returns the AuthResponse bound to the caller's session cookie only. - NOT exposed as an MCP tool — SessionResponse carries access_token, - refresh_token, id_token, authenticator_secret, and recovery codes, - none of which should land in an LLM transcript. (Security audit C1.) - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ValidateJwtToken(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ValidateSession(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Meta(self, request, context): - """=== Server discovery + caller authz === - - Meta returns server feature flags. No auth required. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def CheckPermissions(self, request, context): - """CheckPermissions evaluates one or more fine-grained permission checks - ("does the subject have on ?") in a single call and - returns one result per check, in order. The subject defaults to the - authenticated caller; an explicit `user` is honored only for super-admins - or when it equals the caller's own subject. Fail-closed. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ListPermissions(self, request, context): - """ListPermissions enumerates what the subject can access. With both - `relation` and `object_type` set it answers "which s can I - ?"; either or both filters may be omitted to enumerate every - matching (type, relation) pair of the active model. Results are capped; - `truncated` reports when more permissions exist. Subject resolution - follows the same rules as CheckPermissions. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_AuthorizerServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'Signup': grpc.unary_unary_rpc_method_handler( - servicer.Signup, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.SignupRequest.FromString, - response_serializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.SerializeToString, - ), - 'Login': grpc.unary_unary_rpc_method_handler( - servicer.Login, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.LoginRequest.FromString, - response_serializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.SerializeToString, - ), - 'Logout': grpc.unary_unary_rpc_method_handler( - servicer.Logout, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.LogoutRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.LogoutResponse.SerializeToString, - ), - 'MagicLinkLogin': grpc.unary_unary_rpc_method_handler( - servicer.MagicLinkLogin, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.MagicLinkLoginRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.MagicLinkLoginResponse.SerializeToString, - ), - 'VerifyEmail': grpc.unary_unary_rpc_method_handler( - servicer.VerifyEmail, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.VerifyEmailRequest.FromString, - response_serializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.SerializeToString, - ), - 'ResendVerifyEmail': grpc.unary_unary_rpc_method_handler( - servicer.ResendVerifyEmail, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ResendVerifyEmailRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.ResendVerifyEmailResponse.SerializeToString, - ), - 'VerifyOtp': grpc.unary_unary_rpc_method_handler( - servicer.VerifyOtp, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.VerifyOtpRequest.FromString, - response_serializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.SerializeToString, - ), - 'ResendOtp': grpc.unary_unary_rpc_method_handler( - servicer.ResendOtp, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ResendOtpRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.ResendOtpResponse.SerializeToString, - ), - 'SkipMfaSetup': grpc.unary_unary_rpc_method_handler( - servicer.SkipMfaSetup, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.SkipMfaSetupRequest.FromString, - response_serializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.SerializeToString, - ), - 'LockMfa': grpc.unary_unary_rpc_method_handler( - servicer.LockMfa, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.LockMfaRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.LockMfaResponse.SerializeToString, - ), - 'EmailOtpMfaSetup': grpc.unary_unary_rpc_method_handler( - servicer.EmailOtpMfaSetup, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupResponse.SerializeToString, - ), - 'SmsOtpMfaSetup': grpc.unary_unary_rpc_method_handler( - servicer.SmsOtpMfaSetup, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupResponse.SerializeToString, - ), - 'ForgotPassword': grpc.unary_unary_rpc_method_handler( - servicer.ForgotPassword, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ForgotPasswordRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.ForgotPasswordResponse.SerializeToString, - ), - 'ResetPassword': grpc.unary_unary_rpc_method_handler( - servicer.ResetPassword, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ResetPasswordRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.ResetPasswordResponse.SerializeToString, - ), - 'Profile': grpc.unary_unary_rpc_method_handler( - servicer.Profile, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ProfileRequest.FromString, - response_serializer=authorizer_dot_v1_dot_types__pb2.User.SerializeToString, - ), - 'UpdateProfile': grpc.unary_unary_rpc_method_handler( - servicer.UpdateProfile, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.UpdateProfileRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.UpdateProfileResponse.SerializeToString, - ), - 'DeactivateAccount': grpc.unary_unary_rpc_method_handler( - servicer.DeactivateAccount, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.DeactivateAccountRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.DeactivateAccountResponse.SerializeToString, - ), - 'Revoke': grpc.unary_unary_rpc_method_handler( - servicer.Revoke, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.RevokeRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.RevokeResponse.SerializeToString, - ), - 'Session': grpc.unary_unary_rpc_method_handler( - servicer.Session, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.SessionRequest.FromString, - response_serializer=authorizer_dot_v1_dot_types__pb2.AuthResponse.SerializeToString, - ), - 'ValidateJwtToken': grpc.unary_unary_rpc_method_handler( - servicer.ValidateJwtToken, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ValidateJwtTokenRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.ValidateJwtTokenResponse.SerializeToString, - ), - 'ValidateSession': grpc.unary_unary_rpc_method_handler( - servicer.ValidateSession, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ValidateSessionRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.ValidateSessionResponse.SerializeToString, - ), - 'Meta': grpc.unary_unary_rpc_method_handler( - servicer.Meta, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.MetaRequest.FromString, - response_serializer=authorizer_dot_v1_dot_types__pb2.Meta.SerializeToString, - ), - 'CheckPermissions': grpc.unary_unary_rpc_method_handler( - servicer.CheckPermissions, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.CheckPermissionsRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.CheckPermissionsResponse.SerializeToString, - ), - 'ListPermissions': grpc.unary_unary_rpc_method_handler( - servicer.ListPermissions, - request_deserializer=authorizer_dot_v1_dot_authorizer__pb2.ListPermissionsRequest.FromString, - response_serializer=authorizer_dot_v1_dot_authorizer__pb2.ListPermissionsResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'authorizer.v1.AuthorizerService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - server.add_registered_method_handlers('authorizer.v1.AuthorizerService', rpc_method_handlers) - - - # This class is part of an EXPERIMENTAL API. -class AuthorizerService(object): - """=== Identity creation & authentication === - """ - - @staticmethod - def Signup(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/Signup', - authorizer_dot_v1_dot_authorizer__pb2.SignupRequest.SerializeToString, - authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Login(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/Login', - authorizer_dot_v1_dot_authorizer__pb2.LoginRequest.SerializeToString, - authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Logout(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/Logout', - authorizer_dot_v1_dot_authorizer__pb2.LogoutRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.LogoutResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def MagicLinkLogin(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/MagicLinkLogin', - authorizer_dot_v1_dot_authorizer__pb2.MagicLinkLoginRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.MagicLinkLoginResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def VerifyEmail(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/VerifyEmail', - authorizer_dot_v1_dot_authorizer__pb2.VerifyEmailRequest.SerializeToString, - authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ResendVerifyEmail(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/ResendVerifyEmail', - authorizer_dot_v1_dot_authorizer__pb2.ResendVerifyEmailRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.ResendVerifyEmailResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def VerifyOtp(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/VerifyOtp', - authorizer_dot_v1_dot_authorizer__pb2.VerifyOtpRequest.SerializeToString, - authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ResendOtp(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/ResendOtp', - authorizer_dot_v1_dot_authorizer__pb2.ResendOtpRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.ResendOtpResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def SkipMfaSetup(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/SkipMfaSetup', - authorizer_dot_v1_dot_authorizer__pb2.SkipMfaSetupRequest.SerializeToString, - authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def LockMfa(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/LockMfa', - authorizer_dot_v1_dot_authorizer__pb2.LockMfaRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.LockMfaResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def EmailOtpMfaSetup(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/EmailOtpMfaSetup', - authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.EmailOtpMfaSetupResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def SmsOtpMfaSetup(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/SmsOtpMfaSetup', - authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.SmsOtpMfaSetupResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ForgotPassword(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/ForgotPassword', - authorizer_dot_v1_dot_authorizer__pb2.ForgotPasswordRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.ForgotPasswordResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ResetPassword(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/ResetPassword', - authorizer_dot_v1_dot_authorizer__pb2.ResetPasswordRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.ResetPasswordResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Profile(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/Profile', - authorizer_dot_v1_dot_authorizer__pb2.ProfileRequest.SerializeToString, - authorizer_dot_v1_dot_types__pb2.User.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateProfile(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/UpdateProfile', - authorizer_dot_v1_dot_authorizer__pb2.UpdateProfileRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.UpdateProfileResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def DeactivateAccount(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/DeactivateAccount', - authorizer_dot_v1_dot_authorizer__pb2.DeactivateAccountRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.DeactivateAccountResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Revoke(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/Revoke', - authorizer_dot_v1_dot_authorizer__pb2.RevokeRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.RevokeResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Session(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/Session', - authorizer_dot_v1_dot_authorizer__pb2.SessionRequest.SerializeToString, - authorizer_dot_v1_dot_types__pb2.AuthResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ValidateJwtToken(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/ValidateJwtToken', - authorizer_dot_v1_dot_authorizer__pb2.ValidateJwtTokenRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.ValidateJwtTokenResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ValidateSession(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/ValidateSession', - authorizer_dot_v1_dot_authorizer__pb2.ValidateSessionRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.ValidateSessionResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Meta(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/Meta', - authorizer_dot_v1_dot_authorizer__pb2.MetaRequest.SerializeToString, - authorizer_dot_v1_dot_types__pb2.Meta.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def CheckPermissions(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/CheckPermissions', - authorizer_dot_v1_dot_authorizer__pb2.CheckPermissionsRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.CheckPermissionsResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ListPermissions(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/authorizer.v1.AuthorizerService/ListPermissions', - authorizer_dot_v1_dot_authorizer__pb2.ListPermissionsRequest.SerializeToString, - authorizer_dot_v1_dot_authorizer__pb2.ListPermissionsResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) diff --git a/gen/python/authorizer/v1/common_pb2.py b/gen/python/authorizer/v1/common_pb2.py deleted file mode 100644 index 26c2f815..00000000 --- a/gen/python/authorizer/v1/common_pb2.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: authorizer/v1/common.proto -# Protobuf Python Version: 5.27.3 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 27, - 3, - '', - 'authorizer/v1/common.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x61uthorizer/v1/common.proto\x12\rauthorizer.v1\x1a\x1cgoogle/protobuf/struct.proto\"8\n\x07\x41ppData\x12-\n\x05value\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x05valueB\xc7\x01\n\x11\x63om.authorizer.v1B\x0b\x43ommonProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.common_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\013CommonProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' - _globals['_APPDATA']._serialized_start=75 - _globals['_APPDATA']._serialized_end=131 -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/authorizer/v1/common_pb2_grpc.py b/gen/python/authorizer/v1/common_pb2_grpc.py deleted file mode 100644 index 2daafffe..00000000 --- a/gen/python/authorizer/v1/common_pb2_grpc.py +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - diff --git a/gen/python/authorizer/v1/errors_pb2.py b/gen/python/authorizer/v1/errors_pb2.py deleted file mode 100644 index b8f198b7..00000000 --- a/gen/python/authorizer/v1/errors_pb2.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: authorizer/v1/errors.proto -# Protobuf Python Version: 5.27.3 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 27, - 3, - '', - 'authorizer/v1/errors.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x61uthorizer/v1/errors.proto\x12\rauthorizer.v1*\x86\x03\n\x0b\x45rrorReason\x12\x1c\n\x18\x45RROR_REASON_UNSPECIFIED\x10\x00\x12$\n ERROR_REASON_INVALID_CREDENTIALS\x10\x01\x12\"\n\x1e\x45RROR_REASON_PERMISSION_DENIED\x10\x02\x12\x1a\n\x16\x45RROR_REASON_NOT_FOUND\x10\x03\x12\x1f\n\x1b\x45RROR_REASON_ALREADY_EXISTS\x10\x04\x12 \n\x1c\x45RROR_REASON_INVALID_REQUEST\x10\x05\x12&\n\"ERROR_REASON_VERIFICATION_REQUIRED\x10\x06\x12#\n\x1f\x45RROR_REASON_OPERATION_DISABLED\x10\x07\x12\x1d\n\x19\x45RROR_REASON_RATE_LIMITED\x10\x08\x12\x1e\n\x1a\x45RROR_REASON_TOKEN_EXPIRED\x10\t\x12$\n ERROR_REASON_ACCOUNT_DEACTIVATED\x10\nB\xc7\x01\n\x11\x63om.authorizer.v1B\x0b\x45rrorsProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.errors_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\013ErrorsProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' - _globals['_ERRORREASON']._serialized_start=46 - _globals['_ERRORREASON']._serialized_end=436 -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/authorizer/v1/errors_pb2_grpc.py b/gen/python/authorizer/v1/errors_pb2_grpc.py deleted file mode 100644 index 2daafffe..00000000 --- a/gen/python/authorizer/v1/errors_pb2_grpc.py +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - diff --git a/gen/python/authorizer/v1/pagination_pb2.py b/gen/python/authorizer/v1/pagination_pb2.py deleted file mode 100644 index 6a9d9e55..00000000 --- a/gen/python/authorizer/v1/pagination_pb2.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: authorizer/v1/pagination.proto -# Protobuf Python Version: 5.27.3 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 27, - 3, - '', - 'authorizer/v1/pagination.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x61uthorizer/v1/pagination.proto\x12\rauthorizer.v1\x1a\x1b\x62uf/validate/validate.proto\"q\n\x11PaginationRequest\x12\x1b\n\x04page\x18\x01 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x00R\x04page\x12 \n\x05limit\x18\x02 \x01(\x03\x42\n\xbaH\x07\"\x05\x18\xe8\x07(\x00R\x05limit\x12\x1d\n\npage_token\x18\x03 \x01(\tR\tpageToken\"\x8c\x01\n\nPagination\x12\x14\n\x05limit\x18\x01 \x01(\x03R\x05limit\x12\x12\n\x04page\x18\x02 \x01(\x03R\x04page\x12\x16\n\x06offset\x18\x03 \x01(\x03R\x06offset\x12\x14\n\x05total\x18\x04 \x01(\x03R\x05total\x12&\n\x0fnext_page_token\x18\x05 \x01(\tR\rnextPageTokenB\xcb\x01\n\x11\x63om.authorizer.v1B\x0fPaginationProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.pagination_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\017PaginationProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' - _globals['_PAGINATIONREQUEST'].fields_by_name['page']._loaded_options = None - _globals['_PAGINATIONREQUEST'].fields_by_name['page']._serialized_options = b'\272H\004\"\002(\000' - _globals['_PAGINATIONREQUEST'].fields_by_name['limit']._loaded_options = None - _globals['_PAGINATIONREQUEST'].fields_by_name['limit']._serialized_options = b'\272H\007\"\005\030\350\007(\000' - _globals['_PAGINATIONREQUEST']._serialized_start=78 - _globals['_PAGINATIONREQUEST']._serialized_end=191 - _globals['_PAGINATION']._serialized_start=194 - _globals['_PAGINATION']._serialized_end=334 -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/authorizer/v1/pagination_pb2_grpc.py b/gen/python/authorizer/v1/pagination_pb2_grpc.py deleted file mode 100644 index 2daafffe..00000000 --- a/gen/python/authorizer/v1/pagination_pb2_grpc.py +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - diff --git a/gen/python/authorizer/v1/types_pb2.py b/gen/python/authorizer/v1/types_pb2.py deleted file mode 100644 index cb7c62b3..00000000 --- a/gen/python/authorizer/v1/types_pb2.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: authorizer/v1/types.proto -# Protobuf Python Version: 5.27.3 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 27, - 3, - '', - 'authorizer/v1/types.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from authorizer.v1 import common_pb2 as authorizer_dot_v1_dot_common__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x61uthorizer/v1/types.proto\x12\rauthorizer.v1\x1a\x1a\x61uthorizer/v1/common.proto\"\x9d\x06\n\x04User\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\x12%\n\x0e\x65mail_verified\x18\x03 \x01(\x08R\remailVerified\x12%\n\x0esignup_methods\x18\x04 \x01(\tR\rsignupMethods\x12\x1d\n\ngiven_name\x18\x05 \x01(\tR\tgivenName\x12\x1f\n\x0b\x66\x61mily_name\x18\x06 \x01(\tR\nfamilyName\x12\x1f\n\x0bmiddle_name\x18\x07 \x01(\tR\nmiddleName\x12\x1a\n\x08nickname\x18\x08 \x01(\tR\x08nickname\x12-\n\x12preferred_username\x18\t \x01(\tR\x11preferredUsername\x12\x16\n\x06gender\x18\n \x01(\tR\x06gender\x12\x1c\n\tbirthdate\x18\x0b \x01(\tR\tbirthdate\x12!\n\x0cphone_number\x18\x0c \x01(\tR\x0bphoneNumber\x12\x32\n\x15phone_number_verified\x18\r \x01(\x08R\x13phoneNumberVerified\x12\x18\n\x07picture\x18\x0e \x01(\tR\x07picture\x12\x14\n\x05roles\x18\x0f \x03(\tR\x05roles\x12\x1d\n\ncreated_at\x18\x10 \x01(\x03R\tcreatedAt\x12\x1d\n\nupdated_at\x18\x11 \x01(\x03R\tupdatedAt\x12+\n\x11revoked_timestamp\x18\x12 \x01(\x03R\x10revokedTimestamp\x12>\n\x1cis_multi_factor_auth_enabled\x18\x13 \x01(\x08R\x18isMultiFactorAuthEnabled\x12\x31\n\x08\x61pp_data\x18\x14 \x01(\x0b\x32\x16.authorizer.v1.AppDataR\x07\x61ppData\x12\x36\n\x18has_skipped_mfa_setup_at\x18\x15 \x01(\x03R\x14hasSkippedMfaSetupAt\x12\"\n\rmfa_locked_at\x18\x16 \x01(\x03R\x0bmfaLockedAt\"\xd9\x06\n\x0c\x41uthResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12>\n\x1cshould_show_email_otp_screen\x18\x02 \x01(\x08R\x18shouldShowEmailOtpScreen\x12@\n\x1dshould_show_mobile_otp_screen\x18\x03 \x01(\x08R\x19shouldShowMobileOtpScreen\x12\x35\n\x17should_show_totp_screen\x18\x04 \x01(\x08R\x14shouldShowTotpScreen\x12!\n\x0c\x61\x63\x63\x65ss_token\x18\x05 \x01(\tR\x0b\x61\x63\x63\x65ssToken\x12\x19\n\x08id_token\x18\x06 \x01(\tR\x07idToken\x12#\n\rrefresh_token\x18\x07 \x01(\tR\x0crefreshToken\x12\x1d\n\nexpires_in\x18\x08 \x01(\x03R\texpiresIn\x12\'\n\x04user\x18\t \x01(\x0b\x32\x13.authorizer.v1.UserR\x04user\x12>\n\x1b\x61uthenticator_scanner_image\x18\n \x01(\tR\x19\x61uthenticatorScannerImage\x12\x31\n\x14\x61uthenticator_secret\x18\x0b \x01(\tR\x13\x61uthenticatorSecret\x12@\n\x1c\x61uthenticator_recovery_codes\x18\x0c \x03(\tR\x1a\x61uthenticatorRecoveryCodes\x12\x46\n should_offer_webauthn_mfa_verify\x18\r \x01(\x08R\x1cshouldOfferWebauthnMfaVerify\x12\x44\n\x1fshould_offer_webauthn_mfa_setup\x18\x0e \x01(\x08R\x1bshouldOfferWebauthnMfaSetup\x12\x45\n should_offer_email_otp_mfa_setup\x18\x0f \x01(\x08R\x1bshouldOfferEmailOtpMfaSetup\x12\x41\n\x1eshould_offer_sms_otp_mfa_setup\x18\x10 \x01(\x08R\x19shouldOfferSmsOtpMfaSetup\"@\n\nPermission\x12\x16\n\x06object\x18\x01 \x01(\tR\x06object\x12\x1a\n\x08relation\x18\x02 \x01(\tR\x08relation\"F\n\x10\x46gaRelationInput\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x02 \x01(\tR\x06object\"W\n\rFgaTupleInput\x12\x12\n\x04user\x18\x01 \x01(\tR\x04user\x12\x1a\n\x08relation\x18\x02 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x03 \x01(\tR\x06object\"\x95\x01\n\x14PermissionCheckInput\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x02 \x01(\tR\x06object\x12I\n\x11\x63ontextual_tuples\x18\x03 \x03(\x0b\x32\x1c.authorizer.v1.FgaTupleInputR\x10\x63ontextualTuples\"e\n\x15PermissionCheckResult\x12\x1a\n\x08relation\x18\x01 \x01(\tR\x08relation\x12\x16\n\x06object\x18\x02 \x01(\tR\x06object\x12\x18\n\x07\x61llowed\x18\x03 \x01(\x08R\x07\x61llowed\"\xa8\x0b\n\x04Meta\x12\x18\n\x07version\x18\x01 \x01(\tR\x07version\x12\x1b\n\tclient_id\x18\x02 \x01(\tR\x08\x63lientId\x12\x35\n\x17is_google_login_enabled\x18\x03 \x01(\x08R\x14isGoogleLoginEnabled\x12\x39\n\x19is_facebook_login_enabled\x18\x04 \x01(\x08R\x16isFacebookLoginEnabled\x12\x35\n\x17is_github_login_enabled\x18\x05 \x01(\x08R\x14isGithubLoginEnabled\x12\x39\n\x19is_linkedin_login_enabled\x18\x06 \x01(\x08R\x16isLinkedinLoginEnabled\x12\x33\n\x16is_apple_login_enabled\x18\x07 \x01(\x08R\x13isAppleLoginEnabled\x12\x37\n\x18is_discord_login_enabled\x18\x08 \x01(\x08R\x15isDiscordLoginEnabled\x12\x37\n\x18is_twitter_login_enabled\x18\t \x01(\x08R\x15isTwitterLoginEnabled\x12;\n\x1ais_microsoft_login_enabled\x18\n \x01(\x08R\x17isMicrosoftLoginEnabled\x12\x35\n\x17is_twitch_login_enabled\x18\x0b \x01(\x08R\x14isTwitchLoginEnabled\x12\x35\n\x17is_roblox_login_enabled\x18\x0c \x01(\x08R\x14isRobloxLoginEnabled\x12\x41\n\x1dis_email_verification_enabled\x18\r \x01(\x08R\x1aisEmailVerificationEnabled\x12\x45\n\x1fis_basic_authentication_enabled\x18\x0e \x01(\x08R\x1cisBasicAuthenticationEnabled\x12<\n\x1bis_magic_link_login_enabled\x18\x0f \x01(\x08R\x17isMagicLinkLoginEnabled\x12+\n\x12is_sign_up_enabled\x18\x10 \x01(\x08R\x0fisSignUpEnabled\x12;\n\x1ais_strong_password_enabled\x18\x11 \x01(\x08R\x17isStrongPasswordEnabled\x12>\n\x1cis_multi_factor_auth_enabled\x18\x12 \x01(\x08R\x18isMultiFactorAuthEnabled\x12R\n&is_mobile_basic_authentication_enabled\x18\x13 \x01(\x08R\"isMobileBasicAuthenticationEnabled\x12\x41\n\x1dis_phone_verification_enabled\x18\x14 \x01(\x08R\x1aisPhoneVerificationEnabled\x12\x37\n\x18is_org_discovery_enabled\x18\x15 \x01(\x08R\x15isOrgDiscoveryEnabled\x12-\n\x13is_totp_mfa_enabled\x18\x16 \x01(\x08R\x10isTotpMfaEnabled\x12\x36\n\x18is_email_otp_mfa_enabled\x18\x17 \x01(\x08R\x14isEmailOtpMfaEnabled\x12\x32\n\x16is_sms_otp_mfa_enabled\x18\x18 \x01(\x08R\x12isSmsOtpMfaEnabled\x12.\n\x13is_webauthn_enabled\x18\x19 \x01(\x08R\x11isWebauthnEnabled\x12&\n\x0fis_mfa_enforced\x18\x1a \x01(\x08R\risMfaEnforcedB\xc6\x01\n\x11\x63om.authorizer.v1B\nTypesProtoP\x01ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\xa2\x02\x03\x41XX\xaa\x02\rAuthorizer.V1\xca\x02\rAuthorizer\\V1\xe2\x02\x19\x41uthorizer\\V1\\GPBMetadata\xea\x02\x0e\x41uthorizer::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'authorizer.v1.types_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\021com.authorizer.v1B\nTypesProtoP\001ZPgithub.com/authorizerdev/authorizer-go/internal/genpb/authorizer/v1;authorizerv1\242\002\003AXX\252\002\rAuthorizer.V1\312\002\rAuthorizer\\V1\342\002\031Authorizer\\V1\\GPBMetadata\352\002\016Authorizer::V1' - _globals['_USER']._serialized_start=73 - _globals['_USER']._serialized_end=870 - _globals['_AUTHRESPONSE']._serialized_start=873 - _globals['_AUTHRESPONSE']._serialized_end=1730 - _globals['_PERMISSION']._serialized_start=1732 - _globals['_PERMISSION']._serialized_end=1796 - _globals['_FGARELATIONINPUT']._serialized_start=1798 - _globals['_FGARELATIONINPUT']._serialized_end=1868 - _globals['_FGATUPLEINPUT']._serialized_start=1870 - _globals['_FGATUPLEINPUT']._serialized_end=1957 - _globals['_PERMISSIONCHECKINPUT']._serialized_start=1960 - _globals['_PERMISSIONCHECKINPUT']._serialized_end=2109 - _globals['_PERMISSIONCHECKRESULT']._serialized_start=2111 - _globals['_PERMISSIONCHECKRESULT']._serialized_end=2212 - _globals['_META']._serialized_start=2215 - _globals['_META']._serialized_end=3663 -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/authorizer/v1/types_pb2_grpc.py b/gen/python/authorizer/v1/types_pb2_grpc.py deleted file mode 100644 index 2daafffe..00000000 --- a/gen/python/authorizer/v1/types_pb2_grpc.py +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - diff --git a/gen/python/buf/validate/__pycache__/validate_pb2.cpython-314.pyc b/gen/python/buf/validate/__pycache__/validate_pb2.cpython-314.pyc deleted file mode 100644 index 044de09a..00000000 Binary files a/gen/python/buf/validate/__pycache__/validate_pb2.cpython-314.pyc and /dev/null differ diff --git a/gen/python/buf/validate/validate_pb2.py b/gen/python/buf/validate/validate_pb2.py deleted file mode 100644 index 9c4e0439..00000000 --- a/gen/python/buf/validate/validate_pb2.py +++ /dev/null @@ -1,469 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: buf/validate/validate.proto -# Protobuf Python Version: 5.27.3 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 27, - 3, - '', - 'buf/validate/validate.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 -from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x62uf/validate/validate.proto\x12\x0c\x62uf.validate\x1a google/protobuf/descriptor.proto\x1a\x1egoogle/protobuf/duration.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"P\n\x04Rule\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpression\"\xa1\x01\n\x0cMessageRules\x12%\n\x0e\x63\x65l_expression\x18\x05 \x03(\tR\rcelExpression\x12$\n\x03\x63\x65l\x18\x03 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65l\x12\x34\n\x05oneof\x18\x04 \x03(\x0b\x32\x1e.buf.validate.MessageOneofRuleR\x05oneofJ\x04\x08\x01\x10\x02R\x08\x64isabled\"F\n\x10MessageOneofRule\x12\x16\n\x06\x66ields\x18\x01 \x03(\tR\x06\x66ields\x12\x1a\n\x08required\x18\x02 \x01(\x08R\x08required\"(\n\nOneofRules\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\"\xe3\n\n\nFieldRules\x12%\n\x0e\x63\x65l_expression\x18\x1d \x03(\tR\rcelExpression\x12$\n\x03\x63\x65l\x18\x17 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65l\x12\x1a\n\x08required\x18\x19 \x01(\x08R\x08required\x12,\n\x06ignore\x18\x1b \x01(\x0e\x32\x14.buf.validate.IgnoreR\x06ignore\x12\x30\n\x05\x66loat\x18\x01 \x01(\x0b\x32\x18.buf.validate.FloatRulesH\x00R\x05\x66loat\x12\x33\n\x06\x64ouble\x18\x02 \x01(\x0b\x32\x19.buf.validate.DoubleRulesH\x00R\x06\x64ouble\x12\x30\n\x05int32\x18\x03 \x01(\x0b\x32\x18.buf.validate.Int32RulesH\x00R\x05int32\x12\x30\n\x05int64\x18\x04 \x01(\x0b\x32\x18.buf.validate.Int64RulesH\x00R\x05int64\x12\x33\n\x06uint32\x18\x05 \x01(\x0b\x32\x19.buf.validate.UInt32RulesH\x00R\x06uint32\x12\x33\n\x06uint64\x18\x06 \x01(\x0b\x32\x19.buf.validate.UInt64RulesH\x00R\x06uint64\x12\x33\n\x06sint32\x18\x07 \x01(\x0b\x32\x19.buf.validate.SInt32RulesH\x00R\x06sint32\x12\x33\n\x06sint64\x18\x08 \x01(\x0b\x32\x19.buf.validate.SInt64RulesH\x00R\x06sint64\x12\x36\n\x07\x66ixed32\x18\t \x01(\x0b\x32\x1a.buf.validate.Fixed32RulesH\x00R\x07\x66ixed32\x12\x36\n\x07\x66ixed64\x18\n \x01(\x0b\x32\x1a.buf.validate.Fixed64RulesH\x00R\x07\x66ixed64\x12\x39\n\x08sfixed32\x18\x0b \x01(\x0b\x32\x1b.buf.validate.SFixed32RulesH\x00R\x08sfixed32\x12\x39\n\x08sfixed64\x18\x0c \x01(\x0b\x32\x1b.buf.validate.SFixed64RulesH\x00R\x08sfixed64\x12-\n\x04\x62ool\x18\r \x01(\x0b\x32\x17.buf.validate.BoolRulesH\x00R\x04\x62ool\x12\x33\n\x06string\x18\x0e \x01(\x0b\x32\x19.buf.validate.StringRulesH\x00R\x06string\x12\x30\n\x05\x62ytes\x18\x0f \x01(\x0b\x32\x18.buf.validate.BytesRulesH\x00R\x05\x62ytes\x12-\n\x04\x65num\x18\x10 \x01(\x0b\x32\x17.buf.validate.EnumRulesH\x00R\x04\x65num\x12\x39\n\x08repeated\x18\x12 \x01(\x0b\x32\x1b.buf.validate.RepeatedRulesH\x00R\x08repeated\x12*\n\x03map\x18\x13 \x01(\x0b\x32\x16.buf.validate.MapRulesH\x00R\x03map\x12*\n\x03\x61ny\x18\x14 \x01(\x0b\x32\x16.buf.validate.AnyRulesH\x00R\x03\x61ny\x12\x39\n\x08\x64uration\x18\x15 \x01(\x0b\x32\x1b.buf.validate.DurationRulesH\x00R\x08\x64uration\x12=\n\nfield_mask\x18\x1c \x01(\x0b\x32\x1c.buf.validate.FieldMaskRulesH\x00R\tfieldMask\x12<\n\ttimestamp\x18\x16 \x01(\x0b\x32\x1c.buf.validate.TimestampRulesH\x00R\ttimestampB\x06\n\x04typeJ\x04\x08\x18\x10\x19J\x04\x08\x1a\x10\x1bR\x07skippedR\x0cignore_empty\"Z\n\x0fPredefinedRules\x12$\n\x03\x63\x65l\x18\x01 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65lJ\x04\x08\x18\x10\x19J\x04\x08\x1a\x10\x1bR\x07skippedR\x0cignore_empty\"\xae\x17\n\nFloatRules\x12\x84\x01\n\x05\x63onst\x18\x01 \x01(\x02\x42n\xc2Hk\ni\n\x0b\x66loat.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x9d\x01\n\x02lt\x18\x02 \x01(\x02\x42\x8a\x01\xc2H\x86\x01\n\x83\x01\n\x08\x66loat.lt\x1aw!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xae\x01\n\x03lte\x18\x03 \x01(\x02\x42\x99\x01\xc2H\x95\x01\n\x92\x01\n\tfloat.lte\x1a\x84\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xd4\x07\n\x02gt\x18\x04 \x01(\x02\x42\xc1\x07\xc2H\xbd\x07\n\x86\x01\n\x08\x66loat.gt\x1az!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xbd\x01\n\x0b\x66loat.gt_lt\x1a\xad\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc7\x01\n\x15\x66loat.gt_lt_exclusive\x1a\xad\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xcd\x01\n\x0c\x66loat.gt_lte\x1a\xbc\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xd7\x01\n\x16\x66loat.gt_lte_exclusive\x1a\xbc\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xa1\x08\n\x03gte\x18\x05 \x01(\x02\x42\x8c\x08\xc2H\x88\x08\n\x95\x01\n\tfloat.gte\x1a\x87\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xcc\x01\n\x0c\x66loat.gte_lt\x1a\xbb\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd6\x01\n\x16\x66loat.gte_lt_exclusive\x1a\xbb\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdc\x01\n\rfloat.gte_lte\x1a\xca\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xe6\x01\n\x17\x66loat.gte_lte_exclusive\x1a\xca\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12}\n\x02in\x18\x06 \x03(\x02\x42m\xc2Hj\nh\n\x08\x66loat.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12w\n\x06not_in\x18\x07 \x03(\x02\x42`\xc2H]\n[\n\x0c\x66loat.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12w\n\x06\x66inite\x18\x08 \x01(\x08\x42_\xc2H\\\nZ\n\x0c\x66loat.finite\x1aJrules.finite ? (this.isNan() || this.isInf() ? \'must be finite\' : \'\') : \'\'R\x06\x66inite\x12\x34\n\x07\x65xample\x18\t \x03(\x02\x42\x1a\xc2H\x17\n\x15\n\rfloat.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xc0\x17\n\x0b\x44oubleRules\x12\x85\x01\n\x05\x63onst\x18\x01 \x01(\x01\x42o\xc2Hl\nj\n\x0c\x64ouble.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x9e\x01\n\x02lt\x18\x02 \x01(\x01\x42\x8b\x01\xc2H\x87\x01\n\x84\x01\n\tdouble.lt\x1aw!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xaf\x01\n\x03lte\x18\x03 \x01(\x01\x42\x9a\x01\xc2H\x96\x01\n\x93\x01\n\ndouble.lte\x1a\x84\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xd9\x07\n\x02gt\x18\x04 \x01(\x01\x42\xc6\x07\xc2H\xc2\x07\n\x87\x01\n\tdouble.gt\x1az!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xbe\x01\n\x0c\x64ouble.gt_lt\x1a\xad\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc8\x01\n\x16\x64ouble.gt_lt_exclusive\x1a\xad\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xce\x01\n\rdouble.gt_lte\x1a\xbc\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xd8\x01\n\x17\x64ouble.gt_lte_exclusive\x1a\xbc\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xa6\x08\n\x03gte\x18\x05 \x01(\x01\x42\x91\x08\xc2H\x8d\x08\n\x96\x01\n\ndouble.gte\x1a\x87\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xcd\x01\n\rdouble.gte_lt\x1a\xbb\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd7\x01\n\x17\x64ouble.gte_lt_exclusive\x1a\xbb\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdd\x01\n\x0e\x64ouble.gte_lte\x1a\xca\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xe7\x01\n\x18\x64ouble.gte_lte_exclusive\x1a\xca\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12~\n\x02in\x18\x06 \x03(\x01\x42n\xc2Hk\ni\n\tdouble.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12x\n\x06not_in\x18\x07 \x03(\x01\x42\x61\xc2H^\n\\\n\rdouble.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12x\n\x06\x66inite\x18\x08 \x01(\x08\x42`\xc2H]\n[\n\rdouble.finite\x1aJrules.finite ? (this.isNan() || this.isInf() ? \'must be finite\' : \'\') : \'\'R\x06\x66inite\x12\x35\n\x07\x65xample\x18\t \x03(\x01\x42\x1b\xc2H\x18\n\x16\n\x0e\x64ouble.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xde\x14\n\nInt32Rules\x12\x84\x01\n\x05\x63onst\x18\x01 \x01(\x05\x42n\xc2Hk\ni\n\x0bint32.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x88\x01\n\x02lt\x18\x02 \x01(\x05\x42v\xc2Hs\nq\n\x08int32.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\x9a\x01\n\x03lte\x18\x03 \x01(\x05\x42\x85\x01\xc2H\x81\x01\n\x7f\n\tint32.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xfd\x06\n\x02gt\x18\x04 \x01(\x05\x42\xea\x06\xc2H\xe6\x06\nt\n\x08int32.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xad\x01\n\x0bint32.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb5\x01\n\x15int32.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x0cint32.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc5\x01\n\x16int32.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xca\x07\n\x03gte\x18\x05 \x01(\x05\x42\xb5\x07\xc2H\xb1\x07\n\x82\x01\n\tint32.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xbc\x01\n\x0cint32.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc4\x01\n\x16int32.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\rint32.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd4\x01\n\x17int32.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12}\n\x02in\x18\x06 \x03(\x05\x42m\xc2Hj\nh\n\x08int32.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12w\n\x06not_in\x18\x07 \x03(\x05\x42`\xc2H]\n[\n\x0cint32.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x34\n\x07\x65xample\x18\x08 \x03(\x05\x42\x1a\xc2H\x17\n\x15\n\rint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xde\x14\n\nInt64Rules\x12\x84\x01\n\x05\x63onst\x18\x01 \x01(\x03\x42n\xc2Hk\ni\n\x0bint64.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x88\x01\n\x02lt\x18\x02 \x01(\x03\x42v\xc2Hs\nq\n\x08int64.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\x9a\x01\n\x03lte\x18\x03 \x01(\x03\x42\x85\x01\xc2H\x81\x01\n\x7f\n\tint64.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xfd\x06\n\x02gt\x18\x04 \x01(\x03\x42\xea\x06\xc2H\xe6\x06\nt\n\x08int64.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xad\x01\n\x0bint64.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb5\x01\n\x15int64.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x0cint64.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc5\x01\n\x16int64.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xca\x07\n\x03gte\x18\x05 \x01(\x03\x42\xb5\x07\xc2H\xb1\x07\n\x82\x01\n\tint64.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xbc\x01\n\x0cint64.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc4\x01\n\x16int64.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\rint64.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd4\x01\n\x17int64.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12}\n\x02in\x18\x06 \x03(\x03\x42m\xc2Hj\nh\n\x08int64.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12w\n\x06not_in\x18\x07 \x03(\x03\x42`\xc2H]\n[\n\x0cint64.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x34\n\x07\x65xample\x18\t \x03(\x03\x42\x1a\xc2H\x17\n\x15\n\rint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xf0\x14\n\x0bUInt32Rules\x12\x85\x01\n\x05\x63onst\x18\x01 \x01(\rBo\xc2Hl\nj\n\x0cuint32.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x89\x01\n\x02lt\x18\x02 \x01(\rBw\xc2Ht\nr\n\tuint32.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\x9c\x01\n\x03lte\x18\x03 \x01(\rB\x87\x01\xc2H\x83\x01\n\x80\x01\n\nuint32.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x82\x07\n\x02gt\x18\x04 \x01(\rB\xef\x06\xc2H\xeb\x06\nu\n\tuint32.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xae\x01\n\x0cuint32.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb6\x01\n\x16uint32.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\ruint32.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc6\x01\n\x17uint32.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xcf\x07\n\x03gte\x18\x05 \x01(\rB\xba\x07\xc2H\xb6\x07\n\x83\x01\n\nuint32.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xbd\x01\n\ruint32.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc5\x01\n\x17uint32.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x0euint32.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd5\x01\n\x18uint32.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12~\n\x02in\x18\x06 \x03(\rBn\xc2Hk\ni\n\tuint32.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12x\n\x06not_in\x18\x07 \x03(\rBa\xc2H^\n\\\n\ruint32.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\rB\x1b\xc2H\x18\n\x16\n\x0euint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xf0\x14\n\x0bUInt64Rules\x12\x85\x01\n\x05\x63onst\x18\x01 \x01(\x04\x42o\xc2Hl\nj\n\x0cuint64.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x89\x01\n\x02lt\x18\x02 \x01(\x04\x42w\xc2Ht\nr\n\tuint64.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\x9c\x01\n\x03lte\x18\x03 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\nuint64.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x82\x07\n\x02gt\x18\x04 \x01(\x04\x42\xef\x06\xc2H\xeb\x06\nu\n\tuint64.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xae\x01\n\x0cuint64.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb6\x01\n\x16uint64.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\ruint64.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc6\x01\n\x17uint64.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xcf\x07\n\x03gte\x18\x05 \x01(\x04\x42\xba\x07\xc2H\xb6\x07\n\x83\x01\n\nuint64.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xbd\x01\n\ruint64.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc5\x01\n\x17uint64.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x0euint64.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd5\x01\n\x18uint64.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12~\n\x02in\x18\x06 \x03(\x04\x42n\xc2Hk\ni\n\tuint64.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12x\n\x06not_in\x18\x07 \x03(\x04\x42\x61\xc2H^\n\\\n\ruint64.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x04\x42\x1b\xc2H\x18\n\x16\n\x0euint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xf0\x14\n\x0bSInt32Rules\x12\x85\x01\n\x05\x63onst\x18\x01 \x01(\x11\x42o\xc2Hl\nj\n\x0csint32.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x89\x01\n\x02lt\x18\x02 \x01(\x11\x42w\xc2Ht\nr\n\tsint32.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\x9c\x01\n\x03lte\x18\x03 \x01(\x11\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\nsint32.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x82\x07\n\x02gt\x18\x04 \x01(\x11\x42\xef\x06\xc2H\xeb\x06\nu\n\tsint32.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xae\x01\n\x0csint32.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb6\x01\n\x16sint32.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\rsint32.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc6\x01\n\x17sint32.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xcf\x07\n\x03gte\x18\x05 \x01(\x11\x42\xba\x07\xc2H\xb6\x07\n\x83\x01\n\nsint32.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xbd\x01\n\rsint32.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc5\x01\n\x17sint32.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x0esint32.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd5\x01\n\x18sint32.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12~\n\x02in\x18\x06 \x03(\x11\x42n\xc2Hk\ni\n\tsint32.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12x\n\x06not_in\x18\x07 \x03(\x11\x42\x61\xc2H^\n\\\n\rsint32.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x11\x42\x1b\xc2H\x18\n\x16\n\x0esint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xf0\x14\n\x0bSInt64Rules\x12\x85\x01\n\x05\x63onst\x18\x01 \x01(\x12\x42o\xc2Hl\nj\n\x0csint64.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x89\x01\n\x02lt\x18\x02 \x01(\x12\x42w\xc2Ht\nr\n\tsint64.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\x9c\x01\n\x03lte\x18\x03 \x01(\x12\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\nsint64.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x82\x07\n\x02gt\x18\x04 \x01(\x12\x42\xef\x06\xc2H\xeb\x06\nu\n\tsint64.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xae\x01\n\x0csint64.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb6\x01\n\x16sint64.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\rsint64.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc6\x01\n\x17sint64.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xcf\x07\n\x03gte\x18\x05 \x01(\x12\x42\xba\x07\xc2H\xb6\x07\n\x83\x01\n\nsint64.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xbd\x01\n\rsint64.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc5\x01\n\x17sint64.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x0esint64.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd5\x01\n\x18sint64.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12~\n\x02in\x18\x06 \x03(\x12\x42n\xc2Hk\ni\n\tsint64.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12x\n\x06not_in\x18\x07 \x03(\x12\x42\x61\xc2H^\n\\\n\rsint64.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x12\x42\x1b\xc2H\x18\n\x16\n\x0esint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\x81\x15\n\x0c\x46ixed32Rules\x12\x86\x01\n\x05\x63onst\x18\x01 \x01(\x07\x42p\xc2Hm\nk\n\rfixed32.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8a\x01\n\x02lt\x18\x02 \x01(\x07\x42x\xc2Hu\ns\n\nfixed32.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\x9d\x01\n\x03lte\x18\x03 \x01(\x07\x42\x88\x01\xc2H\x84\x01\n\x81\x01\n\x0b\x66ixed32.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x87\x07\n\x02gt\x18\x04 \x01(\x07\x42\xf4\x06\xc2H\xf0\x06\nv\n\nfixed32.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xaf\x01\n\rfixed32.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb7\x01\n\x17\x66ixed32.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbf\x01\n\x0e\x66ixed32.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc7\x01\n\x18\x66ixed32.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xd4\x07\n\x03gte\x18\x05 \x01(\x07\x42\xbf\x07\xc2H\xbb\x07\n\x84\x01\n\x0b\x66ixed32.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xbe\x01\n\x0e\x66ixed32.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc6\x01\n\x18\x66ixed32.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xce\x01\n\x0f\x66ixed32.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd6\x01\n\x19\x66ixed32.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x7f\n\x02in\x18\x06 \x03(\x07\x42o\xc2Hl\nj\n\nfixed32.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12y\n\x06not_in\x18\x07 \x03(\x07\x42\x62\xc2H_\n]\n\x0e\x66ixed32.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x36\n\x07\x65xample\x18\x08 \x03(\x07\x42\x1c\xc2H\x19\n\x17\n\x0f\x66ixed32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\x81\x15\n\x0c\x46ixed64Rules\x12\x86\x01\n\x05\x63onst\x18\x01 \x01(\x06\x42p\xc2Hm\nk\n\rfixed64.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8a\x01\n\x02lt\x18\x02 \x01(\x06\x42x\xc2Hu\ns\n\nfixed64.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\x9d\x01\n\x03lte\x18\x03 \x01(\x06\x42\x88\x01\xc2H\x84\x01\n\x81\x01\n\x0b\x66ixed64.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x87\x07\n\x02gt\x18\x04 \x01(\x06\x42\xf4\x06\xc2H\xf0\x06\nv\n\nfixed64.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xaf\x01\n\rfixed64.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb7\x01\n\x17\x66ixed64.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbf\x01\n\x0e\x66ixed64.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc7\x01\n\x18\x66ixed64.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xd4\x07\n\x03gte\x18\x05 \x01(\x06\x42\xbf\x07\xc2H\xbb\x07\n\x84\x01\n\x0b\x66ixed64.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xbe\x01\n\x0e\x66ixed64.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc6\x01\n\x18\x66ixed64.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xce\x01\n\x0f\x66ixed64.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd6\x01\n\x19\x66ixed64.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x7f\n\x02in\x18\x06 \x03(\x06\x42o\xc2Hl\nj\n\nfixed64.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12y\n\x06not_in\x18\x07 \x03(\x06\x42\x62\xc2H_\n]\n\x0e\x66ixed64.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x36\n\x07\x65xample\x18\x08 \x03(\x06\x42\x1c\xc2H\x19\n\x17\n\x0f\x66ixed64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\x93\x15\n\rSFixed32Rules\x12\x87\x01\n\x05\x63onst\x18\x01 \x01(\x0f\x42q\xc2Hn\nl\n\x0esfixed32.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8b\x01\n\x02lt\x18\x02 \x01(\x0f\x42y\xc2Hv\nt\n\x0bsfixed32.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\x9e\x01\n\x03lte\x18\x03 \x01(\x0f\x42\x89\x01\xc2H\x85\x01\n\x82\x01\n\x0csfixed32.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x8c\x07\n\x02gt\x18\x04 \x01(\x0f\x42\xf9\x06\xc2H\xf5\x06\nw\n\x0bsfixed32.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xb0\x01\n\x0esfixed32.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb8\x01\n\x18sfixed32.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc0\x01\n\x0fsfixed32.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc8\x01\n\x19sfixed32.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xd9\x07\n\x03gte\x18\x05 \x01(\x0f\x42\xc4\x07\xc2H\xc0\x07\n\x85\x01\n\x0csfixed32.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xbf\x01\n\x0fsfixed32.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc7\x01\n\x19sfixed32.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcf\x01\n\x10sfixed32.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd7\x01\n\x1asfixed32.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x80\x01\n\x02in\x18\x06 \x03(\x0f\x42p\xc2Hm\nk\n\x0bsfixed32.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12z\n\x06not_in\x18\x07 \x03(\x0f\x42\x63\xc2H`\n^\n\x0fsfixed32.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x37\n\x07\x65xample\x18\x08 \x03(\x0f\x42\x1d\xc2H\x1a\n\x18\n\x10sfixed32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\x93\x15\n\rSFixed64Rules\x12\x87\x01\n\x05\x63onst\x18\x01 \x01(\x10\x42q\xc2Hn\nl\n\x0esfixed64.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8b\x01\n\x02lt\x18\x02 \x01(\x10\x42y\xc2Hv\nt\n\x0bsfixed64.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\x9e\x01\n\x03lte\x18\x03 \x01(\x10\x42\x89\x01\xc2H\x85\x01\n\x82\x01\n\x0csfixed64.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x8c\x07\n\x02gt\x18\x04 \x01(\x10\x42\xf9\x06\xc2H\xf5\x06\nw\n\x0bsfixed64.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xb0\x01\n\x0esfixed64.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb8\x01\n\x18sfixed64.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc0\x01\n\x0fsfixed64.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc8\x01\n\x19sfixed64.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xd9\x07\n\x03gte\x18\x05 \x01(\x10\x42\xc4\x07\xc2H\xc0\x07\n\x85\x01\n\x0csfixed64.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xbf\x01\n\x0fsfixed64.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc7\x01\n\x19sfixed64.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcf\x01\n\x10sfixed64.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd7\x01\n\x1asfixed64.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x80\x01\n\x02in\x18\x06 \x03(\x10\x42p\xc2Hm\nk\n\x0bsfixed64.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12z\n\x06not_in\x18\x07 \x03(\x10\x42\x63\xc2H`\n^\n\x0fsfixed64.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x37\n\x07\x65xample\x18\x08 \x03(\x10\x42\x1d\xc2H\x1a\n\x18\n\x10sfixed64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xd1\x01\n\tBoolRules\x12\x83\x01\n\x05\x63onst\x18\x01 \x01(\x08\x42m\xc2Hj\nh\n\nbool.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x33\n\x07\x65xample\x18\x02 \x03(\x08\x42\x19\xc2H\x16\n\x14\n\x0c\x62ool.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xcf?\n\x0bStringRules\x12\x87\x01\n\x05\x63onst\x18\x01 \x01(\tBq\xc2Hn\nl\n\x0cstring.const\x1a\\this != getField(rules, \'const\') ? \'must equal `%s`\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12v\n\x03len\x18\x13 \x01(\x04\x42\x64\xc2Ha\n_\n\nstring.len\x1aQuint(this.size()) != rules.len ? \'must be %s characters\'.format([rules.len]) : \'\'R\x03len\x12\x91\x01\n\x07min_len\x18\x02 \x01(\x04\x42x\xc2Hu\ns\n\x0estring.min_len\x1a\x61uint(this.size()) < rules.min_len ? \'must be at least %s characters\'.format([rules.min_len]) : \'\'R\x06minLen\x12\x90\x01\n\x07max_len\x18\x03 \x01(\x04\x42w\xc2Ht\nr\n\x0estring.max_len\x1a`uint(this.size()) > rules.max_len ? \'must be at most %s characters\'.format([rules.max_len]) : \'\'R\x06maxLen\x12\x95\x01\n\tlen_bytes\x18\x14 \x01(\x04\x42x\xc2Hu\ns\n\x10string.len_bytes\x1a_uint(bytes(this).size()) != rules.len_bytes ? \'must be %s bytes\'.format([rules.len_bytes]) : \'\'R\x08lenBytes\x12\x9e\x01\n\tmin_bytes\x18\x04 \x01(\x04\x42\x80\x01\xc2H}\n{\n\x10string.min_bytes\x1aguint(bytes(this).size()) < rules.min_bytes ? \'must be at least %s bytes\'.format([rules.min_bytes]) : \'\'R\x08minBytes\x12\x9c\x01\n\tmax_bytes\x18\x05 \x01(\x04\x42\x7f\xc2H|\nz\n\x10string.max_bytes\x1a\x66uint(bytes(this).size()) > rules.max_bytes ? \'must be at most %s bytes\'.format([rules.max_bytes]) : \'\'R\x08maxBytes\x12\x90\x01\n\x07pattern\x18\x06 \x01(\tBv\xc2Hs\nq\n\x0estring.pattern\x1a_!this.matches(rules.pattern) ? \'does not match regex pattern `%s`\'.format([rules.pattern]) : \'\'R\x07pattern\x12\x86\x01\n\x06prefix\x18\x07 \x01(\tBn\xc2Hk\ni\n\rstring.prefix\x1aX!this.startsWith(rules.prefix) ? \'does not have prefix `%s`\'.format([rules.prefix]) : \'\'R\x06prefix\x12\x84\x01\n\x06suffix\x18\x08 \x01(\tBl\xc2Hi\ng\n\rstring.suffix\x1aV!this.endsWith(rules.suffix) ? \'does not have suffix `%s`\'.format([rules.suffix]) : \'\'R\x06suffix\x12\x94\x01\n\x08\x63ontains\x18\t \x01(\tBx\xc2Hu\ns\n\x0fstring.contains\x1a`!this.contains(rules.contains) ? \'does not contain substring `%s`\'.format([rules.contains]) : \'\'R\x08\x63ontains\x12\x9e\x01\n\x0cnot_contains\x18\x17 \x01(\tB{\xc2Hx\nv\n\x13string.not_contains\x1a_this.contains(rules.not_contains) ? \'contains substring `%s`\'.format([rules.not_contains]) : \'\'R\x0bnotContains\x12~\n\x02in\x18\n \x03(\tBn\xc2Hk\ni\n\tstring.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12x\n\x06not_in\x18\x0b \x03(\tBa\xc2H^\n\\\n\rstring.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xe0\x01\n\x05\x65mail\x18\x0c \x01(\x08\x42\xc7\x01\xc2H\xc3\x01\n[\n\x0cstring.email\x12\x1dmust be a valid email address\x1a,!rules.email || this == \'\' || this.isEmail()\nd\n\x12string.email_empty\x12\x32value is empty, which is not a valid email address\x1a\x1a!rules.email || this != \'\'H\x00R\x05\x65mail\x12\xeb\x01\n\x08hostname\x18\r \x01(\x08\x42\xcc\x01\xc2H\xc8\x01\n_\n\x0fstring.hostname\x12\x18must be a valid hostname\x1a\x32!rules.hostname || this == \'\' || this.isHostname()\ne\n\x15string.hostname_empty\x12-value is empty, which is not a valid hostname\x1a\x1d!rules.hostname || this != \'\'H\x00R\x08hostname\x12\xc5\x01\n\x02ip\x18\x0e \x01(\x08\x42\xb2\x01\xc2H\xae\x01\nO\n\tstring.ip\x12\x1amust be a valid IP address\x1a&!rules.ip || this == \'\' || this.isIp()\n[\n\x0fstring.ip_empty\x12/value is empty, which is not a valid IP address\x1a\x17!rules.ip || this != \'\'H\x00R\x02ip\x12\xd6\x01\n\x04ipv4\x18\x0f \x01(\x08\x42\xbf\x01\xc2H\xbb\x01\nV\n\x0bstring.ipv4\x12\x1cmust be a valid IPv4 address\x1a)!rules.ipv4 || this == \'\' || this.isIp(4)\na\n\x11string.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\x19!rules.ipv4 || this != \'\'H\x00R\x04ipv4\x12\xd6\x01\n\x04ipv6\x18\x10 \x01(\x08\x42\xbf\x01\xc2H\xbb\x01\nV\n\x0bstring.ipv6\x12\x1cmust be a valid IPv6 address\x1a)!rules.ipv6 || this == \'\' || this.isIp(6)\na\n\x11string.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\x19!rules.ipv6 || this != \'\'H\x00R\x04ipv6\x12\xbe\x01\n\x03uri\x18\x11 \x01(\x08\x42\xa9\x01\xc2H\xa5\x01\nK\n\nstring.uri\x12\x13must be a valid URI\x1a(!rules.uri || this == \'\' || this.isUri()\nV\n\x10string.uri_empty\x12(value is empty, which is not a valid URI\x1a\x18!rules.uri || this != \'\'H\x00R\x03uri\x12r\n\x07uri_ref\x18\x12 \x01(\x08\x42W\xc2HT\nR\n\x0estring.uri_ref\x12\x1dmust be a valid URI Reference\x1a!!rules.uri_ref || this.isUriRef()H\x00R\x06uriRef\x12\x92\x02\n\x07\x61\x64\x64ress\x18\x15 \x01(\x08\x42\xf5\x01\xc2H\xf1\x01\n{\n\x0estring.address\x12\'must be a valid hostname, or ip address\x1a@!rules.address || this == \'\' || this.isHostname() || this.isIp()\nr\n\x14string.address_empty\x12!rules.ipv4_with_prefixlen || this == \'\' || this.isIpPrefix(4)\n\x92\x01\n string.ipv4_with_prefixlen_empty\x12\x44value is empty, which is not a valid IPv4 address with prefix length\x1a(!rules.ipv4_with_prefixlen || this != \'\'H\x00R\x11ipv4WithPrefixlen\x12\xdc\x02\n\x13ipv6_with_prefixlen\x18\x1c \x01(\x08\x42\xa9\x02\xc2H\xa5\x02\n\x8d\x01\n\x1astring.ipv6_with_prefixlen\x12/must be a valid IPv6 address with prefix length\x1a>!rules.ipv6_with_prefixlen || this == \'\' || this.isIpPrefix(6)\n\x92\x01\n string.ipv6_with_prefixlen_empty\x12\x44value is empty, which is not a valid IPv6 address with prefix length\x1a(!rules.ipv6_with_prefixlen || this != \'\'H\x00R\x11ipv6WithPrefixlen\x12\xf6\x01\n\tip_prefix\x18\x1d \x01(\x08\x42\xd6\x01\xc2H\xd2\x01\nf\n\x10string.ip_prefix\x12\x19must be a valid IP prefix\x1a\x37!rules.ip_prefix || this == \'\' || this.isIpPrefix(true)\nh\n\x16string.ip_prefix_empty\x12.value is empty, which is not a valid IP prefix\x1a\x1e!rules.ip_prefix || this != \'\'H\x00R\x08ipPrefix\x12\x89\x02\n\x0bipv4_prefix\x18\x1e \x01(\x08\x42\xe5\x01\xc2H\xe1\x01\no\n\x12string.ipv4_prefix\x12\x1bmust be a valid IPv4 prefix\x1a!rules.host_and_port || this == \'\' || this.isHostAndPort(true)\ny\n\x1astring.host_and_port_empty\x12\x37value is empty, which is not a valid host and port pair\x1a\"!rules.host_and_port || this != \'\'H\x00R\x0bhostAndPort\x12\xf4\x01\n\x04ulid\x18# \x01(\x08\x42\xdd\x01\xc2H\xd9\x01\n|\n\x0bstring.ulid\x12\x14must be a valid ULID\x1aW!rules.ulid || this == \'\' || this.matches(\'^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$\')\nY\n\x11string.ulid_empty\x12)value is empty, which is not a valid ULID\x1a\x19!rules.ulid || this != \'\'H\x00R\x04ulid\x12\xe1\x02\n\x0cprotobuf_fqn\x18% \x01(\x08\x42\xbb\x02\xc2H\xb7\x02\n\xaf\x01\n\x13string.protobuf_fqn\x12-must be a valid fully-qualified Protobuf name\x1ai!rules.protobuf_fqn || this == \'\' || this.matches(\'^[A-Za-z_][A-Za-z_0-9]*(\\\\.[A-Za-z_][A-Za-z_0-9]*)*$\')\n\x82\x01\n\x19string.protobuf_fqn_empty\x12\x42value is empty, which is not a valid fully-qualified Protobuf name\x1a!!rules.protobuf_fqn || this != \'\'H\x00R\x0bprotobufFqn\x12\xa1\x03\n\x10protobuf_dot_fqn\x18& \x01(\x08\x42\xf4\x02\xc2H\xf0\x02\n\xcd\x01\n\x17string.protobuf_dot_fqn\x12@must be a valid fully-qualified Protobuf name with a leading dot\x1ap!rules.protobuf_dot_fqn || this == \'\' || this.matches(\'^\\\\.[A-Za-z_][A-Za-z_0-9]*(\\\\.[A-Za-z_][A-Za-z_0-9]*)*$\')\n\x9d\x01\n\x1dstring.protobuf_dot_fqn_empty\x12Uvalue is empty, which is not a valid fully-qualified Protobuf name with a leading dot\x1a%!rules.protobuf_dot_fqn || this != \'\'H\x00R\x0eprotobufDotFqn\x12\xac\x05\n\x10well_known_regex\x18\x18 \x01(\x0e\x32\x18.buf.validate.KnownRegexB\xe5\x04\xc2H\xe1\x04\n\xea\x01\n#string.well_known_regex.header_name\x12 must be a valid HTTP header name\x1a\xa0\x01rules.well_known_regex != 1 || this == \'\' || this.matches(!has(rules.strict) || rules.strict ?\'^:?[0-9a-zA-Z!#$%&\\\'*+-.^_|~\\x60]+$\' :\'^[^\\u0000\\u000A\\u000D]+$\')\n\x8d\x01\n)string.well_known_regex.header_name_empty\x12\x35value is empty, which is not a valid HTTP header name\x1a)rules.well_known_regex != 1 || this != \'\'\n\xe1\x01\n$string.well_known_regex.header_value\x12!must be a valid HTTP header value\x1a\x95\x01rules.well_known_regex != 2 || this.matches(!has(rules.strict) || rules.strict ?\'^[^\\u0000-\\u0008\\u000A-\\u001F\\u007F]*$\' :\'^[^\\u0000\\u000A\\u000D]*$\')H\x00R\x0ewellKnownRegex\x12\x16\n\x06strict\x18\x19 \x01(\x08R\x06strict\x12\x35\n\x07\x65xample\x18\" \x03(\tB\x1b\xc2H\x18\n\x16\n\x0estring.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0c\n\nwell_known\"\xca\x12\n\nBytesRules\x12\x81\x01\n\x05\x63onst\x18\x01 \x01(\x0c\x42k\xc2Hh\nf\n\x0b\x62ytes.const\x1aWthis != getField(rules, \'const\') ? \'must be %x\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12p\n\x03len\x18\r \x01(\x04\x42^\xc2H[\nY\n\tbytes.len\x1aLuint(this.size()) != rules.len ? \'must be %s bytes\'.format([rules.len]) : \'\'R\x03len\x12\x8b\x01\n\x07min_len\x18\x02 \x01(\x04\x42r\xc2Ho\nm\n\rbytes.min_len\x1a\\uint(this.size()) < rules.min_len ? \'must be at least %s bytes\'.format([rules.min_len]) : \'\'R\x06minLen\x12\x8a\x01\n\x07max_len\x18\x03 \x01(\x04\x42q\xc2Hn\nl\n\rbytes.max_len\x1a[uint(this.size()) > rules.max_len ? \'must be at most %s bytes\'.format([rules.max_len]) : \'\'R\x06maxLen\x12\x93\x01\n\x07pattern\x18\x04 \x01(\tBy\xc2Hv\nt\n\rbytes.pattern\x1a\x63!string(this).matches(rules.pattern) ? \'must match regex pattern `%s`\'.format([rules.pattern]) : \'\'R\x07pattern\x12\x83\x01\n\x06prefix\x18\x05 \x01(\x0c\x42k\xc2Hh\nf\n\x0c\x62ytes.prefix\x1aV!this.startsWith(rules.prefix) ? \'does not have prefix %x\'.format([rules.prefix]) : \'\'R\x06prefix\x12\x81\x01\n\x06suffix\x18\x06 \x01(\x0c\x42i\xc2Hf\nd\n\x0c\x62ytes.suffix\x1aT!this.endsWith(rules.suffix) ? \'does not have suffix %x\'.format([rules.suffix]) : \'\'R\x06suffix\x12\x87\x01\n\x08\x63ontains\x18\x07 \x01(\x0c\x42k\xc2Hh\nf\n\x0e\x62ytes.contains\x1aT!this.contains(rules.contains) ? \'does not contain %x\'.format([rules.contains]) : \'\'R\x08\x63ontains\x12\xa5\x01\n\x02in\x18\x08 \x03(\x0c\x42\x94\x01\xc2H\x90\x01\n\x8d\x01\n\x08\x62ytes.in\x1a\x80\x01getField(rules, \'in\').size() > 0 && !(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12w\n\x06not_in\x18\t \x03(\x0c\x42`\xc2H]\n[\n\x0c\x62ytes.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xe9\x01\n\x02ip\x18\n \x01(\x08\x42\xd6\x01\xc2H\xd2\x01\nn\n\x08\x62ytes.ip\x12\x1amust be a valid IP address\x1a\x46!rules.ip || this.size() == 0 || this.size() == 4 || this.size() == 16\n`\n\x0e\x62ytes.ip_empty\x12/value is empty, which is not a valid IP address\x1a\x1d!rules.ip || this.size() != 0H\x00R\x02ip\x12\xe4\x01\n\x04ipv4\x18\x0b \x01(\x08\x42\xcd\x01\xc2H\xc9\x01\n_\n\nbytes.ipv4\x12\x1cmust be a valid IPv4 address\x1a\x33!rules.ipv4 || this.size() == 0 || this.size() == 4\nf\n\x10\x62ytes.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\x1f!rules.ipv4 || this.size() != 0H\x00R\x04ipv4\x12\xe5\x01\n\x04ipv6\x18\x0c \x01(\x08\x42\xce\x01\xc2H\xca\x01\n`\n\nbytes.ipv6\x12\x1cmust be a valid IPv6 address\x1a\x34!rules.ipv6 || this.size() == 0 || this.size() == 16\nf\n\x10\x62ytes.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\x1f!rules.ipv6 || this.size() != 0H\x00R\x04ipv6\x12\xd5\x01\n\x04uuid\x18\x0f \x01(\x08\x42\xbe\x01\xc2H\xba\x01\nX\n\nbytes.uuid\x12\x14must be a valid UUID\x1a\x34!rules.uuid || this.size() == 0 || this.size() == 16\n^\n\x10\x62ytes.uuid_empty\x12)value is empty, which is not a valid UUID\x1a\x1f!rules.uuid || this.size() != 0H\x00R\x04uuid\x12\x34\n\x07\x65xample\x18\x0e \x03(\x0c\x42\x1a\xc2H\x17\n\x15\n\rbytes.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0c\n\nwell_known\"\xea\x03\n\tEnumRules\x12\x83\x01\n\x05\x63onst\x18\x01 \x01(\x05\x42m\xc2Hj\nh\n\nenum.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12!\n\x0c\x64\x65\x66ined_only\x18\x02 \x01(\x08R\x0b\x64\x65\x66inedOnly\x12|\n\x02in\x18\x03 \x03(\x05\x42l\xc2Hi\ng\n\x07\x65num.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12v\n\x06not_in\x18\x04 \x03(\x05\x42_\xc2H\\\nZ\n\x0b\x65num.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x33\n\x07\x65xample\x18\x05 \x03(\x05\x42\x19\xc2H\x16\n\x14\n\x0c\x65num.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\x90\x04\n\rRepeatedRules\x12\xa0\x01\n\tmin_items\x18\x01 \x01(\x04\x42\x82\x01\xc2H\x7f\n}\n\x12repeated.min_items\x1aguint(this.size()) < rules.min_items ? \'must contain at least %d item(s)\'.format([rules.min_items]) : \'\'R\x08minItems\x12\xa6\x01\n\tmax_items\x18\x02 \x01(\x04\x42\x88\x01\xc2H\x84\x01\n\x81\x01\n\x12repeated.max_items\x1akuint(this.size()) > rules.max_items ? \'must contain no more than %s item(s)\'.format([rules.max_items]) : \'\'R\x08maxItems\x12x\n\x06unique\x18\x03 \x01(\x08\x42`\xc2H]\n[\n\x0frepeated.unique\x12(repeated value must contain unique items\x1a\x1e!rules.unique || this.unique()R\x06unique\x12.\n\x05items\x18\x04 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x05items*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xac\x03\n\x08MapRules\x12\x99\x01\n\tmin_pairs\x18\x01 \x01(\x04\x42|\xc2Hy\nw\n\rmap.min_pairs\x1a\x66uint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\'R\x08minPairs\x12\x98\x01\n\tmax_pairs\x18\x02 \x01(\x04\x42{\xc2Hx\nv\n\rmap.max_pairs\x1a\x65uint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\'R\x08maxPairs\x12,\n\x04keys\x18\x04 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x04keys\x12\x30\n\x06values\x18\x05 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x06values*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"1\n\x08\x41nyRules\x12\x0e\n\x02in\x18\x02 \x03(\tR\x02in\x12\x15\n\x06not_in\x18\x03 \x03(\tR\x05notIn\"\xec\x16\n\rDurationRules\x12\xa2\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationBq\xc2Hn\nl\n\x0e\x64uration.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xa6\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationBy\xc2Hv\nt\n\x0b\x64uration.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb9\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationB\x89\x01\xc2H\x85\x01\n\x82\x01\n\x0c\x64uration.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa7\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationB\xf9\x06\xc2H\xf5\x06\nw\n\x0b\x64uration.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xb0\x01\n\x0e\x64uration.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb8\x01\n\x18\x64uration.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc0\x01\n\x0f\x64uration.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc8\x01\n\x19\x64uration.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf4\x07\n\x03gte\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationB\xc4\x07\xc2H\xc0\x07\n\x85\x01\n\x0c\x64uration.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xbf\x01\n\x0f\x64uration.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc7\x01\n\x19\x64uration.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcf\x01\n\x10\x64uration.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd7\x01\n\x1a\x64uration.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x9b\x01\n\x02in\x18\x07 \x03(\x0b\x32\x19.google.protobuf.DurationBp\xc2Hm\nk\n\x0b\x64uration.in\x1a\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x95\x01\n\x06not_in\x18\x08 \x03(\x0b\x32\x19.google.protobuf.DurationBc\xc2H`\n^\n\x0f\x64uration.not_in\x1aKthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12R\n\x07\x65xample\x18\t \x03(\x0b\x32\x19.google.protobuf.DurationB\x1d\xc2H\x1a\n\x18\n\x10\x64uration.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\x86\x06\n\x0e\x46ieldMaskRules\x12\xc0\x01\n\x05\x63onst\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x8d\x01\xc2H\x89\x01\n\x86\x01\n\x10\x66ield_mask.const\x1arthis.paths != getField(rules, \'const\').paths ? \'must equal paths %s\'.format([getField(rules, \'const\').paths]) : \'\'R\x05\x63onst\x12\xd7\x01\n\x02in\x18\x02 \x03(\tB\xc6\x01\xc2H\xc2\x01\n\xbf\x01\n\rfield_mask.in\x1a\xad\x01!this.paths.all(p, p in getField(rules, \'in\') || getField(rules, \'in\').exists(f, p.startsWith(f+\'.\'))) ? \'must only contain paths in %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\xf4\x01\n\x06not_in\x18\x03 \x03(\tB\xdc\x01\xc2H\xd8\x01\n\xd5\x01\n\x11\x66ield_mask.not_in\x1a\xbf\x01!this.paths.all(p, !(p in getField(rules, \'not_in\') || getField(rules, \'not_in\').exists(f, p.startsWith(f+\'.\')))) ? \'must not contain any paths in %s\'.format([getField(rules, \'not_in\')]) : \'\'R\x05notIn\x12U\n\x07\x65xample\x18\x04 \x03(\x0b\x32\x1a.google.protobuf.FieldMaskB\x1f\xc2H\x1c\n\x1a\n\x12\x66ield_mask.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xe8\x17\n\x0eTimestampRules\x12\xa4\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBr\xc2Ho\nm\n\x0ftimestamp.const\x1aZthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xa8\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBz\xc2Hw\nu\n\x0ctimestamp.lt\x1a\x65!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xbb\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8a\x01\xc2H\x86\x01\n\x83\x01\n\rtimestamp.lte\x1ar!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12m\n\x06lt_now\x18\x07 \x01(\x08\x42T\xc2HQ\nO\n\x10timestamp.lt_now\x1a;(rules.lt_now && this > now) ? \'must be less than now\' : \'\'H\x00R\x05ltNow\x12\xad\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xfe\x06\xc2H\xfa\x06\nx\n\x0ctimestamp.gt\x1ah!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\xb1\x01\n\x0ftimestamp.gt_lt\x1a\x9d\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xb9\x01\n\x19timestamp.gt_lt_exclusive\x1a\x9b\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc1\x01\n\x10timestamp.gt_lte\x1a\xac\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xc9\x01\n\x1atimestamp.gt_lte_exclusive\x1a\xaa\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xfa\x07\n\x03gte\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc9\x07\xc2H\xc5\x07\n\x86\x01\n\rtimestamp.gte\x1au!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc0\x01\n\x10timestamp.gte_lt\x1a\xab\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xc8\x01\n\x1atimestamp.gte_lt_exclusive\x1a\xa9\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd0\x01\n\x11timestamp.gte_lte\x1a\xba\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xd8\x01\n\x1btimestamp.gte_lte_exclusive\x1a\xb8\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12p\n\x06gt_now\x18\x08 \x01(\x08\x42W\xc2HT\nR\n\x10timestamp.gt_now\x1a>(rules.gt_now && this < now) ? \'must be greater than now\' : \'\'H\x01R\x05gtNow\x12\xb9\x01\n\x06within\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationB\x85\x01\xc2H\x81\x01\n\x7f\n\x10timestamp.within\x1akthis < now-rules.within || this > now+rules.within ? \'must be within %s of now\'.format([rules.within]) : \'\'R\x06within\x12T\n\x07\x65xample\x18\n \x03(\x0b\x32\x1a.google.protobuf.TimestampB\x1e\xc2H\x1b\n\x19\n\x11timestamp.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"E\n\nViolations\x12\x37\n\nviolations\x18\x01 \x03(\x0b\x32\x17.buf.validate.ViolationR\nviolations\"\xc5\x01\n\tViolation\x12-\n\x05\x66ield\x18\x05 \x01(\x0b\x32\x17.buf.validate.FieldPathR\x05\x66ield\x12+\n\x04rule\x18\x06 \x01(\x0b\x32\x17.buf.validate.FieldPathR\x04rule\x12\x17\n\x07rule_id\x18\x02 \x01(\tR\x06ruleId\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x17\n\x07\x66or_key\x18\x04 \x01(\x08R\x06\x66orKeyJ\x04\x08\x01\x10\x02R\nfield_path\"G\n\tFieldPath\x12:\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x1e.buf.validate.FieldPathElementR\x08\x65lements\"\xcc\x03\n\x10\x46ieldPathElement\x12!\n\x0c\x66ield_number\x18\x01 \x01(\x05R\x0b\x66ieldNumber\x12\x1d\n\nfield_name\x18\x02 \x01(\tR\tfieldName\x12I\n\nfield_type\x18\x03 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\tfieldType\x12\x45\n\x08key_type\x18\x04 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\x07keyType\x12I\n\nvalue_type\x18\x05 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\tvalueType\x12\x16\n\x05index\x18\x06 \x01(\x04H\x00R\x05index\x12\x1b\n\x08\x62ool_key\x18\x07 \x01(\x08H\x00R\x07\x62oolKey\x12\x19\n\x07int_key\x18\x08 \x01(\x03H\x00R\x06intKey\x12\x1b\n\x08uint_key\x18\t \x01(\x04H\x00R\x07uintKey\x12\x1f\n\nstring_key\x18\n \x01(\tH\x00R\tstringKeyB\x0b\n\tsubscript*\xa1\x01\n\x06Ignore\x12\x16\n\x12IGNORE_UNSPECIFIED\x10\x00\x12\x18\n\x14IGNORE_IF_ZERO_VALUE\x10\x01\x12\x11\n\rIGNORE_ALWAYS\x10\x03\"\x04\x08\x02\x10\x02*\x0cIGNORE_EMPTY*\x0eIGNORE_DEFAULT*\x17IGNORE_IF_DEFAULT_VALUE*\x15IGNORE_IF_UNPOPULATED*n\n\nKnownRegex\x12\x1b\n\x17KNOWN_REGEX_UNSPECIFIED\x10\x00\x12 \n\x1cKNOWN_REGEX_HTTP_HEADER_NAME\x10\x01\x12!\n\x1dKNOWN_REGEX_HTTP_HEADER_VALUE\x10\x02:V\n\x07message\x12\x1f.google.protobuf.MessageOptions\x18\x87\t \x01(\x0b\x32\x1a.buf.validate.MessageRulesR\x07message:N\n\x05oneof\x12\x1d.google.protobuf.OneofOptions\x18\x87\t \x01(\x0b\x32\x18.buf.validate.OneofRulesR\x05oneof:N\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\x87\t \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x05\x66ield:]\n\npredefined\x12\x1d.google.protobuf.FieldOptions\x18\x88\t \x01(\x0b\x32\x1d.buf.validate.PredefinedRulesR\npredefinedB\xbb\x01\n\x10\x63om.buf.validateB\rValidateProtoP\x01ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate\xa2\x02\x03\x42VX\xaa\x02\x0c\x42uf.Validate\xca\x02\x0c\x42uf\\Validate\xe2\x02\x18\x42uf\\Validate\\GPBMetadata\xea\x02\rBuf::Validate') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.validate_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\020com.buf.validateB\rValidateProtoP\001ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate\242\002\003BVX\252\002\014Buf.Validate\312\002\014Buf\\Validate\342\002\030Buf\\Validate\\GPBMetadata\352\002\rBuf::Validate' - _globals['_FLOATRULES'].fields_by_name['const']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['const']._serialized_options = b'\302Hk\ni\n\013float.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['lt']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['lt']._serialized_options = b'\302H\206\001\n\203\001\n\010float.lt\032w!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['lte']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['lte']._serialized_options = b'\302H\225\001\n\222\001\n\tfloat.lte\032\204\001!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['gt']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['gt']._serialized_options = b'\302H\275\007\n\206\001\n\010float.gt\032z!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\275\001\n\013float.gt_lt\032\255\001has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\307\001\n\025float.gt_lt_exclusive\032\255\001has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\315\001\n\014float.gt_lte\032\274\001has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\327\001\n\026float.gt_lte_exclusive\032\274\001has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['gte']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['gte']._serialized_options = b'\302H\210\010\n\225\001\n\tfloat.gte\032\207\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\314\001\n\014float.gte_lt\032\273\001has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\326\001\n\026float.gte_lt_exclusive\032\273\001has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\334\001\n\rfloat.gte_lte\032\312\001has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\346\001\n\027float.gte_lte_exclusive\032\312\001has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['in']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['in']._serialized_options = b'\302Hj\nh\n\010float.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['not_in']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['not_in']._serialized_options = b'\302H]\n[\n\014float.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['finite']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['finite']._serialized_options = b'\302H\\\nZ\n\014float.finite\032Jrules.finite ? (this.isNan() || this.isInf() ? \'must be finite\' : \'\') : \'\'' - _globals['_FLOATRULES'].fields_by_name['example']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['example']._serialized_options = b'\302H\027\n\025\n\rfloat.example\032\004true' - _globals['_DOUBLERULES'].fields_by_name['const']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['const']._serialized_options = b'\302Hl\nj\n\014double.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['lt']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['lt']._serialized_options = b'\302H\207\001\n\204\001\n\tdouble.lt\032w!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['lte']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['lte']._serialized_options = b'\302H\226\001\n\223\001\n\ndouble.lte\032\204\001!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['gt']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['gt']._serialized_options = b'\302H\302\007\n\207\001\n\tdouble.gt\032z!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\276\001\n\014double.gt_lt\032\255\001has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\310\001\n\026double.gt_lt_exclusive\032\255\001has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\316\001\n\rdouble.gt_lte\032\274\001has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\330\001\n\027double.gt_lte_exclusive\032\274\001has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['gte']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['gte']._serialized_options = b'\302H\215\010\n\226\001\n\ndouble.gte\032\207\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\315\001\n\rdouble.gte_lt\032\273\001has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\327\001\n\027double.gte_lt_exclusive\032\273\001has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\335\001\n\016double.gte_lte\032\312\001has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\347\001\n\030double.gte_lte_exclusive\032\312\001has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['in']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['in']._serialized_options = b'\302Hk\ni\n\tdouble.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['not_in']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['not_in']._serialized_options = b'\302H^\n\\\n\rdouble.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['finite']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['finite']._serialized_options = b'\302H]\n[\n\rdouble.finite\032Jrules.finite ? (this.isNan() || this.isInf() ? \'must be finite\' : \'\') : \'\'' - _globals['_DOUBLERULES'].fields_by_name['example']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016double.example\032\004true' - _globals['_INT32RULES'].fields_by_name['const']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['const']._serialized_options = b'\302Hk\ni\n\013int32.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_INT32RULES'].fields_by_name['lt']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hs\nq\n\010int32.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_INT32RULES'].fields_by_name['lte']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\201\001\n\177\n\tint32.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_INT32RULES'].fields_by_name['gt']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\346\006\nt\n\010int32.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\255\001\n\013int32.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\265\001\n\025int32.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\275\001\n\014int32.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\305\001\n\026int32.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_INT32RULES'].fields_by_name['gte']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\261\007\n\202\001\n\tint32.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\274\001\n\014int32.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\304\001\n\026int32.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\314\001\n\rint32.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\324\001\n\027int32.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_INT32RULES'].fields_by_name['in']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['in']._serialized_options = b'\302Hj\nh\n\010int32.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_INT32RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['not_in']._serialized_options = b'\302H]\n[\n\014int32.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_INT32RULES'].fields_by_name['example']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['example']._serialized_options = b'\302H\027\n\025\n\rint32.example\032\004true' - _globals['_INT64RULES'].fields_by_name['const']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['const']._serialized_options = b'\302Hk\ni\n\013int64.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_INT64RULES'].fields_by_name['lt']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hs\nq\n\010int64.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_INT64RULES'].fields_by_name['lte']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\201\001\n\177\n\tint64.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_INT64RULES'].fields_by_name['gt']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\346\006\nt\n\010int64.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\255\001\n\013int64.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\265\001\n\025int64.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\275\001\n\014int64.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\305\001\n\026int64.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_INT64RULES'].fields_by_name['gte']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\261\007\n\202\001\n\tint64.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\274\001\n\014int64.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\304\001\n\026int64.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\314\001\n\rint64.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\324\001\n\027int64.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_INT64RULES'].fields_by_name['in']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['in']._serialized_options = b'\302Hj\nh\n\010int64.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_INT64RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['not_in']._serialized_options = b'\302H]\n[\n\014int64.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_INT64RULES'].fields_by_name['example']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['example']._serialized_options = b'\302H\027\n\025\n\rint64.example\032\004true' - _globals['_UINT32RULES'].fields_by_name['const']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['const']._serialized_options = b'\302Hl\nj\n\014uint32.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['lt']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['lt']._serialized_options = b'\302Ht\nr\n\tuint32.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['lte']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\203\001\n\200\001\n\nuint32.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['gt']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\353\006\nu\n\tuint32.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\256\001\n\014uint32.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\266\001\n\026uint32.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\ruint32.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\306\001\n\027uint32.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['gte']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\266\007\n\203\001\n\nuint32.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\275\001\n\ruint32.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\305\001\n\027uint32.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\016uint32.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\325\001\n\030uint32.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['in']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['in']._serialized_options = b'\302Hk\ni\n\tuint32.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['not_in']._serialized_options = b'\302H^\n\\\n\ruint32.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['example']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016uint32.example\032\004true' - _globals['_UINT64RULES'].fields_by_name['const']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['const']._serialized_options = b'\302Hl\nj\n\014uint64.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['lt']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['lt']._serialized_options = b'\302Ht\nr\n\tuint64.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['lte']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\203\001\n\200\001\n\nuint64.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['gt']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\353\006\nu\n\tuint64.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\256\001\n\014uint64.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\266\001\n\026uint64.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\ruint64.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\306\001\n\027uint64.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['gte']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\266\007\n\203\001\n\nuint64.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\275\001\n\ruint64.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\305\001\n\027uint64.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\016uint64.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\325\001\n\030uint64.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['in']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['in']._serialized_options = b'\302Hk\ni\n\tuint64.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['not_in']._serialized_options = b'\302H^\n\\\n\ruint64.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['example']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016uint64.example\032\004true' - _globals['_SINT32RULES'].fields_by_name['const']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['const']._serialized_options = b'\302Hl\nj\n\014sint32.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['lt']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['lt']._serialized_options = b'\302Ht\nr\n\tsint32.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['lte']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\203\001\n\200\001\n\nsint32.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['gt']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\353\006\nu\n\tsint32.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\256\001\n\014sint32.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\266\001\n\026sint32.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\rsint32.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\306\001\n\027sint32.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['gte']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\266\007\n\203\001\n\nsint32.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\275\001\n\rsint32.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\305\001\n\027sint32.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\016sint32.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\325\001\n\030sint32.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['in']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['in']._serialized_options = b'\302Hk\ni\n\tsint32.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['not_in']._serialized_options = b'\302H^\n\\\n\rsint32.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['example']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016sint32.example\032\004true' - _globals['_SINT64RULES'].fields_by_name['const']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['const']._serialized_options = b'\302Hl\nj\n\014sint64.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['lt']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['lt']._serialized_options = b'\302Ht\nr\n\tsint64.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['lte']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\203\001\n\200\001\n\nsint64.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['gt']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\353\006\nu\n\tsint64.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\256\001\n\014sint64.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\266\001\n\026sint64.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\rsint64.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\306\001\n\027sint64.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['gte']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\266\007\n\203\001\n\nsint64.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\275\001\n\rsint64.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\305\001\n\027sint64.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\016sint64.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\325\001\n\030sint64.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['in']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['in']._serialized_options = b'\302Hk\ni\n\tsint64.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['not_in']._serialized_options = b'\302H^\n\\\n\rsint64.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['example']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016sint64.example\032\004true' - _globals['_FIXED32RULES'].fields_by_name['const']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['const']._serialized_options = b'\302Hm\nk\n\rfixed32.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['lt']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['lt']._serialized_options = b'\302Hu\ns\n\nfixed32.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['lte']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['lte']._serialized_options = b'\302H\204\001\n\201\001\n\013fixed32.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['gt']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['gt']._serialized_options = b'\302H\360\006\nv\n\nfixed32.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\257\001\n\rfixed32.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\267\001\n\027fixed32.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\277\001\n\016fixed32.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\307\001\n\030fixed32.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['gte']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['gte']._serialized_options = b'\302H\273\007\n\204\001\n\013fixed32.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\276\001\n\016fixed32.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\306\001\n\030fixed32.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\316\001\n\017fixed32.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\326\001\n\031fixed32.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['in']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['in']._serialized_options = b'\302Hl\nj\n\nfixed32.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['not_in']._serialized_options = b'\302H_\n]\n\016fixed32.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['example']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['example']._serialized_options = b'\302H\031\n\027\n\017fixed32.example\032\004true' - _globals['_FIXED64RULES'].fields_by_name['const']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['const']._serialized_options = b'\302Hm\nk\n\rfixed64.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['lt']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['lt']._serialized_options = b'\302Hu\ns\n\nfixed64.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['lte']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['lte']._serialized_options = b'\302H\204\001\n\201\001\n\013fixed64.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['gt']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['gt']._serialized_options = b'\302H\360\006\nv\n\nfixed64.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\257\001\n\rfixed64.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\267\001\n\027fixed64.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\277\001\n\016fixed64.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\307\001\n\030fixed64.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['gte']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['gte']._serialized_options = b'\302H\273\007\n\204\001\n\013fixed64.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\276\001\n\016fixed64.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\306\001\n\030fixed64.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\316\001\n\017fixed64.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\326\001\n\031fixed64.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['in']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['in']._serialized_options = b'\302Hl\nj\n\nfixed64.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['not_in']._serialized_options = b'\302H_\n]\n\016fixed64.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['example']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['example']._serialized_options = b'\302H\031\n\027\n\017fixed64.example\032\004true' - _globals['_SFIXED32RULES'].fields_by_name['const']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['const']._serialized_options = b'\302Hn\nl\n\016sfixed32.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['lt']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['lt']._serialized_options = b'\302Hv\nt\n\013sfixed32.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['lte']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['lte']._serialized_options = b'\302H\205\001\n\202\001\n\014sfixed32.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['gt']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['gt']._serialized_options = b'\302H\365\006\nw\n\013sfixed32.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\260\001\n\016sfixed32.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\270\001\n\030sfixed32.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\300\001\n\017sfixed32.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\310\001\n\031sfixed32.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['gte']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['gte']._serialized_options = b'\302H\300\007\n\205\001\n\014sfixed32.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\277\001\n\017sfixed32.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\307\001\n\031sfixed32.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\317\001\n\020sfixed32.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\327\001\n\032sfixed32.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['in']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['in']._serialized_options = b'\302Hm\nk\n\013sfixed32.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['not_in']._serialized_options = b'\302H`\n^\n\017sfixed32.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['example']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['example']._serialized_options = b'\302H\032\n\030\n\020sfixed32.example\032\004true' - _globals['_SFIXED64RULES'].fields_by_name['const']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['const']._serialized_options = b'\302Hn\nl\n\016sfixed64.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['lt']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['lt']._serialized_options = b'\302Hv\nt\n\013sfixed64.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['lte']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['lte']._serialized_options = b'\302H\205\001\n\202\001\n\014sfixed64.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['gt']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['gt']._serialized_options = b'\302H\365\006\nw\n\013sfixed64.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\260\001\n\016sfixed64.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\270\001\n\030sfixed64.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\300\001\n\017sfixed64.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\310\001\n\031sfixed64.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['gte']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['gte']._serialized_options = b'\302H\300\007\n\205\001\n\014sfixed64.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\277\001\n\017sfixed64.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\307\001\n\031sfixed64.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\317\001\n\020sfixed64.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\327\001\n\032sfixed64.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['in']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['in']._serialized_options = b'\302Hm\nk\n\013sfixed64.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['not_in']._serialized_options = b'\302H`\n^\n\017sfixed64.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['example']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['example']._serialized_options = b'\302H\032\n\030\n\020sfixed64.example\032\004true' - _globals['_BOOLRULES'].fields_by_name['const']._loaded_options = None - _globals['_BOOLRULES'].fields_by_name['const']._serialized_options = b'\302Hj\nh\n\nbool.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_BOOLRULES'].fields_by_name['example']._loaded_options = None - _globals['_BOOLRULES'].fields_by_name['example']._serialized_options = b'\302H\026\n\024\n\014bool.example\032\004true' - _globals['_STRINGRULES'].fields_by_name['const']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['const']._serialized_options = b'\302Hn\nl\n\014string.const\032\\this != getField(rules, \'const\') ? \'must equal `%s`\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['len']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['len']._serialized_options = b'\302Ha\n_\n\nstring.len\032Quint(this.size()) != rules.len ? \'must be %s characters\'.format([rules.len]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['min_len']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['min_len']._serialized_options = b'\302Hu\ns\n\016string.min_len\032auint(this.size()) < rules.min_len ? \'must be at least %s characters\'.format([rules.min_len]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['max_len']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['max_len']._serialized_options = b'\302Ht\nr\n\016string.max_len\032`uint(this.size()) > rules.max_len ? \'must be at most %s characters\'.format([rules.max_len]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['len_bytes']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['len_bytes']._serialized_options = b'\302Hu\ns\n\020string.len_bytes\032_uint(bytes(this).size()) != rules.len_bytes ? \'must be %s bytes\'.format([rules.len_bytes]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['min_bytes']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['min_bytes']._serialized_options = b'\302H}\n{\n\020string.min_bytes\032guint(bytes(this).size()) < rules.min_bytes ? \'must be at least %s bytes\'.format([rules.min_bytes]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['max_bytes']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['max_bytes']._serialized_options = b'\302H|\nz\n\020string.max_bytes\032fuint(bytes(this).size()) > rules.max_bytes ? \'must be at most %s bytes\'.format([rules.max_bytes]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['pattern']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['pattern']._serialized_options = b'\302Hs\nq\n\016string.pattern\032_!this.matches(rules.pattern) ? \'does not match regex pattern `%s`\'.format([rules.pattern]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['prefix']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['prefix']._serialized_options = b'\302Hk\ni\n\rstring.prefix\032X!this.startsWith(rules.prefix) ? \'does not have prefix `%s`\'.format([rules.prefix]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['suffix']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['suffix']._serialized_options = b'\302Hi\ng\n\rstring.suffix\032V!this.endsWith(rules.suffix) ? \'does not have suffix `%s`\'.format([rules.suffix]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['contains']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['contains']._serialized_options = b'\302Hu\ns\n\017string.contains\032`!this.contains(rules.contains) ? \'does not contain substring `%s`\'.format([rules.contains]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['not_contains']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['not_contains']._serialized_options = b'\302Hx\nv\n\023string.not_contains\032_this.contains(rules.not_contains) ? \'contains substring `%s`\'.format([rules.not_contains]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['in']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['in']._serialized_options = b'\302Hk\ni\n\tstring.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['not_in']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['not_in']._serialized_options = b'\302H^\n\\\n\rstring.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['email']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['email']._serialized_options = b'\302H\303\001\n[\n\014string.email\022\035must be a valid email address\032,!rules.email || this == \'\' || this.isEmail()\nd\n\022string.email_empty\0222value is empty, which is not a valid email address\032\032!rules.email || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['hostname']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['hostname']._serialized_options = b'\302H\310\001\n_\n\017string.hostname\022\030must be a valid hostname\0322!rules.hostname || this == \'\' || this.isHostname()\ne\n\025string.hostname_empty\022-value is empty, which is not a valid hostname\032\035!rules.hostname || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['ip']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['ip']._serialized_options = b'\302H\256\001\nO\n\tstring.ip\022\032must be a valid IP address\032&!rules.ip || this == \'\' || this.isIp()\n[\n\017string.ip_empty\022/value is empty, which is not a valid IP address\032\027!rules.ip || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['ipv4']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['ipv4']._serialized_options = b'\302H\273\001\nV\n\013string.ipv4\022\034must be a valid IPv4 address\032)!rules.ipv4 || this == \'\' || this.isIp(4)\na\n\021string.ipv4_empty\0221value is empty, which is not a valid IPv4 address\032\031!rules.ipv4 || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['ipv6']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['ipv6']._serialized_options = b'\302H\273\001\nV\n\013string.ipv6\022\034must be a valid IPv6 address\032)!rules.ipv6 || this == \'\' || this.isIp(6)\na\n\021string.ipv6_empty\0221value is empty, which is not a valid IPv6 address\032\031!rules.ipv6 || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['uri']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['uri']._serialized_options = b'\302H\245\001\nK\n\nstring.uri\022\023must be a valid URI\032(!rules.uri || this == \'\' || this.isUri()\nV\n\020string.uri_empty\022(value is empty, which is not a valid URI\032\030!rules.uri || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['uri_ref']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['uri_ref']._serialized_options = b'\302HT\nR\n\016string.uri_ref\022\035must be a valid URI Reference\032!!rules.uri_ref || this.isUriRef()' - _globals['_STRINGRULES'].fields_by_name['address']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['address']._serialized_options = b'\302H\361\001\n{\n\016string.address\022\'must be a valid hostname, or ip address\032@!rules.address || this == \'\' || this.isHostname() || this.isIp()\nr\n\024string.address_empty\022!rules.ipv4_with_prefixlen || this == \'\' || this.isIpPrefix(4)\n\222\001\n string.ipv4_with_prefixlen_empty\022Dvalue is empty, which is not a valid IPv4 address with prefix length\032(!rules.ipv4_with_prefixlen || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['ipv6_with_prefixlen']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['ipv6_with_prefixlen']._serialized_options = b'\302H\245\002\n\215\001\n\032string.ipv6_with_prefixlen\022/must be a valid IPv6 address with prefix length\032>!rules.ipv6_with_prefixlen || this == \'\' || this.isIpPrefix(6)\n\222\001\n string.ipv6_with_prefixlen_empty\022Dvalue is empty, which is not a valid IPv6 address with prefix length\032(!rules.ipv6_with_prefixlen || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['ip_prefix']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['ip_prefix']._serialized_options = b'\302H\322\001\nf\n\020string.ip_prefix\022\031must be a valid IP prefix\0327!rules.ip_prefix || this == \'\' || this.isIpPrefix(true)\nh\n\026string.ip_prefix_empty\022.value is empty, which is not a valid IP prefix\032\036!rules.ip_prefix || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['ipv4_prefix']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['ipv4_prefix']._serialized_options = b'\302H\341\001\no\n\022string.ipv4_prefix\022\033must be a valid IPv4 prefix\032!rules.host_and_port || this == \'\' || this.isHostAndPort(true)\ny\n\032string.host_and_port_empty\0227value is empty, which is not a valid host and port pair\032\"!rules.host_and_port || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['ulid']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['ulid']._serialized_options = b'\302H\331\001\n|\n\013string.ulid\022\024must be a valid ULID\032W!rules.ulid || this == \'\' || this.matches(\'^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$\')\nY\n\021string.ulid_empty\022)value is empty, which is not a valid ULID\032\031!rules.ulid || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['protobuf_fqn']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['protobuf_fqn']._serialized_options = b'\302H\267\002\n\257\001\n\023string.protobuf_fqn\022-must be a valid fully-qualified Protobuf name\032i!rules.protobuf_fqn || this == \'\' || this.matches(\'^[A-Za-z_][A-Za-z_0-9]*(\\\\.[A-Za-z_][A-Za-z_0-9]*)*$\')\n\202\001\n\031string.protobuf_fqn_empty\022Bvalue is empty, which is not a valid fully-qualified Protobuf name\032!!rules.protobuf_fqn || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['protobuf_dot_fqn']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['protobuf_dot_fqn']._serialized_options = b'\302H\360\002\n\315\001\n\027string.protobuf_dot_fqn\022@must be a valid fully-qualified Protobuf name with a leading dot\032p!rules.protobuf_dot_fqn || this == \'\' || this.matches(\'^\\\\.[A-Za-z_][A-Za-z_0-9]*(\\\\.[A-Za-z_][A-Za-z_0-9]*)*$\')\n\235\001\n\035string.protobuf_dot_fqn_empty\022Uvalue is empty, which is not a valid fully-qualified Protobuf name with a leading dot\032%!rules.protobuf_dot_fqn || this != \'\'' - _globals['_STRINGRULES'].fields_by_name['well_known_regex']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['well_known_regex']._serialized_options = b'\302H\341\004\n\352\001\n#string.well_known_regex.header_name\022 must be a valid HTTP header name\032\240\001rules.well_known_regex != 1 || this == \'\' || this.matches(!has(rules.strict) || rules.strict ?\'^:?[0-9a-zA-Z!#$%&\\\'*+-.^_|~\\x60]+$\' :\'^[^\\u0000\\u000A\\u000D]+$\')\n\215\001\n)string.well_known_regex.header_name_empty\0225value is empty, which is not a valid HTTP header name\032)rules.well_known_regex != 1 || this != \'\'\n\341\001\n$string.well_known_regex.header_value\022!must be a valid HTTP header value\032\225\001rules.well_known_regex != 2 || this.matches(!has(rules.strict) || rules.strict ?\'^[^\\u0000-\\u0008\\u000A-\\u001F\\u007F]*$\' :\'^[^\\u0000\\u000A\\u000D]*$\')' - _globals['_STRINGRULES'].fields_by_name['example']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016string.example\032\004true' - _globals['_BYTESRULES'].fields_by_name['const']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['const']._serialized_options = b'\302Hh\nf\n\013bytes.const\032Wthis != getField(rules, \'const\') ? \'must be %x\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['len']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['len']._serialized_options = b'\302H[\nY\n\tbytes.len\032Luint(this.size()) != rules.len ? \'must be %s bytes\'.format([rules.len]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['min_len']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['min_len']._serialized_options = b'\302Ho\nm\n\rbytes.min_len\032\\uint(this.size()) < rules.min_len ? \'must be at least %s bytes\'.format([rules.min_len]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['max_len']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['max_len']._serialized_options = b'\302Hn\nl\n\rbytes.max_len\032[uint(this.size()) > rules.max_len ? \'must be at most %s bytes\'.format([rules.max_len]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['pattern']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['pattern']._serialized_options = b'\302Hv\nt\n\rbytes.pattern\032c!string(this).matches(rules.pattern) ? \'must match regex pattern `%s`\'.format([rules.pattern]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['prefix']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['prefix']._serialized_options = b'\302Hh\nf\n\014bytes.prefix\032V!this.startsWith(rules.prefix) ? \'does not have prefix %x\'.format([rules.prefix]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['suffix']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['suffix']._serialized_options = b'\302Hf\nd\n\014bytes.suffix\032T!this.endsWith(rules.suffix) ? \'does not have suffix %x\'.format([rules.suffix]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['contains']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['contains']._serialized_options = b'\302Hh\nf\n\016bytes.contains\032T!this.contains(rules.contains) ? \'does not contain %x\'.format([rules.contains]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['in']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['in']._serialized_options = b'\302H\220\001\n\215\001\n\010bytes.in\032\200\001getField(rules, \'in\').size() > 0 && !(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['not_in']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['not_in']._serialized_options = b'\302H]\n[\n\014bytes.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['ip']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['ip']._serialized_options = b'\302H\322\001\nn\n\010bytes.ip\022\032must be a valid IP address\032F!rules.ip || this.size() == 0 || this.size() == 4 || this.size() == 16\n`\n\016bytes.ip_empty\022/value is empty, which is not a valid IP address\032\035!rules.ip || this.size() != 0' - _globals['_BYTESRULES'].fields_by_name['ipv4']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['ipv4']._serialized_options = b'\302H\311\001\n_\n\nbytes.ipv4\022\034must be a valid IPv4 address\0323!rules.ipv4 || this.size() == 0 || this.size() == 4\nf\n\020bytes.ipv4_empty\0221value is empty, which is not a valid IPv4 address\032\037!rules.ipv4 || this.size() != 0' - _globals['_BYTESRULES'].fields_by_name['ipv6']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['ipv6']._serialized_options = b'\302H\312\001\n`\n\nbytes.ipv6\022\034must be a valid IPv6 address\0324!rules.ipv6 || this.size() == 0 || this.size() == 16\nf\n\020bytes.ipv6_empty\0221value is empty, which is not a valid IPv6 address\032\037!rules.ipv6 || this.size() != 0' - _globals['_BYTESRULES'].fields_by_name['uuid']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['uuid']._serialized_options = b'\302H\272\001\nX\n\nbytes.uuid\022\024must be a valid UUID\0324!rules.uuid || this.size() == 0 || this.size() == 16\n^\n\020bytes.uuid_empty\022)value is empty, which is not a valid UUID\032\037!rules.uuid || this.size() != 0' - _globals['_BYTESRULES'].fields_by_name['example']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['example']._serialized_options = b'\302H\027\n\025\n\rbytes.example\032\004true' - _globals['_ENUMRULES'].fields_by_name['const']._loaded_options = None - _globals['_ENUMRULES'].fields_by_name['const']._serialized_options = b'\302Hj\nh\n\nenum.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_ENUMRULES'].fields_by_name['in']._loaded_options = None - _globals['_ENUMRULES'].fields_by_name['in']._serialized_options = b'\302Hi\ng\n\007enum.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_ENUMRULES'].fields_by_name['not_in']._loaded_options = None - _globals['_ENUMRULES'].fields_by_name['not_in']._serialized_options = b'\302H\\\nZ\n\013enum.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_ENUMRULES'].fields_by_name['example']._loaded_options = None - _globals['_ENUMRULES'].fields_by_name['example']._serialized_options = b'\302H\026\n\024\n\014enum.example\032\004true' - _globals['_REPEATEDRULES'].fields_by_name['min_items']._loaded_options = None - _globals['_REPEATEDRULES'].fields_by_name['min_items']._serialized_options = b'\302H\177\n}\n\022repeated.min_items\032guint(this.size()) < rules.min_items ? \'must contain at least %d item(s)\'.format([rules.min_items]) : \'\'' - _globals['_REPEATEDRULES'].fields_by_name['max_items']._loaded_options = None - _globals['_REPEATEDRULES'].fields_by_name['max_items']._serialized_options = b'\302H\204\001\n\201\001\n\022repeated.max_items\032kuint(this.size()) > rules.max_items ? \'must contain no more than %s item(s)\'.format([rules.max_items]) : \'\'' - _globals['_REPEATEDRULES'].fields_by_name['unique']._loaded_options = None - _globals['_REPEATEDRULES'].fields_by_name['unique']._serialized_options = b'\302H]\n[\n\017repeated.unique\022(repeated value must contain unique items\032\036!rules.unique || this.unique()' - _globals['_MAPRULES'].fields_by_name['min_pairs']._loaded_options = None - _globals['_MAPRULES'].fields_by_name['min_pairs']._serialized_options = b'\302Hy\nw\n\rmap.min_pairs\032fuint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\'' - _globals['_MAPRULES'].fields_by_name['max_pairs']._loaded_options = None - _globals['_MAPRULES'].fields_by_name['max_pairs']._serialized_options = b'\302Hx\nv\n\rmap.max_pairs\032euint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['const']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['const']._serialized_options = b'\302Hn\nl\n\016duration.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['lt']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['lt']._serialized_options = b'\302Hv\nt\n\013duration.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['lte']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['lte']._serialized_options = b'\302H\205\001\n\202\001\n\014duration.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['gt']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['gt']._serialized_options = b'\302H\365\006\nw\n\013duration.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\260\001\n\016duration.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\270\001\n\030duration.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\300\001\n\017duration.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\310\001\n\031duration.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['gte']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['gte']._serialized_options = b'\302H\300\007\n\205\001\n\014duration.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\277\001\n\017duration.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\307\001\n\031duration.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\317\001\n\020duration.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\327\001\n\032duration.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['in']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['in']._serialized_options = b'\302Hm\nk\n\013duration.in\032\\!(this in getField(rules, \'in\')) ? \'must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['not_in']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['not_in']._serialized_options = b'\302H`\n^\n\017duration.not_in\032Kthis in rules.not_in ? \'must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['example']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['example']._serialized_options = b'\302H\032\n\030\n\020duration.example\032\004true' - _globals['_FIELDMASKRULES'].fields_by_name['const']._loaded_options = None - _globals['_FIELDMASKRULES'].fields_by_name['const']._serialized_options = b'\302H\211\001\n\206\001\n\020field_mask.const\032rthis.paths != getField(rules, \'const\').paths ? \'must equal paths %s\'.format([getField(rules, \'const\').paths]) : \'\'' - _globals['_FIELDMASKRULES'].fields_by_name['in']._loaded_options = None - _globals['_FIELDMASKRULES'].fields_by_name['in']._serialized_options = b'\302H\302\001\n\277\001\n\rfield_mask.in\032\255\001!this.paths.all(p, p in getField(rules, \'in\') || getField(rules, \'in\').exists(f, p.startsWith(f+\'.\'))) ? \'must only contain paths in %s\'.format([getField(rules, \'in\')]) : \'\'' - _globals['_FIELDMASKRULES'].fields_by_name['not_in']._loaded_options = None - _globals['_FIELDMASKRULES'].fields_by_name['not_in']._serialized_options = b'\302H\330\001\n\325\001\n\021field_mask.not_in\032\277\001!this.paths.all(p, !(p in getField(rules, \'not_in\') || getField(rules, \'not_in\').exists(f, p.startsWith(f+\'.\')))) ? \'must not contain any paths in %s\'.format([getField(rules, \'not_in\')]) : \'\'' - _globals['_FIELDMASKRULES'].fields_by_name['example']._loaded_options = None - _globals['_FIELDMASKRULES'].fields_by_name['example']._serialized_options = b'\302H\034\n\032\n\022field_mask.example\032\004true' - _globals['_TIMESTAMPRULES'].fields_by_name['const']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['const']._serialized_options = b'\302Ho\nm\n\017timestamp.const\032Zthis != getField(rules, \'const\') ? \'must equal %s\'.format([getField(rules, \'const\')]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['lt']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['lt']._serialized_options = b'\302Hw\nu\n\014timestamp.lt\032e!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['lte']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['lte']._serialized_options = b'\302H\206\001\n\203\001\n\rtimestamp.lte\032r!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['lt_now']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['lt_now']._serialized_options = b'\302HQ\nO\n\020timestamp.lt_now\032;(rules.lt_now && this > now) ? \'must be less than now\' : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['gt']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['gt']._serialized_options = b'\302H\372\006\nx\n\014timestamp.gt\032h!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'must be greater than %s\'.format([rules.gt]) : \'\'\n\261\001\n\017timestamp.gt_lt\032\235\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\271\001\n\031timestamp.gt_lt_exclusive\032\233\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\301\001\n\020timestamp.gt_lte\032\254\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\311\001\n\032timestamp.gt_lte_exclusive\032\252\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['gte']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['gte']._serialized_options = b'\302H\305\007\n\206\001\n\rtimestamp.gte\032u!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\300\001\n\020timestamp.gte_lt\032\253\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\310\001\n\032timestamp.gte_lt_exclusive\032\251\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\320\001\n\021timestamp.gte_lte\032\272\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\330\001\n\033timestamp.gte_lte_exclusive\032\270\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['gt_now']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['gt_now']._serialized_options = b'\302HT\nR\n\020timestamp.gt_now\032>(rules.gt_now && this < now) ? \'must be greater than now\' : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['within']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['within']._serialized_options = b'\302H\201\001\n\177\n\020timestamp.within\032kthis < now-rules.within || this > now+rules.within ? \'must be within %s of now\'.format([rules.within]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['example']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['example']._serialized_options = b'\302H\033\n\031\n\021timestamp.example\032\004true' - _globals['_IGNORE']._serialized_start=54642 - _globals['_IGNORE']._serialized_end=54803 - _globals['_KNOWNREGEX']._serialized_start=54805 - _globals['_KNOWNREGEX']._serialized_end=54915 - _globals['_RULE']._serialized_start=178 - _globals['_RULE']._serialized_end=258 - _globals['_MESSAGERULES']._serialized_start=261 - _globals['_MESSAGERULES']._serialized_end=422 - _globals['_MESSAGEONEOFRULE']._serialized_start=424 - _globals['_MESSAGEONEOFRULE']._serialized_end=494 - _globals['_ONEOFRULES']._serialized_start=496 - _globals['_ONEOFRULES']._serialized_end=536 - _globals['_FIELDRULES']._serialized_start=539 - _globals['_FIELDRULES']._serialized_end=1918 - _globals['_PREDEFINEDRULES']._serialized_start=1920 - _globals['_PREDEFINEDRULES']._serialized_end=2010 - _globals['_FLOATRULES']._serialized_start=2013 - _globals['_FLOATRULES']._serialized_end=5003 - _globals['_DOUBLERULES']._serialized_start=5006 - _globals['_DOUBLERULES']._serialized_end=8014 - _globals['_INT32RULES']._serialized_start=8017 - _globals['_INT32RULES']._serialized_end=10671 - _globals['_INT64RULES']._serialized_start=10674 - _globals['_INT64RULES']._serialized_end=13328 - _globals['_UINT32RULES']._serialized_start=13331 - _globals['_UINT32RULES']._serialized_end=16003 - _globals['_UINT64RULES']._serialized_start=16006 - _globals['_UINT64RULES']._serialized_end=18678 - _globals['_SINT32RULES']._serialized_start=18681 - _globals['_SINT32RULES']._serialized_end=21353 - _globals['_SINT64RULES']._serialized_start=21356 - _globals['_SINT64RULES']._serialized_end=24028 - _globals['_FIXED32RULES']._serialized_start=24031 - _globals['_FIXED32RULES']._serialized_end=26720 - _globals['_FIXED64RULES']._serialized_start=26723 - _globals['_FIXED64RULES']._serialized_end=29412 - _globals['_SFIXED32RULES']._serialized_start=29415 - _globals['_SFIXED32RULES']._serialized_end=32122 - _globals['_SFIXED64RULES']._serialized_start=32125 - _globals['_SFIXED64RULES']._serialized_end=34832 - _globals['_BOOLRULES']._serialized_start=34835 - _globals['_BOOLRULES']._serialized_end=35044 - _globals['_STRINGRULES']._serialized_start=35047 - _globals['_STRINGRULES']._serialized_end=43190 - _globals['_BYTESRULES']._serialized_start=43193 - _globals['_BYTESRULES']._serialized_end=45571 - _globals['_ENUMRULES']._serialized_start=45574 - _globals['_ENUMRULES']._serialized_end=46064 - _globals['_REPEATEDRULES']._serialized_start=46067 - _globals['_REPEATEDRULES']._serialized_end=46595 - _globals['_MAPRULES']._serialized_start=46598 - _globals['_MAPRULES']._serialized_end=47026 - _globals['_ANYRULES']._serialized_start=47028 - _globals['_ANYRULES']._serialized_end=47077 - _globals['_DURATIONRULES']._serialized_start=47080 - _globals['_DURATIONRULES']._serialized_end=50004 - _globals['_FIELDMASKRULES']._serialized_start=50007 - _globals['_FIELDMASKRULES']._serialized_end=50781 - _globals['_TIMESTAMPRULES']._serialized_start=50784 - _globals['_TIMESTAMPRULES']._serialized_end=53832 - _globals['_VIOLATIONS']._serialized_start=53834 - _globals['_VIOLATIONS']._serialized_end=53903 - _globals['_VIOLATION']._serialized_start=53906 - _globals['_VIOLATION']._serialized_end=54103 - _globals['_FIELDPATH']._serialized_start=54105 - _globals['_FIELDPATH']._serialized_end=54176 - _globals['_FIELDPATHELEMENT']._serialized_start=54179 - _globals['_FIELDPATHELEMENT']._serialized_end=54639 -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/buf/validate/validate_pb2_grpc.py b/gen/python/buf/validate/validate_pb2_grpc.py deleted file mode 100644 index 2daafffe..00000000 --- a/gen/python/buf/validate/validate_pb2_grpc.py +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - diff --git a/gen/python/google/api/__pycache__/annotations_pb2.cpython-314.pyc b/gen/python/google/api/__pycache__/annotations_pb2.cpython-314.pyc deleted file mode 100644 index fc1fd1fa..00000000 Binary files a/gen/python/google/api/__pycache__/annotations_pb2.cpython-314.pyc and /dev/null differ diff --git a/gen/python/google/api/__pycache__/http_pb2.cpython-314.pyc b/gen/python/google/api/__pycache__/http_pb2.cpython-314.pyc deleted file mode 100644 index db256340..00000000 Binary files a/gen/python/google/api/__pycache__/http_pb2.cpython-314.pyc and /dev/null differ diff --git a/gen/python/google/api/annotations_pb2.py b/gen/python/google/api/annotations_pb2.py deleted file mode 100644 index 337ebfe9..00000000 --- a/gen/python/google/api/annotations_pb2.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: google/api/annotations.proto -# Protobuf Python Version: 5.27.3 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 27, - 3, - '', - 'google/api/annotations.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.api import http_pb2 as google_dot_api_dot_http__pb2 -from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1cgoogle/api/annotations.proto\x12\ngoogle.api\x1a\x15google/api/http.proto\x1a google/protobuf/descriptor.proto:K\n\x04http\x12\x1e.google.protobuf.MethodOptions\x18\xb0\xca\xbc\" \x01(\x0b\x32\x14.google.api.HttpRuleR\x04httpB\xae\x01\n\x0e\x63om.google.apiB\x10\x41nnotationsProtoP\x01ZAgoogle.golang.org/genproto/googleapis/api/annotations;annotations\xa2\x02\x03GAX\xaa\x02\nGoogle.Api\xca\x02\nGoogle\\Api\xe2\x02\x16Google\\Api\\GPBMetadata\xea\x02\x0bGoogle::Apib\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'google.api.annotations_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\016com.google.apiB\020AnnotationsProtoP\001ZAgoogle.golang.org/genproto/googleapis/api/annotations;annotations\242\002\003GAX\252\002\nGoogle.Api\312\002\nGoogle\\Api\342\002\026Google\\Api\\GPBMetadata\352\002\013Google::Api' -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/google/api/annotations_pb2_grpc.py b/gen/python/google/api/annotations_pb2_grpc.py deleted file mode 100644 index 2daafffe..00000000 --- a/gen/python/google/api/annotations_pb2_grpc.py +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - diff --git a/gen/python/google/api/http_pb2.py b/gen/python/google/api/http_pb2.py deleted file mode 100644 index 13e2b8d2..00000000 --- a/gen/python/google/api/http_pb2.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: google/api/http.proto -# Protobuf Python Version: 5.27.3 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 27, - 3, - '', - 'google/api/http.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15google/api/http.proto\x12\ngoogle.api\"y\n\x04Http\x12*\n\x05rules\x18\x01 \x03(\x0b\x32\x14.google.api.HttpRuleR\x05rules\x12\x45\n\x1f\x66ully_decode_reserved_expansion\x18\x02 \x01(\x08R\x1c\x66ullyDecodeReservedExpansion\"\xda\x02\n\x08HttpRule\x12\x1a\n\x08selector\x18\x01 \x01(\tR\x08selector\x12\x12\n\x03get\x18\x02 \x01(\tH\x00R\x03get\x12\x12\n\x03put\x18\x03 \x01(\tH\x00R\x03put\x12\x14\n\x04post\x18\x04 \x01(\tH\x00R\x04post\x12\x18\n\x06\x64\x65lete\x18\x05 \x01(\tH\x00R\x06\x64\x65lete\x12\x16\n\x05patch\x18\x06 \x01(\tH\x00R\x05patch\x12\x37\n\x06\x63ustom\x18\x08 \x01(\x0b\x32\x1d.google.api.CustomHttpPatternH\x00R\x06\x63ustom\x12\x12\n\x04\x62ody\x18\x07 \x01(\tR\x04\x62ody\x12#\n\rresponse_body\x18\x0c \x01(\tR\x0cresponseBody\x12\x45\n\x13\x61\x64\x64itional_bindings\x18\x0b \x03(\x0b\x32\x14.google.api.HttpRuleR\x12\x61\x64\x64itionalBindingsB\t\n\x07pattern\";\n\x11\x43ustomHttpPattern\x12\x12\n\x04kind\x18\x01 \x01(\tR\x04kind\x12\x12\n\x04path\x18\x02 \x01(\tR\x04pathB\xa7\x01\n\x0e\x63om.google.apiB\tHttpProtoP\x01ZAgoogle.golang.org/genproto/googleapis/api/annotations;annotations\xa2\x02\x03GAX\xaa\x02\nGoogle.Api\xca\x02\nGoogle\\Api\xe2\x02\x16Google\\Api\\GPBMetadata\xea\x02\x0bGoogle::Apib\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'google.api.http_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\016com.google.apiB\tHttpProtoP\001ZAgoogle.golang.org/genproto/googleapis/api/annotations;annotations\242\002\003GAX\252\002\nGoogle.Api\312\002\nGoogle\\Api\342\002\026Google\\Api\\GPBMetadata\352\002\013Google::Api' - _globals['_HTTP']._serialized_start=37 - _globals['_HTTP']._serialized_end=158 - _globals['_HTTPRULE']._serialized_start=161 - _globals['_HTTPRULE']._serialized_end=507 - _globals['_CUSTOMHTTPPATTERN']._serialized_start=509 - _globals['_CUSTOMHTTPPATTERN']._serialized_end=568 -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/google/api/http_pb2_grpc.py b/gen/python/google/api/http_pb2_grpc.py deleted file mode 100644 index 2daafffe..00000000 --- a/gen/python/google/api/http_pb2_grpc.py +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - diff --git a/gen/ts/authorizer/v1/admin_pb.ts b/gen/ts/authorizer/v1/admin_pb.ts index 47779e4b..a0f2e2c8 100644 --- a/gen/ts/authorizer/v1/admin_pb.ts +++ b/gen/ts/authorizer/v1/admin_pb.ts @@ -28,7 +28,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file authorizer/v1/admin.proto. */ export const file_authorizer_v1_admin: GenFile = /*@__PURE__*/ - fileDesc("ChlhdXRob3JpemVyL3YxL2FkbWluLnByb3RvEg1hdXRob3JpemVyLnYxIjIKEUFkbWluTG9naW5SZXF1ZXN0Eh0KDGFkbWluX3NlY3JldBgBIAEoCUIHukgEcgIQASIlChJBZG1pbkxvZ2luUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSIUChJBZG1pbkxvZ291dFJlcXVlc3QiJgoTQWRtaW5Mb2dvdXRSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIhUKE0FkbWluU2Vzc2lvblJlcXVlc3QiJwoUQWRtaW5TZXNzaW9uUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSISChBBZG1pbk1ldGFSZXF1ZXN0IkEKEUFkbWluTWV0YVJlc3BvbnNlEiwKCmFkbWluX21ldGEYASABKAsyGC5hdXRob3JpemVyLnYxLkFkbWluTWV0YSJ4CglBZG1pbk1ldGESDQoFcm9sZXMYASADKAkSFQoNZGVmYXVsdF9yb2xlcxgCIAMoCRIXCg9wcm90ZWN0ZWRfcm9sZXMYAyADKAkSLAokaXNfbXVsdGlfZmFjdG9yX2F1dGhfc2VydmljZV9lbmFibGVkGAQgASgIIlMKDFVzZXJzUmVxdWVzdBI0CgpwYWdpbmF0aW9uGAEgASgLMiAuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uUmVxdWVzdBINCgVxdWVyeRgCIAEoCSJiCg1Vc2Vyc1Jlc3BvbnNlEiIKBXVzZXJzGAEgAygLMhMuYXV0aG9yaXplci52MS5Vc2VyEi0KCnBhZ2luYXRpb24YAiABKAsyGS5hdXRob3JpemVyLnYxLlBhZ2luYXRpb24iKAoLVXNlclJlcXVlc3QSCgoCaWQYASABKAkSDQoFZW1haWwYAiABKAkiMQoMVXNlclJlc3BvbnNlEiEKBHVzZXIYASABKAsyEy5hdXRob3JpemVyLnYxLlVzZXIikwUKEVVwZGF0ZVVzZXJSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABEhIKBWVtYWlsGAIgASgJSACIAQESGwoOZW1haWxfdmVyaWZpZWQYAyABKAhIAYgBARIXCgpnaXZlbl9uYW1lGAQgASgJSAKIAQESGAoLZmFtaWx5X25hbWUYBSABKAlIA4gBARIYCgttaWRkbGVfbmFtZRgGIAEoCUgEiAEBEhUKCG5pY2tuYW1lGAcgASgJSAWIAQESEwoGZ2VuZGVyGAggASgJSAaIAQESFgoJYmlydGhkYXRlGAkgASgJSAeIAQESGQoMcGhvbmVfbnVtYmVyGAogASgJSAiIAQESIgoVcGhvbmVfbnVtYmVyX3ZlcmlmaWVkGAsgASgISAmIAQESFAoHcGljdHVyZRgMIAEoCUgKiAEBEg0KBXJvbGVzGA0gAygJEikKHGlzX211bHRpX2ZhY3Rvcl9hdXRoX2VuYWJsZWQYDiABKAhIC4gBARIoCghhcHBfZGF0YRgPIAEoCzIWLmF1dGhvcml6ZXIudjEuQXBwRGF0YRIWCglyZXNldF9tZmEYECABKAhIDIgBAUIICgZfZW1haWxCEQoPX2VtYWlsX3ZlcmlmaWVkQg0KC19naXZlbl9uYW1lQg4KDF9mYW1pbHlfbmFtZUIOCgxfbWlkZGxlX25hbWVCCwoJX25pY2tuYW1lQgkKB19nZW5kZXJCDAoKX2JpcnRoZGF0ZUIPCg1fcGhvbmVfbnVtYmVyQhgKFl9waG9uZV9udW1iZXJfdmVyaWZpZWRCCgoIX3BpY3R1cmVCHwodX2lzX211bHRpX2ZhY3Rvcl9hdXRoX2VuYWJsZWRCDAoKX3Jlc2V0X21mYSI3ChJVcGRhdGVVc2VyUmVzcG9uc2USIQoEdXNlchgBIAEoCzITLmF1dGhvcml6ZXIudjEuVXNlciIrChFEZWxldGVVc2VyUmVxdWVzdBIWCgVlbWFpbBgBIAEoCUIHukgEcgIQASIlChJEZWxldGVVc2VyUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSJTChtWZXJpZmljYXRpb25SZXF1ZXN0c1JlcXVlc3QSNAoKcGFnaW5hdGlvbhgBIAEoCzIgLmF1dGhvcml6ZXIudjEuUGFnaW5hdGlvblJlcXVlc3QikAEKHFZlcmlmaWNhdGlvblJlcXVlc3RzUmVzcG9uc2USQQoVdmVyaWZpY2F0aW9uX3JlcXVlc3RzGAEgAygLMiIuYXV0aG9yaXplci52MS5WZXJpZmljYXRpb25SZXF1ZXN0Ei0KCnBhZ2luYXRpb24YAiABKAsyGS5hdXRob3JpemVyLnYxLlBhZ2luYXRpb24isQEKE1ZlcmlmaWNhdGlvblJlcXVlc3QSCgoCaWQYASABKAkSEgoKaWRlbnRpZmllchgCIAEoCRINCgV0b2tlbhgDIAEoCRINCgVlbWFpbBgEIAEoCRIPCgdleHBpcmVzGAUgASgDEhIKCmNyZWF0ZWRfYXQYBiABKAMSEgoKdXBkYXRlZF9hdBgHIAEoAxINCgVub25jZRgIIAEoCRIUCgxyZWRpcmVjdF91cmkYCSABKAkiLwoTUmV2b2tlQWNjZXNzUmVxdWVzdBIYCgd1c2VyX2lkGAEgASgJQge6SARyAhABIicKFFJldm9rZUFjY2Vzc1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiLwoTRW5hYmxlQWNjZXNzUmVxdWVzdBIYCgd1c2VyX2lkGAEgASgJQge6SARyAhABIicKFEVuYWJsZUFjY2Vzc1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiUgoUSW52aXRlTWVtYmVyc1JlcXVlc3QSDgoGZW1haWxzGAEgAygJEhkKDHJlZGlyZWN0X3VyaRgCIAEoCUgAiAEBQg8KDV9yZWRpcmVjdF91cmkiTAoVSW52aXRlTWVtYmVyc1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkSIgoFdXNlcnMYAiADKAsyEy5hdXRob3JpemVyLnYxLlVzZXIiuAEKB1dlYmhvb2sSCgoCaWQYASABKAkSEgoKZXZlbnRfbmFtZRgCIAEoCRIZChFldmVudF9kZXNjcmlwdGlvbhgDIAEoCRIQCghlbmRwb2ludBgEIAEoCRIPCgdlbmFibGVkGAUgASgIEicKB2hlYWRlcnMYBiABKAsyFi5hdXRob3JpemVyLnYxLkFwcERhdGESEgoKY3JlYXRlZF9hdBgHIAEoAxISCgp1cGRhdGVkX2F0GAggASgDIowBCgpXZWJob29rTG9nEgoKAmlkGAEgASgJEhMKC2h0dHBfc3RhdHVzGAIgASgDEhAKCHJlc3BvbnNlGAMgASgJEg8KB3JlcXVlc3QYBCABKAkSEgoKd2ViaG9va19pZBgFIAEoCRISCgpjcmVhdGVkX2F0GAYgASgDEhIKCnVwZGF0ZWRfYXQYByABKAMiuwEKEUFkZFdlYmhvb2tSZXF1ZXN0EhsKCmV2ZW50X25hbWUYASABKAlCB7pIBHICEAESHgoRZXZlbnRfZGVzY3JpcHRpb24YAiABKAlIAIgBARIZCghlbmRwb2ludBgDIAEoCUIHukgEcgIQARIPCgdlbmFibGVkGAQgASgIEicKB2hlYWRlcnMYBSABKAsyFi5hdXRob3JpemVyLnYxLkFwcERhdGFCFAoSX2V2ZW50X2Rlc2NyaXB0aW9uIiUKEkFkZFdlYmhvb2tSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIvgBChRVcGRhdGVXZWJob29rUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQARIXCgpldmVudF9uYW1lGAIgASgJSACIAQESHgoRZXZlbnRfZGVzY3JpcHRpb24YAyABKAlIAYgBARIVCghlbmRwb2ludBgEIAEoCUgCiAEBEhQKB2VuYWJsZWQYBSABKAhIA4gBARInCgdoZWFkZXJzGAYgASgLMhYuYXV0aG9yaXplci52MS5BcHBEYXRhQg0KC19ldmVudF9uYW1lQhQKEl9ldmVudF9kZXNjcmlwdGlvbkILCglfZW5kcG9pbnRCCgoIX2VuYWJsZWQiKAoVVXBkYXRlV2ViaG9va1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiKwoURGVsZXRlV2ViaG9va1JlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiKAoVRGVsZXRlV2ViaG9va1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiKAoRR2V0V2ViaG9va1JlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiPQoSR2V0V2ViaG9va1Jlc3BvbnNlEicKB3dlYmhvb2sYASABKAsyFi5hdXRob3JpemVyLnYxLldlYmhvb2siRwoPV2ViaG9va3NSZXF1ZXN0EjQKCnBhZ2luYXRpb24YASABKAsyIC5hdXRob3JpemVyLnYxLlBhZ2luYXRpb25SZXF1ZXN0ImsKEFdlYmhvb2tzUmVzcG9uc2USKAoId2ViaG9va3MYASADKAsyFi5hdXRob3JpemVyLnYxLldlYmhvb2sSLQoKcGFnaW5hdGlvbhgCIAEoCzIZLmF1dGhvcml6ZXIudjEuUGFnaW5hdGlvbiJyChJXZWJob29rTG9nc1JlcXVlc3QSNAoKcGFnaW5hdGlvbhgBIAEoCzIgLmF1dGhvcml6ZXIudjEuUGFnaW5hdGlvblJlcXVlc3QSFwoKd2ViaG9va19pZBgCIAEoCUgAiAEBQg0KC193ZWJob29rX2lkInUKE1dlYmhvb2tMb2dzUmVzcG9uc2USLwoMd2ViaG9va19sb2dzGAEgAygLMhkuYXV0aG9yaXplci52MS5XZWJob29rTG9nEi0KCnBhZ2luYXRpb24YAiABKAsyGS5hdXRob3JpemVyLnYxLlBhZ2luYXRpb24irAEKE1Rlc3RFbmRwb2ludFJlcXVlc3QSGQoIZW5kcG9pbnQYASABKAlCB7pIBHICEAESGwoKZXZlbnRfbmFtZRgCIAEoCUIHukgEcgIQARIeChFldmVudF9kZXNjcmlwdGlvbhgDIAEoCUgAiAEBEicKB2hlYWRlcnMYBCABKAsyFi5hdXRob3JpemVyLnYxLkFwcERhdGFCFAoSX2V2ZW50X2Rlc2NyaXB0aW9uIj0KFFRlc3RFbmRwb2ludFJlc3BvbnNlEhMKC2h0dHBfc3RhdHVzGAEgASgDEhAKCHJlc3BvbnNlGAIgASgJIooBCg1FbWFpbFRlbXBsYXRlEgoKAmlkGAEgASgJEhIKCmV2ZW50X25hbWUYAiABKAkSEAoIdGVtcGxhdGUYAyABKAkSDgoGZGVzaWduGAQgASgJEg8KB3N1YmplY3QYBSABKAkSEgoKY3JlYXRlZF9hdBgGIAEoAxISCgp1cGRhdGVkX2F0GAcgASgDIosBChdBZGRFbWFpbFRlbXBsYXRlUmVxdWVzdBIbCgpldmVudF9uYW1lGAEgASgJQge6SARyAhABEhgKB3N1YmplY3QYAiABKAlCB7pIBHICEAESGQoIdGVtcGxhdGUYAyABKAlCB7pIBHICEAESEwoGZGVzaWduGAQgASgJSACIAQFCCQoHX2Rlc2lnbiIrChhBZGRFbWFpbFRlbXBsYXRlUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSK/AQoaVXBkYXRlRW1haWxUZW1wbGF0ZVJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAESFwoKZXZlbnRfbmFtZRgCIAEoCUgAiAEBEhUKCHRlbXBsYXRlGAMgASgJSAGIAQESFAoHc3ViamVjdBgEIAEoCUgCiAEBEhMKBmRlc2lnbhgFIAEoCUgDiAEBQg0KC19ldmVudF9uYW1lQgsKCV90ZW1wbGF0ZUIKCghfc3ViamVjdEIJCgdfZGVzaWduIi4KG1VwZGF0ZUVtYWlsVGVtcGxhdGVSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIjEKGkRlbGV0ZUVtYWlsVGVtcGxhdGVSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIi4KG0RlbGV0ZUVtYWlsVGVtcGxhdGVSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIk0KFUVtYWlsVGVtcGxhdGVzUmVxdWVzdBI0CgpwYWdpbmF0aW9uGAEgASgLMiAuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uUmVxdWVzdCJ+ChZFbWFpbFRlbXBsYXRlc1Jlc3BvbnNlEjUKD2VtYWlsX3RlbXBsYXRlcxgBIAMoCzIcLmF1dGhvcml6ZXIudjEuRW1haWxUZW1wbGF0ZRItCgpwYWdpbmF0aW9uGAIgASgLMhkuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uItsBCghBdWRpdExvZxIKCgJpZBgBIAEoCRIQCghhY3Rvcl9pZBgCIAEoCRISCgphY3Rvcl90eXBlGAMgASgJEhMKC2FjdG9yX2VtYWlsGAQgASgJEg4KBmFjdGlvbhgFIAEoCRIVCg1yZXNvdXJjZV90eXBlGAYgASgJEhMKC3Jlc291cmNlX2lkGAcgASgJEhIKCmlwX2FkZHJlc3MYCCABKAkSEgoKdXNlcl9hZ2VudBgJIAEoCRIQCghtZXRhZGF0YRgKIAEoCRISCgpjcmVhdGVkX2F0GAsgASgDIsACChBBdWRpdExvZ3NSZXF1ZXN0EjQKCnBhZ2luYXRpb24YASABKAsyIC5hdXRob3JpemVyLnYxLlBhZ2luYXRpb25SZXF1ZXN0EhMKBmFjdGlvbhgCIAEoCUgAiAEBEhUKCGFjdG9yX2lkGAMgASgJSAGIAQESGgoNcmVzb3VyY2VfdHlwZRgEIAEoCUgCiAEBEhgKC3Jlc291cmNlX2lkGAUgASgJSAOIAQESGwoOZnJvbV90aW1lc3RhbXAYBiABKANIBIgBARIZCgx0b190aW1lc3RhbXAYByABKANIBYgBAUIJCgdfYWN0aW9uQgsKCV9hY3Rvcl9pZEIQCg5fcmVzb3VyY2VfdHlwZUIOCgxfcmVzb3VyY2VfaWRCEQoPX2Zyb21fdGltZXN0YW1wQg8KDV90b190aW1lc3RhbXAibwoRQXVkaXRMb2dzUmVzcG9uc2USKwoKYXVkaXRfbG9ncxgBIAMoCzIXLmF1dGhvcml6ZXIudjEuQXVkaXRMb2cSLQoKcGFnaW5hdGlvbhgCIAEoCzIZLmF1dGhvcml6ZXIudjEuUGFnaW5hdGlvbiIjCghGZ2FNb2RlbBIKCgJpZBgBIAEoCRILCgNkc2wYAiABKAkiOgoIRmdhVHVwbGUSDAoEdXNlchgBIAEoCRIQCghyZWxhdGlvbhgCIAEoCRIOCgZvYmplY3QYAyABKAkiFAoSRmdhR2V0TW9kZWxSZXF1ZXN0Ij0KE0ZnYUdldE1vZGVsUmVzcG9uc2USJgoFbW9kZWwYASABKAsyFy5hdXRob3JpemVyLnYxLkZnYU1vZGVsIiwKFEZnYVdyaXRlTW9kZWxSZXF1ZXN0EhQKA2RzbBgBIAEoCUIHukgEcgIQASI/ChVGZ2FXcml0ZU1vZGVsUmVzcG9uc2USJgoFbW9kZWwYASABKAsyFy5hdXRob3JpemVyLnYxLkZnYU1vZGVsIkUKFUZnYVdyaXRlVHVwbGVzUmVxdWVzdBIsCgZ0dXBsZXMYASADKAsyHC5hdXRob3JpemVyLnYxLkZnYVR1cGxlSW5wdXQiKQoWRmdhV3JpdGVUdXBsZXNSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIkYKFkZnYURlbGV0ZVR1cGxlc1JlcXVlc3QSLAoGdHVwbGVzGAEgAygLMhwuYXV0aG9yaXplci52MS5GZ2FUdXBsZUlucHV0IioKF0ZnYURlbGV0ZVR1cGxlc1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAki1AEKFEZnYVJlYWRUdXBsZXNSZXF1ZXN0EhEKBHVzZXIYASABKAlIAIgBARIVCghyZWxhdGlvbhgCIAEoCUgBiAEBEhMKBm9iamVjdBgDIAEoCUgCiAEBEhYKCXBhZ2Vfc2l6ZRgEIAEoA0gDiAEBEh8KEmNvbnRpbnVhdGlvbl90b2tlbhgFIAEoCUgEiAEBQgcKBV91c2VyQgsKCV9yZWxhdGlvbkIJCgdfb2JqZWN0QgwKCl9wYWdlX3NpemVCFQoTX2NvbnRpbnVhdGlvbl90b2tlbiJ4ChVGZ2FSZWFkVHVwbGVzUmVzcG9uc2USJwoGdHVwbGVzGAEgAygLMhcuYXV0aG9yaXplci52MS5GZ2FUdXBsZRIfChJjb250aW51YXRpb25fdG9rZW4YAiABKAlIAIgBAUIVChNfY29udGludWF0aW9uX3Rva2VuImUKE0ZnYUxpc3RVc2Vyc1JlcXVlc3QSFwoGb2JqZWN0GAEgASgJQge6SARyAhABEhkKCHJlbGF0aW9uGAIgASgJQge6SARyAhABEhoKCXVzZXJfdHlwZRgDIAEoCUIHukgEcgIQASIlChRGZ2FMaXN0VXNlcnNSZXNwb25zZRINCgV1c2VycxgBIAMoCSJGChBGZ2FFeHBhbmRSZXF1ZXN0EhkKCHJlbGF0aW9uGAEgASgJQge6SARyAhABEhcKBm9iamVjdBgCIAEoCUIHukgEcgIQASIhChFGZ2FFeHBhbmRSZXNwb25zZRIMCgR0cmVlGAEgASgJIhEKD0ZnYVJlc2V0UmVxdWVzdCIjChBGZ2FSZXNldFJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkinQEKBkNsaWVudBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhYKDmFsbG93ZWRfc2NvcGVzGAQgAygJEhEKCWlzX2FjdGl2ZRgFIAEoCBISCgpjcmVhdGVkX2F0GAYgASgDEhIKCnVwZGF0ZWRfYXQYByABKAMSEQoJY2xpZW50X2lkGAggASgJIngKE0NyZWF0ZUNsaWVudFJlcXVlc3QSFQoEbmFtZRgBIAEoCUIHukgEcgIQARIYCgtkZXNjcmlwdGlvbhgCIAEoCUgAiAEBEiAKDmFsbG93ZWRfc2NvcGVzGAMgAygJQgi6SAWSAQIIAUIOCgxfZGVzY3JpcHRpb24iVAoUQ3JlYXRlQ2xpZW50UmVzcG9uc2USJQoGY2xpZW50GAEgASgLMhUuYXV0aG9yaXplci52MS5DbGllbnQSFQoNY2xpZW50X3NlY3JldBgCIAEoCSKuAQoTVXBkYXRlQ2xpZW50UmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQARIRCgRuYW1lGAIgASgJSACIAQESGAoLZGVzY3JpcHRpb24YAyABKAlIAYgBARIWCg5hbGxvd2VkX3Njb3BlcxgEIAMoCRIWCglpc19hY3RpdmUYBSABKAhIAogBAUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CDAoKX2lzX2FjdGl2ZSI9ChRVcGRhdGVDbGllbnRSZXNwb25zZRIlCgZjbGllbnQYASABKAsyFS5hdXRob3JpemVyLnYxLkNsaWVudCIqChNEZWxldGVDbGllbnRSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIicKFERlbGV0ZUNsaWVudFJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiMAoZUm90YXRlQ2xpZW50U2VjcmV0UmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQASInChBHZXRDbGllbnRSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIjoKEUdldENsaWVudFJlc3BvbnNlEiUKBmNsaWVudBgBIAEoCzIVLmF1dGhvcml6ZXIudjEuQ2xpZW50IkYKDkNsaWVudHNSZXF1ZXN0EjQKCnBhZ2luYXRpb24YASABKAsyIC5hdXRob3JpemVyLnYxLlBhZ2luYXRpb25SZXF1ZXN0ImgKD0NsaWVudHNSZXNwb25zZRImCgdjbGllbnRzGAEgAygLMhUuYXV0aG9yaXplci52MS5DbGllbnQSLQoKcGFnaW5hdGlvbhgCIAEoCzIZLmF1dGhvcml6ZXIudjEuUGFnaW5hdGlvbiKAAwoNVHJ1c3RlZElzc3VlchIKCgJpZBgBIAEoCRIaChJzZXJ2aWNlX2FjY291bnRfaWQYAiABKAkSDAoEbmFtZRgDIAEoCRISCgppc3N1ZXJfdXJsGAQgASgJEhcKD2tleV9zb3VyY2VfdHlwZRgFIAEoCRIQCghqd2tzX3VybBgGIAEoCRIUCgxleHBlY3RlZF9hdWQYByABKAkSFQoNc3ViamVjdF9jbGFpbRgIIAEoCRITCgtpc3N1ZXJfdHlwZRgJIAEoCRIRCglpc19hY3RpdmUYCiABKAgSIwobc3BpZmZlX3JlZnJlc2hfaGludF9zZWNvbmRzGAsgASgDEhIKCmNyZWF0ZWRfYXQYDCABKAMSEgoKdXBkYXRlZF9hdBgNIAEoAxIYChBhbGxvd2VkX3N1YmplY3RzGA4gASgJEhsKE2VuYWJsZV90b2tlbl9yZXZpZXcYDyABKAgSIQoZa3ViZXJuZXRlc19hcGlfc2VydmVyX3VybBgQIAEoCSKhBAoXQWRkVHJ1c3RlZElzc3VlclJlcXVlc3QSIwoSc2VydmljZV9hY2NvdW50X2lkGAEgASgJQge6SARyAhABEhUKBG5hbWUYAiABKAlCB7pIBHICEAESGwoKaXNzdWVyX3VybBgDIAEoCUIHukgEcgIQARIgCg9rZXlfc291cmNlX3R5cGUYBCABKAlCB7pIBHICEAESFQoIandrc191cmwYBSABKAlIAIgBARIdCgxleHBlY3RlZF9hdWQYBiABKAlCB7pIBHICEAESGgoNc3ViamVjdF9jbGFpbRgHIAEoCUgBiAEBEhwKC2lzc3Vlcl90eXBlGAggASgJQge6SARyAhABEigKG3NwaWZmZV9yZWZyZXNoX2hpbnRfc2Vjb25kcxgJIAEoA0gCiAEBEh0KEGFsbG93ZWRfc3ViamVjdHMYCiABKAlIA4gBARIgChNlbmFibGVfdG9rZW5fcmV2aWV3GAsgASgISASIAQESJgoZa3ViZXJuZXRlc19hcGlfc2VydmVyX3VybBgMIAEoCUgFiAEBQgsKCV9qd2tzX3VybEIQCg5fc3ViamVjdF9jbGFpbUIeChxfc3BpZmZlX3JlZnJlc2hfaGludF9zZWNvbmRzQhMKEV9hbGxvd2VkX3N1YmplY3RzQhYKFF9lbmFibGVfdG9rZW5fcmV2aWV3QhwKGl9rdWJlcm5ldGVzX2FwaV9zZXJ2ZXJfdXJsIlAKGEFkZFRydXN0ZWRJc3N1ZXJSZXNwb25zZRI0Cg50cnVzdGVkX2lzc3VlchgBIAEoCzIcLmF1dGhvcml6ZXIudjEuVHJ1c3RlZElzc3VlciLBAwoaVXBkYXRlVHJ1c3RlZElzc3VlclJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAESEQoEbmFtZRgCIAEoCUgAiAEBEhUKCGp3a3NfdXJsGAMgASgJSAGIAQESGQoMZXhwZWN0ZWRfYXVkGAQgASgJSAKIAQESFgoJaXNfYWN0aXZlGAUgASgISAOIAQESKAobc3BpZmZlX3JlZnJlc2hfaGludF9zZWNvbmRzGAYgASgDSASIAQESHQoQYWxsb3dlZF9zdWJqZWN0cxgHIAEoCUgFiAEBEiAKE2VuYWJsZV90b2tlbl9yZXZpZXcYCCABKAhIBogBARImChlrdWJlcm5ldGVzX2FwaV9zZXJ2ZXJfdXJsGAkgASgJSAeIAQFCBwoFX25hbWVCCwoJX2p3a3NfdXJsQg8KDV9leHBlY3RlZF9hdWRCDAoKX2lzX2FjdGl2ZUIeChxfc3BpZmZlX3JlZnJlc2hfaGludF9zZWNvbmRzQhMKEV9hbGxvd2VkX3N1YmplY3RzQhYKFF9lbmFibGVfdG9rZW5fcmV2aWV3QhwKGl9rdWJlcm5ldGVzX2FwaV9zZXJ2ZXJfdXJsIlMKG1VwZGF0ZVRydXN0ZWRJc3N1ZXJSZXNwb25zZRI0Cg50cnVzdGVkX2lzc3VlchgBIAEoCzIcLmF1dGhvcml6ZXIudjEuVHJ1c3RlZElzc3VlciIxChpEZWxldGVUcnVzdGVkSXNzdWVyUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQASIuChtEZWxldGVUcnVzdGVkSXNzdWVyUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSIuChdHZXRUcnVzdGVkSXNzdWVyUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQASJQChhHZXRUcnVzdGVkSXNzdWVyUmVzcG9uc2USNAoOdHJ1c3RlZF9pc3N1ZXIYASABKAsyHC5hdXRob3JpemVyLnYxLlRydXN0ZWRJc3N1ZXIihQEKFVRydXN0ZWRJc3N1ZXJzUmVxdWVzdBI0CgpwYWdpbmF0aW9uGAEgASgLMiAuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uUmVxdWVzdBIfChJzZXJ2aWNlX2FjY291bnRfaWQYAiABKAlIAIgBAUIVChNfc2VydmljZV9hY2NvdW50X2lkIn4KFlRydXN0ZWRJc3N1ZXJzUmVzcG9uc2USNQoPdHJ1c3RlZF9pc3N1ZXJzGAEgAygLMhwuYXV0aG9yaXplci52MS5UcnVzdGVkSXNzdWVyEi0KCnBhZ2luYXRpb24YAiABKAsyGS5hdXRob3JpemVyLnYxLlBhZ2luYXRpb24igwIKE1NhbWxTZXJ2aWNlUHJvdmlkZXISCgoCaWQYASABKAkSDgoGb3JnX2lkGAIgASgJEgwKBG5hbWUYAyABKAkSEQoJZW50aXR5X2lkGAQgASgJEg8KB2Fjc191cmwYBSABKAkSEwoLc3BfY2VydF9wZW0YBiABKAkSFgoObmFtZV9pZF9mb3JtYXQYByABKAkSGQoRbWFwcGVkX2F0dHJpYnV0ZXMYCCABKAkSGwoTYWxsb3dfaWRwX2luaXRpYXRlZBgJIAEoCBIRCglpc19hY3RpdmUYCiABKAgSEgoKY3JlYXRlZF9hdBgLIAEoAxISCgp1cGRhdGVkX2F0GAwgASgDIoUBCgpTYW1sSWRwS2V5EgoKAmlkGAEgASgJEg4KBm9yZ19pZBgCIAEoCRIQCghjZXJ0X3BlbRgDIAEoCRIRCglhbGdvcml0aG0YBCABKAkSDgoGc3RhdHVzGAUgASgJEhIKCmNyZWF0ZWRfYXQYBiABKAMSEgoKdXBkYXRlZF9hdBgHIAEoAyJUChlTYW1sU3BNZXRhZGF0YVBhcnNlUmVzdWx0EhEKCWVudGl0eV9pZBgBIAEoCRIPCgdhY3NfdXJsGAIgASgJEhMKC2NlcnRpZmljYXRlGAMgASgJItICCiBDcmVhdGVTYW1sU2VydmljZVByb3ZpZGVyUmVxdWVzdBIXCgZvcmdfaWQYASABKAlCB7pIBHICEAESFQoEbmFtZRgCIAEoCUIHukgEcgIQARIaCgllbnRpdHlfaWQYAyABKAlCB7pIBHICEAESGAoHYWNzX3VybBgEIAEoCUIHukgEcgIQARIYCgtzcF9jZXJ0X3BlbRgFIAEoCUgAiAEBEhsKDm5hbWVfaWRfZm9ybWF0GAYgASgJSAGIAQESHgoRbWFwcGVkX2F0dHJpYnV0ZXMYByABKAlIAogBARIgChNhbGxvd19pZHBfaW5pdGlhdGVkGAggASgISAOIAQFCDgoMX3NwX2NlcnRfcGVtQhEKD19uYW1lX2lkX2Zvcm1hdEIUChJfbWFwcGVkX2F0dHJpYnV0ZXNCFgoUX2FsbG93X2lkcF9pbml0aWF0ZWQiZgohQ3JlYXRlU2FtbFNlcnZpY2VQcm92aWRlclJlc3BvbnNlEkEKFXNhbWxfc2VydmljZV9wcm92aWRlchgBIAEoCzIiLmF1dGhvcml6ZXIudjEuU2FtbFNlcnZpY2VQcm92aWRlciKLAwogVXBkYXRlU2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAESEQoEbmFtZRgCIAEoCUgAiAEBEhYKCWVudGl0eV9pZBgDIAEoCUgBiAEBEhQKB2Fjc191cmwYBCABKAlIAogBARIYCgtzcF9jZXJ0X3BlbRgFIAEoCUgDiAEBEhsKDm5hbWVfaWRfZm9ybWF0GAYgASgJSASIAQESHgoRbWFwcGVkX2F0dHJpYnV0ZXMYByABKAlIBYgBARIgChNhbGxvd19pZHBfaW5pdGlhdGVkGAggASgISAaIAQESFgoJaXNfYWN0aXZlGAkgASgISAeIAQFCBwoFX25hbWVCDAoKX2VudGl0eV9pZEIKCghfYWNzX3VybEIOCgxfc3BfY2VydF9wZW1CEQoPX25hbWVfaWRfZm9ybWF0QhQKEl9tYXBwZWRfYXR0cmlidXRlc0IWChRfYWxsb3dfaWRwX2luaXRpYXRlZEIMCgpfaXNfYWN0aXZlImYKIVVwZGF0ZVNhbWxTZXJ2aWNlUHJvdmlkZXJSZXNwb25zZRJBChVzYW1sX3NlcnZpY2VfcHJvdmlkZXIYASABKAsyIi5hdXRob3JpemVyLnYxLlNhbWxTZXJ2aWNlUHJvdmlkZXIiNwogRGVsZXRlU2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiNAohRGVsZXRlU2FtbFNlcnZpY2VQcm92aWRlclJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiNAodR2V0U2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiYwoeR2V0U2FtbFNlcnZpY2VQcm92aWRlclJlc3BvbnNlEkEKFXNhbWxfc2VydmljZV9wcm92aWRlchgBIAEoCzIiLmF1dGhvcml6ZXIudjEuU2FtbFNlcnZpY2VQcm92aWRlciJwCh9MaXN0U2FtbFNlcnZpY2VQcm92aWRlcnNSZXF1ZXN0EhcKBm9yZ19pZBgBIAEoCUIHukgEcgIQARI0CgpwYWdpbmF0aW9uGAIgASgLMiAuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uUmVxdWVzdCKVAQogTGlzdFNhbWxTZXJ2aWNlUHJvdmlkZXJzUmVzcG9uc2USQgoWc2FtbF9zZXJ2aWNlX3Byb3ZpZGVycxgBIAMoCzIiLmF1dGhvcml6ZXIudjEuU2FtbFNlcnZpY2VQcm92aWRlchItCgpwYWdpbmF0aW9uGAIgASgLMhkuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uIjMKGFJvdGF0ZVNhbWxJZHBDZXJ0UmVxdWVzdBIXCgZvcmdfaWQYASABKAlCB7pIBHICEAEiTAoZUm90YXRlU2FtbElkcENlcnRSZXNwb25zZRIvCgxzYW1sX2lkcF9rZXkYASABKAsyGS5hdXRob3JpemVyLnYxLlNhbWxJZHBLZXkiLgoXUmV0aXJlU2FtbElkcEtleVJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiKwoYUmV0aXJlU2FtbElkcEtleVJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiMQoWTGlzdFNhbWxJZHBLZXlzUmVxdWVzdBIXCgZvcmdfaWQYASABKAlCB7pIBHICEAEiSwoXTGlzdFNhbWxJZHBLZXlzUmVzcG9uc2USMAoNc2FtbF9pZHBfa2V5cxgBIAMoCzIZLmF1dGhvcml6ZXIudjEuU2FtbElkcEtleSI8ChtJbXBvcnRTYW1sU3BNZXRhZGF0YVJlcXVlc3QSHQoMbWV0YWRhdGFfeG1sGAEgASgJQge6SARyAhABIlgKHEltcG9ydFNhbWxTcE1ldGFkYXRhUmVzcG9uc2USOAoGcmVzdWx0GAEgASgLMiguYXV0aG9yaXplci52MS5TYW1sU3BNZXRhZGF0YVBhcnNlUmVzdWx0Mt41ChZBdXRob3JpemVyQWRtaW5TZXJ2aWNlEnEKCkFkbWluTG9naW4SIC5hdXRob3JpemVyLnYxLkFkbWluTG9naW5SZXF1ZXN0GiEuYXV0aG9yaXplci52MS5BZG1pbkxvZ2luUmVzcG9uc2UiHqC1GAGC0+STAhQ6ASoiDy92MS9hZG1pbi9sb2dpbhJuCgtBZG1pbkxvZ291dBIhLmF1dGhvcml6ZXIudjEuQWRtaW5Mb2dvdXRSZXF1ZXN0GiIuYXV0aG9yaXplci52MS5BZG1pbkxvZ291dFJlc3BvbnNlIhiC0+STAhIiEC92MS9hZG1pbi9sb2dvdXQScgoMQWRtaW5TZXNzaW9uEiIuYXV0aG9yaXplci52MS5BZG1pblNlc3Npb25SZXF1ZXN0GiMuYXV0aG9yaXplci52MS5BZG1pblNlc3Npb25SZXNwb25zZSIZgtPkkwITEhEvdjEvYWRtaW4vc2Vzc2lvbhJmCglBZG1pbk1ldGESHy5hdXRob3JpemVyLnYxLkFkbWluTWV0YVJlcXVlc3QaIC5hdXRob3JpemVyLnYxLkFkbWluTWV0YVJlc3BvbnNlIhaC0+STAhASDi92MS9hZG1pbi9tZXRhEl4KBVVzZXJzEhsuYXV0aG9yaXplci52MS5Vc2Vyc1JlcXVlc3QaHC5hdXRob3JpemVyLnYxLlVzZXJzUmVzcG9uc2UiGoLT5JMCFDoBKiIPL3YxL2FkbWluL3VzZXJzEloKBFVzZXISGi5hdXRob3JpemVyLnYxLlVzZXJSZXF1ZXN0GhsuYXV0aG9yaXplci52MS5Vc2VyUmVzcG9uc2UiGYLT5JMCEzoBKiIOL3YxL2FkbWluL3VzZXIScwoKVXBkYXRlVXNlchIgLmF1dGhvcml6ZXIudjEuVXBkYXRlVXNlclJlcXVlc3QaIS5hdXRob3JpemVyLnYxLlVwZGF0ZVVzZXJSZXNwb25zZSIggtPkkwIaOgEqIhUvdjEvYWRtaW4vdXBkYXRlX3VzZXIScwoKRGVsZXRlVXNlchIgLmF1dGhvcml6ZXIudjEuRGVsZXRlVXNlclJlcXVlc3QaIS5hdXRob3JpemVyLnYxLkRlbGV0ZVVzZXJSZXNwb25zZSIggtPkkwIaOgEqIhUvdjEvYWRtaW4vZGVsZXRlX3VzZXISmwEKFFZlcmlmaWNhdGlvblJlcXVlc3RzEiouYXV0aG9yaXplci52MS5WZXJpZmljYXRpb25SZXF1ZXN0c1JlcXVlc3QaKy5hdXRob3JpemVyLnYxLlZlcmlmaWNhdGlvblJlcXVlc3RzUmVzcG9uc2UiKoLT5JMCJDoBKiIfL3YxL2FkbWluL3ZlcmlmaWNhdGlvbl9yZXF1ZXN0cxJ7CgxSZXZva2VBY2Nlc3MSIi5hdXRob3JpemVyLnYxLlJldm9rZUFjY2Vzc1JlcXVlc3QaIy5hdXRob3JpemVyLnYxLlJldm9rZUFjY2Vzc1Jlc3BvbnNlIiKC0+STAhw6ASoiFy92MS9hZG1pbi9yZXZva2VfYWNjZXNzEnsKDEVuYWJsZUFjY2VzcxIiLmF1dGhvcml6ZXIudjEuRW5hYmxlQWNjZXNzUmVxdWVzdBojLmF1dGhvcml6ZXIudjEuRW5hYmxlQWNjZXNzUmVzcG9uc2UiIoLT5JMCHDoBKiIXL3YxL2FkbWluL2VuYWJsZV9hY2Nlc3MSfwoNSW52aXRlTWVtYmVycxIjLmF1dGhvcml6ZXIudjEuSW52aXRlTWVtYmVyc1JlcXVlc3QaJC5hdXRob3JpemVyLnYxLkludml0ZU1lbWJlcnNSZXNwb25zZSIjgtPkkwIdOgEqIhgvdjEvYWRtaW4vaW52aXRlX21lbWJlcnMScwoKQWRkV2ViaG9vaxIgLmF1dGhvcml6ZXIudjEuQWRkV2ViaG9va1JlcXVlc3QaIS5hdXRob3JpemVyLnYxLkFkZFdlYmhvb2tSZXNwb25zZSIggtPkkwIaOgEqIhUvdjEvYWRtaW4vYWRkX3dlYmhvb2sSfwoNVXBkYXRlV2ViaG9vaxIjLmF1dGhvcml6ZXIudjEuVXBkYXRlV2ViaG9va1JlcXVlc3QaJC5hdXRob3JpemVyLnYxLlVwZGF0ZVdlYmhvb2tSZXNwb25zZSIjgtPkkwIdOgEqIhgvdjEvYWRtaW4vdXBkYXRlX3dlYmhvb2sSfwoNRGVsZXRlV2ViaG9vaxIjLmF1dGhvcml6ZXIudjEuRGVsZXRlV2ViaG9va1JlcXVlc3QaJC5hdXRob3JpemVyLnYxLkRlbGV0ZVdlYmhvb2tSZXNwb25zZSIjgtPkkwIdOgEqIhgvdjEvYWRtaW4vZGVsZXRlX3dlYmhvb2sSbwoKR2V0V2ViaG9vaxIgLmF1dGhvcml6ZXIudjEuR2V0V2ViaG9va1JlcXVlc3QaIS5hdXRob3JpemVyLnYxLkdldFdlYmhvb2tSZXNwb25zZSIcgtPkkwIWOgEqIhEvdjEvYWRtaW4vd2ViaG9vaxJqCghXZWJob29rcxIeLmF1dGhvcml6ZXIudjEuV2ViaG9va3NSZXF1ZXN0Gh8uYXV0aG9yaXplci52MS5XZWJob29rc1Jlc3BvbnNlIh2C0+STAhc6ASoiEi92MS9hZG1pbi93ZWJob29rcxJ3CgtXZWJob29rTG9ncxIhLmF1dGhvcml6ZXIudjEuV2ViaG9va0xvZ3NSZXF1ZXN0GiIuYXV0aG9yaXplci52MS5XZWJob29rTG9nc1Jlc3BvbnNlIiGC0+STAhs6ASoiFi92MS9hZG1pbi93ZWJob29rX2xvZ3MSewoMVGVzdEVuZHBvaW50EiIuYXV0aG9yaXplci52MS5UZXN0RW5kcG9pbnRSZXF1ZXN0GiMuYXV0aG9yaXplci52MS5UZXN0RW5kcG9pbnRSZXNwb25zZSIigtPkkwIcOgEqIhcvdjEvYWRtaW4vdGVzdF9lbmRwb2ludBKMAQoQQWRkRW1haWxUZW1wbGF0ZRImLmF1dGhvcml6ZXIudjEuQWRkRW1haWxUZW1wbGF0ZVJlcXVlc3QaJy5hdXRob3JpemVyLnYxLkFkZEVtYWlsVGVtcGxhdGVSZXNwb25zZSIngtPkkwIhOgEqIhwvdjEvYWRtaW4vYWRkX2VtYWlsX3RlbXBsYXRlEpgBChNVcGRhdGVFbWFpbFRlbXBsYXRlEikuYXV0aG9yaXplci52MS5VcGRhdGVFbWFpbFRlbXBsYXRlUmVxdWVzdBoqLmF1dGhvcml6ZXIudjEuVXBkYXRlRW1haWxUZW1wbGF0ZVJlc3BvbnNlIiqC0+STAiQ6ASoiHy92MS9hZG1pbi91cGRhdGVfZW1haWxfdGVtcGxhdGUSmAEKE0RlbGV0ZUVtYWlsVGVtcGxhdGUSKS5hdXRob3JpemVyLnYxLkRlbGV0ZUVtYWlsVGVtcGxhdGVSZXF1ZXN0GiouYXV0aG9yaXplci52MS5EZWxldGVFbWFpbFRlbXBsYXRlUmVzcG9uc2UiKoLT5JMCJDoBKiIfL3YxL2FkbWluL2RlbGV0ZV9lbWFpbF90ZW1wbGF0ZRKDAQoORW1haWxUZW1wbGF0ZXMSJC5hdXRob3JpemVyLnYxLkVtYWlsVGVtcGxhdGVzUmVxdWVzdBolLmF1dGhvcml6ZXIudjEuRW1haWxUZW1wbGF0ZXNSZXNwb25zZSIkgtPkkwIeOgEqIhkvdjEvYWRtaW4vZW1haWxfdGVtcGxhdGVzEm8KCUF1ZGl0TG9ncxIfLmF1dGhvcml6ZXIudjEuQXVkaXRMb2dzUmVxdWVzdBogLmF1dGhvcml6ZXIudjEuQXVkaXRMb2dzUmVzcG9uc2UiH4LT5JMCGToBKiIUL3YxL2FkbWluL2F1ZGl0X2xvZ3MScQoLRmdhR2V0TW9kZWwSIS5hdXRob3JpemVyLnYxLkZnYUdldE1vZGVsUmVxdWVzdBoiLmF1dGhvcml6ZXIudjEuRmdhR2V0TW9kZWxSZXNwb25zZSIbgtPkkwIVEhMvdjEvYWRtaW4vZmdhL21vZGVsEnoKDUZnYVdyaXRlTW9kZWwSIy5hdXRob3JpemVyLnYxLkZnYVdyaXRlTW9kZWxSZXF1ZXN0GiQuYXV0aG9yaXplci52MS5GZ2FXcml0ZU1vZGVsUmVzcG9uc2UiHoLT5JMCGDoBKiITL3YxL2FkbWluL2ZnYS9tb2RlbBJ+Cg5GZ2FXcml0ZVR1cGxlcxIkLmF1dGhvcml6ZXIudjEuRmdhV3JpdGVUdXBsZXNSZXF1ZXN0GiUuYXV0aG9yaXplci52MS5GZ2FXcml0ZVR1cGxlc1Jlc3BvbnNlIh+C0+STAhk6ASoiFC92MS9hZG1pbi9mZ2EvdHVwbGVzEogBCg9GZ2FEZWxldGVUdXBsZXMSJS5hdXRob3JpemVyLnYxLkZnYURlbGV0ZVR1cGxlc1JlcXVlc3QaJi5hdXRob3JpemVyLnYxLkZnYURlbGV0ZVR1cGxlc1Jlc3BvbnNlIiaC0+STAiA6ASoiGy92MS9hZG1pbi9mZ2EvdHVwbGVzL2RlbGV0ZRKAAQoNRmdhUmVhZFR1cGxlcxIjLmF1dGhvcml6ZXIudjEuRmdhUmVhZFR1cGxlc1JlcXVlc3QaJC5hdXRob3JpemVyLnYxLkZnYVJlYWRUdXBsZXNSZXNwb25zZSIkgtPkkwIeOgEqIhkvdjEvYWRtaW4vZmdhL3R1cGxlcy9yZWFkEnwKDEZnYUxpc3RVc2VycxIiLmF1dGhvcml6ZXIudjEuRmdhTGlzdFVzZXJzUmVxdWVzdBojLmF1dGhvcml6ZXIudjEuRmdhTGlzdFVzZXJzUmVzcG9uc2UiI4LT5JMCHToBKiIYL3YxL2FkbWluL2ZnYS9saXN0X3VzZXJzEm8KCUZnYUV4cGFuZBIfLmF1dGhvcml6ZXIudjEuRmdhRXhwYW5kUmVxdWVzdBogLmF1dGhvcml6ZXIudjEuRmdhRXhwYW5kUmVzcG9uc2UiH4LT5JMCGToBKiIUL3YxL2FkbWluL2ZnYS9leHBhbmQSawoIRmdhUmVzZXQSHi5hdXRob3JpemVyLnYxLkZnYVJlc2V0UmVxdWVzdBofLmF1dGhvcml6ZXIudjEuRmdhUmVzZXRSZXNwb25zZSIegtPkkwIYOgEqIhMvdjEvYWRtaW4vZmdhL3Jlc2V0EnsKDENyZWF0ZUNsaWVudBIiLmF1dGhvcml6ZXIudjEuQ3JlYXRlQ2xpZW50UmVxdWVzdBojLmF1dGhvcml6ZXIudjEuQ3JlYXRlQ2xpZW50UmVzcG9uc2UiIoLT5JMCHDoBKiIXL3YxL2FkbWluL2NyZWF0ZV9jbGllbnQSewoMVXBkYXRlQ2xpZW50EiIuYXV0aG9yaXplci52MS5VcGRhdGVDbGllbnRSZXF1ZXN0GiMuYXV0aG9yaXplci52MS5VcGRhdGVDbGllbnRSZXNwb25zZSIigtPkkwIcOgEqIhcvdjEvYWRtaW4vdXBkYXRlX2NsaWVudBJ7CgxEZWxldGVDbGllbnQSIi5hdXRob3JpemVyLnYxLkRlbGV0ZUNsaWVudFJlcXVlc3QaIy5hdXRob3JpemVyLnYxLkRlbGV0ZUNsaWVudFJlc3BvbnNlIiKC0+STAhw6ASoiFy92MS9hZG1pbi9kZWxldGVfY2xpZW50Eo4BChJSb3RhdGVDbGllbnRTZWNyZXQSKC5hdXRob3JpemVyLnYxLlJvdGF0ZUNsaWVudFNlY3JldFJlcXVlc3QaIy5hdXRob3JpemVyLnYxLkNyZWF0ZUNsaWVudFJlc3BvbnNlIimC0+STAiM6ASoiHi92MS9hZG1pbi9yb3RhdGVfY2xpZW50X3NlY3JldBJrCglHZXRDbGllbnQSHy5hdXRob3JpemVyLnYxLkdldENsaWVudFJlcXVlc3QaIC5hdXRob3JpemVyLnYxLkdldENsaWVudFJlc3BvbnNlIhuC0+STAhU6ASoiEC92MS9hZG1pbi9jbGllbnQSZgoHQ2xpZW50cxIdLmF1dGhvcml6ZXIudjEuQ2xpZW50c1JlcXVlc3QaHi5hdXRob3JpemVyLnYxLkNsaWVudHNSZXNwb25zZSIcgtPkkwIWOgEqIhEvdjEvYWRtaW4vY2xpZW50cxKMAQoQQWRkVHJ1c3RlZElzc3VlchImLmF1dGhvcml6ZXIudjEuQWRkVHJ1c3RlZElzc3VlclJlcXVlc3QaJy5hdXRob3JpemVyLnYxLkFkZFRydXN0ZWRJc3N1ZXJSZXNwb25zZSIngtPkkwIhOgEqIhwvdjEvYWRtaW4vYWRkX3RydXN0ZWRfaXNzdWVyEpgBChNVcGRhdGVUcnVzdGVkSXNzdWVyEikuYXV0aG9yaXplci52MS5VcGRhdGVUcnVzdGVkSXNzdWVyUmVxdWVzdBoqLmF1dGhvcml6ZXIudjEuVXBkYXRlVHJ1c3RlZElzc3VlclJlc3BvbnNlIiqC0+STAiQ6ASoiHy92MS9hZG1pbi91cGRhdGVfdHJ1c3RlZF9pc3N1ZXISmAEKE0RlbGV0ZVRydXN0ZWRJc3N1ZXISKS5hdXRob3JpemVyLnYxLkRlbGV0ZVRydXN0ZWRJc3N1ZXJSZXF1ZXN0GiouYXV0aG9yaXplci52MS5EZWxldGVUcnVzdGVkSXNzdWVyUmVzcG9uc2UiKoLT5JMCJDoBKiIfL3YxL2FkbWluL2RlbGV0ZV90cnVzdGVkX2lzc3VlchKIAQoQR2V0VHJ1c3RlZElzc3VlchImLmF1dGhvcml6ZXIudjEuR2V0VHJ1c3RlZElzc3VlclJlcXVlc3QaJy5hdXRob3JpemVyLnYxLkdldFRydXN0ZWRJc3N1ZXJSZXNwb25zZSIjgtPkkwIdOgEqIhgvdjEvYWRtaW4vdHJ1c3RlZF9pc3N1ZXISgwEKDlRydXN0ZWRJc3N1ZXJzEiQuYXV0aG9yaXplci52MS5UcnVzdGVkSXNzdWVyc1JlcXVlc3QaJS5hdXRob3JpemVyLnYxLlRydXN0ZWRJc3N1ZXJzUmVzcG9uc2UiJILT5JMCHjoBKiIZL3YxL2FkbWluL3RydXN0ZWRfaXNzdWVycxKxAQoZQ3JlYXRlU2FtbFNlcnZpY2VQcm92aWRlchIvLmF1dGhvcml6ZXIudjEuQ3JlYXRlU2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QaMC5hdXRob3JpemVyLnYxLkNyZWF0ZVNhbWxTZXJ2aWNlUHJvdmlkZXJSZXNwb25zZSIxgtPkkwIrOgEqIiYvdjEvYWRtaW4vY3JlYXRlX3NhbWxfc2VydmljZV9wcm92aWRlchKxAQoZVXBkYXRlU2FtbFNlcnZpY2VQcm92aWRlchIvLmF1dGhvcml6ZXIudjEuVXBkYXRlU2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QaMC5hdXRob3JpemVyLnYxLlVwZGF0ZVNhbWxTZXJ2aWNlUHJvdmlkZXJSZXNwb25zZSIxgtPkkwIrOgEqIiYvdjEvYWRtaW4vdXBkYXRlX3NhbWxfc2VydmljZV9wcm92aWRlchKxAQoZRGVsZXRlU2FtbFNlcnZpY2VQcm92aWRlchIvLmF1dGhvcml6ZXIudjEuRGVsZXRlU2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QaMC5hdXRob3JpemVyLnYxLkRlbGV0ZVNhbWxTZXJ2aWNlUHJvdmlkZXJSZXNwb25zZSIxgtPkkwIrOgEqIiYvdjEvYWRtaW4vZGVsZXRlX3NhbWxfc2VydmljZV9wcm92aWRlchKhAQoWR2V0U2FtbFNlcnZpY2VQcm92aWRlchIsLmF1dGhvcml6ZXIudjEuR2V0U2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QaLS5hdXRob3JpemVyLnYxLkdldFNhbWxTZXJ2aWNlUHJvdmlkZXJSZXNwb25zZSIqgtPkkwIkOgEqIh8vdjEvYWRtaW4vc2FtbF9zZXJ2aWNlX3Byb3ZpZGVyEqgBChhMaXN0U2FtbFNlcnZpY2VQcm92aWRlcnMSLi5hdXRob3JpemVyLnYxLkxpc3RTYW1sU2VydmljZVByb3ZpZGVyc1JlcXVlc3QaLy5hdXRob3JpemVyLnYxLkxpc3RTYW1sU2VydmljZVByb3ZpZGVyc1Jlc3BvbnNlIiuC0+STAiU6ASoiIC92MS9hZG1pbi9zYW1sX3NlcnZpY2VfcHJvdmlkZXJzEpEBChFSb3RhdGVTYW1sSWRwQ2VydBInLmF1dGhvcml6ZXIudjEuUm90YXRlU2FtbElkcENlcnRSZXF1ZXN0GiguYXV0aG9yaXplci52MS5Sb3RhdGVTYW1sSWRwQ2VydFJlc3BvbnNlIimC0+STAiM6ASoiHi92MS9hZG1pbi9yb3RhdGVfc2FtbF9pZHBfY2VydBKNAQoQUmV0aXJlU2FtbElkcEtleRImLmF1dGhvcml6ZXIudjEuUmV0aXJlU2FtbElkcEtleVJlcXVlc3QaJy5hdXRob3JpemVyLnYxLlJldGlyZVNhbWxJZHBLZXlSZXNwb25zZSIogtPkkwIiOgEqIh0vdjEvYWRtaW4vcmV0aXJlX3NhbWxfaWRwX2tleRKEAQoPTGlzdFNhbWxJZHBLZXlzEiUuYXV0aG9yaXplci52MS5MaXN0U2FtbElkcEtleXNSZXF1ZXN0GiYuYXV0aG9yaXplci52MS5MaXN0U2FtbElkcEtleXNSZXNwb25zZSIigtPkkwIcOgEqIhcvdjEvYWRtaW4vc2FtbF9pZHBfa2V5cxKdAQoUSW1wb3J0U2FtbFNwTWV0YWRhdGESKi5hdXRob3JpemVyLnYxLkltcG9ydFNhbWxTcE1ldGFkYXRhUmVxdWVzdBorLmF1dGhvcml6ZXIudjEuSW1wb3J0U2FtbFNwTWV0YWRhdGFSZXNwb25zZSIsgtPkkwImOgEqIiEvdjEvYWRtaW4vaW1wb3J0X3NhbWxfc3BfbWV0YWRhdGFCxgEKEWNvbS5hdXRob3JpemVyLnYxQgpBZG1pblByb3RvUAFaUGdpdGh1Yi5jb20vYXV0aG9yaXplcmRldi9hdXRob3JpemVyLWdvL2ludGVybmFsL2dlbnBiL2F1dGhvcml6ZXIvdjE7YXV0aG9yaXplcnYxogIDQVhYqgINQXV0aG9yaXplci5WMcoCDUF1dGhvcml6ZXJcVjHiAhlBdXRob3JpemVyXFYxXEdQQk1ldGFkYXRh6gIOQXV0aG9yaXplcjo6VjFiBnByb3RvMw", [file_authorizer_v1_annotations, file_authorizer_v1_common, file_authorizer_v1_pagination, file_authorizer_v1_types, file_buf_validate_validate, file_google_api_annotations]); + fileDesc("ChlhdXRob3JpemVyL3YxL2FkbWluLnByb3RvEg1hdXRob3JpemVyLnYxIjIKEUFkbWluTG9naW5SZXF1ZXN0Eh0KDGFkbWluX3NlY3JldBgBIAEoCUIHukgEcgIQASIlChJBZG1pbkxvZ2luUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSIUChJBZG1pbkxvZ291dFJlcXVlc3QiJgoTQWRtaW5Mb2dvdXRSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIhUKE0FkbWluU2Vzc2lvblJlcXVlc3QiJwoUQWRtaW5TZXNzaW9uUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSISChBBZG1pbk1ldGFSZXF1ZXN0IkEKEUFkbWluTWV0YVJlc3BvbnNlEiwKCmFkbWluX21ldGEYASABKAsyGC5hdXRob3JpemVyLnYxLkFkbWluTWV0YSJ4CglBZG1pbk1ldGESDQoFcm9sZXMYASADKAkSFQoNZGVmYXVsdF9yb2xlcxgCIAMoCRIXCg9wcm90ZWN0ZWRfcm9sZXMYAyADKAkSLAokaXNfbXVsdGlfZmFjdG9yX2F1dGhfc2VydmljZV9lbmFibGVkGAQgASgIIlMKDFVzZXJzUmVxdWVzdBI0CgpwYWdpbmF0aW9uGAEgASgLMiAuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uUmVxdWVzdBINCgVxdWVyeRgCIAEoCSJiCg1Vc2Vyc1Jlc3BvbnNlEiIKBXVzZXJzGAEgAygLMhMuYXV0aG9yaXplci52MS5Vc2VyEi0KCnBhZ2luYXRpb24YAiABKAsyGS5hdXRob3JpemVyLnYxLlBhZ2luYXRpb24iKAoLVXNlclJlcXVlc3QSCgoCaWQYASABKAkSDQoFZW1haWwYAiABKAkiMQoMVXNlclJlc3BvbnNlEiEKBHVzZXIYASABKAsyEy5hdXRob3JpemVyLnYxLlVzZXIikwUKEVVwZGF0ZVVzZXJSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABEhIKBWVtYWlsGAIgASgJSACIAQESGwoOZW1haWxfdmVyaWZpZWQYAyABKAhIAYgBARIXCgpnaXZlbl9uYW1lGAQgASgJSAKIAQESGAoLZmFtaWx5X25hbWUYBSABKAlIA4gBARIYCgttaWRkbGVfbmFtZRgGIAEoCUgEiAEBEhUKCG5pY2tuYW1lGAcgASgJSAWIAQESEwoGZ2VuZGVyGAggASgJSAaIAQESFgoJYmlydGhkYXRlGAkgASgJSAeIAQESGQoMcGhvbmVfbnVtYmVyGAogASgJSAiIAQESIgoVcGhvbmVfbnVtYmVyX3ZlcmlmaWVkGAsgASgISAmIAQESFAoHcGljdHVyZRgMIAEoCUgKiAEBEg0KBXJvbGVzGA0gAygJEikKHGlzX211bHRpX2ZhY3Rvcl9hdXRoX2VuYWJsZWQYDiABKAhIC4gBARIoCghhcHBfZGF0YRgPIAEoCzIWLmF1dGhvcml6ZXIudjEuQXBwRGF0YRIWCglyZXNldF9tZmEYECABKAhIDIgBAUIICgZfZW1haWxCEQoPX2VtYWlsX3ZlcmlmaWVkQg0KC19naXZlbl9uYW1lQg4KDF9mYW1pbHlfbmFtZUIOCgxfbWlkZGxlX25hbWVCCwoJX25pY2tuYW1lQgkKB19nZW5kZXJCDAoKX2JpcnRoZGF0ZUIPCg1fcGhvbmVfbnVtYmVyQhgKFl9waG9uZV9udW1iZXJfdmVyaWZpZWRCCgoIX3BpY3R1cmVCHwodX2lzX211bHRpX2ZhY3Rvcl9hdXRoX2VuYWJsZWRCDAoKX3Jlc2V0X21mYSI3ChJVcGRhdGVVc2VyUmVzcG9uc2USIQoEdXNlchgBIAEoCzITLmF1dGhvcml6ZXIudjEuVXNlciIrChFEZWxldGVVc2VyUmVxdWVzdBIWCgVlbWFpbBgBIAEoCUIHukgEcgIQASIlChJEZWxldGVVc2VyUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSJTChtWZXJpZmljYXRpb25SZXF1ZXN0c1JlcXVlc3QSNAoKcGFnaW5hdGlvbhgBIAEoCzIgLmF1dGhvcml6ZXIudjEuUGFnaW5hdGlvblJlcXVlc3QikAEKHFZlcmlmaWNhdGlvblJlcXVlc3RzUmVzcG9uc2USQQoVdmVyaWZpY2F0aW9uX3JlcXVlc3RzGAEgAygLMiIuYXV0aG9yaXplci52MS5WZXJpZmljYXRpb25SZXF1ZXN0Ei0KCnBhZ2luYXRpb24YAiABKAsyGS5hdXRob3JpemVyLnYxLlBhZ2luYXRpb24isQEKE1ZlcmlmaWNhdGlvblJlcXVlc3QSCgoCaWQYASABKAkSEgoKaWRlbnRpZmllchgCIAEoCRINCgV0b2tlbhgDIAEoCRINCgVlbWFpbBgEIAEoCRIPCgdleHBpcmVzGAUgASgDEhIKCmNyZWF0ZWRfYXQYBiABKAMSEgoKdXBkYXRlZF9hdBgHIAEoAxINCgVub25jZRgIIAEoCRIUCgxyZWRpcmVjdF91cmkYCSABKAkiLwoTUmV2b2tlQWNjZXNzUmVxdWVzdBIYCgd1c2VyX2lkGAEgASgJQge6SARyAhABIicKFFJldm9rZUFjY2Vzc1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiLwoTRW5hYmxlQWNjZXNzUmVxdWVzdBIYCgd1c2VyX2lkGAEgASgJQge6SARyAhABIicKFEVuYWJsZUFjY2Vzc1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiUgoUSW52aXRlTWVtYmVyc1JlcXVlc3QSDgoGZW1haWxzGAEgAygJEhkKDHJlZGlyZWN0X3VyaRgCIAEoCUgAiAEBQg8KDV9yZWRpcmVjdF91cmkiTAoVSW52aXRlTWVtYmVyc1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkSIgoFdXNlcnMYAiADKAsyEy5hdXRob3JpemVyLnYxLlVzZXIiuAEKB1dlYmhvb2sSCgoCaWQYASABKAkSEgoKZXZlbnRfbmFtZRgCIAEoCRIZChFldmVudF9kZXNjcmlwdGlvbhgDIAEoCRIQCghlbmRwb2ludBgEIAEoCRIPCgdlbmFibGVkGAUgASgIEicKB2hlYWRlcnMYBiABKAsyFi5hdXRob3JpemVyLnYxLkFwcERhdGESEgoKY3JlYXRlZF9hdBgHIAEoAxISCgp1cGRhdGVkX2F0GAggASgDIowBCgpXZWJob29rTG9nEgoKAmlkGAEgASgJEhMKC2h0dHBfc3RhdHVzGAIgASgDEhAKCHJlc3BvbnNlGAMgASgJEg8KB3JlcXVlc3QYBCABKAkSEgoKd2ViaG9va19pZBgFIAEoCRISCgpjcmVhdGVkX2F0GAYgASgDEhIKCnVwZGF0ZWRfYXQYByABKAMiuwEKEUFkZFdlYmhvb2tSZXF1ZXN0EhsKCmV2ZW50X25hbWUYASABKAlCB7pIBHICEAESHgoRZXZlbnRfZGVzY3JpcHRpb24YAiABKAlIAIgBARIZCghlbmRwb2ludBgDIAEoCUIHukgEcgIQARIPCgdlbmFibGVkGAQgASgIEicKB2hlYWRlcnMYBSABKAsyFi5hdXRob3JpemVyLnYxLkFwcERhdGFCFAoSX2V2ZW50X2Rlc2NyaXB0aW9uIiUKEkFkZFdlYmhvb2tSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIvgBChRVcGRhdGVXZWJob29rUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQARIXCgpldmVudF9uYW1lGAIgASgJSACIAQESHgoRZXZlbnRfZGVzY3JpcHRpb24YAyABKAlIAYgBARIVCghlbmRwb2ludBgEIAEoCUgCiAEBEhQKB2VuYWJsZWQYBSABKAhIA4gBARInCgdoZWFkZXJzGAYgASgLMhYuYXV0aG9yaXplci52MS5BcHBEYXRhQg0KC19ldmVudF9uYW1lQhQKEl9ldmVudF9kZXNjcmlwdGlvbkILCglfZW5kcG9pbnRCCgoIX2VuYWJsZWQiKAoVVXBkYXRlV2ViaG9va1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiKwoURGVsZXRlV2ViaG9va1JlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiKAoVRGVsZXRlV2ViaG9va1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiKAoRR2V0V2ViaG9va1JlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiPQoSR2V0V2ViaG9va1Jlc3BvbnNlEicKB3dlYmhvb2sYASABKAsyFi5hdXRob3JpemVyLnYxLldlYmhvb2siRwoPV2ViaG9va3NSZXF1ZXN0EjQKCnBhZ2luYXRpb24YASABKAsyIC5hdXRob3JpemVyLnYxLlBhZ2luYXRpb25SZXF1ZXN0ImsKEFdlYmhvb2tzUmVzcG9uc2USKAoId2ViaG9va3MYASADKAsyFi5hdXRob3JpemVyLnYxLldlYmhvb2sSLQoKcGFnaW5hdGlvbhgCIAEoCzIZLmF1dGhvcml6ZXIudjEuUGFnaW5hdGlvbiJyChJXZWJob29rTG9nc1JlcXVlc3QSNAoKcGFnaW5hdGlvbhgBIAEoCzIgLmF1dGhvcml6ZXIudjEuUGFnaW5hdGlvblJlcXVlc3QSFwoKd2ViaG9va19pZBgCIAEoCUgAiAEBQg0KC193ZWJob29rX2lkInUKE1dlYmhvb2tMb2dzUmVzcG9uc2USLwoMd2ViaG9va19sb2dzGAEgAygLMhkuYXV0aG9yaXplci52MS5XZWJob29rTG9nEi0KCnBhZ2luYXRpb24YAiABKAsyGS5hdXRob3JpemVyLnYxLlBhZ2luYXRpb24irAEKE1Rlc3RFbmRwb2ludFJlcXVlc3QSGQoIZW5kcG9pbnQYASABKAlCB7pIBHICEAESGwoKZXZlbnRfbmFtZRgCIAEoCUIHukgEcgIQARIeChFldmVudF9kZXNjcmlwdGlvbhgDIAEoCUgAiAEBEicKB2hlYWRlcnMYBCABKAsyFi5hdXRob3JpemVyLnYxLkFwcERhdGFCFAoSX2V2ZW50X2Rlc2NyaXB0aW9uIj0KFFRlc3RFbmRwb2ludFJlc3BvbnNlEhMKC2h0dHBfc3RhdHVzGAEgASgDEhAKCHJlc3BvbnNlGAIgASgJIooBCg1FbWFpbFRlbXBsYXRlEgoKAmlkGAEgASgJEhIKCmV2ZW50X25hbWUYAiABKAkSEAoIdGVtcGxhdGUYAyABKAkSDgoGZGVzaWduGAQgASgJEg8KB3N1YmplY3QYBSABKAkSEgoKY3JlYXRlZF9hdBgGIAEoAxISCgp1cGRhdGVkX2F0GAcgASgDIosBChdBZGRFbWFpbFRlbXBsYXRlUmVxdWVzdBIbCgpldmVudF9uYW1lGAEgASgJQge6SARyAhABEhgKB3N1YmplY3QYAiABKAlCB7pIBHICEAESGQoIdGVtcGxhdGUYAyABKAlCB7pIBHICEAESEwoGZGVzaWduGAQgASgJSACIAQFCCQoHX2Rlc2lnbiIrChhBZGRFbWFpbFRlbXBsYXRlUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSK/AQoaVXBkYXRlRW1haWxUZW1wbGF0ZVJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAESFwoKZXZlbnRfbmFtZRgCIAEoCUgAiAEBEhUKCHRlbXBsYXRlGAMgASgJSAGIAQESFAoHc3ViamVjdBgEIAEoCUgCiAEBEhMKBmRlc2lnbhgFIAEoCUgDiAEBQg0KC19ldmVudF9uYW1lQgsKCV90ZW1wbGF0ZUIKCghfc3ViamVjdEIJCgdfZGVzaWduIi4KG1VwZGF0ZUVtYWlsVGVtcGxhdGVSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIjEKGkRlbGV0ZUVtYWlsVGVtcGxhdGVSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIi4KG0RlbGV0ZUVtYWlsVGVtcGxhdGVSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIk0KFUVtYWlsVGVtcGxhdGVzUmVxdWVzdBI0CgpwYWdpbmF0aW9uGAEgASgLMiAuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uUmVxdWVzdCJ+ChZFbWFpbFRlbXBsYXRlc1Jlc3BvbnNlEjUKD2VtYWlsX3RlbXBsYXRlcxgBIAMoCzIcLmF1dGhvcml6ZXIudjEuRW1haWxUZW1wbGF0ZRItCgpwYWdpbmF0aW9uGAIgASgLMhkuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uItsBCghBdWRpdExvZxIKCgJpZBgBIAEoCRIQCghhY3Rvcl9pZBgCIAEoCRISCgphY3Rvcl90eXBlGAMgASgJEhMKC2FjdG9yX2VtYWlsGAQgASgJEg4KBmFjdGlvbhgFIAEoCRIVCg1yZXNvdXJjZV90eXBlGAYgASgJEhMKC3Jlc291cmNlX2lkGAcgASgJEhIKCmlwX2FkZHJlc3MYCCABKAkSEgoKdXNlcl9hZ2VudBgJIAEoCRIQCghtZXRhZGF0YRgKIAEoCRISCgpjcmVhdGVkX2F0GAsgASgDIsACChBBdWRpdExvZ3NSZXF1ZXN0EjQKCnBhZ2luYXRpb24YASABKAsyIC5hdXRob3JpemVyLnYxLlBhZ2luYXRpb25SZXF1ZXN0EhMKBmFjdGlvbhgCIAEoCUgAiAEBEhUKCGFjdG9yX2lkGAMgASgJSAGIAQESGgoNcmVzb3VyY2VfdHlwZRgEIAEoCUgCiAEBEhgKC3Jlc291cmNlX2lkGAUgASgJSAOIAQESGwoOZnJvbV90aW1lc3RhbXAYBiABKANIBIgBARIZCgx0b190aW1lc3RhbXAYByABKANIBYgBAUIJCgdfYWN0aW9uQgsKCV9hY3Rvcl9pZEIQCg5fcmVzb3VyY2VfdHlwZUIOCgxfcmVzb3VyY2VfaWRCEQoPX2Zyb21fdGltZXN0YW1wQg8KDV90b190aW1lc3RhbXAibwoRQXVkaXRMb2dzUmVzcG9uc2USKwoKYXVkaXRfbG9ncxgBIAMoCzIXLmF1dGhvcml6ZXIudjEuQXVkaXRMb2cSLQoKcGFnaW5hdGlvbhgCIAEoCzIZLmF1dGhvcml6ZXIudjEuUGFnaW5hdGlvbiIjCghGZ2FNb2RlbBIKCgJpZBgBIAEoCRILCgNkc2wYAiABKAkiOgoIRmdhVHVwbGUSDAoEdXNlchgBIAEoCRIQCghyZWxhdGlvbhgCIAEoCRIOCgZvYmplY3QYAyABKAkiFAoSRmdhR2V0TW9kZWxSZXF1ZXN0Ij0KE0ZnYUdldE1vZGVsUmVzcG9uc2USJgoFbW9kZWwYASABKAsyFy5hdXRob3JpemVyLnYxLkZnYU1vZGVsIiwKFEZnYVdyaXRlTW9kZWxSZXF1ZXN0EhQKA2RzbBgBIAEoCUIHukgEcgIQASI/ChVGZ2FXcml0ZU1vZGVsUmVzcG9uc2USJgoFbW9kZWwYASABKAsyFy5hdXRob3JpemVyLnYxLkZnYU1vZGVsIkUKFUZnYVdyaXRlVHVwbGVzUmVxdWVzdBIsCgZ0dXBsZXMYASADKAsyHC5hdXRob3JpemVyLnYxLkZnYVR1cGxlSW5wdXQiKQoWRmdhV3JpdGVUdXBsZXNSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIkYKFkZnYURlbGV0ZVR1cGxlc1JlcXVlc3QSLAoGdHVwbGVzGAEgAygLMhwuYXV0aG9yaXplci52MS5GZ2FUdXBsZUlucHV0IioKF0ZnYURlbGV0ZVR1cGxlc1Jlc3BvbnNlEg8KB21lc3NhZ2UYASABKAki1AEKFEZnYVJlYWRUdXBsZXNSZXF1ZXN0EhEKBHVzZXIYASABKAlIAIgBARIVCghyZWxhdGlvbhgCIAEoCUgBiAEBEhMKBm9iamVjdBgDIAEoCUgCiAEBEhYKCXBhZ2Vfc2l6ZRgEIAEoA0gDiAEBEh8KEmNvbnRpbnVhdGlvbl90b2tlbhgFIAEoCUgEiAEBQgcKBV91c2VyQgsKCV9yZWxhdGlvbkIJCgdfb2JqZWN0QgwKCl9wYWdlX3NpemVCFQoTX2NvbnRpbnVhdGlvbl90b2tlbiJ4ChVGZ2FSZWFkVHVwbGVzUmVzcG9uc2USJwoGdHVwbGVzGAEgAygLMhcuYXV0aG9yaXplci52MS5GZ2FUdXBsZRIfChJjb250aW51YXRpb25fdG9rZW4YAiABKAlIAIgBAUIVChNfY29udGludWF0aW9uX3Rva2VuImUKE0ZnYUxpc3RVc2Vyc1JlcXVlc3QSFwoGb2JqZWN0GAEgASgJQge6SARyAhABEhkKCHJlbGF0aW9uGAIgASgJQge6SARyAhABEhoKCXVzZXJfdHlwZRgDIAEoCUIHukgEcgIQASIlChRGZ2FMaXN0VXNlcnNSZXNwb25zZRINCgV1c2VycxgBIAMoCSJGChBGZ2FFeHBhbmRSZXF1ZXN0EhkKCHJlbGF0aW9uGAEgASgJQge6SARyAhABEhcKBm9iamVjdBgCIAEoCUIHukgEcgIQASIhChFGZ2FFeHBhbmRSZXNwb25zZRIMCgR0cmVlGAEgASgJIhEKD0ZnYVJlc2V0UmVxdWVzdCIjChBGZ2FSZXNldFJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkinQEKBkNsaWVudBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhYKDmFsbG93ZWRfc2NvcGVzGAQgAygJEhEKCWlzX2FjdGl2ZRgFIAEoCBISCgpjcmVhdGVkX2F0GAYgASgDEhIKCnVwZGF0ZWRfYXQYByABKAMSEQoJY2xpZW50X2lkGAggASgJIngKE0NyZWF0ZUNsaWVudFJlcXVlc3QSFQoEbmFtZRgBIAEoCUIHukgEcgIQARIYCgtkZXNjcmlwdGlvbhgCIAEoCUgAiAEBEiAKDmFsbG93ZWRfc2NvcGVzGAMgAygJQgi6SAWSAQIIAUIOCgxfZGVzY3JpcHRpb24iVAoUQ3JlYXRlQ2xpZW50UmVzcG9uc2USJQoGY2xpZW50GAEgASgLMhUuYXV0aG9yaXplci52MS5DbGllbnQSFQoNY2xpZW50X3NlY3JldBgCIAEoCSKuAQoTVXBkYXRlQ2xpZW50UmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQARIRCgRuYW1lGAIgASgJSACIAQESGAoLZGVzY3JpcHRpb24YAyABKAlIAYgBARIWCg5hbGxvd2VkX3Njb3BlcxgEIAMoCRIWCglpc19hY3RpdmUYBSABKAhIAogBAUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CDAoKX2lzX2FjdGl2ZSI9ChRVcGRhdGVDbGllbnRSZXNwb25zZRIlCgZjbGllbnQYASABKAsyFS5hdXRob3JpemVyLnYxLkNsaWVudCIqChNEZWxldGVDbGllbnRSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIicKFERlbGV0ZUNsaWVudFJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiMAoZUm90YXRlQ2xpZW50U2VjcmV0UmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQASInChBHZXRDbGllbnRSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIjoKEUdldENsaWVudFJlc3BvbnNlEiUKBmNsaWVudBgBIAEoCzIVLmF1dGhvcml6ZXIudjEuQ2xpZW50IkYKDkNsaWVudHNSZXF1ZXN0EjQKCnBhZ2luYXRpb24YASABKAsyIC5hdXRob3JpemVyLnYxLlBhZ2luYXRpb25SZXF1ZXN0ImgKD0NsaWVudHNSZXNwb25zZRImCgdjbGllbnRzGAEgAygLMhUuYXV0aG9yaXplci52MS5DbGllbnQSLQoKcGFnaW5hdGlvbhgCIAEoCzIZLmF1dGhvcml6ZXIudjEuUGFnaW5hdGlvbiKAAwoNVHJ1c3RlZElzc3VlchIKCgJpZBgBIAEoCRIaChJzZXJ2aWNlX2FjY291bnRfaWQYAiABKAkSDAoEbmFtZRgDIAEoCRISCgppc3N1ZXJfdXJsGAQgASgJEhcKD2tleV9zb3VyY2VfdHlwZRgFIAEoCRIQCghqd2tzX3VybBgGIAEoCRIUCgxleHBlY3RlZF9hdWQYByABKAkSFQoNc3ViamVjdF9jbGFpbRgIIAEoCRITCgtpc3N1ZXJfdHlwZRgJIAEoCRIRCglpc19hY3RpdmUYCiABKAgSIwobc3BpZmZlX3JlZnJlc2hfaGludF9zZWNvbmRzGAsgASgDEhIKCmNyZWF0ZWRfYXQYDCABKAMSEgoKdXBkYXRlZF9hdBgNIAEoAxIYChBhbGxvd2VkX3N1YmplY3RzGA4gASgJEhsKE2VuYWJsZV90b2tlbl9yZXZpZXcYDyABKAgSIQoZa3ViZXJuZXRlc19hcGlfc2VydmVyX3VybBgQIAEoCSKhBAoXQWRkVHJ1c3RlZElzc3VlclJlcXVlc3QSIwoSc2VydmljZV9hY2NvdW50X2lkGAEgASgJQge6SARyAhABEhUKBG5hbWUYAiABKAlCB7pIBHICEAESGwoKaXNzdWVyX3VybBgDIAEoCUIHukgEcgIQARIgCg9rZXlfc291cmNlX3R5cGUYBCABKAlCB7pIBHICEAESFQoIandrc191cmwYBSABKAlIAIgBARIdCgxleHBlY3RlZF9hdWQYBiABKAlCB7pIBHICEAESGgoNc3ViamVjdF9jbGFpbRgHIAEoCUgBiAEBEhwKC2lzc3Vlcl90eXBlGAggASgJQge6SARyAhABEigKG3NwaWZmZV9yZWZyZXNoX2hpbnRfc2Vjb25kcxgJIAEoA0gCiAEBEh0KEGFsbG93ZWRfc3ViamVjdHMYCiABKAlIA4gBARIgChNlbmFibGVfdG9rZW5fcmV2aWV3GAsgASgISASIAQESJgoZa3ViZXJuZXRlc19hcGlfc2VydmVyX3VybBgMIAEoCUgFiAEBQgsKCV9qd2tzX3VybEIQCg5fc3ViamVjdF9jbGFpbUIeChxfc3BpZmZlX3JlZnJlc2hfaGludF9zZWNvbmRzQhMKEV9hbGxvd2VkX3N1YmplY3RzQhYKFF9lbmFibGVfdG9rZW5fcmV2aWV3QhwKGl9rdWJlcm5ldGVzX2FwaV9zZXJ2ZXJfdXJsIlAKGEFkZFRydXN0ZWRJc3N1ZXJSZXNwb25zZRI0Cg50cnVzdGVkX2lzc3VlchgBIAEoCzIcLmF1dGhvcml6ZXIudjEuVHJ1c3RlZElzc3VlciLBAwoaVXBkYXRlVHJ1c3RlZElzc3VlclJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAESEQoEbmFtZRgCIAEoCUgAiAEBEhUKCGp3a3NfdXJsGAMgASgJSAGIAQESGQoMZXhwZWN0ZWRfYXVkGAQgASgJSAKIAQESFgoJaXNfYWN0aXZlGAUgASgISAOIAQESKAobc3BpZmZlX3JlZnJlc2hfaGludF9zZWNvbmRzGAYgASgDSASIAQESHQoQYWxsb3dlZF9zdWJqZWN0cxgHIAEoCUgFiAEBEiAKE2VuYWJsZV90b2tlbl9yZXZpZXcYCCABKAhIBogBARImChlrdWJlcm5ldGVzX2FwaV9zZXJ2ZXJfdXJsGAkgASgJSAeIAQFCBwoFX25hbWVCCwoJX2p3a3NfdXJsQg8KDV9leHBlY3RlZF9hdWRCDAoKX2lzX2FjdGl2ZUIeChxfc3BpZmZlX3JlZnJlc2hfaGludF9zZWNvbmRzQhMKEV9hbGxvd2VkX3N1YmplY3RzQhYKFF9lbmFibGVfdG9rZW5fcmV2aWV3QhwKGl9rdWJlcm5ldGVzX2FwaV9zZXJ2ZXJfdXJsIlMKG1VwZGF0ZVRydXN0ZWRJc3N1ZXJSZXNwb25zZRI0Cg50cnVzdGVkX2lzc3VlchgBIAEoCzIcLmF1dGhvcml6ZXIudjEuVHJ1c3RlZElzc3VlciIxChpEZWxldGVUcnVzdGVkSXNzdWVyUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQASIuChtEZWxldGVUcnVzdGVkSXNzdWVyUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSIuChdHZXRUcnVzdGVkSXNzdWVyUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQASJQChhHZXRUcnVzdGVkSXNzdWVyUmVzcG9uc2USNAoOdHJ1c3RlZF9pc3N1ZXIYASABKAsyHC5hdXRob3JpemVyLnYxLlRydXN0ZWRJc3N1ZXIihQEKFVRydXN0ZWRJc3N1ZXJzUmVxdWVzdBI0CgpwYWdpbmF0aW9uGAEgASgLMiAuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uUmVxdWVzdBIfChJzZXJ2aWNlX2FjY291bnRfaWQYAiABKAlIAIgBAUIVChNfc2VydmljZV9hY2NvdW50X2lkIn4KFlRydXN0ZWRJc3N1ZXJzUmVzcG9uc2USNQoPdHJ1c3RlZF9pc3N1ZXJzGAEgAygLMhwuYXV0aG9yaXplci52MS5UcnVzdGVkSXNzdWVyEi0KCnBhZ2luYXRpb24YAiABKAsyGS5hdXRob3JpemVyLnYxLlBhZ2luYXRpb24igwIKE1NhbWxTZXJ2aWNlUHJvdmlkZXISCgoCaWQYASABKAkSDgoGb3JnX2lkGAIgASgJEgwKBG5hbWUYAyABKAkSEQoJZW50aXR5X2lkGAQgASgJEg8KB2Fjc191cmwYBSABKAkSEwoLc3BfY2VydF9wZW0YBiABKAkSFgoObmFtZV9pZF9mb3JtYXQYByABKAkSGQoRbWFwcGVkX2F0dHJpYnV0ZXMYCCABKAkSGwoTYWxsb3dfaWRwX2luaXRpYXRlZBgJIAEoCBIRCglpc19hY3RpdmUYCiABKAgSEgoKY3JlYXRlZF9hdBgLIAEoAxISCgp1cGRhdGVkX2F0GAwgASgDIoUBCgpTYW1sSWRwS2V5EgoKAmlkGAEgASgJEg4KBm9yZ19pZBgCIAEoCRIQCghjZXJ0X3BlbRgDIAEoCRIRCglhbGdvcml0aG0YBCABKAkSDgoGc3RhdHVzGAUgASgJEhIKCmNyZWF0ZWRfYXQYBiABKAMSEgoKdXBkYXRlZF9hdBgHIAEoAyJUChlTYW1sU3BNZXRhZGF0YVBhcnNlUmVzdWx0EhEKCWVudGl0eV9pZBgBIAEoCRIPCgdhY3NfdXJsGAIgASgJEhMKC2NlcnRpZmljYXRlGAMgASgJItICCiBDcmVhdGVTYW1sU2VydmljZVByb3ZpZGVyUmVxdWVzdBIXCgZvcmdfaWQYASABKAlCB7pIBHICEAESFQoEbmFtZRgCIAEoCUIHukgEcgIQARIaCgllbnRpdHlfaWQYAyABKAlCB7pIBHICEAESGAoHYWNzX3VybBgEIAEoCUIHukgEcgIQARIYCgtzcF9jZXJ0X3BlbRgFIAEoCUgAiAEBEhsKDm5hbWVfaWRfZm9ybWF0GAYgASgJSAGIAQESHgoRbWFwcGVkX2F0dHJpYnV0ZXMYByABKAlIAogBARIgChNhbGxvd19pZHBfaW5pdGlhdGVkGAggASgISAOIAQFCDgoMX3NwX2NlcnRfcGVtQhEKD19uYW1lX2lkX2Zvcm1hdEIUChJfbWFwcGVkX2F0dHJpYnV0ZXNCFgoUX2FsbG93X2lkcF9pbml0aWF0ZWQiZgohQ3JlYXRlU2FtbFNlcnZpY2VQcm92aWRlclJlc3BvbnNlEkEKFXNhbWxfc2VydmljZV9wcm92aWRlchgBIAEoCzIiLmF1dGhvcml6ZXIudjEuU2FtbFNlcnZpY2VQcm92aWRlciKLAwogVXBkYXRlU2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAESEQoEbmFtZRgCIAEoCUgAiAEBEhYKCWVudGl0eV9pZBgDIAEoCUgBiAEBEhQKB2Fjc191cmwYBCABKAlIAogBARIYCgtzcF9jZXJ0X3BlbRgFIAEoCUgDiAEBEhsKDm5hbWVfaWRfZm9ybWF0GAYgASgJSASIAQESHgoRbWFwcGVkX2F0dHJpYnV0ZXMYByABKAlIBYgBARIgChNhbGxvd19pZHBfaW5pdGlhdGVkGAggASgISAaIAQESFgoJaXNfYWN0aXZlGAkgASgISAeIAQFCBwoFX25hbWVCDAoKX2VudGl0eV9pZEIKCghfYWNzX3VybEIOCgxfc3BfY2VydF9wZW1CEQoPX25hbWVfaWRfZm9ybWF0QhQKEl9tYXBwZWRfYXR0cmlidXRlc0IWChRfYWxsb3dfaWRwX2luaXRpYXRlZEIMCgpfaXNfYWN0aXZlImYKIVVwZGF0ZVNhbWxTZXJ2aWNlUHJvdmlkZXJSZXNwb25zZRJBChVzYW1sX3NlcnZpY2VfcHJvdmlkZXIYASABKAsyIi5hdXRob3JpemVyLnYxLlNhbWxTZXJ2aWNlUHJvdmlkZXIiNwogRGVsZXRlU2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiNAohRGVsZXRlU2FtbFNlcnZpY2VQcm92aWRlclJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiNAodR2V0U2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiYwoeR2V0U2FtbFNlcnZpY2VQcm92aWRlclJlc3BvbnNlEkEKFXNhbWxfc2VydmljZV9wcm92aWRlchgBIAEoCzIiLmF1dGhvcml6ZXIudjEuU2FtbFNlcnZpY2VQcm92aWRlciJwCh9MaXN0U2FtbFNlcnZpY2VQcm92aWRlcnNSZXF1ZXN0EhcKBm9yZ19pZBgBIAEoCUIHukgEcgIQARI0CgpwYWdpbmF0aW9uGAIgASgLMiAuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uUmVxdWVzdCKVAQogTGlzdFNhbWxTZXJ2aWNlUHJvdmlkZXJzUmVzcG9uc2USQgoWc2FtbF9zZXJ2aWNlX3Byb3ZpZGVycxgBIAMoCzIiLmF1dGhvcml6ZXIudjEuU2FtbFNlcnZpY2VQcm92aWRlchItCgpwYWdpbmF0aW9uGAIgASgLMhkuYXV0aG9yaXplci52MS5QYWdpbmF0aW9uIjMKGFJvdGF0ZVNhbWxJZHBDZXJ0UmVxdWVzdBIXCgZvcmdfaWQYASABKAlCB7pIBHICEAEiTAoZUm90YXRlU2FtbElkcENlcnRSZXNwb25zZRIvCgxzYW1sX2lkcF9rZXkYASABKAsyGS5hdXRob3JpemVyLnYxLlNhbWxJZHBLZXkiLgoXUmV0aXJlU2FtbElkcEtleVJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiKwoYUmV0aXJlU2FtbElkcEtleVJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiMQoWTGlzdFNhbWxJZHBLZXlzUmVxdWVzdBIXCgZvcmdfaWQYASABKAlCB7pIBHICEAEiSwoXTGlzdFNhbWxJZHBLZXlzUmVzcG9uc2USMAoNc2FtbF9pZHBfa2V5cxgBIAMoCzIZLmF1dGhvcml6ZXIudjEuU2FtbElkcEtleSI8ChtJbXBvcnRTYW1sU3BNZXRhZGF0YVJlcXVlc3QSHQoMbWV0YWRhdGFfeG1sGAEgASgJQge6SARyAhABIlgKHEltcG9ydFNhbWxTcE1ldGFkYXRhUmVzcG9uc2USOAoGcmVzdWx0GAEgASgLMiguYXV0aG9yaXplci52MS5TYW1sU3BNZXRhZGF0YVBhcnNlUmVzdWx0Mt41ChZBdXRob3JpemVyQWRtaW5TZXJ2aWNlEnEKCkFkbWluTG9naW4SIC5hdXRob3JpemVyLnYxLkFkbWluTG9naW5SZXF1ZXN0GiEuYXV0aG9yaXplci52MS5BZG1pbkxvZ2luUmVzcG9uc2UiHqC1GAGC0+STAhQ6ASoiDy92MS9hZG1pbi9sb2dpbhJuCgtBZG1pbkxvZ291dBIhLmF1dGhvcml6ZXIudjEuQWRtaW5Mb2dvdXRSZXF1ZXN0GiIuYXV0aG9yaXplci52MS5BZG1pbkxvZ291dFJlc3BvbnNlIhiC0+STAhIiEC92MS9hZG1pbi9sb2dvdXQScgoMQWRtaW5TZXNzaW9uEiIuYXV0aG9yaXplci52MS5BZG1pblNlc3Npb25SZXF1ZXN0GiMuYXV0aG9yaXplci52MS5BZG1pblNlc3Npb25SZXNwb25zZSIZgtPkkwITEhEvdjEvYWRtaW4vc2Vzc2lvbhJmCglBZG1pbk1ldGESHy5hdXRob3JpemVyLnYxLkFkbWluTWV0YVJlcXVlc3QaIC5hdXRob3JpemVyLnYxLkFkbWluTWV0YVJlc3BvbnNlIhaC0+STAhASDi92MS9hZG1pbi9tZXRhEl4KBVVzZXJzEhsuYXV0aG9yaXplci52MS5Vc2Vyc1JlcXVlc3QaHC5hdXRob3JpemVyLnYxLlVzZXJzUmVzcG9uc2UiGoLT5JMCFDoBKiIPL3YxL2FkbWluL3VzZXJzEloKBFVzZXISGi5hdXRob3JpemVyLnYxLlVzZXJSZXF1ZXN0GhsuYXV0aG9yaXplci52MS5Vc2VyUmVzcG9uc2UiGYLT5JMCEzoBKiIOL3YxL2FkbWluL3VzZXIScwoKVXBkYXRlVXNlchIgLmF1dGhvcml6ZXIudjEuVXBkYXRlVXNlclJlcXVlc3QaIS5hdXRob3JpemVyLnYxLlVwZGF0ZVVzZXJSZXNwb25zZSIggtPkkwIaOgEqIhUvdjEvYWRtaW4vdXBkYXRlX3VzZXIScwoKRGVsZXRlVXNlchIgLmF1dGhvcml6ZXIudjEuRGVsZXRlVXNlclJlcXVlc3QaIS5hdXRob3JpemVyLnYxLkRlbGV0ZVVzZXJSZXNwb25zZSIggtPkkwIaOgEqIhUvdjEvYWRtaW4vZGVsZXRlX3VzZXISmwEKFFZlcmlmaWNhdGlvblJlcXVlc3RzEiouYXV0aG9yaXplci52MS5WZXJpZmljYXRpb25SZXF1ZXN0c1JlcXVlc3QaKy5hdXRob3JpemVyLnYxLlZlcmlmaWNhdGlvblJlcXVlc3RzUmVzcG9uc2UiKoLT5JMCJDoBKiIfL3YxL2FkbWluL3ZlcmlmaWNhdGlvbl9yZXF1ZXN0cxJ7CgxSZXZva2VBY2Nlc3MSIi5hdXRob3JpemVyLnYxLlJldm9rZUFjY2Vzc1JlcXVlc3QaIy5hdXRob3JpemVyLnYxLlJldm9rZUFjY2Vzc1Jlc3BvbnNlIiKC0+STAhw6ASoiFy92MS9hZG1pbi9yZXZva2VfYWNjZXNzEnsKDEVuYWJsZUFjY2VzcxIiLmF1dGhvcml6ZXIudjEuRW5hYmxlQWNjZXNzUmVxdWVzdBojLmF1dGhvcml6ZXIudjEuRW5hYmxlQWNjZXNzUmVzcG9uc2UiIoLT5JMCHDoBKiIXL3YxL2FkbWluL2VuYWJsZV9hY2Nlc3MSfwoNSW52aXRlTWVtYmVycxIjLmF1dGhvcml6ZXIudjEuSW52aXRlTWVtYmVyc1JlcXVlc3QaJC5hdXRob3JpemVyLnYxLkludml0ZU1lbWJlcnNSZXNwb25zZSIjgtPkkwIdOgEqIhgvdjEvYWRtaW4vaW52aXRlX21lbWJlcnMScwoKQWRkV2ViaG9vaxIgLmF1dGhvcml6ZXIudjEuQWRkV2ViaG9va1JlcXVlc3QaIS5hdXRob3JpemVyLnYxLkFkZFdlYmhvb2tSZXNwb25zZSIggtPkkwIaOgEqIhUvdjEvYWRtaW4vYWRkX3dlYmhvb2sSfwoNVXBkYXRlV2ViaG9vaxIjLmF1dGhvcml6ZXIudjEuVXBkYXRlV2ViaG9va1JlcXVlc3QaJC5hdXRob3JpemVyLnYxLlVwZGF0ZVdlYmhvb2tSZXNwb25zZSIjgtPkkwIdOgEqIhgvdjEvYWRtaW4vdXBkYXRlX3dlYmhvb2sSfwoNRGVsZXRlV2ViaG9vaxIjLmF1dGhvcml6ZXIudjEuRGVsZXRlV2ViaG9va1JlcXVlc3QaJC5hdXRob3JpemVyLnYxLkRlbGV0ZVdlYmhvb2tSZXNwb25zZSIjgtPkkwIdOgEqIhgvdjEvYWRtaW4vZGVsZXRlX3dlYmhvb2sSbwoKR2V0V2ViaG9vaxIgLmF1dGhvcml6ZXIudjEuR2V0V2ViaG9va1JlcXVlc3QaIS5hdXRob3JpemVyLnYxLkdldFdlYmhvb2tSZXNwb25zZSIcgtPkkwIWOgEqIhEvdjEvYWRtaW4vd2ViaG9vaxJqCghXZWJob29rcxIeLmF1dGhvcml6ZXIudjEuV2ViaG9va3NSZXF1ZXN0Gh8uYXV0aG9yaXplci52MS5XZWJob29rc1Jlc3BvbnNlIh2C0+STAhc6ASoiEi92MS9hZG1pbi93ZWJob29rcxJ3CgtXZWJob29rTG9ncxIhLmF1dGhvcml6ZXIudjEuV2ViaG9va0xvZ3NSZXF1ZXN0GiIuYXV0aG9yaXplci52MS5XZWJob29rTG9nc1Jlc3BvbnNlIiGC0+STAhs6ASoiFi92MS9hZG1pbi93ZWJob29rX2xvZ3MSewoMVGVzdEVuZHBvaW50EiIuYXV0aG9yaXplci52MS5UZXN0RW5kcG9pbnRSZXF1ZXN0GiMuYXV0aG9yaXplci52MS5UZXN0RW5kcG9pbnRSZXNwb25zZSIigtPkkwIcOgEqIhcvdjEvYWRtaW4vdGVzdF9lbmRwb2ludBKMAQoQQWRkRW1haWxUZW1wbGF0ZRImLmF1dGhvcml6ZXIudjEuQWRkRW1haWxUZW1wbGF0ZVJlcXVlc3QaJy5hdXRob3JpemVyLnYxLkFkZEVtYWlsVGVtcGxhdGVSZXNwb25zZSIngtPkkwIhOgEqIhwvdjEvYWRtaW4vYWRkX2VtYWlsX3RlbXBsYXRlEpgBChNVcGRhdGVFbWFpbFRlbXBsYXRlEikuYXV0aG9yaXplci52MS5VcGRhdGVFbWFpbFRlbXBsYXRlUmVxdWVzdBoqLmF1dGhvcml6ZXIudjEuVXBkYXRlRW1haWxUZW1wbGF0ZVJlc3BvbnNlIiqC0+STAiQ6ASoiHy92MS9hZG1pbi91cGRhdGVfZW1haWxfdGVtcGxhdGUSmAEKE0RlbGV0ZUVtYWlsVGVtcGxhdGUSKS5hdXRob3JpemVyLnYxLkRlbGV0ZUVtYWlsVGVtcGxhdGVSZXF1ZXN0GiouYXV0aG9yaXplci52MS5EZWxldGVFbWFpbFRlbXBsYXRlUmVzcG9uc2UiKoLT5JMCJDoBKiIfL3YxL2FkbWluL2RlbGV0ZV9lbWFpbF90ZW1wbGF0ZRKDAQoORW1haWxUZW1wbGF0ZXMSJC5hdXRob3JpemVyLnYxLkVtYWlsVGVtcGxhdGVzUmVxdWVzdBolLmF1dGhvcml6ZXIudjEuRW1haWxUZW1wbGF0ZXNSZXNwb25zZSIkgtPkkwIeOgEqIhkvdjEvYWRtaW4vZW1haWxfdGVtcGxhdGVzEm8KCUF1ZGl0TG9ncxIfLmF1dGhvcml6ZXIudjEuQXVkaXRMb2dzUmVxdWVzdBogLmF1dGhvcml6ZXIudjEuQXVkaXRMb2dzUmVzcG9uc2UiH4LT5JMCGToBKiIUL3YxL2FkbWluL2F1ZGl0X2xvZ3MScQoLRmdhR2V0TW9kZWwSIS5hdXRob3JpemVyLnYxLkZnYUdldE1vZGVsUmVxdWVzdBoiLmF1dGhvcml6ZXIudjEuRmdhR2V0TW9kZWxSZXNwb25zZSIbgtPkkwIVEhMvdjEvYWRtaW4vZmdhL21vZGVsEnoKDUZnYVdyaXRlTW9kZWwSIy5hdXRob3JpemVyLnYxLkZnYVdyaXRlTW9kZWxSZXF1ZXN0GiQuYXV0aG9yaXplci52MS5GZ2FXcml0ZU1vZGVsUmVzcG9uc2UiHoLT5JMCGDoBKiITL3YxL2FkbWluL2ZnYS9tb2RlbBJ+Cg5GZ2FXcml0ZVR1cGxlcxIkLmF1dGhvcml6ZXIudjEuRmdhV3JpdGVUdXBsZXNSZXF1ZXN0GiUuYXV0aG9yaXplci52MS5GZ2FXcml0ZVR1cGxlc1Jlc3BvbnNlIh+C0+STAhk6ASoiFC92MS9hZG1pbi9mZ2EvdHVwbGVzEogBCg9GZ2FEZWxldGVUdXBsZXMSJS5hdXRob3JpemVyLnYxLkZnYURlbGV0ZVR1cGxlc1JlcXVlc3QaJi5hdXRob3JpemVyLnYxLkZnYURlbGV0ZVR1cGxlc1Jlc3BvbnNlIiaC0+STAiA6ASoiGy92MS9hZG1pbi9mZ2EvdHVwbGVzL2RlbGV0ZRKAAQoNRmdhUmVhZFR1cGxlcxIjLmF1dGhvcml6ZXIudjEuRmdhUmVhZFR1cGxlc1JlcXVlc3QaJC5hdXRob3JpemVyLnYxLkZnYVJlYWRUdXBsZXNSZXNwb25zZSIkgtPkkwIeOgEqIhkvdjEvYWRtaW4vZmdhL3R1cGxlcy9yZWFkEnwKDEZnYUxpc3RVc2VycxIiLmF1dGhvcml6ZXIudjEuRmdhTGlzdFVzZXJzUmVxdWVzdBojLmF1dGhvcml6ZXIudjEuRmdhTGlzdFVzZXJzUmVzcG9uc2UiI4LT5JMCHToBKiIYL3YxL2FkbWluL2ZnYS9saXN0X3VzZXJzEm8KCUZnYUV4cGFuZBIfLmF1dGhvcml6ZXIudjEuRmdhRXhwYW5kUmVxdWVzdBogLmF1dGhvcml6ZXIudjEuRmdhRXhwYW5kUmVzcG9uc2UiH4LT5JMCGToBKiIUL3YxL2FkbWluL2ZnYS9leHBhbmQSawoIRmdhUmVzZXQSHi5hdXRob3JpemVyLnYxLkZnYVJlc2V0UmVxdWVzdBofLmF1dGhvcml6ZXIudjEuRmdhUmVzZXRSZXNwb25zZSIegtPkkwIYOgEqIhMvdjEvYWRtaW4vZmdhL3Jlc2V0EnsKDENyZWF0ZUNsaWVudBIiLmF1dGhvcml6ZXIudjEuQ3JlYXRlQ2xpZW50UmVxdWVzdBojLmF1dGhvcml6ZXIudjEuQ3JlYXRlQ2xpZW50UmVzcG9uc2UiIoLT5JMCHDoBKiIXL3YxL2FkbWluL2NyZWF0ZV9jbGllbnQSewoMVXBkYXRlQ2xpZW50EiIuYXV0aG9yaXplci52MS5VcGRhdGVDbGllbnRSZXF1ZXN0GiMuYXV0aG9yaXplci52MS5VcGRhdGVDbGllbnRSZXNwb25zZSIigtPkkwIcOgEqIhcvdjEvYWRtaW4vdXBkYXRlX2NsaWVudBJ7CgxEZWxldGVDbGllbnQSIi5hdXRob3JpemVyLnYxLkRlbGV0ZUNsaWVudFJlcXVlc3QaIy5hdXRob3JpemVyLnYxLkRlbGV0ZUNsaWVudFJlc3BvbnNlIiKC0+STAhw6ASoiFy92MS9hZG1pbi9kZWxldGVfY2xpZW50Eo4BChJSb3RhdGVDbGllbnRTZWNyZXQSKC5hdXRob3JpemVyLnYxLlJvdGF0ZUNsaWVudFNlY3JldFJlcXVlc3QaIy5hdXRob3JpemVyLnYxLkNyZWF0ZUNsaWVudFJlc3BvbnNlIimC0+STAiM6ASoiHi92MS9hZG1pbi9yb3RhdGVfY2xpZW50X3NlY3JldBJrCglHZXRDbGllbnQSHy5hdXRob3JpemVyLnYxLkdldENsaWVudFJlcXVlc3QaIC5hdXRob3JpemVyLnYxLkdldENsaWVudFJlc3BvbnNlIhuC0+STAhU6ASoiEC92MS9hZG1pbi9jbGllbnQSZgoHQ2xpZW50cxIdLmF1dGhvcml6ZXIudjEuQ2xpZW50c1JlcXVlc3QaHi5hdXRob3JpemVyLnYxLkNsaWVudHNSZXNwb25zZSIcgtPkkwIWOgEqIhEvdjEvYWRtaW4vY2xpZW50cxKMAQoQQWRkVHJ1c3RlZElzc3VlchImLmF1dGhvcml6ZXIudjEuQWRkVHJ1c3RlZElzc3VlclJlcXVlc3QaJy5hdXRob3JpemVyLnYxLkFkZFRydXN0ZWRJc3N1ZXJSZXNwb25zZSIngtPkkwIhOgEqIhwvdjEvYWRtaW4vYWRkX3RydXN0ZWRfaXNzdWVyEpgBChNVcGRhdGVUcnVzdGVkSXNzdWVyEikuYXV0aG9yaXplci52MS5VcGRhdGVUcnVzdGVkSXNzdWVyUmVxdWVzdBoqLmF1dGhvcml6ZXIudjEuVXBkYXRlVHJ1c3RlZElzc3VlclJlc3BvbnNlIiqC0+STAiQ6ASoiHy92MS9hZG1pbi91cGRhdGVfdHJ1c3RlZF9pc3N1ZXISmAEKE0RlbGV0ZVRydXN0ZWRJc3N1ZXISKS5hdXRob3JpemVyLnYxLkRlbGV0ZVRydXN0ZWRJc3N1ZXJSZXF1ZXN0GiouYXV0aG9yaXplci52MS5EZWxldGVUcnVzdGVkSXNzdWVyUmVzcG9uc2UiKoLT5JMCJDoBKiIfL3YxL2FkbWluL2RlbGV0ZV90cnVzdGVkX2lzc3VlchKIAQoQR2V0VHJ1c3RlZElzc3VlchImLmF1dGhvcml6ZXIudjEuR2V0VHJ1c3RlZElzc3VlclJlcXVlc3QaJy5hdXRob3JpemVyLnYxLkdldFRydXN0ZWRJc3N1ZXJSZXNwb25zZSIjgtPkkwIdOgEqIhgvdjEvYWRtaW4vdHJ1c3RlZF9pc3N1ZXISgwEKDlRydXN0ZWRJc3N1ZXJzEiQuYXV0aG9yaXplci52MS5UcnVzdGVkSXNzdWVyc1JlcXVlc3QaJS5hdXRob3JpemVyLnYxLlRydXN0ZWRJc3N1ZXJzUmVzcG9uc2UiJILT5JMCHjoBKiIZL3YxL2FkbWluL3RydXN0ZWRfaXNzdWVycxKxAQoZQ3JlYXRlU2FtbFNlcnZpY2VQcm92aWRlchIvLmF1dGhvcml6ZXIudjEuQ3JlYXRlU2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QaMC5hdXRob3JpemVyLnYxLkNyZWF0ZVNhbWxTZXJ2aWNlUHJvdmlkZXJSZXNwb25zZSIxgtPkkwIrOgEqIiYvdjEvYWRtaW4vY3JlYXRlX3NhbWxfc2VydmljZV9wcm92aWRlchKxAQoZVXBkYXRlU2FtbFNlcnZpY2VQcm92aWRlchIvLmF1dGhvcml6ZXIudjEuVXBkYXRlU2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QaMC5hdXRob3JpemVyLnYxLlVwZGF0ZVNhbWxTZXJ2aWNlUHJvdmlkZXJSZXNwb25zZSIxgtPkkwIrOgEqIiYvdjEvYWRtaW4vdXBkYXRlX3NhbWxfc2VydmljZV9wcm92aWRlchKxAQoZRGVsZXRlU2FtbFNlcnZpY2VQcm92aWRlchIvLmF1dGhvcml6ZXIudjEuRGVsZXRlU2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QaMC5hdXRob3JpemVyLnYxLkRlbGV0ZVNhbWxTZXJ2aWNlUHJvdmlkZXJSZXNwb25zZSIxgtPkkwIrOgEqIiYvdjEvYWRtaW4vZGVsZXRlX3NhbWxfc2VydmljZV9wcm92aWRlchKhAQoWR2V0U2FtbFNlcnZpY2VQcm92aWRlchIsLmF1dGhvcml6ZXIudjEuR2V0U2FtbFNlcnZpY2VQcm92aWRlclJlcXVlc3QaLS5hdXRob3JpemVyLnYxLkdldFNhbWxTZXJ2aWNlUHJvdmlkZXJSZXNwb25zZSIqgtPkkwIkOgEqIh8vdjEvYWRtaW4vc2FtbF9zZXJ2aWNlX3Byb3ZpZGVyEqgBChhMaXN0U2FtbFNlcnZpY2VQcm92aWRlcnMSLi5hdXRob3JpemVyLnYxLkxpc3RTYW1sU2VydmljZVByb3ZpZGVyc1JlcXVlc3QaLy5hdXRob3JpemVyLnYxLkxpc3RTYW1sU2VydmljZVByb3ZpZGVyc1Jlc3BvbnNlIiuC0+STAiU6ASoiIC92MS9hZG1pbi9zYW1sX3NlcnZpY2VfcHJvdmlkZXJzEpEBChFSb3RhdGVTYW1sSWRwQ2VydBInLmF1dGhvcml6ZXIudjEuUm90YXRlU2FtbElkcENlcnRSZXF1ZXN0GiguYXV0aG9yaXplci52MS5Sb3RhdGVTYW1sSWRwQ2VydFJlc3BvbnNlIimC0+STAiM6ASoiHi92MS9hZG1pbi9yb3RhdGVfc2FtbF9pZHBfY2VydBKNAQoQUmV0aXJlU2FtbElkcEtleRImLmF1dGhvcml6ZXIudjEuUmV0aXJlU2FtbElkcEtleVJlcXVlc3QaJy5hdXRob3JpemVyLnYxLlJldGlyZVNhbWxJZHBLZXlSZXNwb25zZSIogtPkkwIiOgEqIh0vdjEvYWRtaW4vcmV0aXJlX3NhbWxfaWRwX2tleRKEAQoPTGlzdFNhbWxJZHBLZXlzEiUuYXV0aG9yaXplci52MS5MaXN0U2FtbElkcEtleXNSZXF1ZXN0GiYuYXV0aG9yaXplci52MS5MaXN0U2FtbElkcEtleXNSZXNwb25zZSIigtPkkwIcOgEqIhcvdjEvYWRtaW4vc2FtbF9pZHBfa2V5cxKdAQoUSW1wb3J0U2FtbFNwTWV0YWRhdGESKi5hdXRob3JpemVyLnYxLkltcG9ydFNhbWxTcE1ldGFkYXRhUmVxdWVzdBorLmF1dGhvcml6ZXIudjEuSW1wb3J0U2FtbFNwTWV0YWRhdGFSZXNwb25zZSIsgtPkkwImOgEqIiEvdjEvYWRtaW4vaW1wb3J0X3NhbWxfc3BfbWV0YWRhdGFiBnByb3RvMw", [file_authorizer_v1_annotations, file_authorizer_v1_common, file_authorizer_v1_pagination, file_authorizer_v1_types, file_buf_validate_validate, file_google_api_annotations]); /** * @generated from message authorizer.v1.AdminLoginRequest diff --git a/gen/ts/authorizer/v1/annotations_pb.ts b/gen/ts/authorizer/v1/annotations_pb.ts index f4a0b494..456641dd 100644 --- a/gen/ts/authorizer/v1/annotations_pb.ts +++ b/gen/ts/authorizer/v1/annotations_pb.ts @@ -21,7 +21,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file authorizer/v1/annotations.proto. */ export const file_authorizer_v1_annotations: GenFile = /*@__PURE__*/ - fileDesc("Ch9hdXRob3JpemVyL3YxL2Fubm90YXRpb25zLnByb3RvEg1hdXRob3JpemVyLnYxIjgKFVBlcm1pc3Npb25SZXF1aXJlbWVudBIQCghyZXNvdXJjZRgBIAEoCRINCgVzY29wZRgCIAEoCSJCCgdNY3BUb29sEg8KB2V4cG9zZWQYASABKAgSEQoJdG9vbF9uYW1lGAIgASgJEhMKC2Rlc3RydWN0aXZlGAMgASgIOnkKFHJlcXVpcmVkX3Blcm1pc3Npb25zEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMY0YYDIAMoCzIkLmF1dGhvcml6ZXIudjEuUGVybWlzc2lvblJlcXVpcmVtZW50UhNyZXF1aXJlZFBlcm1pc3Npb25zOlMKCG1jcF90b29sEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMY0oYDIAEoCzIWLmF1dGhvcml6ZXIudjEuTWNwVG9vbFIHbWNwVG9vbDo9CglhdWRpdF9sb2cSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxjThgMgASgIUghhdWRpdExvZzo4CgZwdWJsaWMSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxjUhgMgASgIUgZwdWJsaWNCzAEKEWNvbS5hdXRob3JpemVyLnYxQhBBbm5vdGF0aW9uc1Byb3RvUAFaUGdpdGh1Yi5jb20vYXV0aG9yaXplcmRldi9hdXRob3JpemVyLWdvL2ludGVybmFsL2dlbnBiL2F1dGhvcml6ZXIvdjE7YXV0aG9yaXplcnYxogIDQVhYqgINQXV0aG9yaXplci5WMcoCDUF1dGhvcml6ZXJcVjHiAhlBdXRob3JpemVyXFYxXEdQQk1ldGFkYXRh6gIOQXV0aG9yaXplcjo6VjFiBnByb3RvMw", [file_google_protobuf_descriptor]); + fileDesc("Ch9hdXRob3JpemVyL3YxL2Fubm90YXRpb25zLnByb3RvEg1hdXRob3JpemVyLnYxIjgKFVBlcm1pc3Npb25SZXF1aXJlbWVudBIQCghyZXNvdXJjZRgBIAEoCRINCgVzY29wZRgCIAEoCSJCCgdNY3BUb29sEg8KB2V4cG9zZWQYASABKAgSEQoJdG9vbF9uYW1lGAIgASgJEhMKC2Rlc3RydWN0aXZlGAMgASgIOnkKFHJlcXVpcmVkX3Blcm1pc3Npb25zEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMY0YYDIAMoCzIkLmF1dGhvcml6ZXIudjEuUGVybWlzc2lvblJlcXVpcmVtZW50UhNyZXF1aXJlZFBlcm1pc3Npb25zOlMKCG1jcF90b29sEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMY0oYDIAEoCzIWLmF1dGhvcml6ZXIudjEuTWNwVG9vbFIHbWNwVG9vbDo9CglhdWRpdF9sb2cSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxjThgMgASgIUghhdWRpdExvZzo4CgZwdWJsaWMSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxjUhgMgASgIUgZwdWJsaWNiBnByb3RvMw", [file_google_protobuf_descriptor]); /** * PermissionRequirement names one (resource, scope) pair the caller must hold diff --git a/gen/ts/authorizer/v1/authorizer_pb.ts b/gen/ts/authorizer/v1/authorizer_pb.ts index 8380bbb9..d7db0902 100644 --- a/gen/ts/authorizer/v1/authorizer_pb.ts +++ b/gen/ts/authorizer/v1/authorizer_pb.ts @@ -37,7 +37,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file authorizer/v1/authorizer.proto. */ export const file_authorizer_v1_authorizer: GenFile = /*@__PURE__*/ - fileDesc("Ch5hdXRob3JpemVyL3YxL2F1dGhvcml6ZXIucHJvdG8SDWF1dGhvcml6ZXIudjEioAMKDVNpZ251cFJlcXVlc3QSFwoFZW1haWwYASABKAlCCLpIBXIDGMACEh0KDHBob25lX251bWJlchgCIAEoCUIHukgEcgIYIBIcCghwYXNzd29yZBgDIAEoCUIKukgHcgUQARiAARIkChBjb25maXJtX3Bhc3N3b3JkGAQgASgJQgq6SAdyBRABGIABEhIKCmdpdmVuX25hbWUYBSABKAkSEwoLZmFtaWx5X25hbWUYBiABKAkSEwoLbWlkZGxlX25hbWUYByABKAkSEAoIbmlja25hbWUYCCABKAkSDgoGZ2VuZGVyGAkgASgJEhEKCWJpcnRoZGF0ZRgKIAEoCRIPCgdwaWN0dXJlGAsgASgJEg0KBXJvbGVzGAwgAygJEg0KBXNjb3BlGA0gAygJEhQKDHJlZGlyZWN0X3VyaRgOIAEoCRINCgVzdGF0ZRgQIAEoCRIoCghhcHBfZGF0YRgRIAEoCzIWLmF1dGhvcml6ZXIudjEuQXBwRGF0YUoECA8QEFIcaXNfbXVsdGlfZmFjdG9yX2F1dGhfZW5hYmxlZCKRAQoMTG9naW5SZXF1ZXN0EhcKBWVtYWlsGAEgASgJQgi6SAVyAxjAAhIdCgxwaG9uZV9udW1iZXIYAiABKAlCB7pIBHICGCASHAoIcGFzc3dvcmQYAyABKAlCCrpIB3IFEAEYgAESDQoFcm9sZXMYBCADKAkSDQoFc2NvcGUYBSADKAkSDQoFc3RhdGUYBiABKAkiDwoNTG9nb3V0UmVxdWVzdCIhCg5Mb2dvdXRSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJInMKFU1hZ2ljTGlua0xvZ2luUmVxdWVzdBIXCgVlbWFpbBgBIAEoCUIIukgFcgMYwAISDQoFcm9sZXMYAiADKAkSDQoFc2NvcGUYAyADKAkSDQoFc3RhdGUYBCABKAkSFAoMcmVkaXJlY3RfdXJpGAUgASgJIikKFk1hZ2ljTGlua0xvZ2luUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSI7ChJWZXJpZnlFbWFpbFJlcXVlc3QSFgoFdG9rZW4YASABKAlCB7pIBHICEAESDQoFc3RhdGUYAiABKAkiXwoYUmVzZW5kVmVyaWZ5RW1haWxSZXF1ZXN0EhcKBWVtYWlsGAEgASgJQgi6SAVyAxjAAhIbCgppZGVudGlmaWVyGAIgASgJQge6SARyAhABEg0KBXN0YXRlGAMgASgJIiwKGVJlc2VuZFZlcmlmeUVtYWlsUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSKCAQoQVmVyaWZ5T3RwUmVxdWVzdBIXCgVlbWFpbBgBIAEoCUIIukgFcgMYwAISHQoMcGhvbmVfbnVtYmVyGAIgASgJQge6SARyAhggEhYKA290cBgDIAEoCUIJukgGcgQQARgQEg8KB2lzX3RvdHAYBCABKAgSDQoFc3RhdGUYBSABKAkiWQoQUmVzZW5kT3RwUmVxdWVzdBIXCgVlbWFpbBgBIAEoCUIIukgFcgMYwAISHQoMcGhvbmVfbnVtYmVyGAIgASgJQge6SARyAhggEg0KBXN0YXRlGAMgASgJIiQKEVJlc2VuZE90cFJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiXAoTU2tpcE1mYVNldHVwUmVxdWVzdBIXCgVlbWFpbBgBIAEoCUIIukgFcgMYwAISHQoMcGhvbmVfbnVtYmVyGAIgASgJQge6SARyAhggEg0KBXN0YXRlGAMgASgJIkgKDkxvY2tNZmFSZXF1ZXN0EhcKBWVtYWlsGAEgASgJQgi6SAVyAxjAAhIdCgxwaG9uZV9udW1iZXIYAiABKAlCB7pIBHICGCAiIgoPTG9ja01mYVJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiUQoXRW1haWxPdHBNZmFTZXR1cFJlcXVlc3QSFwoFZW1haWwYASABKAlCCLpIBXIDGMACEh0KDHBob25lX251bWJlchgCIAEoCUIHukgEcgIYICIrChhFbWFpbE90cE1mYVNldHVwUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSJPChVTbXNPdHBNZmFTZXR1cFJlcXVlc3QSFwoFZW1haWwYASABKAlCCLpIBXIDGMACEh0KDHBob25lX251bWJlchgCIAEoCUIHukgEcgIYICIpChZTbXNPdHBNZmFTZXR1cFJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkidAoVRm9yZ290UGFzc3dvcmRSZXF1ZXN0EhcKBWVtYWlsGAEgASgJQgi6SAVyAxjAAhIdCgxwaG9uZV9udW1iZXIYAiABKAlCB7pIBHICGCASDQoFc3RhdGUYAyABKAkSFAoMcmVkaXJlY3RfdXJpGAQgASgJIlAKFkZvcmdvdFBhc3N3b3JkUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCRIlCh1zaG91bGRfc2hvd19tb2JpbGVfb3RwX3NjcmVlbhgCIAEoCCKVAQoUUmVzZXRQYXNzd29yZFJlcXVlc3QSDQoFdG9rZW4YASABKAkSCwoDb3RwGAIgASgJEh0KDHBob25lX251bWJlchgDIAEoCUIHukgEcgIYIBIcCghwYXNzd29yZBgEIAEoCUIKukgHcgUQARiAARIkChBjb25maXJtX3Bhc3N3b3JkGAUgASgJQgq6SAdyBRABGIABIigKFVJlc2V0UGFzc3dvcmRSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIhAKDlByb2ZpbGVSZXF1ZXN0IqYDChRVcGRhdGVQcm9maWxlUmVxdWVzdBIUCgxvbGRfcGFzc3dvcmQYASABKAkSHgoMbmV3X3Bhc3N3b3JkGAIgASgJQgi6SAVyAxiAARImChRjb25maXJtX25ld19wYXNzd29yZBgDIAEoCUIIukgFcgMYgAESFwoFZW1haWwYBCABKAlCCLpIBXIDGMACEhIKCmdpdmVuX25hbWUYBSABKAkSEwoLZmFtaWx5X25hbWUYBiABKAkSEwoLbWlkZGxlX25hbWUYByABKAkSEAoIbmlja25hbWUYCCABKAkSDgoGZ2VuZGVyGAkgASgJEhEKCWJpcnRoZGF0ZRgKIAEoCRIdCgxwaG9uZV9udW1iZXIYCyABKAlCB7pIBHICGCASDwoHcGljdHVyZRgMIAEoCRIpChxpc19tdWx0aV9mYWN0b3JfYXV0aF9lbmFibGVkGA0gASgISACIAQESKAoIYXBwX2RhdGEYDiABKAsyFi5hdXRob3JpemVyLnYxLkFwcERhdGFCHwodX2lzX211bHRpX2ZhY3Rvcl9hdXRoX2VuYWJsZWQiKAoVVXBkYXRlUHJvZmlsZVJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiGgoYRGVhY3RpdmF0ZUFjY291bnRSZXF1ZXN0IiwKGURlYWN0aXZhdGVBY2NvdW50UmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSIvCg1SZXZva2VSZXF1ZXN0Eh4KDXJlZnJlc2hfdG9rZW4YASABKAlCB7pIBHICEAEiIQoOUmV2b2tlUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSJ6Cg5TZXNzaW9uUmVxdWVzdBINCgVyb2xlcxgBIAMoCRINCgVzY29wZRgCIAMoCRINCgVzdGF0ZRgDIAEoCRI7ChJyZXF1aXJlZF9yZWxhdGlvbnMYBCADKAsyHy5hdXRob3JpemVyLnYxLkZnYVJlbGF0aW9uSW5wdXQimgEKF1ZhbGlkYXRlSnd0VG9rZW5SZXF1ZXN0EhsKCnRva2VuX3R5cGUYASABKAlCB7pIBHICEAESFgoFdG9rZW4YAiABKAlCB7pIBHICEAESDQoFcm9sZXMYAyADKAkSOwoScmVxdWlyZWRfcmVsYXRpb25zGAQgAygLMh8uYXV0aG9yaXplci52MS5GZ2FSZWxhdGlvbklucHV0IlQKGFZhbGlkYXRlSnd0VG9rZW5SZXNwb25zZRIQCghpc192YWxpZBgBIAEoCBImCgZjbGFpbXMYAiABKAsyFi5hdXRob3JpemVyLnYxLkFwcERhdGEifQoWVmFsaWRhdGVTZXNzaW9uUmVxdWVzdBIXCgZjb29raWUYASABKAlCB7pIBHICEAESDQoFcm9sZXMYAiADKAkSOwoScmVxdWlyZWRfcmVsYXRpb25zGAMgAygLMh8uYXV0aG9yaXplci52MS5GZ2FSZWxhdGlvbklucHV0Ik4KF1ZhbGlkYXRlU2Vzc2lvblJlc3BvbnNlEhAKCGlzX3ZhbGlkGAEgASgIEiEKBHVzZXIYAiABKAsyEy5hdXRob3JpemVyLnYxLlVzZXIiDQoLTWV0YVJlcXVlc3QiaAoXQ2hlY2tQZXJtaXNzaW9uc1JlcXVlc3QSPwoGY2hlY2tzGAEgAygLMiMuYXV0aG9yaXplci52MS5QZXJtaXNzaW9uQ2hlY2tJbnB1dEIKukgHkgEECAEQZBIMCgR1c2VyGAIgASgJIlEKGENoZWNrUGVybWlzc2lvbnNSZXNwb25zZRI1CgdyZXN1bHRzGAEgAygLMiQuYXV0aG9yaXplci52MS5QZXJtaXNzaW9uQ2hlY2tSZXN1bHQiTQoWTGlzdFBlcm1pc3Npb25zUmVxdWVzdBIQCghyZWxhdGlvbhgBIAEoCRITCgtvYmplY3RfdHlwZRgCIAEoCRIMCgR1c2VyGAMgASgJIm0KF0xpc3RQZXJtaXNzaW9uc1Jlc3BvbnNlEg8KB29iamVjdHMYASADKAkSLgoLcGVybWlzc2lvbnMYAiADKAsyGS5hdXRob3JpemVyLnYxLlBlcm1pc3Npb24SEQoJdHJ1bmNhdGVkGAMgASgIMucWChFBdXRob3JpemVyU2VydmljZRJmCgZTaWdudXASHC5hdXRob3JpemVyLnYxLlNpZ251cFJlcXVlc3QaGy5hdXRob3JpemVyLnYxLkF1dGhSZXNwb25zZSIhkrUYAJi1GAGgtRgBgtPkkwIPOgEqIgovdjEvc2lnbnVwEmMKBUxvZ2luEhsuYXV0aG9yaXplci52MS5Mb2dpblJlcXVlc3QaGy5hdXRob3JpemVyLnYxLkF1dGhSZXNwb25zZSIgkrUYAJi1GAGgtRgBgtPkkwIOOgEqIgkvdjEvbG9naW4SXQoGTG9nb3V0EhwuYXV0aG9yaXplci52MS5Mb2dvdXRSZXF1ZXN0Gh0uYXV0aG9yaXplci52MS5Mb2dvdXRSZXNwb25zZSIWmLUYAYLT5JMCDCIKL3YxL2xvZ291dBKGAQoOTWFnaWNMaW5rTG9naW4SJC5hdXRob3JpemVyLnYxLk1hZ2ljTGlua0xvZ2luUmVxdWVzdBolLmF1dGhvcml6ZXIudjEuTWFnaWNMaW5rTG9naW5SZXNwb25zZSInmLUYAaC1GAGC0+STAhk6ASoiFC92MS9tYWdpY19saW5rX2xvZ2luEnIKC1ZlcmlmeUVtYWlsEiEuYXV0aG9yaXplci52MS5WZXJpZnlFbWFpbFJlcXVlc3QaGy5hdXRob3JpemVyLnYxLkF1dGhSZXNwb25zZSIjmLUYAaC1GAGC0+STAhU6ASoiEC92MS92ZXJpZnlfZW1haWwSjgEKEVJlc2VuZFZlcmlmeUVtYWlsEicuYXV0aG9yaXplci52MS5SZXNlbmRWZXJpZnlFbWFpbFJlcXVlc3QaKC5hdXRob3JpemVyLnYxLlJlc2VuZFZlcmlmeUVtYWlsUmVzcG9uc2UiJqC1GAGC0+STAhw6ASoiFy92MS9yZXNlbmRfdmVyaWZ5X2VtYWlsEmwKCVZlcmlmeU90cBIfLmF1dGhvcml6ZXIudjEuVmVyaWZ5T3RwUmVxdWVzdBobLmF1dGhvcml6ZXIudjEuQXV0aFJlc3BvbnNlIiGYtRgBoLUYAYLT5JMCEzoBKiIOL3YxL3ZlcmlmeV9vdHASbQoJUmVzZW5kT3RwEh8uYXV0aG9yaXplci52MS5SZXNlbmRPdHBSZXF1ZXN0GiAuYXV0aG9yaXplci52MS5SZXNlbmRPdHBSZXNwb25zZSIdoLUYAYLT5JMCEzoBKiIOL3YxL3Jlc2VuZF9vdHASdgoMU2tpcE1mYVNldHVwEiIuYXV0aG9yaXplci52MS5Ta2lwTWZhU2V0dXBSZXF1ZXN0GhsuYXV0aG9yaXplci52MS5BdXRoUmVzcG9uc2UiJZi1GAGgtRgBgtPkkwIXOgEqIhIvdjEvc2tpcF9tZmFfc2V0dXASaQoHTG9ja01mYRIdLmF1dGhvcml6ZXIudjEuTG9ja01mYVJlcXVlc3QaHi5hdXRob3JpemVyLnYxLkxvY2tNZmFSZXNwb25zZSIfmLUYAaC1GAGC0+STAhE6ASoiDC92MS9sb2NrX21mYRKPAQoQRW1haWxPdHBNZmFTZXR1cBImLmF1dGhvcml6ZXIudjEuRW1haWxPdHBNZmFTZXR1cFJlcXVlc3QaJy5hdXRob3JpemVyLnYxLkVtYWlsT3RwTWZhU2V0dXBSZXNwb25zZSIqmLUYAaC1GAGC0+STAhw6ASoiFy92MS9lbWFpbF9vdHBfbWZhX3NldHVwEocBCg5TbXNPdHBNZmFTZXR1cBIkLmF1dGhvcml6ZXIudjEuU21zT3RwTWZhU2V0dXBSZXF1ZXN0GiUuYXV0aG9yaXplci52MS5TbXNPdHBNZmFTZXR1cFJlc3BvbnNlIiiYtRgBoLUYAYLT5JMCGjoBKiIVL3YxL3Ntc19vdHBfbWZhX3NldHVwEoEBCg5Gb3Jnb3RQYXNzd29yZBIkLmF1dGhvcml6ZXIudjEuRm9yZ290UGFzc3dvcmRSZXF1ZXN0GiUuYXV0aG9yaXplci52MS5Gb3Jnb3RQYXNzd29yZFJlc3BvbnNlIiKgtRgBgtPkkwIYOgEqIhMvdjEvZm9yZ290X3Bhc3N3b3JkEoEBCg1SZXNldFBhc3N3b3JkEiMuYXV0aG9yaXplci52MS5SZXNldFBhc3N3b3JkUmVxdWVzdBokLmF1dGhvcml6ZXIudjEuUmVzZXRQYXNzd29yZFJlc3BvbnNlIiWYtRgBoLUYAYLT5JMCFzoBKiISL3YxL3Jlc2V0X3Bhc3N3b3JkElgKB1Byb2ZpbGUSHS5hdXRob3JpemVyLnYxLlByb2ZpbGVSZXF1ZXN0GhMuYXV0aG9yaXplci52MS5Vc2VyIhmStRgCCAGC0+STAg0SCy92MS9wcm9maWxlEn0KDVVwZGF0ZVByb2ZpbGUSIy5hdXRob3JpemVyLnYxLlVwZGF0ZVByb2ZpbGVSZXF1ZXN0GiQuYXV0aG9yaXplci52MS5VcGRhdGVQcm9maWxlUmVzcG9uc2UiIZi1GAGC0+STAhc6ASoiEi92MS91cGRhdGVfcHJvZmlsZRKTAQoRRGVhY3RpdmF0ZUFjY291bnQSJy5hdXRob3JpemVyLnYxLkRlYWN0aXZhdGVBY2NvdW50UmVxdWVzdBooLmF1dGhvcml6ZXIudjEuRGVhY3RpdmF0ZUFjY291bnRSZXNwb25zZSIrkrUYAhgBmLUYAYLT5JMCGzoBKiIWL3YxL2RlYWN0aXZhdGVfYWNjb3VudBJkCgZSZXZva2USHC5hdXRob3JpemVyLnYxLlJldm9rZVJlcXVlc3QaHS5hdXRob3JpemVyLnYxLlJldm9rZVJlc3BvbnNlIh2YtRgBoLUYAYLT5JMCDzoBKiIKL3YxL3Jldm9rZRJdCgdTZXNzaW9uEh0uYXV0aG9yaXplci52MS5TZXNzaW9uUmVxdWVzdBobLmF1dGhvcml6ZXIudjEuQXV0aFJlc3BvbnNlIhaC0+STAhA6ASoiCy92MS9zZXNzaW9uEooBChBWYWxpZGF0ZUp3dFRva2VuEiYuYXV0aG9yaXplci52MS5WYWxpZGF0ZUp3dFRva2VuUmVxdWVzdBonLmF1dGhvcml6ZXIudjEuVmFsaWRhdGVKd3RUb2tlblJlc3BvbnNlIiWgtRgBgtPkkwIbOgEqIhYvdjEvdmFsaWRhdGVfand0X3Rva2VuEoUBCg9WYWxpZGF0ZVNlc3Npb24SJS5hdXRob3JpemVyLnYxLlZhbGlkYXRlU2Vzc2lvblJlcXVlc3QaJi5hdXRob3JpemVyLnYxLlZhbGlkYXRlU2Vzc2lvblJlc3BvbnNlIiOgtRgBgtPkkwIZOgEqIhQvdjEvdmFsaWRhdGVfc2Vzc2lvbhJTCgRNZXRhEhouYXV0aG9yaXplci52MS5NZXRhUmVxdWVzdBoTLmF1dGhvcml6ZXIudjEuTWV0YSIakrUYAggBoLUYAYLT5JMCChIIL3YxL21ldGESiwEKEENoZWNrUGVybWlzc2lvbnMSJi5hdXRob3JpemVyLnYxLkNoZWNrUGVybWlzc2lvbnNSZXF1ZXN0GicuYXV0aG9yaXplci52MS5DaGVja1Blcm1pc3Npb25zUmVzcG9uc2UiJpK1GAIIAYLT5JMCGjoBKiIVL3YxL2NoZWNrX3Blcm1pc3Npb25zEocBCg9MaXN0UGVybWlzc2lvbnMSJS5hdXRob3JpemVyLnYxLkxpc3RQZXJtaXNzaW9uc1JlcXVlc3QaJi5hdXRob3JpemVyLnYxLkxpc3RQZXJtaXNzaW9uc1Jlc3BvbnNlIiWStRgCCAGC0+STAhk6ASoiFC92MS9saXN0X3Blcm1pc3Npb25zQssBChFjb20uYXV0aG9yaXplci52MUIPQXV0aG9yaXplclByb3RvUAFaUGdpdGh1Yi5jb20vYXV0aG9yaXplcmRldi9hdXRob3JpemVyLWdvL2ludGVybmFsL2dlbnBiL2F1dGhvcml6ZXIvdjE7YXV0aG9yaXplcnYxogIDQVhYqgINQXV0aG9yaXplci5WMcoCDUF1dGhvcml6ZXJcVjHiAhlBdXRob3JpemVyXFYxXEdQQk1ldGFkYXRh6gIOQXV0aG9yaXplcjo6VjFiBnByb3RvMw", [file_authorizer_v1_annotations, file_authorizer_v1_common, file_authorizer_v1_types, file_buf_validate_validate, file_google_api_annotations]); + fileDesc("Ch5hdXRob3JpemVyL3YxL2F1dGhvcml6ZXIucHJvdG8SDWF1dGhvcml6ZXIudjEioAMKDVNpZ251cFJlcXVlc3QSFwoFZW1haWwYASABKAlCCLpIBXIDGMACEh0KDHBob25lX251bWJlchgCIAEoCUIHukgEcgIYIBIcCghwYXNzd29yZBgDIAEoCUIKukgHcgUQARiAARIkChBjb25maXJtX3Bhc3N3b3JkGAQgASgJQgq6SAdyBRABGIABEhIKCmdpdmVuX25hbWUYBSABKAkSEwoLZmFtaWx5X25hbWUYBiABKAkSEwoLbWlkZGxlX25hbWUYByABKAkSEAoIbmlja25hbWUYCCABKAkSDgoGZ2VuZGVyGAkgASgJEhEKCWJpcnRoZGF0ZRgKIAEoCRIPCgdwaWN0dXJlGAsgASgJEg0KBXJvbGVzGAwgAygJEg0KBXNjb3BlGA0gAygJEhQKDHJlZGlyZWN0X3VyaRgOIAEoCRINCgVzdGF0ZRgQIAEoCRIoCghhcHBfZGF0YRgRIAEoCzIWLmF1dGhvcml6ZXIudjEuQXBwRGF0YUoECA8QEFIcaXNfbXVsdGlfZmFjdG9yX2F1dGhfZW5hYmxlZCKRAQoMTG9naW5SZXF1ZXN0EhcKBWVtYWlsGAEgASgJQgi6SAVyAxjAAhIdCgxwaG9uZV9udW1iZXIYAiABKAlCB7pIBHICGCASHAoIcGFzc3dvcmQYAyABKAlCCrpIB3IFEAEYgAESDQoFcm9sZXMYBCADKAkSDQoFc2NvcGUYBSADKAkSDQoFc3RhdGUYBiABKAkiDwoNTG9nb3V0UmVxdWVzdCIhCg5Mb2dvdXRSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJInMKFU1hZ2ljTGlua0xvZ2luUmVxdWVzdBIXCgVlbWFpbBgBIAEoCUIIukgFcgMYwAISDQoFcm9sZXMYAiADKAkSDQoFc2NvcGUYAyADKAkSDQoFc3RhdGUYBCABKAkSFAoMcmVkaXJlY3RfdXJpGAUgASgJIikKFk1hZ2ljTGlua0xvZ2luUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSI7ChJWZXJpZnlFbWFpbFJlcXVlc3QSFgoFdG9rZW4YASABKAlCB7pIBHICEAESDQoFc3RhdGUYAiABKAkiXwoYUmVzZW5kVmVyaWZ5RW1haWxSZXF1ZXN0EhcKBWVtYWlsGAEgASgJQgi6SAVyAxjAAhIbCgppZGVudGlmaWVyGAIgASgJQge6SARyAhABEg0KBXN0YXRlGAMgASgJIiwKGVJlc2VuZFZlcmlmeUVtYWlsUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSKCAQoQVmVyaWZ5T3RwUmVxdWVzdBIXCgVlbWFpbBgBIAEoCUIIukgFcgMYwAISHQoMcGhvbmVfbnVtYmVyGAIgASgJQge6SARyAhggEhYKA290cBgDIAEoCUIJukgGcgQQARgQEg8KB2lzX3RvdHAYBCABKAgSDQoFc3RhdGUYBSABKAkiWQoQUmVzZW5kT3RwUmVxdWVzdBIXCgVlbWFpbBgBIAEoCUIIukgFcgMYwAISHQoMcGhvbmVfbnVtYmVyGAIgASgJQge6SARyAhggEg0KBXN0YXRlGAMgASgJIiQKEVJlc2VuZE90cFJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiXAoTU2tpcE1mYVNldHVwUmVxdWVzdBIXCgVlbWFpbBgBIAEoCUIIukgFcgMYwAISHQoMcGhvbmVfbnVtYmVyGAIgASgJQge6SARyAhggEg0KBXN0YXRlGAMgASgJIkgKDkxvY2tNZmFSZXF1ZXN0EhcKBWVtYWlsGAEgASgJQgi6SAVyAxjAAhIdCgxwaG9uZV9udW1iZXIYAiABKAlCB7pIBHICGCAiIgoPTG9ja01mYVJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiUQoXRW1haWxPdHBNZmFTZXR1cFJlcXVlc3QSFwoFZW1haWwYASABKAlCCLpIBXIDGMACEh0KDHBob25lX251bWJlchgCIAEoCUIHukgEcgIYICIrChhFbWFpbE90cE1mYVNldHVwUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSJPChVTbXNPdHBNZmFTZXR1cFJlcXVlc3QSFwoFZW1haWwYASABKAlCCLpIBXIDGMACEh0KDHBob25lX251bWJlchgCIAEoCUIHukgEcgIYICIpChZTbXNPdHBNZmFTZXR1cFJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkidAoVRm9yZ290UGFzc3dvcmRSZXF1ZXN0EhcKBWVtYWlsGAEgASgJQgi6SAVyAxjAAhIdCgxwaG9uZV9udW1iZXIYAiABKAlCB7pIBHICGCASDQoFc3RhdGUYAyABKAkSFAoMcmVkaXJlY3RfdXJpGAQgASgJIlAKFkZvcmdvdFBhc3N3b3JkUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCRIlCh1zaG91bGRfc2hvd19tb2JpbGVfb3RwX3NjcmVlbhgCIAEoCCKVAQoUUmVzZXRQYXNzd29yZFJlcXVlc3QSDQoFdG9rZW4YASABKAkSCwoDb3RwGAIgASgJEh0KDHBob25lX251bWJlchgDIAEoCUIHukgEcgIYIBIcCghwYXNzd29yZBgEIAEoCUIKukgHcgUQARiAARIkChBjb25maXJtX3Bhc3N3b3JkGAUgASgJQgq6SAdyBRABGIABIigKFVJlc2V0UGFzc3dvcmRSZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIhAKDlByb2ZpbGVSZXF1ZXN0IqYDChRVcGRhdGVQcm9maWxlUmVxdWVzdBIUCgxvbGRfcGFzc3dvcmQYASABKAkSHgoMbmV3X3Bhc3N3b3JkGAIgASgJQgi6SAVyAxiAARImChRjb25maXJtX25ld19wYXNzd29yZBgDIAEoCUIIukgFcgMYgAESFwoFZW1haWwYBCABKAlCCLpIBXIDGMACEhIKCmdpdmVuX25hbWUYBSABKAkSEwoLZmFtaWx5X25hbWUYBiABKAkSEwoLbWlkZGxlX25hbWUYByABKAkSEAoIbmlja25hbWUYCCABKAkSDgoGZ2VuZGVyGAkgASgJEhEKCWJpcnRoZGF0ZRgKIAEoCRIdCgxwaG9uZV9udW1iZXIYCyABKAlCB7pIBHICGCASDwoHcGljdHVyZRgMIAEoCRIpChxpc19tdWx0aV9mYWN0b3JfYXV0aF9lbmFibGVkGA0gASgISACIAQESKAoIYXBwX2RhdGEYDiABKAsyFi5hdXRob3JpemVyLnYxLkFwcERhdGFCHwodX2lzX211bHRpX2ZhY3Rvcl9hdXRoX2VuYWJsZWQiKAoVVXBkYXRlUHJvZmlsZVJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiGgoYRGVhY3RpdmF0ZUFjY291bnRSZXF1ZXN0IiwKGURlYWN0aXZhdGVBY2NvdW50UmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSIvCg1SZXZva2VSZXF1ZXN0Eh4KDXJlZnJlc2hfdG9rZW4YASABKAlCB7pIBHICEAEiIQoOUmV2b2tlUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCSJ6Cg5TZXNzaW9uUmVxdWVzdBINCgVyb2xlcxgBIAMoCRINCgVzY29wZRgCIAMoCRINCgVzdGF0ZRgDIAEoCRI7ChJyZXF1aXJlZF9yZWxhdGlvbnMYBCADKAsyHy5hdXRob3JpemVyLnYxLkZnYVJlbGF0aW9uSW5wdXQimgEKF1ZhbGlkYXRlSnd0VG9rZW5SZXF1ZXN0EhsKCnRva2VuX3R5cGUYASABKAlCB7pIBHICEAESFgoFdG9rZW4YAiABKAlCB7pIBHICEAESDQoFcm9sZXMYAyADKAkSOwoScmVxdWlyZWRfcmVsYXRpb25zGAQgAygLMh8uYXV0aG9yaXplci52MS5GZ2FSZWxhdGlvbklucHV0IlQKGFZhbGlkYXRlSnd0VG9rZW5SZXNwb25zZRIQCghpc192YWxpZBgBIAEoCBImCgZjbGFpbXMYAiABKAsyFi5hdXRob3JpemVyLnYxLkFwcERhdGEifQoWVmFsaWRhdGVTZXNzaW9uUmVxdWVzdBIXCgZjb29raWUYASABKAlCB7pIBHICEAESDQoFcm9sZXMYAiADKAkSOwoScmVxdWlyZWRfcmVsYXRpb25zGAMgAygLMh8uYXV0aG9yaXplci52MS5GZ2FSZWxhdGlvbklucHV0Ik4KF1ZhbGlkYXRlU2Vzc2lvblJlc3BvbnNlEhAKCGlzX3ZhbGlkGAEgASgIEiEKBHVzZXIYAiABKAsyEy5hdXRob3JpemVyLnYxLlVzZXIiDQoLTWV0YVJlcXVlc3QiaAoXQ2hlY2tQZXJtaXNzaW9uc1JlcXVlc3QSPwoGY2hlY2tzGAEgAygLMiMuYXV0aG9yaXplci52MS5QZXJtaXNzaW9uQ2hlY2tJbnB1dEIKukgHkgEECAEQZBIMCgR1c2VyGAIgASgJIlEKGENoZWNrUGVybWlzc2lvbnNSZXNwb25zZRI1CgdyZXN1bHRzGAEgAygLMiQuYXV0aG9yaXplci52MS5QZXJtaXNzaW9uQ2hlY2tSZXN1bHQiTQoWTGlzdFBlcm1pc3Npb25zUmVxdWVzdBIQCghyZWxhdGlvbhgBIAEoCRITCgtvYmplY3RfdHlwZRgCIAEoCRIMCgR1c2VyGAMgASgJIm0KF0xpc3RQZXJtaXNzaW9uc1Jlc3BvbnNlEg8KB29iamVjdHMYASADKAkSLgoLcGVybWlzc2lvbnMYAiADKAsyGS5hdXRob3JpemVyLnYxLlBlcm1pc3Npb24SEQoJdHJ1bmNhdGVkGAMgASgIMucWChFBdXRob3JpemVyU2VydmljZRJmCgZTaWdudXASHC5hdXRob3JpemVyLnYxLlNpZ251cFJlcXVlc3QaGy5hdXRob3JpemVyLnYxLkF1dGhSZXNwb25zZSIhkrUYAJi1GAGgtRgBgtPkkwIPOgEqIgovdjEvc2lnbnVwEmMKBUxvZ2luEhsuYXV0aG9yaXplci52MS5Mb2dpblJlcXVlc3QaGy5hdXRob3JpemVyLnYxLkF1dGhSZXNwb25zZSIgkrUYAJi1GAGgtRgBgtPkkwIOOgEqIgkvdjEvbG9naW4SXQoGTG9nb3V0EhwuYXV0aG9yaXplci52MS5Mb2dvdXRSZXF1ZXN0Gh0uYXV0aG9yaXplci52MS5Mb2dvdXRSZXNwb25zZSIWmLUYAYLT5JMCDCIKL3YxL2xvZ291dBKGAQoOTWFnaWNMaW5rTG9naW4SJC5hdXRob3JpemVyLnYxLk1hZ2ljTGlua0xvZ2luUmVxdWVzdBolLmF1dGhvcml6ZXIudjEuTWFnaWNMaW5rTG9naW5SZXNwb25zZSInmLUYAaC1GAGC0+STAhk6ASoiFC92MS9tYWdpY19saW5rX2xvZ2luEnIKC1ZlcmlmeUVtYWlsEiEuYXV0aG9yaXplci52MS5WZXJpZnlFbWFpbFJlcXVlc3QaGy5hdXRob3JpemVyLnYxLkF1dGhSZXNwb25zZSIjmLUYAaC1GAGC0+STAhU6ASoiEC92MS92ZXJpZnlfZW1haWwSjgEKEVJlc2VuZFZlcmlmeUVtYWlsEicuYXV0aG9yaXplci52MS5SZXNlbmRWZXJpZnlFbWFpbFJlcXVlc3QaKC5hdXRob3JpemVyLnYxLlJlc2VuZFZlcmlmeUVtYWlsUmVzcG9uc2UiJqC1GAGC0+STAhw6ASoiFy92MS9yZXNlbmRfdmVyaWZ5X2VtYWlsEmwKCVZlcmlmeU90cBIfLmF1dGhvcml6ZXIudjEuVmVyaWZ5T3RwUmVxdWVzdBobLmF1dGhvcml6ZXIudjEuQXV0aFJlc3BvbnNlIiGYtRgBoLUYAYLT5JMCEzoBKiIOL3YxL3ZlcmlmeV9vdHASbQoJUmVzZW5kT3RwEh8uYXV0aG9yaXplci52MS5SZXNlbmRPdHBSZXF1ZXN0GiAuYXV0aG9yaXplci52MS5SZXNlbmRPdHBSZXNwb25zZSIdoLUYAYLT5JMCEzoBKiIOL3YxL3Jlc2VuZF9vdHASdgoMU2tpcE1mYVNldHVwEiIuYXV0aG9yaXplci52MS5Ta2lwTWZhU2V0dXBSZXF1ZXN0GhsuYXV0aG9yaXplci52MS5BdXRoUmVzcG9uc2UiJZi1GAGgtRgBgtPkkwIXOgEqIhIvdjEvc2tpcF9tZmFfc2V0dXASaQoHTG9ja01mYRIdLmF1dGhvcml6ZXIudjEuTG9ja01mYVJlcXVlc3QaHi5hdXRob3JpemVyLnYxLkxvY2tNZmFSZXNwb25zZSIfmLUYAaC1GAGC0+STAhE6ASoiDC92MS9sb2NrX21mYRKPAQoQRW1haWxPdHBNZmFTZXR1cBImLmF1dGhvcml6ZXIudjEuRW1haWxPdHBNZmFTZXR1cFJlcXVlc3QaJy5hdXRob3JpemVyLnYxLkVtYWlsT3RwTWZhU2V0dXBSZXNwb25zZSIqmLUYAaC1GAGC0+STAhw6ASoiFy92MS9lbWFpbF9vdHBfbWZhX3NldHVwEocBCg5TbXNPdHBNZmFTZXR1cBIkLmF1dGhvcml6ZXIudjEuU21zT3RwTWZhU2V0dXBSZXF1ZXN0GiUuYXV0aG9yaXplci52MS5TbXNPdHBNZmFTZXR1cFJlc3BvbnNlIiiYtRgBoLUYAYLT5JMCGjoBKiIVL3YxL3Ntc19vdHBfbWZhX3NldHVwEoEBCg5Gb3Jnb3RQYXNzd29yZBIkLmF1dGhvcml6ZXIudjEuRm9yZ290UGFzc3dvcmRSZXF1ZXN0GiUuYXV0aG9yaXplci52MS5Gb3Jnb3RQYXNzd29yZFJlc3BvbnNlIiKgtRgBgtPkkwIYOgEqIhMvdjEvZm9yZ290X3Bhc3N3b3JkEoEBCg1SZXNldFBhc3N3b3JkEiMuYXV0aG9yaXplci52MS5SZXNldFBhc3N3b3JkUmVxdWVzdBokLmF1dGhvcml6ZXIudjEuUmVzZXRQYXNzd29yZFJlc3BvbnNlIiWYtRgBoLUYAYLT5JMCFzoBKiISL3YxL3Jlc2V0X3Bhc3N3b3JkElgKB1Byb2ZpbGUSHS5hdXRob3JpemVyLnYxLlByb2ZpbGVSZXF1ZXN0GhMuYXV0aG9yaXplci52MS5Vc2VyIhmStRgCCAGC0+STAg0SCy92MS9wcm9maWxlEn0KDVVwZGF0ZVByb2ZpbGUSIy5hdXRob3JpemVyLnYxLlVwZGF0ZVByb2ZpbGVSZXF1ZXN0GiQuYXV0aG9yaXplci52MS5VcGRhdGVQcm9maWxlUmVzcG9uc2UiIZi1GAGC0+STAhc6ASoiEi92MS91cGRhdGVfcHJvZmlsZRKTAQoRRGVhY3RpdmF0ZUFjY291bnQSJy5hdXRob3JpemVyLnYxLkRlYWN0aXZhdGVBY2NvdW50UmVxdWVzdBooLmF1dGhvcml6ZXIudjEuRGVhY3RpdmF0ZUFjY291bnRSZXNwb25zZSIrkrUYAhgBmLUYAYLT5JMCGzoBKiIWL3YxL2RlYWN0aXZhdGVfYWNjb3VudBJkCgZSZXZva2USHC5hdXRob3JpemVyLnYxLlJldm9rZVJlcXVlc3QaHS5hdXRob3JpemVyLnYxLlJldm9rZVJlc3BvbnNlIh2YtRgBoLUYAYLT5JMCDzoBKiIKL3YxL3Jldm9rZRJdCgdTZXNzaW9uEh0uYXV0aG9yaXplci52MS5TZXNzaW9uUmVxdWVzdBobLmF1dGhvcml6ZXIudjEuQXV0aFJlc3BvbnNlIhaC0+STAhA6ASoiCy92MS9zZXNzaW9uEooBChBWYWxpZGF0ZUp3dFRva2VuEiYuYXV0aG9yaXplci52MS5WYWxpZGF0ZUp3dFRva2VuUmVxdWVzdBonLmF1dGhvcml6ZXIudjEuVmFsaWRhdGVKd3RUb2tlblJlc3BvbnNlIiWgtRgBgtPkkwIbOgEqIhYvdjEvdmFsaWRhdGVfand0X3Rva2VuEoUBCg9WYWxpZGF0ZVNlc3Npb24SJS5hdXRob3JpemVyLnYxLlZhbGlkYXRlU2Vzc2lvblJlcXVlc3QaJi5hdXRob3JpemVyLnYxLlZhbGlkYXRlU2Vzc2lvblJlc3BvbnNlIiOgtRgBgtPkkwIZOgEqIhQvdjEvdmFsaWRhdGVfc2Vzc2lvbhJTCgRNZXRhEhouYXV0aG9yaXplci52MS5NZXRhUmVxdWVzdBoTLmF1dGhvcml6ZXIudjEuTWV0YSIakrUYAggBoLUYAYLT5JMCChIIL3YxL21ldGESiwEKEENoZWNrUGVybWlzc2lvbnMSJi5hdXRob3JpemVyLnYxLkNoZWNrUGVybWlzc2lvbnNSZXF1ZXN0GicuYXV0aG9yaXplci52MS5DaGVja1Blcm1pc3Npb25zUmVzcG9uc2UiJpK1GAIIAYLT5JMCGjoBKiIVL3YxL2NoZWNrX3Blcm1pc3Npb25zEocBCg9MaXN0UGVybWlzc2lvbnMSJS5hdXRob3JpemVyLnYxLkxpc3RQZXJtaXNzaW9uc1JlcXVlc3QaJi5hdXRob3JpemVyLnYxLkxpc3RQZXJtaXNzaW9uc1Jlc3BvbnNlIiWStRgCCAGC0+STAhk6ASoiFC92MS9saXN0X3Blcm1pc3Npb25zYgZwcm90bzM", [file_authorizer_v1_annotations, file_authorizer_v1_common, file_authorizer_v1_types, file_buf_validate_validate, file_google_api_annotations]); /** * @generated from message authorizer.v1.SignupRequest diff --git a/gen/ts/authorizer/v1/common_pb.ts b/gen/ts/authorizer/v1/common_pb.ts index 10b4d552..a6ddbf9f 100644 --- a/gen/ts/authorizer/v1/common_pb.ts +++ b/gen/ts/authorizer/v1/common_pb.ts @@ -19,7 +19,7 @@ import type { JsonObject, Message } from "@bufbuild/protobuf"; * Describes the file authorizer/v1/common.proto. */ export const file_authorizer_v1_common: GenFile = /*@__PURE__*/ - fileDesc("ChphdXRob3JpemVyL3YxL2NvbW1vbi5wcm90bxINYXV0aG9yaXplci52MSIxCgdBcHBEYXRhEiYKBXZhbHVlGAEgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdELHAQoRY29tLmF1dGhvcml6ZXIudjFCC0NvbW1vblByb3RvUAFaUGdpdGh1Yi5jb20vYXV0aG9yaXplcmRldi9hdXRob3JpemVyLWdvL2ludGVybmFsL2dlbnBiL2F1dGhvcml6ZXIvdjE7YXV0aG9yaXplcnYxogIDQVhYqgINQXV0aG9yaXplci5WMcoCDUF1dGhvcml6ZXJcVjHiAhlBdXRob3JpemVyXFYxXEdQQk1ldGFkYXRh6gIOQXV0aG9yaXplcjo6VjFiBnByb3RvMw", [file_google_protobuf_struct]); + fileDesc("ChphdXRob3JpemVyL3YxL2NvbW1vbi5wcm90bxINYXV0aG9yaXplci52MSIxCgdBcHBEYXRhEiYKBXZhbHVlGAEgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdGIGcHJvdG8z", [file_google_protobuf_struct]); /** * AppData is a free-form key/value bag stored against a user. Mirrors the diff --git a/gen/ts/authorizer/v1/errors_pb.ts b/gen/ts/authorizer/v1/errors_pb.ts index 5f92958a..e0482250 100644 --- a/gen/ts/authorizer/v1/errors_pb.ts +++ b/gen/ts/authorizer/v1/errors_pb.ts @@ -19,7 +19,7 @@ import { enumDesc, fileDesc } from "@bufbuild/protobuf/codegenv1"; * Describes the file authorizer/v1/errors.proto. */ export const file_authorizer_v1_errors: GenFile = /*@__PURE__*/ - fileDesc("ChphdXRob3JpemVyL3YxL2Vycm9ycy5wcm90bxINYXV0aG9yaXplci52MSqGAwoLRXJyb3JSZWFzb24SHAoYRVJST1JfUkVBU09OX1VOU1BFQ0lGSUVEEAASJAogRVJST1JfUkVBU09OX0lOVkFMSURfQ1JFREVOVElBTFMQARIiCh5FUlJPUl9SRUFTT05fUEVSTUlTU0lPTl9ERU5JRUQQAhIaChZFUlJPUl9SRUFTT05fTk9UX0ZPVU5EEAMSHwobRVJST1JfUkVBU09OX0FMUkVBRFlfRVhJU1RTEAQSIAocRVJST1JfUkVBU09OX0lOVkFMSURfUkVRVUVTVBAFEiYKIkVSUk9SX1JFQVNPTl9WRVJJRklDQVRJT05fUkVRVUlSRUQQBhIjCh9FUlJPUl9SRUFTT05fT1BFUkFUSU9OX0RJU0FCTEVEEAcSHQoZRVJST1JfUkVBU09OX1JBVEVfTElNSVRFRBAIEh4KGkVSUk9SX1JFQVNPTl9UT0tFTl9FWFBJUkVEEAkSJAogRVJST1JfUkVBU09OX0FDQ09VTlRfREVBQ1RJVkFURUQQCkLHAQoRY29tLmF1dGhvcml6ZXIudjFCC0Vycm9yc1Byb3RvUAFaUGdpdGh1Yi5jb20vYXV0aG9yaXplcmRldi9hdXRob3JpemVyLWdvL2ludGVybmFsL2dlbnBiL2F1dGhvcml6ZXIvdjE7YXV0aG9yaXplcnYxogIDQVhYqgINQXV0aG9yaXplci5WMcoCDUF1dGhvcml6ZXJcVjHiAhlBdXRob3JpemVyXFYxXEdQQk1ldGFkYXRh6gIOQXV0aG9yaXplcjo6VjFiBnByb3RvMw"); + fileDesc("ChphdXRob3JpemVyL3YxL2Vycm9ycy5wcm90bxINYXV0aG9yaXplci52MSqGAwoLRXJyb3JSZWFzb24SHAoYRVJST1JfUkVBU09OX1VOU1BFQ0lGSUVEEAASJAogRVJST1JfUkVBU09OX0lOVkFMSURfQ1JFREVOVElBTFMQARIiCh5FUlJPUl9SRUFTT05fUEVSTUlTU0lPTl9ERU5JRUQQAhIaChZFUlJPUl9SRUFTT05fTk9UX0ZPVU5EEAMSHwobRVJST1JfUkVBU09OX0FMUkVBRFlfRVhJU1RTEAQSIAocRVJST1JfUkVBU09OX0lOVkFMSURfUkVRVUVTVBAFEiYKIkVSUk9SX1JFQVNPTl9WRVJJRklDQVRJT05fUkVRVUlSRUQQBhIjCh9FUlJPUl9SRUFTT05fT1BFUkFUSU9OX0RJU0FCTEVEEAcSHQoZRVJST1JfUkVBU09OX1JBVEVfTElNSVRFRBAIEh4KGkVSUk9SX1JFQVNPTl9UT0tFTl9FWFBJUkVEEAkSJAogRVJST1JfUkVBU09OX0FDQ09VTlRfREVBQ1RJVkFURUQQCmIGcHJvdG8z"); /** * @generated from enum authorizer.v1.ErrorReason diff --git a/gen/ts/authorizer/v1/pagination_pb.ts b/gen/ts/authorizer/v1/pagination_pb.ts index 817ad0f4..4bcbd7e8 100644 --- a/gen/ts/authorizer/v1/pagination_pb.ts +++ b/gen/ts/authorizer/v1/pagination_pb.ts @@ -21,7 +21,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file authorizer/v1/pagination.proto. */ export const file_authorizer_v1_pagination: GenFile = /*@__PURE__*/ - fileDesc("Ch5hdXRob3JpemVyL3YxL3BhZ2luYXRpb24ucHJvdG8SDWF1dGhvcml6ZXIudjEiWQoRUGFnaW5hdGlvblJlcXVlc3QSFQoEcGFnZRgBIAEoA0IHukgEIgIoABIZCgVsaW1pdBgCIAEoA0IKukgHIgUY6AcoABISCgpwYWdlX3Rva2VuGAMgASgJImEKClBhZ2luYXRpb24SDQoFbGltaXQYASABKAMSDAoEcGFnZRgCIAEoAxIOCgZvZmZzZXQYAyABKAMSDQoFdG90YWwYBCABKAMSFwoPbmV4dF9wYWdlX3Rva2VuGAUgASgJQssBChFjb20uYXV0aG9yaXplci52MUIPUGFnaW5hdGlvblByb3RvUAFaUGdpdGh1Yi5jb20vYXV0aG9yaXplcmRldi9hdXRob3JpemVyLWdvL2ludGVybmFsL2dlbnBiL2F1dGhvcml6ZXIvdjE7YXV0aG9yaXplcnYxogIDQVhYqgINQXV0aG9yaXplci5WMcoCDUF1dGhvcml6ZXJcVjHiAhlBdXRob3JpemVyXFYxXEdQQk1ldGFkYXRh6gIOQXV0aG9yaXplcjo6VjFiBnByb3RvMw", [file_buf_validate_validate]); + fileDesc("Ch5hdXRob3JpemVyL3YxL3BhZ2luYXRpb24ucHJvdG8SDWF1dGhvcml6ZXIudjEiWQoRUGFnaW5hdGlvblJlcXVlc3QSFQoEcGFnZRgBIAEoA0IHukgEIgIoABIZCgVsaW1pdBgCIAEoA0IKukgHIgUY6AcoABISCgpwYWdlX3Rva2VuGAMgASgJImEKClBhZ2luYXRpb24SDQoFbGltaXQYASABKAMSDAoEcGFnZRgCIAEoAxIOCgZvZmZzZXQYAyABKAMSDQoFdG90YWwYBCABKAMSFwoPbmV4dF9wYWdlX3Rva2VuGAUgASgJYgZwcm90bzM", [file_buf_validate_validate]); /** * @generated from message authorizer.v1.PaginationRequest diff --git a/gen/ts/authorizer/v1/types_pb.ts b/gen/ts/authorizer/v1/types_pb.ts index a76200d4..97385c74 100644 --- a/gen/ts/authorizer/v1/types_pb.ts +++ b/gen/ts/authorizer/v1/types_pb.ts @@ -15,7 +15,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file authorizer/v1/types.proto. */ export const file_authorizer_v1_types: GenFile = /*@__PURE__*/ - fileDesc("ChlhdXRob3JpemVyL3YxL3R5cGVzLnByb3RvEg1hdXRob3JpemVyLnYxIoEECgRVc2VyEgoKAmlkGAEgASgJEg0KBWVtYWlsGAIgASgJEhYKDmVtYWlsX3ZlcmlmaWVkGAMgASgIEhYKDnNpZ251cF9tZXRob2RzGAQgASgJEhIKCmdpdmVuX25hbWUYBSABKAkSEwoLZmFtaWx5X25hbWUYBiABKAkSEwoLbWlkZGxlX25hbWUYByABKAkSEAoIbmlja25hbWUYCCABKAkSGgoScHJlZmVycmVkX3VzZXJuYW1lGAkgASgJEg4KBmdlbmRlchgKIAEoCRIRCgliaXJ0aGRhdGUYCyABKAkSFAoMcGhvbmVfbnVtYmVyGAwgASgJEh0KFXBob25lX251bWJlcl92ZXJpZmllZBgNIAEoCBIPCgdwaWN0dXJlGA4gASgJEg0KBXJvbGVzGA8gAygJEhIKCmNyZWF0ZWRfYXQYECABKAMSEgoKdXBkYXRlZF9hdBgRIAEoAxIZChFyZXZva2VkX3RpbWVzdGFtcBgSIAEoAxIkChxpc19tdWx0aV9mYWN0b3JfYXV0aF9lbmFibGVkGBMgASgIEigKCGFwcF9kYXRhGBQgASgLMhYuYXV0aG9yaXplci52MS5BcHBEYXRhEiAKGGhhc19za2lwcGVkX21mYV9zZXR1cF9hdBgVIAEoAxIVCg1tZmFfbG9ja2VkX2F0GBYgASgDIpEECgxBdXRoUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCRIkChxzaG91bGRfc2hvd19lbWFpbF9vdHBfc2NyZWVuGAIgASgIEiUKHXNob3VsZF9zaG93X21vYmlsZV9vdHBfc2NyZWVuGAMgASgIEh8KF3Nob3VsZF9zaG93X3RvdHBfc2NyZWVuGAQgASgIEhQKDGFjY2Vzc190b2tlbhgFIAEoCRIQCghpZF90b2tlbhgGIAEoCRIVCg1yZWZyZXNoX3Rva2VuGAcgASgJEhIKCmV4cGlyZXNfaW4YCCABKAMSIQoEdXNlchgJIAEoCzITLmF1dGhvcml6ZXIudjEuVXNlchIjChthdXRoZW50aWNhdG9yX3NjYW5uZXJfaW1hZ2UYCiABKAkSHAoUYXV0aGVudGljYXRvcl9zZWNyZXQYCyABKAkSJAocYXV0aGVudGljYXRvcl9yZWNvdmVyeV9jb2RlcxgMIAMoCRIoCiBzaG91bGRfb2ZmZXJfd2ViYXV0aG5fbWZhX3ZlcmlmeRgNIAEoCBInCh9zaG91bGRfb2ZmZXJfd2ViYXV0aG5fbWZhX3NldHVwGA4gASgIEigKIHNob3VsZF9vZmZlcl9lbWFpbF9vdHBfbWZhX3NldHVwGA8gASgIEiYKHnNob3VsZF9vZmZlcl9zbXNfb3RwX21mYV9zZXR1cBgQIAEoCCIuCgpQZXJtaXNzaW9uEg4KBm9iamVjdBgBIAEoCRIQCghyZWxhdGlvbhgCIAEoCSI0ChBGZ2FSZWxhdGlvbklucHV0EhAKCHJlbGF0aW9uGAEgASgJEg4KBm9iamVjdBgCIAEoCSI/Cg1GZ2FUdXBsZUlucHV0EgwKBHVzZXIYASABKAkSEAoIcmVsYXRpb24YAiABKAkSDgoGb2JqZWN0GAMgASgJInEKFFBlcm1pc3Npb25DaGVja0lucHV0EhAKCHJlbGF0aW9uGAEgASgJEg4KBm9iamVjdBgCIAEoCRI3ChFjb250ZXh0dWFsX3R1cGxlcxgDIAMoCzIcLmF1dGhvcml6ZXIudjEuRmdhVHVwbGVJbnB1dCJKChVQZXJtaXNzaW9uQ2hlY2tSZXN1bHQSEAoIcmVsYXRpb24YASABKAkSDgoGb2JqZWN0GAIgASgJEg8KB2FsbG93ZWQYAyABKAgi5QYKBE1ldGESDwoHdmVyc2lvbhgBIAEoCRIRCgljbGllbnRfaWQYAiABKAkSHwoXaXNfZ29vZ2xlX2xvZ2luX2VuYWJsZWQYAyABKAgSIQoZaXNfZmFjZWJvb2tfbG9naW5fZW5hYmxlZBgEIAEoCBIfChdpc19naXRodWJfbG9naW5fZW5hYmxlZBgFIAEoCBIhChlpc19saW5rZWRpbl9sb2dpbl9lbmFibGVkGAYgASgIEh4KFmlzX2FwcGxlX2xvZ2luX2VuYWJsZWQYByABKAgSIAoYaXNfZGlzY29yZF9sb2dpbl9lbmFibGVkGAggASgIEiAKGGlzX3R3aXR0ZXJfbG9naW5fZW5hYmxlZBgJIAEoCBIiChppc19taWNyb3NvZnRfbG9naW5fZW5hYmxlZBgKIAEoCBIfChdpc190d2l0Y2hfbG9naW5fZW5hYmxlZBgLIAEoCBIfChdpc19yb2Jsb3hfbG9naW5fZW5hYmxlZBgMIAEoCBIlCh1pc19lbWFpbF92ZXJpZmljYXRpb25fZW5hYmxlZBgNIAEoCBInCh9pc19iYXNpY19hdXRoZW50aWNhdGlvbl9lbmFibGVkGA4gASgIEiMKG2lzX21hZ2ljX2xpbmtfbG9naW5fZW5hYmxlZBgPIAEoCBIaChJpc19zaWduX3VwX2VuYWJsZWQYECABKAgSIgoaaXNfc3Ryb25nX3Bhc3N3b3JkX2VuYWJsZWQYESABKAgSJAocaXNfbXVsdGlfZmFjdG9yX2F1dGhfZW5hYmxlZBgSIAEoCBIuCiZpc19tb2JpbGVfYmFzaWNfYXV0aGVudGljYXRpb25fZW5hYmxlZBgTIAEoCBIlCh1pc19waG9uZV92ZXJpZmljYXRpb25fZW5hYmxlZBgUIAEoCBIgChhpc19vcmdfZGlzY292ZXJ5X2VuYWJsZWQYFSABKAgSGwoTaXNfdG90cF9tZmFfZW5hYmxlZBgWIAEoCBIgChhpc19lbWFpbF9vdHBfbWZhX2VuYWJsZWQYFyABKAgSHgoWaXNfc21zX290cF9tZmFfZW5hYmxlZBgYIAEoCBIbChNpc193ZWJhdXRobl9lbmFibGVkGBkgASgIEhcKD2lzX21mYV9lbmZvcmNlZBgaIAEoCELGAQoRY29tLmF1dGhvcml6ZXIudjFCClR5cGVzUHJvdG9QAVpQZ2l0aHViLmNvbS9hdXRob3JpemVyZGV2L2F1dGhvcml6ZXItZ28vaW50ZXJuYWwvZ2VucGIvYXV0aG9yaXplci92MTthdXRob3JpemVydjGiAgNBWFiqAg1BdXRob3JpemVyLlYxygINQXV0aG9yaXplclxWMeICGUF1dGhvcml6ZXJcVjFcR1BCTWV0YWRhdGHqAg5BdXRob3JpemVyOjpWMWIGcHJvdG8z", [file_authorizer_v1_common]); + fileDesc("ChlhdXRob3JpemVyL3YxL3R5cGVzLnByb3RvEg1hdXRob3JpemVyLnYxIoEECgRVc2VyEgoKAmlkGAEgASgJEg0KBWVtYWlsGAIgASgJEhYKDmVtYWlsX3ZlcmlmaWVkGAMgASgIEhYKDnNpZ251cF9tZXRob2RzGAQgASgJEhIKCmdpdmVuX25hbWUYBSABKAkSEwoLZmFtaWx5X25hbWUYBiABKAkSEwoLbWlkZGxlX25hbWUYByABKAkSEAoIbmlja25hbWUYCCABKAkSGgoScHJlZmVycmVkX3VzZXJuYW1lGAkgASgJEg4KBmdlbmRlchgKIAEoCRIRCgliaXJ0aGRhdGUYCyABKAkSFAoMcGhvbmVfbnVtYmVyGAwgASgJEh0KFXBob25lX251bWJlcl92ZXJpZmllZBgNIAEoCBIPCgdwaWN0dXJlGA4gASgJEg0KBXJvbGVzGA8gAygJEhIKCmNyZWF0ZWRfYXQYECABKAMSEgoKdXBkYXRlZF9hdBgRIAEoAxIZChFyZXZva2VkX3RpbWVzdGFtcBgSIAEoAxIkChxpc19tdWx0aV9mYWN0b3JfYXV0aF9lbmFibGVkGBMgASgIEigKCGFwcF9kYXRhGBQgASgLMhYuYXV0aG9yaXplci52MS5BcHBEYXRhEiAKGGhhc19za2lwcGVkX21mYV9zZXR1cF9hdBgVIAEoAxIVCg1tZmFfbG9ja2VkX2F0GBYgASgDIpEECgxBdXRoUmVzcG9uc2USDwoHbWVzc2FnZRgBIAEoCRIkChxzaG91bGRfc2hvd19lbWFpbF9vdHBfc2NyZWVuGAIgASgIEiUKHXNob3VsZF9zaG93X21vYmlsZV9vdHBfc2NyZWVuGAMgASgIEh8KF3Nob3VsZF9zaG93X3RvdHBfc2NyZWVuGAQgASgIEhQKDGFjY2Vzc190b2tlbhgFIAEoCRIQCghpZF90b2tlbhgGIAEoCRIVCg1yZWZyZXNoX3Rva2VuGAcgASgJEhIKCmV4cGlyZXNfaW4YCCABKAMSIQoEdXNlchgJIAEoCzITLmF1dGhvcml6ZXIudjEuVXNlchIjChthdXRoZW50aWNhdG9yX3NjYW5uZXJfaW1hZ2UYCiABKAkSHAoUYXV0aGVudGljYXRvcl9zZWNyZXQYCyABKAkSJAocYXV0aGVudGljYXRvcl9yZWNvdmVyeV9jb2RlcxgMIAMoCRIoCiBzaG91bGRfb2ZmZXJfd2ViYXV0aG5fbWZhX3ZlcmlmeRgNIAEoCBInCh9zaG91bGRfb2ZmZXJfd2ViYXV0aG5fbWZhX3NldHVwGA4gASgIEigKIHNob3VsZF9vZmZlcl9lbWFpbF9vdHBfbWZhX3NldHVwGA8gASgIEiYKHnNob3VsZF9vZmZlcl9zbXNfb3RwX21mYV9zZXR1cBgQIAEoCCIuCgpQZXJtaXNzaW9uEg4KBm9iamVjdBgBIAEoCRIQCghyZWxhdGlvbhgCIAEoCSI0ChBGZ2FSZWxhdGlvbklucHV0EhAKCHJlbGF0aW9uGAEgASgJEg4KBm9iamVjdBgCIAEoCSI/Cg1GZ2FUdXBsZUlucHV0EgwKBHVzZXIYASABKAkSEAoIcmVsYXRpb24YAiABKAkSDgoGb2JqZWN0GAMgASgJInEKFFBlcm1pc3Npb25DaGVja0lucHV0EhAKCHJlbGF0aW9uGAEgASgJEg4KBm9iamVjdBgCIAEoCRI3ChFjb250ZXh0dWFsX3R1cGxlcxgDIAMoCzIcLmF1dGhvcml6ZXIudjEuRmdhVHVwbGVJbnB1dCJKChVQZXJtaXNzaW9uQ2hlY2tSZXN1bHQSEAoIcmVsYXRpb24YASABKAkSDgoGb2JqZWN0GAIgASgJEg8KB2FsbG93ZWQYAyABKAgi5QYKBE1ldGESDwoHdmVyc2lvbhgBIAEoCRIRCgljbGllbnRfaWQYAiABKAkSHwoXaXNfZ29vZ2xlX2xvZ2luX2VuYWJsZWQYAyABKAgSIQoZaXNfZmFjZWJvb2tfbG9naW5fZW5hYmxlZBgEIAEoCBIfChdpc19naXRodWJfbG9naW5fZW5hYmxlZBgFIAEoCBIhChlpc19saW5rZWRpbl9sb2dpbl9lbmFibGVkGAYgASgIEh4KFmlzX2FwcGxlX2xvZ2luX2VuYWJsZWQYByABKAgSIAoYaXNfZGlzY29yZF9sb2dpbl9lbmFibGVkGAggASgIEiAKGGlzX3R3aXR0ZXJfbG9naW5fZW5hYmxlZBgJIAEoCBIiChppc19taWNyb3NvZnRfbG9naW5fZW5hYmxlZBgKIAEoCBIfChdpc190d2l0Y2hfbG9naW5fZW5hYmxlZBgLIAEoCBIfChdpc19yb2Jsb3hfbG9naW5fZW5hYmxlZBgMIAEoCBIlCh1pc19lbWFpbF92ZXJpZmljYXRpb25fZW5hYmxlZBgNIAEoCBInCh9pc19iYXNpY19hdXRoZW50aWNhdGlvbl9lbmFibGVkGA4gASgIEiMKG2lzX21hZ2ljX2xpbmtfbG9naW5fZW5hYmxlZBgPIAEoCBIaChJpc19zaWduX3VwX2VuYWJsZWQYECABKAgSIgoaaXNfc3Ryb25nX3Bhc3N3b3JkX2VuYWJsZWQYESABKAgSJAocaXNfbXVsdGlfZmFjdG9yX2F1dGhfZW5hYmxlZBgSIAEoCBIuCiZpc19tb2JpbGVfYmFzaWNfYXV0aGVudGljYXRpb25fZW5hYmxlZBgTIAEoCBIlCh1pc19waG9uZV92ZXJpZmljYXRpb25fZW5hYmxlZBgUIAEoCBIgChhpc19vcmdfZGlzY292ZXJ5X2VuYWJsZWQYFSABKAgSGwoTaXNfdG90cF9tZmFfZW5hYmxlZBgWIAEoCBIgChhpc19lbWFpbF9vdHBfbWZhX2VuYWJsZWQYFyABKAgSHgoWaXNfc21zX290cF9tZmFfZW5hYmxlZBgYIAEoCBIbChNpc193ZWJhdXRobl9lbmFibGVkGBkgASgIEhcKD2lzX21mYV9lbmZvcmNlZBgaIAEoCGIGcHJvdG8z", [file_authorizer_v1_common]); /** * User mirrors the GraphQL User type. Returned by Profile and embedded in diff --git a/gen/ts/buf/validate/validate_pb.ts b/gen/ts/buf/validate/validate_pb.ts index cebcddcb..69bdf7ff 100644 --- a/gen/ts/buf/validate/validate_pb.ts +++ b/gen/ts/buf/validate/validate_pb.ts @@ -55,7 +55,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file buf/validate/validate.proto. */ export const file_buf_validate_validate: GenFile = /*@__PURE__*/ - fileDesc("ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSKGAQoMTWVzc2FnZVJ1bGVzEhYKDmNlbF9leHByZXNzaW9uGAUgAygJEh8KA2NlbBgDIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlEi0KBW9uZW9mGAQgAygLMh4uYnVmLnZhbGlkYXRlLk1lc3NhZ2VPbmVvZlJ1bGVKBAgBEAJSCGRpc2FibGVkIjQKEE1lc3NhZ2VPbmVvZlJ1bGUSDgoGZmllbGRzGAEgAygJEhAKCHJlcXVpcmVkGAIgASgIIh4KCk9uZW9mUnVsZXMSEAoIcmVxdWlyZWQYASABKAgiiwkKCkZpZWxkUnVsZXMSFgoOY2VsX2V4cHJlc3Npb24YHSADKAkSHwoDY2VsGBcgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSEAoIcmVxdWlyZWQYGSABKAgSJAoGaWdub3JlGBsgASgOMhQuYnVmLnZhbGlkYXRlLklnbm9yZRIpCgVmbG9hdBgBIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GbG9hdFJ1bGVzSAASKwoGZG91YmxlGAIgASgLMhkuYnVmLnZhbGlkYXRlLkRvdWJsZVJ1bGVzSAASKQoFaW50MzIYAyABKAsyGC5idWYudmFsaWRhdGUuSW50MzJSdWxlc0gAEikKBWludDY0GAQgASgLMhguYnVmLnZhbGlkYXRlLkludDY0UnVsZXNIABIrCgZ1aW50MzIYBSABKAsyGS5idWYudmFsaWRhdGUuVUludDMyUnVsZXNIABIrCgZ1aW50NjQYBiABKAsyGS5idWYudmFsaWRhdGUuVUludDY0UnVsZXNIABIrCgZzaW50MzIYByABKAsyGS5idWYudmFsaWRhdGUuU0ludDMyUnVsZXNIABIrCgZzaW50NjQYCCABKAsyGS5idWYudmFsaWRhdGUuU0ludDY0UnVsZXNIABItCgdmaXhlZDMyGAkgASgLMhouYnVmLnZhbGlkYXRlLkZpeGVkMzJSdWxlc0gAEi0KB2ZpeGVkNjQYCiABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQ2NFJ1bGVzSAASLwoIc2ZpeGVkMzIYCyABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkMzJSdWxlc0gAEi8KCHNmaXhlZDY0GAwgASgLMhsuYnVmLnZhbGlkYXRlLlNGaXhlZDY0UnVsZXNIABInCgRib29sGA0gASgLMhcuYnVmLnZhbGlkYXRlLkJvb2xSdWxlc0gAEisKBnN0cmluZxgOIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlc0gAEikKBWJ5dGVzGA8gASgLMhguYnVmLnZhbGlkYXRlLkJ5dGVzUnVsZXNIABInCgRlbnVtGBAgASgLMhcuYnVmLnZhbGlkYXRlLkVudW1SdWxlc0gAEi8KCHJlcGVhdGVkGBIgASgLMhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXNIABIlCgNtYXAYEyABKAsyFi5idWYudmFsaWRhdGUuTWFwUnVsZXNIABIlCgNhbnkYFCABKAsyFi5idWYudmFsaWRhdGUuQW55UnVsZXNIABIvCghkdXJhdGlvbhgVIAEoCzIbLmJ1Zi52YWxpZGF0ZS5EdXJhdGlvblJ1bGVzSAASMgoKZmllbGRfbWFzaxgcIAEoCzIcLmJ1Zi52YWxpZGF0ZS5GaWVsZE1hc2tSdWxlc0gAEjEKCXRpbWVzdGFtcBgWIAEoCzIcLmJ1Zi52YWxpZGF0ZS5UaW1lc3RhbXBSdWxlc0gAQgYKBHR5cGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSJVCg9QcmVkZWZpbmVkUnVsZXMSHwoDY2VsGAEgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSL4FgoKRmxvYXRSdWxlcxJ9CgVjb25zdBgBIAEoAkJuwkhrCmkKC2Zsb2F0LmNvbnN0Glp0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICdtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSmQEKAmx0GAIgASgCQooBwkiGAQqDAQoIZmxvYXQubHQadyFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQpPyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASqQEKA2x0ZRgDIAEoAkKZAcJIlQEKkgEKCWZsb2F0Lmx0ZRqEASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEtAHCgJndBgEIAEoAkLBB8JIvQcKhgEKCGZsb2F0Lmd0GnohaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq9AQoLZmxvYXQuZ3RfbHQarQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrHAQoVZmxvYXQuZ3RfbHRfZXhjbHVzaXZlGq0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKzQEKDGZsb2F0Lmd0X2x0ZRq8AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCtcBChZmbG9hdC5ndF9sdGVfZXhjbHVzaXZlGrwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARKcCAoDZ3RlGAUgASgCQowIwkiICAqVAQoJZmxvYXQuZ3RlGocBIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCswBCgxmbG9hdC5ndGVfbHQauwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtYBChZmbG9hdC5ndGVfbHRfZXhjbHVzaXZlGrsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrcAQoNZmxvYXQuZ3RlX2x0ZRrKAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK5gEKF2Zsb2F0Lmd0ZV9sdGVfZXhjbHVzaXZlGsoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnkKAmluGAYgAygCQm3CSGoKaAoIZmxvYXQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnAKBm5vdF9pbhgHIAMoAkJgwkhdClsKDGZsb2F0Lm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEm8KBmZpbml0ZRgIIAEoCEJfwkhcCloKDGZsb2F0LmZpbml0ZRpKcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAnbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSKwoHZXhhbXBsZRgJIAMoAkIawkgXChUKDWZsb2F0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIooXCgtEb3VibGVSdWxlcxJ+CgVjb25zdBgBIAEoAUJvwkhsCmoKDGRvdWJsZS5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEpoBCgJsdBgCIAEoAUKLAcJIhwEKhAEKCWRvdWJsZS5sdBp3IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKqAQoDbHRlGAMgASgBQpoBwkiWAQqTAQoKZG91YmxlLmx0ZRqEASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEtUHCgJndBgEIAEoAULGB8JIwgcKhwEKCWRvdWJsZS5ndBp6IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKvgEKDGRvdWJsZS5ndF9sdBqtAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsgBChZkb3VibGUuZ3RfbHRfZXhjbHVzaXZlGq0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKzgEKDWRvdWJsZS5ndF9sdGUavAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrYAQoXZG91YmxlLmd0X2x0ZV9leGNsdXNpdmUavAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEqEICgNndGUYBSABKAFCkQjCSI0ICpYBCgpkb3VibGUuZ3RlGocBIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCs0BCg1kb3VibGUuZ3RlX2x0GrsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrXAQoXZG91YmxlLmd0ZV9sdF9leGNsdXNpdmUauwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCt0BCg5kb3VibGUuZ3RlX2x0ZRrKAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK5wEKGGRvdWJsZS5ndGVfbHRlX2V4Y2x1c2l2ZRrKAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ6CgJpbhgGIAMoAUJuwkhrCmkKCWRvdWJsZS5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAcgAygBQmHCSF4KXAoNZG91YmxlLm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnAKBmZpbml0ZRgIIAEoCEJgwkhdClsKDWRvdWJsZS5maW5pdGUaSnJ1bGVzLmZpbml0ZSA/ICh0aGlzLmlzTmFuKCkgfHwgdGhpcy5pc0luZigpID8gJ211c3QgYmUgZmluaXRlJyA6ICcnKSA6ICcnEiwKB2V4YW1wbGUYCSADKAFCG8JIGAoWCg5kb3VibGUuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4isBQKCkludDMyUnVsZXMSfQoFY29uc3QYASABKAVCbsJIawppCgtpbnQzMi5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEoQBCgJsdBgCIAEoBUJ2wkhzCnEKCGludDMyLmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpUBCgNsdGUYAyABKAVChQHCSIEBCn8KCWludDMyLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS+QYKAmd0GAQgASgFQuoGwkjmBgp0CghpbnQzMi5ndBpoIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKrQEKC2ludDMyLmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq1AQoVaW50MzIuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKDGludDMyLmd0X2x0ZRqsAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKxQEKFmludDMyLmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEsUHCgNndGUYBSABKAVCtQfCSLEHCoIBCglpbnQzMi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq8AQoMaW50MzIuZ3RlX2x0GqsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCsQBChZpbnQzMi5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoNaW50MzIuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrUAQoXaW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUauAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESeQoCaW4YBiADKAVCbcJIagpoCghpbnQzMi5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScAoGbm90X2luGAcgAygFQmDCSF0KWwoMaW50MzIubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKwoHZXhhbXBsZRgIIAMoBUIawkgXChUKDWludDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIrAUCgpJbnQ2NFJ1bGVzEn0KBWNvbnN0GAEgASgDQm7CSGsKaQoLaW50NjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKEAQoCbHQYAiABKANCdsJIcwpxCghpbnQ2NC5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKVAQoDbHRlGAMgASgDQoUBwkiBAQp/CglpbnQ2NC5sdGUaciFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEvkGCgJndBgEIAEoA0LqBsJI5gYKdAoIaW50NjQuZ3QaaCFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCq0BCgtpbnQ2NC5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtQEKFWludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqbAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr0BCgxpbnQ2NC5ndF9sdGUarAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCsUBChZpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLFBwoDZ3RlGAUgASgDQrUHwkixBwqCAQoJaW50NjQuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKvAEKDGludDY0Lmd0ZV9sdBqrAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrEAQoWaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKDWludDY0Lmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK1AEKF2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGrgBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnkKAmluGAYgAygDQm3CSGoKaAoIaW50NjQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnAKBm5vdF9pbhgHIAMoA0JgwkhdClsKDGludDY0Lm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCSADKANCGsJIFwoVCg1pbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLCFAoLVUludDMyUnVsZXMSfgoFY29uc3QYASABKA1Cb8JIbApqCgx1aW50MzIuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKFAQoCbHQYAiABKA1Cd8JIdApyCgl1aW50MzIubHQaZSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASlwEKA2x0ZRgDIAEoDUKHAcJIgwEKgAEKCnVpbnQzMi5sdGUaciFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEv4GCgJndBgEIAEoDULvBsJI6wYKdQoJdWludDMyLmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwquAQoMdWludDMyLmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq2AQoWdWludDMyLmd0X2x0X2V4Y2x1c2l2ZRqbAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BCg11aW50MzIuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrGAQoXdWludDMyLmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEsoHCgNndGUYBSABKA1CugfCSLYHCoMBCgp1aW50MzIuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKvQEKDXVpbnQzMi5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxQEKF3VpbnQzMi5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrNAQoOdWludDMyLmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK1QEKGHVpbnQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ6CgJpbhgGIAMoDUJuwkhrCmkKCXVpbnQzMi5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAcgAygNQmHCSF4KXAoNdWludDMyLm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKA1CG8JIGAoWCg51aW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwhQKC1VJbnQ2NFJ1bGVzEn4KBWNvbnN0GAEgASgEQm/CSGwKagoMdWludDY0LmNvbnN0Glp0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICdtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycShQEKAmx0GAIgASgEQnfCSHQKcgoJdWludDY0Lmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpcBCgNsdGUYAyABKARChwHCSIMBCoABCgp1aW50NjQubHRlGnIhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABL+BgoCZ3QYBCABKARC7wbCSOsGCnUKCXVpbnQ2NC5ndBpoIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKrgEKDHVpbnQ2NC5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtgEKFnVpbnQ2NC5ndF9sdF9leGNsdXNpdmUamwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoNdWludDY0Lmd0X2x0ZRqsAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKxgEKF3VpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLKBwoDZ3RlGAUgASgEQroHwki2BwqDAQoKdWludDY0Lmd0ZRp1IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCr0BCg11aW50NjQuZ3RlX2x0GqsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCsUBChd1aW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKDnVpbnQ2NC5ndGVfbHRlGroBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtUBChh1aW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUauAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESegoCaW4YBiADKARCbsJIawppCgl1aW50NjQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnEKBm5vdF9pbhgHIAMoBEJhwkheClwKDXVpbnQ2NC5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIsCgdleGFtcGxlGAggAygEQhvCSBgKFgoOdWludDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsIUCgtTSW50MzJSdWxlcxJ+CgVjb25zdBgBIAEoEUJvwkhsCmoKDHNpbnQzMi5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEoUBCgJsdBgCIAEoEUJ3wkh0CnIKCXNpbnQzMi5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKXAQoDbHRlGAMgASgRQocBwkiDAQqAAQoKc2ludDMyLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS/gYKAmd0GAQgASgRQu8GwkjrBgp1CglzaW50MzIuZ3QaaCFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCq4BCgxzaW50MzIuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrYBChZzaW50MzIuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvgEKDXNpbnQzMi5ndF9sdGUarAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCsYBChdzaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESygcKA2d0ZRgFIAEoEUK6B8JItgcKgwEKCnNpbnQzMi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq9AQoNc2ludDMyLmd0ZV9sdBqrAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrFAQoXc2ludDMyLmd0ZV9sdF9leGNsdXNpdmUaqQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BCg5zaW50MzIuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrVAQoYc2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGrgBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnoKAmluGAYgAygRQm7CSGsKaQoJc2ludDMyLmluGlwhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJxCgZub3RfaW4YByADKBFCYcJIXgpcCg1zaW50MzIubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEUIbwkgYChYKDnNpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLCFAoLU0ludDY0UnVsZXMSfgoFY29uc3QYASABKBJCb8JIbApqCgxzaW50NjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKFAQoCbHQYAiABKBJCd8JIdApyCglzaW50NjQubHQaZSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASlwEKA2x0ZRgDIAEoEkKHAcJIgwEKgAEKCnNpbnQ2NC5sdGUaciFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEv4GCgJndBgEIAEoEkLvBsJI6wYKdQoJc2ludDY0Lmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwquAQoMc2ludDY0Lmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq2AQoWc2ludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqbAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BCg1zaW50NjQuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrGAQoXc2ludDY0Lmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEsoHCgNndGUYBSABKBJCugfCSLYHCoMBCgpzaW50NjQuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKvQEKDXNpbnQ2NC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxQEKF3NpbnQ2NC5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrNAQoOc2ludDY0Lmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK1QEKGHNpbnQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ6CgJpbhgGIAMoEkJuwkhrCmkKCXNpbnQ2NC5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAcgAygSQmHCSF4KXAoNc2ludDY0Lm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBJCG8JIGAoWCg5zaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i0xQKDEZpeGVkMzJSdWxlcxJ/CgVjb25zdBgBIAEoB0JwwkhtCmsKDWZpeGVkMzIuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKGAQoCbHQYAiABKAdCeMJIdQpzCgpmaXhlZDMyLmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpgBCgNsdGUYAyABKAdCiAHCSIQBCoEBCgtmaXhlZDMyLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASgwcKAmd0GAQgASgHQvQGwkjwBgp2CgpmaXhlZDMyLmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqvAQoNZml4ZWQzMi5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtwEKF2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvwEKDmZpeGVkMzIuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrHAQoYZml4ZWQzMi5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLPBwoDZ3RlGAUgASgHQr8Hwki7BwqEAQoLZml4ZWQzMi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq+AQoOZml4ZWQzMi5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxgEKGGZpeGVkMzIuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzgEKD2ZpeGVkMzIuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrWAQoZZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ7CgJpbhgGIAMoB0JvwkhsCmoKCmZpeGVkMzIuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnIKBm5vdF9pbhgHIAMoB0JiwkhfCl0KDmZpeGVkMzIubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoB0IcwkgZChcKD2ZpeGVkMzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i0xQKDEZpeGVkNjRSdWxlcxJ/CgVjb25zdBgBIAEoBkJwwkhtCmsKDWZpeGVkNjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKGAQoCbHQYAiABKAZCeMJIdQpzCgpmaXhlZDY0Lmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpgBCgNsdGUYAyABKAZCiAHCSIQBCoEBCgtmaXhlZDY0Lmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASgwcKAmd0GAQgASgGQvQGwkjwBgp2CgpmaXhlZDY0Lmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqvAQoNZml4ZWQ2NC5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtwEKF2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvwEKDmZpeGVkNjQuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrHAQoYZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLPBwoDZ3RlGAUgASgGQr8Hwki7BwqEAQoLZml4ZWQ2NC5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq+AQoOZml4ZWQ2NC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxgEKGGZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzgEKD2ZpeGVkNjQuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrWAQoZZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ7CgJpbhgGIAMoBkJvwkhsCmoKCmZpeGVkNjQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnIKBm5vdF9pbhgHIAMoBkJiwkhfCl0KDmZpeGVkNjQubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoBkIcwkgZChcKD2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i5RQKDVNGaXhlZDMyUnVsZXMSgAEKBWNvbnN0GAEgASgPQnHCSG4KbAoOc2ZpeGVkMzIuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKHAQoCbHQYAiABKA9CecJIdgp0CgtzZml4ZWQzMi5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKZAQoDbHRlGAMgASgPQokBwkiFAQqCAQoMc2ZpeGVkMzIubHRlGnIhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKIBwoCZ3QYBCABKA9C+QbCSPUGCncKC3NmaXhlZDMyLmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqwAQoOc2ZpeGVkMzIuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrgBChhzZml4ZWQzMi5ndF9sdF9leGNsdXNpdmUamwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrAAQoPc2ZpeGVkMzIuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrIAQoZc2ZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES1AcKA2d0ZRgFIAEoD0LEB8JIwAcKhQEKDHNmaXhlZDMyLmd0ZRp1IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCr8BCg9zZml4ZWQzMi5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxwEKGXNmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUaqQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs8BChBzZml4ZWQzMi5ndGVfbHRlGroBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtcBChpzZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ8CgJpbhgGIAMoD0JwwkhtCmsKC3NmaXhlZDMyLmluGlwhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJzCgZub3RfaW4YByADKA9CY8JIYApeCg9zZml4ZWQzMi5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygPQh3CSBoKGAoQc2ZpeGVkMzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i5RQKDVNGaXhlZDY0UnVsZXMSgAEKBWNvbnN0GAEgASgQQnHCSG4KbAoOc2ZpeGVkNjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKHAQoCbHQYAiABKBBCecJIdgp0CgtzZml4ZWQ2NC5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKZAQoDbHRlGAMgASgQQokBwkiFAQqCAQoMc2ZpeGVkNjQubHRlGnIhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKIBwoCZ3QYBCABKBBC+QbCSPUGCncKC3NmaXhlZDY0Lmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqwAQoOc2ZpeGVkNjQuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrgBChhzZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUamwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrAAQoPc2ZpeGVkNjQuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrIAQoZc2ZpeGVkNjQuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES1AcKA2d0ZRgFIAEoEELEB8JIwAcKhQEKDHNmaXhlZDY0Lmd0ZRp1IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCr8BCg9zZml4ZWQ2NC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxwEKGXNmaXhlZDY0Lmd0ZV9sdF9leGNsdXNpdmUaqQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs8BChBzZml4ZWQ2NC5ndGVfbHRlGroBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtcBChpzZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ8CgJpbhgGIAMoEEJwwkhtCmsKC3NmaXhlZDY0LmluGlwhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJzCgZub3RfaW4YByADKBBCY8JIYApeCg9zZml4ZWQ2NC5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygQQh3CSBoKGAoQc2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwAEKCUJvb2xSdWxlcxJ8CgVjb25zdBgBIAEoCEJtwkhqCmgKCmJvb2wuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIqCgdleGFtcGxlGAIgAygIQhnCSBYKFAoMYm9vbC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIi6jwKC1N0cmluZ1J1bGVzEoABCgVjb25zdBgBIAEoCUJxwkhuCmwKDHN0cmluZy5jb25zdBpcdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCBgJXNgJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycScQoDbGVuGBMgASgEQmTCSGEKXwoKc3RyaW5nLmxlbhpRdWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ211c3QgYmUgJXMgY2hhcmFjdGVycycuZm9ybWF0KFtydWxlcy5sZW5dKSA6ICcnEokBCgdtaW5fbGVuGAIgASgEQnjCSHUKcwoOc3RyaW5nLm1pbl9sZW4aYXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2xlbiA/ICdtdXN0IGJlIGF0IGxlYXN0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSiAEKB21heF9sZW4YAyABKARCd8JIdApyCg5zdHJpbmcubWF4X2xlbhpgdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfbGVuID8gJ211c3QgYmUgYXQgbW9zdCAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEosBCglsZW5fYnl0ZXMYFCABKARCeMJIdQpzChBzdHJpbmcubGVuX2J5dGVzGl91aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgIT0gcnVsZXMubGVuX2J5dGVzID8gJ211c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuX2J5dGVzXSkgOiAnJxKUAQoJbWluX2J5dGVzGAQgASgEQoABwkh9CnsKEHN0cmluZy5taW5fYnl0ZXMaZ3VpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9ieXRlcyA/ICdtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9ieXRlc10pIDogJycSkgEKCW1heF9ieXRlcxgFIAEoBEJ/wkh8CnoKEHN0cmluZy5tYXhfYnl0ZXMaZnVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA+IHJ1bGVzLm1heF9ieXRlcyA/ICdtdXN0IGJlIGF0IG1vc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWF4X2J5dGVzXSkgOiAnJxKHAQoHcGF0dGVybhgGIAEoCUJ2wkhzCnEKDnN0cmluZy5wYXR0ZXJuGl8hdGhpcy5tYXRjaGVzKHJ1bGVzLnBhdHRlcm4pID8gJ2RvZXMgbm90IG1hdGNoIHJlZ2V4IHBhdHRlcm4gYCVzYCcuZm9ybWF0KFtydWxlcy5wYXR0ZXJuXSkgOiAnJxJ+CgZwcmVmaXgYByABKAlCbsJIawppCg1zdHJpbmcucHJlZml4GlghdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAnZG9lcyBub3QgaGF2ZSBwcmVmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEnwKBnN1ZmZpeBgIIAEoCUJswkhpCmcKDXN0cmluZy5zdWZmaXgaViF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAnZG9lcyBub3QgaGF2ZSBzdWZmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEooBCghjb250YWlucxgJIAEoCUJ4wkh1CnMKD3N0cmluZy5jb250YWlucxpgIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ2RvZXMgbm90IGNvbnRhaW4gc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpEBCgxub3RfY29udGFpbnMYFyABKAlCe8JIeAp2ChNzdHJpbmcubm90X2NvbnRhaW5zGl90aGlzLmNvbnRhaW5zKHJ1bGVzLm5vdF9jb250YWlucykgPyAnY29udGFpbnMgc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMubm90X2NvbnRhaW5zXSkgOiAnJxJ6CgJpbhgKIAMoCUJuwkhrCmkKCXN0cmluZy5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAsgAygJQmHCSF4KXAoNc3RyaW5nLm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEtkBCgVlbWFpbBgMIAEoCELHAcJIwwEKWwoMc3RyaW5nLmVtYWlsEh1tdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcxosIXJ1bGVzLmVtYWlsIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0VtYWlsKCkKZAoSc3RyaW5nLmVtYWlsX2VtcHR5EjJ2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcxoaIXJ1bGVzLmVtYWlsIHx8IHRoaXMgIT0gJydIABLhAQoIaG9zdG5hbWUYDSABKAhCzAHCSMgBCl8KD3N0cmluZy5ob3N0bmFtZRIYbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lGjIhcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKQplChVzdHJpbmcuaG9zdG5hbWVfZW1wdHkSLXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0bmFtZRodIXJ1bGVzLmhvc3RuYW1lIHx8IHRoaXMgIT0gJydIABLBAQoCaXAYDiABKAhCsgHCSK4BCk8KCXN0cmluZy5pcBIabXVzdCBiZSBhIHZhbGlkIElQIGFkZHJlc3MaJiFydWxlcy5pcCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCgpClsKD3N0cmluZy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaFyFydWxlcy5pcCB8fCB0aGlzICE9ICcnSAAS0AEKBGlwdjQYDyABKAhCvwHCSLsBClYKC3N0cmluZy5pcHY0EhxtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzGikhcnVsZXMuaXB2NCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg0KQphChFzdHJpbmcuaXB2NF9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcxoZIXJ1bGVzLmlwdjQgfHwgdGhpcyAhPSAnJ0gAEtABCgRpcHY2GBAgASgIQr8Bwki7AQpWCgtzdHJpbmcuaXB2NhIcbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxopIXJ1bGVzLmlwdjYgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXAoNikKYQoRc3RyaW5nLmlwdjZfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3MaGSFydWxlcy5pcHY2IHx8IHRoaXMgIT0gJydIABK5AQoDdXJpGBEgASgIQqkBwkilAQpLCgpzdHJpbmcudXJpEhNtdXN0IGJlIGEgdmFsaWQgVVJJGighcnVsZXMudXJpIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc1VyaSgpClYKEHN0cmluZy51cmlfZW1wdHkSKHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVUkkaGCFydWxlcy51cmkgfHwgdGhpcyAhPSAnJ0gAEmoKB3VyaV9yZWYYEiABKAhCV8JIVApSCg5zdHJpbmcudXJpX3JlZhIdbXVzdCBiZSBhIHZhbGlkIFVSSSBSZWZlcmVuY2UaISFydWxlcy51cmlfcmVmIHx8IHRoaXMuaXNVcmlSZWYoKUgAEokCCgdhZGRyZXNzGBUgASgIQvUBwkjxAQp7Cg5zdHJpbmcuYWRkcmVzcxInbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGkAhcnVsZXMuYWRkcmVzcyB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpIHx8IHRoaXMuaXNJcCgpCnIKFHN0cmluZy5hZGRyZXNzX2VtcHR5Ejx2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgaG9zdG5hbWUsIG9yIGlwIGFkZHJlc3MaHCFydWxlcy5hZGRyZXNzIHx8IHRoaXMgIT0gJydIABKSAgoEdXVpZBgWIAEoCEKBAsJI/QEKnwEKC3N0cmluZy51dWlkEhRtdXN0IGJlIGEgdmFsaWQgVVVJRBp6IXJ1bGVzLnV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykKWQoRc3RyaW5nLnV1aWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVVUlEGhkhcnVsZXMudXVpZCB8fCB0aGlzICE9ICcnSAAS6gEKBXR1dWlkGCEgASgIQtgBwkjUAQptCgxzdHJpbmcudHV1aWQSHG11c3QgYmUgYSB2YWxpZCB0cmltbWVkIFVVSUQaPyFydWxlcy50dXVpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezMyfSQnKQpjChJzdHJpbmcudHV1aWRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCB0cmltbWVkIFVVSUQaGiFydWxlcy50dXVpZCB8fCB0aGlzICE9ICcnSAASkAIKEWlwX3dpdGhfcHJlZml4bGVuGBogASgIQvIBwkjuAQpyChhzdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW4SGW11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaOyFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCgpCngKHnN0cmluZy5pcF93aXRoX3ByZWZpeGxlbl9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBomIXJ1bGVzLmlwX3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLJAgoTaXB2NF93aXRoX3ByZWZpeGxlbhgbIAEoCEKpAsJIpQIKjQEKGnN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuEi9tdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCkKkgEKIHN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEskCChNpcHY2X3dpdGhfcHJlZml4bGVuGBwgASgIQqkCwkilAgqNAQoac3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW4SL211c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGj4hcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2KQqSAQogc3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW5fZW1wdHkSRHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGighcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAAS7AEKCWlwX3ByZWZpeBgdIAEoCELWAcJI0gEKZgoQc3RyaW5nLmlwX3ByZWZpeBIZbXVzdCBiZSBhIHZhbGlkIElQIHByZWZpeBo3IXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCh0cnVlKQpoChZzdHJpbmcuaXBfcHJlZml4X2VtcHR5Ei52YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgcHJlZml4Gh4hcnVsZXMuaXBfcHJlZml4IHx8IHRoaXMgIT0gJydIABL9AQoLaXB2NF9wcmVmaXgYHiABKAhC5QHCSOEBCm8KEnN0cmluZy5pcHY0X3ByZWZpeBIbbXVzdCBiZSBhIHZhbGlkIElQdjQgcHJlZml4GjwhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCwgdHJ1ZSkKbgoYc3RyaW5nLmlwdjRfcHJlZml4X2VtcHR5EjB2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBwcmVmaXgaICFydWxlcy5pcHY0X3ByZWZpeCB8fCB0aGlzICE9ICcnSAAS/QEKC2lwdjZfcHJlZml4GB8gASgIQuUBwkjhAQpvChJzdHJpbmcuaXB2Nl9wcmVmaXgSG211c3QgYmUgYSB2YWxpZCBJUHY2IHByZWZpeBo8IXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDYsIHRydWUpCm4KGHN0cmluZy5pcHY2X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgcHJlZml4GiAhcnVsZXMuaXB2Nl9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAEq8CCg1ob3N0X2FuZF9wb3J0GCAgASgIQpUCwkiRAgqTAQoUc3RyaW5nLmhvc3RfYW5kX3BvcnQSO211c3QgYmUgYSB2YWxpZCBob3N0IChob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBhbmQgcG9ydCBwYWlyGj4hcnVsZXMuaG9zdF9hbmRfcG9ydCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0QW5kUG9ydCh0cnVlKQp5ChpzdHJpbmcuaG9zdF9hbmRfcG9ydF9lbXB0eRI3dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3QgYW5kIHBvcnQgcGFpchoiIXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyAhPSAnJ0gAEu4BCgR1bGlkGCMgASgIQt0BwkjZAQp8CgtzdHJpbmcudWxpZBIUbXVzdCBiZSBhIHZhbGlkIFVMSUQaVyFydWxlcy51bGlkIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQnKQpZChFzdHJpbmcudWxpZF9lbXB0eRIpdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIFVMSUQaGSFydWxlcy51bGlkIHx8IHRoaXMgIT0gJydIABLUAgoMcHJvdG9idWZfZnFuGCUgASgIQrsCwki3AgqvAQoTc3RyaW5nLnByb3RvYnVmX2ZxbhItbXVzdCBiZSBhIHZhbGlkIGZ1bGx5LXF1YWxpZmllZCBQcm90b2J1ZiBuYW1lGmkhcnVsZXMucHJvdG9idWZfZnFuIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeW0EtWmEtel9dW0EtWmEtel8wLTldKihcXC5bQS1aYS16X11bQS1aYS16XzAtOV0qKSokJykKggEKGXN0cmluZy5wcm90b2J1Zl9mcW5fZW1wdHkSQnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBmdWxseS1xdWFsaWZpZWQgUHJvdG9idWYgbmFtZRohIXJ1bGVzLnByb3RvYnVmX2ZxbiB8fCB0aGlzICE9ICcnSAASkQMKEHByb3RvYnVmX2RvdF9mcW4YJiABKAhC9ALCSPACCs0BChdzdHJpbmcucHJvdG9idWZfZG90X2ZxbhJAbXVzdCBiZSBhIHZhbGlkIGZ1bGx5LXF1YWxpZmllZCBQcm90b2J1ZiBuYW1lIHdpdGggYSBsZWFkaW5nIGRvdBpwIXJ1bGVzLnByb3RvYnVmX2RvdF9mcW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15cXC5bQS1aYS16X11bQS1aYS16XzAtOV0qKFxcLltBLVphLXpfXVtBLVphLXpfMC05XSopKiQnKQqdAQodc3RyaW5nLnByb3RvYnVmX2RvdF9mcW5fZW1wdHkSVXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBmdWxseS1xdWFsaWZpZWQgUHJvdG9idWYgbmFtZSB3aXRoIGEgbGVhZGluZyBkb3QaJSFydWxlcy5wcm90b2J1Zl9kb3RfZnFuIHx8IHRoaXMgIT0gJydIABKcBQoQd2VsbF9rbm93bl9yZWdleBgYIAEoDjIYLmJ1Zi52YWxpZGF0ZS5Lbm93blJlZ2V4QuUEwkjhBArqAQojc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWUSIG11c3QgYmUgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGqABcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeOj9bMC05YS16QS1aISMkJSZcJyorLS5eX3x+XHg2MF0rJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKyQnKQqNAQopc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWVfZW1wdHkSNXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGilydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDEgfHwgdGhpcyAhPSAnJwrhAQokc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX3ZhbHVlEiFtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgdmFsdWUalQFydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDIgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeW15cdTAwMDAtXHUwMDA4XHUwMDBBLVx1MDAxRlx1MDA3Rl0qJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKiQnKUgAEg4KBnN0cmljdBgZIAEoCBIsCgdleGFtcGxlGCIgAygJQhvCSBgKFgoOc3RyaW5nLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duIt0RCgpCeXRlc1J1bGVzEnoKBWNvbnN0GAEgASgMQmvCSGgKZgoLYnl0ZXMuY29uc3QaV3RoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgYmUgJXgnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxJrCgNsZW4YDSABKARCXsJIWwpZCglieXRlcy5sZW4aTHVpbnQodGhpcy5zaXplKCkpICE9IHJ1bGVzLmxlbiA/ICdtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSgwEKB21pbl9sZW4YAiABKARCcsJIbwptCg1ieXRlcy5taW5fbGVuGlx1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAnbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKCAQoHbWF4X2xlbhgDIAEoBEJxwkhuCmwKDWJ5dGVzLm1heF9sZW4aW3VpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICdtdXN0IGJlIGF0IG1vc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSigEKB3BhdHRlcm4YBCABKAlCecJIdgp0Cg1ieXRlcy5wYXR0ZXJuGmMhc3RyaW5nKHRoaXMpLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAnbXVzdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycSewoGcHJlZml4GAUgASgMQmvCSGgKZgoMYnl0ZXMucHJlZml4GlYhdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAnZG9lcyBub3QgaGF2ZSBwcmVmaXggJXgnLmZvcm1hdChbcnVsZXMucHJlZml4XSkgOiAnJxJ5CgZzdWZmaXgYBiABKAxCacJIZgpkCgxieXRlcy5zdWZmaXgaVCF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAnZG9lcyBub3QgaGF2ZSBzdWZmaXggJXgnLmZvcm1hdChbcnVsZXMuc3VmZml4XSkgOiAnJxJ9Cghjb250YWlucxgHIAEoDEJrwkhoCmYKDmJ5dGVzLmNvbnRhaW5zGlQhdGhpcy5jb250YWlucyhydWxlcy5jb250YWlucykgPyAnZG9lcyBub3QgY29udGFpbiAleCcuZm9ybWF0KFtydWxlcy5jb250YWluc10pIDogJycSoQEKAmluGAggAygMQpQBwkiQAQqNAQoIYnl0ZXMuaW4agAFnZXRGaWVsZChydWxlcywgJ2luJykuc2l6ZSgpID4gMCAmJiAhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJwCgZub3RfaW4YCSADKAxCYMJIXQpbCgxieXRlcy5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxLlAQoCaXAYCiABKAhC1gHCSNIBCm4KCGJ5dGVzLmlwEhptdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxpGIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNCB8fCB0aGlzLnNpemUoKSA9PSAxNgpgCg5ieXRlcy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaHSFydWxlcy5pcCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS3gEKBGlwdjQYCyABKAhCzQHCSMkBCl8KCmJ5dGVzLmlwdjQSHG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaMyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNApmChBieXRlcy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGh8hcnVsZXMuaXB2NCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS3wEKBGlwdjYYDCABKAhCzgHCSMoBCmAKCmJ5dGVzLmlwdjYSHG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3MaNCFydWxlcy5pcHY2IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gMTYKZgoQYnl0ZXMuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxofIXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgIT0gMEgAEs8BCgR1dWlkGA8gASgIQr4Bwki6AQpYCgpieXRlcy51dWlkEhRtdXN0IGJlIGEgdmFsaWQgVVVJRBo0IXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpeChBieXRlcy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBofIXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgIT0gMEgAEisKB2V4YW1wbGUYDiADKAxCGsJIFwoVCg1ieXRlcy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLBAwoJRW51bVJ1bGVzEnwKBWNvbnN0GAEgASgFQm3CSGoKaAoKZW51bS5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEhQKDGRlZmluZWRfb25seRgCIAEoCBJ4CgJpbhgDIAMoBUJswkhpCmcKB2VudW0uaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEm8KBm5vdF9pbhgEIAMoBUJfwkhcCloKC2VudW0ubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKgoHZXhhbXBsZRgFIAMoBUIZwkgWChQKDGVudW0uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIu0DCg1SZXBlYXRlZFJ1bGVzEpYBCgltaW5faXRlbXMYASABKARCggHCSH8KfQoScmVwZWF0ZWQubWluX2l0ZW1zGmd1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9pdGVtcyA/ICdtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJWQgaXRlbShzKScuZm9ybWF0KFtydWxlcy5taW5faXRlbXNdKSA6ICcnEpwBCgltYXhfaXRlbXMYAiABKARCiAHCSIQBCoEBChJyZXBlYXRlZC5tYXhfaXRlbXMaa3VpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2l0ZW1zID8gJ211c3QgY29udGFpbiBubyBtb3JlIHRoYW4gJXMgaXRlbShzKScuZm9ybWF0KFtydWxlcy5tYXhfaXRlbXNdKSA6ICcnEnAKBnVuaXF1ZRgDIAEoCEJgwkhdClsKD3JlcGVhdGVkLnVuaXF1ZRIocmVwZWF0ZWQgdmFsdWUgbXVzdCBjb250YWluIHVuaXF1ZSBpdGVtcxoeIXJ1bGVzLnVuaXF1ZSB8fCB0aGlzLnVuaXF1ZSgpEicKBWl0ZW1zGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiKKAwoITWFwUnVsZXMSjwEKCW1pbl9wYWlycxgBIAEoBEJ8wkh5CncKDW1hcC5taW5fcGFpcnMaZnVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX3BhaXJzID8gJ21hcCBtdXN0IGJlIGF0IGxlYXN0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWluX3BhaXJzXSkgOiAnJxKOAQoJbWF4X3BhaXJzGAIgASgEQnvCSHgKdgoNbWFwLm1heF9wYWlycxpldWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbW9zdCAlZCBlbnRyaWVzJy5mb3JtYXQoW3J1bGVzLm1heF9wYWlyc10pIDogJycSJgoEa2V5cxgEIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzEigKBnZhbHVlcxgFIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzKgkI6AcQgICAgAIiJgoIQW55UnVsZXMSCgoCaW4YAiADKAkSDgoGbm90X2luGAMgAygJIr8WCg1EdXJhdGlvblJ1bGVzEpsBCgVjb25zdBgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJxwkhuCmwKDmR1cmF0aW9uLmNvbnN0Glp0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICdtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSogEKAmx0GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnnCSHYKdAoLZHVyYXRpb24ubHQaZSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAAStAEKA2x0ZRgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkKJAcJIhQEKggEKDGR1cmF0aW9uLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASowcKAmd0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQvkGwkj1Bgp3CgtkdXJhdGlvbi5ndBpoIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKsAEKDmR1cmF0aW9uLmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq4AQoYZHVyYXRpb24uZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKwAEKD2R1cmF0aW9uLmd0X2x0ZRqsAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKyAEKGWR1cmF0aW9uLmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu8HCgNndGUYBiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CxAfCSMAHCoUBCgxkdXJhdGlvbi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq/AQoPZHVyYXRpb24uZ3RlX2x0GqsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCscBChlkdXJhdGlvbi5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrPAQoQZHVyYXRpb24uZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrXAQoaZHVyYXRpb24uZ3RlX2x0ZV9leGNsdXNpdmUauAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESlwEKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnDCSG0KawoLZHVyYXRpb24uaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEo4BCgZub3RfaW4YCCADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CY8JIYApeCg9kdXJhdGlvbi5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxJJCgdleGFtcGxlGAkgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQh3CSBoKGAoQZHVyYXRpb24uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i6wUKDkZpZWxkTWFza1J1bGVzErkBCgVjb25zdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCjQHCSIkBCoYBChBmaWVsZF9tYXNrLmNvbnN0GnJ0aGlzLnBhdGhzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRocyA/ICdtdXN0IGVxdWFsIHBhdGhzICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRoc10pIDogJycS0wEKAmluGAIgAygJQsYBwkjCAQq/AQoNZmllbGRfbWFzay5pbhqtASF0aGlzLnBhdGhzLmFsbChwLCBwIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ2luJykuZXhpc3RzKGYsIHAuc3RhcnRzV2l0aChmKycuJykpKSA/ICdtdXN0IG9ubHkgY29udGFpbiBwYXRocyBpbiAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEu0BCgZub3RfaW4YAyADKAlC3AHCSNgBCtUBChFmaWVsZF9tYXNrLm5vdF9pbhq/ASF0aGlzLnBhdGhzLmFsbChwLCAhKHAgaW4gZ2V0RmllbGQocnVsZXMsICdub3RfaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ25vdF9pbicpLmV4aXN0cyhmLCBwLnN0YXJ0c1dpdGgoZisnLicpKSkpID8gJ211c3Qgbm90IGNvbnRhaW4gYW55IHBhdGhzIGluICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnbm90X2luJyldKSA6ICcnEkwKB2V4YW1wbGUYBCADKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQh/CSBwKGgoSZmllbGRfbWFzay5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIisBcKDlRpbWVzdGFtcFJ1bGVzEp0BCgVjb25zdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCcsJIbwptCg90aW1lc3RhbXAuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKkAQoCbHQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQnrCSHcKdQoMdGltZXN0YW1wLmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAErYBCgNsdGUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQooBwkiGAQqDAQoNdGltZXN0YW1wLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASZgoGbHRfbm93GAcgASgIQlTCSFEKTwoQdGltZXN0YW1wLmx0X25vdxo7KHJ1bGVzLmx0X25vdyAmJiB0aGlzID4gbm93KSA/ICdtdXN0IGJlIGxlc3MgdGhhbiBub3cnIDogJydIABKpBwoCZ3QYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQv4Gwkj6Bgp4Cgx0aW1lc3RhbXAuZ3QaaCFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrEBCg90aW1lc3RhbXAuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrkBChl0aW1lc3RhbXAuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKwQEKEHRpbWVzdGFtcC5ndF9sdGUarAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCskBChp0aW1lc3RhbXAuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES9QcKA2d0ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCyQfCSMUHCoYBCg10aW1lc3RhbXAuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwAEKEHRpbWVzdGFtcC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKyAEKGnRpbWVzdGFtcC5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrQAQoRdGltZXN0YW1wLmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2AEKG3RpbWVzdGFtcC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJpCgZndF9ub3cYCCABKAhCV8JIVApSChB0aW1lc3RhbXAuZ3Rfbm93Gj4ocnVsZXMuZ3Rfbm93ICYmIHRoaXMgPCBub3cpID8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG5vdycgOiAnJ0gBErEBCgZ3aXRoaW4YCSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25ChQHCSIEBCn8KEHRpbWVzdGFtcC53aXRoaW4aa3RoaXMgPCBub3ctcnVsZXMud2l0aGluIHx8IHRoaXMgPiBub3crcnVsZXMud2l0aGluID8gJ211c3QgYmUgd2l0aGluICVzIG9mIG5vdycuZm9ybWF0KFtydWxlcy53aXRoaW5dKSA6ICcnEksKB2V4YW1wbGUYCiADKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQh7CSBsKGQoRdGltZXN0YW1wLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIjkKClZpb2xhdGlvbnMSKwoKdmlvbGF0aW9ucxgBIAMoCzIXLmJ1Zi52YWxpZGF0ZS5WaW9sYXRpb24inwEKCVZpb2xhdGlvbhImCgVmaWVsZBgFIAEoCzIXLmJ1Zi52YWxpZGF0ZS5GaWVsZFBhdGgSJQoEcnVsZRgGIAEoCzIXLmJ1Zi52YWxpZGF0ZS5GaWVsZFBhdGgSDwoHcnVsZV9pZBgCIAEoCRIPCgdtZXNzYWdlGAMgASgJEg8KB2Zvcl9rZXkYBCABKAhKBAgBEAJSCmZpZWxkX3BhdGgiPQoJRmllbGRQYXRoEjAKCGVsZW1lbnRzGAEgAygLMh4uYnVmLnZhbGlkYXRlLkZpZWxkUGF0aEVsZW1lbnQi6QIKEEZpZWxkUGF0aEVsZW1lbnQSFAoMZmllbGRfbnVtYmVyGAEgASgFEhIKCmZpZWxkX25hbWUYAiABKAkSPgoKZmllbGRfdHlwZRgDIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlEjwKCGtleV90eXBlGAQgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSPgoKdmFsdWVfdHlwZRgFIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlEg8KBWluZGV4GAYgASgESAASEgoIYm9vbF9rZXkYByABKAhIABIRCgdpbnRfa2V5GAggASgDSAASEgoIdWludF9rZXkYCSABKARIABIUCgpzdHJpbmdfa2V5GAogASgJSABCCwoJc3Vic2NyaXB0KqEBCgZJZ25vcmUSFgoSSUdOT1JFX1VOU1BFQ0lGSUVEEAASGAoUSUdOT1JFX0lGX1pFUk9fVkFMVUUQARIRCg1JR05PUkVfQUxXQVlTEAMiBAgCEAIqDElHTk9SRV9FTVBUWSoOSUdOT1JFX0RFRkFVTFQqF0lHTk9SRV9JRl9ERUZBVUxUX1ZBTFVFKhVJR05PUkVfSUZfVU5QT1BVTEFURUQqbgoKS25vd25SZWdleBIbChdLTk9XTl9SRUdFWF9VTlNQRUNJRklFRBAAEiAKHEtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX05BTUUQARIhCh1LTk9XTl9SRUdFWF9IVFRQX0hFQURFUl9WQUxVRRACOlYKB21lc3NhZ2USHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYhwkgASgLMhouYnVmLnZhbGlkYXRlLk1lc3NhZ2VSdWxlc1IHbWVzc2FnZTpOCgVvbmVvZhIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMYhwkgASgLMhguYnVmLnZhbGlkYXRlLk9uZW9mUnVsZXNSBW9uZW9mOk4KBWZpZWxkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiHCSABKAsyGC5idWYudmFsaWRhdGUuRmllbGRSdWxlc1IFZmllbGQ6XQoKcHJlZGVmaW5lZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYiAkgASgLMh0uYnVmLnZhbGlkYXRlLlByZWRlZmluZWRSdWxlc1IKcHJlZGVmaW5lZEK7AQoQY29tLmJ1Zi52YWxpZGF0ZUINVmFsaWRhdGVQcm90b1ABWkdidWYuYnVpbGQvZ2VuL2dvL2J1ZmJ1aWxkL3Byb3RvdmFsaWRhdGUvcHJvdG9jb2xidWZmZXJzL2dvL2J1Zi92YWxpZGF0ZaICA0JWWKoCDEJ1Zi5WYWxpZGF0ZcoCDEJ1ZlxWYWxpZGF0ZeICGEJ1ZlxWYWxpZGF0ZVxHUEJNZXRhZGF0YeoCDUJ1Zjo6VmFsaWRhdGU", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_field_mask, file_google_protobuf_timestamp]); + fileDesc("ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSKGAQoMTWVzc2FnZVJ1bGVzEhYKDmNlbF9leHByZXNzaW9uGAUgAygJEh8KA2NlbBgDIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlEi0KBW9uZW9mGAQgAygLMh4uYnVmLnZhbGlkYXRlLk1lc3NhZ2VPbmVvZlJ1bGVKBAgBEAJSCGRpc2FibGVkIjQKEE1lc3NhZ2VPbmVvZlJ1bGUSDgoGZmllbGRzGAEgAygJEhAKCHJlcXVpcmVkGAIgASgIIh4KCk9uZW9mUnVsZXMSEAoIcmVxdWlyZWQYASABKAgiiwkKCkZpZWxkUnVsZXMSFgoOY2VsX2V4cHJlc3Npb24YHSADKAkSHwoDY2VsGBcgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSEAoIcmVxdWlyZWQYGSABKAgSJAoGaWdub3JlGBsgASgOMhQuYnVmLnZhbGlkYXRlLklnbm9yZRIpCgVmbG9hdBgBIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GbG9hdFJ1bGVzSAASKwoGZG91YmxlGAIgASgLMhkuYnVmLnZhbGlkYXRlLkRvdWJsZVJ1bGVzSAASKQoFaW50MzIYAyABKAsyGC5idWYudmFsaWRhdGUuSW50MzJSdWxlc0gAEikKBWludDY0GAQgASgLMhguYnVmLnZhbGlkYXRlLkludDY0UnVsZXNIABIrCgZ1aW50MzIYBSABKAsyGS5idWYudmFsaWRhdGUuVUludDMyUnVsZXNIABIrCgZ1aW50NjQYBiABKAsyGS5idWYudmFsaWRhdGUuVUludDY0UnVsZXNIABIrCgZzaW50MzIYByABKAsyGS5idWYudmFsaWRhdGUuU0ludDMyUnVsZXNIABIrCgZzaW50NjQYCCABKAsyGS5idWYudmFsaWRhdGUuU0ludDY0UnVsZXNIABItCgdmaXhlZDMyGAkgASgLMhouYnVmLnZhbGlkYXRlLkZpeGVkMzJSdWxlc0gAEi0KB2ZpeGVkNjQYCiABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQ2NFJ1bGVzSAASLwoIc2ZpeGVkMzIYCyABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkMzJSdWxlc0gAEi8KCHNmaXhlZDY0GAwgASgLMhsuYnVmLnZhbGlkYXRlLlNGaXhlZDY0UnVsZXNIABInCgRib29sGA0gASgLMhcuYnVmLnZhbGlkYXRlLkJvb2xSdWxlc0gAEisKBnN0cmluZxgOIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlc0gAEikKBWJ5dGVzGA8gASgLMhguYnVmLnZhbGlkYXRlLkJ5dGVzUnVsZXNIABInCgRlbnVtGBAgASgLMhcuYnVmLnZhbGlkYXRlLkVudW1SdWxlc0gAEi8KCHJlcGVhdGVkGBIgASgLMhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXNIABIlCgNtYXAYEyABKAsyFi5idWYudmFsaWRhdGUuTWFwUnVsZXNIABIlCgNhbnkYFCABKAsyFi5idWYudmFsaWRhdGUuQW55UnVsZXNIABIvCghkdXJhdGlvbhgVIAEoCzIbLmJ1Zi52YWxpZGF0ZS5EdXJhdGlvblJ1bGVzSAASMgoKZmllbGRfbWFzaxgcIAEoCzIcLmJ1Zi52YWxpZGF0ZS5GaWVsZE1hc2tSdWxlc0gAEjEKCXRpbWVzdGFtcBgWIAEoCzIcLmJ1Zi52YWxpZGF0ZS5UaW1lc3RhbXBSdWxlc0gAQgYKBHR5cGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSJVCg9QcmVkZWZpbmVkUnVsZXMSHwoDY2VsGAEgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSL4FgoKRmxvYXRSdWxlcxJ9CgVjb25zdBgBIAEoAkJuwkhrCmkKC2Zsb2F0LmNvbnN0Glp0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICdtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSmQEKAmx0GAIgASgCQooBwkiGAQqDAQoIZmxvYXQubHQadyFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQpPyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASqQEKA2x0ZRgDIAEoAkKZAcJIlQEKkgEKCWZsb2F0Lmx0ZRqEASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEtAHCgJndBgEIAEoAkLBB8JIvQcKhgEKCGZsb2F0Lmd0GnohaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq9AQoLZmxvYXQuZ3RfbHQarQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrHAQoVZmxvYXQuZ3RfbHRfZXhjbHVzaXZlGq0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKzQEKDGZsb2F0Lmd0X2x0ZRq8AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCtcBChZmbG9hdC5ndF9sdGVfZXhjbHVzaXZlGrwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARKcCAoDZ3RlGAUgASgCQowIwkiICAqVAQoJZmxvYXQuZ3RlGocBIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCswBCgxmbG9hdC5ndGVfbHQauwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtYBChZmbG9hdC5ndGVfbHRfZXhjbHVzaXZlGrsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrcAQoNZmxvYXQuZ3RlX2x0ZRrKAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK5gEKF2Zsb2F0Lmd0ZV9sdGVfZXhjbHVzaXZlGsoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnkKAmluGAYgAygCQm3CSGoKaAoIZmxvYXQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnAKBm5vdF9pbhgHIAMoAkJgwkhdClsKDGZsb2F0Lm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEm8KBmZpbml0ZRgIIAEoCEJfwkhcCloKDGZsb2F0LmZpbml0ZRpKcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAnbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSKwoHZXhhbXBsZRgJIAMoAkIawkgXChUKDWZsb2F0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIooXCgtEb3VibGVSdWxlcxJ+CgVjb25zdBgBIAEoAUJvwkhsCmoKDGRvdWJsZS5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEpoBCgJsdBgCIAEoAUKLAcJIhwEKhAEKCWRvdWJsZS5sdBp3IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKqAQoDbHRlGAMgASgBQpoBwkiWAQqTAQoKZG91YmxlLmx0ZRqEASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEtUHCgJndBgEIAEoAULGB8JIwgcKhwEKCWRvdWJsZS5ndBp6IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKvgEKDGRvdWJsZS5ndF9sdBqtAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsgBChZkb3VibGUuZ3RfbHRfZXhjbHVzaXZlGq0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKzgEKDWRvdWJsZS5ndF9sdGUavAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrYAQoXZG91YmxlLmd0X2x0ZV9leGNsdXNpdmUavAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEqEICgNndGUYBSABKAFCkQjCSI0ICpYBCgpkb3VibGUuZ3RlGocBIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCs0BCg1kb3VibGUuZ3RlX2x0GrsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrXAQoXZG91YmxlLmd0ZV9sdF9leGNsdXNpdmUauwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCt0BCg5kb3VibGUuZ3RlX2x0ZRrKAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK5wEKGGRvdWJsZS5ndGVfbHRlX2V4Y2x1c2l2ZRrKAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ6CgJpbhgGIAMoAUJuwkhrCmkKCWRvdWJsZS5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAcgAygBQmHCSF4KXAoNZG91YmxlLm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnAKBmZpbml0ZRgIIAEoCEJgwkhdClsKDWRvdWJsZS5maW5pdGUaSnJ1bGVzLmZpbml0ZSA/ICh0aGlzLmlzTmFuKCkgfHwgdGhpcy5pc0luZigpID8gJ211c3QgYmUgZmluaXRlJyA6ICcnKSA6ICcnEiwKB2V4YW1wbGUYCSADKAFCG8JIGAoWCg5kb3VibGUuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4isBQKCkludDMyUnVsZXMSfQoFY29uc3QYASABKAVCbsJIawppCgtpbnQzMi5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEoQBCgJsdBgCIAEoBUJ2wkhzCnEKCGludDMyLmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpUBCgNsdGUYAyABKAVChQHCSIEBCn8KCWludDMyLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS+QYKAmd0GAQgASgFQuoGwkjmBgp0CghpbnQzMi5ndBpoIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKrQEKC2ludDMyLmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq1AQoVaW50MzIuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKDGludDMyLmd0X2x0ZRqsAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKxQEKFmludDMyLmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEsUHCgNndGUYBSABKAVCtQfCSLEHCoIBCglpbnQzMi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq8AQoMaW50MzIuZ3RlX2x0GqsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCsQBChZpbnQzMi5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoNaW50MzIuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrUAQoXaW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUauAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESeQoCaW4YBiADKAVCbcJIagpoCghpbnQzMi5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScAoGbm90X2luGAcgAygFQmDCSF0KWwoMaW50MzIubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKwoHZXhhbXBsZRgIIAMoBUIawkgXChUKDWludDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIrAUCgpJbnQ2NFJ1bGVzEn0KBWNvbnN0GAEgASgDQm7CSGsKaQoLaW50NjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKEAQoCbHQYAiABKANCdsJIcwpxCghpbnQ2NC5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKVAQoDbHRlGAMgASgDQoUBwkiBAQp/CglpbnQ2NC5sdGUaciFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEvkGCgJndBgEIAEoA0LqBsJI5gYKdAoIaW50NjQuZ3QaaCFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCq0BCgtpbnQ2NC5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtQEKFWludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqbAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr0BCgxpbnQ2NC5ndF9sdGUarAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCsUBChZpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLFBwoDZ3RlGAUgASgDQrUHwkixBwqCAQoJaW50NjQuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKvAEKDGludDY0Lmd0ZV9sdBqrAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrEAQoWaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKDWludDY0Lmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK1AEKF2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGrgBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnkKAmluGAYgAygDQm3CSGoKaAoIaW50NjQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnAKBm5vdF9pbhgHIAMoA0JgwkhdClsKDGludDY0Lm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCSADKANCGsJIFwoVCg1pbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLCFAoLVUludDMyUnVsZXMSfgoFY29uc3QYASABKA1Cb8JIbApqCgx1aW50MzIuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKFAQoCbHQYAiABKA1Cd8JIdApyCgl1aW50MzIubHQaZSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASlwEKA2x0ZRgDIAEoDUKHAcJIgwEKgAEKCnVpbnQzMi5sdGUaciFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEv4GCgJndBgEIAEoDULvBsJI6wYKdQoJdWludDMyLmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwquAQoMdWludDMyLmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq2AQoWdWludDMyLmd0X2x0X2V4Y2x1c2l2ZRqbAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BCg11aW50MzIuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrGAQoXdWludDMyLmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEsoHCgNndGUYBSABKA1CugfCSLYHCoMBCgp1aW50MzIuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKvQEKDXVpbnQzMi5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxQEKF3VpbnQzMi5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrNAQoOdWludDMyLmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK1QEKGHVpbnQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ6CgJpbhgGIAMoDUJuwkhrCmkKCXVpbnQzMi5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAcgAygNQmHCSF4KXAoNdWludDMyLm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKA1CG8JIGAoWCg51aW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwhQKC1VJbnQ2NFJ1bGVzEn4KBWNvbnN0GAEgASgEQm/CSGwKagoMdWludDY0LmNvbnN0Glp0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICdtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycShQEKAmx0GAIgASgEQnfCSHQKcgoJdWludDY0Lmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpcBCgNsdGUYAyABKARChwHCSIMBCoABCgp1aW50NjQubHRlGnIhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABL+BgoCZ3QYBCABKARC7wbCSOsGCnUKCXVpbnQ2NC5ndBpoIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKrgEKDHVpbnQ2NC5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtgEKFnVpbnQ2NC5ndF9sdF9leGNsdXNpdmUamwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoNdWludDY0Lmd0X2x0ZRqsAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKxgEKF3VpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLKBwoDZ3RlGAUgASgEQroHwki2BwqDAQoKdWludDY0Lmd0ZRp1IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCr0BCg11aW50NjQuZ3RlX2x0GqsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCsUBChd1aW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKDnVpbnQ2NC5ndGVfbHRlGroBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtUBChh1aW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUauAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESegoCaW4YBiADKARCbsJIawppCgl1aW50NjQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnEKBm5vdF9pbhgHIAMoBEJhwkheClwKDXVpbnQ2NC5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIsCgdleGFtcGxlGAggAygEQhvCSBgKFgoOdWludDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsIUCgtTSW50MzJSdWxlcxJ+CgVjb25zdBgBIAEoEUJvwkhsCmoKDHNpbnQzMi5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEoUBCgJsdBgCIAEoEUJ3wkh0CnIKCXNpbnQzMi5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKXAQoDbHRlGAMgASgRQocBwkiDAQqAAQoKc2ludDMyLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS/gYKAmd0GAQgASgRQu8GwkjrBgp1CglzaW50MzIuZ3QaaCFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCq4BCgxzaW50MzIuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrYBChZzaW50MzIuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvgEKDXNpbnQzMi5ndF9sdGUarAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCsYBChdzaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESygcKA2d0ZRgFIAEoEUK6B8JItgcKgwEKCnNpbnQzMi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq9AQoNc2ludDMyLmd0ZV9sdBqrAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrFAQoXc2ludDMyLmd0ZV9sdF9leGNsdXNpdmUaqQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BCg5zaW50MzIuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrVAQoYc2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGrgBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnoKAmluGAYgAygRQm7CSGsKaQoJc2ludDMyLmluGlwhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJxCgZub3RfaW4YByADKBFCYcJIXgpcCg1zaW50MzIubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEUIbwkgYChYKDnNpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLCFAoLU0ludDY0UnVsZXMSfgoFY29uc3QYASABKBJCb8JIbApqCgxzaW50NjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKFAQoCbHQYAiABKBJCd8JIdApyCglzaW50NjQubHQaZSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASlwEKA2x0ZRgDIAEoEkKHAcJIgwEKgAEKCnNpbnQ2NC5sdGUaciFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEv4GCgJndBgEIAEoEkLvBsJI6wYKdQoJc2ludDY0Lmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwquAQoMc2ludDY0Lmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq2AQoWc2ludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqbAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BCg1zaW50NjQuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrGAQoXc2ludDY0Lmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEsoHCgNndGUYBSABKBJCugfCSLYHCoMBCgpzaW50NjQuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKvQEKDXNpbnQ2NC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxQEKF3NpbnQ2NC5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrNAQoOc2ludDY0Lmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK1QEKGHNpbnQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ6CgJpbhgGIAMoEkJuwkhrCmkKCXNpbnQ2NC5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAcgAygSQmHCSF4KXAoNc2ludDY0Lm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBJCG8JIGAoWCg5zaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i0xQKDEZpeGVkMzJSdWxlcxJ/CgVjb25zdBgBIAEoB0JwwkhtCmsKDWZpeGVkMzIuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKGAQoCbHQYAiABKAdCeMJIdQpzCgpmaXhlZDMyLmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpgBCgNsdGUYAyABKAdCiAHCSIQBCoEBCgtmaXhlZDMyLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASgwcKAmd0GAQgASgHQvQGwkjwBgp2CgpmaXhlZDMyLmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqvAQoNZml4ZWQzMi5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtwEKF2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvwEKDmZpeGVkMzIuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrHAQoYZml4ZWQzMi5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLPBwoDZ3RlGAUgASgHQr8Hwki7BwqEAQoLZml4ZWQzMi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq+AQoOZml4ZWQzMi5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxgEKGGZpeGVkMzIuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzgEKD2ZpeGVkMzIuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrWAQoZZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ7CgJpbhgGIAMoB0JvwkhsCmoKCmZpeGVkMzIuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnIKBm5vdF9pbhgHIAMoB0JiwkhfCl0KDmZpeGVkMzIubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoB0IcwkgZChcKD2ZpeGVkMzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i0xQKDEZpeGVkNjRSdWxlcxJ/CgVjb25zdBgBIAEoBkJwwkhtCmsKDWZpeGVkNjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKGAQoCbHQYAiABKAZCeMJIdQpzCgpmaXhlZDY0Lmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpgBCgNsdGUYAyABKAZCiAHCSIQBCoEBCgtmaXhlZDY0Lmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASgwcKAmd0GAQgASgGQvQGwkjwBgp2CgpmaXhlZDY0Lmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqvAQoNZml4ZWQ2NC5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtwEKF2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvwEKDmZpeGVkNjQuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrHAQoYZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLPBwoDZ3RlGAUgASgGQr8Hwki7BwqEAQoLZml4ZWQ2NC5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq+AQoOZml4ZWQ2NC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxgEKGGZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzgEKD2ZpeGVkNjQuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrWAQoZZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ7CgJpbhgGIAMoBkJvwkhsCmoKCmZpeGVkNjQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnIKBm5vdF9pbhgHIAMoBkJiwkhfCl0KDmZpeGVkNjQubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoBkIcwkgZChcKD2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i5RQKDVNGaXhlZDMyUnVsZXMSgAEKBWNvbnN0GAEgASgPQnHCSG4KbAoOc2ZpeGVkMzIuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKHAQoCbHQYAiABKA9CecJIdgp0CgtzZml4ZWQzMi5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKZAQoDbHRlGAMgASgPQokBwkiFAQqCAQoMc2ZpeGVkMzIubHRlGnIhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKIBwoCZ3QYBCABKA9C+QbCSPUGCncKC3NmaXhlZDMyLmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqwAQoOc2ZpeGVkMzIuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrgBChhzZml4ZWQzMi5ndF9sdF9leGNsdXNpdmUamwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrAAQoPc2ZpeGVkMzIuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrIAQoZc2ZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES1AcKA2d0ZRgFIAEoD0LEB8JIwAcKhQEKDHNmaXhlZDMyLmd0ZRp1IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCr8BCg9zZml4ZWQzMi5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxwEKGXNmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUaqQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs8BChBzZml4ZWQzMi5ndGVfbHRlGroBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtcBChpzZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ8CgJpbhgGIAMoD0JwwkhtCmsKC3NmaXhlZDMyLmluGlwhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJzCgZub3RfaW4YByADKA9CY8JIYApeCg9zZml4ZWQzMi5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygPQh3CSBoKGAoQc2ZpeGVkMzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i5RQKDVNGaXhlZDY0UnVsZXMSgAEKBWNvbnN0GAEgASgQQnHCSG4KbAoOc2ZpeGVkNjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKHAQoCbHQYAiABKBBCecJIdgp0CgtzZml4ZWQ2NC5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKZAQoDbHRlGAMgASgQQokBwkiFAQqCAQoMc2ZpeGVkNjQubHRlGnIhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKIBwoCZ3QYBCABKBBC+QbCSPUGCncKC3NmaXhlZDY0Lmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqwAQoOc2ZpeGVkNjQuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrgBChhzZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUamwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrAAQoPc2ZpeGVkNjQuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrIAQoZc2ZpeGVkNjQuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES1AcKA2d0ZRgFIAEoEELEB8JIwAcKhQEKDHNmaXhlZDY0Lmd0ZRp1IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCr8BCg9zZml4ZWQ2NC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxwEKGXNmaXhlZDY0Lmd0ZV9sdF9leGNsdXNpdmUaqQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs8BChBzZml4ZWQ2NC5ndGVfbHRlGroBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtcBChpzZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ8CgJpbhgGIAMoEEJwwkhtCmsKC3NmaXhlZDY0LmluGlwhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJzCgZub3RfaW4YByADKBBCY8JIYApeCg9zZml4ZWQ2NC5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygQQh3CSBoKGAoQc2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwAEKCUJvb2xSdWxlcxJ8CgVjb25zdBgBIAEoCEJtwkhqCmgKCmJvb2wuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIqCgdleGFtcGxlGAIgAygIQhnCSBYKFAoMYm9vbC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIi6jwKC1N0cmluZ1J1bGVzEoABCgVjb25zdBgBIAEoCUJxwkhuCmwKDHN0cmluZy5jb25zdBpcdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCBgJXNgJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycScQoDbGVuGBMgASgEQmTCSGEKXwoKc3RyaW5nLmxlbhpRdWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ211c3QgYmUgJXMgY2hhcmFjdGVycycuZm9ybWF0KFtydWxlcy5sZW5dKSA6ICcnEokBCgdtaW5fbGVuGAIgASgEQnjCSHUKcwoOc3RyaW5nLm1pbl9sZW4aYXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2xlbiA/ICdtdXN0IGJlIGF0IGxlYXN0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSiAEKB21heF9sZW4YAyABKARCd8JIdApyCg5zdHJpbmcubWF4X2xlbhpgdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfbGVuID8gJ211c3QgYmUgYXQgbW9zdCAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEosBCglsZW5fYnl0ZXMYFCABKARCeMJIdQpzChBzdHJpbmcubGVuX2J5dGVzGl91aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgIT0gcnVsZXMubGVuX2J5dGVzID8gJ211c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuX2J5dGVzXSkgOiAnJxKUAQoJbWluX2J5dGVzGAQgASgEQoABwkh9CnsKEHN0cmluZy5taW5fYnl0ZXMaZ3VpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9ieXRlcyA/ICdtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9ieXRlc10pIDogJycSkgEKCW1heF9ieXRlcxgFIAEoBEJ/wkh8CnoKEHN0cmluZy5tYXhfYnl0ZXMaZnVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA+IHJ1bGVzLm1heF9ieXRlcyA/ICdtdXN0IGJlIGF0IG1vc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWF4X2J5dGVzXSkgOiAnJxKHAQoHcGF0dGVybhgGIAEoCUJ2wkhzCnEKDnN0cmluZy5wYXR0ZXJuGl8hdGhpcy5tYXRjaGVzKHJ1bGVzLnBhdHRlcm4pID8gJ2RvZXMgbm90IG1hdGNoIHJlZ2V4IHBhdHRlcm4gYCVzYCcuZm9ybWF0KFtydWxlcy5wYXR0ZXJuXSkgOiAnJxJ+CgZwcmVmaXgYByABKAlCbsJIawppCg1zdHJpbmcucHJlZml4GlghdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAnZG9lcyBub3QgaGF2ZSBwcmVmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEnwKBnN1ZmZpeBgIIAEoCUJswkhpCmcKDXN0cmluZy5zdWZmaXgaViF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAnZG9lcyBub3QgaGF2ZSBzdWZmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEooBCghjb250YWlucxgJIAEoCUJ4wkh1CnMKD3N0cmluZy5jb250YWlucxpgIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ2RvZXMgbm90IGNvbnRhaW4gc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpEBCgxub3RfY29udGFpbnMYFyABKAlCe8JIeAp2ChNzdHJpbmcubm90X2NvbnRhaW5zGl90aGlzLmNvbnRhaW5zKHJ1bGVzLm5vdF9jb250YWlucykgPyAnY29udGFpbnMgc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMubm90X2NvbnRhaW5zXSkgOiAnJxJ6CgJpbhgKIAMoCUJuwkhrCmkKCXN0cmluZy5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAsgAygJQmHCSF4KXAoNc3RyaW5nLm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEtkBCgVlbWFpbBgMIAEoCELHAcJIwwEKWwoMc3RyaW5nLmVtYWlsEh1tdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcxosIXJ1bGVzLmVtYWlsIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0VtYWlsKCkKZAoSc3RyaW5nLmVtYWlsX2VtcHR5EjJ2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcxoaIXJ1bGVzLmVtYWlsIHx8IHRoaXMgIT0gJydIABLhAQoIaG9zdG5hbWUYDSABKAhCzAHCSMgBCl8KD3N0cmluZy5ob3N0bmFtZRIYbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lGjIhcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKQplChVzdHJpbmcuaG9zdG5hbWVfZW1wdHkSLXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0bmFtZRodIXJ1bGVzLmhvc3RuYW1lIHx8IHRoaXMgIT0gJydIABLBAQoCaXAYDiABKAhCsgHCSK4BCk8KCXN0cmluZy5pcBIabXVzdCBiZSBhIHZhbGlkIElQIGFkZHJlc3MaJiFydWxlcy5pcCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCgpClsKD3N0cmluZy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaFyFydWxlcy5pcCB8fCB0aGlzICE9ICcnSAAS0AEKBGlwdjQYDyABKAhCvwHCSLsBClYKC3N0cmluZy5pcHY0EhxtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzGikhcnVsZXMuaXB2NCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg0KQphChFzdHJpbmcuaXB2NF9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcxoZIXJ1bGVzLmlwdjQgfHwgdGhpcyAhPSAnJ0gAEtABCgRpcHY2GBAgASgIQr8Bwki7AQpWCgtzdHJpbmcuaXB2NhIcbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxopIXJ1bGVzLmlwdjYgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXAoNikKYQoRc3RyaW5nLmlwdjZfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3MaGSFydWxlcy5pcHY2IHx8IHRoaXMgIT0gJydIABK5AQoDdXJpGBEgASgIQqkBwkilAQpLCgpzdHJpbmcudXJpEhNtdXN0IGJlIGEgdmFsaWQgVVJJGighcnVsZXMudXJpIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc1VyaSgpClYKEHN0cmluZy51cmlfZW1wdHkSKHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVUkkaGCFydWxlcy51cmkgfHwgdGhpcyAhPSAnJ0gAEmoKB3VyaV9yZWYYEiABKAhCV8JIVApSCg5zdHJpbmcudXJpX3JlZhIdbXVzdCBiZSBhIHZhbGlkIFVSSSBSZWZlcmVuY2UaISFydWxlcy51cmlfcmVmIHx8IHRoaXMuaXNVcmlSZWYoKUgAEokCCgdhZGRyZXNzGBUgASgIQvUBwkjxAQp7Cg5zdHJpbmcuYWRkcmVzcxInbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGkAhcnVsZXMuYWRkcmVzcyB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpIHx8IHRoaXMuaXNJcCgpCnIKFHN0cmluZy5hZGRyZXNzX2VtcHR5Ejx2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgaG9zdG5hbWUsIG9yIGlwIGFkZHJlc3MaHCFydWxlcy5hZGRyZXNzIHx8IHRoaXMgIT0gJydIABKSAgoEdXVpZBgWIAEoCEKBAsJI/QEKnwEKC3N0cmluZy51dWlkEhRtdXN0IGJlIGEgdmFsaWQgVVVJRBp6IXJ1bGVzLnV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykKWQoRc3RyaW5nLnV1aWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVVUlEGhkhcnVsZXMudXVpZCB8fCB0aGlzICE9ICcnSAAS6gEKBXR1dWlkGCEgASgIQtgBwkjUAQptCgxzdHJpbmcudHV1aWQSHG11c3QgYmUgYSB2YWxpZCB0cmltbWVkIFVVSUQaPyFydWxlcy50dXVpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezMyfSQnKQpjChJzdHJpbmcudHV1aWRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCB0cmltbWVkIFVVSUQaGiFydWxlcy50dXVpZCB8fCB0aGlzICE9ICcnSAASkAIKEWlwX3dpdGhfcHJlZml4bGVuGBogASgIQvIBwkjuAQpyChhzdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW4SGW11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaOyFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCgpCngKHnN0cmluZy5pcF93aXRoX3ByZWZpeGxlbl9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBomIXJ1bGVzLmlwX3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLJAgoTaXB2NF93aXRoX3ByZWZpeGxlbhgbIAEoCEKpAsJIpQIKjQEKGnN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuEi9tdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCkKkgEKIHN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEskCChNpcHY2X3dpdGhfcHJlZml4bGVuGBwgASgIQqkCwkilAgqNAQoac3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW4SL211c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGj4hcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2KQqSAQogc3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW5fZW1wdHkSRHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGighcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAAS7AEKCWlwX3ByZWZpeBgdIAEoCELWAcJI0gEKZgoQc3RyaW5nLmlwX3ByZWZpeBIZbXVzdCBiZSBhIHZhbGlkIElQIHByZWZpeBo3IXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCh0cnVlKQpoChZzdHJpbmcuaXBfcHJlZml4X2VtcHR5Ei52YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgcHJlZml4Gh4hcnVsZXMuaXBfcHJlZml4IHx8IHRoaXMgIT0gJydIABL9AQoLaXB2NF9wcmVmaXgYHiABKAhC5QHCSOEBCm8KEnN0cmluZy5pcHY0X3ByZWZpeBIbbXVzdCBiZSBhIHZhbGlkIElQdjQgcHJlZml4GjwhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCwgdHJ1ZSkKbgoYc3RyaW5nLmlwdjRfcHJlZml4X2VtcHR5EjB2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBwcmVmaXgaICFydWxlcy5pcHY0X3ByZWZpeCB8fCB0aGlzICE9ICcnSAAS/QEKC2lwdjZfcHJlZml4GB8gASgIQuUBwkjhAQpvChJzdHJpbmcuaXB2Nl9wcmVmaXgSG211c3QgYmUgYSB2YWxpZCBJUHY2IHByZWZpeBo8IXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDYsIHRydWUpCm4KGHN0cmluZy5pcHY2X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgcHJlZml4GiAhcnVsZXMuaXB2Nl9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAEq8CCg1ob3N0X2FuZF9wb3J0GCAgASgIQpUCwkiRAgqTAQoUc3RyaW5nLmhvc3RfYW5kX3BvcnQSO211c3QgYmUgYSB2YWxpZCBob3N0IChob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBhbmQgcG9ydCBwYWlyGj4hcnVsZXMuaG9zdF9hbmRfcG9ydCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0QW5kUG9ydCh0cnVlKQp5ChpzdHJpbmcuaG9zdF9hbmRfcG9ydF9lbXB0eRI3dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3QgYW5kIHBvcnQgcGFpchoiIXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyAhPSAnJ0gAEu4BCgR1bGlkGCMgASgIQt0BwkjZAQp8CgtzdHJpbmcudWxpZBIUbXVzdCBiZSBhIHZhbGlkIFVMSUQaVyFydWxlcy51bGlkIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQnKQpZChFzdHJpbmcudWxpZF9lbXB0eRIpdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIFVMSUQaGSFydWxlcy51bGlkIHx8IHRoaXMgIT0gJydIABLUAgoMcHJvdG9idWZfZnFuGCUgASgIQrsCwki3AgqvAQoTc3RyaW5nLnByb3RvYnVmX2ZxbhItbXVzdCBiZSBhIHZhbGlkIGZ1bGx5LXF1YWxpZmllZCBQcm90b2J1ZiBuYW1lGmkhcnVsZXMucHJvdG9idWZfZnFuIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeW0EtWmEtel9dW0EtWmEtel8wLTldKihcXC5bQS1aYS16X11bQS1aYS16XzAtOV0qKSokJykKggEKGXN0cmluZy5wcm90b2J1Zl9mcW5fZW1wdHkSQnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBmdWxseS1xdWFsaWZpZWQgUHJvdG9idWYgbmFtZRohIXJ1bGVzLnByb3RvYnVmX2ZxbiB8fCB0aGlzICE9ICcnSAASkQMKEHByb3RvYnVmX2RvdF9mcW4YJiABKAhC9ALCSPACCs0BChdzdHJpbmcucHJvdG9idWZfZG90X2ZxbhJAbXVzdCBiZSBhIHZhbGlkIGZ1bGx5LXF1YWxpZmllZCBQcm90b2J1ZiBuYW1lIHdpdGggYSBsZWFkaW5nIGRvdBpwIXJ1bGVzLnByb3RvYnVmX2RvdF9mcW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15cXC5bQS1aYS16X11bQS1aYS16XzAtOV0qKFxcLltBLVphLXpfXVtBLVphLXpfMC05XSopKiQnKQqdAQodc3RyaW5nLnByb3RvYnVmX2RvdF9mcW5fZW1wdHkSVXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBmdWxseS1xdWFsaWZpZWQgUHJvdG9idWYgbmFtZSB3aXRoIGEgbGVhZGluZyBkb3QaJSFydWxlcy5wcm90b2J1Zl9kb3RfZnFuIHx8IHRoaXMgIT0gJydIABKcBQoQd2VsbF9rbm93bl9yZWdleBgYIAEoDjIYLmJ1Zi52YWxpZGF0ZS5Lbm93blJlZ2V4QuUEwkjhBArqAQojc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWUSIG11c3QgYmUgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGqABcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeOj9bMC05YS16QS1aISMkJSZcJyorLS5eX3x+XHg2MF0rJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKyQnKQqNAQopc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWVfZW1wdHkSNXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGilydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDEgfHwgdGhpcyAhPSAnJwrhAQokc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX3ZhbHVlEiFtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgdmFsdWUalQFydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDIgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeW15cdTAwMDAtXHUwMDA4XHUwMDBBLVx1MDAxRlx1MDA3Rl0qJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKiQnKUgAEg4KBnN0cmljdBgZIAEoCBIsCgdleGFtcGxlGCIgAygJQhvCSBgKFgoOc3RyaW5nLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duIt0RCgpCeXRlc1J1bGVzEnoKBWNvbnN0GAEgASgMQmvCSGgKZgoLYnl0ZXMuY29uc3QaV3RoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgYmUgJXgnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxJrCgNsZW4YDSABKARCXsJIWwpZCglieXRlcy5sZW4aTHVpbnQodGhpcy5zaXplKCkpICE9IHJ1bGVzLmxlbiA/ICdtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSgwEKB21pbl9sZW4YAiABKARCcsJIbwptCg1ieXRlcy5taW5fbGVuGlx1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAnbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKCAQoHbWF4X2xlbhgDIAEoBEJxwkhuCmwKDWJ5dGVzLm1heF9sZW4aW3VpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICdtdXN0IGJlIGF0IG1vc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSigEKB3BhdHRlcm4YBCABKAlCecJIdgp0Cg1ieXRlcy5wYXR0ZXJuGmMhc3RyaW5nKHRoaXMpLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAnbXVzdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycSewoGcHJlZml4GAUgASgMQmvCSGgKZgoMYnl0ZXMucHJlZml4GlYhdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAnZG9lcyBub3QgaGF2ZSBwcmVmaXggJXgnLmZvcm1hdChbcnVsZXMucHJlZml4XSkgOiAnJxJ5CgZzdWZmaXgYBiABKAxCacJIZgpkCgxieXRlcy5zdWZmaXgaVCF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAnZG9lcyBub3QgaGF2ZSBzdWZmaXggJXgnLmZvcm1hdChbcnVsZXMuc3VmZml4XSkgOiAnJxJ9Cghjb250YWlucxgHIAEoDEJrwkhoCmYKDmJ5dGVzLmNvbnRhaW5zGlQhdGhpcy5jb250YWlucyhydWxlcy5jb250YWlucykgPyAnZG9lcyBub3QgY29udGFpbiAleCcuZm9ybWF0KFtydWxlcy5jb250YWluc10pIDogJycSoQEKAmluGAggAygMQpQBwkiQAQqNAQoIYnl0ZXMuaW4agAFnZXRGaWVsZChydWxlcywgJ2luJykuc2l6ZSgpID4gMCAmJiAhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJwCgZub3RfaW4YCSADKAxCYMJIXQpbCgxieXRlcy5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxLlAQoCaXAYCiABKAhC1gHCSNIBCm4KCGJ5dGVzLmlwEhptdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxpGIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNCB8fCB0aGlzLnNpemUoKSA9PSAxNgpgCg5ieXRlcy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaHSFydWxlcy5pcCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS3gEKBGlwdjQYCyABKAhCzQHCSMkBCl8KCmJ5dGVzLmlwdjQSHG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaMyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNApmChBieXRlcy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGh8hcnVsZXMuaXB2NCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS3wEKBGlwdjYYDCABKAhCzgHCSMoBCmAKCmJ5dGVzLmlwdjYSHG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3MaNCFydWxlcy5pcHY2IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gMTYKZgoQYnl0ZXMuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxofIXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgIT0gMEgAEs8BCgR1dWlkGA8gASgIQr4Bwki6AQpYCgpieXRlcy51dWlkEhRtdXN0IGJlIGEgdmFsaWQgVVVJRBo0IXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpeChBieXRlcy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBofIXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgIT0gMEgAEisKB2V4YW1wbGUYDiADKAxCGsJIFwoVCg1ieXRlcy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLBAwoJRW51bVJ1bGVzEnwKBWNvbnN0GAEgASgFQm3CSGoKaAoKZW51bS5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEhQKDGRlZmluZWRfb25seRgCIAEoCBJ4CgJpbhgDIAMoBUJswkhpCmcKB2VudW0uaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEm8KBm5vdF9pbhgEIAMoBUJfwkhcCloKC2VudW0ubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKgoHZXhhbXBsZRgFIAMoBUIZwkgWChQKDGVudW0uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIu0DCg1SZXBlYXRlZFJ1bGVzEpYBCgltaW5faXRlbXMYASABKARCggHCSH8KfQoScmVwZWF0ZWQubWluX2l0ZW1zGmd1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9pdGVtcyA/ICdtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJWQgaXRlbShzKScuZm9ybWF0KFtydWxlcy5taW5faXRlbXNdKSA6ICcnEpwBCgltYXhfaXRlbXMYAiABKARCiAHCSIQBCoEBChJyZXBlYXRlZC5tYXhfaXRlbXMaa3VpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2l0ZW1zID8gJ211c3QgY29udGFpbiBubyBtb3JlIHRoYW4gJXMgaXRlbShzKScuZm9ybWF0KFtydWxlcy5tYXhfaXRlbXNdKSA6ICcnEnAKBnVuaXF1ZRgDIAEoCEJgwkhdClsKD3JlcGVhdGVkLnVuaXF1ZRIocmVwZWF0ZWQgdmFsdWUgbXVzdCBjb250YWluIHVuaXF1ZSBpdGVtcxoeIXJ1bGVzLnVuaXF1ZSB8fCB0aGlzLnVuaXF1ZSgpEicKBWl0ZW1zGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiKKAwoITWFwUnVsZXMSjwEKCW1pbl9wYWlycxgBIAEoBEJ8wkh5CncKDW1hcC5taW5fcGFpcnMaZnVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX3BhaXJzID8gJ21hcCBtdXN0IGJlIGF0IGxlYXN0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWluX3BhaXJzXSkgOiAnJxKOAQoJbWF4X3BhaXJzGAIgASgEQnvCSHgKdgoNbWFwLm1heF9wYWlycxpldWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbW9zdCAlZCBlbnRyaWVzJy5mb3JtYXQoW3J1bGVzLm1heF9wYWlyc10pIDogJycSJgoEa2V5cxgEIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzEigKBnZhbHVlcxgFIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzKgkI6AcQgICAgAIiJgoIQW55UnVsZXMSCgoCaW4YAiADKAkSDgoGbm90X2luGAMgAygJIr8WCg1EdXJhdGlvblJ1bGVzEpsBCgVjb25zdBgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJxwkhuCmwKDmR1cmF0aW9uLmNvbnN0Glp0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICdtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSogEKAmx0GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnnCSHYKdAoLZHVyYXRpb24ubHQaZSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAAStAEKA2x0ZRgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkKJAcJIhQEKggEKDGR1cmF0aW9uLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASowcKAmd0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQvkGwkj1Bgp3CgtkdXJhdGlvbi5ndBpoIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKsAEKDmR1cmF0aW9uLmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq4AQoYZHVyYXRpb24uZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKwAEKD2R1cmF0aW9uLmd0X2x0ZRqsAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKyAEKGWR1cmF0aW9uLmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu8HCgNndGUYBiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CxAfCSMAHCoUBCgxkdXJhdGlvbi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq/AQoPZHVyYXRpb24uZ3RlX2x0GqsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCscBChlkdXJhdGlvbi5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrPAQoQZHVyYXRpb24uZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrXAQoaZHVyYXRpb24uZ3RlX2x0ZV9leGNsdXNpdmUauAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESlwEKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnDCSG0KawoLZHVyYXRpb24uaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEo4BCgZub3RfaW4YCCADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CY8JIYApeCg9kdXJhdGlvbi5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxJJCgdleGFtcGxlGAkgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQh3CSBoKGAoQZHVyYXRpb24uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i6wUKDkZpZWxkTWFza1J1bGVzErkBCgVjb25zdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCjQHCSIkBCoYBChBmaWVsZF9tYXNrLmNvbnN0GnJ0aGlzLnBhdGhzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRocyA/ICdtdXN0IGVxdWFsIHBhdGhzICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRoc10pIDogJycS0wEKAmluGAIgAygJQsYBwkjCAQq/AQoNZmllbGRfbWFzay5pbhqtASF0aGlzLnBhdGhzLmFsbChwLCBwIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ2luJykuZXhpc3RzKGYsIHAuc3RhcnRzV2l0aChmKycuJykpKSA/ICdtdXN0IG9ubHkgY29udGFpbiBwYXRocyBpbiAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEu0BCgZub3RfaW4YAyADKAlC3AHCSNgBCtUBChFmaWVsZF9tYXNrLm5vdF9pbhq/ASF0aGlzLnBhdGhzLmFsbChwLCAhKHAgaW4gZ2V0RmllbGQocnVsZXMsICdub3RfaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ25vdF9pbicpLmV4aXN0cyhmLCBwLnN0YXJ0c1dpdGgoZisnLicpKSkpID8gJ211c3Qgbm90IGNvbnRhaW4gYW55IHBhdGhzIGluICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnbm90X2luJyldKSA6ICcnEkwKB2V4YW1wbGUYBCADKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQh/CSBwKGgoSZmllbGRfbWFzay5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIisBcKDlRpbWVzdGFtcFJ1bGVzEp0BCgVjb25zdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCcsJIbwptCg90aW1lc3RhbXAuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKkAQoCbHQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQnrCSHcKdQoMdGltZXN0YW1wLmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAErYBCgNsdGUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQooBwkiGAQqDAQoNdGltZXN0YW1wLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASZgoGbHRfbm93GAcgASgIQlTCSFEKTwoQdGltZXN0YW1wLmx0X25vdxo7KHJ1bGVzLmx0X25vdyAmJiB0aGlzID4gbm93KSA/ICdtdXN0IGJlIGxlc3MgdGhhbiBub3cnIDogJydIABKpBwoCZ3QYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQv4Gwkj6Bgp4Cgx0aW1lc3RhbXAuZ3QaaCFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrEBCg90aW1lc3RhbXAuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrkBChl0aW1lc3RhbXAuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKwQEKEHRpbWVzdGFtcC5ndF9sdGUarAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCskBChp0aW1lc3RhbXAuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES9QcKA2d0ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCyQfCSMUHCoYBCg10aW1lc3RhbXAuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwAEKEHRpbWVzdGFtcC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKyAEKGnRpbWVzdGFtcC5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrQAQoRdGltZXN0YW1wLmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2AEKG3RpbWVzdGFtcC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJpCgZndF9ub3cYCCABKAhCV8JIVApSChB0aW1lc3RhbXAuZ3Rfbm93Gj4ocnVsZXMuZ3Rfbm93ICYmIHRoaXMgPCBub3cpID8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG5vdycgOiAnJ0gBErEBCgZ3aXRoaW4YCSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25ChQHCSIEBCn8KEHRpbWVzdGFtcC53aXRoaW4aa3RoaXMgPCBub3ctcnVsZXMud2l0aGluIHx8IHRoaXMgPiBub3crcnVsZXMud2l0aGluID8gJ211c3QgYmUgd2l0aGluICVzIG9mIG5vdycuZm9ybWF0KFtydWxlcy53aXRoaW5dKSA6ICcnEksKB2V4YW1wbGUYCiADKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQh7CSBsKGQoRdGltZXN0YW1wLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIjkKClZpb2xhdGlvbnMSKwoKdmlvbGF0aW9ucxgBIAMoCzIXLmJ1Zi52YWxpZGF0ZS5WaW9sYXRpb24inwEKCVZpb2xhdGlvbhImCgVmaWVsZBgFIAEoCzIXLmJ1Zi52YWxpZGF0ZS5GaWVsZFBhdGgSJQoEcnVsZRgGIAEoCzIXLmJ1Zi52YWxpZGF0ZS5GaWVsZFBhdGgSDwoHcnVsZV9pZBgCIAEoCRIPCgdtZXNzYWdlGAMgASgJEg8KB2Zvcl9rZXkYBCABKAhKBAgBEAJSCmZpZWxkX3BhdGgiPQoJRmllbGRQYXRoEjAKCGVsZW1lbnRzGAEgAygLMh4uYnVmLnZhbGlkYXRlLkZpZWxkUGF0aEVsZW1lbnQi6QIKEEZpZWxkUGF0aEVsZW1lbnQSFAoMZmllbGRfbnVtYmVyGAEgASgFEhIKCmZpZWxkX25hbWUYAiABKAkSPgoKZmllbGRfdHlwZRgDIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlEjwKCGtleV90eXBlGAQgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSPgoKdmFsdWVfdHlwZRgFIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlEg8KBWluZGV4GAYgASgESAASEgoIYm9vbF9rZXkYByABKAhIABIRCgdpbnRfa2V5GAggASgDSAASEgoIdWludF9rZXkYCSABKARIABIUCgpzdHJpbmdfa2V5GAogASgJSABCCwoJc3Vic2NyaXB0KqEBCgZJZ25vcmUSFgoSSUdOT1JFX1VOU1BFQ0lGSUVEEAASGAoUSUdOT1JFX0lGX1pFUk9fVkFMVUUQARIRCg1JR05PUkVfQUxXQVlTEAMiBAgCEAIqDElHTk9SRV9FTVBUWSoOSUdOT1JFX0RFRkFVTFQqF0lHTk9SRV9JRl9ERUZBVUxUX1ZBTFVFKhVJR05PUkVfSUZfVU5QT1BVTEFURUQqbgoKS25vd25SZWdleBIbChdLTk9XTl9SRUdFWF9VTlNQRUNJRklFRBAAEiAKHEtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX05BTUUQARIhCh1LTk9XTl9SRUdFWF9IVFRQX0hFQURFUl9WQUxVRRACOlYKB21lc3NhZ2USHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYhwkgASgLMhouYnVmLnZhbGlkYXRlLk1lc3NhZ2VSdWxlc1IHbWVzc2FnZTpOCgVvbmVvZhIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMYhwkgASgLMhguYnVmLnZhbGlkYXRlLk9uZW9mUnVsZXNSBW9uZW9mOk4KBWZpZWxkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiHCSABKAsyGC5idWYudmFsaWRhdGUuRmllbGRSdWxlc1IFZmllbGQ6XQoKcHJlZGVmaW5lZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYiAkgASgLMh0uYnVmLnZhbGlkYXRlLlByZWRlZmluZWRSdWxlc1IKcHJlZGVmaW5lZEJuChJidWlsZC5idWYudmFsaWRhdGVCDVZhbGlkYXRlUHJvdG9QAVpHYnVmLmJ1aWxkL2dlbi9nby9idWZidWlsZC9wcm90b3ZhbGlkYXRlL3Byb3RvY29sYnVmZmVycy9nby9idWYvdmFsaWRhdGU", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_field_mask, file_google_protobuf_timestamp]); /** * `Rule` represents a validation rule written in the Common Expression diff --git a/gen/ts/google/api/annotations_pb.ts b/gen/ts/google/api/annotations_pb.ts index d4848e8a..adc08155 100644 --- a/gen/ts/google/api/annotations_pb.ts +++ b/gen/ts/google/api/annotations_pb.ts @@ -27,7 +27,7 @@ import { file_google_protobuf_descriptor } from "@bufbuild/protobuf/wkt"; * Describes the file google/api/annotations.proto. */ export const file_google_api_annotations: GenFile = /*@__PURE__*/ - fileDesc("Chxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvEgpnb29nbGUuYXBpOksKBGh0dHASHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiwyrwiIAEoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBGh0dHBCrgEKDmNvbS5nb29nbGUuYXBpQhBBbm5vdGF0aW9uc1Byb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25zogIDR0FYqgIKR29vZ2xlLkFwacoCCkdvb2dsZVxBcGniAhZHb29nbGVcQXBpXEdQQk1ldGFkYXRh6gILR29vZ2xlOjpBcGliBnByb3RvMw", [file_google_api_http, file_google_protobuf_descriptor]); + fileDesc("Chxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvEgpnb29nbGUuYXBpOksKBGh0dHASHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiwyrwiIAEoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBGh0dHBCbgoOY29tLmdvb2dsZS5hcGlCEEFubm90YXRpb25zUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnOiAgRHQVBJYgZwcm90bzM", [file_google_api_http, file_google_protobuf_descriptor]); /** * See `HttpRule`. diff --git a/gen/ts/google/api/http_pb.ts b/gen/ts/google/api/http_pb.ts index b86a9f83..cffa8b0e 100644 --- a/gen/ts/google/api/http_pb.ts +++ b/gen/ts/google/api/http_pb.ts @@ -24,7 +24,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file google/api/http.proto. */ export const file_google_api_http: GenFile = /*@__PURE__*/ - fileDesc("ChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkiVAoESHR0cBIjCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGUSJwofZnVsbHlfZGVjb2RlX3Jlc2VydmVkX2V4cGFuc2lvbhgCIAEoCCKBAgoISHR0cFJ1bGUSEAoIc2VsZWN0b3IYASABKAkSDQoDZ2V0GAIgASgJSAASDQoDcHV0GAMgASgJSAASDgoEcG9zdBgEIAEoCUgAEhAKBmRlbGV0ZRgFIAEoCUgAEg8KBXBhdGNoGAYgASgJSAASLwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAEgwKBGJvZHkYByABKAkSFQoNcmVzcG9uc2VfYm9keRgMIAEoCRIxChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZUIJCgdwYXR0ZXJuIi8KEUN1c3RvbUh0dHBQYXR0ZXJuEgwKBGtpbmQYASABKAkSDAoEcGF0aBgCIAEoCUKnAQoOY29tLmdvb2dsZS5hcGlCCUh0dHBQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICA0dBWKoCCkdvb2dsZS5BcGnKAgpHb29nbGVcQXBp4gIWR29vZ2xlXEFwaVxHUEJNZXRhZGF0YeoCC0dvb2dsZTo6QXBpYgZwcm90bzM"); + fileDesc("ChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkiVAoESHR0cBIjCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGUSJwofZnVsbHlfZGVjb2RlX3Jlc2VydmVkX2V4cGFuc2lvbhgCIAEoCCKBAgoISHR0cFJ1bGUSEAoIc2VsZWN0b3IYASABKAkSDQoDZ2V0GAIgASgJSAASDQoDcHV0GAMgASgJSAASDgoEcG9zdBgEIAEoCUgAEhAKBmRlbGV0ZRgFIAEoCUgAEg8KBXBhdGNoGAYgASgJSAASLwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAEgwKBGJvZHkYByABKAkSFQoNcmVzcG9uc2VfYm9keRgMIAEoCRIxChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZUIJCgdwYXR0ZXJuIi8KEUN1c3RvbUh0dHBQYXR0ZXJuEgwKBGtpbmQYASABKAkSDAoEcGF0aBgCIAEoCUJnCg5jb20uZ29vZ2xlLmFwaUIJSHR0cFByb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25zogIER0FQSWIGcHJvdG8z"); /** * Defines the HTTP configuration for an API service. It contains a list of diff --git a/proto/buf.gen.clients.yaml b/proto/buf.gen.clients.yaml index 7f9f1b16..c9e7bd4c 100644 --- a/proto/buf.gen.clients.yaml +++ b/proto/buf.gen.clients.yaml @@ -1,35 +1,18 @@ # Client SDK stub generation (separate from server codegen in buf.gen.yaml). -# Generated artifacts are vendored into the standalone SDK repos. -# Python -> gen/python (vendored into authorizer-python as authorizer/_grpc) -# Go -> gen/go-client (vendored into authorizer-go as internal/genpb) +# Go and Python stubs are NO LONGER generated here — they now live in dedicated, +# BSR-driven packages consumed as real versioned dependencies: +# Go -> github.com/authorizerdev/authorizer-proto-go +# Python -> authorizer-proto (PyPI) / authorizerdev/authorizer-proto-python +# Both regenerate themselves straight from buf.build/authorizerdev/authorizer, +# so there is no cross-repo copy step to keep in sync here anymore. +# +# Only the TypeScript message types remain vendored (authorizer-js speaks +# graphql/rest, not gRPC, and its REST/GraphQL surfaces are snake_case, so it +# keeps hand-typed transport but reuses these generated message shapes): +# TS -> gen/ts (vendored into authorizer-js) # Run from proto/: buf generate --template buf.gen.clients.yaml --include-imports version: v2 -managed: - enabled: true - disable: - - module: buf.build/bufbuild/protovalidate - file_option: go_package_prefix - - module: buf.build/googleapis/googleapis - file_option: go_package_prefix - override: - - file_option: go_package_prefix - value: github.com/authorizerdev/authorizer-go/internal/genpb plugins: - - remote: buf.build/protocolbuffers/python:v27.3 - out: ../gen/python - - remote: buf.build/grpc/python:v1.66.0 - out: ../gen/python - - remote: buf.build/protocolbuffers/go:v1.35.2 - out: ../gen/go-client - opt: paths=source_relative - - remote: buf.build/grpc/go:v1.5.1 - out: ../gen/go-client - opt: - - paths=source_relative - - require_unimplemented_servers=false - # TypeScript message types (protobuf-es) — vendored into authorizer-js for - # typed admin/auth request+response shapes. JS uses graphql/rest, so service - # clients are not generated; message types only. - remote: buf.build/bufbuild/es:v2.2.3 out: ../gen/ts opt: