Commit fdef66ed authored by jiangpeng's avatar jiangpeng

dapp/vote:add nick name for group member

parent 3fcb74f9
...@@ -27,31 +27,52 @@ func createGroupFlags(cmd *cobra.Command) { ...@@ -27,31 +27,52 @@ func createGroupFlags(cmd *cobra.Command) {
cmd.Flags().StringArrayP("admins", "a", nil, "group admin address array, default set creator as admin") cmd.Flags().StringArrayP("admins", "a", nil, "group admin address array, default set creator as admin")
cmd.Flags().StringArrayP("members", "m", nil, "group member address array") cmd.Flags().StringArrayP("members", "m", nil, "group member address array")
cmd.Flags().UintSliceP("weights", "w", nil, "member vote weight array") cmd.Flags().UintSliceP("weights", "w", nil, "member vote weight array")
cmd.Flags().StringArrayP("nicks", "c", nil, "group member nick name array")
markRequired(cmd, "name") markRequired(cmd, "name")
} }
func formatAddMembers(addrs, nickNames []string, voteWeights []uint) []*vty.GroupMember {
if len(voteWeights) == 0 {
voteWeights = make([]uint, len(addrs))
}
if len(voteWeights) != len(voteWeights) {
fmt.Fprintf(os.Stderr, "member address array length should equal with vote weight array length")
return nil
}
if len(nickNames) == 0 {
nickNames = make([]string, len(addrs))
}
if len(nickNames) != len(addrs) {
fmt.Fprintf(os.Stderr, "member nick name array, add member addr array should have same length")
return nil
}
members := make([]*vty.GroupMember, 0)
for i, addr := range addrs {
members = append(members, &vty.GroupMember{Addr: addr, VoteWeight: uint32(voteWeights[i]), NickName: nickNames[i]})
}
return members
}
func createGroup(cmd *cobra.Command, args []string) { func createGroup(cmd *cobra.Command, args []string) {
name, _ := cmd.Flags().GetString("name") name, _ := cmd.Flags().GetString("name")
admins, _ := cmd.Flags().GetStringArray("admins") admins, _ := cmd.Flags().GetStringArray("admins")
memberAddrs, _ := cmd.Flags().GetStringArray("members") memberAddrs, _ := cmd.Flags().GetStringArray("members")
weights, _ := cmd.Flags().GetUintSlice("weights") weights, _ := cmd.Flags().GetUintSlice("weights")
nicks, _ := cmd.Flags().GetStringArray("nicks")
if name == "" { if name == "" {
fmt.Fprintf(os.Stderr, "ErrNilGroupName") fmt.Fprintf(os.Stderr, "ErrNilGroupName")
return return
} }
if len(weights) == 0 {
weights = make([]uint, len(memberAddrs))
}
if len(weights) != len(memberAddrs) {
fmt.Fprintf(os.Stderr, "member address array length should equal with vote weight array length")
return
}
members := make([]*vty.GroupMember, 0) members := formatAddMembers(memberAddrs, nicks, weights)
for i, addr := range memberAddrs { if members == nil {
members = append(members, &vty.GroupMember{Addr: addr, VoteWeight: uint32(weights[i])}) return
} }
params := &vty.CreateGroup{ params := &vty.CreateGroup{
...@@ -78,6 +99,7 @@ func updateGroupFlags(cmd *cobra.Command) { ...@@ -78,6 +99,7 @@ func updateGroupFlags(cmd *cobra.Command) {
cmd.Flags().StringP("groupID", "g", "", "group id") cmd.Flags().StringP("groupID", "g", "", "group id")
cmd.Flags().StringArrayP("addMembers", "m", 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("nicks", "c", nil, "group member nick name array")
cmd.Flags().StringArrayP("removeMembers", "v", nil, "group member address array for removing") cmd.Flags().StringArrayP("removeMembers", "v", nil, "group member address array for removing")
cmd.Flags().StringArrayP("addAdmins", "a", nil, "group admin address array for adding") cmd.Flags().StringArrayP("addAdmins", "a", nil, "group admin address array for adding")
cmd.Flags().StringArrayP("removeAdmins", "r", nil, "group admin address array for removing") cmd.Flags().StringArrayP("removeAdmins", "r", nil, "group admin address array for removing")
...@@ -89,6 +111,7 @@ func updateGroup(cmd *cobra.Command, args []string) { ...@@ -89,6 +111,7 @@ func updateGroup(cmd *cobra.Command, args []string) {
groupID, _ := cmd.Flags().GetString("groupID") groupID, _ := cmd.Flags().GetString("groupID")
addAddrs, _ := cmd.Flags().GetStringArray("addMembers") addAddrs, _ := cmd.Flags().GetStringArray("addMembers")
weights, _ := cmd.Flags().GetUintSlice("weights") weights, _ := cmd.Flags().GetUintSlice("weights")
nicks, _ := cmd.Flags().GetStringArray("nicks")
removeAddrs, _ := cmd.Flags().GetStringArray("removeMembers") removeAddrs, _ := cmd.Flags().GetStringArray("removeMembers")
addAdmins, _ := cmd.Flags().GetStringArray("addAdmins") addAdmins, _ := cmd.Flags().GetStringArray("addAdmins")
removeAdmins, _ := cmd.Flags().GetStringArray("removeAdmins") removeAdmins, _ := cmd.Flags().GetStringArray("removeAdmins")
...@@ -97,19 +120,11 @@ func updateGroup(cmd *cobra.Command, args []string) { ...@@ -97,19 +120,11 @@ func updateGroup(cmd *cobra.Command, args []string) {
fmt.Fprintf(os.Stderr, "ErrNilGroupID") fmt.Fprintf(os.Stderr, "ErrNilGroupID")
return return
} }
if len(weights) == 0 { addMembers := formatAddMembers(addAddrs, nicks, weights)
weights = make([]uint, len(addAddrs)) if addMembers == nil {
}
if len(weights) != len(addAddrs) {
fmt.Fprintf(os.Stderr, "member address array length should equal with vote weight array length")
return return
} }
addMembers := make([]*vty.GroupMember, 0)
for i, addr := range addAddrs {
addMembers = append(addMembers, &vty.GroupMember{Addr: addr, VoteWeight: uint32(weights[i])})
}
params := &vty.UpdateGroup{ params := &vty.UpdateGroup{
GroupID: groupID, GroupID: groupID,
RemoveMembers: removeAddrs, RemoveMembers: removeAddrs,
......
...@@ -108,7 +108,7 @@ func (a *action) updateGroup(update *vty.UpdateGroup) (*types.Receipt, error) { ...@@ -108,7 +108,7 @@ func (a *action) updateGroup(update *vty.UpdateGroup) (*types.Receipt, error) {
group.Members = append(group.Members, member) group.Members = append(group.Members, member)
} }
} }
group.MemberNum = uint32(len(group.Members))
adminMap := make(map[string]int) adminMap := make(map[string]int)
for index, addr := range group.Admins { for index, addr := range group.Admins {
adminMap[addr] = index adminMap[addr] = index
......
...@@ -55,16 +55,15 @@ func (v *vote) ExecLocal_UpdateGroup(update *vty.UpdateGroup, tx *types.Transact ...@@ -55,16 +55,15 @@ func (v *vote) ExecLocal_UpdateGroup(update *vty.UpdateGroup, tx *types.Transact
return nil, err return nil, err
} }
dbSet.KV = kvs dbSet.KV = kvs
kvs, err = v.removeGroupMember(groupInfo.GetID(), update.RemoveMembers)
kvs, err = v.addGroupMember(groupInfo.GetID(), update.AddMembers)
if err != nil { if err != nil {
elog.Error("execLocal UpdateGroup", "txHash", hex.EncodeToString(tx.Hash()), "addMemberErr", err) elog.Error("execLocal UpdateGroup", "txHash", hex.EncodeToString(tx.Hash()), "removeMemberErr", err)
return nil, err return nil, err
} }
dbSet.KV = append(dbSet.KV, kvs...) dbSet.KV = append(dbSet.KV, kvs...)
kvs, err = v.removeGroupMember(groupInfo.GetID(), update.RemoveMembers) kvs, err = v.addGroupMember(groupInfo.GetID(), update.AddMembers)
if err != nil { if err != nil {
elog.Error("execLocal UpdateGroup", "txHash", hex.EncodeToString(tx.Hash()), "removeMemberErr", err) elog.Error("execLocal UpdateGroup", "txHash", hex.EncodeToString(tx.Hash()), "addMemberErr", err)
return nil, err return nil, err
} }
dbSet.KV = append(dbSet.KV, kvs...) dbSet.KV = append(dbSet.KV, kvs...)
......
...@@ -18,6 +18,7 @@ message VoteAction { ...@@ -18,6 +18,7 @@ message VoteAction {
message GroupMember { message GroupMember {
string addr = 1; //用户地址 string addr = 1; //用户地址
uint32 voteWeight = 2; //投票权重, 不填时默认为1 uint32 voteWeight = 2; //投票权重, 不填时默认为1
string nickName = 3; //群昵称
} }
//创建投票组 //创建投票组
......
...@@ -27,6 +27,7 @@ message CreateGroup { ...@@ -27,6 +27,7 @@ message CreateGroup {
message GroupMember { message GroupMember {
string addr = 1; //用户地址 string addr = 1; //用户地址
uint32 voteWeight = 2; //投票权重, 不填时默认为1 uint32 voteWeight = 2; //投票权重, 不填时默认为1
string nickName = 3; //群昵称
} }
``` ```
...@@ -68,6 +69,12 @@ message UpdateGroup { ...@@ -68,6 +69,12 @@ message UpdateGroup {
repeated string addAdmins = 4; //增加管理员 repeated string addAdmins = 4; //增加管理员
repeated string removeAdmins = 5; //删除管理员 repeated string removeAdmins = 5; //删除管理员
} }
message GroupMember {
string addr = 1; //用户地址
uint32 voteWeight = 2; //投票权重, 不填时默认为1
string nickName = 3; //群昵称
}
``` ```
##### 交易回执 ##### 交易回执
```proto ```proto
...@@ -376,14 +383,17 @@ curl -kd '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"List ...@@ -376,14 +383,17 @@ curl -kd '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"List
``` ```
#### 获取投票列表(ListVote) #### 获取投票列表(ListVote)
获取全局投票列表, 指定groupID时,则获取指定组的投票列表 - 获取全局投票列表
- 可指定groupID,获取指定组的投票列表
- 可指定投票状态进行分页查找, status 0表示不做状态区分
##### 请求结构 ##### 请求结构
```proto ```proto
//列表请求结构 //列表请求结构
message ReqListVote { message ReqListVote {
string groupID = 1; //指定所属组ID string groupID = 1; //指定所属组ID
ReqListItem listReq = 2; //列表请求 ReqListItem listReq = 2; //列表请求
uint32 status = 3; //指定投票状态 uint32 status = 3; //指定投票状态, 1即将开始,2正在进行,3已经结束,4已关闭
} }
message ReqListItem { message ReqListItem {
......
...@@ -173,6 +173,7 @@ func (*VoteAction) XXX_OneofWrappers() []interface{} { ...@@ -173,6 +173,7 @@ func (*VoteAction) XXX_OneofWrappers() []interface{} {
type GroupMember struct { type GroupMember struct {
Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
VoteWeight uint32 `protobuf:"varint,2,opt,name=voteWeight,proto3" json:"voteWeight,omitempty"` VoteWeight uint32 `protobuf:"varint,2,opt,name=voteWeight,proto3" json:"voteWeight,omitempty"`
NickName string `protobuf:"bytes,3,opt,name=nickName,proto3" json:"nickName,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:"-"`
...@@ -217,6 +218,13 @@ func (m *GroupMember) GetVoteWeight() uint32 { ...@@ -217,6 +218,13 @@ func (m *GroupMember) GetVoteWeight() uint32 {
return 0 return 0
} }
func (m *GroupMember) GetNickName() string {
if m != nil {
return m.NickName
}
return ""
}
//创建投票组 //创建投票组
type CreateGroup struct { type CreateGroup struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
...@@ -1251,60 +1259,61 @@ func init() { ...@@ -1251,60 +1259,61 @@ func init() {
} }
var fileDescriptor_21d31c94b62a6ac7 = []byte{ var fileDescriptor_21d31c94b62a6ac7 = []byte{
// 879 bytes of a gzipped FileDescriptorProto // 893 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x6a, 0xe3, 0x46, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x6e, 0xeb, 0x44,
0x14, 0xb6, 0x64, 0xcb, 0xb6, 0x8e, 0xe2, 0x34, 0x9d, 0x96, 0x20, 0x4a, 0x28, 0x66, 0x5a, 0x4a, 0x10, 0x8e, 0x9d, 0x38, 0x89, 0xc7, 0x4d, 0x29, 0x0b, 0xaa, 0xac, 0xaa, 0x42, 0xd1, 0x82, 0x50,
0x68, 0x83, 0x69, 0x63, 0x28, 0x69, 0xe9, 0x45, 0xd3, 0x86, 0xd6, 0x86, 0xa6, 0x2d, 0xb3, 0xbb, 0x05, 0x55, 0x04, 0x8d, 0x84, 0x0a, 0xe2, 0x82, 0x42, 0x05, 0x89, 0x44, 0x0b, 0x5a, 0xa0, 0x5c,
0xd9, 0x6b, 0x45, 0x9a, 0x75, 0x04, 0x96, 0xe4, 0x68, 0xc6, 0x26, 0x7e, 0x84, 0x7d, 0xae, 0xbd, 0x71, 0xe1, 0xda, 0x4b, 0x6a, 0x11, 0xdb, 0xa9, 0x77, 0x13, 0x35, 0x8f, 0xc0, 0x73, 0x71, 0xc7,
0xdb, 0x9b, 0x85, 0x7d, 0x8e, 0x7d, 0x88, 0x65, 0xce, 0xe8, 0x67, 0xe4, 0x1f, 0x36, 0xb9, 0xf3, 0xcd, 0x91, 0xce, 0x73, 0x9c, 0x87, 0x38, 0xda, 0x59, 0xff, 0xac, 0xf3, 0xa3, 0xd3, 0xde, 0x65,
0x39, 0xf3, 0x9d, 0x33, 0x67, 0xbe, 0xef, 0x9b, 0xb1, 0x00, 0x56, 0x99, 0xe4, 0xa3, 0x45, 0x9e, 0x66, 0xbf, 0x99, 0x9d, 0xfd, 0xbe, 0x6f, 0x37, 0x06, 0x58, 0x65, 0x92, 0x8f, 0x16, 0x79, 0x26,
0xc9, 0x8c, 0x38, 0x72, 0xbd, 0xe0, 0x82, 0x7e, 0xb0, 0x01, 0x6e, 0x32, 0xc9, 0x2f, 0x43, 0x19, 0x33, 0xe2, 0xc8, 0xf5, 0x82, 0x0b, 0xfa, 0xc6, 0x06, 0xb8, 0xcb, 0x24, 0xbf, 0x0a, 0x65, 0x9c,
0x67, 0x29, 0x39, 0x04, 0x5b, 0xae, 0x7d, 0x6b, 0x68, 0x9d, 0x3a, 0xcc, 0x96, 0x6b, 0xf2, 0x33, 0xa5, 0xe4, 0x10, 0x6c, 0xb9, 0xf6, 0xad, 0xa1, 0x75, 0xe6, 0x30, 0x5b, 0xae, 0xc9, 0x57, 0xe0,
0x78, 0x61, 0xce, 0x03, 0xc9, 0xff, 0xce, 0xb3, 0xe5, 0xc2, 0xb7, 0x87, 0xd6, 0xa9, 0x77, 0x4e, 0x85, 0x39, 0x0f, 0x24, 0xff, 0x29, 0xcf, 0x96, 0x0b, 0xdf, 0x1e, 0x5a, 0x67, 0xde, 0x05, 0x19,
0x46, 0x58, 0x3b, 0xfa, 0xb3, 0x5e, 0x99, 0xb4, 0x98, 0x09, 0x54, 0x75, 0xcb, 0x45, 0x54, 0xd5, 0x61, 0xed, 0xe8, 0x87, 0x7a, 0x65, 0xd2, 0x62, 0x26, 0x50, 0xd5, 0x2d, 0x17, 0x51, 0x55, 0xd7,
0xb5, 0x1b, 0x75, 0x2f, 0xea, 0x15, 0x55, 0x67, 0x00, 0xc9, 0x18, 0x40, 0xb7, 0x51, 0x33, 0xf9, 0x6e, 0xd4, 0xfd, 0x51, 0xaf, 0xa8, 0x3a, 0x03, 0x48, 0xc6, 0x00, 0xba, 0x8d, 0x9a, 0xc9, 0xef,
0x1d, 0x2c, 0xfb, 0xbc, 0xb1, 0x9d, 0x5a, 0x98, 0xb4, 0x98, 0x01, 0xc3, 0xa2, 0x2c, 0x49, 0x62, 0x60, 0xd9, 0xfb, 0x8d, 0xed, 0xd4, 0xc2, 0xa4, 0xc5, 0x0c, 0x18, 0x16, 0x65, 0x49, 0x12, 0x4b,
0x89, 0x45, 0x4e, 0xb3, 0xa8, 0x5a, 0xc0, 0xa2, 0x2a, 0x22, 0x3f, 0x82, 0x1b, 0xce, 0x33, 0xa1, 0x2c, 0x72, 0x9a, 0x45, 0xd5, 0x02, 0x16, 0x55, 0x11, 0xf9, 0x02, 0xdc, 0x70, 0x9e, 0x09, 0xbd,
0x37, 0xea, 0x62, 0xcd, 0x51, 0x59, 0x53, 0xe6, 0x27, 0x2d, 0x56, 0x83, 0xc8, 0x2f, 0x70, 0xa0, 0x51, 0x17, 0x6b, 0x8e, 0xca, 0x9a, 0x32, 0x3f, 0x69, 0xb1, 0x1a, 0x44, 0xbe, 0x86, 0x03, 0x3d,
0x47, 0xbd, 0xe6, 0xc9, 0x2d, 0xcf, 0xfd, 0x1e, 0x16, 0x7d, 0xd1, 0x38, 0x94, 0x5e, 0x9a, 0xb4, 0xea, 0x0d, 0x4f, 0xee, 0x79, 0xee, 0xf7, 0xb0, 0xe8, 0x83, 0xc6, 0xa1, 0xf4, 0xd2, 0xa4, 0xc5,
0x58, 0x03, 0xfa, 0x47, 0x0f, 0x9c, 0x55, 0x30, 0x5f, 0x72, 0x7a, 0x09, 0x1e, 0x1e, 0x54, 0xe7, 0x1a, 0xd0, 0xef, 0x7b, 0xe0, 0xac, 0x82, 0xf9, 0x92, 0xd3, 0xbf, 0xc0, 0xc3, 0x83, 0xea, 0x3c,
0x09, 0x81, 0x4e, 0x10, 0x45, 0x39, 0x12, 0xee, 0x32, 0xfc, 0x4d, 0xbe, 0xd6, 0x32, 0xbd, 0xe4, 0x21, 0xd0, 0x09, 0xa2, 0x28, 0x47, 0xc2, 0x5d, 0x86, 0xbf, 0xc9, 0x47, 0x5a, 0xa6, 0x3f, 0x79,
0xf1, 0xec, 0x4e, 0x22, 0xe3, 0x03, 0x66, 0x64, 0xe8, 0x6b, 0x0b, 0x3c, 0x83, 0x79, 0xd5, 0x23, 0x3c, 0x7b, 0x90, 0xc8, 0xf8, 0x80, 0x19, 0x19, 0x72, 0x02, 0xfd, 0x34, 0x0e, 0xff, 0xb9, 0x0d,
0x0d, 0x12, 0x5e, 0xf6, 0x50, 0xbf, 0xc9, 0x31, 0x74, 0x83, 0x28, 0x89, 0x53, 0xe1, 0xdb, 0xc3, 0x12, 0x8e, 0xbc, 0xba, 0xac, 0x8a, 0xe9, 0xbf, 0x16, 0x78, 0x86, 0x2a, 0xaa, 0x7f, 0xaa, 0x70,
0xf6, 0xa9, 0xcb, 0x8a, 0x88, 0x9c, 0x41, 0x2f, 0xc1, 0x9d, 0x85, 0xdf, 0x1e, 0xb6, 0x0d, 0x49, 0x45, 0x7f, 0xf5, 0x9b, 0x1c, 0x43, 0x37, 0x88, 0x92, 0x38, 0x15, 0xbe, 0x3d, 0x6c, 0x9f, 0xb9,
0x8c, 0xa1, 0x58, 0x09, 0x21, 0x43, 0xf0, 0x22, 0x2e, 0xc2, 0x3c, 0x5e, 0x28, 0x6f, 0xa0, 0x1a, 0xac, 0x88, 0xc8, 0x39, 0xf4, 0x12, 0x9c, 0x4a, 0xf8, 0xed, 0x61, 0xdb, 0x90, 0xcb, 0x18, 0x98,
0x2e, 0x33, 0x53, 0xf4, 0x8d, 0x05, 0x9e, 0xa1, 0x26, 0xf1, 0xa1, 0x37, 0x53, 0x3f, 0xa6, 0x57, 0x95, 0x10, 0x32, 0x04, 0x2f, 0xe2, 0x22, 0xcc, 0xe3, 0x85, 0xf2, 0x0d, 0x2a, 0xe5, 0x32, 0x33,
0xc5, 0x38, 0x65, 0x48, 0xce, 0x01, 0x82, 0x28, 0xba, 0x2e, 0x36, 0xb7, 0xf7, 0x6e, 0x6e, 0xa0, 0x45, 0xff, 0xb3, 0xc0, 0x33, 0x94, 0x26, 0x3e, 0xf4, 0x66, 0xea, 0xc7, 0xf4, 0xba, 0x18, 0xa7,
0xc8, 0xb7, 0x30, 0xc8, 0x79, 0x92, 0xad, 0xf8, 0xb5, 0x31, 0xb3, 0xcb, 0x9a, 0x49, 0x72, 0x02, 0x0c, 0xc9, 0x05, 0x40, 0x10, 0x45, 0x37, 0xc5, 0xe6, 0xf6, 0xde, 0xcd, 0x0d, 0x14, 0xf9, 0x04,
0x6e, 0x10, 0x45, 0x97, 0xfa, 0xb8, 0x1d, 0x44, 0xd4, 0x09, 0x42, 0xe1, 0x40, 0xc3, 0x0b, 0x80, 0x06, 0x39, 0x4f, 0xb2, 0x15, 0xbf, 0x31, 0x66, 0x76, 0x59, 0x33, 0x49, 0x4e, 0xc1, 0x0d, 0xa2,
0x83, 0x80, 0x46, 0x8e, 0xbe, 0xb3, 0xc0, 0xc5, 0x19, 0xa6, 0xe9, 0xab, 0x4c, 0x5d, 0x81, 0x6a, 0xe8, 0x4a, 0x1f, 0xb7, 0x83, 0x88, 0x3a, 0x41, 0x28, 0x1c, 0x68, 0x78, 0x01, 0x70, 0x10, 0xd0,
0x7c, 0x7b, 0x7a, 0x55, 0xf1, 0x6b, 0x1b, 0xfc, 0x9e, 0x80, 0xab, 0x49, 0xfa, 0x77, 0x99, 0xa0, 0xc8, 0xd1, 0x57, 0x16, 0xb8, 0x38, 0xc3, 0x34, 0xfd, 0x3b, 0x53, 0xd7, 0xa3, 0x1a, 0xdf, 0x9e,
0xb9, 0x07, 0xac, 0x4e, 0x28, 0x16, 0xd0, 0x9d, 0x59, 0x5e, 0x70, 0x56, 0x86, 0x86, 0x2e, 0xce, 0x5e, 0x57, 0xfc, 0xda, 0x06, 0xbf, 0xa7, 0xe0, 0x6a, 0x92, 0x6e, 0x97, 0x09, 0x0a, 0x34, 0x60,
0x3e, 0x5d, 0xba, 0x4f, 0xd6, 0xa5, 0xb7, 0xad, 0xcb, 0x6f, 0x00, 0xd5, 0x81, 0x04, 0x19, 0x81, 0x75, 0x42, 0xb1, 0x80, 0xce, 0xcd, 0xf2, 0x82, 0xb3, 0x32, 0x34, 0x74, 0x71, 0xf6, 0xe9, 0xd2,
0x8b, 0x32, 0xfc, 0x13, 0x0b, 0xe9, 0x5b, 0xd8, 0xff, 0xc8, 0xec, 0xaf, 0x50, 0xac, 0x86, 0xd0, 0x7d, 0xb1, 0x2e, 0xbd, 0x6d, 0x5d, 0xbe, 0x05, 0xa8, 0x0e, 0x24, 0xc8, 0x08, 0x5c, 0x94, 0xe1,
0x5f, 0xf5, 0x93, 0xf0, 0x1f, 0xf6, 0x52, 0x33, 0x67, 0x7a, 0x23, 0xcd, 0x49, 0x11, 0x91, 0x2f, 0xe7, 0x58, 0x48, 0xdf, 0xc2, 0xfe, 0x47, 0x66, 0x7f, 0x85, 0x62, 0x35, 0x84, 0x7e, 0xa3, 0x9f,
0xc1, 0x11, 0x61, 0x96, 0xf3, 0xc2, 0xa2, 0x3a, 0xa0, 0x6f, 0x2d, 0x80, 0xfa, 0xa2, 0xee, 0x34, 0x8b, 0x5f, 0xb0, 0x97, 0x9a, 0x39, 0xd3, 0x1b, 0x69, 0x4e, 0x8a, 0x88, 0x7c, 0x08, 0x8e, 0x08,
0xa7, 0x61, 0x12, 0xbb, 0x69, 0x92, 0x21, 0x78, 0xab, 0x6a, 0xe3, 0x52, 0x6e, 0x33, 0x45, 0xbe, 0xb3, 0x9c, 0x17, 0xf6, 0xd5, 0x01, 0xfd, 0xdf, 0x02, 0xa8, 0x2f, 0xf1, 0x4e, 0x73, 0x1a, 0x26,
0x83, 0xc3, 0x5b, 0x3e, 0x8b, 0xd3, 0xe7, 0x71, 0xc2, 0x85, 0x0c, 0x92, 0x05, 0x32, 0xdc, 0x66, 0xb1, 0x9b, 0x26, 0x19, 0x82, 0xb7, 0xaa, 0x36, 0x2e, 0xe5, 0x36, 0x53, 0xe4, 0x53, 0x38, 0xbc,
0x1b, 0x59, 0x25, 0x3b, 0x4f, 0xa3, 0x1a, 0xe5, 0x20, 0xaa, 0x91, 0xdb, 0xa4, 0xb1, 0xbb, 0x4d, 0xe7, 0xb3, 0x38, 0xfd, 0x3d, 0x4e, 0xb8, 0x90, 0x41, 0xb2, 0x40, 0x86, 0xdb, 0x6c, 0x23, 0xab,
0xe3, 0x5f, 0x00, 0xf5, 0xfb, 0xa1, 0x88, 0x50, 0xa3, 0x54, 0xe6, 0x28, 0x22, 0xd5, 0x47, 0x53, 0x64, 0xe7, 0x69, 0x54, 0xa3, 0x1c, 0x44, 0x35, 0x72, 0x9b, 0x34, 0x76, 0xb7, 0x69, 0xfc, 0x11,
0x32, 0x4d, 0x23, 0xfe, 0x50, 0xd0, 0x61, 0xa6, 0xe8, 0x45, 0xd9, 0x07, 0x0d, 0xb6, 0xeb, 0xd2, 0xa0, 0x7e, 0x5b, 0x14, 0x11, 0x6a, 0x94, 0xca, 0x1c, 0x45, 0xa4, 0xfa, 0x68, 0x4a, 0xa6, 0x69,
0x1f, 0x43, 0x57, 0x3e, 0x4c, 0x02, 0x71, 0x57, 0x50, 0x52, 0x44, 0xf4, 0x1b, 0x70, 0xab, 0xd7, 0xc4, 0x9f, 0x0a, 0x3a, 0xcc, 0x14, 0xbd, 0x2c, 0xfb, 0xa0, 0xc1, 0x76, 0x3d, 0x08, 0xc7, 0xd0,
0x68, 0xdf, 0x00, 0x94, 0xc2, 0x81, 0xf9, 0xfa, 0xec, 0x22, 0x9d, 0xbe, 0xb7, 0xa1, 0xaf, 0x9a, 0x95, 0x4f, 0x93, 0x40, 0x3c, 0x14, 0x94, 0x14, 0x11, 0xfd, 0x18, 0xdc, 0xea, 0xa5, 0xda, 0x37,
0x3c, 0xda, 0xe2, 0x86, 0x89, 0xdb, 0x4d, 0x13, 0x1b, 0xfa, 0x75, 0x9a, 0xfa, 0x8d, 0x9b, 0xfa, 0x00, 0xa5, 0x70, 0x60, 0xbe, 0x4c, 0xbb, 0x48, 0xa7, 0xaf, 0x6d, 0xe8, 0xab, 0x26, 0xcf, 0xb6,
0x39, 0x68, 0xb5, 0xf2, 0x25, 0xae, 0x2d, 0xf5, 0x29, 0x49, 0xbb, 0x8f, 0x92, 0xb4, 0xb7, 0x43, 0xb8, 0x61, 0xe2, 0x76, 0xd3, 0xc4, 0x86, 0x7e, 0x9d, 0xa6, 0x7e, 0xe3, 0xa6, 0x7e, 0x0e, 0x5a,
0xd2, 0x31, 0x78, 0x61, 0x45, 0xb4, 0xf0, 0xfb, 0x8d, 0x01, 0x6a, 0x09, 0x98, 0x89, 0xda, 0xf4, 0xad, 0x7c, 0xa5, 0x6b, 0x4b, 0xbd, 0x4b, 0xd2, 0xee, 0xb3, 0x24, 0xed, 0xed, 0x90, 0x74, 0x0c,
0x81, 0xbb, 0xe5, 0x03, 0x45, 0xbc, 0x90, 0x81, 0x5c, 0x0a, 0x1f, 0x50, 0xdc, 0x22, 0xa2, 0x17, 0x5e, 0x58, 0x11, 0x2d, 0xfc, 0x7e, 0x63, 0x80, 0x5a, 0x02, 0x66, 0xa2, 0x36, 0x7d, 0xe0, 0x6e,
0xe0, 0x96, 0x9c, 0x0a, 0xf2, 0x03, 0xf4, 0xd5, 0xb1, 0x8c, 0x4b, 0xf6, 0x99, 0x71, 0x72, 0xdc, 0xf9, 0x40, 0x11, 0x2f, 0x64, 0x20, 0x97, 0xc2, 0x07, 0x14, 0xb7, 0x88, 0xe8, 0x25, 0xb8, 0x25,
0xb6, 0x02, 0xd0, 0xff, 0x01, 0xb4, 0x58, 0x7b, 0x1d, 0xb1, 0x4b, 0x93, 0xaf, 0xa0, 0x5f, 0x50, 0xa7, 0x82, 0x7c, 0x0e, 0x7d, 0x75, 0x2c, 0xe3, 0x92, 0xbd, 0x67, 0x9c, 0x1c, 0xb7, 0xad, 0x00,
0x5d, 0x5e, 0x8e, 0x2a, 0xa6, 0xbf, 0x83, 0x57, 0x77, 0x14, 0xe4, 0x27, 0x00, 0xfd, 0x5c, 0x18, 0xf4, 0x57, 0x00, 0x2d, 0xd6, 0x5e, 0x47, 0xec, 0xd2, 0xe4, 0x04, 0xfa, 0x05, 0xd5, 0xe5, 0xe5,
0xf3, 0x94, 0x44, 0xd4, 0x38, 0x66, 0x80, 0x28, 0x05, 0x60, 0xfc, 0xfe, 0x99, 0xcc, 0xe3, 0x74, 0xa8, 0x62, 0xfa, 0x1d, 0x78, 0x75, 0x47, 0x41, 0xbe, 0x04, 0xd0, 0xcf, 0x85, 0x31, 0x4f, 0x49,
0x26, 0xd4, 0xf5, 0x8e, 0x25, 0x4f, 0x04, 0xd6, 0xba, 0x4c, 0x07, 0x34, 0x04, 0x8f, 0xf1, 0x7b, 0x44, 0x8d, 0x63, 0x06, 0x88, 0x52, 0x00, 0xc6, 0x1f, 0x7f, 0x93, 0x79, 0x9c, 0xce, 0x84, 0xba,
0x05, 0x9f, 0x4a, 0x9e, 0x28, 0xea, 0x84, 0x0c, 0x72, 0x0c, 0x2a, 0x47, 0x99, 0x29, 0xd5, 0x26, 0xde, 0xb1, 0xe4, 0x89, 0xc0, 0x5a, 0x97, 0xe9, 0x80, 0x86, 0xe0, 0x31, 0xfe, 0xa8, 0xe0, 0x53,
0xcc, 0x96, 0xa9, 0xfe, 0x23, 0x73, 0x98, 0x0e, 0xd4, 0xfb, 0x19, 0xc5, 0x39, 0xc7, 0x6f, 0x0e, 0xc9, 0x13, 0x45, 0x9d, 0x90, 0x41, 0x8e, 0x41, 0xe5, 0x28, 0x33, 0xa5, 0xda, 0x84, 0xd9, 0x32,
0xb4, 0x97, 0xc3, 0xea, 0x04, 0x4d, 0xaa, 0x4d, 0xd0, 0xf6, 0xfb, 0xff, 0x54, 0xce, 0xa0, 0x37, 0xd5, 0x7f, 0x72, 0x0e, 0xd3, 0x81, 0x7a, 0x3f, 0xa3, 0x38, 0xe7, 0xf8, 0x3d, 0x82, 0xf6, 0x72,
0x8f, 0x85, 0x64, 0xfc, 0x7e, 0xe3, 0xcb, 0xc4, 0x98, 0x91, 0x95, 0x10, 0x43, 0xc5, 0x76, 0x43, 0x58, 0x9d, 0xa0, 0x49, 0xb5, 0x09, 0xda, 0x7e, 0xff, 0x9f, 0xca, 0x39, 0xf4, 0xe6, 0xb1, 0x90,
0xc5, 0x3b, 0x18, 0x30, 0xbe, 0x98, 0xaf, 0x6f, 0x0a, 0x71, 0x9e, 0xa4, 0x24, 0xf9, 0x1e, 0x8e, 0x8c, 0x3f, 0x6e, 0x7c, 0xb5, 0x18, 0x33, 0xb2, 0x12, 0x62, 0xa8, 0xd8, 0x6e, 0xa8, 0xf8, 0x00,
0xc2, 0x65, 0x9e, 0xf3, 0x54, 0xd6, 0xd6, 0xb4, 0xd1, 0x9a, 0x5b, 0xf9, 0xdb, 0x2e, 0x7e, 0x7a, 0x03, 0xc6, 0x17, 0xf3, 0xf5, 0x5d, 0x21, 0xce, 0x8b, 0x94, 0x24, 0x9f, 0xc1, 0x51, 0xb8, 0xcc,
0x8d, 0x3f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x94, 0x9e, 0x86, 0x0e, 0x88, 0x09, 0x00, 0x00, 0x73, 0x9e, 0xca, 0xda, 0x9a, 0x36, 0x5a, 0x73, 0x2b, 0x7f, 0xdf, 0xc5, 0xcf, 0xb2, 0xf1, 0xdb,
0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0xe9, 0xb2, 0x15, 0xa4, 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