Commit 3fcb74f9 authored by jiangpeng's avatar jiangpeng

dapp/vote:classify vote with status

parent 3dc1c260
...@@ -13,6 +13,7 @@ import ( ...@@ -13,6 +13,7 @@ import (
func createGroupCMD() *cobra.Command { func createGroupCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "createGroup", Use: "createGroup",
Aliases: []string{"cg"},
Short: "create tx(create vote group)", Short: "create tx(create vote group)",
Run: createGroup, Run: createGroup,
Example: "createGroup -n=group1 -a=admin1 -m=member1 -m=member2", Example: "createGroup -n=group1 -a=admin1 -m=member1 -m=member2",
...@@ -64,6 +65,7 @@ func createGroup(cmd *cobra.Command, args []string) { ...@@ -64,6 +65,7 @@ func createGroup(cmd *cobra.Command, args []string) {
func updateGroupCMD() *cobra.Command { func updateGroupCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "updateGroup", Use: "updateGroup",
Aliases: []string{"ug"},
Short: "create tx(update group members or admin)", Short: "create tx(update group members or admin)",
Run: updateGroup, Run: updateGroup,
Example: "updateGroup -g=id -a=addMember1 -a=addMember2 -r=removeMember1 ...", Example: "updateGroup -g=id -a=addMember1 -a=addMember2 -r=removeMember1 ...",
...@@ -74,11 +76,11 @@ func updateGroupCMD() *cobra.Command { ...@@ -74,11 +76,11 @@ func updateGroupCMD() *cobra.Command {
func updateGroupFlags(cmd *cobra.Command) { func updateGroupFlags(cmd *cobra.Command) {
cmd.Flags().StringP("groupID", "g", "", "group id") cmd.Flags().StringP("groupID", "g", "", "group id")
cmd.Flags().StringArrayP("addMembers", "a", nil, "group member address array for adding") cmd.Flags().StringArrayP("addMembers", "m", nil, "group member address array for adding")
cmd.Flags().UintSliceP("weights", "w", nil, "member vote weight array for adding") cmd.Flags().UintSliceP("weights", "w", nil, "member vote weight array for adding")
cmd.Flags().StringArrayP("removeMembers", "r", nil, "group member address array for removing") cmd.Flags().StringArrayP("removeMembers", "v", nil, "group member address array for removing")
cmd.Flags().StringArrayP("addAdmins", "d", nil, "group admin address array for adding") cmd.Flags().StringArrayP("addAdmins", "a", nil, "group admin address array for adding")
cmd.Flags().StringArrayP("removeAdmins", "m", nil, "group admin address array for removing") cmd.Flags().StringArrayP("removeAdmins", "r", nil, "group admin address array for removing")
markRequired(cmd, "groupID") markRequired(cmd, "groupID")
} }
...@@ -121,6 +123,7 @@ func updateGroup(cmd *cobra.Command, args []string) { ...@@ -121,6 +123,7 @@ func updateGroup(cmd *cobra.Command, args []string) {
func createVoteCMD() *cobra.Command { func createVoteCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "createVote", Use: "createVote",
Aliases: []string{"ctv"},
Short: "create tx(create vote)", Short: "create tx(create vote)",
Run: createVote, Run: createVote,
} }
...@@ -181,6 +184,7 @@ func createVote(cmd *cobra.Command, args []string) { ...@@ -181,6 +184,7 @@ func createVote(cmd *cobra.Command, args []string) {
func commitVoteCMD() *cobra.Command { func commitVoteCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "commitVote", Use: "commitVote",
Aliases: []string{"cmv"},
Short: "create tx(commit vote)", Short: "create tx(commit vote)",
Run: commitVote, Run: commitVote,
} }
...@@ -212,6 +216,7 @@ func commitVote(cmd *cobra.Command, args []string) { ...@@ -212,6 +216,7 @@ func commitVote(cmd *cobra.Command, args []string) {
func closeVoteCMD() *cobra.Command { func closeVoteCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "closeVote", Use: "closeVote",
Aliases: []string{"csv"},
Short: "create tx(close vote)", Short: "create tx(close vote)",
Run: closeVote, Run: closeVote,
} }
...@@ -240,6 +245,7 @@ func closeVote(cmd *cobra.Command, args []string) { ...@@ -240,6 +245,7 @@ func closeVote(cmd *cobra.Command, args []string) {
func updateMemberCMD() *cobra.Command { func updateMemberCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "updateMember", Use: "updateMember",
Aliases: []string{"um"},
Short: "create tx(update member name)", Short: "create tx(update member name)",
Run: updateMember, Run: updateMember,
} }
......
...@@ -12,6 +12,7 @@ import ( ...@@ -12,6 +12,7 @@ import (
func groupInfoCMD() *cobra.Command { func groupInfoCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "groupInfo", Use: "groupInfo",
Aliases: []string{"gf"},
Short: "get group infos", Short: "get group infos",
Run: groupInfo, Run: groupInfo,
Example: "groupInfo -g=id1 -g=id2...", Example: "groupInfo -g=id1 -g=id2...",
...@@ -42,6 +43,7 @@ func groupInfo(cmd *cobra.Command, args []string) { ...@@ -42,6 +43,7 @@ func groupInfo(cmd *cobra.Command, args []string) {
func voteInfoCMD() *cobra.Command { func voteInfoCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "voteInfo", Use: "voteInfo",
Aliases: []string{"vf"},
Short: "get vote info", Short: "get vote info",
Run: voteInfo, Run: voteInfo,
} }
...@@ -71,6 +73,7 @@ func voteInfo(cmd *cobra.Command, args []string) { ...@@ -71,6 +73,7 @@ func voteInfo(cmd *cobra.Command, args []string) {
func memberInfoCMD() *cobra.Command { func memberInfoCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "memberInfo", Use: "memberInfo",
Aliases: []string{"mf"},
Short: "get member info", Short: "get member info",
Run: memberInfo, Run: memberInfo,
} }
...@@ -100,6 +103,7 @@ func memberInfo(cmd *cobra.Command, args []string) { ...@@ -100,6 +103,7 @@ func memberInfo(cmd *cobra.Command, args []string) {
func listGroupCMD() *cobra.Command { func listGroupCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "listGroup", Use: "listGroup",
Aliases: []string{"lg"},
Short: "show group list", Short: "show group list",
Run: listGroup, Run: listGroup,
} }
...@@ -114,6 +118,7 @@ func listGroup(cmd *cobra.Command, args []string) { ...@@ -114,6 +118,7 @@ func listGroup(cmd *cobra.Command, args []string) {
func listVoteCMD() *cobra.Command { func listVoteCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "listVote", Use: "listVote",
Aliases: []string{"lv"},
Short: "show vote list", Short: "show vote list",
Run: listVote, Run: listVote,
} }
...@@ -122,15 +127,18 @@ func listVoteCMD() *cobra.Command { ...@@ -122,15 +127,18 @@ func listVoteCMD() *cobra.Command {
} }
func listVoteFlags(cmd *cobra.Command) { func listVoteFlags(cmd *cobra.Command) {
cmd.Flags().StringP("groupID", "g", "", "list vote belongs to specified group, list all if not set") cmd.Flags().StringP("groupID", "g", "", "list vote belongs to specified group, list all if not set")
cmd.Flags().Uint32P("status", "t", 0, "vote status")
listCmdFlags(cmd) listCmdFlags(cmd)
} }
func listVote(cmd *cobra.Command, args []string) { func listVote(cmd *cobra.Command, args []string) {
groupID, _ := cmd.Flags().GetString("groupID") groupID, _ := cmd.Flags().GetString("groupID")
status, _ := cmd.Flags().GetUint32("status")
listReq := getListReq(cmd) listReq := getListReq(cmd)
req := &vty.ReqListVote{ req := &vty.ReqListVote{
GroupID: groupID, GroupID: groupID,
ListReq: listReq, ListReq: listReq,
Status: status,
} }
sendQueryRPC(cmd, "ListVote", req, &vty.ReplyVoteList{}) sendQueryRPC(cmd, "ListVote", req, &vty.ReplyVoteList{})
} }
...@@ -138,6 +146,7 @@ func listVote(cmd *cobra.Command, args []string) { ...@@ -138,6 +146,7 @@ func listVote(cmd *cobra.Command, args []string) {
func listMemberCMD() *cobra.Command { func listMemberCMD() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "listMember", Use: "listMember",
Aliases: []string{"lm"},
Short: "show member list", Short: "show member list",
Run: listMember, Run: listMember,
} }
...@@ -151,7 +160,7 @@ func listMember(cmd *cobra.Command, args []string) { ...@@ -151,7 +160,7 @@ func listMember(cmd *cobra.Command, args []string) {
func listCmdFlags(cmd *cobra.Command) { func listCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("startItem", "s", "", "list start item id, default nil value") cmd.Flags().StringP("startItem", "s", "", "list start item id, default nil value")
cmd.Flags().Uint32P("count", "c", 10, "list count, default 10") cmd.Flags().Uint32P("count", "c", 5, "list count, default 5")
cmd.Flags().Uint32P("direction", "d", 1, "list direction, default 1 (Ascending order)") cmd.Flags().Uint32P("direction", "d", 1, "list direction, default 1 (Ascending order)")
} }
......
...@@ -147,6 +147,7 @@ func (a *action) createVote(create *vty.CreateVote) (*types.Receipt, error) { ...@@ -147,6 +147,7 @@ func (a *action) createVote(create *vty.CreateVote) (*types.Receipt, error) {
vote.Name = create.Name vote.Name = create.Name
vote.GroupID = create.GroupID vote.GroupID = create.GroupID
vote.Description = create.Description vote.Description = create.Description
vote.Creator = a.fromAddr
vote.VoteOptions = make([]*vty.VoteOption, 0) vote.VoteOptions = make([]*vty.VoteOption, 0)
for _, option := range create.VoteOptions { for _, option := range create.VoteOptions {
vote.VoteOptions = append(vote.VoteOptions, &vty.VoteOption{Option: option}) vote.VoteOptions = append(vote.VoteOptions, &vty.VoteOption{Option: option})
......
...@@ -96,7 +96,7 @@ func (v *vote) ExecLocal_CommitVote(payload *vty.CommitVote, tx *types.Transacti ...@@ -96,7 +96,7 @@ func (v *vote) ExecLocal_CommitVote(payload *vty.CommitVote, tx *types.Transacti
//implement code, add customize kv to dbSet... //implement code, add customize kv to dbSet...
commitInfo := decodeCommitInfo(receiptData.Logs[0].Log) commitInfo := decodeCommitInfo(receiptData.Logs[0].Log)
table := newVoteTable(v.GetLocalDB()) table := newVoteTable(v.GetLocalDB())
row, err := table.GetData([]byte(formatVoteID(payload.GetVoteID()))) row, err := table.GetData([]byte(payload.GetVoteID()))
if err != nil { if err != nil {
elog.Error("execLocal commitVote", "txHash", hex.EncodeToString(tx.Hash()), "voteTable get", err) elog.Error("execLocal commitVote", "txHash", hex.EncodeToString(tx.Hash()), "voteTable get", err)
return nil, err return nil, err
...@@ -127,7 +127,7 @@ func (v *vote) ExecLocal_CommitVote(payload *vty.CommitVote, tx *types.Transacti ...@@ -127,7 +127,7 @@ func (v *vote) ExecLocal_CommitVote(payload *vty.CommitVote, tx *types.Transacti
func (v *vote) ExecLocal_CloseVote(payload *vty.CloseVote, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (v *vote) ExecLocal_CloseVote(payload *vty.CloseVote, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
dbSet := &types.LocalDBSet{} dbSet := &types.LocalDBSet{}
table := newVoteTable(v.GetLocalDB()) table := newVoteTable(v.GetLocalDB())
row, err := table.GetData([]byte(formatVoteID(payload.GetVoteID()))) row, err := table.GetData([]byte(payload.GetVoteID()))
if err != nil { if err != nil {
elog.Error("execLocal closeVote", "txHash", hex.EncodeToString(tx.Hash()), "voteTable get", err) elog.Error("execLocal closeVote", "txHash", hex.EncodeToString(tx.Hash()), "voteTable get", err)
return nil, err return nil, err
......
...@@ -76,7 +76,9 @@ func (v *vote) Query_GetVotes(in *vty.ReqStrings) (types.Message, error) { ...@@ -76,7 +76,9 @@ func (v *vote) Query_GetVotes(in *vty.ReqStrings) (types.Message, error) {
} }
voteList = append(voteList, info) voteList = append(voteList, info)
} }
return classifyVoteList(voteList), nil reply := &vty.ReplyVoteList{CurrentTimestamp: types.Now().Unix()}
reply.VoteList = filterVoteWithStatus(voteList, 0, reply.CurrentTimestamp)
return reply, nil
} }
...@@ -124,13 +126,18 @@ func (v *vote) Query_ListGroup(in *vty.ReqListItem) (types.Message, error) { ...@@ -124,13 +126,18 @@ func (v *vote) Query_ListGroup(in *vty.ReqListItem) (types.Message, error) {
table := newGroupTable(v.GetLocalDB()) table := newGroupTable(v.GetLocalDB())
var primaryKey []byte var primaryKey []byte
primaryKey = append(primaryKey, []byte(in.StartItemID)...) primaryKey = append(primaryKey, []byte(in.StartItemID)...)
list := &vty.GroupInfos{}
rows, err := table.ListIndex(groupTablePrimary, nil, primaryKey, in.Count, in.Direction) rows, err := table.ListIndex(groupTablePrimary, nil, primaryKey, in.Count, in.Direction)
// 已经没有数据,直接返回
if err == types.ErrNotFound {
return list, nil
}
if err != nil { if err != nil {
elog.Error("query listGroup", "err", err, "param", in) elog.Error("query listGroup", "err", err, "param", in)
return nil, err return nil, err
} }
list := &vty.GroupInfos{GroupList: make([]*vty.GroupInfo, 0, len(rows))} list.GroupList = make([]*vty.GroupInfo, 0, len(rows))
for _, row := range rows { for _, row := range rows {
info, ok := row.Data.(*vty.GroupInfo) info, ok := row.Data.(*vty.GroupInfo)
if !ok { if !ok {
...@@ -157,7 +164,16 @@ func (v *vote) Query_ListVote(in *vty.ReqListVote) (types.Message, error) { ...@@ -157,7 +164,16 @@ func (v *vote) Query_ListVote(in *vty.ReqListVote) (types.Message, error) {
prefix = []byte(groupID) prefix = []byte(groupID)
} }
primaryKey = append(primaryKey, []byte(in.GetListReq().GetStartItemID())...) primaryKey = append(primaryKey, []byte(in.GetListReq().GetStartItemID())...)
rows, err := table.ListIndex(indexName, prefix, primaryKey, in.GetListReq().Count, in.GetListReq().Direction) reply := &vty.ReplyVoteList{CurrentTimestamp: types.Now().Unix()}
listCount := in.ListReq.GetCount()
listMore:
rows, err := table.ListIndex(indexName, prefix, primaryKey, listCount, in.GetListReq().Direction)
// 已经没有数据,直接返回
if err == types.ErrNotFound {
return reply, nil
}
if err != nil { if err != nil {
elog.Error("query listVote", "err", err, "param", in) elog.Error("query listVote", "err", err, "param", in)
return nil, err return nil, err
...@@ -171,8 +187,16 @@ func (v *vote) Query_ListVote(in *vty.ReqListVote) (types.Message, error) { ...@@ -171,8 +187,16 @@ func (v *vote) Query_ListVote(in *vty.ReqListVote) (types.Message, error) {
} }
list = append(list, info) list = append(list, info)
} }
primaryKey = append(primaryKey[:0], []byte(list[len(list)-1].ID)...)
list = filterVoteWithStatus(list, in.Status, reply.CurrentTimestamp)
reply.VoteList = append(reply.VoteList, list...)
//经过筛选后,数量小于请求数量,则需要再次list, 需要满足len(rows)==listCount, 否则表示已经没有数据
if len(rows) == int(listCount) && int(listCount) > len(list) {
listCount -= int32(len(list))
goto listMore
}
return classifyVoteList(list), nil return reply, nil
} }
func (v *vote) Query_ListMember(in *vty.ReqListItem) (types.Message, error) { func (v *vote) Query_ListMember(in *vty.ReqListItem) (types.Message, error) {
...@@ -183,13 +207,18 @@ func (v *vote) Query_ListMember(in *vty.ReqListItem) (types.Message, error) { ...@@ -183,13 +207,18 @@ func (v *vote) Query_ListMember(in *vty.ReqListItem) (types.Message, error) {
table := newMemberTable(v.GetLocalDB()) table := newMemberTable(v.GetLocalDB())
var primaryKey []byte var primaryKey []byte
primaryKey = append(primaryKey, []byte(in.StartItemID)...) primaryKey = append(primaryKey, []byte(in.StartItemID)...)
list := &vty.MemberInfos{}
rows, err := table.ListIndex(memberTablePrimary, nil, primaryKey, in.Count, in.Direction) rows, err := table.ListIndex(memberTablePrimary, nil, primaryKey, in.Count, in.Direction)
// 已经没有数据,直接返回
if err == types.ErrNotFound {
return list, nil
}
if err != nil { if err != nil {
elog.Error("query listMember", "err", err, "param", in) elog.Error("query listMember", "err", err, "param", in)
return nil, err return nil, err
} }
list := &vty.MemberInfos{MemberList: make([]*vty.MemberInfo, 0, len(rows))} list.MemberList = make([]*vty.MemberInfo, 0, len(rows))
for _, row := range rows { for _, row := range rows {
info, ok := row.Data.(*vty.MemberInfo) info, ok := row.Data.(*vty.MemberInfo)
if !ok { if !ok {
......
...@@ -91,14 +91,12 @@ func decodeCommitInfo(data []byte) *vty.CommitInfo { ...@@ -91,14 +91,12 @@ func decodeCommitInfo(data []byte) *vty.CommitInfo {
return info return info
} }
func classifyVoteList(voteList []*vty.VoteInfo) *vty.ReplyVoteList { func filterVoteWithStatus(voteList []*vty.VoteInfo, status uint32, currentTime int64) []*vty.VoteInfo {
reply := &vty.ReplyVoteList{} var filterList []*vty.VoteInfo
currentTime := types.Now().Unix()
for _, voteInfo := range voteList { for _, voteInfo := range voteList {
if voteInfo.Status == voteStatusClosed { if voteInfo.Status == voteStatusClosed {
continue
} else if voteInfo.BeginTimestamp > currentTime { } else if voteInfo.BeginTimestamp > currentTime {
voteInfo.Status = voteStatusPending voteInfo.Status = voteStatusPending
} else if voteInfo.EndTimestamp > currentTime { } else if voteInfo.EndTimestamp > currentTime {
...@@ -106,8 +104,14 @@ func classifyVoteList(voteList []*vty.VoteInfo) *vty.ReplyVoteList { ...@@ -106,8 +104,14 @@ func classifyVoteList(voteList []*vty.VoteInfo) *vty.ReplyVoteList {
} else { } else {
voteInfo.Status = voteStatusFinished voteInfo.Status = voteStatusFinished
} }
//remove vote info with other status
if status == voteInfo.Status {
filterList = append(filterList, voteInfo)
} }
reply.CurrentTimestamp = currentTime }
reply.VoteList = voteList //设置了状态筛选,返回对应的筛选列表
return reply if status > 0 {
return filterList
}
return voteList
} }
...@@ -124,13 +124,14 @@ message ReqStrings { ...@@ -124,13 +124,14 @@ message ReqStrings {
//列表请求结构 //列表请求结构
message ReqListItem { message ReqListItem {
string startItemID = 1; //列表开始的ID,如请求组列表即groupID,不包含在结果中 string startItemID = 1; //列表开始的ID,如请求组列表即groupID,不包含在结果中
int32 count = 2; //请求列表项数量 int32 count = 2; //请求列表项数量, 0表示请求所有
int32 direction = 3; // 0表示根据ID降序,1表示升序 int32 direction = 3; // 0表示根据ID降序,1表示升序,目前ID和区块高度正相关
} }
message ReqListVote { message ReqListVote {
string groupID = 1; //所属组ID string groupID = 1; //指定所属组ID
ReqListItem listReq = 2; //列表请求 ReqListItem listReq = 2; //列表请求
uint32 status = 3; //指定投票状态
} }
message ReplyVoteList { message ReplyVoteList {
......
...@@ -353,9 +353,9 @@ curl -kd '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"GetM ...@@ -353,9 +353,9 @@ curl -kd '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"GetM
```proto ```proto
//列表请求结构 //列表请求结构
message ReqListItem { message ReqListItem {
string startItemID = 1; //列表开始的投票组ID,不包含在结果中 string startItemID = 1; //列表开始的ID,如请求组列表即groupID,不包含在结果中
int32 count = 2; //列表项单次请求数量 int32 count = 2; //请求列表项数量, 0表示请求所有
int32 direction = 3; // 0表示根据ID降序,1表示升序 int32 direction = 3; // 0表示根据ID降序,1表示升序,目前ID和区块高度正相关
} }
``` ```
...@@ -381,14 +381,15 @@ curl -kd '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"List ...@@ -381,14 +381,15 @@ curl -kd '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"List
```proto ```proto
//列表请求结构 //列表请求结构
message ReqListVote { message ReqListVote {
string groupID = 1; //所属组ID,不填时获取全局的投票列表 string groupID = 1; //指定所属组ID
ReqListItem listReq = 2; //列表请求 ReqListItem listReq = 2; //列表请求
uint32 status = 3; //指定投票状态
} }
message ReqListItem { message ReqListItem {
string startItemID = 1; //列表开始的投票ID,不包含在结果中 string startItemID = 1; //列表开始的ID,如请求组列表即groupID,不包含在结果中
int32 count = 2; //列表项单次请求数量 int32 count = 2; //请求列表项数量, 0表示请求所有
int32 direction = 3; // 0表示根据ID降序,1表示升序 int32 direction = 3; // 0表示根据ID降序,1表示升序,目前ID和区块高度正相关
} }
``` ```
...@@ -418,9 +419,9 @@ curl -kd '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"List ...@@ -418,9 +419,9 @@ curl -kd '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"List
```proto ```proto
//列表请求结构 //列表请求结构
message ReqListItem { message ReqListItem {
string startItemID = 1; //列表开始的用户ID(地址) string startItemID = 1; //列表开始的ID,如请求组列表即groupID,不包含在结果中
int32 count = 2; //列表项单次请求数量 int32 count = 2; //请求列表项数量, 0表示请求所有
int32 direction = 3; // 0表示根据ID降序,1表示升序 int32 direction = 3; // 0表示根据ID降序,1表示升序,目前ID和区块高度正相关
} }
``` ```
......
...@@ -1124,6 +1124,7 @@ func (m *ReqListItem) GetDirection() int32 { ...@@ -1124,6 +1124,7 @@ func (m *ReqListItem) GetDirection() int32 {
type ReqListVote struct { type ReqListVote struct {
GroupID string `protobuf:"bytes,1,opt,name=groupID,proto3" json:"groupID,omitempty"` GroupID string `protobuf:"bytes,1,opt,name=groupID,proto3" json:"groupID,omitempty"`
ListReq *ReqListItem `protobuf:"bytes,2,opt,name=listReq,proto3" json:"listReq,omitempty"` ListReq *ReqListItem `protobuf:"bytes,2,opt,name=listReq,proto3" json:"listReq,omitempty"`
Status uint32 `protobuf:"varint,3,opt,name=status,proto3" json:"status,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -1168,6 +1169,13 @@ func (m *ReqListVote) GetListReq() *ReqListItem { ...@@ -1168,6 +1169,13 @@ func (m *ReqListVote) GetListReq() *ReqListItem {
return nil return nil
} }
func (m *ReqListVote) GetStatus() uint32 {
if m != nil {
return m.Status
}
return 0
}
type ReplyVoteList struct { type ReplyVoteList struct {
VoteList []*VoteInfo `protobuf:"bytes,1,rep,name=voteList,proto3" json:"voteList,omitempty"` VoteList []*VoteInfo `protobuf:"bytes,1,rep,name=voteList,proto3" json:"voteList,omitempty"`
CurrentTimestamp int64 `protobuf:"varint,2,opt,name=currentTimestamp,proto3" json:"currentTimestamp,omitempty"` CurrentTimestamp int64 `protobuf:"varint,2,opt,name=currentTimestamp,proto3" json:"currentTimestamp,omitempty"`
...@@ -1243,60 +1251,60 @@ func init() { ...@@ -1243,60 +1251,60 @@ func init() {
} }
var fileDescriptor_21d31c94b62a6ac7 = []byte{ var fileDescriptor_21d31c94b62a6ac7 = []byte{
// 875 bytes of a gzipped FileDescriptorProto // 879 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x6e, 0xe3, 0x44, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x6a, 0xe3, 0x46,
0x14, 0x8e, 0x9d, 0x38, 0x89, 0x8f, 0x9b, 0x52, 0x06, 0x54, 0x59, 0xa8, 0x42, 0xd1, 0x80, 0x50, 0x14, 0xb6, 0x64, 0xcb, 0xb6, 0x8e, 0xe2, 0x34, 0x9d, 0x96, 0x20, 0x4a, 0x28, 0x66, 0x5a, 0x4a,
0x05, 0x55, 0x04, 0x8d, 0x84, 0x0a, 0xe2, 0x82, 0x42, 0x05, 0x89, 0x44, 0x01, 0x0d, 0xb4, 0x7b, 0x68, 0x83, 0x69, 0x63, 0x28, 0x69, 0xe9, 0x45, 0xd3, 0x86, 0xd6, 0x86, 0xa6, 0x2d, 0xb3, 0xbb,
0xed, 0xda, 0xb3, 0xa9, 0xa5, 0xd8, 0x4e, 0x3d, 0x93, 0xa8, 0x79, 0x84, 0x7d, 0xae, 0xbd, 0xdb, 0xd9, 0x6b, 0x45, 0x9a, 0x75, 0x04, 0x96, 0xe4, 0x68, 0xc6, 0x26, 0x7e, 0x84, 0x7d, 0xae, 0xbd,
0x9b, 0x95, 0xf6, 0x39, 0xf6, 0x21, 0x56, 0x73, 0xc6, 0x3f, 0xe3, 0xfc, 0x68, 0xdb, 0xbb, 0x9c, 0xdb, 0x9b, 0x85, 0x7d, 0x8e, 0x7d, 0x88, 0x65, 0xce, 0xe8, 0x67, 0xe4, 0x1f, 0x36, 0xb9, 0xf3,
0x33, 0xdf, 0x39, 0x73, 0xe6, 0xfb, 0xbe, 0x99, 0x18, 0x60, 0x95, 0x49, 0x3e, 0x5a, 0xe4, 0x99, 0x39, 0xf3, 0x9d, 0x33, 0x67, 0xbe, 0xef, 0x9b, 0xb1, 0x00, 0x56, 0x99, 0xe4, 0xa3, 0x45, 0x9e,
0xcc, 0x88, 0x23, 0xd7, 0x0b, 0x2e, 0xe8, 0x7b, 0x1b, 0xe0, 0x36, 0x93, 0xfc, 0x32, 0x94, 0x71, 0xc9, 0x8c, 0x38, 0x72, 0xbd, 0xe0, 0x82, 0x7e, 0xb0, 0x01, 0x6e, 0x32, 0xc9, 0x2f, 0x43, 0x19,
0x96, 0x92, 0x43, 0xb0, 0xe5, 0xda, 0xb7, 0x86, 0xd6, 0xa9, 0xc3, 0x6c, 0xb9, 0x26, 0x3f, 0x82, 0x67, 0x29, 0x39, 0x04, 0x5b, 0xae, 0x7d, 0x6b, 0x68, 0x9d, 0x3a, 0xcc, 0x96, 0x6b, 0xf2, 0x33,
0x17, 0xe6, 0x3c, 0x90, 0xfc, 0xcf, 0x3c, 0x5b, 0x2e, 0x7c, 0x7b, 0x68, 0x9d, 0x7a, 0xe7, 0x64, 0x78, 0x61, 0xce, 0x03, 0xc9, 0xff, 0xce, 0xb3, 0xe5, 0xc2, 0xb7, 0x87, 0xd6, 0xa9, 0x77, 0x4e,
0x84, 0xb5, 0xa3, 0xdf, 0xeb, 0x95, 0x49, 0x8b, 0x99, 0x40, 0x55, 0xb7, 0x5c, 0x44, 0x55, 0x5d, 0x46, 0x58, 0x3b, 0xfa, 0xb3, 0x5e, 0x99, 0xb4, 0x98, 0x09, 0x54, 0x75, 0xcb, 0x45, 0x54, 0xd5,
0xbb, 0x51, 0x77, 0x53, 0xaf, 0xa8, 0x3a, 0x03, 0x48, 0xc6, 0x00, 0xba, 0x8d, 0x9a, 0xc9, 0xef, 0xb5, 0x1b, 0x75, 0x2f, 0xea, 0x15, 0x55, 0x67, 0x00, 0xc9, 0x18, 0x40, 0xb7, 0x51, 0x33, 0xf9,
0x60, 0xd9, 0xa7, 0x8d, 0xed, 0xd4, 0xc2, 0xa4, 0xc5, 0x0c, 0x18, 0x16, 0x65, 0x49, 0x12, 0x4b, 0x1d, 0x2c, 0xfb, 0xbc, 0xb1, 0x9d, 0x5a, 0x98, 0xb4, 0x98, 0x01, 0xc3, 0xa2, 0x2c, 0x49, 0x62,
0x2c, 0x72, 0x9a, 0x45, 0xd5, 0x02, 0x16, 0x55, 0x11, 0xf9, 0x1e, 0xdc, 0x70, 0x9e, 0x09, 0xbd, 0x89, 0x45, 0x4e, 0xb3, 0xa8, 0x5a, 0xc0, 0xa2, 0x2a, 0x22, 0x3f, 0x82, 0x1b, 0xce, 0x33, 0xa1,
0x51, 0x17, 0x6b, 0x8e, 0xca, 0x9a, 0x32, 0x3f, 0x69, 0xb1, 0x1a, 0x44, 0x7e, 0x82, 0x03, 0x3d, 0x37, 0xea, 0x62, 0xcd, 0x51, 0x59, 0x53, 0xe6, 0x27, 0x2d, 0x56, 0x83, 0xc8, 0x2f, 0x70, 0xa0,
0xea, 0x35, 0x4f, 0xee, 0x78, 0xee, 0xf7, 0xb0, 0xe8, 0xb3, 0xc6, 0xa1, 0xf4, 0xd2, 0xa4, 0xc5, 0x47, 0xbd, 0xe6, 0xc9, 0x2d, 0xcf, 0xfd, 0x1e, 0x16, 0x7d, 0xd1, 0x38, 0x94, 0x5e, 0x9a, 0xb4,
0x1a, 0xd0, 0xdf, 0x7a, 0xe0, 0xac, 0x82, 0xf9, 0x92, 0xd3, 0x4b, 0xf0, 0xf0, 0xa0, 0x3a, 0x4f, 0x58, 0x03, 0xfa, 0x47, 0x0f, 0x9c, 0x55, 0x30, 0x5f, 0x72, 0x7a, 0x09, 0x1e, 0x1e, 0x54, 0xe7,
0x08, 0x74, 0x82, 0x28, 0xca, 0x91, 0x70, 0x97, 0xe1, 0x6f, 0xf2, 0xa5, 0x96, 0xe9, 0x05, 0x8f, 0x09, 0x81, 0x4e, 0x10, 0x45, 0x39, 0x12, 0xee, 0x32, 0xfc, 0x4d, 0xbe, 0xd6, 0x32, 0xbd, 0xe4,
0x67, 0xf7, 0x12, 0x19, 0x1f, 0x30, 0x23, 0x43, 0x5f, 0x59, 0xe0, 0x19, 0xcc, 0xab, 0x1e, 0x69, 0xf1, 0xec, 0x4e, 0x22, 0xe3, 0x03, 0x66, 0x64, 0xe8, 0x6b, 0x0b, 0x3c, 0x83, 0x79, 0xd5, 0x23,
0x90, 0xf0, 0xb2, 0x87, 0xfa, 0x4d, 0x8e, 0xa1, 0x1b, 0x44, 0x49, 0x9c, 0x0a, 0xdf, 0x1e, 0xb6, 0x0d, 0x12, 0x5e, 0xf6, 0x50, 0xbf, 0xc9, 0x31, 0x74, 0x83, 0x28, 0x89, 0x53, 0xe1, 0xdb, 0xc3,
0x4f, 0x5d, 0x56, 0x44, 0xe4, 0x0c, 0x7a, 0x09, 0xee, 0x2c, 0xfc, 0xf6, 0xb0, 0x6d, 0x48, 0x62, 0xf6, 0xa9, 0xcb, 0x8a, 0x88, 0x9c, 0x41, 0x2f, 0xc1, 0x9d, 0x85, 0xdf, 0x1e, 0xb6, 0x0d, 0x49,
0x0c, 0xc5, 0x4a, 0x08, 0x19, 0x82, 0x17, 0x71, 0x11, 0xe6, 0xf1, 0x42, 0x79, 0x03, 0xd5, 0x70, 0x8c, 0xa1, 0x58, 0x09, 0x21, 0x43, 0xf0, 0x22, 0x2e, 0xc2, 0x3c, 0x5e, 0x28, 0x6f, 0xa0, 0x1a,
0x99, 0x99, 0xa2, 0xaf, 0x2d, 0xf0, 0x0c, 0x35, 0x89, 0x0f, 0xbd, 0x99, 0xfa, 0x31, 0xbd, 0x2a, 0x2e, 0x33, 0x53, 0xf4, 0x8d, 0x05, 0x9e, 0xa1, 0x26, 0xf1, 0xa1, 0x37, 0x53, 0x3f, 0xa6, 0x57,
0xc6, 0x29, 0x43, 0x72, 0x0e, 0x10, 0x44, 0xd1, 0x75, 0xb1, 0xb9, 0xbd, 0x77, 0x73, 0x03, 0x45, 0xc5, 0x38, 0x65, 0x48, 0xce, 0x01, 0x82, 0x28, 0xba, 0x2e, 0x36, 0xb7, 0xf7, 0x6e, 0x6e, 0xa0,
0xbe, 0x86, 0x41, 0xce, 0x93, 0x6c, 0xc5, 0xaf, 0x8d, 0x99, 0x5d, 0xd6, 0x4c, 0x92, 0x13, 0x70, 0xc8, 0xb7, 0x30, 0xc8, 0x79, 0x92, 0xad, 0xf8, 0xb5, 0x31, 0xb3, 0xcb, 0x9a, 0x49, 0x72, 0x02,
0x83, 0x28, 0xba, 0xd4, 0xc7, 0xed, 0x20, 0xa2, 0x4e, 0x10, 0x0a, 0x07, 0x1a, 0x5e, 0x00, 0x1c, 0x6e, 0x10, 0x45, 0x97, 0xfa, 0xb8, 0x1d, 0x44, 0xd4, 0x09, 0x42, 0xe1, 0x40, 0xc3, 0x0b, 0x80,
0x04, 0x34, 0x72, 0xf4, 0xad, 0x05, 0x2e, 0xce, 0x30, 0x4d, 0x5f, 0x66, 0xea, 0x0a, 0x54, 0xe3, 0x83, 0x80, 0x46, 0x8e, 0xbe, 0xb3, 0xc0, 0xc5, 0x19, 0xa6, 0xe9, 0xab, 0x4c, 0x5d, 0x81, 0x6a,
0xdb, 0xd3, 0xab, 0x8a, 0x5f, 0xdb, 0xe0, 0xf7, 0x04, 0x5c, 0x4d, 0xd2, 0xdf, 0xcb, 0x04, 0xcd, 0x7c, 0x7b, 0x7a, 0x55, 0xf1, 0x6b, 0x1b, 0xfc, 0x9e, 0x80, 0xab, 0x49, 0xfa, 0x77, 0x99, 0xa0,
0x3d, 0x60, 0x75, 0x42, 0xb1, 0x80, 0xee, 0xcc, 0xf2, 0x82, 0xb3, 0x32, 0x34, 0x74, 0x71, 0xf6, 0xb9, 0x07, 0xac, 0x4e, 0x28, 0x16, 0xd0, 0x9d, 0x59, 0x5e, 0x70, 0x56, 0x86, 0x86, 0x2e, 0xce,
0xe9, 0xd2, 0x7d, 0xb6, 0x2e, 0xbd, 0x6d, 0x5d, 0x7e, 0x01, 0xa8, 0x0e, 0x24, 0xc8, 0x08, 0x5c, 0x3e, 0x5d, 0xba, 0x4f, 0xd6, 0xa5, 0xb7, 0xad, 0xcb, 0x6f, 0x00, 0xd5, 0x81, 0x04, 0x19, 0x81,
0x94, 0xe1, 0xaf, 0x58, 0x48, 0xdf, 0xc2, 0xfe, 0x47, 0x66, 0x7f, 0x85, 0x62, 0x35, 0x84, 0xfe, 0x8b, 0x32, 0xfc, 0x13, 0x0b, 0xe9, 0x5b, 0xd8, 0xff, 0xc8, 0xec, 0xaf, 0x50, 0xac, 0x86, 0xd0,
0xac, 0x9f, 0x84, 0x7f, 0xb0, 0x97, 0x9a, 0x39, 0xd3, 0x1b, 0x69, 0x4e, 0x8a, 0x88, 0x7c, 0x0e, 0x5f, 0xf5, 0x93, 0xf0, 0x1f, 0xf6, 0x52, 0x33, 0x67, 0x7a, 0x23, 0xcd, 0x49, 0x11, 0x91, 0x2f,
0x8e, 0x08, 0xb3, 0x9c, 0x17, 0x16, 0xd5, 0x01, 0x7d, 0x63, 0x01, 0xd4, 0x17, 0x75, 0xa7, 0x39, 0xc1, 0x11, 0x61, 0x96, 0xf3, 0xc2, 0xa2, 0x3a, 0xa0, 0x6f, 0x2d, 0x80, 0xfa, 0xa2, 0xee, 0x34,
0x0d, 0x93, 0xd8, 0x4d, 0x93, 0x0c, 0xc1, 0x5b, 0x55, 0x1b, 0x97, 0x72, 0x9b, 0x29, 0xf2, 0x0d, 0xa7, 0x61, 0x12, 0xbb, 0x69, 0x92, 0x21, 0x78, 0xab, 0x6a, 0xe3, 0x52, 0x6e, 0x33, 0x45, 0xbe,
0x1c, 0xde, 0xf1, 0x59, 0x9c, 0xfe, 0x1f, 0x27, 0x5c, 0xc8, 0x20, 0x59, 0x20, 0xc3, 0x6d, 0xb6, 0x83, 0xc3, 0x5b, 0x3e, 0x8b, 0xd3, 0xe7, 0x71, 0xc2, 0x85, 0x0c, 0x92, 0x05, 0x32, 0xdc, 0x66,
0x91, 0x55, 0xb2, 0xf3, 0x34, 0xaa, 0x51, 0x0e, 0xa2, 0x1a, 0xb9, 0x4d, 0x1a, 0xbb, 0xdb, 0x34, 0x1b, 0x59, 0x25, 0x3b, 0x4f, 0xa3, 0x1a, 0xe5, 0x20, 0xaa, 0x91, 0xdb, 0xa4, 0xb1, 0xbb, 0x4d,
0xfe, 0x01, 0x50, 0xbf, 0x1f, 0x8a, 0x08, 0x35, 0x4a, 0x65, 0x8e, 0x22, 0x52, 0x7d, 0x34, 0x25, 0xe3, 0x5f, 0x00, 0xf5, 0xfb, 0xa1, 0x88, 0x50, 0xa3, 0x54, 0xe6, 0x28, 0x22, 0xd5, 0x47, 0x53,
0xd3, 0x34, 0xe2, 0x8f, 0x05, 0x1d, 0x66, 0x8a, 0x5e, 0x94, 0x7d, 0xd0, 0x60, 0xbb, 0x2e, 0xfd, 0x32, 0x4d, 0x23, 0xfe, 0x50, 0xd0, 0x61, 0xa6, 0xe8, 0x45, 0xd9, 0x07, 0x0d, 0xb6, 0xeb, 0xd2,
0x31, 0x74, 0xe5, 0xe3, 0x24, 0x10, 0xf7, 0x05, 0x25, 0x45, 0x44, 0xbf, 0x02, 0xb7, 0x7a, 0x8d, 0x1f, 0x43, 0x57, 0x3e, 0x4c, 0x02, 0x71, 0x57, 0x50, 0x52, 0x44, 0xf4, 0x1b, 0x70, 0xab, 0xd7,
0xf6, 0x0d, 0x40, 0x29, 0x1c, 0x98, 0xaf, 0xcf, 0x2e, 0xd2, 0xe9, 0x3b, 0x1b, 0xfa, 0xaa, 0xc9, 0x68, 0xdf, 0x00, 0x94, 0xc2, 0x81, 0xf9, 0xfa, 0xec, 0x22, 0x9d, 0xbe, 0xb7, 0xa1, 0xaf, 0x9a,
0x93, 0x2d, 0x6e, 0x98, 0xb8, 0xdd, 0x34, 0xb1, 0xa1, 0x5f, 0xa7, 0xa9, 0xdf, 0xb8, 0xa9, 0x9f, 0x3c, 0xda, 0xe2, 0x86, 0x89, 0xdb, 0x4d, 0x13, 0x1b, 0xfa, 0x75, 0x9a, 0xfa, 0x8d, 0x9b, 0xfa,
0x83, 0x56, 0x2b, 0x5f, 0xe2, 0xda, 0x52, 0x1f, 0x93, 0xb4, 0xfb, 0x24, 0x49, 0x7b, 0x3b, 0x24, 0x39, 0x68, 0xb5, 0xf2, 0x25, 0xae, 0x2d, 0xf5, 0x29, 0x49, 0xbb, 0x8f, 0x92, 0xb4, 0xb7, 0x43,
0x1d, 0x83, 0x17, 0x56, 0x44, 0x0b, 0xbf, 0xdf, 0x18, 0xa0, 0x96, 0x80, 0x99, 0xa8, 0x4d, 0x1f, 0xd2, 0x31, 0x78, 0x61, 0x45, 0xb4, 0xf0, 0xfb, 0x8d, 0x01, 0x6a, 0x09, 0x98, 0x89, 0xda, 0xf4,
0xb8, 0x5b, 0x3e, 0x50, 0xc4, 0x0b, 0x19, 0xc8, 0xa5, 0xf0, 0x01, 0xc5, 0x2d, 0x22, 0x7a, 0x01, 0x81, 0xbb, 0xe5, 0x03, 0x45, 0xbc, 0x90, 0x81, 0x5c, 0x0a, 0x1f, 0x50, 0xdc, 0x22, 0xa2, 0x17,
0x6e, 0xc9, 0xa9, 0x20, 0xdf, 0x41, 0x5f, 0x1d, 0xcb, 0xb8, 0x64, 0x9f, 0x18, 0x27, 0xc7, 0x6d, 0xe0, 0x96, 0x9c, 0x0a, 0xf2, 0x03, 0xf4, 0xd5, 0xb1, 0x8c, 0x4b, 0xf6, 0x99, 0x71, 0x72, 0xdc,
0x2b, 0x00, 0xfd, 0x17, 0x40, 0x8b, 0xb5, 0xd7, 0x11, 0xbb, 0x34, 0xf9, 0x02, 0xfa, 0x05, 0xd5, 0xb6, 0x02, 0xd0, 0xff, 0x01, 0xb4, 0x58, 0x7b, 0x1d, 0xb1, 0x4b, 0x93, 0xaf, 0xa0, 0x5f, 0x50,
0xe5, 0xe5, 0xa8, 0x62, 0xfa, 0x2b, 0x78, 0x75, 0x47, 0x41, 0x7e, 0x00, 0xd0, 0xcf, 0x85, 0x31, 0x5d, 0x5e, 0x8e, 0x2a, 0xa6, 0xbf, 0x83, 0x57, 0x77, 0x14, 0xe4, 0x27, 0x00, 0xfd, 0x5c, 0x18,
0x4f, 0x49, 0x44, 0x8d, 0x63, 0x06, 0x88, 0x52, 0x00, 0xc6, 0x1f, 0xfe, 0x93, 0x79, 0x9c, 0xce, 0xf3, 0x94, 0x44, 0xd4, 0x38, 0x66, 0x80, 0x28, 0x05, 0x60, 0xfc, 0xfe, 0x99, 0xcc, 0xe3, 0x74,
0x84, 0xba, 0xde, 0xb1, 0xe4, 0x89, 0xc0, 0x5a, 0x97, 0xe9, 0x80, 0x86, 0xe0, 0x31, 0xfe, 0xa0, 0x26, 0xd4, 0xf5, 0x8e, 0x25, 0x4f, 0x04, 0xd6, 0xba, 0x4c, 0x07, 0x34, 0x04, 0x8f, 0xf1, 0x7b,
0xe0, 0x53, 0xc9, 0x13, 0x45, 0x9d, 0x90, 0x41, 0x8e, 0x41, 0xe5, 0x28, 0x33, 0xa5, 0xda, 0x84, 0x05, 0x9f, 0x4a, 0x9e, 0x28, 0xea, 0x84, 0x0c, 0x72, 0x0c, 0x2a, 0x47, 0x99, 0x29, 0xd5, 0x26,
0xd9, 0x32, 0xd5, 0x7f, 0x64, 0x0e, 0xd3, 0x81, 0x7a, 0x3f, 0xa3, 0x38, 0xe7, 0xf8, 0xcd, 0x81, 0xcc, 0x96, 0xa9, 0xfe, 0x23, 0x73, 0x98, 0x0e, 0xd4, 0xfb, 0x19, 0xc5, 0x39, 0xc7, 0x6f, 0x0e,
0xf6, 0x72, 0x58, 0x9d, 0xa0, 0x37, 0xd5, 0x26, 0x68, 0xfb, 0xfd, 0x7f, 0x2a, 0x67, 0xd0, 0x9b, 0xb4, 0x97, 0xc3, 0xea, 0x04, 0x4d, 0xaa, 0x4d, 0xd0, 0xf6, 0xfb, 0xff, 0x54, 0xce, 0xa0, 0x37,
0xc7, 0x42, 0x32, 0xfe, 0xb0, 0xf1, 0x65, 0x62, 0xcc, 0xc8, 0x4a, 0x08, 0xbd, 0x87, 0x01, 0xe3, 0x8f, 0x85, 0x64, 0xfc, 0x7e, 0xe3, 0xcb, 0xc4, 0x98, 0x91, 0x95, 0x10, 0x43, 0xc5, 0x76, 0x43,
0x8b, 0xf9, 0xfa, 0xb6, 0x10, 0xe1, 0x59, 0x8a, 0x91, 0x6f, 0xe1, 0x28, 0x5c, 0xe6, 0x39, 0x4f, 0xc5, 0x3b, 0x18, 0x30, 0xbe, 0x98, 0xaf, 0x6f, 0x0a, 0x71, 0x9e, 0xa4, 0x24, 0xf9, 0x1e, 0x8e,
0x65, 0x6d, 0x41, 0x1b, 0x2d, 0xb8, 0x95, 0xbf, 0xeb, 0xe2, 0x27, 0xd6, 0xf8, 0x43, 0x00, 0x00, 0xc2, 0x65, 0x9e, 0xf3, 0x54, 0xd6, 0xd6, 0xb4, 0xd1, 0x9a, 0x5b, 0xf9, 0xdb, 0x2e, 0x7e, 0x7a,
0x00, 0xff, 0xff, 0xc0, 0xf1, 0x16, 0x30, 0x70, 0x09, 0x00, 0x00, 0x8d, 0x3f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x94, 0x9e, 0x86, 0x0e, 0x88, 0x09, 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