Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
80bdb1bb
Commit
80bdb1bb
authored
Nov 29, 2018
by
张振华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
guess
parent
9fe46fb1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
597 additions
and
275 deletions
+597
-275
exec_local.go
plugin/dapp/guess/executor/exec_local.go
+40
-43
guess.go
plugin/dapp/guess/executor/guess.go
+115
-17
guessdb.go
plugin/dapp/guess/executor/guessdb.go
+107
-54
guess.proto
plugin/dapp/guess/proto/guess.proto
+21
-7
guess.pb.go
plugin/dapp/guess/types/guess.pb.go
+314
-154
No files found.
plugin/dapp/guess/executor/exec_local.go
View file @
80bdb1bb
...
@@ -6,62 +6,59 @@ package executor
...
@@ -6,62 +6,59 @@ package executor
import
(
import
(
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/types"
pkt
"github.com/33cn/plugin/plugin/dapp/
pokerbull
/types"
pkt
"github.com/33cn/plugin/plugin/dapp/
guess
/types"
)
)
func
(
c
*
PokerBull
)
updateIndex
(
log
*
pkt
.
ReceiptPBGame
)
(
kvs
[]
*
types
.
KeyValue
)
{
func
(
c
*
Guess
)
updateIndex
(
log
*
pkt
.
ReceiptGuessGame
)
(
kvs
[]
*
types
.
KeyValue
)
{
//先保存本次Action产生的索引
//新创建游戏
kvs
=
append
(
kvs
,
addPBGameStatusAndPlayer
(
log
.
Status
,
log
.
PlayerNum
,
log
.
Value
,
log
.
Index
,
log
.
GameId
))
if
log
.
Status
==
pkt
.
GuessGameStatusStart
{
kvs
=
append
(
kvs
,
addPBGameStatusIndexKey
(
log
.
Status
,
log
.
GameId
,
log
.
Index
))
//kvs = append(kvs, addGuessGameAddrIndexKey(log.Status, log.Addr, log.GameId, log.Index))
kvs
=
append
(
kvs
,
addPBGameAddrIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameStatusIndexKey
(
log
.
Status
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAdminIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
GameId
,
log
.
Index
))
}
else
if
log
.
Status
==
pkt
.
GuessGameStatusBet
{
//如果是下注状态,则有用户进行了下注操作
kvs
=
append
(
kvs
,
addGuessGameAddrIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAddrStatusIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
/*
kvs
=
append
(
kvs
,
addGuessGameStatusIndexKey
(
log
.
Status
,
log
.
GameId
,
log
.
Index
))
//状态更新
kvs
=
append
(
kvs
,
addGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
GameId
,
log
.
Index
))
if log.Status == pkt.PBGameActionStart {
kvs
=
append
(
kvs
,
addGuessGameAddrStatusIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
kvs = append(kvs, delPBGameStatusAndPlayer(pkt.PBGameActionStart, log.PlayerNum, log.Value, log.PrevIndex))
kvs
=
append
(
kvs
,
addGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
GameId
,
log
.
Index
))
kvs = append(kvs, delPBGameStatusIndexKey(pkt.PBGameActionStart, log.PrevIndex))
//对于老状态进行删除
}
kvs
=
append
(
kvs
,
delGuessGameStatusIndexKey
(
log
.
PreStatus
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameAdminStatusIndexKey
(
log
.
PreStatus
,
log
.
AdminAddr
,
log
.
PreIndex
))
if log.Status == pkt.PBGameActionContinue {
kvs
=
append
(
kvs
,
delGuessGameCategoryStatusIndexKey
(
log
.
PreStatus
,
log
.
Category
,
log
.
PreIndex
))
kvs = append(kvs, delPBGameStatusAndPlayer(pkt.PBGameActionStart, log.PlayerNum, log.Value, log.PrevIndex))
}
else
if
log
.
StatusChange
{
kvs = append(kvs, delPBGameStatusAndPlayer(pkt.PBGameActionContinue, log.PlayerNum, log.Value, log.PrevIndex))
//其他状态时的状态发生变化,要将老状态对应的记录删除,同时加入新状态记录;对于每个地址的下注记录也需要遍历处理。
kvs = append(kvs, delPBGameStatusIndexKey(pkt.PBGameActionStart, log.PrevIndex))
kvs
=
append
(
kvs
,
addGuessGameStatusIndexKey
(
log
.
Status
,
log
.
GameId
,
log
.
Index
))
kvs = append(kvs, delPBGameStatusIndexKey(pkt.PBGameActionContinue, log.PrevIndex))
kvs
=
append
(
kvs
,
addGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
GameId
,
log
.
Index
))
}
kvs
=
append
(
kvs
,
addGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
GameId
,
log
.
Index
))
if log.Status == pkt.PBGameActionQuit {
kvs = append(kvs, delPBGameStatusAndPlayer(pkt.PBGameActionStart, log.PlayerNum, log.Value, log.PrevIndex))
kvs = append(kvs, delPBGameStatusAndPlayer(pkt.PBGameActionContinue, log.PlayerNum, log.Value, log.PrevIndex))
kvs = append(kvs, delPBGameStatusIndexKey(pkt.PBGameActionStart, log.PrevIndex))
kvs = append(kvs, delPBGameStatusIndexKey(pkt.PBGameActionContinue, log.PrevIndex))
}*/
kvs
=
append
(
kvs
,
delGuessGameStatusIndexKey
(
log
.
PreStatus
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameAdminStatusIndexKey
(
log
.
PreStatus
,
log
.
AdminAddr
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameCategoryStatusIndexKey
(
log
.
PreStatus
,
log
.
Category
,
log
.
PreIndex
))
//结束一局,更新所有玩家地址状态
if
!
log
.
IsWaiting
{
//从game中遍历每个地址的记录进行新增和删除
for
_
,
v
:=
range
log
.
Players
{
kvs
=
append
(
kvs
,
addGuessGameAddrStatusIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameId
,
log
.
Index
))
if
v
!=
log
.
Addr
{
kvs
=
append
(
kvs
,
delGuessGameAddrStatusIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAddrIndexKey
(
log
.
Status
,
v
,
log
.
GameId
,
log
.
Index
))
}
kvs
=
append
(
kvs
,
delPBGameAddrIndexKey
(
v
,
log
.
PrevIndex
))
}
kvs
=
append
(
kvs
,
delPBGameStatusAndPlayer
(
log
.
PreStatus
,
log
.
PlayerNum
,
log
.
Value
,
log
.
PrevIndex
))
kvs
=
append
(
kvs
,
delPBGameStatusIndexKey
(
log
.
PreStatus
,
log
.
PrevIndex
))
}
}
return
kvs
return
kvs
}
}
func
(
c
*
PokerBull
)
execLocal
(
receipt
*
types
.
ReceiptData
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
c
*
Guess
)
execLocal
(
receipt
*
types
.
ReceiptData
)
(
*
types
.
LocalDBSet
,
error
)
{
dbSet
:=
&
types
.
LocalDBSet
{}
dbSet
:=
&
types
.
LocalDBSet
{}
if
receipt
.
GetTy
()
!=
types
.
ExecOk
{
if
receipt
.
GetTy
()
!=
types
.
ExecOk
{
return
dbSet
,
nil
return
dbSet
,
nil
}
}
for
i
:=
0
;
i
<
len
(
receipt
.
Logs
);
i
++
{
for
i
:=
0
;
i
<
len
(
receipt
.
Logs
);
i
++
{
item
:=
receipt
.
Logs
[
i
]
item
:=
receipt
.
Logs
[
i
]
if
item
.
Ty
==
pkt
.
TyLogPBGameStart
||
item
.
Ty
==
pkt
.
TyLogPBGameContinue
||
item
.
Ty
==
pkt
.
TyLogPBGameQui
t
{
if
item
.
Ty
>=
pkt
.
TyLogGuessGameStart
&&
item
.
Ty
<=
pkt
.
TyLogGuessGameTimeou
t
{
var
Gamelog
pkt
.
Receipt
PB
Game
var
Gamelog
pkt
.
Receipt
Guess
Game
err
:=
types
.
Decode
(
item
.
Log
,
&
Gamelog
)
err
:=
types
.
Decode
(
item
.
Log
,
&
Gamelog
)
if
err
!=
nil
{
if
err
!=
nil
{
panic
(
err
)
//数据错误了,已经被修改了
panic
(
err
)
//数据错误了,已经被修改了
...
@@ -73,14 +70,14 @@ func (c *PokerBull) execLocal(receipt *types.ReceiptData) (*types.LocalDBSet, er
...
@@ -73,14 +70,14 @@ func (c *PokerBull) execLocal(receipt *types.ReceiptData) (*types.LocalDBSet, er
return
dbSet
,
nil
return
dbSet
,
nil
}
}
func
(
c
*
PokerBull
)
ExecLocal_Start
(
payload
*
pkt
.
PBGameStart
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
c
*
Guess
)
ExecLocal_Start
(
payload
*
pkt
.
PBGameStart
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
return
c
.
execLocal
(
receiptData
)
return
c
.
execLocal
(
receiptData
)
}
}
func
(
c
*
PokerBull
)
ExecLocal_Continue
(
payload
*
pkt
.
PBGameContinue
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
c
*
Guess
)
ExecLocal_Continue
(
payload
*
pkt
.
PBGameContinue
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
return
c
.
execLocal
(
receiptData
)
return
c
.
execLocal
(
receiptData
)
}
}
func
(
c
*
PokerBull
)
ExecLocal_Quit
(
payload
*
pkt
.
PBGameQuit
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
c
*
Guess
)
ExecLocal_Quit
(
payload
*
pkt
.
PBGameQuit
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
return
c
.
execLocal
(
receiptData
)
return
c
.
execLocal
(
receiptData
)
}
}
plugin/dapp/guess/executor/guess.go
View file @
80bdb1bb
...
@@ -45,43 +45,101 @@ func (g *Guess) GetDriverName() string {
...
@@ -45,43 +45,101 @@ func (g *Guess) GetDriverName() string {
return
pkt
.
GuessX
return
pkt
.
GuessX
}
}
//addr prefix
func
calcGuessGameAddrPrefix
(
addr
string
)
[]
byte
{
func
calcGuessGameAddrPrefix
(
addr
string
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr:%s:"
,
addr
)
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr:%s:"
,
addr
)
return
[]
byte
(
key
)
return
[]
byte
(
key
)
}
}
//addr index
func
calcGuessGameAddrKey
(
addr
string
,
index
int64
)
[]
byte
{
func
calcGuessGameAddrKey
(
addr
string
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr:%s:%018d"
,
addr
,
index
)
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr:%s:%018d"
,
addr
,
index
)
return
[]
byte
(
key
)
return
[]
byte
(
key
)
}
}
//status prefix
func
calcGuessGameStatusPrefix
(
status
int32
)
[]
byte
{
func
calcGuessGameStatusPrefix
(
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-status-index:%d:"
,
status
)
key
:=
fmt
.
Sprintf
(
"LODB-guess-status-index:%d:"
,
status
)
return
[]
byte
(
key
)
return
[]
byte
(
key
)
}
}
//status index
func
calcGuessGameStatusKey
(
status
int32
,
index
int64
)
[]
byte
{
func
calcGuessGameStatusKey
(
status
int32
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-status-index:%d:%018d"
,
status
,
index
)
key
:=
fmt
.
Sprintf
(
"LODB-guess-status-index:%d:%018d"
,
status
,
index
)
return
[]
byte
(
key
)
return
[]
byte
(
key
)
}
}
func
calcGuessGameStatusAndPlayerKey
(
category
string
,
status
,
index
int64
)
[]
byte
{
//addr status prefix
key
:=
fmt
.
Sprintf
(
"LODB-guess-category-status:%s:%d:%018d"
,
category
,
status
,
index
)
func
calcGuessGameAddrStatusPrefix
(
addr
string
,
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr-status-index:%s:%d:"
,
addr
,
status
)
return
[]
byte
(
key
)
return
[]
byte
(
key
)
}
}
func
calcGuessGameStatusAndPlayerPrefix
(
category
string
,
status
int32
)
[]
byte
{
//addr status index
var
key
string
func
calcGuessGameAddrStatusKey
(
addr
string
,
status
int32
,
index
int64
)
[]
byte
{
key
=
fmt
.
Sprintf
(
"LODB-guess-category-status:%s:%d"
,
category
,
status
)
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr-status-index:%s:%d:%018d"
,
addr
,
status
,
index
)
return
[]
byte
(
key
)
}
//admin prefix
func
calcGuessGameAdminPrefix
(
addr
string
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin:%s:"
,
addr
)
return
[]
byte
(
key
)
}
//admin index
func
calcGuessGameAdminKey
(
addr
string
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin:%s:%018d"
,
addr
,
index
)
return
[]
byte
(
key
)
}
//admin status prefix
func
calcGuessGameAdminStatusPrefix
(
admin
string
,
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin-status-index:%s:%d:"
,
admin
,
status
)
return
[]
byte
(
key
)
}
//admin status index
func
calcGuessGameAdminStatusKey
(
admin
string
,
status
int32
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin-status-index:%s:%d:%018d"
,
admin
,
status
,
index
)
return
[]
byte
(
key
)
}
func
calcGuessGameCategoryStatusPrefix
(
category
string
,
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-category-status-index:%s:%d:"
,
category
,
status
)
return
[]
byte
(
key
)
return
[]
byte
(
key
)
}
}
func
calcGuessGameCategoryStatusKey
(
category
string
,
status
int32
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-category-status-index:%s:%d:%018d"
,
category
,
status
,
index
)
return
[]
byte
(
key
)
}
func
addGuessGameAddrIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddrKey
(
addr
,
index
)
record
:=
&
pkt
.
GuessGameRecord
{
GameId
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameAddrIndexKey
(
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddrKey
(
addr
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addGuessGameStatusIndexKey
(
status
int32
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
func
addGuessGameStatusIndexKey
(
status
int32
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameStatusKey
(
status
,
index
)
kv
.
Key
=
calcGuessGameStatusKey
(
status
,
index
)
record
:=
&
pkt
.
PBGameIndex
Record
{
record
:=
&
pkt
.
GuessGame
Record
{
GameId
:
gameID
,
GameId
:
gameID
,
Status
:
status
,
Index
:
index
,
Index
:
index
,
}
}
kv
.
Value
=
types
.
Encode
(
record
)
kv
.
Value
=
types
.
Encode
(
record
)
...
@@ -95,10 +153,10 @@ func delGuessGameStatusIndexKey(status int32, index int64) *types.KeyValue {
...
@@ -95,10 +153,10 @@ func delGuessGameStatusIndexKey(status int32, index int64) *types.KeyValue {
return
kv
return
kv
}
}
func
addGuessGameAddrIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
func
addGuessGameAddr
Status
IndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddr
Key
(
addr
,
index
)
kv
.
Key
=
calcGuessGameAddr
StatusKey
(
addr
,
status
,
index
)
record
:=
&
pkt
.
PB
GameRecord
{
record
:=
&
pkt
.
Guess
GameRecord
{
GameId
:
gameID
,
GameId
:
gameID
,
Status
:
status
,
Status
:
status
,
Index
:
index
,
Index
:
index
,
...
@@ -107,27 +165,66 @@ func addGuessGameAddrIndexKey(status int32, addr, gameID string, index int64) *t
...
@@ -107,27 +165,66 @@ func addGuessGameAddrIndexKey(status int32, addr, gameID string, index int64) *t
return
kv
return
kv
}
}
func
delGuessGameAddr
IndexKey
(
addr
string
,
index
int64
)
*
types
.
KeyValue
{
func
delGuessGameAddr
StatusIndexKey
(
status
int32
,
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddrKey
(
addr
,
index
)
kv
.
Key
=
calcGuessGameAddrStatusKey
(
addr
,
status
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addGuessGameAdminIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAdminKey
(
addr
,
index
)
record
:=
&
pkt
.
GuessGameRecord
{
GameId
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameAdminIndexKey
(
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAdminKey
(
addr
,
index
)
kv
.
Value
=
nil
kv
.
Value
=
nil
return
kv
return
kv
}
}
func
add
PBGameStatusAndPlayer
(
status
int32
,
player
int32
,
value
,
index
int64
,
gameId
string
)
*
types
.
KeyValue
{
func
add
GuessGameAdminStatusIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameStatusAndPlayerKey
(
status
,
player
,
value
,
index
)
kv
.
Key
=
calcGuessGameAdminStatusKey
(
addr
,
status
,
index
)
record
:=
&
pkt
.
PBGameIndexRecord
{
record
:=
&
pkt
.
GuessGameRecord
{
GameId
:
gameId
,
GameId
:
gameID
,
Status
:
status
,
Index
:
index
,
Index
:
index
,
}
}
kv
.
Value
=
types
.
Encode
(
record
)
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
return
kv
}
}
func
del
PBGameStatusAndPlayer
(
status
int32
,
player
int32
,
value
,
index
int64
)
*
types
.
KeyValue
{
func
del
GuessGameAdminStatusIndexKey
(
status
int32
,
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGame
StatusAndPlayerKey
(
status
,
player
,
value
,
index
)
kv
.
Key
=
calcGuessGame
AdminStatusKey
(
addr
,
status
,
index
)
kv
.
Value
=
nil
kv
.
Value
=
nil
return
kv
return
kv
}
}
func
addGuessGameCategoryStatusIndexKey
(
status
int32
,
category
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameCategoryStatusKey
(
category
,
status
,
index
)
record
:=
&
pkt
.
GuessGameRecord
{
GameId
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameCategoryStatusIndexKey
(
status
int32
,
category
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameCategoryStatusKey
(
category
,
status
,
index
)
kv
.
Value
=
nil
return
kv
}
\ No newline at end of file
plugin/dapp/guess/executor/guessdb.go
View file @
80bdb1bb
...
@@ -207,7 +207,7 @@ func (action *Action) getIndex() int64 {
...
@@ -207,7 +207,7 @@ func (action *Action) getIndex() int64 {
return
action
.
height
*
types
.
MaxTxsPerBlock
+
int64
(
action
.
index
)
return
action
.
height
*
types
.
MaxTxsPerBlock
+
int64
(
action
.
index
)
}
}
func
(
action
*
Action
)
GetReceiptLog
(
game
*
pkt
.
GuessGame
)
*
types
.
ReceiptLog
{
func
(
action
*
Action
)
GetReceiptLog
(
game
*
pkt
.
GuessGame
,
statusChange
bool
)
*
types
.
ReceiptLog
{
log
:=
&
types
.
ReceiptLog
{}
log
:=
&
types
.
ReceiptLog
{}
r
:=
&
pkt
.
ReceiptGuessGame
{}
r
:=
&
pkt
.
ReceiptGuessGame
{}
r
.
Addr
=
action
.
fromaddr
r
.
Addr
=
action
.
fromaddr
...
@@ -225,8 +225,13 @@ func (action *Action) GetReceiptLog(game *pkt.GuessGame) *types.ReceiptLog {
...
@@ -225,8 +225,13 @@ func (action *Action) GetReceiptLog(game *pkt.GuessGame) *types.ReceiptLog {
log
.
Ty
=
pkt
.
TyLogGuessGameTimeout
log
.
Ty
=
pkt
.
TyLogGuessGameTimeout
}
}
r
.
Index
=
game
.
Index
r
.
GameId
=
game
.
GameId
r
.
GameId
=
game
.
GameId
r
.
Status
=
game
.
Status
r
.
Status
=
game
.
Status
r
.
AdminAddr
=
game
.
AdminAddr
r
.
PreStatus
=
game
.
PreStatus
r
.
StatusChange
=
statusChange
r
.
PreIndex
=
game
.
PreIndex
log
.
Log
=
types
.
Encode
(
r
)
log
.
Log
=
types
.
Encode
(
r
)
return
log
return
log
}
}
...
@@ -456,8 +461,7 @@ func (action *Action) genTxRnd(txhash []byte) (int64, error) {
...
@@ -456,8 +461,7 @@ func (action *Action) genTxRnd(txhash []byte) (int64, error) {
// 新建一局游戏
// 新建一局游戏
func
(
action
*
Action
)
newGame
(
gameId
string
,
start
*
pkt
.
GuessGameStart
)
(
*
pkt
.
GuessGame
,
error
)
{
func
(
action
*
Action
)
newGame
(
gameId
string
,
start
*
pkt
.
GuessGameStart
)
(
*
pkt
.
GuessGame
,
error
)
{
var
game
*
pkt
.
GuessGame
game
:=
&
pkt
.
GuessGame
{
game
=
&
pkt
.
GuessGame
{
GameId
:
gameId
,
GameId
:
gameId
,
Status
:
pkt
.
GuessGameActionStart
,
Status
:
pkt
.
GuessGameActionStart
,
//StartTime: action.blocktime,
//StartTime: action.blocktime,
...
@@ -507,7 +511,8 @@ func (action *Action) GameStart(start *pkt.GuessGameStart) (*types.Receipt, erro
...
@@ -507,7 +511,8 @@ func (action *Action) GameStart(start *pkt.GuessGameStart) (*types.Receipt, erro
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
}
}
if
_
,
ok
:=
getOptions
(
start
.
Options
);
!
ok
{
options
,
ok
:=
GetOptions
(
start
.
Options
)
if
!
ok
{
logger
.
Error
(
"GameStart"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
logger
.
Error
(
"GameStart"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"err"
,
fmt
.
Sprintf
(
"The options is illegal:%s"
,
start
.
Options
))
"err"
,
fmt
.
Sprintf
(
"The options is illegal:%s"
,
start
.
Options
))
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
...
@@ -536,16 +541,23 @@ func (action *Action) GameStart(start *pkt.GuessGameStart) (*types.Receipt, erro
...
@@ -536,16 +541,23 @@ func (action *Action) GameStart(start *pkt.GuessGameStart) (*types.Receipt, erro
}
}
gameId
:=
common
.
ToHex
(
action
.
txhash
)
gameId
:=
common
.
ToHex
(
action
.
txhash
)
var
game
*
pkt
.
GuessGame
=
nil
game
,
err
:=
action
.
newGame
(
gameId
,
start
)
game
,
err
:=
action
.
newGame
(
gameId
,
start
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
game
.
StartTime
=
action
.
blocktime
game
.
StartTime
=
action
.
blocktime
game
.
AdminAddr
=
action
.
fromaddr
game
.
AdminAddr
=
action
.
fromaddr
game
.
PreIndex
=
0
game
.
Index
=
action
.
getIndex
()
game
.
Index
=
action
.
getIndex
()
game
.
Status
=
pkt
.
GuessGameStatusStart
game
.
Status
=
pkt
.
GuessGameStatusStart
receiptLog
:=
action
.
GetReceiptLog
(
game
)
game
.
BetStat
.
TotalBetTimes
=
0
game
.
BetStat
.
TotalBetsNumber
=
0
for
i
:=
0
;
i
<
len
(
options
);
i
++
{
item
:=
&
pkt
.
GuessBetStatItem
{
Option
:
options
[
i
],
BetsNumber
:
0
,
BetsTimes
:
0
}
game
.
BetStat
.
Items
=
append
(
game
.
BetStat
.
Items
,
item
)
}
receiptLog
:=
action
.
GetReceiptLog
(
game
,
false
)
logs
=
append
(
logs
,
receiptLog
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
...
@@ -582,6 +594,7 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
...
@@ -582,6 +594,7 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
return
nil
,
err
return
nil
,
err
}
}
prevStatus
:=
game
.
Status
if
game
.
Status
!=
pkt
.
GuessGameStatusStart
&&
game
.
Status
!=
pkt
.
GuessGameStatusBet
&&
game
.
Status
!=
pkt
.
GuessGameStatusStopBet
{
if
game
.
Status
!=
pkt
.
GuessGameStatusStart
&&
game
.
Status
!=
pkt
.
GuessGameStatusBet
&&
game
.
Status
!=
pkt
.
GuessGameStatusStopBet
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Status error"
,
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Status error"
,
game
.
GetStatus
())
game
.
GetStatus
())
...
@@ -591,25 +604,28 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
...
@@ -591,25 +604,28 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
canBet
:=
action
.
RefreshStatusByTime
(
game
)
canBet
:=
action
.
RefreshStatusByTime
(
game
)
if
canBet
==
false
{
if
canBet
==
false
{
receiptLog
:=
action
.
GetReceiptLog
(
game
)
var
receiptLog
*
types
.
ReceiptLog
if
prevStatus
!=
game
.
Status
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
true
)
}
else
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
false
)
}
logs
=
append
(
logs
,
receiptLog
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
}
}
//如果当前游戏状态可以下注,统一设定游戏状态为GuessGameStatusBet
game
.
Status
=
pkt
.
GuessGameStatusBet
//检查竞猜选项是否合法
//检查竞猜选项是否合法
options
,
legal
:=
g
etOptions
(
game
.
GetOptions
())
options
,
legal
:=
G
etOptions
(
game
.
GetOptions
())
if
!
legal
||
len
(
options
)
==
0
{
if
!
legal
||
len
(
options
)
==
0
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Game Options illegal"
,
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Game Options illegal"
,
game
.
GetOptions
())
game
.
GetOptions
())
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
}
}
if
!
i
sLegalOption
(
options
,
pbBet
.
GetOption
())
{
if
!
I
sLegalOption
(
options
,
pbBet
.
GetOption
())
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Option illegal"
,
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Option illegal"
,
pbBet
.
GetOption
())
pbBet
.
GetOption
())
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
...
@@ -639,33 +655,44 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
...
@@ -639,33 +655,44 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
logger
.
Error
(
"GameCreate.ExecFrozen"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"amount"
,
checkValue
,
"err"
,
err
.
Error
())
logger
.
Error
(
"GameCreate.ExecFrozen"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"amount"
,
checkValue
,
"err"
,
err
.
Error
())
return
nil
,
err
return
nil
,
err
}
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
bet
:=
&
pkt
.
GuessBet
{
Option
:
pbBet
.
GetOption
(),
BetsNumber
:
pbBet
.
BetsNum
}
//如果当前游戏状态可以下注,统一设定游戏状态为GuessGameStatusBet
player
:=
&
pkt
.
GuessPlayer
{
Addr
:
action
.
fromaddr
,
Bet
:
bet
}
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusBet
)
game
.
Plays
=
append
(
game
.
Plays
,
player
)
action
.
AddGuessBet
(
game
,
pbBet
)
exist
:=
false
var
receiptLog
*
types
.
ReceiptLog
for
i
:=
0
;
i
<
len
(
game
.
Bets
);
i
++
{
if
prevStatus
!=
game
.
Status
{
if
game
.
Bets
[
i
]
.
Option
==
pbBet
.
GetOption
()
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
true
)
exist
=
true
}
else
{
game
.
Bets
[
i
]
.
BetsNumber
+=
pbBet
.
GetBetsNum
()
receiptLog
=
action
.
GetReceiptLog
(
game
,
false
)
}
}
}
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
if
!
exist
{
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
game
.
Bets
=
append
(
game
.
Bets
,
bet
)
}
}
game
.
BetsNumber
+=
pbBet
.
GetBetsNum
()
func
(
action
*
Action
)
AddGuessBet
(
game
*
pkt
.
GuessGame
,
pbBet
*
pkt
.
GuessGameBet
)
{
bet
:=
&
pkt
.
GuessBet
{
Option
:
pbBet
.
GetOption
(),
BetsNumber
:
pbBet
.
BetsNum
,
Index
:
game
.
Index
}
player
:=
&
pkt
.
GuessPlayer
{
Addr
:
action
.
fromaddr
,
Bet
:
bet
}
game
.
Plays
=
append
(
game
.
Plays
,
player
)
logs
=
append
(
logs
,
receipt
.
Logs
...
)
for
i
:=
0
;
i
<
len
(
game
.
BetStat
.
Items
);
i
++
{
kv
=
append
(
kv
,
receipt
.
KV
...
)
if
game
.
BetStat
.
Items
[
i
]
.
Option
==
pbBet
.
GetOption
()
{
//针对具体选项更新统计项
game
.
BetStat
.
Items
[
i
]
.
BetsNumber
+=
pbBet
.
GetBetsNum
()
game
.
BetStat
.
Items
[
i
]
.
BetsTimes
++
receiptLog
:=
action
.
GetReceiptLog
(
game
)
//更新整体统计
logs
=
append
(
logs
,
receiptLog
)
game
.
BetStat
.
TotalBetsNumber
+=
pbBet
.
GetBetsNum
()
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
game
.
BetStat
.
TotalBetTimes
++
break
}
}
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
game
.
BetsNumber
+=
pbBet
.
GetBetsNum
()
}
}
func
(
action
*
Action
)
GamePublish
(
publish
*
pkt
.
GuessGamePublish
)
(
*
types
.
Receipt
,
error
)
{
func
(
action
*
Action
)
GamePublish
(
publish
*
pkt
.
GuessGamePublish
)
(
*
types
.
Receipt
,
error
)
{
...
@@ -686,6 +713,7 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
...
@@ -686,6 +713,7 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
}
}
prevStatus
:=
game
.
Status
if
game
.
Status
!=
pkt
.
GuessGameStatusStart
&&
game
.
Status
!=
pkt
.
GuessGameStatusBet
&&
game
.
Status
!=
pkt
.
GuessGameStatusStopBet
{
if
game
.
Status
!=
pkt
.
GuessGameStatusStart
&&
game
.
Status
!=
pkt
.
GuessGameStatusBet
&&
game
.
Status
!=
pkt
.
GuessGameStatusStopBet
{
logger
.
Error
(
"GamePublish"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Status error"
,
logger
.
Error
(
"GamePublish"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Status error"
,
game
.
GetStatus
())
game
.
GetStatus
())
...
@@ -693,20 +721,19 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
...
@@ -693,20 +721,19 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
}
}
//检查竞猜选项是否合法
//检查竞猜选项是否合法
options
,
legal
:=
g
etOptions
(
game
.
GetOptions
())
options
,
legal
:=
G
etOptions
(
game
.
GetOptions
())
if
!
legal
||
len
(
options
)
==
0
{
if
!
legal
||
len
(
options
)
==
0
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Game Options illegal"
,
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Game Options illegal"
,
game
.
GetOptions
())
game
.
GetOptions
())
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
}
}
if
!
i
sLegalOption
(
options
,
publish
.
GetResult
())
{
if
!
I
sLegalOption
(
options
,
publish
.
GetResult
())
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Option illegal"
,
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Option illegal"
,
publish
.
GetResult
())
publish
.
GetResult
())
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
}
}
game
.
Status
=
pkt
.
GuessGameStatusPublish
game
.
Result
=
publish
.
Result
game
.
Result
=
publish
.
Result
//先遍历所有下注数据,对于输家,转移资金到Admin账户合约地址;
//先遍历所有下注数据,对于输家,转移资金到Admin账户合约地址;
...
@@ -723,14 +750,15 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
...
@@ -723,14 +750,15 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
logs
=
append
(
logs
,
receipt
.
Logs
...
)
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
}
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusPublish
)
//计算竞猜正确的筹码总数
//计算竞猜正确的筹码总数
totalBetsNumber
:=
uint32
(
0
)
totalBetsNumber
:=
game
.
BetStat
.
TotalBetsNumber
winBetsNumber
:=
uint32
(
0
)
winBetsNumber
:=
uint32
(
0
)
for
j
:=
0
;
j
<
len
(
game
.
Bets
);
j
++
{
for
j
:=
0
;
j
<
len
(
game
.
Bet
Stat
.
Item
s
);
j
++
{
if
game
.
Bets
[
j
]
.
Option
==
game
.
Result
{
if
game
.
Bet
Stat
.
Item
s
[
j
]
.
Option
==
game
.
Result
{
winBetsNumber
=
game
.
Bets
[
j
]
.
BetsNumber
winBetsNumber
=
game
.
Bet
Stat
.
Item
s
[
j
]
.
BetsNumber
}
}
totalBetsNumber
+=
game
.
Bets
[
j
]
.
BetsNumber
}
}
//再遍历赢家,按照投注占比分配所有筹码
//再遍历赢家,按照投注占比分配所有筹码
...
@@ -763,7 +791,12 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
...
@@ -763,7 +791,12 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
kv
=
append
(
kv
,
receipt
.
KV
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
}
receiptLog
:=
action
.
GetReceiptLog
(
game
)
var
receiptLog
*
types
.
ReceiptLog
if
prevStatus
!=
game
.
Status
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
true
)
}
else
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
false
)
}
logs
=
append
(
logs
,
receiptLog
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
...
@@ -781,6 +814,14 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
...
@@ -781,6 +814,14 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
return
nil
,
err
return
nil
,
err
}
}
if
game
.
Status
==
pkt
.
GuessGameStatusPublish
||
game
.
Status
==
pkt
.
GuessGameStatusAbort
{
logger
.
Error
(
"GameAbort"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"game status not allow abort"
,
game
.
Status
)
return
nil
,
err
}
preStatus
:=
game
.
Status
//根据区块链高度或时间刷新游戏状态。
//根据区块链高度或时间刷新游戏状态。
action
.
RefreshStatusByTime
(
game
)
action
.
RefreshStatusByTime
(
game
)
...
@@ -805,16 +846,21 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
...
@@ -805,16 +846,21 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
logs
=
append
(
logs
,
receipt
.
Logs
...
)
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
}
game
.
Status
=
pkt
.
GuessGameStatusAbort
game
.
Index
=
action
.
getIndex
(
game
)
receiptLog
:=
action
.
GetReceiptLog
(
game
)
if
game
.
Status
!=
preStatus
{
//说明action.RefreshStatusByTime(game)调用时已经更新过状态和index了,这里直接再改状态就行了。
game
.
Status
=
pkt
.
GuessGameStatusAbort
}
else
{
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusAbort
)
}
receiptLog
:=
action
.
GetReceiptLog
(
game
,
true
)
logs
=
append
(
logs
,
receiptLog
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
}
}
func
g
etOptions
(
strOptions
string
)
(
options
[]
string
,
legal
bool
){
func
G
etOptions
(
strOptions
string
)
(
options
[]
string
,
legal
bool
){
legal
=
true
legal
=
true
items
:=
strings
.
Split
(
strOptions
,
";"
)
items
:=
strings
.
Split
(
strOptions
,
";"
)
for
i
:=
0
;
i
<
len
(
items
);
i
++
{
for
i
:=
0
;
i
<
len
(
items
);
i
++
{
...
@@ -832,7 +878,7 @@ func getOptions(strOptions string) (options []string, legal bool){
...
@@ -832,7 +878,7 @@ func getOptions(strOptions string) (options []string, legal bool){
return
options
,
legal
return
options
,
legal
}
}
func
i
sLegalOption
(
options
[]
string
,
option
string
)
bool
{
func
I
sLegalOption
(
options
[]
string
,
option
string
)
bool
{
for
i
:=
0
;
i
<
len
(
options
);
i
++
{
for
i
:=
0
;
i
<
len
(
options
);
i
++
{
if
options
[
i
]
==
option
{
if
options
[
i
]
==
option
{
return
true
return
true
...
@@ -842,15 +888,25 @@ func isLegalOption(options []string, option string) bool {
...
@@ -842,15 +888,25 @@ func isLegalOption(options []string, option string) bool {
return
false
return
false
}
}
func
(
action
*
Action
)
ChangeStatus
(
game
*
pkt
.
GuessGame
,
destStatus
uint32
)
{
if
game
.
Status
!=
destStatus
{
game
.
PreStatus
=
game
.
Status
game
.
PreIndex
=
game
.
Index
game
.
Status
=
destStatus
game
.
Index
=
action
.
getIndex
()
}
return
}
func
(
action
*
Action
)
RefreshStatusByTime
(
game
*
pkt
.
GuessGame
)
(
canBet
bool
)
{
func
(
action
*
Action
)
RefreshStatusByTime
(
game
*
pkt
.
GuessGame
)
(
canBet
bool
)
{
// 检查区块高度是否超过最大下注高度限制,看是否可以下注
// 检查区块高度是否超过最大下注高度限制,看是否可以下注
if
game
.
GetMaxHeight
()
<=
action
.
height
{
if
game
.
GetMaxHeight
()
<=
action
.
height
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Height over limit"
,
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Height over limit"
,
action
.
height
,
"MaxHeight"
,
game
.
GetMaxHeight
())
action
.
height
,
"MaxHeight"
,
game
.
GetMaxHeight
())
if
game
.
GetExpireHeight
()
>
action
.
height
{
if
game
.
GetExpireHeight
()
>
action
.
height
{
game
.
Status
=
pkt
.
GuessGameStatusStopBet
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusStopBet
)
}
else
{
}
else
{
game
.
Status
=
pkt
.
GuessGameStatusTimeOut
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusTimeOut
)
}
}
canBet
=
false
canBet
=
false
...
@@ -881,9 +937,9 @@ func (action *Action) RefreshStatusByTime(game *pkt.GuessGame) (canBet bool) {
...
@@ -881,9 +937,9 @@ func (action *Action) RefreshStatusByTime(game *pkt.GuessGame) (canBet bool) {
game
.
GetMaxTime
())
game
.
GetMaxTime
())
if
tNow
.
After
(
tExpire
)
{
if
tNow
.
After
(
tExpire
)
{
game
.
Status
=
pkt
.
GuessGameStatusTimeOut
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusTimeOut
)
}
else
{
}
else
{
game
.
Status
=
pkt
.
GuessGameStatusStopBet
action
.
ChangeStatus
(
game
,
pkt
.
GuessGameStatusStopBet
)
}
}
canBet
=
false
canBet
=
false
...
@@ -896,16 +952,13 @@ func (action *Action) RefreshStatusByTime(game *pkt.GuessGame) (canBet bool) {
...
@@ -896,16 +952,13 @@ func (action *Action) RefreshStatusByTime(game *pkt.GuessGame) (canBet bool) {
}
}
func
(
action
*
Action
)
CheckTime
(
start
*
pkt
.
GuessGameStart
)
bool
{
func
(
action
*
Action
)
CheckTime
(
start
*
pkt
.
GuessGameStart
)
bool
{
MinBetTimeInterval
=
2
//2h
MinBetTimeoutInterval
=
24
//24h
if
action
.
height
+
MinBetBlockNum
>
start
.
MaxHeight
||
start
.
MaxHeight
+
MinBetTimeoutNum
>
start
.
ExpireHeight
{
if
action
.
height
+
MinBetBlockNum
>
start
.
MaxHeight
||
start
.
MaxHeight
+
MinBetTimeoutNum
>
start
.
ExpireHeight
{
return
false
return
false
}
}
tNow
:=
time
.
Now
()
tNow
:=
time
.
Now
()
d1
,
_
:=
time
.
ParseDuration
(
MinBetTimeInterval
)
d1
,
_
:=
time
.
ParseDuration
(
MinBetTimeInterval
)
//最短开奖时间
d2
,
_
:=
time
.
ParseDuration
(
MinBetTimeoutInterval
)
d2
,
_
:=
time
.
ParseDuration
(
MinBetTimeoutInterval
)
//最短游戏过期时间
if
len
(
start
.
GetMaxTime
())
==
0
{
if
len
(
start
.
GetMaxTime
())
==
0
{
tNow
.
Add
(
d1
)
tNow
.
Add
(
d1
)
start
.
MaxTime
=
tNow
.
Format
(
"2006-01-02 15:04:05"
)
start
.
MaxTime
=
tNow
.
Format
(
"2006-01-02 15:04:05"
)
...
...
plugin/dapp/guess/proto/guess.proto
View file @
80bdb1bb
...
@@ -21,15 +21,15 @@ message GuessGame {
...
@@ -21,15 +21,15 @@ message GuessGame {
uint32
oneBet
=
13
;
//一注等于多少bty或者token
uint32
oneBet
=
13
;
//一注等于多少bty或者token
uint32
maxBets
=
14
;
//单次可以下多少注,默认100
uint32
maxBets
=
14
;
//单次可以下多少注,默认100
uint32
maxBetsNumber
=
15
;
//最多可以下多少注
uint32
maxBetsNumber
=
15
;
//最多可以下多少注
uint
32
fee
=
16
;
//收取费用,不带则表示不收费
uint
64
fee
=
16
;
//收取费用,不带则表示不收费
string
feeAddr
=
17
;
//收费地址
string
feeAddr
=
17
;
//收费地址
string
expire
=
18
;
//游戏过期时间
string
expire
=
18
;
//游戏过期时间
int64
expireHeight
=
19
;
//游戏过期区块高度
int64
expireHeight
=
19
;
//游戏过期区块高度
string
adminAddr
=
20
;
//游戏创建者地址,只有该地址可以开奖
string
adminAddr
=
20
;
//游戏创建者地址,只有该地址可以开奖
uint32
betsNumber
=
21
;
//已下注数,如果数量达到maxBetsNumber,则不允许再下注
uint32
betsNumber
=
21
;
//已下注数,如果数量达到maxBetsNumber,则不允许再下注
repeated
GuessPlayer
plays
=
22
;
//参与游戏下注的玩家投注信息
repeated
GuessPlayer
plays
=
22
;
//参与游戏下注的玩家投注信息
string
result
=
23
;
string
result
=
23
;
//公布的中奖结果
repeated
GuessBet
bets
=
24
;
GuessBetStat
betStat
=
24
;
int64
index
=
25
;
int64
index
=
25
;
int64
preIndex
=
26
;
int64
preIndex
=
26
;
}
}
...
@@ -48,7 +48,17 @@ message GuessBet {
...
@@ -48,7 +48,17 @@ message GuessBet {
int64
preIndex
=
6
;
int64
preIndex
=
6
;
}
}
message
GuessBetStat
{
uint32
totalBetTimes
=
1
;
uint32
totalBetsNumber
=
2
;
repeated
GuessBetStatItem
items
=
3
;
}
message
GuessBetStatItem
{
string
option
=
1
;
uint32
betsNumber
=
2
;
uint32
betsTimes
=
3
;
}
//斗牛游戏内容
//斗牛游戏内容
message
PokerBull
{
message
PokerBull
{
...
@@ -264,12 +274,16 @@ message ReceiptPBGame {
...
@@ -264,12 +274,16 @@ message ReceiptPBGame {
message
ReceiptGuessGame
{
message
ReceiptGuessGame
{
string
gameId
=
1
;
string
gameId
=
1
;
uint32
status
=
2
;
uint32
preStatus
=
2
;
string
addr
=
3
;
uint32
status
=
3
;
int64
index
=
4
;
string
addr
=
4
;
string
adminAddr
=
5
;
int64
preIndex
=
6
;
int64
index
=
7
;
string
category
=
8
;
bool
statusChange
=
9
;
}
}
message
GuessStartTxReq
{
message
GuessStartTxReq
{
string
topic
=
1
;
string
topic
=
1
;
string
options
=
2
;
string
options
=
2
;
...
...
plugin/dapp/guess/types/guess.pb.go
View file @
80bdb1bb
...
@@ -40,7 +40,7 @@ type GuessGame struct {
...
@@ -40,7 +40,7 @@ type GuessGame struct {
OneBet
uint32
`protobuf:"varint,13,opt,name=oneBet,proto3" json:"oneBet,omitempty"`
OneBet
uint32
`protobuf:"varint,13,opt,name=oneBet,proto3" json:"oneBet,omitempty"`
MaxBets
uint32
`protobuf:"varint,14,opt,name=maxBets,proto3" json:"maxBets,omitempty"`
MaxBets
uint32
`protobuf:"varint,14,opt,name=maxBets,proto3" json:"maxBets,omitempty"`
MaxBetsNumber
uint32
`protobuf:"varint,15,opt,name=maxBetsNumber,proto3" json:"maxBetsNumber,omitempty"`
MaxBetsNumber
uint32
`protobuf:"varint,15,opt,name=maxBetsNumber,proto3" json:"maxBetsNumber,omitempty"`
Fee
uint
32
`protobuf:"varint,16,opt,name=fee,proto3" json:"fee,omitempty"`
Fee
uint
64
`protobuf:"varint,16,opt,name=fee,proto3" json:"fee,omitempty"`
FeeAddr
string
`protobuf:"bytes,17,opt,name=feeAddr,proto3" json:"feeAddr,omitempty"`
FeeAddr
string
`protobuf:"bytes,17,opt,name=feeAddr,proto3" json:"feeAddr,omitempty"`
Expire
string
`protobuf:"bytes,18,opt,name=expire,proto3" json:"expire,omitempty"`
Expire
string
`protobuf:"bytes,18,opt,name=expire,proto3" json:"expire,omitempty"`
ExpireHeight
int64
`protobuf:"varint,19,opt,name=expireHeight,proto3" json:"expireHeight,omitempty"`
ExpireHeight
int64
`protobuf:"varint,19,opt,name=expireHeight,proto3" json:"expireHeight,omitempty"`
...
@@ -48,7 +48,7 @@ type GuessGame struct {
...
@@ -48,7 +48,7 @@ type GuessGame struct {
BetsNumber
uint32
`protobuf:"varint,21,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
BetsNumber
uint32
`protobuf:"varint,21,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
Plays
[]
*
GuessPlayer
`protobuf:"bytes,22,rep,name=plays,proto3" json:"plays,omitempty"`
Plays
[]
*
GuessPlayer
`protobuf:"bytes,22,rep,name=plays,proto3" json:"plays,omitempty"`
Result
string
`protobuf:"bytes,23,opt,name=result,proto3" json:"result,omitempty"`
Result
string
`protobuf:"bytes,23,opt,name=result,proto3" json:"result,omitempty"`
Bet
s
[]
*
GuessBet
`protobuf:"bytes,24,rep,name=bets,proto3" json:"bets
,omitempty"`
Bet
Stat
*
GuessBetStat
`protobuf:"bytes,24,opt,name=betStat,proto3" json:"betStat
,omitempty"`
Index
int64
`protobuf:"varint,25,opt,name=index,proto3" json:"index,omitempty"`
Index
int64
`protobuf:"varint,25,opt,name=index,proto3" json:"index,omitempty"`
PreIndex
int64
`protobuf:"varint,26,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
PreIndex
int64
`protobuf:"varint,26,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
...
@@ -186,7 +186,7 @@ func (m *GuessGame) GetMaxBetsNumber() uint32 {
...
@@ -186,7 +186,7 @@ func (m *GuessGame) GetMaxBetsNumber() uint32 {
return
0
return
0
}
}
func
(
m
*
GuessGame
)
GetFee
()
uint
32
{
func
(
m
*
GuessGame
)
GetFee
()
uint
64
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Fee
return
m
.
Fee
}
}
...
@@ -242,9 +242,9 @@ func (m *GuessGame) GetResult() string {
...
@@ -242,9 +242,9 @@ func (m *GuessGame) GetResult() string {
return
""
return
""
}
}
func
(
m
*
GuessGame
)
GetBet
s
()
[]
*
GuessBe
t
{
func
(
m
*
GuessGame
)
GetBet
Stat
()
*
GuessBetSta
t
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Bet
s
return
m
.
Bet
Stat
}
}
return
nil
return
nil
}
}
...
@@ -389,6 +389,116 @@ func (m *GuessBet) GetPreIndex() int64 {
...
@@ -389,6 +389,116 @@ func (m *GuessBet) GetPreIndex() int64 {
return
0
return
0
}
}
type
GuessBetStat
struct
{
TotalBetTimes
uint32
`protobuf:"varint,1,opt,name=totalBetTimes,proto3" json:"totalBetTimes,omitempty"`
TotalBetsNumber
uint32
`protobuf:"varint,2,opt,name=totalBetsNumber,proto3" json:"totalBetsNumber,omitempty"`
Items
[]
*
GuessBetStatItem
`protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
GuessBetStat
)
Reset
()
{
*
m
=
GuessBetStat
{}
}
func
(
m
*
GuessBetStat
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessBetStat
)
ProtoMessage
()
{}
func
(
*
GuessBetStat
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
}
}
func
(
m
*
GuessBetStat
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_GuessBetStat
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
GuessBetStat
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_GuessBetStat
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
GuessBetStat
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_GuessBetStat
.
Merge
(
m
,
src
)
}
func
(
m
*
GuessBetStat
)
XXX_Size
()
int
{
return
xxx_messageInfo_GuessBetStat
.
Size
(
m
)
}
func
(
m
*
GuessBetStat
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_GuessBetStat
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_GuessBetStat
proto
.
InternalMessageInfo
func
(
m
*
GuessBetStat
)
GetTotalBetTimes
()
uint32
{
if
m
!=
nil
{
return
m
.
TotalBetTimes
}
return
0
}
func
(
m
*
GuessBetStat
)
GetTotalBetsNumber
()
uint32
{
if
m
!=
nil
{
return
m
.
TotalBetsNumber
}
return
0
}
func
(
m
*
GuessBetStat
)
GetItems
()
[]
*
GuessBetStatItem
{
if
m
!=
nil
{
return
m
.
Items
}
return
nil
}
type
GuessBetStatItem
struct
{
Option
string
`protobuf:"bytes,1,opt,name=option,proto3" json:"option,omitempty"`
BetsNumber
uint32
`protobuf:"varint,2,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
BetsTimes
uint32
`protobuf:"varint,3,opt,name=betsTimes,proto3" json:"betsTimes,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
GuessBetStatItem
)
Reset
()
{
*
m
=
GuessBetStatItem
{}
}
func
(
m
*
GuessBetStatItem
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessBetStatItem
)
ProtoMessage
()
{}
func
(
*
GuessBetStatItem
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
}
}
func
(
m
*
GuessBetStatItem
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_GuessBetStatItem
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
GuessBetStatItem
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_GuessBetStatItem
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
GuessBetStatItem
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_GuessBetStatItem
.
Merge
(
m
,
src
)
}
func
(
m
*
GuessBetStatItem
)
XXX_Size
()
int
{
return
xxx_messageInfo_GuessBetStatItem
.
Size
(
m
)
}
func
(
m
*
GuessBetStatItem
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_GuessBetStatItem
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_GuessBetStatItem
proto
.
InternalMessageInfo
func
(
m
*
GuessBetStatItem
)
GetOption
()
string
{
if
m
!=
nil
{
return
m
.
Option
}
return
""
}
func
(
m
*
GuessBetStatItem
)
GetBetsNumber
()
uint32
{
if
m
!=
nil
{
return
m
.
BetsNumber
}
return
0
}
func
(
m
*
GuessBetStatItem
)
GetBetsTimes
()
uint32
{
if
m
!=
nil
{
return
m
.
BetsTimes
}
return
0
}
//斗牛游戏内容
//斗牛游戏内容
type
PokerBull
struct
{
type
PokerBull
struct
{
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
...
@@ -416,7 +526,7 @@ func (m *PokerBull) Reset() { *m = PokerBull{} }
...
@@ -416,7 +526,7 @@ func (m *PokerBull) Reset() { *m = PokerBull{} }
func
(
m
*
PokerBull
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PokerBull
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PokerBull
)
ProtoMessage
()
{}
func
(
*
PokerBull
)
ProtoMessage
()
{}
func
(
*
PokerBull
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PokerBull
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
5
}
}
}
func
(
m
*
PokerBull
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PokerBull
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -565,7 +675,7 @@ func (m *PBHand) Reset() { *m = PBHand{} }
...
@@ -565,7 +675,7 @@ func (m *PBHand) Reset() { *m = PBHand{} }
func
(
m
*
PBHand
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBHand
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBHand
)
ProtoMessage
()
{}
func
(
*
PBHand
)
ProtoMessage
()
{}
func
(
*
PBHand
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBHand
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
6
}
}
}
func
(
m
*
PBHand
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBHand
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -636,7 +746,7 @@ func (m *PBPlayer) Reset() { *m = PBPlayer{} }
...
@@ -636,7 +746,7 @@ func (m *PBPlayer) Reset() { *m = PBPlayer{} }
func
(
m
*
PBPlayer
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBPlayer
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBPlayer
)
ProtoMessage
()
{}
func
(
*
PBPlayer
)
ProtoMessage
()
{}
func
(
*
PBPlayer
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBPlayer
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
5
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
7
}
}
}
func
(
m
*
PBPlayer
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBPlayer
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -701,7 +811,7 @@ func (m *PBResult) Reset() { *m = PBResult{} }
...
@@ -701,7 +811,7 @@ func (m *PBResult) Reset() { *m = PBResult{} }
func
(
m
*
PBResult
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBResult
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBResult
)
ProtoMessage
()
{}
func
(
*
PBResult
)
ProtoMessage
()
{}
func
(
*
PBResult
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBResult
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
6
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
8
}
}
}
func
(
m
*
PBResult
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBResult
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -770,7 +880,7 @@ func (m *PBPoker) Reset() { *m = PBPoker{} }
...
@@ -770,7 +880,7 @@ func (m *PBPoker) Reset() { *m = PBPoker{} }
func
(
m
*
PBPoker
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBPoker
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBPoker
)
ProtoMessage
()
{}
func
(
*
PBPoker
)
ProtoMessage
()
{}
func
(
*
PBPoker
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBPoker
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
7
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
9
}
}
}
func
(
m
*
PBPoker
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBPoker
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -823,7 +933,7 @@ func (m *PBGameAction) Reset() { *m = PBGameAction{} }
...
@@ -823,7 +933,7 @@ func (m *PBGameAction) Reset() { *m = PBGameAction{} }
func
(
m
*
PBGameAction
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBGameAction
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameAction
)
ProtoMessage
()
{}
func
(
*
PBGameAction
)
ProtoMessage
()
{}
func
(
*
PBGameAction
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBGameAction
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
8
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
10
}
}
}
func
(
m
*
PBGameAction
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBGameAction
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1039,7 +1149,7 @@ func (m *PBGameStart) Reset() { *m = PBGameStart{} }
...
@@ -1039,7 +1149,7 @@ func (m *PBGameStart) Reset() { *m = PBGameStart{} }
func
(
m
*
PBGameStart
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBGameStart
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameStart
)
ProtoMessage
()
{}
func
(
*
PBGameStart
)
ProtoMessage
()
{}
func
(
*
PBGameStart
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBGameStart
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
9
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
11
}
}
}
func
(
m
*
PBGameStart
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBGameStart
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1086,7 +1196,7 @@ func (m *PBGameContinue) Reset() { *m = PBGameContinue{} }
...
@@ -1086,7 +1196,7 @@ func (m *PBGameContinue) Reset() { *m = PBGameContinue{} }
func
(
m
*
PBGameContinue
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBGameContinue
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameContinue
)
ProtoMessage
()
{}
func
(
*
PBGameContinue
)
ProtoMessage
()
{}
func
(
*
PBGameContinue
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBGameContinue
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
0
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
2
}
}
}
func
(
m
*
PBGameContinue
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBGameContinue
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1126,7 +1236,7 @@ func (m *PBGameQuit) Reset() { *m = PBGameQuit{} }
...
@@ -1126,7 +1236,7 @@ func (m *PBGameQuit) Reset() { *m = PBGameQuit{} }
func
(
m
*
PBGameQuit
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBGameQuit
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameQuit
)
ProtoMessage
()
{}
func
(
*
PBGameQuit
)
ProtoMessage
()
{}
func
(
*
PBGameQuit
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBGameQuit
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
1
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
3
}
}
}
func
(
m
*
PBGameQuit
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBGameQuit
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1166,7 +1276,7 @@ func (m *PBGameQuery) Reset() { *m = PBGameQuery{} }
...
@@ -1166,7 +1276,7 @@ func (m *PBGameQuery) Reset() { *m = PBGameQuery{} }
func
(
m
*
PBGameQuery
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBGameQuery
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameQuery
)
ProtoMessage
()
{}
func
(
*
PBGameQuery
)
ProtoMessage
()
{}
func
(
*
PBGameQuery
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBGameQuery
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
2
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
4
}
}
}
func
(
m
*
PBGameQuery
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBGameQuery
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1213,7 +1323,7 @@ func (m *GuessGameAction) Reset() { *m = GuessGameAction{} }
...
@@ -1213,7 +1323,7 @@ func (m *GuessGameAction) Reset() { *m = GuessGameAction{} }
func
(
m
*
GuessGameAction
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGameAction
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameAction
)
ProtoMessage
()
{}
func
(
*
GuessGameAction
)
ProtoMessage
()
{}
func
(
*
GuessGameAction
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGameAction
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
3
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
5
}
}
}
func
(
m
*
GuessGameAction
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGameAction
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1473,7 +1583,7 @@ func (m *GuessGameStart) Reset() { *m = GuessGameStart{} }
...
@@ -1473,7 +1583,7 @@ func (m *GuessGameStart) Reset() { *m = GuessGameStart{} }
func
(
m
*
GuessGameStart
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGameStart
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameStart
)
ProtoMessage
()
{}
func
(
*
GuessGameStart
)
ProtoMessage
()
{}
func
(
*
GuessGameStart
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGameStart
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
4
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
6
}
}
}
func
(
m
*
GuessGameStart
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGameStart
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1606,7 +1716,7 @@ func (m *GuessGameBet) Reset() { *m = GuessGameBet{} }
...
@@ -1606,7 +1716,7 @@ func (m *GuessGameBet) Reset() { *m = GuessGameBet{} }
func
(
m
*
GuessGameBet
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGameBet
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameBet
)
ProtoMessage
()
{}
func
(
*
GuessGameBet
)
ProtoMessage
()
{}
func
(
*
GuessGameBet
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGameBet
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
5
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
7
}
}
}
func
(
m
*
GuessGameBet
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGameBet
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1660,7 +1770,7 @@ func (m *GuessGameAbort) Reset() { *m = GuessGameAbort{} }
...
@@ -1660,7 +1770,7 @@ func (m *GuessGameAbort) Reset() { *m = GuessGameAbort{} }
func
(
m
*
GuessGameAbort
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGameAbort
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameAbort
)
ProtoMessage
()
{}
func
(
*
GuessGameAbort
)
ProtoMessage
()
{}
func
(
*
GuessGameAbort
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGameAbort
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
6
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
8
}
}
}
func
(
m
*
GuessGameAbort
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGameAbort
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1701,7 +1811,7 @@ func (m *GuessGamePublish) Reset() { *m = GuessGamePublish{} }
...
@@ -1701,7 +1811,7 @@ func (m *GuessGamePublish) Reset() { *m = GuessGamePublish{} }
func
(
m
*
GuessGamePublish
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGamePublish
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGamePublish
)
ProtoMessage
()
{}
func
(
*
GuessGamePublish
)
ProtoMessage
()
{}
func
(
*
GuessGamePublish
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGamePublish
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
7
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
9
}
}
}
func
(
m
*
GuessGamePublish
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGamePublish
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1749,7 +1859,7 @@ func (m *GuessGameQuery) Reset() { *m = GuessGameQuery{} }
...
@@ -1749,7 +1859,7 @@ func (m *GuessGameQuery) Reset() { *m = GuessGameQuery{} }
func
(
m
*
GuessGameQuery
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGameQuery
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameQuery
)
ProtoMessage
()
{}
func
(
*
GuessGameQuery
)
ProtoMessage
()
{}
func
(
*
GuessGameQuery
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGameQuery
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
18
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
20
}
}
}
func
(
m
*
GuessGameQuery
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGameQuery
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1798,7 +1908,7 @@ func (m *QueryPBGameListByStatusAndPlayerNum) Reset() { *m = QueryPBGame
...
@@ -1798,7 +1908,7 @@ func (m *QueryPBGameListByStatusAndPlayerNum) Reset() { *m = QueryPBGame
func
(
m
*
QueryPBGameListByStatusAndPlayerNum
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
QueryPBGameListByStatusAndPlayerNum
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryPBGameListByStatusAndPlayerNum
)
ProtoMessage
()
{}
func
(
*
QueryPBGameListByStatusAndPlayerNum
)
ProtoMessage
()
{}
func
(
*
QueryPBGameListByStatusAndPlayerNum
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
QueryPBGameListByStatusAndPlayerNum
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
19
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
21
}
}
}
func
(
m
*
QueryPBGameListByStatusAndPlayerNum
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
QueryPBGameListByStatusAndPlayerNum
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1854,7 +1964,7 @@ func (m *PBGameRecord) Reset() { *m = PBGameRecord{} }
...
@@ -1854,7 +1964,7 @@ func (m *PBGameRecord) Reset() { *m = PBGameRecord{} }
func
(
m
*
PBGameRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBGameRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameRecord
)
ProtoMessage
()
{}
func
(
*
PBGameRecord
)
ProtoMessage
()
{}
func
(
*
PBGameRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBGameRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
0
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
2
}
}
}
func
(
m
*
PBGameRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBGameRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1908,7 +2018,7 @@ func (m *PBGameIndexRecord) Reset() { *m = PBGameIndexRecord{} }
...
@@ -1908,7 +2018,7 @@ func (m *PBGameIndexRecord) Reset() { *m = PBGameIndexRecord{} }
func
(
m
*
PBGameIndexRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBGameIndexRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameIndexRecord
)
ProtoMessage
()
{}
func
(
*
PBGameIndexRecord
)
ProtoMessage
()
{}
func
(
*
PBGameIndexRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBGameIndexRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
1
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
3
}
}
}
func
(
m
*
PBGameIndexRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBGameIndexRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1954,7 +2064,7 @@ func (m *PBGameRecords) Reset() { *m = PBGameRecords{} }
...
@@ -1954,7 +2064,7 @@ func (m *PBGameRecords) Reset() { *m = PBGameRecords{} }
func
(
m
*
PBGameRecords
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBGameRecords
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBGameRecords
)
ProtoMessage
()
{}
func
(
*
PBGameRecords
)
ProtoMessage
()
{}
func
(
*
PBGameRecords
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBGameRecords
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
2
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
4
}
}
}
func
(
m
*
PBGameRecords
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBGameRecords
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -1996,7 +2106,7 @@ func (m *QueryPBGameInfo) Reset() { *m = QueryPBGameInfo{} }
...
@@ -1996,7 +2106,7 @@ func (m *QueryPBGameInfo) Reset() { *m = QueryPBGameInfo{} }
func
(
m
*
QueryPBGameInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
QueryPBGameInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryPBGameInfo
)
ProtoMessage
()
{}
func
(
*
QueryPBGameInfo
)
ProtoMessage
()
{}
func
(
*
QueryPBGameInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
QueryPBGameInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
3
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
5
}
}
}
func
(
m
*
QueryPBGameInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
QueryPBGameInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2056,7 +2166,7 @@ func (m *ReplyPBGame) Reset() { *m = ReplyPBGame{} }
...
@@ -2056,7 +2166,7 @@ func (m *ReplyPBGame) Reset() { *m = ReplyPBGame{} }
func
(
m
*
ReplyPBGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
ReplyPBGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReplyPBGame
)
ProtoMessage
()
{}
func
(
*
ReplyPBGame
)
ProtoMessage
()
{}
func
(
*
ReplyPBGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ReplyPBGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
4
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
6
}
}
}
func
(
m
*
ReplyPBGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
ReplyPBGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2095,7 +2205,7 @@ func (m *QueryPBGameInfos) Reset() { *m = QueryPBGameInfos{} }
...
@@ -2095,7 +2205,7 @@ func (m *QueryPBGameInfos) Reset() { *m = QueryPBGameInfos{} }
func
(
m
*
QueryPBGameInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
QueryPBGameInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryPBGameInfos
)
ProtoMessage
()
{}
func
(
*
QueryPBGameInfos
)
ProtoMessage
()
{}
func
(
*
QueryPBGameInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
QueryPBGameInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
5
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
7
}
}
}
func
(
m
*
QueryPBGameInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
QueryPBGameInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2134,7 +2244,7 @@ func (m *ReplyPBGameList) Reset() { *m = ReplyPBGameList{} }
...
@@ -2134,7 +2244,7 @@ func (m *ReplyPBGameList) Reset() { *m = ReplyPBGameList{} }
func
(
m
*
ReplyPBGameList
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
ReplyPBGameList
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReplyPBGameList
)
ProtoMessage
()
{}
func
(
*
ReplyPBGameList
)
ProtoMessage
()
{}
func
(
*
ReplyPBGameList
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ReplyPBGameList
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
6
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
8
}
}
}
func
(
m
*
ReplyPBGameList
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
ReplyPBGameList
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2176,7 +2286,7 @@ func (m *QueryGuessGameInfo) Reset() { *m = QueryGuessGameInfo{} }
...
@@ -2176,7 +2286,7 @@ func (m *QueryGuessGameInfo) Reset() { *m = QueryGuessGameInfo{} }
func
(
m
*
QueryGuessGameInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
QueryGuessGameInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryGuessGameInfo
)
ProtoMessage
()
{}
func
(
*
QueryGuessGameInfo
)
ProtoMessage
()
{}
func
(
*
QueryGuessGameInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
QueryGuessGameInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
7
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
9
}
}
}
func
(
m
*
QueryGuessGameInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
QueryGuessGameInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2236,7 +2346,7 @@ func (m *ReplyGuessGameInfo) Reset() { *m = ReplyGuessGameInfo{} }
...
@@ -2236,7 +2346,7 @@ func (m *ReplyGuessGameInfo) Reset() { *m = ReplyGuessGameInfo{} }
func
(
m
*
ReplyGuessGameInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
ReplyGuessGameInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReplyGuessGameInfo
)
ProtoMessage
()
{}
func
(
*
ReplyGuessGameInfo
)
ProtoMessage
()
{}
func
(
*
ReplyGuessGameInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ReplyGuessGameInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
28
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
30
}
}
}
func
(
m
*
ReplyGuessGameInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
ReplyGuessGameInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2275,7 +2385,7 @@ func (m *QueryGuessGameInfos) Reset() { *m = QueryGuessGameInfos{} }
...
@@ -2275,7 +2385,7 @@ func (m *QueryGuessGameInfos) Reset() { *m = QueryGuessGameInfos{} }
func
(
m
*
QueryGuessGameInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
QueryGuessGameInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryGuessGameInfos
)
ProtoMessage
()
{}
func
(
*
QueryGuessGameInfos
)
ProtoMessage
()
{}
func
(
*
QueryGuessGameInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
QueryGuessGameInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
29
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
31
}
}
}
func
(
m
*
QueryGuessGameInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
QueryGuessGameInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2314,7 +2424,7 @@ func (m *ReplyGuessGameInfos) Reset() { *m = ReplyGuessGameInfos{} }
...
@@ -2314,7 +2424,7 @@ func (m *ReplyGuessGameInfos) Reset() { *m = ReplyGuessGameInfos{} }
func
(
m
*
ReplyGuessGameInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
ReplyGuessGameInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReplyGuessGameInfos
)
ProtoMessage
()
{}
func
(
*
ReplyGuessGameInfos
)
ProtoMessage
()
{}
func
(
*
ReplyGuessGameInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ReplyGuessGameInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
0
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
2
}
}
}
func
(
m
*
ReplyGuessGameInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
ReplyGuessGameInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2362,7 +2472,7 @@ func (m *ReceiptPBGame) Reset() { *m = ReceiptPBGame{} }
...
@@ -2362,7 +2472,7 @@ func (m *ReceiptPBGame) Reset() { *m = ReceiptPBGame{} }
func
(
m
*
ReceiptPBGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
ReceiptPBGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReceiptPBGame
)
ProtoMessage
()
{}
func
(
*
ReceiptPBGame
)
ProtoMessage
()
{}
func
(
*
ReceiptPBGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ReceiptPBGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
1
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
3
}
}
}
func
(
m
*
ReceiptPBGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
ReceiptPBGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2455,9 +2565,14 @@ func (m *ReceiptPBGame) GetPreStatus() int32 {
...
@@ -2455,9 +2565,14 @@ func (m *ReceiptPBGame) GetPreStatus() int32 {
type
ReceiptGuessGame
struct
{
type
ReceiptGuessGame
struct
{
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
Status
uint32
`protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
PreStatus
uint32
`protobuf:"varint,2,opt,name=preStatus,proto3" json:"preStatus,omitempty"`
Addr
string
`protobuf:"bytes,3,opt,name=addr,proto3" json:"addr,omitempty"`
Status
uint32
`protobuf:"varint,3,opt,name=status,proto3" json:"status,omitempty"`
Index
int64
`protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"`
Addr
string
`protobuf:"bytes,4,opt,name=addr,proto3" json:"addr,omitempty"`
AdminAddr
string
`protobuf:"bytes,5,opt,name=adminAddr,proto3" json:"adminAddr,omitempty"`
PreIndex
int64
`protobuf:"varint,6,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
Index
int64
`protobuf:"varint,7,opt,name=index,proto3" json:"index,omitempty"`
Category
string
`protobuf:"bytes,8,opt,name=category,proto3" json:"category,omitempty"`
StatusChange
bool
`protobuf:"varint,9,opt,name=statusChange,proto3" json:"statusChange,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:"-"`
...
@@ -2467,7 +2582,7 @@ func (m *ReceiptGuessGame) Reset() { *m = ReceiptGuessGame{} }
...
@@ -2467,7 +2582,7 @@ func (m *ReceiptGuessGame) Reset() { *m = ReceiptGuessGame{} }
func
(
m
*
ReceiptGuessGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
ReceiptGuessGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReceiptGuessGame
)
ProtoMessage
()
{}
func
(
*
ReceiptGuessGame
)
ProtoMessage
()
{}
func
(
*
ReceiptGuessGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ReceiptGuessGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
2
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
4
}
}
}
func
(
m
*
ReceiptGuessGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
ReceiptGuessGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2495,6 +2610,13 @@ func (m *ReceiptGuessGame) GetGameId() string {
...
@@ -2495,6 +2610,13 @@ func (m *ReceiptGuessGame) GetGameId() string {
return
""
return
""
}
}
func
(
m
*
ReceiptGuessGame
)
GetPreStatus
()
uint32
{
if
m
!=
nil
{
return
m
.
PreStatus
}
return
0
}
func
(
m
*
ReceiptGuessGame
)
GetStatus
()
uint32
{
func
(
m
*
ReceiptGuessGame
)
GetStatus
()
uint32
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Status
return
m
.
Status
...
@@ -2509,6 +2631,20 @@ func (m *ReceiptGuessGame) GetAddr() string {
...
@@ -2509,6 +2631,20 @@ func (m *ReceiptGuessGame) GetAddr() string {
return
""
return
""
}
}
func
(
m
*
ReceiptGuessGame
)
GetAdminAddr
()
string
{
if
m
!=
nil
{
return
m
.
AdminAddr
}
return
""
}
func
(
m
*
ReceiptGuessGame
)
GetPreIndex
()
int64
{
if
m
!=
nil
{
return
m
.
PreIndex
}
return
0
}
func
(
m
*
ReceiptGuessGame
)
GetIndex
()
int64
{
func
(
m
*
ReceiptGuessGame
)
GetIndex
()
int64
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Index
return
m
.
Index
...
@@ -2516,6 +2652,20 @@ func (m *ReceiptGuessGame) GetIndex() int64 {
...
@@ -2516,6 +2652,20 @@ func (m *ReceiptGuessGame) GetIndex() int64 {
return
0
return
0
}
}
func
(
m
*
ReceiptGuessGame
)
GetCategory
()
string
{
if
m
!=
nil
{
return
m
.
Category
}
return
""
}
func
(
m
*
ReceiptGuessGame
)
GetStatusChange
()
bool
{
if
m
!=
nil
{
return
m
.
StatusChange
}
return
false
}
type
GuessStartTxReq
struct
{
type
GuessStartTxReq
struct
{
Topic
string
`protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"`
Topic
string
`protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"`
Options
string
`protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"`
Options
string
`protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"`
...
@@ -2540,7 +2690,7 @@ func (m *GuessStartTxReq) Reset() { *m = GuessStartTxReq{} }
...
@@ -2540,7 +2690,7 @@ func (m *GuessStartTxReq) Reset() { *m = GuessStartTxReq{} }
func
(
m
*
GuessStartTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessStartTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessStartTxReq
)
ProtoMessage
()
{}
func
(
*
GuessStartTxReq
)
ProtoMessage
()
{}
func
(
*
GuessStartTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessStartTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
3
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
5
}
}
}
func
(
m
*
GuessStartTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessStartTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2672,7 +2822,7 @@ func (m *GuessBetTxReq) Reset() { *m = GuessBetTxReq{} }
...
@@ -2672,7 +2822,7 @@ func (m *GuessBetTxReq) Reset() { *m = GuessBetTxReq{} }
func
(
m
*
GuessBetTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessBetTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessBetTxReq
)
ProtoMessage
()
{}
func
(
*
GuessBetTxReq
)
ProtoMessage
()
{}
func
(
*
GuessBetTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessBetTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
4
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
6
}
}
}
func
(
m
*
GuessBetTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessBetTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2725,7 +2875,7 @@ func (m *GuessAbortTxReq) Reset() { *m = GuessAbortTxReq{} }
...
@@ -2725,7 +2875,7 @@ func (m *GuessAbortTxReq) Reset() { *m = GuessAbortTxReq{} }
func
(
m
*
GuessAbortTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessAbortTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessAbortTxReq
)
ProtoMessage
()
{}
func
(
*
GuessAbortTxReq
)
ProtoMessage
()
{}
func
(
*
GuessAbortTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessAbortTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
5
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
7
}
}
}
func
(
m
*
GuessAbortTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessAbortTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2765,7 +2915,7 @@ func (m *GuessPublishTxReq) Reset() { *m = GuessPublishTxReq{} }
...
@@ -2765,7 +2915,7 @@ func (m *GuessPublishTxReq) Reset() { *m = GuessPublishTxReq{} }
func
(
m
*
GuessPublishTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessPublishTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessPublishTxReq
)
ProtoMessage
()
{}
func
(
*
GuessPublishTxReq
)
ProtoMessage
()
{}
func
(
*
GuessPublishTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessPublishTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
6
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
8
}
}
}
func
(
m
*
GuessPublishTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessPublishTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2812,7 +2962,7 @@ func (m *PBContinueTxReq) Reset() { *m = PBContinueTxReq{} }
...
@@ -2812,7 +2962,7 @@ func (m *PBContinueTxReq) Reset() { *m = PBContinueTxReq{} }
func
(
m
*
PBContinueTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBContinueTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBContinueTxReq
)
ProtoMessage
()
{}
func
(
*
PBContinueTxReq
)
ProtoMessage
()
{}
func
(
*
PBContinueTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBContinueTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
7
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
9
}
}
}
func
(
m
*
PBContinueTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBContinueTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2859,7 +3009,7 @@ func (m *PBQuitTxReq) Reset() { *m = PBQuitTxReq{} }
...
@@ -2859,7 +3009,7 @@ func (m *PBQuitTxReq) Reset() { *m = PBQuitTxReq{} }
func
(
m
*
PBQuitTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBQuitTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBQuitTxReq
)
ProtoMessage
()
{}
func
(
*
PBQuitTxReq
)
ProtoMessage
()
{}
func
(
*
PBQuitTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBQuitTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
38
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
40
}
}
}
func
(
m
*
PBQuitTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBQuitTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2906,7 +3056,7 @@ func (m *PBQueryReq) Reset() { *m = PBQueryReq{} }
...
@@ -2906,7 +3056,7 @@ func (m *PBQueryReq) Reset() { *m = PBQueryReq{} }
func
(
m
*
PBQueryReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBQueryReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBQueryReq
)
ProtoMessage
()
{}
func
(
*
PBQueryReq
)
ProtoMessage
()
{}
func
(
*
PBQueryReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBQueryReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
39
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
41
}
}
}
func
(
m
*
PBQueryReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBQueryReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2955,7 +3105,7 @@ func (m *GuessGameRecord) Reset() { *m = GuessGameRecord{} }
...
@@ -2955,7 +3105,7 @@ func (m *GuessGameRecord) Reset() { *m = GuessGameRecord{} }
func
(
m
*
GuessGameRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGameRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGameRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
0
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
2
}
}
}
func
(
m
*
GuessGameRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGameRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -3009,7 +3159,7 @@ func (m *GuessGameIndexRecord) Reset() { *m = GuessGameIndexRecord{} }
...
@@ -3009,7 +3159,7 @@ func (m *GuessGameIndexRecord) Reset() { *m = GuessGameIndexRecord{} }
func
(
m
*
GuessGameIndexRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGameIndexRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameIndexRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameIndexRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameIndexRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGameIndexRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
1
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
3
}
}
}
func
(
m
*
GuessGameIndexRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGameIndexRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -3055,7 +3205,7 @@ func (m *GuessGameRecords) Reset() { *m = GuessGameRecords{} }
...
@@ -3055,7 +3205,7 @@ func (m *GuessGameRecords) Reset() { *m = GuessGameRecords{} }
func
(
m
*
GuessGameRecords
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGameRecords
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameRecords
)
ProtoMessage
()
{}
func
(
*
GuessGameRecords
)
ProtoMessage
()
{}
func
(
*
GuessGameRecords
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGameRecords
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
2
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
4
4
}
}
}
func
(
m
*
GuessGameRecords
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGameRecords
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -3087,6 +3237,8 @@ func init() {
...
@@ -3087,6 +3237,8 @@ func init() {
proto
.
RegisterType
((
*
GuessGame
)(
nil
),
"types.GuessGame"
)
proto
.
RegisterType
((
*
GuessGame
)(
nil
),
"types.GuessGame"
)
proto
.
RegisterType
((
*
GuessPlayer
)(
nil
),
"types.GuessPlayer"
)
proto
.
RegisterType
((
*
GuessPlayer
)(
nil
),
"types.GuessPlayer"
)
proto
.
RegisterType
((
*
GuessBet
)(
nil
),
"types.GuessBet"
)
proto
.
RegisterType
((
*
GuessBet
)(
nil
),
"types.GuessBet"
)
proto
.
RegisterType
((
*
GuessBetStat
)(
nil
),
"types.GuessBetStat"
)
proto
.
RegisterType
((
*
GuessBetStatItem
)(
nil
),
"types.GuessBetStatItem"
)
proto
.
RegisterType
((
*
PokerBull
)(
nil
),
"types.PokerBull"
)
proto
.
RegisterType
((
*
PokerBull
)(
nil
),
"types.PokerBull"
)
proto
.
RegisterType
((
*
PBHand
)(
nil
),
"types.PBHand"
)
proto
.
RegisterType
((
*
PBHand
)(
nil
),
"types.PBHand"
)
proto
.
RegisterType
((
*
PBPlayer
)(
nil
),
"types.PBPlayer"
)
proto
.
RegisterType
((
*
PBPlayer
)(
nil
),
"types.PBPlayer"
)
...
@@ -3132,112 +3284,120 @@ func init() {
...
@@ -3132,112 +3284,120 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"guess.proto"
,
fileDescriptor_7574406c5d3430e8
)
}
func
init
()
{
proto
.
RegisterFile
(
"guess.proto"
,
fileDescriptor_7574406c5d3430e8
)
}
var
fileDescriptor_7574406c5d3430e8
=
[]
byte
{
var
fileDescriptor_7574406c5d3430e8
=
[]
byte
{
// 1678 bytes of a gzipped FileDescriptorProto
// 1808 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xe4
,
0x58
,
0xcd
,
0x6e
,
0xdb
,
0xc6
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xe4
,
0x59
,
0x4b
,
0x6f
,
0xdb
,
0xca
,
0x13
,
0xb7
,
0x3e
,
0xa8
,
0x8f
,
0x91
,
0x25
,
0xdb
,
0xeb
,
0xc4
,
0xe1
,
0xdf
,
0xf8
,
0xa3
,
0x70
,
0x19
,
0x15
,
0xb6
,
0x1e
,
0xd4
,
0xe3
,
0xc8
,
0x92
,
0xec
,
0x71
,
0xe2
,
0xcb
,
0x1a
,
0x17
,
0x85
,
0xcb
,
0xeb
,
0x37
,
0x71
,
0x8a
,
0x26
,
0x2d
,
0x6c
,
0x20
,
0x6d
,
0x52
,
0xb4
,
0x80
,
0x95
,
0x00
,
0x71
,
0x80
,
0x20
,
0xde
,
0x28
,
0x45
,
0x93
,
0x16
,
0x32
,
0x90
,
0x36
,
0x29
,
0x5a
,
0xc0
,
0x4a
,
0x80
,
0xd8
,
0x40
,
0x10
,
0x50
,
0xd6
,
0x29
,
0xd2
,
0x2b
,
0x2d
,
0xad
,
0x1d
,
0x22
,
0x12
,
0x49
,
0x93
,
0x54
,
0x62
,
0xdd
,
0x8a
,
0x28
,
0xe3
,
0x14
,
0xe9
,
0x96
,
0x92
,
0xc6
,
0x32
,
0x11
,
0x89
,
0x94
,
0x49
,
0x2a
,
0xb1
,
0x76
,
0x45
,
0xf6
,
0x09
,
0x7a
,
0xe8
,
0x13
,
0xf4
,
0xd2
,
0x97
,
0x2a
,
0xd0
,
0x5b
,
0x1f
,
0xa1
,
0xd7
,
0x62
,
0x67
,
0xdb
,
0x6d
,
0x17
,
0x5d
,
0xf4
,
0x17
,
0x74
,
0xd3
,
0x3f
,
0xd5
,
0x75
,
0x81
,
0xfe
,
0x81
,
0x6e
,
0x8b
,
0x76
,
0xc9
,
0x25
,
0x45
,
0xc9
,
0x71
,
0xd0
,
0x9e
,
0x7a
,
0xdb
,
0xd9
,
0xd9
,
0xdd
,
0xf9
,
0x9e
,
0xf9
,
0x39
,
0x67
,
0x86
,
0x1c
,
0x52
,
0x94
,
0x1c
,
0x07
,
0xed
,
0xaa
,
0xbb
,
0x39
,
0x0f
,
0xcd
,
0x9c
,
0xf7
,
0x91
,
0xd0
,
0x39
,
0x9b
,
0x8a
,
0x38
,
0xbe
,
0x17
,
0x46
,
0x41
,
0x12
,
0x30
,
0x2b
,
0x99
,
0x85
,
0x22
,
0x7c
,
0x43
,
0x41
,
0x6b
,
0xba
,
0x14
,
0x51
,
0xf4
,
0x74
,
0x11
,
0x06
,
0x71
,
0xc0
,
0xac
,
0x78
,
0xb5
,
0xde
,
0xde
,
0x48
,
0x22
,
0xd7
,
0x8f
,
0xdd
,
0x61
,
0xe2
,
0x05
,
0x3e
,
0x71
,
0x9c
,
0x3f
,
0x2c
,
0x68
,
0x10
,
0xd1
,
0xd1
,
0x7e
,
0x1c
,
0xba
,
0x7e
,
0xe4
,
0x8e
,
0x63
,
0x2f
,
0xf0
,
0x49
,
0xe2
,
0xfc
,
0xcb
,
0x3f
,
0x91
,
0x27
,
0x9f
,
0xb8
,
0x13
,
0xc1
,
0xb6
,
0xa0
,
0x71
,
0xe6
,
0x4e
,
0xc4
,
0xd3
,
0x91
,
0x5d
,
0x82
,
0xe6
,
0x6b
,
0xa9
,
0xf9
,
0xda
,
0x9d
,
0x0b
,
0x76
,
0x08
,
0xb5
,
0xa9
,
0x3b
,
0x17
,
0x17
,
0x13
,
0xd9
,
0xa9
,
0xec
,
0xb5
,
0xb9
,
0xa2
,
0xe4
,
0x7e
,
0x9c
,
0xb8
,
0xc9
,
0x34
,
0xb6
,
0xab
,
0x3b
,
0x95
,
0xbb
,
0x74
,
0x5c
,
0xea
,
0x35
,
0xb9
,
0xa2
,
0x24
,
0x3f
,
0x8a
,
0xdd
,
0x78
,
0x19
,
0xd9
,
0xe5
,
0xe3
,
0xbd
,
0x2e
,
0x57
,
0x14
,
0xfb
,
0x3f
,
0xb4
,
0xc3
,
0x48
,
0x1c
,
0x13
,
0xab
,
0x86
,
0xac
,
0x6c
,
0x43
,
0x52
,
0xaf
,
0xcd
,
0x15
,
0xc5
,
0xbe
,
0x85
,
0xe6
,
0x22
,
0x14
,
0x97
,
0x24
,
0xaa
,
0xa0
,
0x28
,
0x65
,
0x72
,
0xe3
,
0xc4
,
0x8d
,
0x92
,
0x97
,
0xde
,
0x44
,
0xd8
,
0xf5
,
0x9d
,
0xca
,
0x5e
,
0x8d
,
0x67
,
0x1b
,
0x48
,
0x69
,
0x14
,
0xbb
,
0x61
,
0xfc
,
0xde
,
0x9b
,
0x0b
,
0xbb
,
0x7a
,
0x5c
,
0xea
,
0x55
,
0x78
,
0xca
,
0x6c
,
0x07
,
0x3a
,
0x44
,
0x5c
,
0x1c
,
0xb9
,
0xf1
,
0x6b
,
0xdb
,
0x42
,
0x81
,
0xe6
,
0x16
,
0xbb
,
0x06
,
0x60
,
0xc7
,
0xd0
,
0x22
,
0xe2
,
0xf6
,
0xdc
,
0x8d
,
0xae
,
0x6d
,
0x0b
,
0x0f
,
0x34
,
0x59
,
0xec
,
0x01
,
0x56
,
0x12
,
0x84
,
0xde
,
0xd0
,
0x6e
,
0x20
,
0x8f
,
0x08
,
0xb6
,
0x0d
,
0xad
,
0xa1
,
0x9b
,
0x88
,
0xb3
,
0x58
,
0x71
,
0xb0
,
0xf0
,
0xc6
,
0x76
,
0x0d
,
0x65
,
0x44
,
0xb0
,
0x23
,
0x68
,
0x8c
,
0xdd
,
0x58
,
0x4c
,
0x20
,
0x9a
,
0xd9
,
0x4d
,
0x64
,
0xa4
,
0x34
,
0xb3
,
0xa1
,
0x19
,
0x84
,
0xd2
,
0xba
,
0xd8
,
0x6e
,
0x21
,
0x83
,
0x70
,
0x65
,
0xd7
,
0x51
,
0x90
,
0xd0
,
0xcc
,
0x86
,
0x7a
,
0xb0
,
0x90
,
0xde
,
0x45
,
0x76
,
0x03
,
0x4b
,
0x93
,
0x92
,
0x33
,
0x71
,
0x2f
,
0x50
,
0x93
,
0x36
,
0x71
,
0x14
,
0x29
,
0xb5
,
0x9c
,
0xb8
,
0x17
,
0x45
,
0x9a
,
0x94
,
0x92
,
0xb9
,
0x7b
,
0x8b
,
0x96
,
0x34
,
0x49
,
0xa2
,
0x48
,
0x69
,
0xe5
,
0xdc
,
0xbd
,
0x47
,
0xc2
,
0x3b
,
0x7b
,
0x9d
,
0xd8
,
0x40
,
0x5a
,
0xa6
,
0x1b
,
0x68
,
0xf9
,
0x6c
,
0x72
,
0x12
,
0x8c
,
0x3d
,
0x17
,
0xde
,
0xf4
,
0x3a
,
0xb6
,
0x81
,
0xac
,
0x4c
,
0x18
,
0xe8
,
0xf9
,
0x6a
,
0x3e
,
0x0a
,
0x66
,
0xed
,
0x0e
,
0x79
,
0x84
,
0x28
,
0xc6
,
0xa0
,
0x2e
,
0x2e
,
0xc4
,
0xd0
,
0x5e
,
0xc5
,
0x5d
,
0x5c
,
0xcb
,
0x76
,
0x8b
,
0x22
,
0x42
,
0x14
,
0x63
,
0x50
,
0x15
,
0xb7
,
0x62
,
0x6c
,
0xef
,
0x22
,
0x17
,
0xd7
,
0x52
,
0xb3
,
0x81
,
0x2f
,
0xfa
,
0x22
,
0xb1
,
0xbb
,
0xe4
,
0x25
,
0xa2
,
0x94
,
0xec
,
0xbe
,
0x48
,
0x62
,
0xbb
,
0x37
,
0xf0
,
0xc5
,
0x40
,
0xc4
,
0x76
,
0x9b
,
0xa2
,
0x44
,
0x94
,
0x3a
,
0x7b
,
0x20
,
0xe2
,
0xc8
,
0xee
,
0x87
,
0x0c
,
0x4d
,
0xb2
,
0x5d
,
0xe8
,
0xaa
,
0xe5
,
0xf3
,
0xe9
,
0xe4
,
0x44
,
0x44
,
0xf6
,
0x1a
,
0xf2
,
0xa0
,
0x40
,
0x93
,
0xec
,
0x04
,
0xda
,
0x6a
,
0xf9
,
0x76
,
0x39
,
0x1f
,
0x89
,
0xd0
,
0xee
,
0xa2
,
0x3c
,
0xf3
,
0x9b
,
0x6c
,
0x1d
,
0x6a
,
0xa7
,
0x42
,
0xd8
,
0xeb
,
0xc8
,
0x93
,
0x4b
,
0xf9
,
0xe2
,
0xa9
,
0x10
,
0xcb
,
0x64
,
0x7b
,
0x50
,
0xb9
,
0x12
,
0xc2
,
0xde
,
0x3b
,
0x2e
,
0xf5
,
0xaa
,
0x5c
,
0x2e
,
0xe5
,
0x8e
,
0x87
,
0xa3
,
0x51
,
0x64
,
0x6f
,
0x90
,
0x35
,
0x8a
,
0x94
,
0x3a
,
0x88
,
0x8b
,
0xd0
,
0x8b
,
0x84
,
0xcd
,
0x57
,
0x42
,
0x9c
,
0x4d
,
0x26
,
0xa1
,
0xbd
,
0x4f
,
0xde
,
0x28
,
0x52
,
0xda
,
0x20
,
0x6e
,
0x17
,
0x5e
,
0x48
,
0x5f
,
0xa2
,
0x98
,
0x03
,
0xab
,
0xb4
,
0x52
,
0x86
,
0x6e
,
0xa2
,
0xa1
,
0xb9
,
0x3d
,
0xe9
,
0x09
,
0x28
,
0x6c
,
0x46
,
0xf6
,
0x12
,
0xc5
,
0x1c
,
0xd8
,
0xa5
,
0x95
,
0x72
,
0xf4
,
0x00
,
0x1d
,
0xcd
,
0xf0
,
0x77
,
0x34
,
0xf1
,
0x7c
,
0x7c
,
0xf7
,
0x1a
,
0x5e
,
0xcf
,
0x36
,
0xd8
,
0x47
,
0x00
,
0x27
,
0x99
,
0xa2
,
0x64
,
0x24
,
0xdc
,
0xc9
,
0xdc
,
0xf3
,
0x71
,
0xdf
,
0x07
,
0xf8
,
0xf3
,
0x94
,
0xc1
,
0x7e
,
0x08
,
0x30
,
0xd7
,
0x51
,
0x19
,
0x63
,
0x87
,
0xed
,
0x81
,
0x15
,
0x8e
,
0xdd
,
0x59
,
0x6c
,
0x6f
,
0xed
,
0xd4
,
0xf6
,
0x4a
,
0x0d
,
0x7d
,
0x88
,
0x86
,
0x1a
,
0x1c
,
0xd6
,
0x03
,
0x6b
,
0x31
,
0x73
,
0x57
,
0x91
,
0x7d
,
0x78
,
0x3a
,
0xfb
,
0xec
,
0x1e
,
0xe6
,
0xdc
,
0x3d
,
0x4c
,
0xae
,
0xc1
,
0xd8
,
0x9d
,
0x89
,
0x88
,
0xd3
,
0x01
,
0x5c
,
0xe9
,
0xb5
,
0xfa
,
0xec
,
0x29
,
0xd6
,
0xdc
,
0x53
,
0x2c
,
0xae
,
0xe1
,
0xcc
,
0x5d
,
0x89
,
0x90
,
0xa9
,
0x63
,
0x24
,
0xe2
,
0xe9
,
0x38
,
0xb1
,
0x6f
,
0x90
,
0x8e
,
0x44
,
0xb1
,
0x9b
,
0x50
,
0x97
,
0xef
,
0x93
,
0x82
,
0xb4
,
0x31
,
0x14
,
0xd1
,
0x72
,
0x16
,
0xdb
,
0xdf
,
0x90
,
0x8d
,
0x44
,
0xb1
,
0x27
,
0x50
,
0xd9
,
0x36
,
0x3e
,
0xb0
,
0x66
,
0x3e
,
0xd0
,
0x17
,
0x09
,
0x47
,
0xa6
,
0x4c
,
0x0a
,
0xcf
,
0x1f
,
0x89
,
0x1f
,
0x89
,
0x58
,
0x16
,
0x8f
,
0x6d
,
0x1f
,
0x97
,
0x7a
,
0xad
,
0xfe
,
0x81
,
0xb9
,
0xc7
,
0x80
,
0x44
,
0x0b
,
0xfb
,
0x7f
,
0x68
,
0x01
,
0x11
,
0x32
,
0x29
,
0xc2
,
0x48
,
0x3c
,
0x45
,
0xc6
,
0x36
,
0x32
,
0x52
,
0x5c
,
0xeb
,
0xc8
,
0xf2
,
0xf0
,
0xfc
,
0x89
,
0xb8
,
0xb5
,
0x7f
,
0x80
,
0xbe
,
0x10
,
0x21
,
0xcb
,
0x63
,
0xda
,
0x79
,
0x0c
,
0x1d
,
0x43
,
0x09
,
0x19
,
0x39
,
0x57
,
0x1a
,
0x48
,
0x19
,
0x8e
,
0x6b
,
0xf6
,
0x31
,
0x11
,
0x8a
,
0x0b
,
0x14
,
0x1c
,
0xa1
,
0x20
,
0xa1
,
0x9d
,
0x57
,
0xd0
,
0x32
,
0xcc
,
0x91
,
0x39
,
0x74
,
0xd4
,
0x4e
,
0x44
,
0x82
,
0xc9
,
0x5d
,
0x22
,
0x58
,
0xf2
,
0x9c
,
0xdf
,
0x2a
,
0xd0
,
0xd2
,
0x3b
,
0x18
,
0xa5
,
0xab
,
0x54
,
0xeb
,
0xb8
,
0x66
,
0x3f
,
0x82
,
0xca
,
0x48
,
0xc4
,
0x58
,
0xe6
,
0xad
,
0x7e
,
0x37
,
0x69
,
0x4c
,
0x2c
,
0x5d
,
0x27
,
0x44
,
0x15
,
0x7c
,
0x54
,
0x9d
,
0xf3
,
0xd1
,
0x36
,
0xb4
,
0xbc
,
0xf8
,
0x77
,
0x3e
,
0x97
,
0x32
,
0xe7
,
0xef
,
0x25
,
0x68
,
0x68
,
0x0e
,
0xe6
,
0x1c
,
0x4b
,
0x4c
,
0x77
,
0x0c
,
0x95
,
0xe7
,
0xfb
,
0x22
,
0xc2
,
0x72
,
0x69
,
0xf1
,
0x94
,
0x96
,
0x6f
,
0x86
,
0x51
,
0x70
,
0xea
,
0x25
,
0x51
,
0xb9
,
0x68
,
0x95
,
0xd7
,
0xa2
,
0x75
,
0x04
,
0x0d
,
0x2f
,
0xfa
,
0xe0
,
0xf9
,
0xbe
,
0x08
,
0xb1
,
0x58
,
0x2a
,
0x5d
,
0xae
,
0xa8
,
0xcc
,
0x60
,
0x6b
,
0x91
,
0xc1
,
0x8d
,
0x82
,
0xc1
,
0x7f
,
0xd5
,
0xa0
,
0x71
,
0x1a
,
0x3c
,
0xa1
,
0xe5
,
0x9e
,
0x8b
,
0x30
,
0xb8
,
0xf2
,
0x62
,
0x6c
,
0x9a
,
0x36
,
0x57
,
0x54
,
0x3d
,
0x08
,
0xde
,
0x88
,
0xa8
,
0x3f
,
0x1d
,
0x8f
,
0xdf
,
0xb3
,
0xa6
,
0x2d
,
0xb3
,
0xa6
,
0xb3
,
0xaa
,
0xea
,
0xb0
,
0xb5
,
0xc9
,
0xe1
,
0x5a
,
0xce
,
0xe1
,
0x3f
,
0x97
,
0x60
,
0xd7
,
0x0c
,
0x9e
,
0x2c
,
0xb8
,
0xad
,
0x5d
,
0x52
,
0xb5
,
0xf5
,
0xd2
,
0xaa
,
0x7d
,
0xeb
,
0x8e
,
0xa7
,
0x42
,
0xeb
,
0x8b
,
0x04
,
0xdb
,
0x38
,
0x88
,
0xdd
,
0xd9
,
0x40
,
0x60
,
0x13
,
0x46
,
0x68
,
0x75
,
0x9b
,
0x67
,
0x99
,
0xac
,
0x07
,
0x5d
,
0x05
,
0x2b
,
0x94
,
0x2a
,
0xa1
,
0xb2
,
0x9d
,
0xfd
,
0x9e
,
0xf2
,
0xf1
,
0xa0
,
0x8f
,
0x8a
,
0x72
,
0x62
,
0xcd
,
0xc8
,
0x7a
,
0x90
,
0x67
,
0xb3
,
0x27
,
0x60
,
0x79
,
0xb1
,
0x98
,
0xcb
,
0xe6
,
0x97
,
0x49
,
0xff
,
0xb2
,
0x3b
,
0xd0
,
0x0c
,
0x31
,
0x4a
,
0xb1
,
0xdd
,
0xcc
,
0x25
,
0xc1
,
0xa0
,
0xaf
,
0x52
,
0x48
,
0xf3
,
0xa6
,
0x20
,
0x61
,
0x17
,
0xb1
,
0x98
,
0x73
,
0xd2
,
0x72
,
0xae
,
0x61
,
0x2f
,
0x2f
,
0xfa
,
0xea
,
0x08
,
0xb1
,
0xf5
,
0xe0
,
0xf2
,
0xf9
,
0x74
,
0x82
,
0xc5
,
0x6e
,
0xf1
,
0x6c
,
0x43
,
0x3e
,
0x44
,
0x49
,
0x15
,
0x7e
,
0x0b
,
0x4d
,
0x49
,
0x91
,
0x1b
,
0x6a
,
0xf6
,
0x24
,
0x0c
,
0xe7
,
0xdf
,
0x15
,
0x68
,
0x0e
,
0x83
,
0xdb
,
0xed
,
0xc2
,
0x43
,
0x1c
,
0xf7
,
0xb9
,
0xe6
,
0x67
,
0xfe
,
0x05
,
0xd3
,
0xbf
,
0xd4
,
0xd9
,
0xde
,
0x8f
,
0x22
,
0x1c
,
0x2c
,
0x67
,
0xb3
,
0x2f
,
0x9c
,
0x6b
,
0x96
,
0x39
,
0xd7
,
0xd2
,
0xc9
,
0x55
,
0xb9
,
0x92
,
0x83
,
0x3b
,
0xe4
,
0x85
,
0x74
,
0x43
,
0x7a
,
0xff
,
0x7c
,
0xea
,
0x91
,
0x8b
,
0x56
,
0xc9
,
0xfb
,
0x63
,
0x72
,
0x55
,
0x0b
,
0x27
,
0xd7
,
0x27
,
0x77
,
0xb6
,
0x14
,
0x3a
,
0x53
,
0x48
,
0xb0
,
0x13
,
0xb0
,
0x9a
,
0x96
,
0x39
,
0x80
,
0x6b
,
0x72
,
0x50
,
0x17
,
0x1d
,
0x64
,
0xec
,
0x48
,
0xfe
,
0x48
,
0xb8
,
0x63
,
0x16
,
0xd2
,
0x24
,
0x4c
,
0x53
,
0xab
,
0xdf
,
0x51
,
0xc1
,
0x1a
,
0x0e
,
0xd0
,
0x50
,
0x4e
,
0x42
,
0xf6
,
0x11
,
0x61
,
0x99
,
0xf5
,
0x88
,
0x9f
,
0xed
,
0x48
,
0xc9
,
0x5e
,
0xfc
,
0xca
,
0xf5
,
0x12
,
0xcf
,
0x3f
,
0x18
,
0xea
,
0x0b
,
0xac
,
0xcf
,
0xc8
,
0xae
,
0x63
,
0x50
,
0xbb
,
0xa9
,
0x1e
,
0xb5
,
0x91
,
0x96
,
0xe3
,
0xc3
,
0x7e
,
0xd0
,
0xe2
,
0xd9
,
0x46
,
0xbe
,
0xe3
,
0xae
,
0x2b
,
0xb3
,
0xf5
,
0x86
,
0xf3
,
0x63
,
0x05
,
0xf8
,
0xc5
,
0xe5
,
0xdb
,
0xe5
,
0x1c
,
0x07
,
0x9e
,
0xc5
,
0x53
,
0x86
,
0xdc
,
0x88
,
0x1a
,
0x2b
,
0xb2
,
0x1a
,
0x83
,
0xfe
,
0x91
,
0xeb
,
0x8f
,
0xa4
,
0x59
,
0x43
,
0x37
,
0x1a
,
0xc5
,
0x76
,
0x65
,
0xa7
,
0xb6
,
0x9b
,
0xb9
,
0x8d
,
0x38
,
0xf2
,
0xb9
,
0x96
,
0xa7
,
0x95
,
0x05
,
0x66
,
0x65
,
0xd1
,
0x74
,
0xff
,
0x44
,
0x67
,
0x71
,
0x22
,
0x8c
,
0xd2
,
0x53
,
0x41
,
0x57
,
0xa5
,
0x67
,
0x43
,
0x53
,
0x16
,
0x82
,
0x88
,
0xa9
,
0xa5
,
0xd5
,
0xa2
,
0x28
,
0x24
,
0x0c
,
0x59
,
0x77
,
0x37
,
0x4b
,
0x8f
,
0x42
,
0xb4
,
0x4b
,
0x75
,
0xa7
,
0x8d
,
0xb7
,
0xb9
,
0x26
,
0xd1
,
0x3d
,
0x32
,
0x45
,
0x31
,
0xd4
,
0x2d
,
0x4e
,
0x84
,
0x74
,
0xc0
,
0x58
,
0x69
,
0x99
,
0x3b
,
0x5c
,
0x53
,
0x80
,
0xda
,
0x18
,
0x20
,
0x83
,
0x23
,
0xe5
,
0x13
,
0xe1
,
0xce
,
0x44
,
0xbc
,
0x15
,
0x91
,
0x7b
,
0x46
,
0x71
,
0xb6
,
0x78
,
0x4a
,
0x3b
,
0xef
,
0xa0
,
0xa5
,
0xc3
,
0xc5
,
0x6e
,
0x88
,
0xa3
,
0xa6
,
0x43
,
0xf2
,
0x94
,
0x23
,
0x4f
,
0xf6
,
0xa2
,
0x0f
,
0xae
,
0x17
,
0x7b
,
0xfe
,
0x14
,
0x82
,
0xf5
,
0xda
,
0xf5
,
0x95
,
0x16
,
0x9d
,
0xfd
,
0x6e
,
0x1a
,
0x05
,
0xa9
,
0x23
,
0x27
,
0x9e
,
0x29
,
0x67
,
0x62
,
0x83
,
0xa7
,
0x8c
,
0xec
,
0xad
,
0xb3
,
0xa7
,
0xdc
,
0xd6
,
0x0c
,
0xe7
,
0x0f
,
0x25
,
0xa8
,
0xbc
,
0x9a
,
0x17
,
0xbe
,
0x05
,
0x8d
,
0x84
,
0xfc
,
0x48
,
0x89
,
0xa8
,
0x28
,
0xa9
,
0x54
,
0x24
,
0xdc
,
0x0d
,
0x07
,
0xe7
,
0xae
,
0x3f
,
0x91
,
0x6e
,
0x8d
,
0xdd
,
0x70
,
0x22
,
0xab
,
0xbc
,
0xd2
,
0xb3
,
0x38
,
0xd1
,
0x4c
,
0x2b
,
0x85
,
0x84
,
0xf3
,
0x6b
,
0x45
,
0x4a
,
0xe6
,
0xba
,
0x99
,
0xbc
,
0x87
,
0xe4
,
0x2d
,
0x11
,
0xc6
,
0xf8
,
0x51
,
0x49
,
0x57
,
0xe3
,
0xc7
,
0x86
,
0xba
,
0x1c
,
0x01
,
0x22
,
0xa2
,
0x72
,
0x6a
,
0x68
,
0xbc
,
0xa3
,
0x6a
,
0x24
,
0xc1
,
0x8a
,
0xca
,
0x99
,
0x57
,
0xcb
,
0x9b
,
0x27
,
0xef
,
0x50
,
0xb4
,
0x72
,
0x4d
,
0x62
,
0x78
,
0x64
,
0x73
,
0x62
,
0xaa
,
0x1b
,
0x9c
,
0x08
,
0x19
,
0x80
,
0x99
,
0xf8
,
0x24
,
0x54
,
0xf2
,
0x2b
,
0x8a
,
0xdd
,
0x82
,
0x1e
,
0xad
,
0x9e
,
0xe5
,
0x1d
,
0x53
,
0xd8
,
0x75
,
0x1e
,
0x40
,
0x42
,
0x77
,
0x4a
,
0x79
,
0xb6
,
0x78
,
0x42
,
0x3b
,
0x9f
,
0xa1
,
0xa1
,
0xd3
,
0xc5
,
0xbe
,
0x03
,
0xeb
,
0x53
,
0x65
,
0xfd
,
0x82
,
0x18
,
0xd9
,
0xd0
,
0x0c
,
0x03
,
0xcf
,
0x4f
,
0x94
,
0x56
,
0x16
,
0xd7
,
0xa4
,
0xda
,
0xf5
,
0x95
,
0x15
,
0xad
,
0x7e
,
0x3b
,
0xc9
,
0x82
,
0xb4
,
0x91
,
0x93
,
0xcc
,
0x3c
,
0xbc
,
0x9c
,
0xf3
,
0x7b
,
0x05
,
0x56
,
0x07
,
0x7d
,
0x39
,
0xa9
,
0x0f
,
0x71
,
0x86
,
0xb3
,
0x4f
,
0xc1
,
0xc2
,
0xd2
,
0x3d
,
0xfc
,
0x10
,
0x6a
,
0x31
,
0xc5
,
0x91
,
0x0a
,
0x51
,
0x51
,
0xd2
,
0xa8
,
0x50
,
0xb8
,
0x93
,
0x95
,
0xc3
,
0xd2
,
0xce
,
0x7a
,
0x2e
,
0x9d
,
0x39
,
0x96
,
0x9c
,
0xa3
,
0x15
,
0x4e
,
0x47
,
0xd8
,
0x01
,
0xb4
,
0x36
,
0x0a
,
0x09
,
0xe7
,
0x6f
,
0x25
,
0x79
,
0x32
,
0xe5
,
0xf7
,
0xcb
,
0x4e
,
0x3e
,
0x84
,
0xda
,
0x67
,
0x86
,
0x81
,
0x9f
,
0x78
,
0xfe
,
0x54
,
0xa8
,
0x46
,
0x77
,
0x3d
,
0x77
,
0xfc
,
0x91
,
0x62
,
0x1e
,
0xad
,
0x9a
,
0x43
,
0x74
,
0xb0
,
0xa2
,
0x32
,
0xee
,
0x55
,
0xb2
,
0xee
,
0xc9
,
0xdf
,
0x50
,
0xb6
,
0x54
,
0xf1
,
0xf0
,
0xf4
,
0x20
,
0xbb
,
0x0d
,
0x75
,
0x99
,
0xba
,
0xe8
,
0x84
,
0xce
,
0xfe
,
0x46
,
0xee
,
0xc2
,
0x8b
,
0x2b
,
0x8a
,
0x7d
,
0x0f
,
0x1d
,
0x5a
,
0xbd
,
0xc9
,
0x06
,
0x26
,
0xc7
,
0x75
,
0x9e
,
0x43
,
0x5d
,
0x55
,
0xa9
,
0x27
,
0x9f
,
0xc7
,
0x03
,
0x52
,
0x93
,
0xf3
,
0xa9
,
0x88
,
0x28
,
0x22
,
0x45
,
0x4d
,
0x5e
,
0x48
,
0xfd
,
0x86
,
0x1c
,
0xd9
,
0x50
,
0x5f
,
0x04
,
0x9e
,
0x1f
,
0x2b
,
0xab
,
0x2c
,
0xae
,
0x49
,
0xe7
,
0x1f
,
0x8e
,
0xd4
,
0x04
,
0x8f
,
0xb0
,
0x1e
,
0x54
,
0x93
,
0x19
,
0x96
,
0x9b
,
0xc5
,
0xab
,
0xc9
,
0xac
,
0xdf
,
0x25
,
0xd8
,
0x1d
,
0x0e
,
0x24
,
0x5a
,
0x39
,
0x43
,
0x1c
,
0xc3
,
0x7e
,
0x02
,
0x16
,
0xb6
,
0x1e
,
0xb6
,
0x54
,
0x1d
,
0xc3
,
0x39
,
0x84
,
0x8e
,
0xa1
,
0x7a
,
0xd6
,
0x49
,
0x2a
,
0x66
,
0x27
,
0xc9
,
0x15
,
0x7e
,
0x76
,
0x7a
,
0xef
,
0x90
,
0xce
,
0xa5
,
0x94
,
0x9c
,
0xef
,
0x70
,
0x52
,
0x61
,
0xa7
,
0xd0
,
0x18
,
0x07
,
0xb5
,
0x50
,
0xf8
,
0xce
,
0x1e
,
0xf4
,
0xf2
,
0xe6
,
0x2c
,
0xea
,
0x7f
,
0xce
,
0x2e
,
0x40
,
0x66
,
0xc7
,
0x7e
,
0xec
,
0xf9
,
0x4b
,
0xa1
,
0x46
,
0xfc
,
0xc3
,
0x8c
,
0xfa
,
0x4b
,
0x25
,
0x3c
,
0xdf
,
0xe1
,
0x89
,
0xc2
,
0x53
,
0x9f
,
0x68
,
0x95
,
0xd0
,
0x86
,
0x85
,
0xc7
,
0x7e
,
0xa9
,
0xc2
,
0x5a
,
0x0a
,
0xa3
,
0x54
,
0x22
,
0x7b
,
0x04
,
0x55
,
0x59
,
0xba
,
0x18
,
0x84
,
0x56
,
0x7f
,
0x3f
,
0xf3
,
0x83
,
0x77
,
0x4b
,
0x4f
,
0x70
,
0xee
,
0xe6
,
0x83
,
0x73
,
0xdd
,
0x1c
,
0x2b
,
0x25
,
0xf1
,
0xb9
,
0x6d
,
0xce
,
0xa0
,
0xcd
,
0xe2
,
0x6e
,
0x8f
,
0x0a
,
0xd2
,
0x92
,
0x9b
,
0xa5
,
0x08
,
0x29
,
0x23
,
0x79
,
0x4b
,
0xde
,
0x49
,
0x89
,
0xb4
,
0xe1
,
0xbe
,
0x90
,
0x47
,
0xe5
,
0x09
,
0xf9
,
0xae
,
0x7b
,
0x12
,
0x44
,
0x3a
,
0x28
,
0x73
,
0xef
,
0x1e
,
0x04
,
0x55
,
0x58
,
0x07
,
0xca
,
0xf1
,
0x0a
,
0xdb
,
0xcd
,
0xe2
,
0xe5
,
0x78
,
0x35
,
0xa8
,
0xab
,
0x89
,
0x4a
,
0xa6
,
0x7c
,
0x17
,
0x4f
,
0xb1
,
0x03
,
0x68
,
0x86
,
0xd3
,
0x93
,
0xb1
,
0xa7
,
0xba
,
0x75
,
0x67
,
0xe1
,
0x9c
,
0x41
,
0xcb
,
0x30
,
0x3d
,
0x9d
,
0x24
,
0x25
,
0x73
,
0x92
,
0x64
,
0x1a
,
0xbf
,
0x9c
,
0x6b
,
0xff
,
0x46
,
0xf1
,
0xc2
,
0x80
,
0xd8
,
0x47
,
0x2b
,
0x5c
,
0x9f
,
0x94
,
0x32
,
0x28
,
0x9c
,
0x56
,
0xb9
,
0x7c
,
0xa7
,
0x07
,
0x9d
,
0xac
,
0x3b
,
0x9b
,
0xe6
,
0x9f
,
0x73
,
0x02
,
0x90
,
0xfa
,
0xb1
,
0x51
,
0xeb
,
0x8c
,
0xd2
,
0x88
,
0x36
,
0x70
,
0x6e
,
0xe5
,
0x22
,
0xfa
,
0x43
,
0x0d
,
0x7a
,
0x79
,
0x83
,
0x33
,
0x54
,
0xc7
,
0xda
,
0x24
,
0xf4
,
0x61
,
0xa3
,
0xda
,
0x5f
,
0xcb
,
0xd0
,
0x4d
,
0xa0
,
0xa4
,
0x4a
,
0xce
,
0x93
,
0x57
,
0x31
,
0x51
,
0x9d
,
0x81
,
0xdc
,
0xaa
,
0x79
,
0xe4
,
0x66
,
0xe2
,
0xbd
,
0xda
,
0x3c
,
0xde
,
0xd3
,
0x6c
,
0x72
,
0x1e
,
0x9a
,
0xf7
,
0x43
,
0x41
,
0x7e
,
0x1e
,
0x99
,
0xb7
,
0xef
,
0x41
,
0x5e
,
0x79
,
0x20
,
0xa8
,
0xae
,
0xbe
,
0x04
,
0xd5
,
0x59
,
0x8b
,
0x51
,
0x5d
,
0xa3
,
0x14
,
0xd5
,
0x35
,
0x4b
,
0x51
,
0x5d
,
0xa4
,
0xaa
,
0xd4
,
0x90
,
0xfb
,
0xba
,
0xa3
,
0x20
,
0xd4
,
0x49
,
0x59
,
0xdb
,
0xf7
,
0x4c
,
0x0a
,
0xe5
,
0x6b
,
0x11
,
0xaa
,
0x6b
,
0x5f
,
0x82
,
0xea
,
0x60
,
0x09
,
0xaa
,
0x93
,
0xb3
,
0xa5
,
0x3e
,
0x87
,
0xea
,
0xbe
,
0xa8
,
0xc5
,
0x4e
,
0xa1
,
0xbe
,
0x58
,
0x8e
,
0x66
,
0x9e
,
0x9a
,
0xd6
,
0xb9
,
0x8b
,
0x4a
,
0xfe
,
0x56
,
0x17
,
0xa1
,
0xba
,
0xee
,
0x52
,
0x54
,
0xd7
,
0x9b
,
0x47
,
0x75
,
0xce
,
0xf7
,
0xb0
,
0x6a
,
0x66
,
0x60
,
0x48
,
0xe2
,
0xf3
,
0x1d
,
0xae
,
0x35
,
0xe5
,
0x19
,
0x94
,
0x4e
,
0xab
,
0xf8
,
0x8c
,
0xc2
,
0x8c
,
0xd1
,
0x32
,
0x3c
,
0xa0
,
0x30
,
0x4d
,
0x35
,
0x87
,
0x69
,
0x6c
,
0x68
,
0x2a
,
0x04
,
0xa3
,
0x10
,
0xbe
,
0xd6
,
0xf0
,
0x22
,
0xca
,
0x64
,
0xf4
,
0xf7
,
0x15
,
0xe8
,
0x64
,
0x1d
,
0x4e
,
0x91
,
0x6d
,
0xc9
,
0x44
,
0x26
,
0x65
,
0xad
,
0xe5
,
0x93
,
0x6e
,
0x61
,
0x79
,
0xf4
,
0x61
,
0xbd
,
0x98
,
0x6d
,
0xcb
,
0xf4
,
0x30
,
0xb6
,
0x06
,
0x7a
,
0x2d
,
0x67
,
0xd1
,
0xab
,
0x89
,
0x79
,
0x2b
,
0xeb
,
0x98
,
0x57
,
0x23
,
0xdb
,
0xea
,
0x46
,
0x54
,
0x8a
,
0x0e
,
0x9d
,
0xaf
,
0x0c
,
0x69
,
0x4b
,
0x8b
,
0x51
,
0x65
,
0x63
,
0x55
,
0x67
,
0xa3
,
0x16
,
0x64
,
0x6b
,
0x6d
,
0x46
,
0xb6
,
0xb5
,
0x42
,
0x64
,
0x5b
,
0x2f
,
0x44
,
0xb6
,
0x8d
,
0x4d
,
0xc8
,
0x73
,
0x0e
,
0x37
,
0xf1
,
0x02
,
0x15
,
0xf2
,
0x33
,
0x2f
,
0x4e
,
0xfa
,
0x33
,
0x1a
,
0x98
,
0x87
,
0xfe
,
0xb6
,
0x79
,
0x07
,
0xb2
,
0x85
,
0x2d
,
0xc8
,
0xb6
,
0x55
,
0x88
,
0x6c
,
0x77
,
0x37
,
0x21
,
0xdb
,
0xf6
,
0x68
,
0x90
,
0x62
,
0x86
,
0x0c
,
0x10
,
0x55
,
0x8a
,
0x80
,
0x68
,
0x71
,
0xc3
,
0xc9
,
0xe0
,
0x43
,
0xcd
,
0x56
,
0x64
,
0xdb
,
0x59
,
0x47
,
0xb6
,
0xce
,
0xef
,
0x14
,
0x0c
,
0x52
,
0x55
,
0xb4
,
0x0d
,
0x0f
,
0x28
,
0x80
,
0x0f
,
0xce
,
0x4b
,
0xdd
,
0xa8
,
0xb9
,
0x18
,
0x06
,
0xd1
,
0xe8
,
0xca
,
0x20
,
0xac
,
0xfc
,
0xd5
,
0x2c
,
0x52
,
0xce
,
0x60
,
0x11
,
0x1b
,
0x91
,
0xa9
,
0xb4
,
0x5a
,
0x21
,
0x0d
,
0x4d
,
0xca
,
0x5e
,
0xcb
,
0x43
,
0xd8
,
0xa0
,
0x57
,
0x11
,
0x85
,
0x5c
,
0xf2
,
0x74
,
0xfa
,
0x44
,
0xd5
,
0x7c
,
0xe2
,
0x5b
,
0xe8
,
0x16
,
0xdd
,
0xc6
,
0xf6
,
0x18
,
0x28
,
0xec
,
0x63
,
0x54
,
0xdb
,
0x36
,
0x3b
,
0x8c
,
0x2b
,
0x2a
,
0x41
,
0x9a
,
0x8a
,
0xc5
,
0xec
,
0xae
,
0x44
,
0x4a
,
0xb8
,
0x54
,
0x93
,
0x72
,
0x33
,
0xd7
,
0xba
,
0xe9
,
0x18
,
0xc8
,
0xce
,
0x2f
,
0x8d
,
0xd3
,
0xb6
,
0x36
,
0xa3
,
0xaa
,
0xc6
,
0xb2
,
0xae
,
0x46
,
0xe7
,
0x06
,
0xbe
,
0xd7
,
0x67
,
0x9c
,
0x37
,
0xb0
,
0x66
,
0xf8
,
0xf2
,
0xa9
,
0x7f
,
0x1a
,
0x2c
,
0x54
,
0x40
,
0x03
,
0xed
,
0xc3
,
0x1f
,
0x50
,
0x23
,
0xbf
,
0xf1
,
0xa2
,
0x78
,
0xb0
,
0xa2
,
0x0b
,
0xf3
,
0xcc
,
0x9f
,
0x0c
,
0x13
,
0xaa
,
0x01
,
0xb4
,
0x33
,
0x7b
,
0x6b
,
0xe5
,
0xf6
,
0xd6
,
0x4d
,
0x65
,
0x0f
,
0xa0
,
0xc3
,
0x45
,
0x38
,
0xcc
,
0x90
,
0x02
,
0xa2
,
0x52
,
0x1e
,
0x10
,
0x6d
,
0x1e
,
0x38
,
0x29
,
0x7c
,
0xa8
,
0x18
,
0xf0
,
0xc1
,
0x56
,
0xc2
,
0xd8
,
0x2e
,
0xd4
,
0xe5
,
0xd3
,
0xaa
,
0x9f
,
0xae
,
0x6b
,
0x3d
,
0x35
,
0xd2
,
0xe5
,
0xc8
,
0x79
,
0xaf
,
0x07
,
0x35
,
0x17
,
0xe3
,
0x20
,
0x9c
,
0xdc
,
0x1b
,
0x84
,
0x15
,
0xef
,
0x7a
,
0x06
,
0xfb
,
0x75
,
0x3e
,
0x83
,
0xf5
,
0x82
,
0x86
,
0x38
,
0x52
,
0x49
,
0x29
,
0x32
,
0xb2
,
0xcd
,
0x35
,
0xe9
,
0x3c
,
0xb4
,
0x2b
,
0xa2
,
0x90
,
0x3b
,
0xb6
,
0x4e
,
0xb6
,
0x28
,
0x9b
,
0x5b
,
0xfc
,
0x06
,
0xda
,
0xa6
,
0x61
,
0x80
,
0x35
,
0x43
,
0x84
,
0xcc
,
0x0d
,
0x76
,
0x0b
,
0x2c
,
0xc9
,
0xd5
,
0xfe
,
0x98
,
0x97
,
0x43
,
0x6c
,
0x91
,
0x7c
,
0x78
,
0x84
,
0xb4
,
0x54
,
0x37
,
0xe5
,
0x41
,
0x66
,
0x74
,
0x93
,
0x1a
,
0xd7
,
0x3a
,
0xce
,
0xc7
,
0x07
,
0x86
,
0x82
,
0xd2
,
0xac
,
0xfc
,
0x97
,
0xbd
,
0xf1
,
0x10
,
0x18
,
0xaa
,
0x9a
,
0x97
,
0x57
,
0x47
,
0xe8
,
0x1a
,
0xb1
,
0xbc
,
0xf0
,
0xaf
,
0x82
,
0x8d
,
0x06
,
0xe8
,
0x27
,
0x46
,
0xd9
,
0x78
,
0x62
,
0xee
,
0x94
,
0xf4
,
0x8c
,
0x72
,
0xca
,
0xe7
,
0xb0
,
0x39
,
0xaf
,
0xeb
,
0x32
,
0xbf
,
0x7c
,
0x03
,
0x9b
,
0xa4
,
0xfe
,
0x56
,
0x8a
,
0xfd
,
0xad
,
0x9a
,
0xc6
,
0x9e
,
0x42
,
0x8b
,
0x8b
,
0xc5
,
0x4c
,
0x1d
,
0xc6
,
0xf3
,
0xc2
,
0xe2
,
0x45
,
0xbe
,
0xc9
,
0xc4
,
0x29
,
0xdf
,
0xfc
,
0x5c
,
0x85
,
0x2e
,
0x17
,
0x43
,
0xe1
,
0x4e
,
0xa0
,
0x2a
,
0xb7
,
0x56
,
0xf3
,
0x74
,
0x4f
,
0xdb
,
0xa9
,
0x91
,
0x2e
,
0x47
,
0xa9
,
0xf3
,
0x53
,
0x85
,
0x89
,
0x0a
,
0xde
,
0x55
,
0x2b
,
0x40
,
0xfb
,
0xab
,
0x66
,
0xf8
,
0xab
,
0xd4
,
0x2f
,
0x79
,
0xa8
,
0xd8
,
0xcb
,
0x59
,
0x88
,
0x57
,
0x2a
,
0x19
,
0x45
,
0x4e
,
0x36
,
0xb9
,
0x26
,
0x9d
,
0xe7
,
0xd0
,
0x35
,
0x6e
,
0x15
,
0xa1
,
0x7a
,
0xae
,
0x7a
,
0x1b
,
0x25
,
0xd5
,
0x4b
,
0x10
,
0xa3
,
0x59
,
0x80
,
0x18
,
0x19
,
0x8e
,
0x90
,
0xb5
,
0xc1
,
0xbe
,
0x07
,
0x4b
,
0x4a
,
0x75
,
0x3c
,
0xd6
,
0xcf
,
0x21
,
0xb1
,
0xe3
,
0x03
,
0x04
,
0x6f
,
0x15
,
0x21
,
0xb8
,
0x9d
,
0x7d
,
0xa4
,
0xb4
,
0xc9
,
0x69
,
0xe6
,
0x37
,
0x49
,
0x0a
,
0xce
,
0xc3
,
0x83
,
0x92
,
0xaa
,
0xfc
,
0x1f
,
0x47
,
0xe3
,
0x05
,
0x30
,
0x34
,
0x35
,
0x7b
,
0x5e
,
0x71
,
0x50
,
0xa1
,
0x08
,
0xce
,
0xc7
,
0xb0
,
0xae
,
0x5c
,
0xf2
,
0xe1
,
0x3f
,
0x5c
,
0xde
,
0xdb
,
0x2b
,
0xce
,
0x4f
,
0x12
,
0x1d
,
0x15
,
0x94
,
0x9f
,
0xc1
,
0xc1
,
0xba
,
0xad
,
0xdb
,
0xe2
,
0xf2
,
0x6b
,
0x38
,
0x58
,
0x3f
,
0x35
,
0x85
,
0x48
,
0x8e
,
0xe9
,
0xdb
,
0x8c
,
0x8b
,
0xf3
,
0x2b
,
0x8f
,
0xde
,
0xe5
,
0x9f
,
0x82
,
0x57
,
0x2c
,
0xda
,
0x14
,
0x9b
,
0xf4
,
0x38
,
0x15
,
0x9b
,
0xbf
,
0x94
,
0xa1
,
0xcd
,
0xc5
,
0x58
,
0x78
,
0x8b
,
0x18
,
0xbe
,
0xdd
,
0xff
,
0xca
,
0xf0
,
0xed
,
0x16
,
0x86
,
0xef
,
0x31
,
0x74
,
0xf5
,
0x4f
,
0x03
,
0x0a
,
0x58
,
0x25
,
0xef
,
0xbe
,
0x1d
,
0xa0
,
0xe3
,
0x55
,
0x31
,
0xe2
,
0x55
,
0x18
,
0x97
,
0x2c
,
0x54
,
0xb7
,
0xc1
,
0x55
,
0xa7
,
0x2f
,
0x53
,
0xff
,
0x44
,
0x68
,
0xf4
,
0xe2
,
0xda
,
0xb9
,
0xa3
,
0x22
,
0x8b
,
0x33
,
0xf2
,
0x50
,
0x3d
,
0xd3
,
0xbd
,
0xb5
,
0x82
,
0xee
,
0x25
,
0x88
,
0x51
,
0xcf
,
0x41
,
0x8c
,
0x14
,
0x82
,
0x77
,
0xe9
,
0xb3
,
0xce
,
0x23
,
0xd8
,
0xa0
,
0x7f
,
0x1f
,
0x34
,
0x74
,
0x2f
,
0xd5
,
0xa1
,
0x74
,
0xf2
,
0x37
,
0xf2
,
0x10
,
0xdc
,
0x4e
,
0x1f
,
0x29
,
0x4d
,
0x0a
,
0x9a
,
0xf9
,
0x26
,
0x49
,
0xc0
,
0x39
,
0xe4
,
0x7e
,
0x0d
,
0x6b
,
0x83
,
0xbe
,
0xc6
,
0xd3
,
0xcb
,
0x9f
,
0x50
,
0x7e
,
0xa5
,
0x91
,
0x23
,
0x97
,
0xce
,
0xc1
,
0xf9
,
0x9f
,
0xca
,
0xb0
,
0xa7
,
0x62
,
0x72
,
0xf7
,
0x57
,
0xa7
,
0xcc
,
0x56
,
0xe5
,
0xfc
,
0xd7
,
0x97
,
0x12
,
0x40
,
0xbf
,
0xc0
,
0xcf
,
0xdf
,
0xab
,
0x5d
,
0xbc
,
0x2f
,
0xf1
,
0x39
,
0x36
,
0xad
,
0xab
,
0xa5
,
0x6c
,
0xe1
,
0xb4
,
0xd7
,
0x82
,
0x56
,
0x35
,
0x82
,
0x96
,
0xf9
,
0xb2
,
0x61
,
0xe5
,
0xbf
,
0x6c
,
0xdd
,
0x7b
,
0x65
,
0x20
,
0xf1
,
0x7f
,
0x74
,
0xfa
,
0x3e
,
0x86
,
0x6b
,
0x46
,
0x37
,
0xfc
,
0xd0
,
0x01
,
0x6c
,
0x79
,
0x41
,
0xa7
,
0xe1
,
0xae
,
0xe7
,
0xde
,
0xdc
,
0xc9
,
0x7d
,
0xdc
,
0xc8
,
0xdd
,
0xc7
,
0x0e
,
0xfc
,
0xd8
,
0x80
,
0x42
,
0x7a
,
0x06
,
0x7f
,
0x51
,
0x9c
,
0xc1
,
0x5b
,
0x73
,
0x7d
,
0x35
,
0x3f
,
0x86
,
0xec
,
0x92
,
0x25
,
0x2f
,
0xaf
,
0x5d
,
0x7f
,
0x4a
,
0x9f
,
0x9b
,
0x1a
,
0x3c
,
0xc3
,
0x73
,
0xfe
,
0x58
,
0xf7
,
0xff
,
0xac
,
0x80
,
0x85
,
0x3f
,
0x78
,
0xd9
,
0x7d
,
0x80
,
0xac
,
0xcc
,
0x59
,
0xf9
,
0x47
,
0xc6
,
0x51
,
0x50
,
0xe9
,
0x92
,
0x1e
,
0x8d
,
0x5c
,
0xdc
,
0xdc
,
0x1b
,
0x13
,
0x6c
,
0x7f
,
0xa3
,
0xde
,
0x03
,
0xb6
,
0xfe
,
0xfb
,
0xf1
,
0x9d
,
0x1f
,
0x7b
,
0x67
,
0xfe
,
0xcb
,
0x0b
,
0x67
,
0x85
,
0xed
,
0x1b
,
0xbf
,
0x15
,
0xb4
,
0xff
,
0x5f
,
0x50
,
0x41
,
0x3b
,
0x87
,
0x0a
,
0x2e
,
0xa1
,
0xad
,
0xbf
,
0x46
,
0x50
,
0x0a
,
0xb3
,
0xca
,
0xbe
,
0x36
,
0xca
,
0xee
,
0x68
,
0x59
,
0x04
,
0xf6
,
0xca
,
0x3f
,
0x3c
,
0xca
,
0xee
,
0x3d
,
0xee
,
0x0b
,
0x0b
,
0x18
,
0x54
,
0x25
,
0x0e
,
0x50
,
0x05
,
0x88
,
0x6b
,
0xe7
,
0xb1
,
0xca
,
0x2c
,
0x82
,
0x54
,
0x10
,
0x54
,
0x43
,
0xbf
,
0x45
,
0x5f
,
0x20
,
0x25
,
0x77
,
0x4f
,
0x1a
,
0xf8
,
0x9f
,
0xfa
,
0xe0
,
0x81
,
0xad
,
0xdb
,
0x3a
,
0x2f
,
0x61
,
0x9f
,
0x3e
,
0x47
,
0x11
,
0x1a
,
0xb8
,
0xd3
,
0x86
,
0x42
,
0x48
,
0xef
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x70
,
0xe6
,
0x48
,
0x7b
,
0xd0
,
0x16
,
0x00
,
0x00
,
0xf0
,
0x2b
,
0xe8
,
0x0e
,
0x07
,
0x1a
,
0xe8
,
0x6f
,
0xdf
,
0x42
,
0xc5
,
0x95
,
0xee
,
0x42
,
0xb9
,
0x74
,
0x7e
,
0x21
,
0x91
,
0xfd
,
0x3b
,
0x7c
,
0x97
,
0xdf
,
0xef
,
0x87
,
0xcf
,
0xe4
,
0xc3
,
0x01
,
0xa7
,
0xe9
,
0xfd
,
0x7e
,
0xf7
,
0xc1
,
0x78
,
0x22
,
0xfc
,
0x57
,
0x61
,
0xc1
,
0x2b
,
0x78
,
0x60
,
0x8c
,
0xe9
,
0xaf
,
0x45
,
0x06
,
0xaf
,
0x0c
,
0x8c
,
0xa6
,
0xc1
,
0xc1
,
0xcf
,
0xf3
,
0xe0
,
0xe0
,
0x70
,
0x6d
,
0xe0
,
0x67
,
0xf1
,
0x41
,
0xff
,
0x9f
,
0x25
,
0xb0
,
0xf0
,
0xeb
,
0x3b
,
0x7b
,
0x06
,
0x90
,
0xb6
,
0x39
,
0x2b
,
0x7e
,
0xfd
,
0x1c
,
0xe9
,
0xcf
,
0x32
,
0xbf
,
0xf5
,
0x23
,
0x6f
,
0xea
,
0xbf
,
0xbf
,
0x75
,
0x76
,
0x58
,
0xdf
,
0xf8
,
0xc2
,
0x58
,
0xf4
,
0x0c
,
0x2a
,
0xfa
,
0x8d
,
0x3e
,
0x8b
,
0x50
,
0x68
,
0xf1
,
0x8b
,
0xa8
,
0xe8
,
0x77
,
0x2f
,
0x14
,
0x36
,
0xd6
,
0x98
,
0x74
,
0xd3
,
0xd3
,
0xa8
,
0xe0
,
0xb7
,
0xa3
,
0x1a
,
0xfe
,
0x89
,
0x70
,
0xfa
,
0x9f
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x6c
,
0x1e
,
0x01
,
0xe9
,
0x6d
,
0x18
,
0x00
,
0x00
,
}
}
// Reference imports to suppress errors if they are not otherwise used.
// Reference imports to suppress errors if they are not otherwise used.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment