Commit a8642c81 authored by Matt Butcher's avatar Matt Butcher

fix(helm,tiller): change list offset to next result

Previously, paging used the last release name of the current set to ask
for more results. Now switched to using the first name of the next set.

Not sure I like this method. It makes the user experience more
complicated.
parent 6844d3b4
...@@ -63,9 +63,9 @@ message ListReleasesRequest { ...@@ -63,9 +63,9 @@ message ListReleasesRequest {
// Offset is the last release name that was seen. The next listing // Offset is the last release name that was seen. The next listing
// operation will start with the name after this one. // operation will start with the name after this one.
// Example: If list one returns albert, bernie, carl and we supply // Example: If list one returns albert, bernie, carl, and sets 'next: dennis'.
// carl as the offset, the next one should begin with the next release name // dennis is the offset. Supplying 'dennis' for the next request should
// after carl (e.g. dennis). // cause the next batch to return a set of results starting with 'dennis'.
string offset = 2; string offset = 2;
// SortBy is the sort field that the ListReleases server should sort data before returning. // SortBy is the sort field that the ListReleases server should sort data before returning.
...@@ -100,17 +100,15 @@ message ListReleasesResponse { ...@@ -100,17 +100,15 @@ message ListReleasesResponse {
// Count is the expected total number of releases to be returned. // Count is the expected total number of releases to be returned.
int64 count = 1; int64 count = 1;
// Offset is the last-seen release name, used to offset the next set. // Next is the name of the next release. If this is other than an empty
string offset = 2; // string, it means there are more results.
string next = 2;
// Total is the total number of queryable releases. // Total is the total number of queryable releases.
int64 total = 3; int64 total = 3;
// Releases is the list of found release objects. // Releases is the list of found release objects.
repeated hapi.release.Release releases = 4; repeated hapi.release.Release releases = 4;
// More indicates whether there are more objects to retrieve.
bool more = 5;
} }
// GetReleaseStatusRequest is a request to get the status of a release. // GetReleaseStatusRequest is a request to get the status of a release.
......
...@@ -57,7 +57,7 @@ func init() { ...@@ -57,7 +57,7 @@ func init() {
f.BoolVarP(&listByDate, "date", "d", false, "sort by release date") f.BoolVarP(&listByDate, "date", "d", false, "sort by release date")
f.BoolVarP(&listSortDesc, "reverse", "r", false, "reverse the sort order") f.BoolVarP(&listSortDesc, "reverse", "r", false, "reverse the sort order")
f.IntVarP(&listMax, "max", "m", 256, "maximum number of releases to fetch") f.IntVarP(&listMax, "max", "m", 256, "maximum number of releases to fetch")
f.StringVarP(&listOffset, "offset", "o", "", "the last seen release name, used to offset from start value") f.StringVarP(&listOffset, "offset", "o", "", "the next release name in the list, used to offset from start value")
RootCommand.AddCommand(listCommand) RootCommand.AddCommand(listCommand)
} }
...@@ -83,6 +83,10 @@ func listCmd(cmd *cobra.Command, args []string) error { ...@@ -83,6 +83,10 @@ func listCmd(cmd *cobra.Command, args []string) error {
return prettyError(err) return prettyError(err)
} }
if res.Next != "" {
fmt.Printf("\tnext: %s", res.Next)
}
rels := res.Releases rels := res.Releases
if listLong { if listLong {
return formatList(rels) return formatList(rels)
......
...@@ -44,7 +44,6 @@ var ( ...@@ -44,7 +44,6 @@ var (
var ListDefaultLimit int64 = 512 var ListDefaultLimit int64 = 512
func (s *releaseServer) ListReleases(req *services.ListReleasesRequest, stream services.ReleaseService_ListReleasesServer) error { func (s *releaseServer) ListReleases(req *services.ListReleasesRequest, stream services.ReleaseService_ListReleasesServer) error {
more := false
rels, err := s.env.Releases.List() rels, err := s.env.Releases.List()
if err != nil { if err != nil {
return err return err
...@@ -81,7 +80,7 @@ func (s *releaseServer) ListReleases(req *services.ListReleasesRequest, stream s ...@@ -81,7 +80,7 @@ func (s *releaseServer) ListReleases(req *services.ListReleasesRequest, stream s
i := -1 i := -1
for ii, cur := range rels { for ii, cur := range rels {
if cur.Name == req.Offset { if cur.Name == req.Offset {
i = ii + 1 i = ii
} }
} }
if i == -1 { if i == -1 {
...@@ -100,22 +99,18 @@ func (s *releaseServer) ListReleases(req *services.ListReleasesRequest, stream s ...@@ -100,22 +99,18 @@ func (s *releaseServer) ListReleases(req *services.ListReleasesRequest, stream s
req.Limit = ListDefaultLimit req.Limit = ListDefaultLimit
} }
next := ""
if l > req.Limit { if l > req.Limit {
more = true next = rels[req.Limit].Name
rels = rels[0:req.Limit] rels = rels[0:req.Limit]
l = int64(len(rels)) l = int64(len(rels))
} }
last := ""
if l > 0 {
last = rels[l-1].Name
}
res := &services.ListReleasesResponse{ res := &services.ListReleasesResponse{
Offset: last, Next: next,
Count: l, Count: l,
Total: total, Total: total,
Releases: rels, Releases: rels,
More: more,
} }
stream.Send(res) stream.Send(res)
return nil return nil
......
...@@ -135,14 +135,13 @@ func (*ListSort) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} ...@@ -135,14 +135,13 @@ func (*ListSort) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1}
type ListReleasesResponse struct { type ListReleasesResponse struct {
// Count is the expected total number of releases to be returned. // Count is the expected total number of releases to be returned.
Count int64 `protobuf:"varint,1,opt,name=count" json:"count,omitempty"` Count int64 `protobuf:"varint,1,opt,name=count" json:"count,omitempty"`
// Offset is the last-seen release name, used to offset the next set. // Next is the name of the next release. If this is other than an empty
Offset string `protobuf:"bytes,2,opt,name=offset" json:"offset,omitempty"` // string, it means there are more results.
Next string `protobuf:"bytes,2,opt,name=next" json:"next,omitempty"`
// Total is the total number of queryable releases. // Total is the total number of queryable releases.
Total int64 `protobuf:"varint,3,opt,name=total" json:"total,omitempty"` Total int64 `protobuf:"varint,3,opt,name=total" json:"total,omitempty"`
// Releases is the list of found release objects. // Releases is the list of found release objects.
Releases []*hapi_release2.Release `protobuf:"bytes,4,rep,name=releases" json:"releases,omitempty"` Releases []*hapi_release2.Release `protobuf:"bytes,4,rep,name=releases" json:"releases,omitempty"`
// More indicates whether there are more objects to retrieve.
More bool `protobuf:"varint,5,opt,name=more" json:"more,omitempty"`
} }
func (m *ListReleasesResponse) Reset() { *m = ListReleasesResponse{} } func (m *ListReleasesResponse) Reset() { *m = ListReleasesResponse{} }
...@@ -583,49 +582,48 @@ var _ReleaseService_serviceDesc = grpc.ServiceDesc{ ...@@ -583,49 +582,48 @@ var _ReleaseService_serviceDesc = grpc.ServiceDesc{
} }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 689 bytes of a gzipped FileDescriptorProto // 682 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x55, 0xdd, 0x6e, 0xd3, 0x4c, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x55, 0xdd, 0x4e, 0x13, 0x41,
0x10, 0xad, 0x9b, 0x34, 0x3f, 0xd3, 0xaf, 0x55, 0x3a, 0x5f, 0x9a, 0x04, 0x5f, 0x20, 0xb4, 0x12, 0x14, 0x66, 0x69, 0x69, 0xcb, 0x41, 0x48, 0x39, 0x96, 0xb6, 0xee, 0x85, 0x31, 0x93, 0xa8, 0x88,
0x50, 0x0a, 0x75, 0x20, 0xdc, 0x23, 0xa5, 0x6d, 0x54, 0x55, 0x0d, 0xa9, 0xb4, 0xa1, 0x20, 0x71, 0xb2, 0xd5, 0x7a, 0x6f, 0x52, 0xa0, 0x21, 0x84, 0x5a, 0x92, 0xa9, 0x68, 0xe2, 0x85, 0x64, 0x81,
0x41, 0xe5, 0xb6, 0x1b, 0x6a, 0xe4, 0xd8, 0xc1, 0xbb, 0xa9, 0xd4, 0x07, 0xe0, 0x41, 0x78, 0x0b, 0xa9, 0xac, 0x59, 0x76, 0xeb, 0xce, 0x94, 0xc8, 0x03, 0x78, 0xe1, 0x1b, 0xf9, 0x40, 0x3e, 0x88,
0x1e, 0x88, 0x07, 0x61, 0xbd, 0xeb, 0xb5, 0xea, 0xd4, 0x86, 0xa8, 0x37, 0xf6, 0xae, 0xcf, 0xd9, 0xb3, 0x33, 0x3b, 0x1b, 0xb6, 0xdd, 0xd5, 0x86, 0x9b, 0xdd, 0x39, 0xfb, 0x7d, 0xe7, 0x7c, 0x67,
0x39, 0xb3, 0x67, 0x66, 0x12, 0xb0, 0xaf, 0xdd, 0x99, 0xd7, 0xe5, 0x2c, 0xba, 0xf1, 0x2e, 0x19, 0xce, 0x4f, 0x0b, 0xf6, 0x95, 0x3b, 0xf1, 0x3a, 0x9c, 0x45, 0x37, 0xde, 0x05, 0xe3, 0x1d, 0xe1,
0xef, 0x0a, 0xcf, 0xf7, 0x59, 0xe4, 0xcc, 0xa2, 0x50, 0x84, 0xd8, 0x8c, 0x31, 0xc7, 0x60, 0x8e, 0xf9, 0x3e, 0x8b, 0x9c, 0x49, 0x14, 0x8a, 0x10, 0x1b, 0x31, 0xe6, 0x18, 0xcc, 0xd1, 0x98, 0xdd,
0xc6, 0xec, 0x96, 0x3a, 0x71, 0x79, 0xed, 0x46, 0x42, 0x3f, 0x35, 0xdb, 0x6e, 0xdf, 0xfd, 0x1e, 0x54, 0x1e, 0x17, 0x57, 0x6e, 0x24, 0xf4, 0x53, 0xb3, 0xed, 0xd6, 0xdd, 0xef, 0x61, 0x30, 0xf6,
0x06, 0x13, 0xef, 0x6b, 0x02, 0x68, 0x89, 0x88, 0xf9, 0xcc, 0xe5, 0xcc, 0xbc, 0x33, 0x87, 0x0c, 0xbe, 0x26, 0x80, 0x96, 0x88, 0x98, 0xcf, 0x5c, 0xce, 0xcc, 0x3b, 0xe3, 0x64, 0x30, 0x2f, 0x18,
0xe6, 0x05, 0x93, 0x50, 0x03, 0xe4, 0xb7, 0x05, 0xff, 0x0f, 0x3d, 0x2e, 0xa8, 0x86, 0x38, 0x65, 0x87, 0x1a, 0x20, 0x7f, 0x2c, 0x78, 0x38, 0xf0, 0xb8, 0xa0, 0x1a, 0xe2, 0x94, 0x7d, 0x9f, 0x32,
0xdf, 0xe7, 0x8c, 0x0b, 0x6c, 0xc2, 0x9a, 0xef, 0x4d, 0x3d, 0xd1, 0xb1, 0x9e, 0x58, 0x3b, 0x25, 0x2e, 0xb0, 0x01, 0x2b, 0xbe, 0x77, 0xed, 0x89, 0xb6, 0xf5, 0xc4, 0xda, 0x2e, 0x51, 0x6d, 0x60,
0xaa, 0x37, 0xd8, 0x82, 0x4a, 0x38, 0x99, 0x70, 0x26, 0x3a, 0xab, 0xf2, 0x73, 0x9d, 0x26, 0x3b, 0x13, 0x2a, 0xe1, 0x78, 0xcc, 0x99, 0x68, 0x2f, 0xcb, 0xcf, 0xab, 0x34, 0xb1, 0xf0, 0x1d, 0x54,
0x7c, 0x07, 0x55, 0x1e, 0x46, 0xe2, 0xfc, 0xe2, 0xb6, 0x53, 0x92, 0xc0, 0x66, 0xef, 0xa9, 0x93, 0x79, 0x18, 0x89, 0xb3, 0xf3, 0xdb, 0x76, 0x49, 0x02, 0x1b, 0xdd, 0xa7, 0x4e, 0xde, 0x9d, 0x9c,
0x77, 0x27, 0x27, 0x56, 0x1a, 0x4b, 0xa2, 0x13, 0x3f, 0xf6, 0x6f, 0x69, 0x85, 0xab, 0x77, 0x1c, 0x58, 0x69, 0x24, 0x89, 0x4e, 0xfc, 0xd8, 0xbb, 0xa5, 0x15, 0xae, 0xde, 0x71, 0xdc, 0xb1, 0xe7,
0x77, 0xe2, 0xf9, 0x82, 0x45, 0x9d, 0xb2, 0x8e, 0xab, 0x77, 0x78, 0x04, 0xa0, 0xe2, 0x86, 0xd1, 0x0b, 0x16, 0xb5, 0xcb, 0x3a, 0xae, 0xb6, 0xf0, 0x10, 0x40, 0xc5, 0x0d, 0xa3, 0x4b, 0x89, 0xad,
0x95, 0xc4, 0xd6, 0x54, 0xe8, 0x9d, 0x25, 0x42, 0x9f, 0xc6, 0x7c, 0x5a, 0xe7, 0x66, 0x49, 0xbe, 0xa8, 0xd0, 0xdb, 0x0b, 0x84, 0x3e, 0x89, 0xf9, 0x74, 0x95, 0x9b, 0x23, 0xf9, 0x02, 0x35, 0x43,
0x40, 0xcd, 0x10, 0x48, 0x0f, 0x2a, 0x5a, 0x1e, 0xd7, 0xa1, 0x7a, 0x36, 0x3a, 0x19, 0x9d, 0x7e, 0x20, 0x5d, 0xa8, 0x68, 0x79, 0x5c, 0x83, 0xea, 0xe9, 0xf0, 0x78, 0x78, 0xf2, 0x69, 0x58, 0x5f,
0x1a, 0x35, 0x56, 0xb0, 0x06, 0xe5, 0x51, 0xff, 0xfd, 0xa0, 0x61, 0xe1, 0x16, 0x6c, 0x0c, 0xfb, 0xc2, 0x1a, 0x94, 0x87, 0xbd, 0xf7, 0xfd, 0xba, 0x85, 0x9b, 0xb0, 0x3e, 0xe8, 0x8d, 0x3e, 0x9c,
0xe3, 0x0f, 0xe7, 0x74, 0x30, 0x1c, 0xf4, 0xc7, 0x83, 0xc3, 0xc6, 0x2a, 0x79, 0x0c, 0xf5, 0x34, 0xd1, 0xfe, 0xa0, 0xdf, 0x1b, 0xf5, 0x0f, 0xea, 0xcb, 0xe4, 0x31, 0xac, 0xa6, 0x71, 0xb1, 0x0a,
0x2e, 0x56, 0xa1, 0xd4, 0x1f, 0x1f, 0xe8, 0x23, 0x87, 0x03, 0xb9, 0xb2, 0xc8, 0x4f, 0x0b, 0x9a, 0xa5, 0xde, 0x68, 0x5f, 0xbb, 0x1c, 0xf4, 0xe5, 0xc9, 0x22, 0xbf, 0x2c, 0x68, 0x64, 0xcb, 0xc8,
0x59, 0x1b, 0xf9, 0x2c, 0x0c, 0x38, 0x8b, 0x7d, 0xbc, 0x0c, 0xe7, 0x41, 0xea, 0xa3, 0xda, 0x14, 0x27, 0x61, 0xc0, 0x59, 0x5c, 0xc7, 0x8b, 0x70, 0x1a, 0xa4, 0x75, 0x54, 0x06, 0x22, 0x94, 0x03,
0xfa, 0x28, 0xd9, 0x22, 0x14, 0xae, 0xaf, 0x5c, 0x94, 0x6c, 0xb5, 0xc1, 0x37, 0x50, 0x4b, 0x2a, 0xf6, 0xc3, 0x54, 0x51, 0x9d, 0x63, 0xa6, 0x08, 0x85, 0xeb, 0xab, 0x0a, 0x4a, 0xa6, 0x32, 0xf0,
0xc7, 0xa5, 0x3f, 0xa5, 0x9d, 0xf5, 0xde, 0xb6, 0xf6, 0xc0, 0xd4, 0x38, 0x51, 0xa5, 0x29, 0x0d, 0x0d, 0xd4, 0x92, 0xae, 0x71, 0x59, 0x9b, 0xd2, 0xf6, 0x5a, 0x77, 0x4b, 0xdf, 0xdf, 0xf4, 0x37,
0x11, 0xca, 0xd3, 0x30, 0x62, 0xca, 0xb2, 0x1a, 0x55, 0x6b, 0xb2, 0x07, 0xed, 0x23, 0x66, 0x32, 0x51, 0xa4, 0x29, 0x8d, 0xec, 0x42, 0xeb, 0x90, 0x99, 0x4c, 0x46, 0xc2, 0x15, 0xd3, 0xb4, 0xab,
0x1c, 0x0b, 0x57, 0xcc, 0xd3, 0x6a, 0x4b, 0x7a, 0xe0, 0x4e, 0x99, 0x4a, 0xb2, 0x4e, 0xd5, 0x9a, 0xb1, 0xae, 0x7b, 0xcd, 0x54, 0x32, 0xb1, 0xae, 0x3c, 0x93, 0x8f, 0xd0, 0x9e, 0xa7, 0x27, 0xd9,
0x7c, 0x84, 0xce, 0x7d, 0x7a, 0x72, 0xab, 0x1c, 0x3e, 0x3e, 0x83, 0x72, 0xdc, 0x57, 0xea, 0x46, 0xe7, 0xf0, 0xf1, 0x19, 0x94, 0xe3, 0xf9, 0x51, 0xb9, 0xaf, 0x75, 0x31, 0x9b, 0xcd, 0x91, 0x44,
0xeb, 0x3d, 0xcc, 0x66, 0x78, 0x2c, 0x11, 0xaa, 0x70, 0xe2, 0xdc, 0x8d, 0x7b, 0x10, 0x06, 0x82, 0xa8, 0xc2, 0x89, 0x73, 0x37, 0xee, 0x7e, 0x18, 0x08, 0x16, 0x88, 0x7f, 0xe5, 0x31, 0x80, 0x47,
0x05, 0xe2, 0x6f, 0x79, 0x0c, 0xe1, 0x51, 0x0e, 0x3f, 0x49, 0xa4, 0x0b, 0xd5, 0x44, 0x42, 0x9d, 0x39, 0xfc, 0x24, 0x91, 0x0e, 0x54, 0x13, 0x09, 0xe5, 0x53, 0x58, 0x05, 0xc3, 0x22, 0x4d, 0x68,
0x29, 0x74, 0xc6, 0xb0, 0x48, 0x0b, 0x9a, 0x67, 0xb3, 0x2b, 0x57, 0x30, 0x83, 0x68, 0x65, 0xd2, 0x9c, 0x4e, 0x2e, 0x5d, 0xc1, 0x0c, 0xa2, 0x95, 0x49, 0x0b, 0xb6, 0x66, 0xbe, 0x6b, 0x05, 0xf2,
0x86, 0xed, 0x85, 0xef, 0x5a, 0x81, 0xfc, 0xb0, 0x60, 0xfb, 0x38, 0xe0, 0xb2, 0x0e, 0x7e, 0xf6, 0xd3, 0x82, 0xad, 0xa3, 0x80, 0xcb, 0x9a, 0xfb, 0x59, 0x17, 0x7c, 0x2e, 0x5b, 0x18, 0x6f, 0x5b,
0x08, 0x3e, 0x97, 0xa5, 0x8d, 0xa7, 0x30, 0x51, 0xde, 0xd2, 0xca, 0x7a, 0x54, 0x0f, 0xe2, 0x27, 0xa2, 0xbc, 0xa9, 0x95, 0xf5, 0x4a, 0xee, 0xc7, 0x4f, 0xaa, 0x71, 0xdc, 0x81, 0xca, 0x8d, 0xeb,
0xd5, 0x38, 0xee, 0x42, 0xe5, 0xc6, 0xf5, 0xe5, 0x99, 0xac, 0x37, 0x09, 0x53, 0x8d, 0x30, 0x4d, 0x4b, 0x9f, 0x6c, 0x6d, 0x12, 0xa6, 0x5a, 0x55, 0x9a, 0x30, 0xb0, 0x05, 0xd5, 0xcb, 0xe8, 0xf6,
0x18, 0xd8, 0x86, 0xea, 0x55, 0x74, 0x7b, 0x1e, 0xcd, 0x03, 0xd5, 0x03, 0x35, 0x5a, 0x91, 0x5b, 0x2c, 0x9a, 0x06, 0xaa, 0xdf, 0x35, 0x5a, 0x91, 0x26, 0x9d, 0x06, 0xe4, 0x08, 0x9a, 0xb3, 0x69,
0x3a, 0x0f, 0xc8, 0x31, 0xb4, 0x16, 0xd3, 0x78, 0xa8, 0x07, 0xb2, 0x11, 0xce, 0x02, 0x2f, 0xf7, 0xdc, 0xb7, 0x06, 0x72, 0x10, 0x4e, 0x03, 0x2f, 0xf7, 0x4e, 0x79, 0x0d, 0x38, 0x86, 0xf6, 0x3c,
0x4e, 0x79, 0x05, 0x38, 0x81, 0xce, 0x7d, 0xfa, 0x03, 0xb5, 0x7b, 0xbf, 0xd6, 0x60, 0xd3, 0xf4, 0xfd, 0x9e, 0xda, 0xdd, 0xdf, 0x2b, 0xb0, 0x61, 0x66, 0x4a, 0x6f, 0x2a, 0x7a, 0xf0, 0xe0, 0xee,
0x94, 0x9e, 0x60, 0xf4, 0xe0, 0xbf, 0xbb, 0xa3, 0x83, 0x2f, 0x8a, 0x07, 0x7c, 0xe1, 0x57, 0xca, 0x8a, 0xe0, 0x8b, 0xe2, 0x45, 0x9e, 0xf9, 0x35, 0xb2, 0x77, 0x16, 0xa1, 0x26, 0x8d, 0x5c, 0x7a,
0xde, 0x5d, 0x86, 0x9a, 0x14, 0x72, 0xe5, 0xb5, 0x85, 0x1c, 0x1a, 0x8b, 0x3d, 0x8d, 0x7b, 0xf9, 0x6d, 0x21, 0x87, 0xfa, 0xec, 0x4c, 0xe3, 0x6e, 0x7e, 0x8c, 0x82, 0x55, 0xb1, 0x9d, 0x45, 0xe9,
0x31, 0x0a, 0x46, 0xc5, 0x76, 0x96, 0xa5, 0x1b, 0x59, 0xbc, 0x81, 0xad, 0x7b, 0x0d, 0x8c, 0xff, 0x46, 0x16, 0x6f, 0x60, 0x73, 0x6e, 0x80, 0xf1, 0xbf, 0x61, 0xb2, 0x9b, 0x61, 0x77, 0x16, 0xe6,
0x0c, 0x93, 0x9d, 0x0c, 0xbb, 0xbb, 0x34, 0x3f, 0xd5, 0xfd, 0x06, 0x1b, 0x99, 0x96, 0xc6, 0x02, 0xa7, 0xba, 0xdf, 0x60, 0x3d, 0x33, 0xd2, 0x58, 0x50, 0xad, 0xbc, 0x7d, 0xb0, 0x5f, 0x2e, 0xc4,
0xb7, 0xf2, 0xe6, 0xc1, 0x7e, 0xb9, 0x14, 0x37, 0xd5, 0x9a, 0xc2, 0x66, 0xb6, 0x3b, 0xb1, 0x20, 0x4d, 0xb5, 0xae, 0x61, 0x23, 0x3b, 0x9d, 0x58, 0x10, 0x20, 0x77, 0x95, 0xec, 0x57, 0x8b, 0x91,
0x40, 0xee, 0x28, 0xd9, 0xaf, 0x96, 0x23, 0xa7, 0x72, 0xb2, 0x8e, 0x8b, 0x2d, 0x59, 0x54, 0xc7, 0x53, 0x39, 0xd9, 0xc7, 0xd9, 0x91, 0x2c, 0xea, 0x63, 0xc1, 0xa4, 0x17, 0xf5, 0xb1, 0x68, 0xd2,
0x82, 0x4e, 0x2f, 0xaa, 0x63, 0x51, 0xa7, 0x93, 0x95, 0x7d, 0xf8, 0x5c, 0x33, 0xec, 0x8b, 0x8a, 0xc9, 0xd2, 0x1e, 0x7c, 0xae, 0x19, 0xf6, 0x79, 0x45, 0xfd, 0x4b, 0xbe, 0xfd, 0x1b, 0x00, 0x00,
0xfa, 0xf7, 0x7c, 0xfb, 0x27, 0x00, 0x00, 0xff, 0xff, 0x81, 0xdd, 0x53, 0x62, 0xd7, 0x07, 0x00, 0xff, 0xff, 0x9a, 0xaa, 0x47, 0x7a, 0xbf, 0x07, 0x00, 0x00,
0x00,
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment