Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
57014e39
Commit
57014e39
authored
Feb 01, 2025
by
johnnyjoy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: get user by username
parent
45c16f9d
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
514 additions
and
678 deletions
+514
-678
user_service.proto
proto/api/v1/user_service.proto
+10
-14
user_service.pb.go
proto/gen/api/v1/user_service.pb.go
+400
-450
user_service.pb.gw.go
proto/gen/api/v1/user_service.pb.gw.go
+50
-50
user_service_grpc.pb.go
proto/gen/api/v1/user_service_grpc.pb.go
+27
-27
apidocs.swagger.yaml
proto/gen/apidocs.swagger.yaml
+6
-16
resource_name.go
server/router/api/v1/resource_name.go
+0
-14
user_service.go
server/router/api/v1/user_service.go
+13
-91
UserProfile.tsx
web/src/pages/UserProfile.tsx
+2
-6
user.ts
web/src/store/v1/user.ts
+6
-10
No files found.
proto/api/v1/user_service.proto
View file @
57014e39
...
...
@@ -18,15 +18,16 @@ service UserService {
rpc
ListUsers
(
ListUsersRequest
)
returns
(
ListUsersResponse
)
{
option
(
google.api.http
)
=
{
get
:
"/api/v1/users"
};
}
// SearchUsers searches users by filter.
rpc
SearchUsers
(
SearchUsersRequest
)
returns
(
SearchUsersResponse
)
{
option
(
google.api.http
)
=
{
get
:
"/api/v1/users:search"
};
}
// GetUser gets a user by name.
rpc
GetUser
(
GetUserRequest
)
returns
(
User
)
{
option
(
google.api.http
)
=
{
get
:
"/api/v1/{name=users/*}"
};
option
(
google.api.method_signature
)
=
"name"
;
}
// GetUserByUsername gets a user by username.
rpc
GetUserByUsername
(
GetUserByUsernameRequest
)
returns
(
User
)
{
option
(
google.api.http
)
=
{
get
:
"/api/v1/users:username"
};
option
(
google.api.method_signature
)
=
"username"
;
}
// GetUserAvatarBinary gets the avatar of a user.
rpc
GetUserAvatarBinary
(
GetUserAvatarBinaryRequest
)
returns
(
google.api.HttpBody
)
{
option
(
google.api.http
)
=
{
get
:
"/file/{name=users/*}/avatar"
};
...
...
@@ -133,21 +134,16 @@ message ListUsersResponse {
repeated
User
users
=
1
;
}
message
SearchUsersRequest
{
// Filter is used to filter users returned in the list.
// Format: "username == 'frank'"
string
filter
=
1
;
}
message
SearchUsersResponse
{
repeated
User
users
=
1
;
}
message
GetUserRequest
{
// The name of the user.
string
name
=
1
;
}
message
GetUserByUsernameRequest
{
// The username of the user.
string
username
=
1
;
}
message
GetUserAvatarBinaryRequest
{
// The name of the user.
string
name
=
1
;
...
...
proto/gen/api/v1/user_service.pb.go
View file @
57014e39
...
...
@@ -284,29 +284,28 @@ func (x *ListUsersResponse) GetUsers() []*User {
return
nil
}
type
SearchUsers
Request
struct
{
type
GetUser
Request
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
// Filter is used to filter users returned in the list.
// Format: "username == 'frank'"
Filter
string
`protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"`
// The name of the user.
Name
string
`protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
}
func
(
x
*
SearchUsers
Request
)
Reset
()
{
*
x
=
SearchUsers
Request
{}
func
(
x
*
GetUser
Request
)
Reset
()
{
*
x
=
GetUser
Request
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
3
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
func
(
x
*
SearchUsers
Request
)
String
()
string
{
func
(
x
*
GetUser
Request
)
String
()
string
{
return
protoimpl
.
X
.
MessageStringOf
(
x
)
}
func
(
*
SearchUsers
Request
)
ProtoMessage
()
{}
func
(
*
GetUser
Request
)
ProtoMessage
()
{}
func
(
x
*
SearchUsers
Request
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
GetUser
Request
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
3
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
...
...
@@ -318,39 +317,40 @@ func (x *SearchUsersRequest) ProtoReflect() protoreflect.Message {
return
mi
.
MessageOf
(
x
)
}
// Deprecated: Use
SearchUsers
Request.ProtoReflect.Descriptor instead.
func
(
*
SearchUsers
Request
)
Descriptor
()
([]
byte
,
[]
int
)
{
// Deprecated: Use
GetUser
Request.ProtoReflect.Descriptor instead.
func
(
*
GetUser
Request
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
3
}
}
func
(
x
*
SearchUsersRequest
)
GetFilter
()
string
{
func
(
x
*
GetUserRequest
)
GetName
()
string
{
if
x
!=
nil
{
return
x
.
Filter
return
x
.
Name
}
return
""
}
type
SearchUsersResponse
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
Users
[]
*
User
`protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"`
type
GetUserByUsernameRequest
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
// The username of the user.
Username
string
`protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
}
func
(
x
*
SearchUsersResponse
)
Reset
()
{
*
x
=
SearchUsersResponse
{}
func
(
x
*
GetUserByUsernameRequest
)
Reset
()
{
*
x
=
GetUserByUsernameRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
4
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
func
(
x
*
SearchUsersResponse
)
String
()
string
{
func
(
x
*
GetUserByUsernameRequest
)
String
()
string
{
return
protoimpl
.
X
.
MessageStringOf
(
x
)
}
func
(
*
SearchUsersResponse
)
ProtoMessage
()
{}
func
(
*
GetUserByUsernameRequest
)
ProtoMessage
()
{}
func
(
x
*
SearchUsersResponse
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
GetUserByUsernameRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
4
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
...
...
@@ -362,59 +362,14 @@ func (x *SearchUsersResponse) ProtoReflect() protoreflect.Message {
return
mi
.
MessageOf
(
x
)
}
// Deprecated: Use
SearchUsersResponse
.ProtoReflect.Descriptor instead.
func
(
*
SearchUsersResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
// Deprecated: Use
GetUserByUsernameRequest
.ProtoReflect.Descriptor instead.
func
(
*
GetUserByUsernameRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
4
}
}
func
(
x
*
SearchUsersResponse
)
GetUsers
()
[]
*
User
{
if
x
!=
nil
{
return
x
.
Users
}
return
nil
}
type
GetUserRequest
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
// The name of the user.
Name
string
`protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
}
func
(
x
*
GetUserRequest
)
Reset
()
{
*
x
=
GetUserRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
5
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
func
(
x
*
GetUserRequest
)
String
()
string
{
return
protoimpl
.
X
.
MessageStringOf
(
x
)
}
func
(
*
GetUserRequest
)
ProtoMessage
()
{}
func
(
x
*
GetUserRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
5
]
func
(
x
*
GetUserByUsernameRequest
)
GetUsername
()
string
{
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 GetUserRequest.ProtoReflect.Descriptor instead.
func
(
*
GetUserRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
5
}
}
func
(
x
*
GetUserRequest
)
GetName
()
string
{
if
x
!=
nil
{
return
x
.
Name
return
x
.
Username
}
return
""
}
...
...
@@ -431,7 +386,7 @@ type GetUserAvatarBinaryRequest struct {
func
(
x
*
GetUserAvatarBinaryRequest
)
Reset
()
{
*
x
=
GetUserAvatarBinaryRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
6
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
5
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -443,7 +398,7 @@ func (x *GetUserAvatarBinaryRequest) String() string {
func
(
*
GetUserAvatarBinaryRequest
)
ProtoMessage
()
{}
func
(
x
*
GetUserAvatarBinaryRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
6
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
5
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -456,7 +411,7 @@ func (x *GetUserAvatarBinaryRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetUserAvatarBinaryRequest.ProtoReflect.Descriptor instead.
func
(
*
GetUserAvatarBinaryRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
6
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
5
}
}
func
(
x
*
GetUserAvatarBinaryRequest
)
GetName
()
string
{
...
...
@@ -482,7 +437,7 @@ type CreateUserRequest struct {
func
(
x
*
CreateUserRequest
)
Reset
()
{
*
x
=
CreateUserRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
7
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
6
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -494,7 +449,7 @@ func (x *CreateUserRequest) String() string {
func
(
*
CreateUserRequest
)
ProtoMessage
()
{}
func
(
x
*
CreateUserRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
7
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
6
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -507,7 +462,7 @@ func (x *CreateUserRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateUserRequest.ProtoReflect.Descriptor instead.
func
(
*
CreateUserRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
7
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
6
}
}
func
(
x
*
CreateUserRequest
)
GetUser
()
*
User
{
...
...
@@ -527,7 +482,7 @@ type UpdateUserRequest struct {
func
(
x
*
UpdateUserRequest
)
Reset
()
{
*
x
=
UpdateUserRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
8
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
7
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -539,7 +494,7 @@ func (x *UpdateUserRequest) String() string {
func
(
*
UpdateUserRequest
)
ProtoMessage
()
{}
func
(
x
*
UpdateUserRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
8
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
7
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -552,7 +507,7 @@ func (x *UpdateUserRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateUserRequest.ProtoReflect.Descriptor instead.
func
(
*
UpdateUserRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
8
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
7
}
}
func
(
x
*
UpdateUserRequest
)
GetUser
()
*
User
{
...
...
@@ -579,7 +534,7 @@ type DeleteUserRequest struct {
func
(
x
*
DeleteUserRequest
)
Reset
()
{
*
x
=
DeleteUserRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
9
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
8
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -591,7 +546,7 @@ func (x *DeleteUserRequest) String() string {
func
(
*
DeleteUserRequest
)
ProtoMessage
()
{}
func
(
x
*
DeleteUserRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
9
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
8
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -604,7 +559,7 @@ func (x *DeleteUserRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteUserRequest.ProtoReflect.Descriptor instead.
func
(
*
DeleteUserRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
9
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
8
}
}
func
(
x
*
DeleteUserRequest
)
GetName
()
string
{
...
...
@@ -632,7 +587,7 @@ type UserStats struct {
func
(
x
*
UserStats
)
Reset
()
{
*
x
=
UserStats
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
10
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
9
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -644,7 +599,7 @@ func (x *UserStats) String() string {
func
(
*
UserStats
)
ProtoMessage
()
{}
func
(
x
*
UserStats
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
10
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
9
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -657,7 +612,7 @@ func (x *UserStats) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserStats.ProtoReflect.Descriptor instead.
func
(
*
UserStats
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
10
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
9
}
}
func
(
x
*
UserStats
)
GetName
()
string
{
...
...
@@ -696,7 +651,7 @@ type ListAllUserStatsRequest struct {
func
(
x
*
ListAllUserStatsRequest
)
Reset
()
{
*
x
=
ListAllUserStatsRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
1
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
0
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -708,7 +663,7 @@ func (x *ListAllUserStatsRequest) String() string {
func
(
*
ListAllUserStatsRequest
)
ProtoMessage
()
{}
func
(
x
*
ListAllUserStatsRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
1
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
0
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -721,7 +676,7 @@ func (x *ListAllUserStatsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListAllUserStatsRequest.ProtoReflect.Descriptor instead.
func
(
*
ListAllUserStatsRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
1
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
0
}
}
type
ListAllUserStatsResponse
struct
{
...
...
@@ -733,7 +688,7 @@ type ListAllUserStatsResponse struct {
func
(
x
*
ListAllUserStatsResponse
)
Reset
()
{
*
x
=
ListAllUserStatsResponse
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
2
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
1
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -745,7 +700,7 @@ func (x *ListAllUserStatsResponse) String() string {
func
(
*
ListAllUserStatsResponse
)
ProtoMessage
()
{}
func
(
x
*
ListAllUserStatsResponse
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
2
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
1
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -758,7 +713,7 @@ func (x *ListAllUserStatsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListAllUserStatsResponse.ProtoReflect.Descriptor instead.
func
(
*
ListAllUserStatsResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
2
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
1
}
}
func
(
x
*
ListAllUserStatsResponse
)
GetUserStats
()
[]
*
UserStats
{
...
...
@@ -778,7 +733,7 @@ type GetUserStatsRequest struct {
func
(
x
*
GetUserStatsRequest
)
Reset
()
{
*
x
=
GetUserStatsRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
3
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
2
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -790,7 +745,7 @@ func (x *GetUserStatsRequest) String() string {
func
(
*
GetUserStatsRequest
)
ProtoMessage
()
{}
func
(
x
*
GetUserStatsRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
3
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
2
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -803,7 +758,7 @@ func (x *GetUserStatsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetUserStatsRequest.ProtoReflect.Descriptor instead.
func
(
*
GetUserStatsRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
3
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
2
}
}
func
(
x
*
GetUserStatsRequest
)
GetName
()
string
{
...
...
@@ -829,7 +784,7 @@ type UserSetting struct {
func
(
x
*
UserSetting
)
Reset
()
{
*
x
=
UserSetting
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
4
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
3
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -841,7 +796,7 @@ func (x *UserSetting) String() string {
func
(
*
UserSetting
)
ProtoMessage
()
{}
func
(
x
*
UserSetting
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
4
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
3
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -854,7 +809,7 @@ func (x *UserSetting) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserSetting.ProtoReflect.Descriptor instead.
func
(
*
UserSetting
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
4
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
3
}
}
func
(
x
*
UserSetting
)
GetName
()
string
{
...
...
@@ -895,7 +850,7 @@ type GetUserSettingRequest struct {
func
(
x
*
GetUserSettingRequest
)
Reset
()
{
*
x
=
GetUserSettingRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
5
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
4
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -907,7 +862,7 @@ func (x *GetUserSettingRequest) String() string {
func
(
*
GetUserSettingRequest
)
ProtoMessage
()
{}
func
(
x
*
GetUserSettingRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
5
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
4
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -920,7 +875,7 @@ func (x *GetUserSettingRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetUserSettingRequest.ProtoReflect.Descriptor instead.
func
(
*
GetUserSettingRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
5
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
4
}
}
func
(
x
*
GetUserSettingRequest
)
GetName
()
string
{
...
...
@@ -940,7 +895,7 @@ type UpdateUserSettingRequest struct {
func
(
x
*
UpdateUserSettingRequest
)
Reset
()
{
*
x
=
UpdateUserSettingRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
6
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
5
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -952,7 +907,7 @@ func (x *UpdateUserSettingRequest) String() string {
func
(
*
UpdateUserSettingRequest
)
ProtoMessage
()
{}
func
(
x
*
UpdateUserSettingRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
6
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
5
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -965,7 +920,7 @@ func (x *UpdateUserSettingRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateUserSettingRequest.ProtoReflect.Descriptor instead.
func
(
*
UpdateUserSettingRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
6
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
5
}
}
func
(
x
*
UpdateUserSettingRequest
)
GetSetting
()
*
UserSetting
{
...
...
@@ -994,7 +949,7 @@ type UserAccessToken struct {
func
(
x
*
UserAccessToken
)
Reset
()
{
*
x
=
UserAccessToken
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
7
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
6
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -1006,7 +961,7 @@ func (x *UserAccessToken) String() string {
func
(
*
UserAccessToken
)
ProtoMessage
()
{}
func
(
x
*
UserAccessToken
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
7
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
6
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -1019,7 +974,7 @@ func (x *UserAccessToken) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserAccessToken.ProtoReflect.Descriptor instead.
func
(
*
UserAccessToken
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
7
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
6
}
}
func
(
x
*
UserAccessToken
)
GetAccessToken
()
string
{
...
...
@@ -1060,7 +1015,7 @@ type ListUserAccessTokensRequest struct {
func
(
x
*
ListUserAccessTokensRequest
)
Reset
()
{
*
x
=
ListUserAccessTokensRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
8
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
7
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -1072,7 +1027,7 @@ func (x *ListUserAccessTokensRequest) String() string {
func
(
*
ListUserAccessTokensRequest
)
ProtoMessage
()
{}
func
(
x
*
ListUserAccessTokensRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
8
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
7
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -1085,7 +1040,7 @@ func (x *ListUserAccessTokensRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListUserAccessTokensRequest.ProtoReflect.Descriptor instead.
func
(
*
ListUserAccessTokensRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
8
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
7
}
}
func
(
x
*
ListUserAccessTokensRequest
)
GetName
()
string
{
...
...
@@ -1104,7 +1059,7 @@ type ListUserAccessTokensResponse struct {
func
(
x
*
ListUserAccessTokensResponse
)
Reset
()
{
*
x
=
ListUserAccessTokensResponse
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
9
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
8
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -1116,7 +1071,7 @@ func (x *ListUserAccessTokensResponse) String() string {
func
(
*
ListUserAccessTokensResponse
)
ProtoMessage
()
{}
func
(
x
*
ListUserAccessTokensResponse
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
9
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
8
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -1129,7 +1084,7 @@ func (x *ListUserAccessTokensResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListUserAccessTokensResponse.ProtoReflect.Descriptor instead.
func
(
*
ListUserAccessTokensResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
9
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
8
}
}
func
(
x
*
ListUserAccessTokensResponse
)
GetAccessTokens
()
[]
*
UserAccessToken
{
...
...
@@ -1151,7 +1106,7 @@ type CreateUserAccessTokenRequest struct {
func
(
x
*
CreateUserAccessTokenRequest
)
Reset
()
{
*
x
=
CreateUserAccessTokenRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
20
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
19
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -1163,7 +1118,7 @@ func (x *CreateUserAccessTokenRequest) String() string {
func
(
*
CreateUserAccessTokenRequest
)
ProtoMessage
()
{}
func
(
x
*
CreateUserAccessTokenRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
20
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
19
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -1176,7 +1131,7 @@ func (x *CreateUserAccessTokenRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateUserAccessTokenRequest.ProtoReflect.Descriptor instead.
func
(
*
CreateUserAccessTokenRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
20
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
19
}
}
func
(
x
*
CreateUserAccessTokenRequest
)
GetName
()
string
{
...
...
@@ -1212,7 +1167,7 @@ type DeleteUserAccessTokenRequest struct {
func
(
x
*
DeleteUserAccessTokenRequest
)
Reset
()
{
*
x
=
DeleteUserAccessTokenRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
2
1
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
2
0
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -1224,7 +1179,7 @@ func (x *DeleteUserAccessTokenRequest) String() string {
func
(
*
DeleteUserAccessTokenRequest
)
ProtoMessage
()
{}
func
(
x
*
DeleteUserAccessTokenRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
2
1
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
2
0
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -1237,7 +1192,7 @@ func (x *DeleteUserAccessTokenRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteUserAccessTokenRequest.ProtoReflect.Descriptor instead.
func
(
*
DeleteUserAccessTokenRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
2
1
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
2
0
}
}
func
(
x
*
DeleteUserAccessTokenRequest
)
GetName
()
string
{
...
...
@@ -1266,7 +1221,7 @@ type UserStats_MemoTypeStats struct {
func
(
x
*
UserStats_MemoTypeStats
)
Reset
()
{
*
x
=
UserStats_MemoTypeStats
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
2
3
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
2
2
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
...
...
@@ -1278,7 +1233,7 @@ func (x *UserStats_MemoTypeStats) String() string {
func
(
*
UserStats_MemoTypeStats
)
ProtoMessage
()
{}
func
(
x
*
UserStats_MemoTypeStats
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
2
3
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
2
2
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
...
...
@@ -1291,7 +1246,7 @@ func (x *UserStats_MemoTypeStats) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserStats_MemoTypeStats.ProtoReflect.Descriptor instead.
func
(
*
UserStats_MemoTypeStats
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
10
,
1
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
9
,
1
}
}
func
(
x
*
UserStats_MemoTypeStats
)
GetLinkCount
()
int32
{
...
...
@@ -1377,262 +1332,259 @@ var file_api_v1_user_service_proto_rawDesc = string([]byte{
0x0a
,
0x11
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x28
,
0x0a
,
0x05
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x05
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x22
,
0x2c
,
0x0a
,
0x12
,
0x53
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x16
,
0x0a
,
0x06
,
0x66
,
0x69
,
0x6c
,
0x74
,
0x65
,
0x72
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x06
,
0x66
,
0x69
,
0x6c
,
0x74
,
0x65
,
0x72
,
0x22
,
0x3f
,
0x0a
,
0x13
,
0x53
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x28
,
0x0a
,
0x05
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x05
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x22
,
0x24
,
0x0a
,
0x0e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x63
,
0x0a
,
0x1a
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x42
,
0x69
,
0x6e
,
0x61
,
0x72
,
0x79
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x05
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x22
,
0x24
,
0x0a
,
0x0e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x36
,
0x0a
,
0x18
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x42
,
0x79
,
0x55
,
0x73
,
0x65
,
0x72
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x1a
,
0x0a
,
0x08
,
0x75
,
0x73
,
0x65
,
0x72
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x08
,
0x75
,
0x73
,
0x65
,
0x72
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x63
,
0x0a
,
0x1a
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x42
,
0x69
,
0x6e
,
0x61
,
0x72
,
0x79
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x31
,
0x0a
,
0x09
,
0x68
,
0x74
,
0x74
,
0x70
,
0x5f
,
0x62
,
0x6f
,
0x64
,
0x79
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x14
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x48
,
0x74
,
0x74
,
0x70
,
0x42
,
0x6f
,
0x64
,
0x79
,
0x52
,
0x08
,
0x68
,
0x74
,
0x74
,
0x70
,
0x42
,
0x6f
,
0x64
,
0x79
,
0x22
,
0x3b
,
0x0a
,
0x11
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x26
,
0x0a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x22
,
0x7e
,
0x0a
,
0x11
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x2c
,
0x0a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x42
,
0x04
,
0xe2
,
0x41
,
0x01
,
0x02
,
0x52
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x12
,
0x3b
,
0x0a
,
0x0b
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
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
,
0x46
,
0x69
,
0x65
,
0x6c
,
0x64
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x52
,
0x0a
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x22
,
0x27
,
0x0a
,
0x11
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0xd1
,
0x03
,
0x0a
,
0x09
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x52
,
0x0a
,
0x17
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x5f
,
0x64
,
0x69
,
0x73
,
0x70
,
0x6c
,
0x61
,
0x79
,
0x5f
,
0x74
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x73
,
0x18
,
0x02
,
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
,
0x52
,
0x15
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x44
,
0x69
,
0x73
,
0x70
,
0x6c
,
0x61
,
0x79
,
0x54
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x73
,
0x12
,
0x4d
,
0x0a
,
0x0f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x5f
,
0x74
,
0x79
,
0x70
,
0x65
,
0x5f
,
0x73
,
0x74
,
0x61
,
0x74
,
0x73
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x25
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x2e
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x54
,
0x79
,
0x70
,
0x65
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x0d
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x54
,
0x79
,
0x70
,
0x65
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x42
,
0x0a
,
0x09
,
0x74
,
0x61
,
0x67
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x04
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x25
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x2e
,
0x54
,
0x61
,
0x67
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x45
,
0x6e
,
0x74
,
0x72
,
0x79
,
0x52
,
0x08
,
0x74
,
0x61
,
0x67
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x1a
,
0x3b
,
0x0a
,
0x0d
,
0x54
,
0x61
,
0x67
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x45
,
0x6e
,
0x74
,
0x72
,
0x79
,
0x12
,
0x10
,
0x0a
,
0x03
,
0x6b
,
0x65
,
0x79
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x03
,
0x6b
,
0x65
,
0x79
,
0x12
,
0x14
,
0x0a
,
0x05
,
0x76
,
0x61
,
0x6c
,
0x75
,
0x65
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x05
,
0x76
,
0x61
,
0x6c
,
0x75
,
0x65
,
0x3a
,
0x02
,
0x38
,
0x01
,
0x1a
,
0x8b
,
0x01
,
0x0a
,
0x0d
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x54
,
0x79
,
0x70
,
0x65
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x1d
,
0x0a
,
0x0a
,
0x6c
,
0x69
,
0x6e
,
0x6b
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x09
,
0x6c
,
0x69
,
0x6e
,
0x6b
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x12
,
0x1d
,
0x0a
,
0x0a
,
0x63
,
0x6f
,
0x64
,
0x65
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x09
,
0x63
,
0x6f
,
0x64
,
0x65
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x12
,
0x1d
,
0x0a
,
0x0a
,
0x74
,
0x6f
,
0x64
,
0x6f
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x09
,
0x74
,
0x6f
,
0x64
,
0x6f
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x12
,
0x1d
,
0x0a
,
0x0a
,
0x75
,
0x6e
,
0x64
,
0x6f
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x04
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x09
,
0x75
,
0x6e
,
0x64
,
0x6f
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x22
,
0x19
,
0x0a
,
0x17
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x41
,
0x6c
,
0x6c
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x22
,
0x52
,
0x0a
,
0x18
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x41
,
0x6c
,
0x6c
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x36
,
0x0a
,
0x0a
,
0x75
,
0x73
,
0x65
,
0x72
,
0x5f
,
0x73
,
0x74
,
0x61
,
0x74
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x17
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x09
,
0x75
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x22
,
0x29
,
0x0a
,
0x13
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x31
,
0x0a
,
0x09
,
0x68
,
0x74
,
0x74
,
0x70
,
0x5f
,
0x62
,
0x6f
,
0x64
,
0x79
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x14
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x48
,
0x74
,
0x74
,
0x70
,
0x42
,
0x6f
,
0x64
,
0x79
,
0x52
,
0x08
,
0x68
,
0x74
,
0x74
,
0x70
,
0x42
,
0x6f
,
0x64
,
0x79
,
0x22
,
0x3b
,
0x0a
,
0x11
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x26
,
0x0a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x22
,
0x7e
,
0x0a
,
0x11
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x2c
,
0x0a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x42
,
0x04
,
0xe2
,
0x41
,
0x01
,
0x02
,
0x52
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x12
,
0x3b
,
0x0a
,
0x0b
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
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
,
0x46
,
0x69
,
0x65
,
0x6c
,
0x64
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x52
,
0x0a
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x22
,
0x27
,
0x0a
,
0x11
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0xd1
,
0x03
,
0x0a
,
0x09
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x52
,
0x0a
,
0x17
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x5f
,
0x64
,
0x69
,
0x73
,
0x70
,
0x6c
,
0x61
,
0x79
,
0x5f
,
0x74
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x73
,
0x18
,
0x02
,
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
,
0x52
,
0x15
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x44
,
0x69
,
0x73
,
0x70
,
0x6c
,
0x61
,
0x79
,
0x54
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x73
,
0x12
,
0x4d
,
0x0a
,
0x0f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x5f
,
0x74
,
0x79
,
0x70
,
0x65
,
0x5f
,
0x73
,
0x74
,
0x61
,
0x74
,
0x73
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x25
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x2e
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x54
,
0x79
,
0x70
,
0x65
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x0d
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x54
,
0x79
,
0x70
,
0x65
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x42
,
0x0a
,
0x09
,
0x74
,
0x61
,
0x67
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x04
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x25
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x2e
,
0x54
,
0x61
,
0x67
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x45
,
0x6e
,
0x74
,
0x72
,
0x79
,
0x52
,
0x08
,
0x74
,
0x61
,
0x67
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x1a
,
0x3b
,
0x0a
,
0x0d
,
0x54
,
0x61
,
0x67
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x45
,
0x6e
,
0x74
,
0x72
,
0x79
,
0x12
,
0x10
,
0x0a
,
0x03
,
0x6b
,
0x65
,
0x79
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x03
,
0x6b
,
0x65
,
0x79
,
0x12
,
0x14
,
0x0a
,
0x05
,
0x76
,
0x61
,
0x6c
,
0x75
,
0x65
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x05
,
0x76
,
0x61
,
0x6c
,
0x75
,
0x65
,
0x3a
,
0x02
,
0x38
,
0x01
,
0x1a
,
0x8b
,
0x01
,
0x0a
,
0x0d
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x54
,
0x79
,
0x70
,
0x65
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x1d
,
0x0a
,
0x0a
,
0x6c
,
0x69
,
0x6e
,
0x6b
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x09
,
0x6c
,
0x69
,
0x6e
,
0x6b
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x12
,
0x1d
,
0x0a
,
0x0a
,
0x63
,
0x6f
,
0x64
,
0x65
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x09
,
0x63
,
0x6f
,
0x64
,
0x65
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x12
,
0x1d
,
0x0a
,
0x0a
,
0x74
,
0x6f
,
0x64
,
0x6f
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x09
,
0x74
,
0x6f
,
0x64
,
0x6f
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x12
,
0x1d
,
0x0a
,
0x0a
,
0x75
,
0x6e
,
0x64
,
0x6f
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x04
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x09
,
0x75
,
0x6e
,
0x64
,
0x6f
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x22
,
0x19
,
0x0a
,
0x17
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x41
,
0x6c
,
0x6c
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x22
,
0x52
,
0x0a
,
0x18
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x41
,
0x6c
,
0x6c
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x36
,
0x0a
,
0x0a
,
0x75
,
0x73
,
0x65
,
0x72
,
0x5f
,
0x73
,
0x74
,
0x61
,
0x74
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x17
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x09
,
0x75
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x22
,
0x29
,
0x0a
,
0x13
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x82
,
0x01
,
0x0a
,
0x0b
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x16
,
0x0a
,
0x06
,
0x6c
,
0x6f
,
0x63
,
0x61
,
0x6c
,
0x65
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x06
,
0x6c
,
0x6f
,
0x63
,
0x61
,
0x6c
,
0x65
,
0x12
,
0x1e
,
0x0a
,
0x0a
,
0x61
,
0x70
,
0x70
,
0x65
,
0x61
,
0x72
,
0x61
,
0x6e
,
0x63
,
0x65
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0a
,
0x61
,
0x70
,
0x70
,
0x65
,
0x61
,
0x72
,
0x61
,
0x6e
,
0x63
,
0x65
,
0x12
,
0x27
,
0x0a
,
0x0f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x5f
,
0x76
,
0x69
,
0x73
,
0x69
,
0x62
,
0x69
,
0x6c
,
0x69
,
0x74
,
0x79
,
0x18
,
0x04
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x56
,
0x69
,
0x73
,
0x69
,
0x62
,
0x69
,
0x6c
,
0x69
,
0x74
,
0x79
,
0x22
,
0x2b
,
0x0a
,
0x15
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x92
,
0x01
,
0x0a
,
0x18
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x39
,
0x0a
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x19
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x42
,
0x04
,
0xe2
,
0x41
,
0x01
,
0x02
,
0x52
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x3b
,
0x0a
,
0x0b
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
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
,
0x46
,
0x69
,
0x65
,
0x6c
,
0x64
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x52
,
0x0a
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x22
,
0xca
,
0x01
,
0x0a
,
0x0f
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x21
,
0x0a
,
0x0c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x20
,
0x0a
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x12
,
0x37
,
0x0a
,
0x09
,
0x69
,
0x73
,
0x73
,
0x75
,
0x65
,
0x64
,
0x5f
,
0x61
,
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
,
0x52
,
0x08
,
0x69
,
0x73
,
0x73
,
0x75
,
0x65
,
0x64
,
0x41
,
0x74
,
0x12
,
0x39
,
0x0a
,
0x0a
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x61
,
0x74
,
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
,
0x52
,
0x09
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x41
,
0x74
,
0x22
,
0x31
,
0x0a
,
0x1b
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x62
,
0x0a
,
0x1c
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x42
,
0x0a
,
0x0d
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x1d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x0c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x22
,
0xa3
,
0x01
,
0x0a
,
0x1c
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x20
,
0x0a
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x12
,
0x3e
,
0x0a
,
0x0a
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x61
,
0x74
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x82
,
0x01
,
0x0a
,
0x0b
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x16
,
0x0a
,
0x06
,
0x6c
,
0x6f
,
0x63
,
0x61
,
0x6c
,
0x65
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x06
,
0x6c
,
0x6f
,
0x63
,
0x61
,
0x6c
,
0x65
,
0x12
,
0x1e
,
0x0a
,
0x0a
,
0x61
,
0x70
,
0x70
,
0x65
,
0x61
,
0x72
,
0x61
,
0x6e
,
0x63
,
0x65
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0a
,
0x61
,
0x70
,
0x70
,
0x65
,
0x61
,
0x72
,
0x61
,
0x6e
,
0x63
,
0x65
,
0x12
,
0x27
,
0x0a
,
0x0f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x5f
,
0x76
,
0x69
,
0x73
,
0x69
,
0x62
,
0x69
,
0x6c
,
0x69
,
0x74
,
0x79
,
0x18
,
0x04
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x56
,
0x69
,
0x73
,
0x69
,
0x62
,
0x69
,
0x6c
,
0x69
,
0x74
,
0x79
,
0x22
,
0x2b
,
0x0a
,
0x15
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x92
,
0x01
,
0x0a
,
0x18
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x39
,
0x0a
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x19
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x42
,
0x04
,
0xe2
,
0x41
,
0x01
,
0x02
,
0x52
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x3b
,
0x0a
,
0x0b
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
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
,
0x46
,
0x69
,
0x65
,
0x6c
,
0x64
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x52
,
0x0a
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x22
,
0xca
,
0x01
,
0x0a
,
0x0f
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x21
,
0x0a
,
0x0c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x20
,
0x0a
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x12
,
0x37
,
0x0a
,
0x09
,
0x69
,
0x73
,
0x73
,
0x75
,
0x65
,
0x64
,
0x5f
,
0x61
,
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
,
0x52
,
0x08
,
0x69
,
0x73
,
0x73
,
0x75
,
0x65
,
0x64
,
0x41
,
0x74
,
0x12
,
0x39
,
0x0a
,
0x0a
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x61
,
0x74
,
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
,
0x48
,
0x00
,
0x52
,
0x09
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x41
,
0x74
,
0x88
,
0x01
,
0x01
,
0x42
,
0x0d
,
0x0a
,
0x0b
,
0x5f
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x61
,
0x74
,
0x22
,
0x55
,
0x0a
,
0x1c
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x21
,
0x0a
,
0x0c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x32
,
0xb8
,
0x0e
,
0x0a
,
0x0b
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x12
,
0x63
,
0x0a
,
0x09
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x15
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x0f
,
0x12
,
0x0d
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x70
,
0x0a
,
0x0b
,
0x53
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x20
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x53
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x21
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x53
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x1c
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x16
,
0x12
,
0x14
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x3a
,
0x73
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x12
,
0x62
,
0x0a
,
0x07
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1c
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x25
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x18
,
0x12
,
0x16
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0x81
,
0x01
,
0x0a
,
0x13
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x42
,
0x69
,
0x6e
,
0x61
,
0x72
,
0x79
,
0x12
,
0x28
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x42
,
0x69
,
0x6e
,
0x61
,
0x72
,
0x79
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x14
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x48
,
0x74
,
0x74
,
0x70
,
0x42
,
0x6f
,
0x64
,
0x79
,
0x22
,
0x2a
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x1d
,
0x12
,
0x1b
,
0x2f
,
0x66
,
0x69
,
0x6c
,
0x65
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x12
,
0x65
,
0x0a
,
0x0a
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x22
,
0xda
,
0x41
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x15
,
0x3a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x22
,
0x0d
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x7f
,
0x0a
,
0x0a
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x3c
,
0xda
,
0x41
,
0x10
,
0x75
,
0x73
,
0x65
,
0x72
,
0x2c
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x23
,
0x3a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x32
,
0x1b
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x75
,
0x73
,
0x65
,
0x72
,
0x2e
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0x6c
,
0x0a
,
0x0a
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x16
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x45
,
0x6d
,
0x70
,
0x74
,
0x79
,
0x22
,
0x25
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x18
,
0x2a
,
0x16
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0x80
,
0x01
,
0x0a
,
0x10
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x41
,
0x6c
,
0x6c
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x25
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x41
,
0x6c
,
0x6c
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x26
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x41
,
0x6c
,
0x6c
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x1d
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x17
,
0x22
,
0x15
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2d
,
0x2f
,
0x73
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x77
,
0x0a
,
0x0c
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x21
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x17
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x54
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x52
,
0x09
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x41
,
0x74
,
0x22
,
0x31
,
0x0a
,
0x1b
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x62
,
0x0a
,
0x1c
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x42
,
0x0a
,
0x0d
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x1d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x0c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x22
,
0xa3
,
0x01
,
0x0a
,
0x1c
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x20
,
0x0a
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x12
,
0x3e
,
0x0a
,
0x0a
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x61
,
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
,
0x48
,
0x00
,
0x52
,
0x09
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x41
,
0x74
,
0x88
,
0x01
,
0x01
,
0x42
,
0x0d
,
0x0a
,
0x0b
,
0x5f
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x61
,
0x74
,
0x22
,
0x55
,
0x0a
,
0x1c
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x21
,
0x0a
,
0x0c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x32
,
0xc2
,
0x0e
,
0x0a
,
0x0b
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x12
,
0x63
,
0x0a
,
0x09
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x15
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x0f
,
0x12
,
0x0d
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x62
,
0x0a
,
0x07
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1c
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x25
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x18
,
0x12
,
0x16
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0x7a
,
0x0a
,
0x11
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x42
,
0x79
,
0x55
,
0x73
,
0x65
,
0x72
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x26
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x42
,
0x79
,
0x55
,
0x73
,
0x65
,
0x72
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x29
,
0xda
,
0x41
,
0x08
,
0x75
,
0x73
,
0x65
,
0x72
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x18
,
0x12
,
0x16
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x3a
,
0x75
,
0x73
,
0x65
,
0x72
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x81
,
0x01
,
0x0a
,
0x13
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x42
,
0x69
,
0x6e
,
0x61
,
0x72
,
0x79
,
0x12
,
0x28
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x42
,
0x69
,
0x6e
,
0x61
,
0x72
,
0x79
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x14
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x48
,
0x74
,
0x74
,
0x70
,
0x42
,
0x6f
,
0x64
,
0x79
,
0x22
,
0x2a
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x1d
,
0x12
,
0x1b
,
0x2f
,
0x66
,
0x69
,
0x6c
,
0x65
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x12
,
0x65
,
0x0a
,
0x0a
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x22
,
0xda
,
0x41
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x15
,
0x3a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x22
,
0x0d
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x7f
,
0x0a
,
0x0a
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x3c
,
0xda
,
0x41
,
0x10
,
0x75
,
0x73
,
0x65
,
0x72
,
0x2c
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x23
,
0x3a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x32
,
0x1b
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x75
,
0x73
,
0x65
,
0x72
,
0x2e
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0x6c
,
0x0a
,
0x0a
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x16
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x45
,
0x6d
,
0x70
,
0x74
,
0x79
,
0x22
,
0x25
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x18
,
0x2a
,
0x16
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0x80
,
0x01
,
0x0a
,
0x10
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x41
,
0x6c
,
0x6c
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x25
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x41
,
0x6c
,
0x6c
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x26
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x41
,
0x6c
,
0x6c
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x1d
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x17
,
0x22
,
0x15
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2d
,
0x2f
,
0x73
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x77
,
0x0a
,
0x0c
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x21
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x17
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x22
,
0x2b
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x1e
,
0x12
,
0x1c
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x73
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x7f
,
0x0a
,
0x0e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x23
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x19
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x22
,
0x2b
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x1e
,
0x12
,
0x1c
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x73
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x7f
,
0x0a
,
0x0e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x23
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x19
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x22
,
0x2d
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x20
,
0x12
,
0x1e
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0xa5
,
0x01
,
0x0a
,
0x11
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x26
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x19
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x22
,
0x4d
,
0xda
,
0x41
,
0x13
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x2c
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x31
,
0x3a
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x32
,
0x26
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x2e
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x2f
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x7d
,
0x12
,
0xa2
,
0x01
,
0x0a
,
0x14
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x12
,
0x29
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x2a
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x33
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x26
,
0x12
,
0x24
,
0x2f
,
0x61
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x22
,
0x2d
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x20
,
0x12
,
0x1e
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0xa5
,
0x01
,
0x0a
,
0x11
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x26
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x19
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x22
,
0x4d
,
0xda
,
0x41
,
0x13
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x2c
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x31
,
0x3a
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x32
,
0x26
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x2e
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x2f
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x7d
,
0x12
,
0xa2
,
0x01
,
0x0a
,
0x14
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x12
,
0x29
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x2a
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x33
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x26
,
0x12
,
0x24
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x12
,
0x9a
,
0x01
,
0x0a
,
0x15
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x2a
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x22
,
0x36
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x29
,
0x3a
,
0x01
,
0x2a
,
0x22
,
0x24
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x12
,
0x
9a
,
0x01
,
0x0a
,
0x15
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x6e
,
0x73
,
0x12
,
0x
ac
,
0x01
,
0x0a
,
0x15
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x2a
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4
3
,
0x72
,
0x65
,
0x61
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4
4
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x22
,
0x36
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x29
,
0x3a
,
0x01
,
0x2a
,
0x22
,
0x24
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x12
,
0xac
,
0x01
,
0x0a
,
0x15
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x2a
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x16
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x45
,
0x6d
,
0x70
,
0x74
,
0x79
,
0x22
,
0x4f
,
0xda
,
0x41
,
0x11
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x2c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x35
,
0x2a
,
0x33
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x2f
,
0x7b
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x7d
,
0x42
,
0xa8
,
0x01
,
0x0a
,
0x10
,
0x63
,
0x6f
,
0x6d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x42
,
0x10
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x50
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x50
,
0x01
,
0x5a
,
0x30
,
0x67
,
0x69
,
0x74
,
0x68
,
0x75
,
0x62
,
0x2e
,
0x63
,
0x6f
,
0x6d
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x2f
,
0x67
,
0x65
,
0x6e
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x3b
,
0x61
,
0x70
,
0x69
,
0x76
,
0x31
,
0xa2
,
0x02
,
0x03
,
0x4d
,
0x41
,
0x58
,
0xaa
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x41
,
0x70
,
0x69
,
0x2e
,
0x56
,
0x31
,
0xca
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0xe2
,
0x02
,
0x18
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0x5c
,
0x47
,
0x50
,
0x42
,
0x4d
,
0x65
,
0x74
,
0x61
,
0x64
,
0x61
,
0x74
,
0x61
,
0xea
,
0x02
,
0x0e
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x3a
,
0x3a
,
0x41
,
0x70
,
0x69
,
0x3a
,
0x3a
,
0x56
,
0x31
,
0x62
,
0x06
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x33
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x16
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x45
,
0x6d
,
0x70
,
0x74
,
0x79
,
0x22
,
0x4f
,
0xda
,
0x41
,
0x11
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x2c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x35
,
0x2a
,
0x33
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x2f
,
0x7b
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x7d
,
0x42
,
0xa8
,
0x01
,
0x0a
,
0x10
,
0x63
,
0x6f
,
0x6d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x42
,
0x10
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x50
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x50
,
0x01
,
0x5a
,
0x30
,
0x67
,
0x69
,
0x74
,
0x68
,
0x75
,
0x62
,
0x2e
,
0x63
,
0x6f
,
0x6d
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x2f
,
0x67
,
0x65
,
0x6e
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x3b
,
0x61
,
0x70
,
0x69
,
0x76
,
0x31
,
0xa2
,
0x02
,
0x03
,
0x4d
,
0x41
,
0x58
,
0xaa
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x41
,
0x70
,
0x69
,
0x2e
,
0x56
,
0x31
,
0xca
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0xe2
,
0x02
,
0x18
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0x5c
,
0x47
,
0x50
,
0x42
,
0x4d
,
0x65
,
0x74
,
0x61
,
0x64
,
0x61
,
0x74
,
0x61
,
0xea
,
0x02
,
0x0e
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x3a
,
0x3a
,
0x41
,
0x70
,
0x69
,
0x3a
,
0x3a
,
0x56
,
0x31
,
0x62
,
0x06
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x33
,
})
var
(
...
...
@@ -1648,93 +1600,91 @@ func file_api_v1_user_service_proto_rawDescGZIP() []byte {
}
var
file_api_v1_user_service_proto_enumTypes
=
make
([]
protoimpl
.
EnumInfo
,
1
)
var
file_api_v1_user_service_proto_msgTypes
=
make
([]
protoimpl
.
MessageInfo
,
2
4
)
var
file_api_v1_user_service_proto_msgTypes
=
make
([]
protoimpl
.
MessageInfo
,
2
3
)
var
file_api_v1_user_service_proto_goTypes
=
[]
any
{
(
User_Role
)(
0
),
// 0: memos.api.v1.User.Role
(
*
User
)(
nil
),
// 1: memos.api.v1.User
(
*
ListUsersRequest
)(
nil
),
// 2: memos.api.v1.ListUsersRequest
(
*
ListUsersResponse
)(
nil
),
// 3: memos.api.v1.ListUsersResponse
(
*
SearchUsersRequest
)(
nil
),
// 4: memos.api.v1.SearchUsersRequest
(
*
SearchUsersResponse
)(
nil
),
// 5: memos.api.v1.SearchUsersResponse
(
*
GetUserRequest
)(
nil
),
// 6: memos.api.v1.GetUserRequest
(
*
GetUserAvatarBinaryRequest
)(
nil
),
// 7: memos.api.v1.GetUserAvatarBinaryRequest
(
*
CreateUserRequest
)(
nil
),
// 8: memos.api.v1.CreateUserRequest
(
*
UpdateUserRequest
)(
nil
),
// 9: memos.api.v1.UpdateUserRequest
(
*
DeleteUserRequest
)(
nil
),
// 10: memos.api.v1.DeleteUserRequest
(
*
UserStats
)(
nil
),
// 11: memos.api.v1.UserStats
(
*
ListAllUserStatsRequest
)(
nil
),
// 12: memos.api.v1.ListAllUserStatsRequest
(
*
ListAllUserStatsResponse
)(
nil
),
// 13: memos.api.v1.ListAllUserStatsResponse
(
*
GetUserStatsRequest
)(
nil
),
// 14: memos.api.v1.GetUserStatsRequest
(
*
UserSetting
)(
nil
),
// 15: memos.api.v1.UserSetting
(
*
GetUserSettingRequest
)(
nil
),
// 16: memos.api.v1.GetUserSettingRequest
(
*
UpdateUserSettingRequest
)(
nil
),
// 17: memos.api.v1.UpdateUserSettingRequest
(
*
UserAccessToken
)(
nil
),
// 18: memos.api.v1.UserAccessToken
(
*
ListUserAccessTokensRequest
)(
nil
),
// 19: memos.api.v1.ListUserAccessTokensRequest
(
*
ListUserAccessTokensResponse
)(
nil
),
// 20: memos.api.v1.ListUserAccessTokensResponse
(
*
CreateUserAccessTokenRequest
)(
nil
),
// 21: memos.api.v1.CreateUserAccessTokenRequest
(
*
DeleteUserAccessTokenRequest
)(
nil
),
// 22: memos.api.v1.DeleteUserAccessTokenRequest
nil
,
// 23: memos.api.v1.UserStats.TagCountEntry
(
*
UserStats_MemoTypeStats
)(
nil
),
// 24: memos.api.v1.UserStats.MemoTypeStats
(
State
)(
0
),
// 25: memos.api.v1.State
(
*
timestamppb
.
Timestamp
)(
nil
),
// 26: google.protobuf.Timestamp
(
*
httpbody
.
HttpBody
)(
nil
),
// 27: google.api.HttpBody
(
*
fieldmaskpb
.
FieldMask
)(
nil
),
// 28: google.protobuf.FieldMask
(
*
emptypb
.
Empty
)(
nil
),
// 29: google.protobuf.Empty
(
*
GetUserRequest
)(
nil
),
// 4: memos.api.v1.GetUserRequest
(
*
GetUserByUsernameRequest
)(
nil
),
// 5: memos.api.v1.GetUserByUsernameRequest
(
*
GetUserAvatarBinaryRequest
)(
nil
),
// 6: memos.api.v1.GetUserAvatarBinaryRequest
(
*
CreateUserRequest
)(
nil
),
// 7: memos.api.v1.CreateUserRequest
(
*
UpdateUserRequest
)(
nil
),
// 8: memos.api.v1.UpdateUserRequest
(
*
DeleteUserRequest
)(
nil
),
// 9: memos.api.v1.DeleteUserRequest
(
*
UserStats
)(
nil
),
// 10: memos.api.v1.UserStats
(
*
ListAllUserStatsRequest
)(
nil
),
// 11: memos.api.v1.ListAllUserStatsRequest
(
*
ListAllUserStatsResponse
)(
nil
),
// 12: memos.api.v1.ListAllUserStatsResponse
(
*
GetUserStatsRequest
)(
nil
),
// 13: memos.api.v1.GetUserStatsRequest
(
*
UserSetting
)(
nil
),
// 14: memos.api.v1.UserSetting
(
*
GetUserSettingRequest
)(
nil
),
// 15: memos.api.v1.GetUserSettingRequest
(
*
UpdateUserSettingRequest
)(
nil
),
// 16: memos.api.v1.UpdateUserSettingRequest
(
*
UserAccessToken
)(
nil
),
// 17: memos.api.v1.UserAccessToken
(
*
ListUserAccessTokensRequest
)(
nil
),
// 18: memos.api.v1.ListUserAccessTokensRequest
(
*
ListUserAccessTokensResponse
)(
nil
),
// 19: memos.api.v1.ListUserAccessTokensResponse
(
*
CreateUserAccessTokenRequest
)(
nil
),
// 20: memos.api.v1.CreateUserAccessTokenRequest
(
*
DeleteUserAccessTokenRequest
)(
nil
),
// 21: memos.api.v1.DeleteUserAccessTokenRequest
nil
,
// 22: memos.api.v1.UserStats.TagCountEntry
(
*
UserStats_MemoTypeStats
)(
nil
),
// 23: memos.api.v1.UserStats.MemoTypeStats
(
State
)(
0
),
// 24: memos.api.v1.State
(
*
timestamppb
.
Timestamp
)(
nil
),
// 25: google.protobuf.Timestamp
(
*
httpbody
.
HttpBody
)(
nil
),
// 26: google.api.HttpBody
(
*
fieldmaskpb
.
FieldMask
)(
nil
),
// 27: google.protobuf.FieldMask
(
*
emptypb
.
Empty
)(
nil
),
// 28: google.protobuf.Empty
}
var
file_api_v1_user_service_proto_depIdxs
=
[]
int32
{
0
,
// 0: memos.api.v1.User.role:type_name -> memos.api.v1.User.Role
2
5
,
// 1: memos.api.v1.User.state:type_name -> memos.api.v1.State
2
6
,
// 2: memos.api.v1.User.create_time:type_name -> google.protobuf.Timestamp
2
6
,
// 3: memos.api.v1.User.update_time:type_name -> google.protobuf.Timestamp
2
4
,
// 1: memos.api.v1.User.state:type_name -> memos.api.v1.State
2
5
,
// 2: memos.api.v1.User.create_time:type_name -> google.protobuf.Timestamp
2
5
,
// 3: memos.api.v1.User.update_time:type_name -> google.protobuf.Timestamp
1
,
// 4: memos.api.v1.ListUsersResponse.users:type_name -> memos.api.v1.User
1
,
// 5: memos.api.v1.SearchUsersResponse.users:type_name -> memos.api.v1.User
27
,
// 6: memos.api.v1.GetUserAvatarBinaryRequest.http_body:type_name -> google.api.HttpBody
1
,
// 7: memos.api.v1.CreateUserRequest.user:type_name -> memos.api.v1.User
1
,
// 8: memos.api.v1.UpdateUserRequest.user:type_name -> memos.api.v1.User
28
,
// 9: memos.api.v1.UpdateUserRequest.update_mask:type_name -> google.protobuf.FieldMask
26
,
// 10: memos.api.v1.UserStats.memo_display_timestamps:type_name -> google.protobuf.Timestamp
24
,
// 11: memos.api.v1.UserStats.memo_type_stats:type_name -> memos.api.v1.UserStats.MemoTypeStats
23
,
// 12: memos.api.v1.UserStats.tag_count:type_name -> memos.api.v1.UserStats.TagCountEntry
11
,
// 13: memos.api.v1.ListAllUserStatsResponse.user_stats:type_name -> memos.api.v1.UserStats
15
,
// 14: memos.api.v1.UpdateUserSettingRequest.setting:type_name -> memos.api.v1.UserSetting
28
,
// 15: memos.api.v1.UpdateUserSettingRequest.update_mask:type_name -> google.protobuf.FieldMask
26
,
// 16: memos.api.v1.UserAccessToken.issued_at:type_name -> google.protobuf.Timestamp
26
,
// 17: memos.api.v1.UserAccessToken.expires_at:type_name -> google.protobuf.Timestamp
18
,
// 18: memos.api.v1.ListUserAccessTokensResponse.access_tokens:type_name -> memos.api.v1.UserAccessToken
26
,
// 19: memos.api.v1.CreateUserAccessTokenRequest.expires_at:type_name -> google.protobuf.Timestamp
2
,
// 20: memos.api.v1.UserService.ListUsers:input_type -> memos.api.v1.ListUsersRequest
4
,
// 21: memos.api.v1.UserService.SearchUsers:input_type -> memos.api.v1.SearchUsersRequest
6
,
// 22: memos.api.v1.UserService.GetUser:input_type -> memos.api.v1.GetUserRequest
7
,
// 23: memos.api.v1.UserService.GetUserAvatarBinary:input_type -> memos.api.v1.GetUserAvatarBinaryRequest
8
,
// 24: memos.api.v1.UserService.CreateUser:input_type -> memos.api.v1.CreateUserRequest
9
,
// 25: memos.api.v1.UserService.UpdateUser:input_type -> memos.api.v1.UpdateUserRequest
10
,
// 26: memos.api.v1.UserService.DeleteUser:input_type -> memos.api.v1.DeleteUserRequest
12
,
// 27: memos.api.v1.UserService.ListAllUserStats:input_type -> memos.api.v1.ListAllUserStatsRequest
14
,
// 28: memos.api.v1.UserService.GetUserStats:input_type -> memos.api.v1.GetUserStatsRequest
16
,
// 29: memos.api.v1.UserService.GetUserSetting:input_type -> memos.api.v1.GetUserSettingRequest
17
,
// 30: memos.api.v1.UserService.UpdateUserSetting:input_type -> memos.api.v1.UpdateUserSettingRequest
19
,
// 31: memos.api.v1.UserService.ListUserAccessTokens:input_type -> memos.api.v1.ListUserAccessTokensRequest
21
,
// 32: memos.api.v1.UserService.CreateUserAccessToken:input_type -> memos.api.v1.CreateUserAccessTokenRequest
22
,
// 33: memos.api.v1.UserService.DeleteUserAccessToken:input_type -> memos.api.v1.DeleteUserAccessTokenRequest
3
,
// 34: memos.api.v1.UserService.ListUsers:output_type -> memos.api.v1.ListUsersResponse
5
,
// 35: memos.api.v1.UserService.SearchUsers:output_type -> memos.api.v1.SearchUsersResponse
1
,
// 36: memos.api.v1.UserService.GetUser:output_type -> memos.api.v1.User
27
,
// 37: memos.api.v1.UserService.GetUserAvatarBinary:output_type -> google.api.HttpBody
1
,
// 38: memos.api.v1.UserService.CreateUser:output_type -> memos.api.v1.User
1
,
// 39: memos.api.v1.UserService.UpdateUser:output_type -> memos.api.v1.User
29
,
// 40: memos.api.v1.UserService.DeleteUser:output_type -> google.protobuf.Empty
13
,
// 41: memos.api.v1.UserService.ListAllUserStats:output_type -> memos.api.v1.ListAllUserStatsResponse
11
,
// 42: memos.api.v1.UserService.GetUserStats:output_type -> memos.api.v1.UserStats
15
,
// 43: memos.api.v1.UserService.GetUserSetting:output_type -> memos.api.v1.UserSetting
15
,
// 44: memos.api.v1.UserService.UpdateUserSetting:output_type -> memos.api.v1.UserSetting
20
,
// 45: memos.api.v1.UserService.ListUserAccessTokens:output_type -> memos.api.v1.ListUserAccessTokensResponse
18
,
// 46: memos.api.v1.UserService.CreateUserAccessToken:output_type -> memos.api.v1.UserAccessToken
29
,
// 47: memos.api.v1.UserService.DeleteUserAccessToken:output_type -> google.protobuf.Empty
34
,
// [34:48] is the sub-list for method output_type
20
,
// [20:34] is the sub-list for method input_type
20
,
// [20:20] is the sub-list for extension type_name
20
,
// [20:20] is the sub-list for extension extendee
0
,
// [0:20] is the sub-list for field type_name
26
,
// 5: memos.api.v1.GetUserAvatarBinaryRequest.http_body:type_name -> google.api.HttpBody
1
,
// 6: memos.api.v1.CreateUserRequest.user:type_name -> memos.api.v1.User
1
,
// 7: memos.api.v1.UpdateUserRequest.user:type_name -> memos.api.v1.User
27
,
// 8: memos.api.v1.UpdateUserRequest.update_mask:type_name -> google.protobuf.FieldMask
25
,
// 9: memos.api.v1.UserStats.memo_display_timestamps:type_name -> google.protobuf.Timestamp
23
,
// 10: memos.api.v1.UserStats.memo_type_stats:type_name -> memos.api.v1.UserStats.MemoTypeStats
22
,
// 11: memos.api.v1.UserStats.tag_count:type_name -> memos.api.v1.UserStats.TagCountEntry
10
,
// 12: memos.api.v1.ListAllUserStatsResponse.user_stats:type_name -> memos.api.v1.UserStats
14
,
// 13: memos.api.v1.UpdateUserSettingRequest.setting:type_name -> memos.api.v1.UserSetting
27
,
// 14: memos.api.v1.UpdateUserSettingRequest.update_mask:type_name -> google.protobuf.FieldMask
25
,
// 15: memos.api.v1.UserAccessToken.issued_at:type_name -> google.protobuf.Timestamp
25
,
// 16: memos.api.v1.UserAccessToken.expires_at:type_name -> google.protobuf.Timestamp
17
,
// 17: memos.api.v1.ListUserAccessTokensResponse.access_tokens:type_name -> memos.api.v1.UserAccessToken
25
,
// 18: memos.api.v1.CreateUserAccessTokenRequest.expires_at:type_name -> google.protobuf.Timestamp
2
,
// 19: memos.api.v1.UserService.ListUsers:input_type -> memos.api.v1.ListUsersRequest
4
,
// 20: memos.api.v1.UserService.GetUser:input_type -> memos.api.v1.GetUserRequest
5
,
// 21: memos.api.v1.UserService.GetUserByUsername:input_type -> memos.api.v1.GetUserByUsernameRequest
6
,
// 22: memos.api.v1.UserService.GetUserAvatarBinary:input_type -> memos.api.v1.GetUserAvatarBinaryRequest
7
,
// 23: memos.api.v1.UserService.CreateUser:input_type -> memos.api.v1.CreateUserRequest
8
,
// 24: memos.api.v1.UserService.UpdateUser:input_type -> memos.api.v1.UpdateUserRequest
9
,
// 25: memos.api.v1.UserService.DeleteUser:input_type -> memos.api.v1.DeleteUserRequest
11
,
// 26: memos.api.v1.UserService.ListAllUserStats:input_type -> memos.api.v1.ListAllUserStatsRequest
13
,
// 27: memos.api.v1.UserService.GetUserStats:input_type -> memos.api.v1.GetUserStatsRequest
15
,
// 28: memos.api.v1.UserService.GetUserSetting:input_type -> memos.api.v1.GetUserSettingRequest
16
,
// 29: memos.api.v1.UserService.UpdateUserSetting:input_type -> memos.api.v1.UpdateUserSettingRequest
18
,
// 30: memos.api.v1.UserService.ListUserAccessTokens:input_type -> memos.api.v1.ListUserAccessTokensRequest
20
,
// 31: memos.api.v1.UserService.CreateUserAccessToken:input_type -> memos.api.v1.CreateUserAccessTokenRequest
21
,
// 32: memos.api.v1.UserService.DeleteUserAccessToken:input_type -> memos.api.v1.DeleteUserAccessTokenRequest
3
,
// 33: memos.api.v1.UserService.ListUsers:output_type -> memos.api.v1.ListUsersResponse
1
,
// 34: memos.api.v1.UserService.GetUser:output_type -> memos.api.v1.User
1
,
// 35: memos.api.v1.UserService.GetUserByUsername:output_type -> memos.api.v1.User
26
,
// 36: memos.api.v1.UserService.GetUserAvatarBinary:output_type -> google.api.HttpBody
1
,
// 37: memos.api.v1.UserService.CreateUser:output_type -> memos.api.v1.User
1
,
// 38: memos.api.v1.UserService.UpdateUser:output_type -> memos.api.v1.User
28
,
// 39: memos.api.v1.UserService.DeleteUser:output_type -> google.protobuf.Empty
12
,
// 40: memos.api.v1.UserService.ListAllUserStats:output_type -> memos.api.v1.ListAllUserStatsResponse
10
,
// 41: memos.api.v1.UserService.GetUserStats:output_type -> memos.api.v1.UserStats
14
,
// 42: memos.api.v1.UserService.GetUserSetting:output_type -> memos.api.v1.UserSetting
14
,
// 43: memos.api.v1.UserService.UpdateUserSetting:output_type -> memos.api.v1.UserSetting
19
,
// 44: memos.api.v1.UserService.ListUserAccessTokens:output_type -> memos.api.v1.ListUserAccessTokensResponse
17
,
// 45: memos.api.v1.UserService.CreateUserAccessToken:output_type -> memos.api.v1.UserAccessToken
28
,
// 46: memos.api.v1.UserService.DeleteUserAccessToken:output_type -> google.protobuf.Empty
33
,
// [33:47] is the sub-list for method output_type
19
,
// [19:33] is the sub-list for method input_type
19
,
// [19:19] is the sub-list for extension type_name
19
,
// [19:19] is the sub-list for extension extendee
0
,
// [0:19] is the sub-list for field type_name
}
func
init
()
{
file_api_v1_user_service_proto_init
()
}
...
...
@@ -1743,14 +1693,14 @@ func file_api_v1_user_service_proto_init() {
return
}
file_api_v1_common_proto_init
()
file_api_v1_user_service_proto_msgTypes
[
20
]
.
OneofWrappers
=
[]
any
{}
file_api_v1_user_service_proto_msgTypes
[
19
]
.
OneofWrappers
=
[]
any
{}
type
x
struct
{}
out
:=
protoimpl
.
TypeBuilder
{
File
:
protoimpl
.
DescBuilder
{
GoPackagePath
:
reflect
.
TypeOf
(
x
{})
.
PkgPath
(),
RawDescriptor
:
unsafe
.
Slice
(
unsafe
.
StringData
(
file_api_v1_user_service_proto_rawDesc
),
len
(
file_api_v1_user_service_proto_rawDesc
)),
NumEnums
:
1
,
NumMessages
:
2
4
,
NumMessages
:
2
3
,
NumExtensions
:
0
,
NumServices
:
1
,
},
...
...
proto/gen/api/v1/user_service.pb.gw.go
View file @
57014e39
...
...
@@ -53,38 +53,6 @@ func local_request_UserService_ListUsers_0(ctx context.Context, marshaler runtim
return
msg
,
metadata
,
err
}
var
filter_UserService_SearchUsers_0
=
&
utilities
.
DoubleArray
{
Encoding
:
map
[
string
]
int
{},
Base
:
[]
int
(
nil
),
Check
:
[]
int
(
nil
)}
func
request_UserService_SearchUsers_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
UserServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
(
protoReq
SearchUsersRequest
metadata
runtime
.
ServerMetadata
)
if
err
:=
req
.
ParseForm
();
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
if
err
:=
runtime
.
PopulateQueryParameters
(
&
protoReq
,
req
.
Form
,
filter_UserService_SearchUsers_0
);
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
msg
,
err
:=
client
.
SearchUsers
(
ctx
,
&
protoReq
,
grpc
.
Header
(
&
metadata
.
HeaderMD
),
grpc
.
Trailer
(
&
metadata
.
TrailerMD
))
return
msg
,
metadata
,
err
}
func
local_request_UserService_SearchUsers_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
server
UserServiceServer
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
(
protoReq
SearchUsersRequest
metadata
runtime
.
ServerMetadata
)
if
err
:=
req
.
ParseForm
();
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
if
err
:=
runtime
.
PopulateQueryParameters
(
&
protoReq
,
req
.
Form
,
filter_UserService_SearchUsers_0
);
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
msg
,
err
:=
server
.
SearchUsers
(
ctx
,
&
protoReq
)
return
msg
,
metadata
,
err
}
func
request_UserService_GetUser_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
UserServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
(
protoReq
GetUserRequest
...
...
@@ -121,6 +89,38 @@ func local_request_UserService_GetUser_0(ctx context.Context, marshaler runtime.
return
msg
,
metadata
,
err
}
var
filter_UserService_GetUserByUsername_0
=
&
utilities
.
DoubleArray
{
Encoding
:
map
[
string
]
int
{},
Base
:
[]
int
(
nil
),
Check
:
[]
int
(
nil
)}
func
request_UserService_GetUserByUsername_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
UserServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
(
protoReq
GetUserByUsernameRequest
metadata
runtime
.
ServerMetadata
)
if
err
:=
req
.
ParseForm
();
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
if
err
:=
runtime
.
PopulateQueryParameters
(
&
protoReq
,
req
.
Form
,
filter_UserService_GetUserByUsername_0
);
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
msg
,
err
:=
client
.
GetUserByUsername
(
ctx
,
&
protoReq
,
grpc
.
Header
(
&
metadata
.
HeaderMD
),
grpc
.
Trailer
(
&
metadata
.
TrailerMD
))
return
msg
,
metadata
,
err
}
func
local_request_UserService_GetUserByUsername_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
server
UserServiceServer
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
(
protoReq
GetUserByUsernameRequest
metadata
runtime
.
ServerMetadata
)
if
err
:=
req
.
ParseForm
();
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
if
err
:=
runtime
.
PopulateQueryParameters
(
&
protoReq
,
req
.
Form
,
filter_UserService_GetUserByUsername_0
);
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
msg
,
err
:=
server
.
GetUserByUsername
(
ctx
,
&
protoReq
)
return
msg
,
metadata
,
err
}
var
filter_UserService_GetUserAvatarBinary_0
=
&
utilities
.
DoubleArray
{
Encoding
:
map
[
string
]
int
{
"name"
:
0
},
Base
:
[]
int
{
1
,
1
,
0
},
Check
:
[]
int
{
0
,
1
,
2
}}
func
request_UserService_GetUserAvatarBinary_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
UserServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
...
...
@@ -633,45 +633,45 @@ func RegisterUserServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
}
forward_UserService_ListUsers_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_
SearchUsers
_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_
GetUser
_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
var
stream
runtime
.
ServerTransportStream
ctx
=
grpc
.
NewContextWithServerTransportStream
(
ctx
,
&
stream
)
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
annotatedContext
,
err
:=
runtime
.
AnnotateIncomingContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.UserService/
SearchUsers"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/users:search
"
))
annotatedContext
,
err
:=
runtime
.
AnnotateIncomingContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.UserService/
GetUser"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=users/*}
"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
local_request_UserService_
SearchUsers
_0
(
annotatedContext
,
inboundMarshaler
,
server
,
req
,
pathParams
)
resp
,
md
,
err
:=
local_request_UserService_
GetUser
_0
(
annotatedContext
,
inboundMarshaler
,
server
,
req
,
pathParams
)
md
.
HeaderMD
,
md
.
TrailerMD
=
metadata
.
Join
(
md
.
HeaderMD
,
stream
.
Header
()),
metadata
.
Join
(
md
.
TrailerMD
,
stream
.
Trailer
())
annotatedContext
=
runtime
.
NewServerMetadataContext
(
annotatedContext
,
md
)
if
err
!=
nil
{
runtime
.
HTTPError
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
forward_UserService_
SearchUsers
_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
forward_UserService_
GetUser
_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_GetUser_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_GetUser
ByUsername
_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
var
stream
runtime
.
ServerTransportStream
ctx
=
grpc
.
NewContextWithServerTransportStream
(
ctx
,
&
stream
)
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
annotatedContext
,
err
:=
runtime
.
AnnotateIncomingContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.UserService/GetUser
"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=users/*}
"
))
annotatedContext
,
err
:=
runtime
.
AnnotateIncomingContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.UserService/GetUser
ByUsername"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/users:username
"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
local_request_UserService_GetUser_0
(
annotatedContext
,
inboundMarshaler
,
server
,
req
,
pathParams
)
resp
,
md
,
err
:=
local_request_UserService_GetUser
ByUsername
_0
(
annotatedContext
,
inboundMarshaler
,
server
,
req
,
pathParams
)
md
.
HeaderMD
,
md
.
TrailerMD
=
metadata
.
Join
(
md
.
HeaderMD
,
stream
.
Header
()),
metadata
.
Join
(
md
.
TrailerMD
,
stream
.
Trailer
())
annotatedContext
=
runtime
.
NewServerMetadataContext
(
annotatedContext
,
md
)
if
err
!=
nil
{
runtime
.
HTTPError
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
forward_UserService_GetUser_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
forward_UserService_GetUser
ByUsername
_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_GetUserAvatarBinary_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
...
...
@@ -950,39 +950,39 @@ func RegisterUserServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
}
forward_UserService_ListUsers_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_
SearchUsers
_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_
GetUser
_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
annotatedContext
,
err
:=
runtime
.
AnnotateContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.UserService/
SearchUsers"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/users:search
"
))
annotatedContext
,
err
:=
runtime
.
AnnotateContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.UserService/
GetUser"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=users/*}
"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
request_UserService_
SearchUsers
_0
(
annotatedContext
,
inboundMarshaler
,
client
,
req
,
pathParams
)
resp
,
md
,
err
:=
request_UserService_
GetUser
_0
(
annotatedContext
,
inboundMarshaler
,
client
,
req
,
pathParams
)
annotatedContext
=
runtime
.
NewServerMetadataContext
(
annotatedContext
,
md
)
if
err
!=
nil
{
runtime
.
HTTPError
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
forward_UserService_
SearchUsers
_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
forward_UserService_
GetUser
_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_GetUser_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_GetUser
ByUsername
_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
annotatedContext
,
err
:=
runtime
.
AnnotateContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.UserService/GetUser
"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=users/*}
"
))
annotatedContext
,
err
:=
runtime
.
AnnotateContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.UserService/GetUser
ByUsername"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/users:username
"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
request_UserService_GetUser_0
(
annotatedContext
,
inboundMarshaler
,
client
,
req
,
pathParams
)
resp
,
md
,
err
:=
request_UserService_GetUser
ByUsername
_0
(
annotatedContext
,
inboundMarshaler
,
client
,
req
,
pathParams
)
annotatedContext
=
runtime
.
NewServerMetadataContext
(
annotatedContext
,
md
)
if
err
!=
nil
{
runtime
.
HTTPError
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
forward_UserService_GetUser_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
forward_UserService_GetUser
ByUsername
_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_GetUserAvatarBinary_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
...
...
@@ -1176,8 +1176,8 @@ func RegisterUserServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
var
(
pattern_UserService_ListUsers_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v1"
,
"users"
},
""
))
pattern_UserService_SearchUsers_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v1"
,
"users"
},
"search"
))
pattern_UserService_GetUser_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"name"
},
""
))
pattern_UserService_GetUserByUsername_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v1"
,
"users"
},
"username"
))
pattern_UserService_GetUserAvatarBinary_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
1
,
0
,
4
,
2
,
5
,
2
,
2
,
3
},
[]
string
{
"file"
,
"users"
,
"name"
,
"avatar"
},
""
))
pattern_UserService_CreateUser_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v1"
,
"users"
},
""
))
pattern_UserService_UpdateUser_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"user.name"
},
""
))
...
...
@@ -1193,8 +1193,8 @@ var (
var
(
forward_UserService_ListUsers_0
=
runtime
.
ForwardResponseMessage
forward_UserService_SearchUsers_0
=
runtime
.
ForwardResponseMessage
forward_UserService_GetUser_0
=
runtime
.
ForwardResponseMessage
forward_UserService_GetUserByUsername_0
=
runtime
.
ForwardResponseMessage
forward_UserService_GetUserAvatarBinary_0
=
runtime
.
ForwardResponseMessage
forward_UserService_CreateUser_0
=
runtime
.
ForwardResponseMessage
forward_UserService_UpdateUser_0
=
runtime
.
ForwardResponseMessage
...
...
proto/gen/api/v1/user_service_grpc.pb.go
View file @
57014e39
...
...
@@ -22,8 +22,8 @@ const _ = grpc.SupportPackageIsVersion9
const
(
UserService_ListUsers_FullMethodName
=
"/memos.api.v1.UserService/ListUsers"
UserService_SearchUsers_FullMethodName
=
"/memos.api.v1.UserService/SearchUsers"
UserService_GetUser_FullMethodName
=
"/memos.api.v1.UserService/GetUser"
UserService_GetUserByUsername_FullMethodName
=
"/memos.api.v1.UserService/GetUserByUsername"
UserService_GetUserAvatarBinary_FullMethodName
=
"/memos.api.v1.UserService/GetUserAvatarBinary"
UserService_CreateUser_FullMethodName
=
"/memos.api.v1.UserService/CreateUser"
UserService_UpdateUser_FullMethodName
=
"/memos.api.v1.UserService/UpdateUser"
...
...
@@ -43,10 +43,10 @@ const (
type
UserServiceClient
interface
{
// ListUsers returns a list of users.
ListUsers
(
ctx
context
.
Context
,
in
*
ListUsersRequest
,
opts
...
grpc
.
CallOption
)
(
*
ListUsersResponse
,
error
)
// SearchUsers searches users by filter.
SearchUsers
(
ctx
context
.
Context
,
in
*
SearchUsersRequest
,
opts
...
grpc
.
CallOption
)
(
*
SearchUsersResponse
,
error
)
// GetUser gets a user by name.
GetUser
(
ctx
context
.
Context
,
in
*
GetUserRequest
,
opts
...
grpc
.
CallOption
)
(
*
User
,
error
)
// GetUserByUsername gets a user by username.
GetUserByUsername
(
ctx
context
.
Context
,
in
*
GetUserByUsernameRequest
,
opts
...
grpc
.
CallOption
)
(
*
User
,
error
)
// GetUserAvatarBinary gets the avatar of a user.
GetUserAvatarBinary
(
ctx
context
.
Context
,
in
*
GetUserAvatarBinaryRequest
,
opts
...
grpc
.
CallOption
)
(
*
httpbody
.
HttpBody
,
error
)
// CreateUser creates a new user.
...
...
@@ -89,20 +89,20 @@ func (c *userServiceClient) ListUsers(ctx context.Context, in *ListUsersRequest,
return
out
,
nil
}
func
(
c
*
userServiceClient
)
SearchUsers
(
ctx
context
.
Context
,
in
*
SearchUsersRequest
,
opts
...
grpc
.
CallOption
)
(
*
SearchUsersResponse
,
error
)
{
func
(
c
*
userServiceClient
)
GetUser
(
ctx
context
.
Context
,
in
*
GetUserRequest
,
opts
...
grpc
.
CallOption
)
(
*
User
,
error
)
{
cOpts
:=
append
([]
grpc
.
CallOption
{
grpc
.
StaticMethod
()},
opts
...
)
out
:=
new
(
SearchUsersResponse
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
UserService_
SearchUsers
_FullMethodName
,
in
,
out
,
cOpts
...
)
out
:=
new
(
User
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
UserService_
GetUser
_FullMethodName
,
in
,
out
,
cOpts
...
)
if
err
!=
nil
{
return
nil
,
err
}
return
out
,
nil
}
func
(
c
*
userServiceClient
)
GetUser
(
ctx
context
.
Context
,
in
*
GetUser
Request
,
opts
...
grpc
.
CallOption
)
(
*
User
,
error
)
{
func
(
c
*
userServiceClient
)
GetUser
ByUsername
(
ctx
context
.
Context
,
in
*
GetUserByUsername
Request
,
opts
...
grpc
.
CallOption
)
(
*
User
,
error
)
{
cOpts
:=
append
([]
grpc
.
CallOption
{
grpc
.
StaticMethod
()},
opts
...
)
out
:=
new
(
User
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
UserService_GetUser_FullMethodName
,
in
,
out
,
cOpts
...
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
UserService_GetUser
ByUsername
_FullMethodName
,
in
,
out
,
cOpts
...
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -225,10 +225,10 @@ func (c *userServiceClient) DeleteUserAccessToken(ctx context.Context, in *Delet
type
UserServiceServer
interface
{
// ListUsers returns a list of users.
ListUsers
(
context
.
Context
,
*
ListUsersRequest
)
(
*
ListUsersResponse
,
error
)
// SearchUsers searches users by filter.
SearchUsers
(
context
.
Context
,
*
SearchUsersRequest
)
(
*
SearchUsersResponse
,
error
)
// GetUser gets a user by name.
GetUser
(
context
.
Context
,
*
GetUserRequest
)
(
*
User
,
error
)
// GetUserByUsername gets a user by username.
GetUserByUsername
(
context
.
Context
,
*
GetUserByUsernameRequest
)
(
*
User
,
error
)
// GetUserAvatarBinary gets the avatar of a user.
GetUserAvatarBinary
(
context
.
Context
,
*
GetUserAvatarBinaryRequest
)
(
*
httpbody
.
HttpBody
,
error
)
// CreateUser creates a new user.
...
...
@@ -264,12 +264,12 @@ type UnimplementedUserServiceServer struct{}
func
(
UnimplementedUserServiceServer
)
ListUsers
(
context
.
Context
,
*
ListUsersRequest
)
(
*
ListUsersResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method ListUsers not implemented"
)
}
func
(
UnimplementedUserServiceServer
)
SearchUsers
(
context
.
Context
,
*
SearchUsersRequest
)
(
*
SearchUsersResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method SearchUsers not implemented"
)
}
func
(
UnimplementedUserServiceServer
)
GetUser
(
context
.
Context
,
*
GetUserRequest
)
(
*
User
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method GetUser not implemented"
)
}
func
(
UnimplementedUserServiceServer
)
GetUserByUsername
(
context
.
Context
,
*
GetUserByUsernameRequest
)
(
*
User
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method GetUserByUsername not implemented"
)
}
func
(
UnimplementedUserServiceServer
)
GetUserAvatarBinary
(
context
.
Context
,
*
GetUserAvatarBinaryRequest
)
(
*
httpbody
.
HttpBody
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method GetUserAvatarBinary not implemented"
)
}
...
...
@@ -342,38 +342,38 @@ func _UserService_ListUsers_Handler(srv interface{}, ctx context.Context, dec fu
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
func
_UserService_
SearchUsers
_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
SearchUsers
Request
)
func
_UserService_
GetUser
_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
GetUser
Request
)
if
err
:=
dec
(
in
);
err
!=
nil
{
return
nil
,
err
}
if
interceptor
==
nil
{
return
srv
.
(
UserServiceServer
)
.
SearchUsers
(
ctx
,
in
)
return
srv
.
(
UserServiceServer
)
.
GetUser
(
ctx
,
in
)
}
info
:=
&
grpc
.
UnaryServerInfo
{
Server
:
srv
,
FullMethod
:
UserService_
SearchUsers
_FullMethodName
,
FullMethod
:
UserService_
GetUser
_FullMethodName
,
}
handler
:=
func
(
ctx
context
.
Context
,
req
interface
{})
(
interface
{},
error
)
{
return
srv
.
(
UserServiceServer
)
.
SearchUsers
(
ctx
,
req
.
(
*
SearchUsers
Request
))
return
srv
.
(
UserServiceServer
)
.
GetUser
(
ctx
,
req
.
(
*
GetUser
Request
))
}
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
func
_UserService_GetUser_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
GetUserRequest
)
func
_UserService_GetUser
ByUsername
_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
GetUser
ByUsername
Request
)
if
err
:=
dec
(
in
);
err
!=
nil
{
return
nil
,
err
}
if
interceptor
==
nil
{
return
srv
.
(
UserServiceServer
)
.
GetUser
(
ctx
,
in
)
return
srv
.
(
UserServiceServer
)
.
GetUser
ByUsername
(
ctx
,
in
)
}
info
:=
&
grpc
.
UnaryServerInfo
{
Server
:
srv
,
FullMethod
:
UserService_GetUser_FullMethodName
,
FullMethod
:
UserService_GetUser
ByUsername
_FullMethodName
,
}
handler
:=
func
(
ctx
context
.
Context
,
req
interface
{})
(
interface
{},
error
)
{
return
srv
.
(
UserServiceServer
)
.
GetUser
(
ctx
,
req
.
(
*
GetUser
Request
))
return
srv
.
(
UserServiceServer
)
.
GetUser
ByUsername
(
ctx
,
req
.
(
*
GetUserByUsername
Request
))
}
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
...
...
@@ -587,14 +587,14 @@ var UserService_ServiceDesc = grpc.ServiceDesc{
MethodName
:
"ListUsers"
,
Handler
:
_UserService_ListUsers_Handler
,
},
{
MethodName
:
"SearchUsers"
,
Handler
:
_UserService_SearchUsers_Handler
,
},
{
MethodName
:
"GetUser"
,
Handler
:
_UserService_GetUser_Handler
,
},
{
MethodName
:
"GetUserByUsername"
,
Handler
:
_UserService_GetUserByUsername_Handler
,
},
{
MethodName
:
"GetUserAvatarBinary"
,
Handler
:
_UserService_GetUserAvatarBinary_Handler
,
...
...
proto/gen/apidocs.swagger.yaml
View file @
57014e39
...
...
@@ -459,24 +459,22 @@ paths:
$ref
:
'
#/definitions/googlerpcStatus'
tags
:
-
UserService
/api/v1/users:
search
:
/api/v1/users:
username
:
get
:
summary
:
SearchUsers searches users by filter
.
operationId
:
UserService_
SearchUsers
summary
:
GetUserByUsername gets a user by username
.
operationId
:
UserService_
GetUserByUsername
responses
:
"
200"
:
description
:
A successful response.
schema
:
$ref
:
'
#/definitions/v1
SearchUsersResponse
'
$ref
:
'
#/definitions/v1
User
'
default
:
description
:
An unexpected error response.
schema
:
$ref
:
'
#/definitions/googlerpcStatus'
parameters
:
-
name
:
filter
description
:
|-
Filter is used to filter users returned in the list.
Format: "username == 'frank'"
-
name
:
username
description
:
The username of the user.
in
:
query
required
:
false
type
:
string
...
...
@@ -2848,14 +2846,6 @@ definitions:
properties
:
markdown
:
type
:
string
v1SearchUsersResponse
:
type
:
object
properties
:
users
:
type
:
array
items
:
type
:
object
$ref
:
'
#/definitions/v1User'
v1SpoilerNode
:
type
:
object
properties
:
...
...
server/router/api/v1/resource_name.go
View file @
57014e39
...
...
@@ -15,7 +15,6 @@ const (
MemoNamePrefix
=
"memos/"
ResourceNamePrefix
=
"resources/"
InboxNamePrefix
=
"inboxes/"
StorageNamePrefix
=
"storages/"
IdentityProviderNamePrefix
=
"identityProviders/"
ActivityNamePrefix
=
"activities/"
)
...
...
@@ -95,19 +94,6 @@ func ExtractInboxIDFromName(name string) (int32, error) {
return
id
,
nil
}
// ExtractStorageIDFromName returns the storage ID from a resource name.
func
ExtractStorageIDFromName
(
name
string
)
(
int32
,
error
)
{
tokens
,
err
:=
GetNameParentTokens
(
name
,
StorageNamePrefix
)
if
err
!=
nil
{
return
0
,
err
}
id
,
err
:=
util
.
ConvertStringToInt32
(
tokens
[
0
])
if
err
!=
nil
{
return
0
,
errors
.
Errorf
(
"invalid storage ID %q"
,
tokens
[
0
])
}
return
id
,
nil
}
func
ExtractIdentityProviderIDFromName
(
name
string
)
(
int32
,
error
)
{
tokens
,
err
:=
GetNameParentTokens
(
name
,
IdentityProviderNamePrefix
)
if
err
!=
nil
{
...
...
server/router/api/v1/user_service.go
View file @
57014e39
...
...
@@ -11,11 +11,9 @@ import (
"time"
"github.com/golang-jwt/jwt/v5"
"github.com/google/cel-go/cel"
"github.com/labstack/echo/v4"
"github.com/pkg/errors"
"golang.org/x/crypto/bcrypt"
expr
"google.golang.org/genproto/googleapis/api/expr/v1alpha1"
"google.golang.org/genproto/googleapis/api/httpbody"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
...
...
@@ -51,46 +49,27 @@ func (s *APIV1Service) ListUsers(ctx context.Context, _ *v1pb.ListUsersRequest)
return
response
,
nil
}
func
(
s
*
APIV1Service
)
SearchUsers
(
ctx
context
.
Context
,
request
*
v1pb
.
SearchUsersRequest
)
(
*
v1pb
.
SearchUsersResponse
,
error
)
{
if
request
.
Filter
==
""
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"filter is empty"
)
}
filter
,
err
:=
parseSearchUsersFilter
(
request
.
Filter
)
func
(
s
*
APIV1Service
)
GetUser
(
ctx
context
.
Context
,
request
*
v1pb
.
GetUserRequest
)
(
*
v1pb
.
User
,
error
)
{
userID
,
err
:=
ExtractUserIDFromName
(
request
.
Name
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"failed to parse filter: %v"
,
err
)
}
userFind
:=
&
store
.
FindUser
{}
if
filter
.
Username
!=
nil
{
userFind
.
Username
=
filter
.
Username
}
if
filter
.
Random
{
userFind
.
Random
=
true
}
if
filter
.
Limit
!=
nil
{
userFind
.
Limit
=
filter
.
Limit
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid user name: %v"
,
err
)
}
users
,
err
:=
s
.
Store
.
ListUsers
(
ctx
,
userFind
)
user
,
err
:=
s
.
Store
.
GetUser
(
ctx
,
&
store
.
FindUser
{
ID
:
&
userID
,
})
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to search users: %v"
,
err
)
}
response
:=
&
v1pb
.
SearchUsersResponse
{
Users
:
[]
*
v1pb
.
User
{},
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to get user: %v"
,
err
)
}
for
_
,
user
:=
range
users
{
re
sponse
.
Users
=
append
(
response
.
Users
,
convertUserFromStore
(
user
)
)
if
user
==
nil
{
re
turn
nil
,
status
.
Errorf
(
codes
.
NotFound
,
"user not found"
)
}
return
response
,
nil
return
convertUserFromStore
(
user
),
nil
}
func
(
s
*
APIV1Service
)
GetUser
(
ctx
context
.
Context
,
request
*
v1pb
.
GetUserRequest
)
(
*
v1pb
.
User
,
error
)
{
userID
,
err
:=
ExtractUserIDFromName
(
request
.
Name
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid user name: %v"
,
err
)
}
func
(
s
*
APIV1Service
)
GetUserByUsername
(
ctx
context
.
Context
,
request
*
v1pb
.
GetUserByUsernameRequest
)
(
*
v1pb
.
User
,
error
)
{
user
,
err
:=
s
.
Store
.
GetUser
(
ctx
,
&
store
.
FindUser
{
ID
:
&
userID
,
Username
:
&
request
.
Username
,
})
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to get user: %v"
,
err
)
...
...
@@ -599,63 +578,6 @@ func convertUserRoleToStore(role v1pb.User_Role) store.Role {
}
}
// SearchUsersFilterCELAttributes are the CEL attributes for SearchUsersFilter.
var
SearchUsersFilterCELAttributes
=
[]
cel
.
EnvOption
{
cel
.
Variable
(
"username"
,
cel
.
StringType
),
cel
.
Variable
(
"random"
,
cel
.
BoolType
),
cel
.
Variable
(
"limit"
,
cel
.
IntType
),
}
type
SearchUsersFilter
struct
{
Username
*
string
Random
bool
Limit
*
int
}
func
parseSearchUsersFilter
(
expression
string
)
(
*
SearchUsersFilter
,
error
)
{
e
,
err
:=
cel
.
NewEnv
(
SearchUsersFilterCELAttributes
...
)
if
err
!=
nil
{
return
nil
,
err
}
ast
,
issues
:=
e
.
Compile
(
expression
)
if
issues
!=
nil
{
return
nil
,
errors
.
Errorf
(
"found issue %v"
,
issues
)
}
filter
:=
&
SearchUsersFilter
{}
expr
,
err
:=
cel
.
AstToParsedExpr
(
ast
)
if
err
!=
nil
{
return
nil
,
err
}
callExpr
:=
expr
.
GetExpr
()
.
GetCallExpr
()
findSearchUsersField
(
callExpr
,
filter
)
return
filter
,
nil
}
func
findSearchUsersField
(
callExpr
*
expr
.
Expr_Call
,
filter
*
SearchUsersFilter
)
{
if
len
(
callExpr
.
Args
)
==
2
{
idExpr
:=
callExpr
.
Args
[
0
]
.
GetIdentExpr
()
if
idExpr
!=
nil
{
if
idExpr
.
Name
==
"username"
{
username
:=
callExpr
.
Args
[
1
]
.
GetConstExpr
()
.
GetStringValue
()
filter
.
Username
=
&
username
}
else
if
idExpr
.
Name
==
"random"
{
random
:=
callExpr
.
Args
[
1
]
.
GetConstExpr
()
.
GetBoolValue
()
filter
.
Random
=
random
}
else
if
idExpr
.
Name
==
"limit"
{
limit
:=
int
(
callExpr
.
Args
[
1
]
.
GetConstExpr
()
.
GetInt64Value
())
filter
.
Limit
=
&
limit
}
return
}
}
for
_
,
arg
:=
range
callExpr
.
Args
{
callExpr
:=
arg
.
GetCallExpr
()
if
callExpr
!=
nil
{
findSearchUsersField
(
callExpr
,
filter
)
}
}
}
func
extractImageInfo
(
dataURI
string
)
(
string
,
string
,
error
)
{
dataURIRegex
:=
regexp
.
MustCompile
(
`^data:(?P<type>.+);base64,(?P<base64>.+)`
)
matches
:=
dataURIRegex
.
FindStringSubmatch
(
dataURI
)
...
...
web/src/pages/UserProfile.tsx
View file @
57014e39
...
...
@@ -32,12 +32,8 @@ const UserProfile = () => {
}
userStore
.
searchUsers
(
`username == "
${
username
}
"`
)
.
then
((
users
)
=>
{
if
(
users
.
length
!==
1
)
{
throw
new
Error
(
"User not found"
);
}
const
user
=
users
[
0
];
.
fetchUserByUsername
(
username
)
.
then
((
user
)
=>
{
setUser
(
user
);
loadingState
.
setFinish
();
})
...
...
web/src/store/v1/user.ts
View file @
57014e39
...
...
@@ -63,19 +63,15 @@ export const useUserStore = create(
set
({
userMapByName
:
userMap
});
return
user
;
},
listUsers
:
async
(
)
=>
{
const
{
users
}
=
await
userServiceClient
.
listUsers
({
});
fetchUserByUsername
:
async
(
username
:
string
)
=>
{
const
user
=
await
userServiceClient
.
getUserByUsername
({
username
});
const
userMap
=
get
().
userMapByName
;
for
(
const
user
of
users
)
{
userMap
[
user
.
name
]
=
user
;
}
userMap
[
user
.
name
]
=
user
;
set
({
userMapByName
:
userMap
});
return
user
s
;
return
user
;
},
searchUsers
:
async
(
filter
:
string
)
=>
{
const
{
users
}
=
await
userServiceClient
.
searchUsers
({
filter
,
});
listUsers
:
async
()
=>
{
const
{
users
}
=
await
userServiceClient
.
listUsers
({});
const
userMap
=
get
().
userMapByName
;
for
(
const
user
of
users
)
{
userMap
[
user
.
name
]
=
user
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment