Commit 26295d43 authored by jiangpeng's avatar jiangpeng

dapp/vote:add field voteNum in struct GroupInfo

parent 2c015735
...@@ -17,14 +17,8 @@ func (v *vote) ExecLocal_CreateGroup(payload *vty.CreateGroup, tx *types.Transac ...@@ -17,14 +17,8 @@ func (v *vote) ExecLocal_CreateGroup(payload *vty.CreateGroup, tx *types.Transac
groupInfo := decodeGroupInfo(receiptData.Logs[0].Log) groupInfo := decodeGroupInfo(receiptData.Logs[0].Log)
table := newGroupTable(v.GetLocalDB()) table := newGroupTable(v.GetLocalDB())
err := table.Add(groupInfo) kvs, err := v.updateAndSaveTable(table.Add, table.Save, groupInfo, tx, vty.NameCreateGroupAction, "group")
if err != nil { if err != nil {
elog.Error("execLocal createGroup", "txHash", hex.EncodeToString(tx.Hash()), "table add", err)
return nil, err
}
kvs, err := table.Save()
if err != nil {
elog.Error("execLocal createGroup", "txHash", hex.EncodeToString(tx.Hash()), "table save", err)
return nil, err return nil, err
} }
dbSet.KV = kvs dbSet.KV = kvs
...@@ -44,14 +38,8 @@ func (v *vote) ExecLocal_UpdateGroup(update *vty.UpdateGroup, tx *types.Transact ...@@ -44,14 +38,8 @@ func (v *vote) ExecLocal_UpdateGroup(update *vty.UpdateGroup, tx *types.Transact
dbSet := &types.LocalDBSet{} dbSet := &types.LocalDBSet{}
groupInfo := decodeGroupInfo(receiptData.Logs[0].Log) groupInfo := decodeGroupInfo(receiptData.Logs[0].Log)
table := newGroupTable(v.GetLocalDB()) table := newGroupTable(v.GetLocalDB())
err := table.Replace(groupInfo) kvs, err := v.updateAndSaveTable(table.Replace, table.Save, groupInfo, tx, vty.NameUpdateGroupAction, "group")
if err != nil { if err != nil {
elog.Error("execLocal UpdateGroup", "txHash", hex.EncodeToString(tx.Hash()), "groupID", groupInfo.ID, "table replace", err)
return nil, err
}
kvs, err := table.Save()
if err != nil {
elog.Error("execLocal UpdateGroup", "txHash", hex.EncodeToString(tx.Hash()), "groupID", groupInfo.ID, "table save", err)
return nil, err return nil, err
} }
dbSet.KV = kvs dbSet.KV = kvs
...@@ -75,17 +63,24 @@ func (v *vote) ExecLocal_CreateVote(payload *vty.CreateVote, tx *types.Transacti ...@@ -75,17 +63,24 @@ func (v *vote) ExecLocal_CreateVote(payload *vty.CreateVote, tx *types.Transacti
dbSet := &types.LocalDBSet{} dbSet := &types.LocalDBSet{}
voteInfo := decodeVoteInfo(receiptData.Logs[0].Log) voteInfo := decodeVoteInfo(receiptData.Logs[0].Log)
table := newVoteTable(v.GetLocalDB()) table := newVoteTable(v.GetLocalDB())
err := table.Add(voteInfo) kvs, err := v.updateAndSaveTable(table.Add, table.Save, voteInfo, tx, vty.NameCreateVoteAction, "vote")
if err != nil { if err != nil {
elog.Error("execLocal createVote", "txHash", hex.EncodeToString(tx.Hash()), "voteTable add", err)
return nil, err return nil, err
} }
kvs, err := table.Save() dbSet.KV = kvs
table = newGroupTable(v.GetLocalDB())
row, err := table.GetData([]byte(voteInfo.GroupID))
if err != nil { if err != nil {
elog.Error("execLocal createVote", "txHash", hex.EncodeToString(tx.Hash()), "voteTable save", err) elog.Error("execLocal createVote", "txHash", hex.EncodeToString(tx.Hash()), "voteTable get", err)
return nil, err return nil, err
} }
dbSet.KV = kvs groupInfo, _ := row.Data.(*vty.GroupInfo)
groupInfo.VoteNum++
kvs, err = v.updateAndSaveTable(table.Replace, table.Save, groupInfo, tx, vty.NameCreateVoteAction, "group")
if err != nil {
return nil, err
}
dbSet.KV = append(dbSet.KV, kvs...)
//auto gen for localdb auto rollback //auto gen for localdb auto rollback
return v.addAutoRollBack(tx, dbSet.KV), nil return v.addAutoRollBack(tx, dbSet.KV), nil
} }
...@@ -97,28 +92,15 @@ func (v *vote) ExecLocal_CommitVote(payload *vty.CommitVote, tx *types.Transacti ...@@ -97,28 +92,15 @@ func (v *vote) ExecLocal_CommitVote(payload *vty.CommitVote, tx *types.Transacti
table := newVoteTable(v.GetLocalDB()) table := newVoteTable(v.GetLocalDB())
row, err := table.GetData([]byte(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()), "table get", err)
return nil, err return nil, err
} }
voteInfo, ok := row.Data.(*vty.VoteInfo) voteInfo, _ := row.Data.(*vty.VoteInfo)
if !ok {
elog.Error("execLocal commitVote", "txHash", hex.EncodeToString(tx.Hash()), "voteInfo type asset", err)
return nil, types.ErrTypeAsset
}
voteInfo.CommitInfos = append(voteInfo.CommitInfos, commitInfo) voteInfo.CommitInfos = append(voteInfo.CommitInfos, commitInfo)
err = table.Replace(voteInfo) dbSet.KV, err = v.updateAndSaveTable(table.Replace, table.Save, voteInfo, tx, vty.NameCommitVoteAction, "vote")
if err != nil {
elog.Error("execLocal commitVote", "txHash", hex.EncodeToString(tx.Hash()), "voteTable replace", err)
return nil, err
}
kvs, err := table.Save()
if err != nil { if err != nil {
elog.Error("execLocal commitVote", "txHash", hex.EncodeToString(tx.Hash()), "voteTable save", err)
return nil, err return nil, err
} }
dbSet.KV = kvs
//auto gen for localdb auto rollback //auto gen for localdb auto rollback
return v.addAutoRollBack(tx, dbSet.KV), nil return v.addAutoRollBack(tx, dbSet.KV), nil
} }
...@@ -128,7 +110,7 @@ func (v *vote) ExecLocal_CloseVote(payload *vty.CloseVote, tx *types.Transaction ...@@ -128,7 +110,7 @@ func (v *vote) ExecLocal_CloseVote(payload *vty.CloseVote, tx *types.Transaction
table := newVoteTable(v.GetLocalDB()) table := newVoteTable(v.GetLocalDB())
row, err := table.GetData([]byte(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()), "table get", err)
return nil, err return nil, err
} }
voteInfo, ok := row.Data.(*vty.VoteInfo) voteInfo, ok := row.Data.(*vty.VoteInfo)
...@@ -139,17 +121,10 @@ func (v *vote) ExecLocal_CloseVote(payload *vty.CloseVote, tx *types.Transaction ...@@ -139,17 +121,10 @@ func (v *vote) ExecLocal_CloseVote(payload *vty.CloseVote, tx *types.Transaction
} }
voteInfo.Status = voteStatusClosed voteInfo.Status = voteStatusClosed
err = table.Replace(voteInfo) dbSet.KV, err = v.updateAndSaveTable(table.Replace, table.Save, voteInfo, tx, vty.NameCloseVoteAction, "vote")
if err != nil { if err != nil {
elog.Error("execLocal closeVote", "txHash", hex.EncodeToString(tx.Hash()), "voteTable replace", err)
return nil, err return nil, err
} }
kvs, err := table.Save()
if err != nil {
elog.Error("execLocal closeVote", "txHash", hex.EncodeToString(tx.Hash()), "voteTable save", err)
return nil, err
}
dbSet.KV = kvs
//auto gen for localdb auto rollback //auto gen for localdb auto rollback
return v.addAutoRollBack(tx, dbSet.KV), nil return v.addAutoRollBack(tx, dbSet.KV), nil
} }
...@@ -159,27 +134,15 @@ func (v *vote) ExecLocal_UpdateMember(payload *vty.UpdateMember, tx *types.Trans ...@@ -159,27 +134,15 @@ func (v *vote) ExecLocal_UpdateMember(payload *vty.UpdateMember, tx *types.Trans
table := newMemberTable(v.GetLocalDB()) table := newMemberTable(v.GetLocalDB())
row, err := table.GetData([]byte(tx.From())) row, err := table.GetData([]byte(tx.From()))
if err != nil { if err != nil {
elog.Error("execLocal updateMember", "txHash", hex.EncodeToString(tx.Hash()), "memberTable get", err) elog.Error("execLocal updateMember", "txHash", hex.EncodeToString(tx.Hash()), "table get", err)
return nil, err return nil, err
} }
memberInfo, ok := row.Data.(*vty.MemberInfo) memberInfo, _ := row.Data.(*vty.MemberInfo)
if !ok {
elog.Error("execLocal updateMember", "txHash", hex.EncodeToString(tx.Hash()), "memberInfo type asset", err)
return nil, types.ErrTypeAsset
}
memberInfo.Name = payload.GetName() memberInfo.Name = payload.GetName()
err = table.Replace(memberInfo) dbSet.KV, err = v.updateAndSaveTable(table.Replace, table.Save, memberInfo, tx, vty.NameUpdateMemberAction, "member")
if err != nil {
elog.Error("execLocal updateMember", "txHash", hex.EncodeToString(tx.Hash()), "memberTable replace", err)
return nil, err
}
kvs, err := table.Save()
if err != nil { if err != nil {
elog.Error("execLocal updateMember", "txHash", hex.EncodeToString(tx.Hash()), "memberTable save", err)
return nil, err return nil, err
} }
dbSet.KV = kvs
//auto gen for localdb auto rollback //auto gen for localdb auto rollback
return v.addAutoRollBack(tx, dbSet.KV), nil return v.addAutoRollBack(tx, dbSet.KV), nil
} }
...@@ -192,6 +155,24 @@ func (v *vote) addAutoRollBack(tx *types.Transaction, kv []*types.KeyValue) *typ ...@@ -192,6 +155,24 @@ func (v *vote) addAutoRollBack(tx *types.Transaction, kv []*types.KeyValue) *typ
return dbSet return dbSet
} }
type updateFunc func(message types.Message) error
type saveFunc func() ([]*types.KeyValue, error)
func (v *vote) updateAndSaveTable(update updateFunc, save saveFunc, data types.Message, tx *types.Transaction, actionName, tableName string) ([]*types.KeyValue, error) {
err := update(data)
if err != nil {
elog.Error("execLocal "+actionName, "txHash", hex.EncodeToString(tx.Hash()), tableName+" table update", err)
return nil, err
}
kvs, err := save()
if err != nil {
elog.Error("execLocal "+actionName, "txHash", hex.EncodeToString(tx.Hash()), tableName+" table save", err)
return nil, err
}
return kvs, nil
}
func (v *vote) addGroupMember(groupID string, members []*vty.GroupMember) ([]*types.KeyValue, error) { func (v *vote) addGroupMember(groupID string, members []*vty.GroupMember) ([]*types.KeyValue, error) {
table := newMemberTable(v.GetLocalDB()) table := newMemberTable(v.GetLocalDB())
......
...@@ -48,6 +48,7 @@ message GroupInfo { ...@@ -48,6 +48,7 @@ message GroupInfo {
repeated string admins = 5; //管理员列表 repeated string admins = 5; //管理员列表
repeated GroupMember members = 6; //成员列表 repeated GroupMember members = 6; //成员列表
string description = 7; //描述信息 string description = 7; //描述信息
uint32 voteNum = 8; //投票数量
} }
message GroupInfos { message GroupInfos {
......
...@@ -370,6 +370,7 @@ type GroupInfo struct { ...@@ -370,6 +370,7 @@ type GroupInfo struct {
Admins []string `protobuf:"bytes,5,rep,name=admins,proto3" json:"admins,omitempty"` Admins []string `protobuf:"bytes,5,rep,name=admins,proto3" json:"admins,omitempty"`
Members []*GroupMember `protobuf:"bytes,6,rep,name=members,proto3" json:"members,omitempty"` Members []*GroupMember `protobuf:"bytes,6,rep,name=members,proto3" json:"members,omitempty"`
Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"` Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"`
VoteNum uint32 `protobuf:"varint,8,opt,name=voteNum,proto3" json:"voteNum,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:"-"`
...@@ -449,6 +450,13 @@ func (m *GroupInfo) GetDescription() string { ...@@ -449,6 +450,13 @@ func (m *GroupInfo) GetDescription() string {
return "" return ""
} }
func (m *GroupInfo) GetVoteNum() uint32 {
if m != nil {
return m.VoteNum
}
return 0
}
type GroupInfos struct { type GroupInfos struct {
GroupList []*GroupInfo `protobuf:"bytes,1,rep,name=groupList,proto3" json:"groupList,omitempty"` GroupList []*GroupInfo `protobuf:"bytes,1,rep,name=groupList,proto3" json:"groupList,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
...@@ -1259,61 +1267,62 @@ func init() { ...@@ -1259,61 +1267,62 @@ func init() {
} }
var fileDescriptor_21d31c94b62a6ac7 = []byte{ var fileDescriptor_21d31c94b62a6ac7 = []byte{
// 893 bytes of a gzipped FileDescriptorProto // 904 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x6e, 0xeb, 0x44, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x6e, 0xeb, 0x44,
0x10, 0x8e, 0x9d, 0x38, 0x89, 0xc7, 0x4d, 0x29, 0x0b, 0xaa, 0xac, 0xaa, 0x42, 0xd1, 0x82, 0x50, 0x10, 0x8e, 0x9d, 0xd8, 0x89, 0xc7, 0xcd, 0xa1, 0x2c, 0x28, 0xb2, 0x8e, 0x8e, 0x50, 0xb4, 0x20,
0x05, 0x55, 0x04, 0x8d, 0x84, 0x0a, 0xe2, 0x82, 0x42, 0x05, 0x89, 0x44, 0x0b, 0x5a, 0xa0, 0x5c, 0x54, 0xc1, 0x51, 0x04, 0x8d, 0x84, 0x0a, 0xe2, 0x82, 0x42, 0x05, 0x89, 0x44, 0x0b, 0x5a, 0xa0,
0x71, 0xe1, 0xda, 0x4b, 0x6a, 0x11, 0xdb, 0xa9, 0x77, 0x13, 0x35, 0x8f, 0xc0, 0x73, 0x71, 0xc7, 0x5c, 0x71, 0xe1, 0xda, 0x4b, 0x6a, 0x11, 0xdb, 0xa9, 0x77, 0x13, 0x35, 0x8f, 0xc0, 0x73, 0x71,
0xcd, 0x91, 0xce, 0x73, 0x9c, 0x87, 0x38, 0xda, 0x59, 0xff, 0xac, 0xf3, 0xa3, 0xd3, 0xde, 0x65, 0xc7, 0x25, 0x6f, 0x81, 0xc4, 0x43, 0xa0, 0x9d, 0xf5, 0xcf, 0x3a, 0x3f, 0x3a, 0xed, 0x5d, 0x66,
0x66, 0xbf, 0x99, 0x9d, 0xfd, 0xbe, 0x6f, 0x37, 0x06, 0x58, 0x65, 0x92, 0x8f, 0x16, 0x79, 0x26, 0xf6, 0x9b, 0x9d, 0xd9, 0xef, 0xfb, 0x76, 0x63, 0x80, 0x4d, 0x2e, 0xf9, 0x64, 0x55, 0xe4, 0x32,
0x33, 0xe2, 0xc8, 0xf5, 0x82, 0x0b, 0xfa, 0xc6, 0x06, 0xb8, 0xcb, 0x24, 0xbf, 0x0a, 0x65, 0x9c, 0x27, 0x8e, 0xdc, 0xae, 0xb8, 0xa0, 0xff, 0xd9, 0x00, 0xb7, 0xb9, 0xe4, 0x97, 0x91, 0x4c, 0xf2,
0xa5, 0xe4, 0x10, 0x6c, 0xb9, 0xf6, 0xad, 0xa1, 0x75, 0xe6, 0x30, 0x5b, 0xae, 0xc9, 0x57, 0xe0, 0x8c, 0xbc, 0x00, 0x5b, 0x6e, 0x03, 0x6b, 0x6c, 0x9d, 0x39, 0xcc, 0x96, 0x5b, 0xf2, 0x19, 0xf8,
0x85, 0x39, 0x0f, 0x24, 0xff, 0x29, 0xcf, 0x96, 0x0b, 0xdf, 0x1e, 0x5a, 0x67, 0xde, 0x05, 0x19, 0x51, 0xc1, 0x43, 0xc9, 0xbf, 0x2b, 0xf2, 0xf5, 0x2a, 0xb0, 0xc7, 0xd6, 0x99, 0x7f, 0x4e, 0x26,
0x61, 0xed, 0xe8, 0x87, 0x7a, 0x65, 0xd2, 0x62, 0x26, 0x50, 0xd5, 0x2d, 0x17, 0x51, 0x55, 0xd7, 0x58, 0x3b, 0xf9, 0xa6, 0x59, 0x99, 0x75, 0x98, 0x09, 0x54, 0x75, 0xeb, 0x55, 0x5c, 0xd7, 0x75,
0x6e, 0xd4, 0xfd, 0x51, 0xaf, 0xa8, 0x3a, 0x03, 0x48, 0xc6, 0x00, 0xba, 0x8d, 0x9a, 0xc9, 0xef, 0x5b, 0x75, 0xbf, 0x34, 0x2b, 0xaa, 0xce, 0x00, 0x92, 0x29, 0x80, 0xde, 0x46, 0xcd, 0x14, 0xf4,
0x60, 0xd9, 0xfb, 0x8d, 0xed, 0xd4, 0xc2, 0xa4, 0xc5, 0x0c, 0x18, 0x16, 0x65, 0x49, 0x12, 0x4b, 0xb0, 0xec, 0xed, 0x56, 0x3b, 0xb5, 0x30, 0xeb, 0x30, 0x03, 0x86, 0x45, 0x79, 0x9a, 0x26, 0x12,
0x2c, 0x72, 0x9a, 0x45, 0xd5, 0x02, 0x16, 0x55, 0x11, 0xf9, 0x02, 0xdc, 0x70, 0x9e, 0x09, 0xbd, 0x8b, 0x9c, 0x76, 0x51, 0xbd, 0x80, 0x45, 0x75, 0x44, 0x3e, 0x01, 0x2f, 0x5a, 0xe6, 0x42, 0x37,
0x51, 0x17, 0x6b, 0x8e, 0xca, 0x9a, 0x32, 0x3f, 0x69, 0xb1, 0x1a, 0x44, 0xbe, 0x86, 0x03, 0x3d, 0x72, 0xb1, 0xe6, 0xb4, 0xaa, 0xa9, 0xf2, 0xb3, 0x0e, 0x6b, 0x40, 0xe4, 0x73, 0x38, 0xd1, 0xa3,
0xea, 0x0d, 0x4f, 0xee, 0x79, 0xee, 0xf7, 0xb0, 0xe8, 0x83, 0xc6, 0xa1, 0xf4, 0xd2, 0xa4, 0xc5, 0x5e, 0xf3, 0xf4, 0x8e, 0x17, 0x41, 0x1f, 0x8b, 0xde, 0x69, 0x1d, 0x4a, 0x2f, 0xcd, 0x3a, 0xac,
0x1a, 0xd0, 0xef, 0x7b, 0xe0, 0xac, 0x82, 0xf9, 0x92, 0xd3, 0xbf, 0xc0, 0xc3, 0x83, 0xea, 0x3c, 0x05, 0xfd, 0xba, 0x0f, 0xce, 0x26, 0x5c, 0xae, 0x39, 0xfd, 0x0d, 0x7c, 0x3c, 0xa8, 0xce, 0x13,
0x21, 0xd0, 0x09, 0xa2, 0x28, 0x47, 0xc2, 0x5d, 0x86, 0xbf, 0xc9, 0x47, 0x5a, 0xa6, 0x3f, 0x79, 0x02, 0xbd, 0x30, 0x8e, 0x0b, 0x24, 0xdc, 0x63, 0xf8, 0x9b, 0xbc, 0xa7, 0x65, 0xfa, 0x95, 0x27,
0x3c, 0x7b, 0x90, 0xc8, 0xf8, 0x80, 0x19, 0x19, 0x72, 0x02, 0xfd, 0x34, 0x0e, 0xff, 0xb9, 0x0d, 0x8b, 0x7b, 0x89, 0x8c, 0x0f, 0x99, 0x91, 0x21, 0x2f, 0x61, 0x90, 0x25, 0xd1, 0x1f, 0x37, 0x61,
0x12, 0x8e, 0xbc, 0xba, 0xac, 0x8a, 0xe9, 0xbf, 0x16, 0x78, 0x86, 0x2a, 0xaa, 0x7f, 0xaa, 0x70, 0xca, 0x91, 0x57, 0x8f, 0xd5, 0x31, 0xfd, 0xd3, 0x02, 0xdf, 0x50, 0x45, 0xed, 0x9f, 0x29, 0x5c,
0x45, 0x7f, 0xf5, 0x9b, 0x1c, 0x43, 0x37, 0x88, 0x92, 0x38, 0x15, 0xbe, 0x3d, 0x6c, 0x9f, 0xb9, 0xb9, 0xbf, 0xfa, 0x4d, 0x46, 0xe0, 0x86, 0x71, 0x9a, 0x64, 0x22, 0xb0, 0xc7, 0xdd, 0x33, 0x8f,
0xac, 0x88, 0xc8, 0x39, 0xf4, 0x12, 0x9c, 0x4a, 0xf8, 0xed, 0x61, 0xdb, 0x90, 0xcb, 0x18, 0x98, 0x95, 0x11, 0x79, 0x0d, 0xfd, 0x14, 0xa7, 0x12, 0x41, 0x77, 0xdc, 0x35, 0xe4, 0x32, 0x06, 0x66,
0x95, 0x10, 0x32, 0x04, 0x2f, 0xe2, 0x22, 0xcc, 0xe3, 0x85, 0xf2, 0x0d, 0x2a, 0xe5, 0x32, 0x33, 0x15, 0x84, 0x8c, 0xc1, 0x8f, 0xb9, 0x88, 0x8a, 0x64, 0xa5, 0x7c, 0x83, 0x4a, 0x79, 0xcc, 0x4c,
0x45, 0xff, 0xb3, 0xc0, 0x33, 0x94, 0x26, 0x3e, 0xf4, 0x66, 0xea, 0xc7, 0xf4, 0xba, 0x18, 0xa7, 0xd1, 0xbf, 0x2c, 0xf0, 0x0d, 0xa5, 0x49, 0x00, 0xfd, 0x85, 0xfa, 0x31, 0xbf, 0x2a, 0xc7, 0xa9,
0x0c, 0xc9, 0x05, 0x40, 0x10, 0x45, 0x37, 0xc5, 0xe6, 0xf6, 0xde, 0xcd, 0x0d, 0x14, 0xf9, 0x04, 0x42, 0x72, 0x0e, 0x10, 0xc6, 0xf1, 0x75, 0xd9, 0xdc, 0x3e, 0xda, 0xdc, 0x40, 0x91, 0x0f, 0x60,
0x06, 0x39, 0x4f, 0xb2, 0x15, 0xbf, 0x31, 0x66, 0x76, 0x59, 0x33, 0x49, 0x4e, 0xc1, 0x0d, 0xa2, 0x58, 0xf0, 0x34, 0xdf, 0xf0, 0x6b, 0x63, 0x66, 0x8f, 0xb5, 0x93, 0xe4, 0x15, 0x78, 0x61, 0x1c,
0xe8, 0x4a, 0x1f, 0xb7, 0x83, 0x88, 0x3a, 0x41, 0x28, 0x1c, 0x68, 0x78, 0x01, 0x70, 0x10, 0xd0, 0x5f, 0xea, 0xe3, 0xf6, 0x10, 0xd1, 0x24, 0x08, 0x85, 0x13, 0x0d, 0x2f, 0x01, 0x0e, 0x02, 0x5a,
0xc8, 0xd1, 0x57, 0x16, 0xb8, 0x38, 0xc3, 0x34, 0xfd, 0x3b, 0x53, 0xd7, 0xa3, 0x1a, 0xdf, 0x9e, 0x39, 0xfa, 0xaf, 0x05, 0x1e, 0xce, 0x30, 0xcf, 0x7e, 0xcf, 0xd5, 0xf5, 0xa8, 0xc7, 0xb7, 0xe7,
0x5e, 0x57, 0xfc, 0xda, 0x06, 0xbf, 0xa7, 0xe0, 0x6a, 0x92, 0x6e, 0x97, 0x09, 0x0a, 0x34, 0x60, 0x57, 0x35, 0xbf, 0xb6, 0xc1, 0xef, 0x2b, 0xf0, 0x34, 0x49, 0x37, 0xeb, 0x14, 0x05, 0x1a, 0xb2,
0x75, 0x42, 0xb1, 0x80, 0xce, 0xcd, 0xf2, 0x82, 0xb3, 0x32, 0x34, 0x74, 0x71, 0xf6, 0xe9, 0xd2, 0x26, 0xa1, 0x58, 0x40, 0xe7, 0xe6, 0x45, 0xc9, 0x59, 0x15, 0x1a, 0xba, 0x38, 0xc7, 0x74, 0x71,
0x7d, 0xb1, 0x2e, 0xbd, 0x6d, 0x5d, 0xbe, 0x05, 0xa8, 0x0e, 0x24, 0xc8, 0x08, 0x5c, 0x94, 0xe1, 0x9f, 0xad, 0x4b, 0x7f, 0x4f, 0x17, 0x35, 0x81, 0x72, 0x93, 0x9a, 0x6e, 0x80, 0xd3, 0x55, 0x21,
0xe7, 0x58, 0x48, 0xdf, 0xc2, 0xfe, 0x47, 0x66, 0x7f, 0x85, 0x62, 0x35, 0x84, 0x7e, 0xa3, 0x9f, 0xfd, 0x12, 0xa0, 0x3e, 0xaa, 0x20, 0x13, 0xf0, 0x50, 0xa0, 0xef, 0x13, 0x21, 0x03, 0x0b, 0x3b,
0x8b, 0x5f, 0xb0, 0x97, 0x9a, 0x39, 0xd3, 0x1b, 0x69, 0x4e, 0x8a, 0x88, 0x7c, 0x08, 0x8e, 0x08, 0x9f, 0x9a, 0x9d, 0x15, 0x8a, 0x35, 0x10, 0xfa, 0x85, 0x7e, 0x48, 0x7e, 0xd0, 0x5d, 0x46, 0xe0,
0xb3, 0x9c, 0x17, 0xf6, 0xd5, 0x01, 0xfd, 0xdf, 0x02, 0xa8, 0x2f, 0xf1, 0x4e, 0x73, 0x1a, 0x26, 0xe6, 0x7a, 0x04, 0xcd, 0x56, 0x19, 0x91, 0x77, 0xc1, 0x11, 0x51, 0x5e, 0xf0, 0xd2, 0xd8, 0x3a,
0xb1, 0x9b, 0x26, 0x19, 0x82, 0xb7, 0xaa, 0x36, 0x2e, 0xe5, 0x36, 0x53, 0xe4, 0x53, 0x38, 0xbc, 0xa0, 0x7f, 0x5b, 0x00, 0xcd, 0xf5, 0x3e, 0x68, 0x5b, 0xc3, 0x3e, 0x76, 0xdb, 0x3e, 0x63, 0xf0,
0xe7, 0xb3, 0x38, 0xfd, 0x3d, 0x4e, 0xb8, 0x90, 0x41, 0xb2, 0x40, 0x86, 0xdb, 0x6c, 0x23, 0xab, 0x37, 0x75, 0xe3, 0xca, 0x08, 0x66, 0x8a, 0x7c, 0x08, 0x2f, 0xee, 0xf8, 0x22, 0xc9, 0x7e, 0x4e,
0x64, 0xe7, 0x69, 0x54, 0xa3, 0x1c, 0x44, 0x35, 0x72, 0x9b, 0x34, 0x76, 0xb7, 0x69, 0xfc, 0x11, 0x52, 0x2e, 0x64, 0x98, 0xae, 0x90, 0xfb, 0x2e, 0xdb, 0xc9, 0x2a, 0x43, 0xf0, 0x2c, 0x6e, 0x50,
0xa0, 0x7e, 0x5b, 0x14, 0x11, 0x6a, 0x94, 0xca, 0x1c, 0x45, 0xa4, 0xfa, 0x68, 0x4a, 0xa6, 0x69, 0x0e, 0xa2, 0x5a, 0xb9, 0x5d, 0x82, 0xdd, 0x7d, 0xe3, 0x7f, 0x0b, 0xd0, 0xbc, 0x3a, 0x8a, 0x08,
0xc4, 0x9f, 0x0a, 0x3a, 0xcc, 0x14, 0xbd, 0x2c, 0xfb, 0xa0, 0xc1, 0x76, 0x3d, 0x08, 0xc7, 0xd0, 0x35, 0x4a, 0x6d, 0x9b, 0x32, 0x52, 0xfb, 0x68, 0x4a, 0xe6, 0x59, 0xcc, 0x1f, 0x4b, 0x3a, 0xcc,
0x95, 0x4f, 0x93, 0x40, 0x3c, 0x14, 0x94, 0x14, 0x11, 0xfd, 0x18, 0xdc, 0xea, 0xa5, 0xda, 0x37, 0x14, 0xbd, 0xa8, 0xf6, 0x41, 0xeb, 0x1d, 0x7a, 0x2a, 0x46, 0xe0, 0xca, 0xc7, 0x59, 0x28, 0xee,
0x00, 0xa5, 0x70, 0x60, 0xbe, 0x4c, 0xbb, 0x48, 0xa7, 0xaf, 0x6d, 0xe8, 0xab, 0x26, 0xcf, 0xb6, 0x4b, 0x4a, 0xca, 0x88, 0xbe, 0x0f, 0x5e, 0xfd, 0x86, 0x1d, 0x1b, 0x80, 0x52, 0x38, 0x31, 0xdf,
0xb8, 0x61, 0xe2, 0x76, 0xd3, 0xc4, 0x86, 0x7e, 0x9d, 0xa6, 0x7e, 0xe3, 0xa6, 0x7e, 0x0e, 0x5a, 0xac, 0x43, 0xa4, 0xd3, 0x7f, 0x6c, 0x18, 0xa8, 0x4d, 0x9e, 0x6c, 0x7e, 0xc3, 0xde, 0xdd, 0xb6,
0xad, 0x7c, 0xa5, 0x6b, 0x4b, 0xbd, 0x4b, 0xd2, 0xee, 0xb3, 0x24, 0xed, 0xed, 0x90, 0x74, 0x0c, 0xbd, 0x0d, 0xfd, 0x7a, 0x6d, 0xfd, 0xa6, 0x6d, 0xfd, 0x1c, 0xb4, 0x5a, 0xf5, 0x7e, 0x37, 0x96,
0x5e, 0x58, 0x11, 0x2d, 0xfc, 0x7e, 0x63, 0x80, 0x5a, 0x02, 0x66, 0xa2, 0x36, 0x7d, 0xe0, 0x6e, 0x7a, 0x93, 0xa4, 0xee, 0x93, 0x24, 0xed, 0x1f, 0x90, 0x74, 0x0a, 0x7e, 0x54, 0x13, 0x2d, 0x82,
0xf9, 0x40, 0x11, 0x2f, 0x64, 0x20, 0x97, 0xc2, 0x07, 0x14, 0xb7, 0x88, 0xe8, 0x25, 0xb8, 0x25, 0x41, 0x6b, 0x80, 0x46, 0x02, 0x66, 0xa2, 0x76, 0x7d, 0xe0, 0xed, 0x5f, 0xb4, 0x11, 0xb8, 0x42,
0xa7, 0x82, 0x7c, 0x0e, 0x7d, 0x75, 0x2c, 0xe3, 0x92, 0xbd, 0x67, 0x9c, 0x1c, 0xb7, 0xad, 0x00, 0x86, 0x72, 0x2d, 0x02, 0x40, 0x71, 0xcb, 0x88, 0x5e, 0x80, 0x57, 0x71, 0x2a, 0xc8, 0xc7, 0x30,
0xf4, 0x57, 0x00, 0x2d, 0xd6, 0x5e, 0x47, 0xec, 0xd2, 0xe4, 0x04, 0xfa, 0x05, 0xd5, 0xe5, 0xe5, 0x50, 0xc7, 0x32, 0x2e, 0xd9, 0x5b, 0xc6, 0xc9, 0xb1, 0x6d, 0x0d, 0xa0, 0x3f, 0x02, 0x68, 0xb1,
0xa8, 0x62, 0xfa, 0x1d, 0x78, 0x75, 0x47, 0x41, 0xbe, 0x04, 0xd0, 0xcf, 0x85, 0x31, 0x4f, 0x49, 0x8e, 0x3a, 0xe2, 0x90, 0x26, 0x2f, 0x61, 0x50, 0x52, 0x5d, 0x5d, 0x8e, 0x3a, 0xa6, 0x5f, 0x81,
0x44, 0x8d, 0x63, 0x06, 0x88, 0x52, 0x00, 0xc6, 0x1f, 0x7f, 0x93, 0x79, 0x9c, 0xce, 0x84, 0xba, 0xdf, 0xec, 0x28, 0xc8, 0xa7, 0x00, 0xfa, 0x21, 0x31, 0xe6, 0xa9, 0x88, 0x68, 0x70, 0xcc, 0x00,
0xde, 0xb1, 0xe4, 0x89, 0xc0, 0x5a, 0x97, 0xe9, 0x80, 0x86, 0xe0, 0x31, 0xfe, 0xa8, 0xe0, 0x53, 0x51, 0x0a, 0xc0, 0xf8, 0xc3, 0x4f, 0xb2, 0x48, 0xb2, 0x85, 0x50, 0xd7, 0x3b, 0x91, 0x3c, 0x15,
0xc9, 0x13, 0x45, 0x9d, 0x90, 0x41, 0x8e, 0x41, 0xe5, 0x28, 0x33, 0xa5, 0xda, 0x84, 0xd9, 0x32, 0x58, 0xeb, 0x31, 0x1d, 0xd0, 0x08, 0x7c, 0xc6, 0x1f, 0x14, 0x7c, 0x2e, 0x79, 0xaa, 0xa8, 0x13,
0xd5, 0x7f, 0x72, 0x0e, 0xd3, 0x81, 0x7a, 0x3f, 0xa3, 0x38, 0xe7, 0xf8, 0x3d, 0x82, 0xf6, 0x72, 0x32, 0x2c, 0x30, 0xa8, 0x1d, 0x65, 0xa6, 0xd4, 0x36, 0x51, 0xbe, 0xce, 0xf4, 0xdf, 0x9f, 0xc3,
0x58, 0x9d, 0xa0, 0x49, 0xb5, 0x09, 0xda, 0x7e, 0xff, 0x9f, 0xca, 0x39, 0xf4, 0xe6, 0xb1, 0x90, 0x74, 0xa0, 0x5e, 0xd6, 0x38, 0x29, 0x38, 0x7e, 0xa9, 0xa0, 0xbd, 0x1c, 0xd6, 0x24, 0x68, 0x5a,
0x8c, 0x3f, 0x6e, 0x7c, 0xb5, 0x18, 0x33, 0xb2, 0x12, 0x62, 0xa8, 0xd8, 0x6e, 0xa8, 0xf8, 0x00, 0x37, 0x41, 0xdb, 0x1f, 0xff, 0xbb, 0x79, 0x0d, 0xfd, 0x65, 0x22, 0x24, 0xe3, 0x0f, 0x3b, 0xdf,
0x03, 0xc6, 0x17, 0xf3, 0xf5, 0x5d, 0x21, 0xce, 0x8b, 0x94, 0x24, 0x9f, 0xc1, 0x51, 0xb8, 0xcc, 0x33, 0xc6, 0x8c, 0xac, 0x82, 0x18, 0x2a, 0x76, 0x5b, 0x2a, 0xde, 0xc3, 0x90, 0xf1, 0xd5, 0x72,
0x73, 0x9e, 0xca, 0xda, 0x9a, 0x36, 0x5a, 0x73, 0x2b, 0x7f, 0xdf, 0xc5, 0xcf, 0xb2, 0xf1, 0xdb, 0x7b, 0x5b, 0x8a, 0xf3, 0x2c, 0x25, 0xc9, 0x47, 0x70, 0x1a, 0xad, 0x8b, 0x82, 0x67, 0xb2, 0xb1,
0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0xe9, 0xb2, 0x15, 0xa4, 0x09, 0x00, 0x00, 0xa6, 0x8d, 0xd6, 0xdc, 0xcb, 0xdf, 0xb9, 0xf8, 0xc1, 0x36, 0xfd, 0x3f, 0x00, 0x00, 0xff, 0xff,
0xd4, 0x6f, 0xb9, 0xbc, 0xbe, 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