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
0179fec6
Commit
0179fec6
authored
Oct 23, 2020
by
QM
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
supervisionaccount.go code to simplify
parent
6c82ccb0
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
348 additions
and
478 deletions
+348
-478
testcase.sh
plugin/dapp/paracross/cmd/build/testcase.sh
+44
-54
paracross.go
plugin/dapp/paracross/commands/paracross.go
+2
-2
action.go
plugin/dapp/paracross/executor/action.go
+47
-19
exec_del_local.go
plugin/dapp/paracross/executor/exec_del_local.go
+1
-1
exec_local.go
plugin/dapp/paracross/executor/exec_local.go
+1
-1
kv.go
plugin/dapp/paracross/executor/kv.go
+0
-8
supervisionaccount.go
plugin/dapp/paracross/executor/supervisionaccount.go
+21
-184
supervisionaccount_test.go
plugin/dapp/paracross/executor/supervisionaccount_test.go
+8
-8
paracross.proto
plugin/dapp/paracross/proto/paracross.proto
+3
-0
paracross.go
plugin/dapp/paracross/types/paracross.go
+3
-5
paracross.pb.go
plugin/dapp/paracross/types/paracross.pb.go
+217
-193
type.go
plugin/dapp/paracross/types/type.go
+1
-3
No files found.
plugin/dapp/paracross/cmd/build/testcase.sh
View file @
0179fec6
...
@@ -294,7 +294,7 @@ function query_tx() {
...
@@ -294,7 +294,7 @@ function query_tx() {
block_wait
"
${
1
}
"
1
block_wait
"
${
1
}
"
1
local times
=
200
local times
=
200
#
local times=10
#
local times=10
while
true
;
do
while
true
;
do
ret
=
$(${
1
}
tx query
-s
"
${
2
}
"
| jq
-r
".tx.hash"
)
ret
=
$(${
1
}
tx query
-s
"
${
2
}
"
| jq
-r
".tx.hash"
)
echo
"query hash is
${
2
}
, return
${
ret
}
"
echo
"query hash is
${
2
}
, return
${
ret
}
"
...
@@ -571,7 +571,6 @@ function para_create_nodegroup_gamechain() {
...
@@ -571,7 +571,6 @@ function para_create_nodegroup_gamechain() {
fi
fi
${
PARA_CLI5
}
para nodegroup addrs
${
PARA_CLI5
}
para nodegroup addrs
}
}
function
para_cross_transfer_from_parachain
()
{
function
para_cross_transfer_from_parachain
()
{
...
@@ -794,7 +793,7 @@ function para_create_nodegroup() {
...
@@ -794,7 +793,7 @@ function para_create_nodegroup() {
}
}
# $1 status, $2 hash
# $1 status, $2 hash
function
check_supervision_node_list
()
{
function
check_supervision_node_
group_
list
()
{
newid
=
$(${
PARA_CLI
}
para supervision_node list
-s
"
$1
"
| jq
-r
".ids[0].id"
)
newid
=
$(${
PARA_CLI
}
para supervision_node list
-s
"
$1
"
| jq
-r
".ids[0].id"
)
if
[
"
$newid
"
!=
"
$2
"
]
;
then
if
[
"
$newid
"
!=
"
$2
"
]
;
then
${
PARA_CLI
}
para supervision_node list
-s
"
$1
"
${
PARA_CLI
}
para supervision_node list
-s
"
$1
"
...
@@ -804,7 +803,7 @@ function check_supervision_node_list() {
...
@@ -804,7 +803,7 @@ function check_supervision_node_list() {
}
}
# $1 status
# $1 status
function
check_supervision_node_status
()
{
function
check_supervision_node_
group_
status
()
{
status
=
$(${
PARA_CLI
}
para supervision_node status | jq
-r
".status"
)
status
=
$(${
PARA_CLI
}
para supervision_node status | jq
-r
".status"
)
if
[
"
$status
"
!=
"
$1
"
]
;
then
if
[
"
$status
"
!=
"
$1
"
]
;
then
${
PARA_CLI
}
para supervision_node status
${
PARA_CLI
}
para supervision_node status
...
@@ -844,9 +843,6 @@ function para_create_supervision_nodegroup_cancel() {
...
@@ -844,9 +843,6 @@ function para_create_supervision_nodegroup_cancel() {
id
=
$txhash
id
=
$txhash
check_balance_1ka
"
$balancePre
"
6
check_balance_1ka
"
$balancePre
"
6
check_supervision_node_list 1
"
$id
"
check_supervision_node_status 1
check_supervision_node_addr_status 1
"
$ADDR_28
"
echo
"=========== # supervision node group cancel ============="
echo
"=========== # supervision node group cancel ============="
balancePre
=
$(${
CLI
}
account balance
-a
1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj
-e
paracross | jq
-r
".frozen"
)
balancePre
=
$(${
CLI
}
account balance
-a
1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj
-e
paracross | jq
-r
".frozen"
)
...
@@ -856,9 +852,43 @@ function para_create_supervision_nodegroup_cancel() {
...
@@ -856,9 +852,43 @@ function para_create_supervision_nodegroup_cancel() {
query_tx
"
${
PARA_CLI
}
"
"
${
txhash
}
"
query_tx
"
${
PARA_CLI
}
"
"
${
txhash
}
"
check_balance_1ka
"
$balancePre
"
-6
check_balance_1ka
"
$balancePre
"
-6
check_supervision_node_list 4
"
$id
"
echo
"=========== #
${
FUNCNAME
}
end ============="
check_supervision_node_status 4
}
check_supervision_node_addr_status 4
"
$ADDR_28
"
function
para_create_supervision_nodegroup_quit
()
{
echo
"=========== #
${
FUNCNAME
}
begin ============="
echo
"=========== # para chain apply supervision node group 25 ============="
balancePre
=
$(${
CLI
}
account balance
-a
1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj
-e
paracross | jq
-r
".frozen"
)
##apply
txhash
=
$(${
PARA_CLI
}
send para supervision_node apply
-a
"
$ADDR_25
"
-c
6
-p
"
$BLSPUB_25
"
-k
"
${
ADDR_1KA_KEY
}
"
)
echo
"tx=
$txhash
"
query_tx
"
${
PARA_CLI
}
"
"
${
txhash
}
"
id
=
$txhash
check_balance_1ka
"
$balancePre
"
6
echo
"=========== # para chain approve supervision node group 25 ============="
##approve
txhash
=
$(${
PARA_CLI
}
send para supervision_node approve
-i
"
$id
"
-c
6
-k
"
${
SUPER_KEY
}
"
)
echo
"tx=
$txhash
"
query_tx
"
${
PARA_CLI
}
"
"
${
txhash
}
"
check_supervision_node_addr_status 2
"
$ADDR_25
"
check_supervision_node_group_list 2
"
$id
"
check_supervision_node_group_status 2
check_supervision_node_addrs
"
$ADDR_25
"
echo
"=========== # para chain quit supervision node group 25 ============="
balancePre
=
$(${
CLI
}
account balance
-a
1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj
-e
paracross | jq
-r
".frozen"
)
txhash
=
$(${
PARA_CLI
}
send para supervision_node quit
-a
"
$ADDR_25
"
-k
"
${
SUPER_KEY
}
"
)
echo
"tx=
$txhash
"
query_tx
"
${
PARA_CLI
}
"
"
${
txhash
}
"
check_balance_1ka
"
$balancePre
"
-6
check_supervision_node_group_list 3
"
$id
"
check_supervision_node_group_status 3
check_supervision_node_addr_status 3
"
$ADDR_25
"
check_supervision_node_addrs null
echo
"=========== #
${
FUNCNAME
}
end ============="
echo
"=========== #
${
FUNCNAME
}
end ============="
}
}
...
@@ -873,9 +903,6 @@ function para_create_supervision_nodegroup_approve() {
...
@@ -873,9 +903,6 @@ function para_create_supervision_nodegroup_approve() {
id
=
$txhash
id
=
$txhash
check_balance_1ka
"
$balancePre
"
6
check_balance_1ka
"
$balancePre
"
6
check_supervision_node_list 1
"
$id
"
check_supervision_node_status 1
check_supervision_node_addr_status 1
"
$ADDR_28
"
echo
"=========== # para chain approve supervision node group 28 ============="
echo
"=========== # para chain approve supervision node group 28 ============="
##approve
##approve
...
@@ -883,8 +910,8 @@ function para_create_supervision_nodegroup_approve() {
...
@@ -883,8 +910,8 @@ function para_create_supervision_nodegroup_approve() {
echo
"tx=
$txhash
"
echo
"tx=
$txhash
"
query_tx
"
${
PARA_CLI
}
"
"
${
txhash
}
"
query_tx
"
${
PARA_CLI
}
"
"
${
txhash
}
"
check_supervision_node_list 2
"
$id
"
check_supervision_node_
group_
list 2
"
$id
"
check_supervision_node_status 2
check_supervision_node_
group_
status 2
check_supervision_node_addr_status 2
"
$ADDR_28
"
check_supervision_node_addr_status 2
"
$ADDR_28
"
check_supervision_node_addrs
"
$ADDR_28
"
check_supervision_node_addrs
"
$ADDR_28
"
...
@@ -897,7 +924,6 @@ function para_create_supervision_nodegroup_approve() {
...
@@ -897,7 +924,6 @@ function para_create_supervision_nodegroup_approve() {
id
=
$txhash
id
=
$txhash
check_balance_1ka
"
$balancePre
"
6
check_balance_1ka
"
$balancePre
"
6
check_supervision_node_addr_status 1
"
$ADDR_27
"
echo
"=========== # para chain approve supervision node group 27 ============="
echo
"=========== # para chain approve supervision node group 27 ============="
##approve
##approve
...
@@ -917,7 +943,6 @@ function para_create_supervision_nodegroup_approve() {
...
@@ -917,7 +943,6 @@ function para_create_supervision_nodegroup_approve() {
id
=
$txhash
id
=
$txhash
check_balance_1ka
"
$balancePre
"
6
check_balance_1ka
"
$balancePre
"
6
check_supervision_node_addr_status 1
"
$ADDR_26
"
echo
"=========== # para chain approve supervision node group 26 ============="
echo
"=========== # para chain approve supervision node group 26 ============="
##approve
##approve
...
@@ -928,40 +953,6 @@ function para_create_supervision_nodegroup_approve() {
...
@@ -928,40 +953,6 @@ function para_create_supervision_nodegroup_approve() {
check_supervision_node_addr_status 2
"
$ADDR_26
"
check_supervision_node_addr_status 2
"
$ADDR_26
"
check_supervision_node_addrs
"
$ADDR_28
,
$ADDR_27
,
$ADDR_26
"
check_supervision_node_addrs
"
$ADDR_28
,
$ADDR_27
,
$ADDR_26
"
echo
"=========== #
${
FUNCNAME
}
end ============="
}
function
para_create_supervision_nodegroup_quit
()
{
echo
"=========== #
${
FUNCNAME
}
begin ============="
echo
"=========== # para chain apply supervision node group 25 ============="
balancePre
=
$(${
CLI
}
account balance
-a
1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj
-e
paracross | jq
-r
".frozen"
)
##apply
txhash
=
$(${
PARA_CLI
}
send para supervision_node apply
-a
"
$ADDR_25
"
-c
6
-p
"
$BLSPUB_25
"
-k
"
${
ADDR_1KA_KEY
}
"
)
echo
"tx=
$txhash
"
query_tx
"
${
PARA_CLI
}
"
"
${
txhash
}
"
id
=
$txhash
check_balance_1ka
"
$balancePre
"
6
check_supervision_node_addr_status 1
"
$ADDR_25
"
echo
"=========== # para chain approve supervision node group 25 ============="
##approve
txhash
=
$(${
PARA_CLI
}
send para supervision_node approve
-i
"
$id
"
-c
6
-k
"
${
SUPER_KEY
}
"
)
echo
"tx=
$txhash
"
query_tx
"
${
PARA_CLI
}
"
"
${
txhash
}
"
check_supervision_node_addr_status 2
"
$ADDR_25
"
check_supervision_node_addrs
"
$ADDR_28
,
$ADDR_27
,
$ADDR_26
,
$ADDR_25
"
echo
"=========== # para chain quit supervision node group 25 ============="
balancePre
=
$(${
CLI
}
account balance
-a
1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj
-e
paracross | jq
-r
".frozen"
)
txhash
=
$(${
PARA_CLI
}
send para supervision_node quit
-a
"
$ADDR_25
"
-k
"
${
SUPER_KEY
}
"
)
echo
"tx=
$txhash
"
query_tx
"
${
PARA_CLI
}
"
"
${
txhash
}
"
check_balance_1ka
"
$balancePre
"
-6
check_supervision_node_addr_status 3
"
$ADDR_25
"
check_supervision_node_addrs
"
$ADDR_28
,
$ADDR_27
,
$ADDR_26
"
echo
"=========== # para chain apply supervision node group 25 again ============="
echo
"=========== # para chain apply supervision node group 25 again ============="
balancePre
=
$(${
CLI
}
account balance
-a
1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj
-e
paracross | jq
-r
".frozen"
)
balancePre
=
$(${
CLI
}
account balance
-a
1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj
-e
paracross | jq
-r
".frozen"
)
...
@@ -972,7 +963,6 @@ function para_create_supervision_nodegroup_quit() {
...
@@ -972,7 +963,6 @@ function para_create_supervision_nodegroup_quit() {
id
=
$txhash
id
=
$txhash
check_balance_1ka
"
$balancePre
"
6
check_balance_1ka
"
$balancePre
"
6
check_supervision_node_addr_status 1
"
$ADDR_25
"
echo
"=========== # para chain approve supervision node group 25 again ============="
echo
"=========== # para chain approve supervision node group 25 again ============="
##approve
##approve
...
@@ -989,8 +979,8 @@ function para_create_supervision_nodegroup_quit() {
...
@@ -989,8 +979,8 @@ function para_create_supervision_nodegroup_quit() {
function
para_create_supervision_nodegroup
()
{
function
para_create_supervision_nodegroup
()
{
echo
"=========== #
${
FUNCNAME
}
begin ============="
echo
"=========== #
${
FUNCNAME
}
begin ============="
para_create_supervision_nodegroup_cancel
para_create_supervision_nodegroup_cancel
para_create_supervision_nodegroup_approve
para_create_supervision_nodegroup_quit
para_create_supervision_nodegroup_quit
para_create_supervision_nodegroup_approve
docker stop
"
${
NODE9
}
"
docker stop
"
${
NODE9
}
"
echo
"=========== #
${
FUNCNAME
}
end ============="
echo
"=========== #
${
FUNCNAME
}
end ============="
}
}
...
@@ -1330,8 +1320,8 @@ function privacy_transfer_test() {
...
@@ -1330,8 +1320,8 @@ function privacy_transfer_test() {
function
para_test
()
{
function
para_test
()
{
echo
"=========== # para chain test ============="
echo
"=========== # para chain test ============="
para_create_nodegroup
para_create_nodegroup
para_create_supervision_nodegroup
para_nodegroup_behalf_quit_test
para_nodegroup_behalf_quit_test
para_create_supervision_nodegroup
para_create_nodegroup_gamechain
para_create_nodegroup_gamechain
token_create
"
${
PARA_CLI
}
"
token_create
"
${
PARA_CLI
}
"
token_transfer
"
${
PARA_CLI
}
"
token_transfer
"
${
PARA_CLI
}
"
...
...
plugin/dapp/paracross/commands/paracross.go
View file @
0179fec6
...
@@ -1741,7 +1741,7 @@ func supervisionNodeGroupListCmd() *cobra.Command {
...
@@ -1741,7 +1741,7 @@ func supervisionNodeGroupListCmd() *cobra.Command {
}
}
func
getSupervisionNodeGroupListCmdFlags
(
cmd
*
cobra
.
Command
)
{
func
getSupervisionNodeGroupListCmdFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
Int32P
(
"status"
,
"s"
,
0
,
"status:
1:apply, 2:approve, 3:quit, 4:cancel
"
)
cmd
.
Flags
()
.
Int32P
(
"status"
,
"s"
,
0
,
"status:
2:approve, 3:quit
"
)
_
=
cmd
.
MarkFlagRequired
(
"status"
)
_
=
cmd
.
MarkFlagRequired
(
"status"
)
}
}
...
@@ -1766,7 +1766,7 @@ func supervisionNodeGroupList(cmd *cobra.Command, args []string) {
...
@@ -1766,7 +1766,7 @@ func supervisionNodeGroupList(cmd *cobra.Command, args []string) {
func
getSupervisionNodeInfoCmd
()
*
cobra
.
Command
{
func
getSupervisionNodeInfoCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"addr_status"
,
Use
:
"addr_status"
,
Short
:
"Get node current status:
1:apply, 2:approve, 3:quit, 4:cancel
from supervision group"
,
Short
:
"Get node current status:
2:approve, 3:quit
from supervision group"
,
Run
:
supervisionNodeInfo
,
Run
:
supervisionNodeInfo
,
}
}
addSupervisionNodeInfoCmdFlags
(
cmd
)
addSupervisionNodeInfoCmdFlags
(
cmd
)
...
...
plugin/dapp/paracross/executor/action.go
View file @
0179fec6
...
@@ -190,7 +190,7 @@ func makeRecordReceipt(addr string, commit *pt.ParacrossNodeStatus) *types.Recei
...
@@ -190,7 +190,7 @@ func makeRecordReceipt(addr string, commit *pt.ParacrossNodeStatus) *types.Recei
}
}
func
makeDoneReceipt
(
cfg
*
types
.
Chain33Config
,
execMainHeight
,
execHeight
int64
,
commit
*
pt
.
ParacrossNodeStatus
,
func
makeDoneReceipt
(
cfg
*
types
.
Chain33Config
,
execMainHeight
,
execHeight
int64
,
commit
*
pt
.
ParacrossNodeStatus
,
most
,
commitCount
,
totalCount
int32
)
*
types
.
Receipt
{
most
,
commitCount
,
totalCount
,
mostSupervisionCount
,
totalSupervisionCommit
,
totalSupervisionNodes
int32
)
*
types
.
Receipt
{
log
:=
&
pt
.
ReceiptParacrossDone
{
log
:=
&
pt
.
ReceiptParacrossDone
{
TotalNodes
:
totalCount
,
TotalNodes
:
totalCount
,
...
@@ -203,6 +203,9 @@ func makeDoneReceipt(cfg *types.Chain33Config, execMainHeight, execHeight int64,
...
@@ -203,6 +203,9 @@ func makeDoneReceipt(cfg *types.Chain33Config, execMainHeight, execHeight int64,
MainBlockHeight
:
commit
.
MainBlockHeight
,
MainBlockHeight
:
commit
.
MainBlockHeight
,
MainBlockHash
:
commit
.
MainBlockHash
,
MainBlockHash
:
commit
.
MainBlockHash
,
ChainExecHeight
:
execHeight
,
ChainExecHeight
:
execHeight
,
TotalSupervisionNodes
:
totalSupervisionNodes
,
TotalSupervisionCommit
:
totalSupervisionCommit
,
MostSupervisionCommit
:
mostSupervisionCount
,
}
}
key
:=
calcTitleKey
(
commit
.
Title
)
key
:=
calcTitleKey
(
commit
.
Title
)
status
:=
&
pt
.
ParacrossStatus
{
status
:=
&
pt
.
ParacrossStatus
{
...
@@ -567,9 +570,9 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
...
@@ -567,9 +570,9 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
bIsCommitSuperNode
=
true
bIsCommitSuperNode
=
true
}
}
// 获取监督节点的数据
监督节点在高度分叉后
// 获取监督节点的数据
supervisionNodesMap
,
supervisionNodesArry
,
err
:=
a
.
getSupervisionNodesGroup
(
commit
.
Status
.
Title
)
supervisionNodesMap
,
supervisionNodesArry
,
err
:=
a
.
getSupervisionNodesGroup
(
commit
.
Status
.
Title
)
if
err
!=
nil
&&
errors
.
Cause
(
err
)
!=
pt
.
ErrTitleNotExist
&&
a
.
exec
.
GetMainHeight
()
>=
pt
.
GetDappForkHeight
(
cfg
,
pt
.
ForkCommitTx
)
{
if
err
!=
nil
&&
errors
.
Cause
(
err
)
!=
pt
.
ErrTitleNotExist
{
return
nil
,
errors
.
Wrap
(
err
,
"getSupervisionNodesGroup"
)
return
nil
,
errors
.
Wrap
(
err
,
"getSupervisionNodesGroup"
)
}
}
...
@@ -723,6 +726,7 @@ func (a *action) commitTxDone(nodeStatus *pt.ParacrossNodeStatus, stat *pt.Parac
...
@@ -723,6 +726,7 @@ func (a *action) commitTxDone(nodeStatus *pt.ParacrossNodeStatus, stat *pt.Parac
clog
.
Debug
(
"paracross.Commit commit ----pass"
,
"most"
,
mostCount
,
"mostHash"
,
common
.
ToHex
([]
byte
(
mostHash
)))
clog
.
Debug
(
"paracross.Commit commit ----pass"
,
"most"
,
mostCount
,
"mostHash"
,
common
.
ToHex
([]
byte
(
mostHash
)))
// 如果已经有监督节点
// 如果已经有监督节点
mostSupervisionCount
:=
0
if
len
(
supervisionNodes
)
>
0
{
if
len
(
supervisionNodes
)
>
0
{
for
i
,
v
:=
range
stat
.
SupervisionDetails
.
Addrs
{
for
i
,
v
:=
range
stat
.
SupervisionDetails
.
Addrs
{
clog
.
Debug
(
"paracross.Commit commit SupervisionDetails"
,
"addr"
,
v
,
"hash"
,
common
.
ToHex
(
stat
.
SupervisionDetails
.
BlockHash
[
i
]))
clog
.
Debug
(
"paracross.Commit commit SupervisionDetails"
,
"addr"
,
v
,
"hash"
,
common
.
ToHex
(
stat
.
SupervisionDetails
.
BlockHash
[
i
]))
...
@@ -733,12 +737,11 @@ func (a *action) commitTxDone(nodeStatus *pt.ParacrossNodeStatus, stat *pt.Parac
...
@@ -733,12 +737,11 @@ func (a *action) commitTxDone(nodeStatus *pt.ParacrossNodeStatus, stat *pt.Parac
}
}
clog
.
Debug
(
"paracross.Commit commit SupervisionDetails ----pass"
,
"mostSupervisionCount"
,
mostSupervisionCount
,
"mostSupervisionHash"
,
common
.
ToHex
([]
byte
(
mostSupervisionHash
)))
clog
.
Debug
(
"paracross.Commit commit SupervisionDetails ----pass"
,
"mostSupervisionCount"
,
mostSupervisionCount
,
"mostSupervisionHash"
,
common
.
ToHex
([]
byte
(
mostSupervisionHash
)))
if
common
.
ToHex
([]
byte
(
mostHash
))
!=
common
.
ToHex
([]
byte
(
mostSupervisionHash
))
{
if
mostHash
!=
mostSupervisionHash
{
clog
.
Debug
(
"paracross.Commit commit mostSupervisionHash mostHash not equal"
)
clog
.
Error
(
"paracross.Commit commit mostSupervisionHash mostHash not equal"
,
"mostHash: "
,
common
.
ToHex
([]
byte
(
mostHash
)),
"mostSupervisionHash: "
,
common
.
ToHex
([]
byte
(
mostSupervisionHash
))
)
return
receipt
,
nil
return
receipt
,
nil
}
}
}
}
clog
.
Debug
(
"paracross.Commit commit ----pass"
)
stat
.
Status
=
pt
.
ParacrossStatusCommitDone
stat
.
Status
=
pt
.
ParacrossStatusCommitDone
_
=
saveTitleHeight
(
a
.
db
,
calcTitleHeightKey
(
stat
.
Title
,
stat
.
Height
),
stat
)
_
=
saveTitleHeight
(
a
.
db
,
calcTitleHeightKey
(
stat
.
Title
,
stat
.
Height
),
stat
)
...
@@ -751,7 +754,9 @@ func (a *action) commitTxDone(nodeStatus *pt.ParacrossNodeStatus, stat *pt.Parac
...
@@ -751,7 +754,9 @@ func (a *action) commitTxDone(nodeStatus *pt.ParacrossNodeStatus, stat *pt.Parac
}
}
//add commit done receipt
//add commit done receipt
receiptDone
:=
makeDoneReceipt
(
cfg
,
a
.
exec
.
GetMainHeight
(),
a
.
height
,
nodeStatus
,
int32
(
mostCount
),
int32
(
len
(
stat
.
Details
.
Addrs
)),
int32
(
len
(
nodes
)))
receiptDone
:=
makeDoneReceipt
(
cfg
,
a
.
exec
.
GetMainHeight
(),
a
.
height
,
nodeStatus
,
int32
(
mostCount
),
int32
(
len
(
stat
.
Details
.
Addrs
)),
int32
(
len
(
nodes
)),
int32
(
mostSupervisionCount
),
int32
(
len
(
stat
.
SupervisionDetails
.
Addrs
)),
int32
(
len
(
supervisionNodes
)))
receipt
=
mergeReceipt
(
receipt
,
receiptDone
)
receipt
=
mergeReceipt
(
receipt
,
receiptDone
)
r
,
err
:=
a
.
commitTxDoneStep2
(
nodeStatus
,
stat
,
titleStatus
)
r
,
err
:=
a
.
commitTxDoneStep2
(
nodeStatus
,
stat
,
titleStatus
)
...
@@ -849,6 +854,11 @@ func (a *action) loopCommitTxDone(title string) (*types.Receipt, error) {
...
@@ -849,6 +854,11 @@ func (a *action) loopCommitTxDone(title string) (*types.Receipt, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"getNodes for title:%s"
,
title
)
return
nil
,
errors
.
Wrapf
(
err
,
"getNodes for title:%s"
,
title
)
}
}
// 获取监督节点的数据
supervisionNodes
,
_
,
err
:=
a
.
getSupervisionNodesGroup
(
title
)
if
err
!=
nil
&&
errors
.
Cause
(
err
)
!=
pt
.
ErrTitleNotExist
{
return
nil
,
errors
.
Wrap
(
err
,
"getSupervisionNodesGroup"
)
}
//从当前共识高度开始遍历
//从当前共识高度开始遍历
titleStatus
,
err
:=
getTitle
(
a
.
db
,
calcTitleKey
(
title
))
titleStatus
,
err
:=
getTitle
(
a
.
db
,
calcTitleKey
(
title
))
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -876,7 +886,7 @@ func (a *action) loopCommitTxDone(title string) (*types.Receipt, error) {
...
@@ -876,7 +886,7 @@ func (a *action) loopCommitTxDone(title string) (*types.Receipt, error) {
return
receipt
,
nil
return
receipt
,
nil
}
}
r
,
err
:=
a
.
checkCommitTxDone
(
title
,
stat
,
n
odes
)
r
,
err
:=
a
.
checkCommitTxDone
(
stat
,
nodes
,
supervisionN
odes
)
if
err
!=
nil
{
if
err
!=
nil
{
clog
.
Error
(
"paracross.loopCommitTxDone checkExecCommitTxDone"
,
"para title"
,
title
,
"height"
,
stat
.
Height
,
"error"
,
err
)
clog
.
Error
(
"paracross.loopCommitTxDone checkExecCommitTxDone"
,
"para title"
,
title
,
"height"
,
stat
.
Height
,
"error"
,
err
)
return
receipt
,
nil
return
receipt
,
nil
...
@@ -888,10 +898,10 @@ func (a *action) loopCommitTxDone(title string) (*types.Receipt, error) {
...
@@ -888,10 +898,10 @@ func (a *action) loopCommitTxDone(title string) (*types.Receipt, error) {
}
}
}
}
func
(
a
*
action
)
checkCommitTxDone
(
title
string
,
stat
*
pt
.
ParacrossHeightStatus
,
n
odes
map
[
string
]
struct
{})
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
checkCommitTxDone
(
stat
*
pt
.
ParacrossHeightStatus
,
nodes
,
supervisionN
odes
map
[
string
]
struct
{})
(
*
types
.
Receipt
,
error
)
{
status
,
err
:=
getTitle
(
a
.
db
,
calcTitleKey
(
t
itle
))
status
,
err
:=
getTitle
(
a
.
db
,
calcTitleKey
(
stat
.
T
itle
))
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"getTitle:%s"
,
t
itle
)
return
nil
,
errors
.
Wrapf
(
err
,
"getTitle:%s"
,
stat
.
T
itle
)
}
}
//待共识的stat的高度大于当前status高度+1,说明共识不连续,退出,如果是平行链自共识首次切换场景,可以在正常流程里面再触发
//待共识的stat的高度大于当前status高度+1,说明共识不连续,退出,如果是平行链自共识首次切换场景,可以在正常流程里面再触发
...
@@ -899,28 +909,46 @@ func (a *action) checkCommitTxDone(title string, stat *pt.ParacrossHeightStatus,
...
@@ -899,28 +909,46 @@ func (a *action) checkCommitTxDone(title string, stat *pt.ParacrossHeightStatus,
return
nil
,
nil
return
nil
,
nil
}
}
return
a
.
commitTxDoneByStat
(
stat
,
status
,
nodes
)
return
a
.
commitTxDoneByStat
(
stat
,
status
,
nodes
,
supervisionNodes
)
}
}
//只根据stat的信息在commitDone之后重构一个commitMostStatus做后续处理
//只根据stat的信息在commitDone之后重构一个commitMostStatus做后续处理
func
(
a
*
action
)
commitTxDoneByStat
(
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
nodes
map
[
string
]
struct
{})
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
commitTxDoneByStat
(
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
nodes
,
supervisionNodes
map
[
string
]
struct
{})
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{}
clog
.
Debug
(
"paracross.commitTxDoneByStat"
,
"stat.title"
,
stat
.
Title
,
"stat.height"
,
stat
.
Height
,
"notes"
,
len
(
nodes
))
clog
.
Debug
(
"paracross.commitTxDoneByStat"
,
"stat.title"
,
stat
.
Title
,
"stat.height"
,
stat
.
Height
,
"notes"
,
len
(
nodes
))
for
i
,
v
:=
range
stat
.
Details
.
Addrs
{
for
i
,
v
:=
range
stat
.
Details
.
Addrs
{
clog
.
Debug
(
"paracross.commitTxDoneByStat detail"
,
"addr"
,
v
,
"hash"
,
common
.
ToHex
(
stat
.
Details
.
BlockHash
[
i
]))
clog
.
Debug
(
"paracross.commitTxDoneByStat detail"
,
"addr"
,
v
,
"hash"
,
common
.
ToHex
(
stat
.
Details
.
BlockHash
[
i
]))
}
}
updateCommitAddrs
(
stat
,
nodes
)
updateCommitAddrs
(
stat
,
nodes
)
commitCount
:=
len
(
stat
.
Details
.
Addrs
)
most
,
mostHash
:=
GetMostCommit
(
stat
.
Details
.
BlockHash
)
most
,
mostHash
:=
GetMostCommit
(
stat
.
Details
.
BlockHash
)
if
!
isCommitDone
(
len
(
nodes
),
most
)
{
if
!
isCommitDone
(
len
(
nodes
),
most
)
{
return
nil
,
nil
return
nil
,
nil
}
}
clog
.
Debug
(
"paracross.commitTxDoneByStat ----pass"
,
"most"
,
most
,
"mostHash"
,
common
.
ToHex
([]
byte
(
mostHash
)))
clog
.
Debug
(
"paracross.commitTxDoneByStat ----pass"
,
"most"
,
most
,
"mostHash"
,
common
.
ToHex
([]
byte
(
mostHash
)))
mostSupervisionCount
:=
0
if
len
(
supervisionNodes
)
>
0
{
for
i
,
v
:=
range
stat
.
SupervisionDetails
.
Addrs
{
clog
.
Debug
(
"paracross.commitTxDoneByStat SupervisionDetails"
,
"addr"
,
v
,
"hash"
,
common
.
ToHex
(
stat
.
SupervisionDetails
.
BlockHash
[
i
]))
}
updateSupervisionDetailsCommitAddrs
(
stat
,
supervisionNodes
)
mostSupervisionCount
,
mostSupervisionHash
:=
GetMostCommit
(
stat
.
SupervisionDetails
.
BlockHash
)
if
!
isCommitDone
(
len
(
supervisionNodes
),
mostSupervisionCount
)
{
return
nil
,
nil
}
clog
.
Debug
(
"paracross.commitTxDoneByStat SupervisionDetails ----pass"
,
"mostSupervisionCount"
,
mostSupervisionCount
,
"mostSupervisionHash"
,
common
.
ToHex
([]
byte
(
mostSupervisionHash
)))
if
mostHash
!=
mostSupervisionHash
{
clog
.
Error
(
"paracross.commitTxDoneByStat mostSupervisionHash mostHash not equal"
,
"mostHash: "
,
common
.
ToHex
([]
byte
(
mostHash
)),
"mostSupervisionHash: "
,
common
.
ToHex
([]
byte
(
mostSupervisionHash
)))
return
nil
,
nil
}
}
stat
.
Status
=
pt
.
ParacrossStatusCommitDone
stat
.
Status
=
pt
.
ParacrossStatusCommitDone
_
=
saveTitleHeight
(
a
.
db
,
calcTitleHeightKey
(
stat
.
Title
,
stat
.
Height
),
stat
)
_
=
saveTitleHeight
(
a
.
db
,
calcTitleHeightKey
(
stat
.
Title
,
stat
.
Height
),
stat
)
r
:=
makeCommitStatReceipt
(
stat
)
r
:=
makeCommitStatReceipt
(
stat
)
receipt
:=
&
types
.
Receipt
{}
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
txRst
:=
getMostResults
([]
byte
(
mostHash
),
stat
)
txRst
:=
getMostResults
([]
byte
(
mostHash
),
stat
)
...
@@ -935,7 +963,9 @@ func (a *action) commitTxDoneByStat(stat *pt.ParacrossHeightStatus, titleStatus
...
@@ -935,7 +963,9 @@ func (a *action) commitTxDoneByStat(stat *pt.ParacrossHeightStatus, titleStatus
//add commit done receipt
//add commit done receipt
cfg
:=
a
.
api
.
GetConfig
()
cfg
:=
a
.
api
.
GetConfig
()
receiptDone
:=
makeDoneReceipt
(
cfg
,
a
.
exec
.
GetMainHeight
(),
a
.
height
,
mostStatus
,
int32
(
most
),
int32
(
commitCount
),
int32
(
len
(
nodes
)))
receiptDone
:=
makeDoneReceipt
(
cfg
,
a
.
exec
.
GetMainHeight
(),
a
.
height
,
mostStatus
,
int32
(
most
),
int32
(
len
(
stat
.
Details
.
Addrs
)),
int32
(
len
(
nodes
)),
int32
(
mostSupervisionCount
),
int32
(
len
(
stat
.
SupervisionDetails
.
Addrs
)),
int32
(
len
(
supervisionNodes
)))
receipt
=
mergeReceipt
(
receipt
,
receiptDone
)
receipt
=
mergeReceipt
(
receipt
,
receiptDone
)
r
,
err
:=
a
.
commitTxDoneStep2
(
mostStatus
,
stat
,
titleStatus
)
r
,
err
:=
a
.
commitTxDoneStep2
(
mostStatus
,
stat
,
titleStatus
)
...
@@ -984,7 +1014,6 @@ func (a *action) isAllowConsensJump(commit *pt.ParacrossNodeStatus, titleStatus
...
@@ -984,7 +1014,6 @@ func (a *action) isAllowConsensJump(commit *pt.ParacrossNodeStatus, titleStatus
return
a
.
isAllowParaConsensJump
(
commit
,
titleStatus
)
return
a
.
isAllowParaConsensJump
(
commit
,
titleStatus
)
}
}
return
a
.
isAllowMainConsensJump
(
commit
,
titleStatus
),
nil
return
a
.
isAllowMainConsensJump
(
commit
,
titleStatus
),
nil
}
}
func
execCrossTx
(
a
*
action
,
cross
*
types
.
TransactionDetail
,
crossTxHash
[]
byte
)
(
*
types
.
Receipt
,
error
)
{
func
execCrossTx
(
a
*
action
,
cross
*
types
.
TransactionDetail
,
crossTxHash
[]
byte
)
(
*
types
.
Receipt
,
error
)
{
...
@@ -1028,7 +1057,6 @@ func execCrossTx(a *action, cross *types.TransactionDetail, crossTxHash []byte)
...
@@ -1028,7 +1057,6 @@ func execCrossTx(a *action, cross *types.TransactionDetail, crossTxHash []byte)
return
receiptWithdraw
,
nil
return
receiptWithdraw
,
nil
}
}
return
nil
,
nil
return
nil
,
nil
}
}
func
rollbackCrossTx
(
a
*
action
,
cross
*
types
.
TransactionDetail
,
crossTxHash
[]
byte
)
(
*
types
.
Receipt
,
error
)
{
func
rollbackCrossTx
(
a
*
action
,
cross
*
types
.
TransactionDetail
,
crossTxHash
[]
byte
)
(
*
types
.
Receipt
,
error
)
{
...
...
plugin/dapp/paracross/executor/exec_del_local.go
View file @
0179fec6
...
@@ -142,7 +142,7 @@ func (e *Paracross) ExecDelLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig
...
@@ -142,7 +142,7 @@ func (e *Paracross) ExecDelLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig
func
(
e
*
Paracross
)
ExecDelLocal_SupervisionNodeGroupConfig
(
payload
*
pt
.
ParaNodeAddrConfig
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
e
*
Paracross
)
ExecDelLocal_SupervisionNodeGroupConfig
(
payload
*
pt
.
ParaNodeAddrConfig
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
var
set
types
.
LocalDBSet
var
set
types
.
LocalDBSet
for
_
,
log
:=
range
receiptData
.
Logs
{
for
_
,
log
:=
range
receiptData
.
Logs
{
if
log
.
Ty
==
pt
.
TyLogParaSupervisionNodeGroup
Config
{
if
log
.
Ty
==
pt
.
TyLogParaSupervisionNodeGroup
StatusUpdate
{
var
g
pt
.
ReceiptParaNodeGroupConfig
var
g
pt
.
ReceiptParaNodeGroupConfig
err
:=
types
.
Decode
(
log
.
Log
,
&
g
)
err
:=
types
.
Decode
(
log
.
Log
,
&
g
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
plugin/dapp/paracross/executor/exec_local.go
View file @
0179fec6
...
@@ -143,7 +143,7 @@ func (e *Paracross) ExecLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig, t
...
@@ -143,7 +143,7 @@ func (e *Paracross) ExecLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig, t
func
(
e
*
Paracross
)
ExecLocal_SupervisionNodeGroupConfig
(
payload
*
pt
.
ParaNodeAddrConfig
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
e
*
Paracross
)
ExecLocal_SupervisionNodeGroupConfig
(
payload
*
pt
.
ParaNodeAddrConfig
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
var
set
types
.
LocalDBSet
var
set
types
.
LocalDBSet
for
_
,
log
:=
range
receiptData
.
Logs
{
for
_
,
log
:=
range
receiptData
.
Logs
{
if
log
.
Ty
==
pt
.
TyLogParaSupervisionNodeGroup
Config
{
if
log
.
Ty
==
pt
.
TyLogParaSupervisionNodeGroup
StatusUpdate
{
var
g
pt
.
ReceiptParaNodeGroupConfig
var
g
pt
.
ReceiptParaNodeGroupConfig
err
:=
types
.
Decode
(
log
.
Log
,
&
g
)
err
:=
types
.
Decode
(
log
.
Log
,
&
g
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
plugin/dapp/paracross/executor/kv.go
View file @
0179fec6
...
@@ -42,9 +42,7 @@ var (
...
@@ -42,9 +42,7 @@ var (
//监督节点
//监督节点
paraSupervisionNodes
string
paraSupervisionNodes
string
paraSupervisionNodeGroupStatusAddrs
string
paraSupervisionNodeGroupStatusAddrs
string
paraSupervisionNodeGroupIDPrefix
string
paraSupervisionNodeIDPrefix
string
paraSupervisionNodeIDPrefix
string
paraSupervisionSelfConsensStages
string
localSupervisionNodeGroupStatusTitle
string
localSupervisionNodeGroupStatusTitle
string
localSupervisionNodeStatusTitle
string
localSupervisionNodeStatusTitle
string
...
@@ -79,9 +77,7 @@ func setPrefix() {
...
@@ -79,9 +77,7 @@ func setPrefix() {
paraSupervisionNodes
=
"mavl-paracross-supervision-nodes-title-"
paraSupervisionNodes
=
"mavl-paracross-supervision-nodes-title-"
paraSupervisionNodeGroupStatusAddrs
=
"mavl-paracross-supervision-nodegroup-status-title-"
paraSupervisionNodeGroupStatusAddrs
=
"mavl-paracross-supervision-nodegroup-status-title-"
paraSupervisionNodeGroupIDPrefix
=
"mavl-paracross-title-nodegroupid-supervision-"
paraSupervisionNodeIDPrefix
=
"mavl-paracross-title-nodeid-supervision-"
paraSupervisionNodeIDPrefix
=
"mavl-paracross-title-nodeid-supervision-"
paraSupervisionSelfConsensStages
=
"mavl-paracross-supervision-selfconsens-stages-"
localSupervisionNodeGroupStatusTitle
=
"LODB-paracross-supervision-nodegroupStatusTitle-"
localSupervisionNodeGroupStatusTitle
=
"LODB-paracross-supervision-nodegroupStatusTitle-"
localSupervisionNodeStatusTitle
=
"LODB-paracross-supervision-nodeStatusTitle-"
localSupervisionNodeStatusTitle
=
"LODB-paracross-supervision-nodeStatusTitle-"
...
@@ -238,10 +234,6 @@ func calcParaSupervisionNodeGroupStatusKey(title string) []byte {
...
@@ -238,10 +234,6 @@ func calcParaSupervisionNodeGroupStatusKey(title string) []byte {
return
[]
byte
(
fmt
.
Sprintf
(
paraSupervisionNodeGroupStatusAddrs
+
"%s"
,
title
))
return
[]
byte
(
fmt
.
Sprintf
(
paraSupervisionNodeGroupStatusAddrs
+
"%s"
,
title
))
}
}
func
calcParaSupervisionNodeGroupIDKey
(
title
,
hash
string
)
string
{
return
fmt
.
Sprintf
(
paraSupervisionNodeGroupIDPrefix
+
"%s-%s"
,
title
,
hash
)
}
func
calcParaSupervisionNodeIDKey
(
title
,
hash
string
)
string
{
func
calcParaSupervisionNodeIDKey
(
title
,
hash
string
)
string
{
return
fmt
.
Sprintf
(
paraSupervisionNodeIDPrefix
+
"%s-%s"
,
title
,
hash
)
return
fmt
.
Sprintf
(
paraSupervisionNodeIDPrefix
+
"%s-%s"
,
title
,
hash
)
}
}
plugin/dapp/paracross/executor/supervisionaccount.go
View file @
0179fec6
...
@@ -11,26 +11,6 @@ import (
...
@@ -11,26 +11,6 @@ import (
"github.com/pkg/errors"
"github.com/pkg/errors"
)
)
func
makeSupervisionNodeGroupIDReceipt
(
addr
string
,
prev
,
current
*
pt
.
ParaNodeGroupStatus
)
*
types
.
Receipt
{
log
:=
&
pt
.
ReceiptParaNodeGroupConfig
{
Addr
:
addr
,
Prev
:
prev
,
Current
:
current
,
}
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
[]
*
types
.
KeyValue
{
{
Key
:
[]
byte
(
current
.
Id
),
Value
:
types
.
Encode
(
current
)},
},
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
pt
.
TyLogParaSupervisionNodeGroupConfig
,
Log
:
types
.
Encode
(
log
),
},
},
}
}
func
makeParaSupervisionNodeGroupReceipt
(
title
string
,
prev
,
current
*
types
.
ConfigItem
)
*
types
.
Receipt
{
func
makeParaSupervisionNodeGroupReceipt
(
title
string
,
prev
,
current
*
types
.
ConfigItem
)
*
types
.
Receipt
{
key
:=
calcParaSupervisionNodeGroupAddrsKey
(
title
)
key
:=
calcParaSupervisionNodeGroupAddrsKey
(
title
)
log
:=
&
types
.
ReceiptConfig
{
Prev
:
prev
,
Current
:
current
}
log
:=
&
types
.
ReceiptConfig
{
Prev
:
prev
,
Current
:
current
}
...
@@ -90,23 +70,6 @@ func makeParaSupervisionNodeStatusReceipt(fromAddr string, prev, current *pt.Par
...
@@ -90,23 +70,6 @@ func makeParaSupervisionNodeStatusReceipt(fromAddr string, prev, current *pt.Par
}
}
}
}
func
makeStageSupervisionGroupReceipt
(
prev
,
current
*
pt
.
SelfConsensStages
)
*
types
.
Receipt
{
key
:=
[]
byte
(
fmt
.
Sprintf
(
paraSupervisionSelfConsensStages
))
log
:=
&
pt
.
ReceiptSelfConsStagesUpdate
{
Prev
:
prev
,
Current
:
current
}
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
[]
*
types
.
KeyValue
{
{
Key
:
key
,
Value
:
types
.
Encode
(
current
)},
},
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
pt
.
TyLogParaStageSupervisionGroupUpdate
,
Log
:
types
.
Encode
(
log
),
},
},
}
}
func
makeParaSupervisionNodeGroupStatusReceipt
(
title
string
,
addr
string
,
prev
,
current
*
pt
.
ParaNodeGroupStatus
)
*
types
.
Receipt
{
func
makeParaSupervisionNodeGroupStatusReceipt
(
title
string
,
addr
string
,
prev
,
current
*
pt
.
ParaNodeGroupStatus
)
*
types
.
Receipt
{
key
:=
calcParaSupervisionNodeGroupStatusKey
(
title
)
key
:=
calcParaSupervisionNodeGroupStatusKey
(
title
)
log
:=
&
pt
.
ReceiptParaNodeGroupConfig
{
log
:=
&
pt
.
ReceiptParaNodeGroupConfig
{
...
@@ -140,40 +103,6 @@ func getSupervisionNodeGroupStatus(db dbm.KV, title string) (*pt.ParaNodeGroupSt
...
@@ -140,40 +103,6 @@ func getSupervisionNodeGroupStatus(db dbm.KV, title string) (*pt.ParaNodeGroupSt
return
&
status
,
err
return
&
status
,
err
}
}
//func getSupervisionNodeAddr(db dbm.KV, title, addr string) (*pt.ParaNodeAddrIdStatus, error) {
// key := calcParaSupervisionNodeAddrKey(title, addr)
// val, err := db.Get(key)
// if err != nil {
// return nil, err
// }
//
// var status pt.ParaNodeAddrIdStatus
// err = types.Decode(val, &status)
// return &status, err
//}
func
supervisionSelfConsentInitStage
(
cfg
*
types
.
Chain33Config
)
*
types
.
Receipt
{
isEnable
:=
cfg
.
IsEnable
(
pt
.
ParaConsSubConf
+
"."
+
pt
.
ParaSelfConsInitConf
)
stage
:=
&
pt
.
SelfConsensStage
{
StartHeight
:
0
,
Enable
:
pt
.
ParaConfigYes
}
if
isEnable
{
stage
.
Enable
=
pt
.
ParaConfigNo
}
stages
:=
&
pt
.
SelfConsensStages
{
Items
:
[]
*
pt
.
SelfConsensStage
{
stage
}}
return
makeStageSupervisionGroupReceipt
(
nil
,
stages
)
}
func
getSupervisionNodeGroupID
(
db
dbm
.
KV
,
title
string
,
id
string
)
(
*
pt
.
ParaNodeGroupStatus
,
error
)
{
id
=
calcParaSupervisionNodeGroupIDKey
(
title
,
id
)
val
,
err
:=
getDb
(
db
,
[]
byte
(
id
))
if
err
!=
nil
{
return
nil
,
err
}
var
status
pt
.
ParaNodeGroupStatus
err
=
types
.
Decode
(
val
,
&
status
)
return
&
status
,
err
}
func
getSupervisionNodeID
(
db
dbm
.
KV
,
title
string
,
id
string
)
(
*
pt
.
ParaNodeIdStatus
,
error
)
{
func
getSupervisionNodeID
(
db
dbm
.
KV
,
title
string
,
id
string
)
(
*
pt
.
ParaNodeIdStatus
,
error
)
{
id
=
calcParaSupervisionNodeIDKey
(
title
,
id
)
id
=
calcParaSupervisionNodeIDKey
(
title
,
id
)
val
,
err
:=
getDb
(
db
,
[]
byte
(
id
))
val
,
err
:=
getDb
(
db
,
[]
byte
(
id
))
...
@@ -230,10 +159,7 @@ func (a *action) updateSupervisionNodeGroup(title, addr string, add bool) (*type
...
@@ -230,10 +159,7 @@ func (a *action) updateSupervisionNodeGroup(title, addr string, add bool) (*type
nodeGroupStatus
.
Status
=
pt
.
ParacrossNodeGroupQuit
nodeGroupStatus
.
Status
=
pt
.
ParacrossNodeGroupQuit
nodeGroupStatus
.
Height
=
a
.
height
nodeGroupStatus
.
Height
=
a
.
height
r
:=
makeSupervisionNodeGroupIDReceipt
(
a
.
fromaddr
,
&
copyStat
,
nodeGroupStatus
)
r
:=
makeParaSupervisionNodeGroupStatusReceipt
(
title
,
a
.
fromaddr
,
&
copyStat
,
nodeGroupStatus
)
receipt
=
mergeReceipt
(
receipt
,
r
)
r
=
makeParaSupervisionNodeGroupStatusReceipt
(
title
,
a
.
fromaddr
,
&
copyStat
,
nodeGroupStatus
)
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
}
}
}
}
...
@@ -295,25 +221,6 @@ func (a *action) supervisionNodeGroupCreate(status *pt.ParaNodeGroupStatus) (*ty
...
@@ -295,25 +221,6 @@ func (a *action) supervisionNodeGroupCreate(status *pt.ParaNodeGroupStatus) (*ty
item
.
Addr
=
a
.
fromaddr
item
.
Addr
=
a
.
fromaddr
receipt
:=
makeParaSupervisionNodeGroupReceipt
(
status
.
Title
,
nil
,
&
item
)
receipt
:=
makeParaSupervisionNodeGroupReceipt
(
status
.
Title
,
nil
,
&
item
)
//copyStat := &pt.ParaNodeIdStatus{
// Id: status.Id + "-0",
// Status: pt.ParacrossSupervisionNodeApprove,
// Title: status.Title,
// TargetAddr: status.TargetAddrs,
// Votes: &pt.ParaNodeVoteDetail{},
// CoinsFrozen: status.CoinsFrozen,
// FromAddr: status.FromAddr,
// Height: a.height,
//}
//r := makeSupervisionNodeConfigReceipt(a.fromaddr, nil, nil, copyStat)
//receipt = mergeReceipt(receipt, r)
//
//r, err := a.updateSupervisionNodeAddrStatus(copyStat)
//if err != nil {
// return nil, err
//}
//receipt = mergeReceipt(receipt, r)
return
receipt
,
nil
return
receipt
,
nil
}
}
...
@@ -340,7 +247,7 @@ func (a *action) updateSupervisionNodeAddrStatus(stat *pt.ParaNodeIdStatus) (*ty
...
@@ -340,7 +247,7 @@ func (a *action) updateSupervisionNodeAddrStatus(stat *pt.ParaNodeIdStatus) (*ty
addrStat
.
Title
=
stat
.
Title
addrStat
.
Title
=
stat
.
Title
addrStat
.
Addr
=
stat
.
TargetAddr
addrStat
.
Addr
=
stat
.
TargetAddr
addrStat
.
BlsPubKey
=
stat
.
BlsPubKey
addrStat
.
BlsPubKey
=
stat
.
BlsPubKey
addrStat
.
Status
=
pt
.
ParacrossSupervisionNodeApp
ly
addrStat
.
Status
=
pt
.
ParacrossSupervisionNodeApp
rove
addrStat
.
ProposalId
=
stat
.
Id
addrStat
.
ProposalId
=
stat
.
Id
addrStat
.
QuitId
=
""
addrStat
.
QuitId
=
""
return
makeParaSupervisionNodeStatusReceipt
(
a
.
fromaddr
,
nil
,
addrStat
),
nil
return
makeParaSupervisionNodeStatusReceipt
(
a
.
fromaddr
,
nil
,
addrStat
),
nil
...
@@ -353,7 +260,7 @@ func (a *action) updateSupervisionNodeAddrStatus(stat *pt.ParaNodeIdStatus) (*ty
...
@@ -353,7 +260,7 @@ func (a *action) updateSupervisionNodeAddrStatus(stat *pt.ParaNodeIdStatus) (*ty
return
nil
,
errors
.
Wrapf
(
err
,
"nodeAddr:%s quiting wrong proposeid:%s"
,
stat
.
TargetAddr
,
addrStat
.
ProposalId
)
return
nil
,
errors
.
Wrapf
(
err
,
"nodeAddr:%s quiting wrong proposeid:%s"
,
stat
.
TargetAddr
,
addrStat
.
ProposalId
)
}
}
addrStat
.
Status
=
pt
.
ParacrossSupervisionNodeQuit
addrStat
.
Status
=
stat
.
Status
addrStat
.
QuitId
=
stat
.
Id
addrStat
.
QuitId
=
stat
.
Id
receipt
:=
makeParaSupervisionNodeStatusReceipt
(
a
.
fromaddr
,
&
preStat
,
addrStat
)
receipt
:=
makeParaSupervisionNodeStatusReceipt
(
a
.
fromaddr
,
&
preStat
,
addrStat
)
...
@@ -419,31 +326,6 @@ func (a *action) supervisionNodeApply(config *pt.ParaNodeAddrConfig) (*types.Rec
...
@@ -419,31 +326,6 @@ func (a *action) supervisionNodeApply(config *pt.ParaNodeAddrConfig) (*types.Rec
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
}
}
// 判断监督账户组是否已经存在
err
,
exist
:=
a
.
checkSupervisionNodeGroupExist
(
config
.
Title
)
if
err
!=
nil
{
return
nil
,
err
}
// 监督账户组不存在
if
!
exist
{
statGroup
:=
&
pt
.
ParaNodeGroupStatus
{
Id
:
calcParaSupervisionNodeGroupIDKey
(
config
.
Title
,
common
.
ToHex
(
a
.
txhash
)),
Status
:
pt
.
ParacrossSupervisionNodeApply
,
Title
:
config
.
Title
,
TargetAddrs
:
config
.
Addr
,
BlsPubKeys
:
config
.
BlsPubKey
,
CoinsFrozen
:
config
.
CoinsFrozen
,
FromAddr
:
a
.
fromaddr
,
Height
:
a
.
height
,
}
r
:=
makeSupervisionNodeGroupIDReceipt
(
a
.
fromaddr
,
nil
,
statGroup
)
receipt
=
mergeReceipt
(
receipt
,
r
)
r
=
makeParaSupervisionNodeGroupStatusReceipt
(
config
.
Title
,
a
.
fromaddr
,
nil
,
statGroup
)
receipt
=
mergeReceipt
(
receipt
,
r
)
}
stat
:=
&
pt
.
ParaNodeIdStatus
{
stat
:=
&
pt
.
ParaNodeIdStatus
{
Id
:
calcParaSupervisionNodeIDKey
(
config
.
Title
,
common
.
ToHex
(
a
.
txhash
)),
Id
:
calcParaSupervisionNodeIDKey
(
config
.
Title
,
common
.
ToHex
(
a
.
txhash
)),
Status
:
pt
.
ParacrossSupervisionNodeApply
,
Status
:
pt
.
ParacrossSupervisionNodeApply
,
...
@@ -457,12 +339,6 @@ func (a *action) supervisionNodeApply(config *pt.ParaNodeAddrConfig) (*types.Rec
...
@@ -457,12 +339,6 @@ func (a *action) supervisionNodeApply(config *pt.ParaNodeAddrConfig) (*types.Rec
r
:=
makeSupervisionNodeConfigReceipt
(
a
.
fromaddr
,
config
,
nil
,
stat
)
r
:=
makeSupervisionNodeConfigReceipt
(
a
.
fromaddr
,
config
,
nil
,
stat
)
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
r
,
err
=
a
.
updateSupervisionNodeAddrStatus
(
stat
)
if
err
!=
nil
{
return
nil
,
err
}
receipt
=
mergeReceipt
(
receipt
,
r
)
return
receipt
,
nil
return
receipt
,
nil
}
}
...
@@ -495,35 +371,25 @@ func (a *action) supervisionNodeApprove(config *pt.ParaNodeAddrConfig) (*types.R
...
@@ -495,35 +371,25 @@ func (a *action) supervisionNodeApprove(config *pt.ParaNodeAddrConfig) (*types.R
return
nil
,
errors
.
Wrapf
(
pt
.
ErrParaNodeGroupFrozenCoinsNotEnough
,
"id not enough coins apply:%d,config:%d"
,
apply
.
CoinsFrozen
,
config
.
CoinsFrozen
)
return
nil
,
errors
.
Wrapf
(
pt
.
ErrParaNodeGroupFrozenCoinsNotEnough
,
"id not enough coins apply:%d,config:%d"
,
apply
.
CoinsFrozen
,
config
.
CoinsFrozen
)
}
}
statGroup
,
err
:=
getSupervisionNodeGroupID
(
a
.
db
,
config
.
Title
,
config
.
Id
)
statGroup
:=
&
pt
.
ParaNodeGroupStatus
{
if
err
!=
nil
{
Id
:
apply
.
Id
,
return
nil
,
err
Status
:
pt
.
ParacrossSupervisionNodeApprove
,
Title
:
apply
.
Title
,
TargetAddrs
:
apply
.
TargetAddr
,
BlsPubKeys
:
apply
.
BlsPubKey
,
CoinsFrozen
:
apply
.
CoinsFrozen
,
FromAddr
:
a
.
fromaddr
,
Height
:
a
.
height
,
}
}
//create the supervision node group
r
,
err
:=
a
.
supervisionNodeGroupCreate
(
statGroup
)
r
,
err
:=
a
.
supervisionNodeGroupCreate
(
statGroup
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"nodegroup create:title:%s,addrs:%s"
,
config
.
Title
,
apply
.
TargetAddr
)
return
nil
,
errors
.
Wrapf
(
err
,
"nodegroup create:title:%s,addrs:%s"
,
config
.
Title
,
apply
.
TargetAddr
)
}
}
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
copyStat
:=
*
statGroup
r
=
makeParaSupervisionNodeGroupStatusReceipt
(
config
.
Title
,
a
.
fromaddr
,
nil
,
statGroup
)
statGroup
.
Status
=
pt
.
ParacrossSupervisionNodeApprove
statGroup
.
Height
=
a
.
height
r
=
makeSupervisionNodeGroupIDReceipt
(
a
.
fromaddr
,
&
copyStat
,
statGroup
)
receipt
=
mergeReceipt
(
receipt
,
r
)
r
=
makeParaSupervisionNodeGroupStatusReceipt
(
config
.
Title
,
a
.
fromaddr
,
&
copyStat
,
statGroup
)
receipt
=
mergeReceipt
(
receipt
,
r
)
//不允许主链成功平行链失败导致不一致的情况,这里如果失败则手工设置init stage 默认设置自共识
if
cfg
.
IsPara
()
{
r
=
supervisionSelfConsentInitStage
(
cfg
)
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
}
//return receipt, nil
}
else
{
}
else
{
// 监督账户组已经存在
// 监督账户组已经存在
r
,
err
:=
a
.
updateSupervisionNodeGroup
(
config
.
Title
,
apply
.
TargetAddr
,
true
)
r
,
err
:=
a
.
updateSupervisionNodeGroup
(
config
.
Title
,
apply
.
TargetAddr
,
true
)
...
@@ -567,7 +433,6 @@ func (a *action) supervisionNodeQuit(config *pt.ParaNodeAddrConfig) (*types.Rece
...
@@ -567,7 +433,6 @@ func (a *action) supervisionNodeQuit(config *pt.ParaNodeAddrConfig) (*types.Rece
cfg
:=
a
.
api
.
GetConfig
()
cfg
:=
a
.
api
.
GetConfig
()
stat
:=
&
pt
.
ParaNodeIdStatus
{
stat
:=
&
pt
.
ParaNodeIdStatus
{
//Id: calcParaSupervisionNodeGroupIDKey(config.Title, common.ToHex(a.txhash)),
Id
:
status
.
ProposalId
,
Id
:
status
.
ProposalId
,
Status
:
pt
.
ParacrossSupervisionNodeQuit
,
Status
:
pt
.
ParacrossSupervisionNodeQuit
,
Title
:
config
.
Title
,
Title
:
config
.
Title
,
...
@@ -587,7 +452,14 @@ func (a *action) supervisionNodeQuit(config *pt.ParaNodeAddrConfig) (*types.Rece
...
@@ -587,7 +452,14 @@ func (a *action) supervisionNodeQuit(config *pt.ParaNodeAddrConfig) (*types.Rece
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
r
,
err
:=
a
.
updateSupervisionNodeGroup
(
config
.
Title
,
stat
.
TargetAddr
,
false
)
// node quit后,如果committx满足2/3目标,自动触发commitDone 后期增加
r
,
err
:=
a
.
loopCommitTxDone
(
config
.
Title
)
if
err
!=
nil
{
clog
.
Error
(
"updateSupervisionNodeGroup.loopCommitTxDone"
,
"title"
,
config
.
Title
,
"err"
,
err
.
Error
())
}
receipt
=
mergeReceipt
(
receipt
,
r
)
r
,
err
=
a
.
updateSupervisionNodeGroup
(
config
.
Title
,
stat
.
TargetAddr
,
false
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -599,13 +471,6 @@ func (a *action) supervisionNodeQuit(config *pt.ParaNodeAddrConfig) (*types.Rece
...
@@ -599,13 +471,6 @@ func (a *action) supervisionNodeQuit(config *pt.ParaNodeAddrConfig) (*types.Rece
}
}
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
// node quit后,如果committx满足2/3目标,自动触发commitDone 后期增加
//r, err = a.loopCommitTxDone(config.Title)
//if err != nil {
// clog.Error("updateSupervisionNodeGroup.loopCommitTxDone", "title", title, "err", err.Error())
//}
//receipt = mergeReceipt(receipt, r)
r
=
makeSupervisionNodeConfigReceipt
(
a
.
fromaddr
,
config
,
nil
,
stat
)
r
=
makeSupervisionNodeConfigReceipt
(
a
.
fromaddr
,
config
,
nil
,
stat
)
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
...
@@ -642,28 +507,6 @@ func (a *action) supervisionNodeCancel(config *pt.ParaNodeAddrConfig) (*types.Re
...
@@ -642,28 +507,6 @@ func (a *action) supervisionNodeCancel(config *pt.ParaNodeAddrConfig) (*types.Re
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
}
}
// 判断监督账户组是否已经存在
err
,
exist
:=
a
.
checkSupervisionNodeGroupExist
(
config
.
Title
)
if
err
!=
nil
{
return
nil
,
err
}
// 监督账户组不存在
if
!
exist
{
statusGroup
,
err
:=
getSupervisionNodeGroupID
(
a
.
db
,
config
.
Title
,
config
.
Id
)
if
err
!=
nil
{
return
nil
,
err
}
copyPrevStat
:=
proto
.
Clone
(
statusGroup
)
.
(
*
pt
.
ParaNodeGroupStatus
)
statusGroup
.
Status
=
pt
.
ParacrossSupervisionNodeCancel
statusGroup
.
Height
=
a
.
height
r
:=
makeSupervisionNodeGroupIDReceipt
(
a
.
fromaddr
,
copyPrevStat
,
statusGroup
)
receipt
=
mergeReceipt
(
receipt
,
r
)
r
=
makeParaSupervisionNodeGroupStatusReceipt
(
config
.
Title
,
a
.
fromaddr
,
copyPrevStat
,
statusGroup
)
receipt
=
mergeReceipt
(
receipt
,
r
)
}
copyStat
:=
proto
.
Clone
(
status
)
.
(
*
pt
.
ParaNodeIdStatus
)
copyStat
:=
proto
.
Clone
(
status
)
.
(
*
pt
.
ParaNodeIdStatus
)
status
.
Status
=
pt
.
ParacrossSupervisionNodeCancel
status
.
Status
=
pt
.
ParacrossSupervisionNodeCancel
status
.
Height
=
a
.
height
status
.
Height
=
a
.
height
...
@@ -671,12 +514,6 @@ func (a *action) supervisionNodeCancel(config *pt.ParaNodeAddrConfig) (*types.Re
...
@@ -671,12 +514,6 @@ func (a *action) supervisionNodeCancel(config *pt.ParaNodeAddrConfig) (*types.Re
r
:=
makeSupervisionNodeConfigReceipt
(
a
.
fromaddr
,
config
,
copyStat
,
status
)
r
:=
makeSupervisionNodeConfigReceipt
(
a
.
fromaddr
,
config
,
copyStat
,
status
)
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
r
,
err
=
a
.
updateSupervisionNodeAddrStatus
(
status
)
if
err
!=
nil
{
return
nil
,
err
}
receipt
=
mergeReceipt
(
receipt
,
r
)
return
receipt
,
nil
return
receipt
,
nil
}
}
...
...
plugin/dapp/paracross/executor/supervisionaccount_test.go
View file @
0179fec6
...
@@ -20,7 +20,7 @@ func createRawSupervisionNodeConfigTx(config *pt.ParaNodeAddrConfig) *types.Tran
...
@@ -20,7 +20,7 @@ func createRawSupervisionNodeConfigTx(config *pt.ParaNodeAddrConfig) *types.Tran
}
}
func
(
suite
*
NodeManageTestSuite
)
testSupervisionExec
()
{
func
(
suite
*
NodeManageTestSuite
)
testSupervisionExec
()
{
suite
.
testSupervisionNodeConfigCancel
()
suite
.
testSupervisionNodeConfigCancel
(
Account14K
,
PrivKey14K
)
suite
.
testSupervisionNodeConfigApprove
(
Account14K
,
PrivKey14K
)
suite
.
testSupervisionNodeConfigApprove
(
Account14K
,
PrivKey14K
)
suite
.
testSupervisionNodeConfigApprove
(
Account1Ku
,
PrivKey1Ku
)
suite
.
testSupervisionNodeConfigApprove
(
Account1Ku
,
PrivKey1Ku
)
suite
.
testSupervisionNodeConfigApprove
(
Account1M3
,
PrivKey1M3
)
suite
.
testSupervisionNodeConfigApprove
(
Account1M3
,
PrivKey1M3
)
...
@@ -29,15 +29,15 @@ func (suite *NodeManageTestSuite) testSupervisionExec() {
...
@@ -29,15 +29,15 @@ func (suite *NodeManageTestSuite) testSupervisionExec() {
suite
.
testSupervisionNodeQuit
()
suite
.
testSupervisionNodeQuit
()
}
}
func
(
suite
*
NodeManageTestSuite
)
testSupervisionNodeConfigCancel
()
{
func
(
suite
*
NodeManageTestSuite
)
testSupervisionNodeConfigCancel
(
addr
,
privKey
string
)
{
// Apply
// Apply
config
:=
&
pt
.
ParaNodeAddrConfig
{
config
:=
&
pt
.
ParaNodeAddrConfig
{
Title
:
chain33TestCfg
.
GetTitle
(),
Title
:
chain33TestCfg
.
GetTitle
(),
Op
:
pt
.
ParacrossSupervisionNodeApply
,
Op
:
pt
.
ParacrossSupervisionNodeApply
,
Addr
:
Account14K
,
Addr
:
addr
,
}
}
tx
:=
createRawSupervisionNodeConfigTx
(
config
)
tx
:=
createRawSupervisionNodeConfigTx
(
config
)
receipt
:=
nodeCommit
(
suite
,
PrivKey14K
,
tx
)
receipt
:=
nodeCommit
(
suite
,
privKey
,
tx
)
checkSupervisionGroupApplyReceipt
(
suite
,
receipt
)
checkSupervisionGroupApplyReceipt
(
suite
,
receipt
)
var
g
pt
.
ReceiptParaNodeGroupConfig
var
g
pt
.
ReceiptParaNodeGroupConfig
...
@@ -51,7 +51,7 @@ func (suite *NodeManageTestSuite) testSupervisionNodeConfigCancel() {
...
@@ -51,7 +51,7 @@ func (suite *NodeManageTestSuite) testSupervisionNodeConfigCancel() {
Id
:
getParaNodeIDSuffix
(
g
.
Current
.
Id
),
Id
:
getParaNodeIDSuffix
(
g
.
Current
.
Id
),
}
}
tx
=
createRawSupervisionNodeConfigTx
(
config
)
tx
=
createRawSupervisionNodeConfigTx
(
config
)
receipt
=
nodeCommit
(
suite
,
PrivKey14K
,
tx
)
receipt
=
nodeCommit
(
suite
,
privKey
,
tx
)
assert
.
Equal
(
suite
.
T
(),
receipt
.
Ty
,
int32
(
types
.
ExecOk
))
assert
.
Equal
(
suite
.
T
(),
receipt
.
Ty
,
int32
(
types
.
ExecOk
))
}
}
...
@@ -123,9 +123,9 @@ func (suite *NodeManageTestSuite) testSupervisionNodeQuit() {
...
@@ -123,9 +123,9 @@ func (suite *NodeManageTestSuite) testSupervisionNodeQuit() {
func
checkSupervisionGroupApplyReceipt
(
suite
*
NodeManageTestSuite
,
receipt
*
types
.
Receipt
)
{
func
checkSupervisionGroupApplyReceipt
(
suite
*
NodeManageTestSuite
,
receipt
*
types
.
Receipt
)
{
assert
.
Equal
(
suite
.
T
(),
receipt
.
Ty
,
int32
(
types
.
ExecOk
))
assert
.
Equal
(
suite
.
T
(),
receipt
.
Ty
,
int32
(
types
.
ExecOk
))
//
assert.Len(suite.T(), receipt.KV, 1)
assert
.
Len
(
suite
.
T
(),
receipt
.
KV
,
1
)
//
assert.Len(suite.T(), receipt.Logs, 1)
assert
.
Len
(
suite
.
T
(),
receipt
.
Logs
,
1
)
//
assert.Equal(suite.T(), int32(pt.TyLogParaSupervisionNodeConfig), receipt.Logs[0].Ty)
assert
.
Equal
(
suite
.
T
(),
int32
(
pt
.
TyLogParaSupervisionNodeConfig
),
receipt
.
Logs
[
0
]
.
Ty
)
}
}
func
(
suite
*
NodeManageTestSuite
)
testSupervisionQuery
()
{
func
(
suite
*
NodeManageTestSuite
)
testSupervisionQuery
()
{
...
...
plugin/dapp/paracross/proto/paracross.proto
View file @
0179fec6
...
@@ -382,6 +382,9 @@ message ReceiptParacrossDone {
...
@@ -382,6 +382,9 @@ message ReceiptParacrossDone {
bytes
mainBlockHash
=
13
;
bytes
mainBlockHash
=
13
;
int64
mainBlockHeight
=
14
;
int64
mainBlockHeight
=
14
;
int64
chainExecHeight
=
15
;
int64
chainExecHeight
=
15
;
int32
totalSupervisionNodes
=
16
;
int32
totalSupervisionCommit
=
17
;
int32
mostSupervisionCommit
=
18
;
}
}
message
ReceiptParacrossRecord
{
message
ReceiptParacrossRecord
{
...
...
plugin/dapp/paracross/types/paracross.go
View file @
0179fec6
...
@@ -50,12 +50,10 @@ const (
...
@@ -50,12 +50,10 @@ const (
TyLogParaBindMinerAddr
=
671
TyLogParaBindMinerAddr
=
671
TyLogParaBindMinerNode
=
672
TyLogParaBindMinerNode
=
672
// Supervision Node
// Supervision Node
TyLogParaSupervisionNode
GroupConfig
=
680
TyLogParaSupervisionNode
Config
=
680
TyLogParaSupervisionNodeGroupAddrsUpdate
=
681
TyLogParaSupervisionNodeGroupAddrsUpdate
=
681
TyLogParaSupervisionNodeConfig
=
682
TyLogParaSupervisionNodeStatusUpdate
=
682
TyLogParaSupervisionNodeStatusUpdate
=
683
TyLogParaSupervisionNodeGroupStatusUpdate
=
683
TyLogParaStageSupervisionGroupUpdate
=
684
TyLogParaSupervisionNodeGroupStatusUpdate
=
685
)
)
// action type
// action type
...
...
plugin/dapp/paracross/types/paracross.pb.go
View file @
0179fec6
...
@@ -6,13 +6,12 @@ package types
...
@@ -6,13 +6,12 @@ package types
import
(
import
(
context
"context"
context
"context"
fmt
"fmt"
fmt
"fmt"
math
"math"
types
"github.com/33cn/chain33/types"
types
"github.com/33cn/chain33/types"
proto
"github.com/golang/protobuf/proto"
proto
"github.com/golang/protobuf/proto"
grpc
"google.golang.org/grpc"
grpc
"google.golang.org/grpc"
codes
"google.golang.org/grpc/codes"
codes
"google.golang.org/grpc/codes"
status
"google.golang.org/grpc/status"
status
"google.golang.org/grpc/status"
math
"math"
)
)
// Reference imports to suppress errors if they are not otherwise used.
// Reference imports to suppress errors if they are not otherwise used.
...
@@ -3292,6 +3291,9 @@ type ReceiptParacrossDone struct {
...
@@ -3292,6 +3291,9 @@ type ReceiptParacrossDone struct {
MainBlockHash
[]
byte
`protobuf:"bytes,13,opt,name=mainBlockHash,proto3" json:"mainBlockHash,omitempty"`
MainBlockHash
[]
byte
`protobuf:"bytes,13,opt,name=mainBlockHash,proto3" json:"mainBlockHash,omitempty"`
MainBlockHeight
int64
`protobuf:"varint,14,opt,name=mainBlockHeight,proto3" json:"mainBlockHeight,omitempty"`
MainBlockHeight
int64
`protobuf:"varint,14,opt,name=mainBlockHeight,proto3" json:"mainBlockHeight,omitempty"`
ChainExecHeight
int64
`protobuf:"varint,15,opt,name=chainExecHeight,proto3" json:"chainExecHeight,omitempty"`
ChainExecHeight
int64
`protobuf:"varint,15,opt,name=chainExecHeight,proto3" json:"chainExecHeight,omitempty"`
TotalSupervisionNodes
int32
`protobuf:"varint,16,opt,name=totalSupervisionNodes,proto3" json:"totalSupervisionNodes,omitempty"`
TotalSupervisionCommit
int32
`protobuf:"varint,17,opt,name=totalSupervisionCommit,proto3" json:"totalSupervisionCommit,omitempty"`
MostSupervisionCommit
int32
`protobuf:"varint,18,opt,name=mostSupervisionCommit,proto3" json:"mostSupervisionCommit,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:"-"`
...
@@ -3427,6 +3429,27 @@ func (m *ReceiptParacrossDone) GetChainExecHeight() int64 {
...
@@ -3427,6 +3429,27 @@ func (m *ReceiptParacrossDone) GetChainExecHeight() int64 {
return
0
return
0
}
}
func
(
m
*
ReceiptParacrossDone
)
GetTotalSupervisionNodes
()
int32
{
if
m
!=
nil
{
return
m
.
TotalSupervisionNodes
}
return
0
}
func
(
m
*
ReceiptParacrossDone
)
GetTotalSupervisionCommit
()
int32
{
if
m
!=
nil
{
return
m
.
TotalSupervisionCommit
}
return
0
}
func
(
m
*
ReceiptParacrossDone
)
GetMostSupervisionCommit
()
int32
{
if
m
!=
nil
{
return
m
.
MostSupervisionCommit
}
return
0
}
type
ReceiptParacrossRecord
struct
{
type
ReceiptParacrossRecord
struct
{
Addr
string
`protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
Addr
string
`protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
Status
*
ParacrossNodeStatus
`protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
Status
*
ParacrossNodeStatus
`protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
...
@@ -4506,200 +4529,201 @@ func init() {
...
@@ -4506,200 +4529,201 @@ func init() {
proto
.
RegisterType
((
*
BlsPubKey
)(
nil
),
"types.BlsPubKey"
)
proto
.
RegisterType
((
*
BlsPubKey
)(
nil
),
"types.BlsPubKey"
)
}
}
func
init
()
{
func
init
()
{
proto
.
RegisterFile
(
"paracross.proto"
,
fileDescriptor_6a397e38c9ea6747
)
}
proto
.
RegisterFile
(
"paracross.proto"
,
fileDescriptor_6a397e38c9ea6747
)
}
var
fileDescriptor_6a397e38c9ea6747
=
[]
byte
{
var
fileDescriptor_6a397e38c9ea6747
=
[]
byte
{
// 30
08
bytes of a gzipped FileDescriptorProto
// 30
47
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xd4
,
0x1a
,
0x4b
,
0x6c
,
0x24
,
0x47
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xd4
,
0x1a
,
0x4b
,
0x6c
,
0x24
,
0x47
,
0xd5
,
0x3d
,
0x3f
,
0xcf
,
0x3c
,
0x7b
,
0xec
,
0xdd
,
0xce
,
0xae
,
0x33
,
0x71
,
0x92
,
0x95
,
0xd5
,
0x0a
,
0xd5
,
0x3d
,
0x3f
,
0xcf
,
0x3c
,
0x7b
,
0xfc
,
0xe9
,
0xec
,
0x3a
,
0x13
,
0x27
,
0x59
,
0x59
,
0xad
,
0x10
,
0x91
,
0x21
,
0x9b
,
0xdd
,
0xac
,
0x13
,
0x16
,
0x45
,
0x88
,
0x4f
,
0xec
,
0xdd
,
0xc4
,
0x56
,
0xd6
,
0x61
,
0x19
,
0xb2
,
0xd9
,
0xcd
,
0x3a
,
0x61
,
0x51
,
0x84
,
0xf8
,
0xc4
,
0xde
,
0x4d
,
0x6c
,
0x65
,
0x1d
,
0x36
,
0x53
,
0x76
,
0x00
,
0x29
,
0x02
,
0xd1
,
0x9e
,
0x29
,
0xdb
,
0xad
,
0xcc
,
0x74
,
0xcf
,
0x76
,
0xf5
,
0x64
,
0x35
,
0x0e
,
0x20
,
0x45
,
0x20
,
0xda
,
0x33
,
0x65
,
0xbb
,
0x95
,
0x99
,
0xee
,
0xd9
,
0xae
,
0x9e
,
0xac
,
0x6d
,
0x84
,
0x14
,
0x0e
,
0xc0
,
0x0d
,
0x89
,
0x0b
,
0x12
,
0x5c
,
0xb8
,
0xc0
,
0x0d
,
0x89
,
0x13
,
0x67
,
0x8d
,
0x90
,
0x72
,
0x01
,
0x6e
,
0x48
,
0x5c
,
0x90
,
0xe0
,
0xc2
,
0x85
,
0xdc
,
0x90
,
0x38
,
0x71
,
0xe6
,
0x0e
,
0x48
,
0x5c
,
0x22
,
0x2e
,
0xe1
,
0xc8
,
0x09
,
0x8e
,
0x88
,
0x23
,
0x37
,
0x4e
,
0xe8
,
0xbd
,
0xaa
,
0x80
,
0xc4
,
0x25
,
0xe2
,
0x12
,
0x8e
,
0x9c
,
0xe0
,
0x88
,
0x38
,
0x72
,
0xe3
,
0x84
,
0xde
,
0xab
,
0xaa
,
0xea
,
0xae
,
0xaa
,
0xee
,
0x69
,
0x3b
,
0xd9
,
0x5c
,
0xb8
,
0xcd
,
0x7b
,
0xf5
,
0xaa
,
0xea
,
0xfd
,
0xeb
,
0xee
,
0xaa
,
0xea
,
0x9e
,
0xb1
,
0x93
,
0xcd
,
0x85
,
0xdb
,
0xbc
,
0x57
,
0xaf
,
0xaa
,
0xde
,
0xbf
,
0xde
,
0xbd
,
0x37
,
0x0d
,
0xab
,
0xd3
,
0x30
,
0x0d
,
0x87
,
0x69
,
0x22
,
0xc4
,
0xad
,
0x69
,
0x9a
,
0x64
,
0x89
,
0x7b
,
0xd3
,
0xb0
,
0x3a
,
0x09
,
0xd3
,
0x70
,
0x90
,
0x26
,
0x42
,
0xdc
,
0x9a
,
0xa4
,
0x49
,
0x96
,
0xf8
,
0xdf
,
0xce
,
0xce
,
0xa7
,
0x5c
,
0xac
,
0x5f
,
0xcd
,
0xd2
,
0x30
,
0x16
,
0xe1
,
0x30
,
0x8b
,
0x92
,
0x58
,
0xcd
,
0xec
,
0x62
,
0xc2
,
0xc5
,
0xe6
,
0x7a
,
0x96
,
0x86
,
0xb1
,
0x08
,
0x07
,
0x59
,
0x94
,
0xc4
,
0x72
,
0xae
,
0xac
,
0x2f
,
0x0f
,
0x93
,
0xc9
,
0x24
,
0x87
,
0xae
,
0x1c
,
0x8d
,
0x93
,
0xe1
,
0x07
,
0xc3
,
0xd3
,
0x65
,
0x73
,
0x79
,
0x90
,
0x8c
,
0xc7
,
0x39
,
0xb4
,
0x76
,
0x3c
,
0x4a
,
0x06
,
0x1f
,
0x0c
,
0xce
,
0xc2
,
0x30
,
0x52
,
0x98
,
0xe0
,
0x01
,
0xac
,
0x3d
,
0xd4
,
0x87
,
0x1d
,
0x64
,
0x61
,
0x36
,
0x13
,
0xf7
,
0x78
,
0x48
,
0x61
,
0x82
,
0x07
,
0xb0
,
0xf1
,
0x50
,
0x1f
,
0xd6
,
0xcf
,
0xc2
,
0x6c
,
0x2a
,
0xee
,
0xf1
,
0x2c
,
0x16
,
0x46
,
0x63
,
0xe1
,
0x5f
,
0x83
,
0x76
,
0x38
,
0x1a
,
0xa5
,
0x62
,
0xe0
,
0x6d
,
0x34
,
0x37
,
0x7b
,
0x8c
,
0x46
,
0xc2
,
0xbf
,
0x06
,
0xcd
,
0x70
,
0x38
,
0x4c
,
0x45
,
0xcf
,
0xdb
,
0xaa
,
0x6f
,
0x77
,
0x98
,
0x4c
,
0x02
,
0xfe
,
0x73
,
0xd0
,
0xa3
,
0x33
,
0x76
,
0x43
,
0x71
,
0x3a
,
0x68
,
0x6c
,
0x34
,
0x37
,
0x97
,
0x04
,
0xfc
,
0xe7
,
0xa0
,
0x43
,
0x67
,
0xec
,
0x87
,
0xe2
,
0xac
,
0x57
,
0xdb
,
0xaa
,
0x6f
,
0x2f
,
0xb3
,
0x59
,
0x81
,
0x08
,
0xde
,
0x87
,
0x67
,
0x9d
,
0xd3
,
0xb6
,
0x71
,
0x4d
,
0x1f
,
0x79
,
0x03
,
0x20
,
0xa7
,
0x02
,
0x11
,
0xbc
,
0x0f
,
0xcf
,
0x3a
,
0xa7
,
0xed
,
0xe2
,
0x9a
,
0x3e
,
0xf2
,
0x06
,
0x40
,
0x4e
,
0x2b
,
0x95
,
0xe7
,
0x2e
,
0x33
,
0x03
,
0x83
,
0x87
,
0x67
,
0x67
,
0x8c
,
0x8b
,
0xd9
,
0x38
,
0x13
,
0xfa
,
0xf0
,
0xcf
,
0x5d
,
0x66
,
0x06
,
0x06
,
0x0f
,
0xcf
,
0xce
,
0x19
,
0x17
,
0xd3
,
0x51
,
0x26
,
0xf4
,
0xe1
,
0x39
,
0x1c
,
0x11
,
0xfc
,
0xab
,
0x01
,
0xd7
,
0xf3
,
0xd3
,
0x77
,
0x79
,
0x74
,
0x72
,
0x9a
,
0xc9
,
0x3b
,
0xfc
,
0x22
,
0xf8
,
0x57
,
0x0d
,
0xae
,
0xe7
,
0xa7
,
0xef
,
0xf3
,
0xe8
,
0xf4
,
0x2c
,
0x93
,
0x77
,
0xf8
,
0x1b
,
0x35
,
0xe8
,
0x08
,
0xfa
,
0x35
,
0xf0
,
0x36
,
0xbc
,
0xcd
,
0x36
,
0x53
,
0x10
,
0x8a
,
0x90
,
0x45
,
0xd9
,
0xd0
,
0x12
,
0xf4
,
0xab
,
0xe7
,
0x6d
,
0x79
,
0xdb
,
0x4d
,
0xa6
,
0x20
,
0x14
,
0x21
,
0x8b
,
0xb2
,
0x11
,
0x98
,
0x0f
,
0x1a
,
0x1b
,
0x1e
,
0x8a
,
0x40
,
0x00
,
0x52
,
0x9f
,
0xd2
,
0xee
,
0x41
,
0x73
,
0xc3
,
0xdb
,
0xef
,
0xd5
,
0xb6
,
0x3c
,
0x14
,
0x81
,
0x00
,
0xa4
,
0x3e
,
0xa3
,
0xdd
,
0xbd
,
0xfa
,
0x96
,
0xb7
,
0x5d
,
0x6c
,
0x32
,
0x05
,
0xf9
,
0x5f
,
0x81
,
0xc5
,
0x91
,
0x64
,
0x74
,
0xd0
,
0xda
,
0xf0
,
0x36
,
0x97
,
0xb6
,
0x67
,
0x0a
,
0xf2
,
0xbf
,
0x06
,
0x8b
,
0x43
,
0xc9
,
0x68
,
0xaf
,
0xb1
,
0xe5
,
0x6d
,
0x2f
,
0xed
,
0x3c
,
0x9e
,
0xbf
,
0x45
,
0x6a
,
0xbd
,
0x55
,
0xad
,
0x20
,
0xa6
,
0xa9
,
0x51
,
0xac
,
0x49
,
0x18
,
0xc5
,
0x92
,
0x7f
,
0x8b
,
0xd4
,
0x7a
,
0xab
,
0x5a
,
0x41
,
0x4c
,
0x53
,
0xa3
,
0x58
,
0xe3
,
0x30
,
0x8a
,
0x25
,
0x4b
,
0xa5
,
0x41
,
0x9b
,
0x0e
,
0x35
,
0x30
,
0xfe
,
0x3a
,
0x74
,
0x09
,
0x42
,
0x95
,
0x75
,
0x36
,
0xbc
,
0xcd
,
0xbd
,
0x26
,
0x1d
,
0x6a
,
0x60
,
0xfc
,
0x4d
,
0x68
,
0x13
,
0x84
,
0x2a
,
0x6b
,
0x6d
,
0x79
,
0xdb
,
0xcb
,
0x65
,
0x96
,
0xc3
,
0xfe
,
0x9b
,
0xb0
,
0x7c
,
0x64
,
0xa8
,
0x68
,
0xb0
,
0x48
,
0x37
,
0x07
,
0xd5
,
0x37
,
0x2c
,
0x87
,
0xfd
,
0x37
,
0x61
,
0xf9
,
0xd8
,
0x50
,
0x51
,
0x6f
,
0x91
,
0x6e
,
0x0e
,
0xaa
,
0x6f
,
0x36
,
0x9b
,
0xca
,
0x64
,
0xd6
,
0x3e
,
0x7f
,
0x1f
,
0x7c
,
0x31
,
0x9b
,
0xf2
,
0xf4
,
0xc3
,
0x48
,
0x44
,
0x49
,
0x95
,
0xc9
,
0xac
,
0x7d
,
0xfe
,
0x21
,
0xf8
,
0x62
,
0x3a
,
0xe1
,
0xe9
,
0x87
,
0x91
,
0x88
,
0x92
,
0x58
,
0xac
,
0x4f
,
0xeb
,
0x5e
,
0x46
,
0x8e
,
0x8a
,
0x8d
,
0xc1
,
0x3f
,
0x1a
,
0x30
,
0xa8
,
0xd4
,
0x35
,
0x13
,
0x9f
,
0xd6
,
0xbe
,
0x8a
,
0x1c
,
0x15
,
0x1b
,
0x83
,
0x7f
,
0xd4
,
0xa0
,
0x57
,
0xa9
,
0x6b
,
0x26
,
0x26
,
0xd3
,
0xcf
,
0x49
,
0xdd
,
0xb6
,
0xd6
,
0x5a
,
0xb5
,
0x5a
,
0x6b
,
0xd3
,
0x81
,
0x85
,
0xd6
,
0x36
,
0x60
,
0x5f
,
0x90
,
0xba
,
0x6d
,
0xad
,
0x35
,
0xe6
,
0x6a
,
0xad
,
0x49
,
0x07
,
0x16
,
0x5a
,
0xdb
,
0x82
,
0x25
,
0x09
,
0xfd
,
0x3a
,
0xca
,
0xde
,
0x20
,
0x0f
,
0xed
,
0x90
,
0x87
,
0x9a
,
0x28
,
0x7f
,
0x13
,
0x56
,
0x25
,
0xf4
,
0xeb
,
0x28
,
0x7b
,
0x83
,
0x3c
,
0xb4
,
0x45
,
0x1e
,
0x6a
,
0xa2
,
0xfc
,
0x6d
,
0x58
,
0x95
,
0xe0
,
0xb8
,
0x9d
,
0x7b
,
0xeb
,
0x22
,
0x51
,
0xb9
,
0x68
,
0xff
,
0x2e
,
0xac
,
0x49
,
0xd4
,
0x41
,
0xa1
,
0x06
,
0x6e
,
0xee
,
0xad
,
0x8b
,
0x44
,
0xe5
,
0xa2
,
0xfd
,
0xbb
,
0xb0
,
0x21
,
0x51
,
0xfd
,
0x42
,
0x0d
,
0xf2
,
0x79
,
0x6c
,
0x97
,
0x36
,
0xcc
,
0x59
,
0xf5
,
0xbf
,
0x0e
,
0xeb
,
0xa5
,
0x95
,
0xe2
,
0xb2
,
0x1e
,
0xed
,
0xd8
,
0x36
,
0x6d
,
0x98
,
0xb1
,
0xea
,
0x7f
,
0x13
,
0x36
,
0x4b
,
0x2b
,
0xc5
,
0x65
,
0x1d
,
0xda
,
0x3b
,
0xad
,
0xa1
,
0x08
,
0x7e
,
0xed
,
0xc1
,
0xaa
,
0x63
,
0x91
,
0x42
,
0x83
,
0x5e
,
0xb5
,
0x06
,
0x1b
,
0x96
,
0x87
,
0x22
,
0xf8
,
0x8d
,
0x07
,
0xab
,
0x8e
,
0x45
,
0x0a
,
0x0d
,
0x7a
,
0xd5
,
0x1a
,
0xac
,
0x59
,
0x1a
,
0x06
,
0xad
,
0x58
,
0x6c
,
0x92
,
0x63
,
0x15
,
0x88
,
0x4f
,
0xad
,
0x5f
,
0xc3
,
0x2b
,
0x83
,
0xdf
,
0x79
,
0xb4
,
0x62
,
0xb1
,
0x4e
,
0x8e
,
0x55
,
0x20
,
0x3e
,
0xb3
,
0x7e
,
0x0d
,
0xaf
,
0x0c
,
0x3e
,
0xf6
,
0x0c
,
0x86
,
0xf9
,
0x77
,
0x92
,
0x58
,
0xf0
,
0x58
,
0xcc
,
0xea
,
0x99
,
0x44
,
0x93
,
0x9c
,
0x16
,
0xf7
,
0x49
,
0xf3
,
0xef
,
0x25
,
0xb1
,
0xe0
,
0xb1
,
0x98
,
0xce
,
0x67
,
0x12
,
0x4d
,
0x72
,
0x56
,
0xdc
,
0x27
,
0x39
,
0x4e
,
0x4d
,
0x94
,
0xff
,
0x02
,
0xf4
,
0x87
,
0xf2
,
0xa8
,
0x5d
,
0xd3
,
0x1f
,
0x6c
,
0xa4
,
0xff
,
0x25
,
0x35
,
0x51
,
0xfe
,
0x0b
,
0xd0
,
0x1d
,
0xc8
,
0xa3
,
0xf6
,
0x4d
,
0x7f
,
0xb0
,
0x91
,
0xfe
,
0x57
,
0x60
,
0xb8
,
0xa2
,
0x10
,
0x85
,
0x32
,
0x5b
,
0x74
,
0x51
,
0x09
,
0x1f
,
0xfc
,
0xd1
,
0x03
,
0x1f
,
0xd9
,
0x7c
,
0x4d
,
0x21
,
0x0a
,
0x65
,
0x36
,
0xe8
,
0xa2
,
0x12
,
0x3e
,
0xf8
,
0xa3
,
0x07
,
0x3e
,
0xb2
,
0xf9
,
0x4e
,
0x27
,
0x19
,
0x71
,
0x34
,
0xca
,
0x4e
,
0x12
,
0x1f
,
0x47
,
0x27
,
0x73
,
0x18
,
0x5c
,
0x81
,
0x46
,
0x32
,
0x32
,
0xe4
,
0x68
,
0x94
,
0xbd
,
0x24
,
0x3e
,
0x89
,
0x4e
,
0x67
,
0x30
,
0xb8
,
0x02
,
0xb5
,
0x64
,
0x42
,
0x25
,
0xbe
,
0xfa
,
0xac
,
0x91
,
0x4c
,
0x11
,
0x8e
,
0x46
,
0xc4
,
0x43
,
0x8f
,
0x35
,
0xa2
,
0x91
,
0xef
,
0x7c
,
0x75
,
0x59
,
0x2d
,
0x99
,
0x20
,
0x1c
,
0x0d
,
0x89
,
0x87
,
0x0e
,
0xab
,
0x45
,
0x43
,
0xdf
,
0x87
,
0x43
,
0x0b
,
0x53
,
0x9c
,
0xba
,
0x8c
,
0x7e
,
0xe3
,
0x49
,
0x1f
,
0x86
,
0xe3
,
0x19
,
0x27
,
0x05
,
0xf5
,
0x06
,
0xa6
,
0x38
,
0x75
,
0x19
,
0xfd
,
0xc6
,
0x93
,
0x3e
,
0x0c
,
0x47
,
0x53
,
0x4e
,
0x0a
,
0xea
,
0x32
,
0x99
,
0x04
,
0xa4
,
0xf7
,
0x45
,
0xb1
,
0x78
,
0x33
,
0x4d
,
0x7e
,
0xc8
,
0x63
,
0x0a
,
0x69
,
0x14
,
0xb5
,
0x09
,
0x48
,
0xef
,
0x8b
,
0x62
,
0xf1
,
0x66
,
0x9a
,
0xfc
,
0x98
,
0xc7
,
0x14
,
0xd2
,
0x28
,
0x6a
,
0x81
,
0x40
,
0x49
,
0xcb
,
0x88
,
0x87
,
0xb3
,
0xa3
,
0xb7
,
0xf9
,
0x39
,
0x85
,
0x74
,
0x8f
,
0x15
,
0x88
,
0xe0
,
0x92
,
0x96
,
0x11
,
0x0f
,
0xa7
,
0xc7
,
0x6f
,
0xf3
,
0x0b
,
0x0a
,
0xe9
,
0x0e
,
0x2b
,
0x10
,
0xc1
,
0xb7
,
0x9b
,
0x05
,
0xd7
,
0xdf
,
0x4e
,
0x32
,
0x2e
,
0x63
,
0x6e
,
0x4e
,
0xbe
,
0x45
,
0x0e
,
0x92
,
0x8c
,
0xcb
,
0x0b
,
0xae
,
0xbf
,
0x9b
,
0x64
,
0x5c
,
0xc6
,
0xdc
,
0x8c
,
0x7c
,
0x8b
,
0x1c
,
0x24
,
0x19
,
0x97
,
0xe9
,
0x74
,
0xd8
,
0x63
,
0x12
,
0x08
,
0xfe
,
0xe0
,
0xc1
,
0x35
,
0x53
,
0xf0
,
0xbd
,
0x91
,
0xb2
,
0x8d
,
0x16
,
0xb0
,
0xc3
,
0x24
,
0x10
,
0xfc
,
0xc1
,
0x83
,
0x6b
,
0xa6
,
0xe0
,
0x07
,
0x43
,
0x65
,
0x1b
,
0x2d
,
0x84
,
0xc2
,
0x33
,
0x84
,
0xb8
,
0x01
,
0x30
,
0x4d
,
0x93
,
0x69
,
0x22
,
0xc2
,
0xf1
,
0xde
,
0x48
,
0xc5
,
0xa6
,
0x67
,
0x08
,
0x71
,
0x03
,
0x60
,
0x92
,
0x26
,
0x93
,
0x44
,
0x84
,
0xa3
,
0x83
,
0xa1
,
0x8a
,
0x4d
,
0x03
,
0x81
,
0x41
,
0xf7
,
0x7a
,
0x34
,
0x8b
,
0xb2
,
0x3d
,
0xad
,
0x0c
,
0x05
,
0x19
,
0x61
,
0xde
,
0xaa
,
0x0e
,
0x83
,
0xee
,
0xf5
,
0x68
,
0x1a
,
0x65
,
0x07
,
0x5a
,
0x19
,
0x0a
,
0x32
,
0xc2
,
0xbc
,
0x51
,
0x1d
,
0xe6
,
0xf3
,
0xb6
,
0xa9
,
0x5e
,
0x4b
,
0xe4
,
0x8e
,
0x2b
,
0xf2
,
0x2f
,
0x1b
,
0x70
,
0x45
,
0x33
,
0x9c
,
0x33
,
0x4d
,
0x53
,
0xbd
,
0x96
,
0xc8
,
0x2d
,
0x57
,
0xe4
,
0x5f
,
0xd5
,
0x60
,
0x4d
,
0x33
,
0x9c
,
0x33
,
0x2b
,
0x2b
,
0x2d
,
0xe0
,
0xe5
,
0x16
,
0x28
,
0x2e
,
0x6c
,
0x54
,
0x5f
,
0xd8
,
0x34
,
0x2f
,
0xbc
,
0x01
,
0x90
,
0x2d
,
0xe0
,
0xe5
,
0x16
,
0x28
,
0x2e
,
0xac
,
0x55
,
0x5f
,
0x58
,
0x37
,
0x2f
,
0xbc
,
0x01
,
0x90
,
0x85
,
0x85
,
0xe9
,
0x09
,
0xa7
,
0x80
,
0x57
,
0x56
,
0x33
,
0x30
,
0xae
,
0x95
,
0xda
,
0x65
,
0x2b
,
0xdd
,
0xd6
,
0xe9
,
0x29
,
0xa7
,
0x80
,
0x57
,
0x56
,
0x33
,
0x30
,
0xae
,
0x95
,
0x9a
,
0x65
,
0x2b
,
0xdd
,
0xd6
,
0xba
,
0xba
,
0xed
,
0x50
,
0x9a
,
0x7c
,
0xc6
,
0x48
,
0x93
,
0xb6
,
0x6d
,
0x94
,
0xda
,
0x31
,
0x64
,
0x8e
,
0xd3
,
0x6d
,
0x51
,
0x9a
,
0x7c
,
0xc6
,
0x48
,
0x93
,
0xb6
,
0x6d
,
0x94
,
0xda
,
0x31
,
0x64
,
0x4e
,
0xd2
,
0x64
,
0x64
,
0x42
,
0x17
,
0x4a
,
0xab
,
0xe6
,
0xb0
,
0x11
,
0xa4
,
0xdd
,
0x72
,
0x90
,
0x6a
,
0xbd
,
0xf4
,
0x5c
,
0x4c
,
0x17
,
0x4a
,
0xab
,
0xe6
,
0xb0
,
0x11
,
0xa4
,
0xed
,
0x72
,
0x90
,
0x6a
,
0xbd
,
0x74
,
0x5c
,
0xbd
,
0xbd
,
0xfc
,
0xc9
,
0x83
,
0xeb
,
0x8c
,
0x0f
,
0x79
,
0x34
,
0xcd
,
0xf4
,
0xb5
,
0xca
,
0x89
,
0xab
,
0x2c
,
0xfc
,
0xc9
,
0x83
,
0xeb
,
0x8c
,
0x0f
,
0x78
,
0x34
,
0xc9
,
0xf4
,
0xb5
,
0xca
,
0x89
,
0xab
,
0x2c
,
0x79
,
0x79
,
0x07
,
0x3a
,
0x43
,
0x5a
,
0x25
,
0x05
,
0x95
,
0x39
,
0x2e
,
0x62
,
0x80
,
0x29
,
0x42
,
0xff
,
0x25
,
0x07
,
0x5a
,
0x03
,
0x5a
,
0x25
,
0x05
,
0x95
,
0x39
,
0x2e
,
0x62
,
0x80
,
0x29
,
0x42
,
0xff
,
0x25
,
0x68
,
0x68
,
0x4d
,
0x53
,
0xfe
,
0x21
,
0xa9
,
0x6e
,
0x69
,
0xeb
,
0x69
,
0x67
,
0x83
,
0x36
,
0x05
,
0x23
,
0x22
,
0x4c
,
0x52
,
0xfe
,
0x21
,
0xa9
,
0x6e
,
0x69
,
0xe7
,
0x69
,
0x67
,
0x83
,
0x36
,
0x05
,
0x23
,
0x22
,
0xff
,
0xff
,
0x0e
,
0x2c
,
0x0e
,
0x67
,
0x69
,
0xca
,
0xe3
,
0x4c
,
0xbd
,
0x80
,
0x73
,
0xe9
,
0x35
,
0x5d
,
0xf0
,
0x0e
,
0x2c
,
0x0e
,
0xa6
,
0x69
,
0xca
,
0xe3
,
0x4c
,
0xbd
,
0x80
,
0x33
,
0xe9
,
0x35
,
0x5d
,
0xf0
,
0x3b
,
0x5b
,
0x0f
,
0x9e
,
0x77
,
0x04
,
0x40
,
0x2e
,
0x90
,
0xec
,
0xbd
,
0xe9
,
0x28
,
0xcc
,
0xb8
,
0xa5
,
0x34
,
0x0f
,
0x9e
,
0x77
,
0x04
,
0x40
,
0x2e
,
0x90
,
0xec
,
0xbd
,
0xc9
,
0x30
,
0xcc
,
0xb8
,
0xa5
,
0x34
,
0xcf
,
0xcf
,
0x51
,
0xda
,
0x6d
,
0xc5
,
0x9d
,
0x14
,
0xe7
,
0xd9
,
0x0a
,
0x71
,
0x1c
,
0x0e
,
0xbf
,
0x5c
,
0x70
,
0x51
,
0xda
,
0x6d
,
0xc5
,
0x9d
,
0x14
,
0xe7
,
0xd9
,
0x0a
,
0x71
,
0x1c
,
0x0e
,
0xbf
,
0x5a
,
0x70
,
0x58
,
0xd8
,
0xbc
,
0x78
,
0x4f
,
0xce
,
0xe5
,
0x7f
,
0x3c
,
0x78
,
0xda
,
0xe1
,
0x92
,
0xac
,
0x9b
,
0xc4
,
0xbc
,
0xbf
,
0x7c
,
0x4f
,
0xce
,
0xe5
,
0x7f
,
0x3c
,
0x78
,
0xda
,
0xe1
,
0x92
,
0xac
,
0x9b
,
0xc4
,
0xbc
,
0xe4
,
0xe4
,
0x85
,
0xd5
,
0xaf
,
0x98
,
0xed
,
0x6d
,
0xcd
,
0x92
,
0xb7
,
0xe1
,
0x7a
,
0x92
,
0x85
,
0x63
,
0x3c
,
0x85
,
0xd5
,
0xaf
,
0x98
,
0xed
,
0x6d
,
0xf5
,
0x92
,
0xb7
,
0xe1
,
0x7a
,
0x92
,
0x85
,
0x23
,
0x3c
,
0x5a
,
0x5a
,
0x07
,
0x8c
,
0x81
,
0xa1
,
0xd2
,
0x06
,
0x21
,
0xbc
,
0x96
,
0x7c
,
0xb1
,
0xcd
,
0x0a
,
0x04
,
0xe5
,
0x07
,
0x8c
,
0x81
,
0xa1
,
0xd2
,
0x06
,
0x21
,
0xbc
,
0x96
,
0x7c
,
0xb1
,
0xc9
,
0x0a
,
0x04
,
0xe5
,
0xe2
,
0xe2
,
0x44
,
0x64
,
0xb4
,
0xd8
,
0xa1
,
0xc5
,
0x1c
,
0xf6
,
0x07
,
0xb0
,
0x88
,
0xde
,
0xc7
,
0x44
,
0xa6
,
0x44
,
0x64
,
0xb4
,
0xd8
,
0xa2
,
0xc5
,
0x1c
,
0xf6
,
0x7b
,
0xb0
,
0x88
,
0xde
,
0xc7
,
0x44
,
0xa6
,
0x7c
,
0x7c
,
0x4e
,
0x83
,
0x78
,
0xe7
,
0x28
,
0x89
,
0xb9
,
0x14
,
0x96
,
0xdc
,
0xae
,
0xcd
,
0x0c
,
0x0c
,
0xda
,
0x4e
,
0x83
,
0x78
,
0xe7
,
0x30
,
0x89
,
0xb9
,
0x14
,
0x96
,
0xdc
,
0xae
,
0xc9
,
0x0c
,
0x0c
,
0xda
,
0xe6
,
0xe6
,
0x29
,
0x2d
,
0xee
,
0x5b
,
0x69
,
0x32
,
0x9b
,
0x3e
,
0x51
,
0x7e
,
0xcc
,
0xf3
,
0x93
,
0x0c
,
0x35
,
0x29
,
0x2d
,
0xee
,
0x5b
,
0x69
,
0x32
,
0x9d
,
0x3c
,
0x51
,
0x7e
,
0xcc
,
0xf3
,
0x93
,
0x0c
,
0x35
,
0x95
,
0x95
,
0x9f
,
0x2e
,
0x8e
,
0x32
,
0x2a
,
0xfa
,
0x94
,
0xbf
,
0x0b
,
0x95
,
0x19
,
0x0c
,
0x4c
,
0xf0
,
0x6f
,
0x9f
,
0x2e
,
0x8f
,
0x32
,
0x2a
,
0xfa
,
0x94
,
0xbf
,
0x0b
,
0x95
,
0x19
,
0x0c
,
0x4c
,
0xf0
,
0x6f
,
0x97
,
0x97
,
0xcb
,
0xcf
,
0x25
,
0x3b
,
0x6c
,
0xc0
,
0x52
,
0x61
,
0x1d
,
0xcd
,
0xb3
,
0x89
,
0xba
,
0x04
,
0xe7
,
0xcb
,
0x2f
,
0x24
,
0x3b
,
0x6c
,
0xc1
,
0x52
,
0x61
,
0x1d
,
0xcd
,
0xb3
,
0x89
,
0xba
,
0x02
,
0xe7
,
0xa6
,
0xa6
,
0xe7
,
0x76
,
0xe6
,
0x86
,
0xfb
,
0xa2
,
0x5b
,
0xd5
,
0x18
,
0xd2
,
0x76
,
0x4b
,
0xd2
,
0x7e
,
0xec
,
0xe7
,
0xb6
,
0x66
,
0x86
,
0xfb
,
0xa2
,
0x5b
,
0xd5
,
0x18
,
0xd2
,
0xb6
,
0x4b
,
0xd2
,
0x7e
,
0xe2
,
0xc1
,
0xc1
,
0xba
,
0xe3
,
0x89
,
0xa6
,
0x69
,
0xaa
,
0xa2
,
0x7e
,
0xcb
,
0x89
,
0xfa
,
0x75
,
0xc7
,
0xe5
,
0x8d
,
0xa6
,
0xe3
,
0x89
,
0xa6
,
0x69
,
0xaa
,
0xa2
,
0x7e
,
0xc7
,
0x89
,
0xfa
,
0x4d
,
0xc7
,
0xe5
,
0x8d
,
0xfd
,
0xfd
,
0x79
,
0xd8
,
0xdf
,
0xb2
,
0xc2
,
0xbe
,
0x72
,
0x87
,
0x15
,
0x57
,
0xaf
,
0xb9
,
0x91
,
0x5f
,
0xb7
,
0x79
,
0xd8
,
0xdf
,
0xb2
,
0xc2
,
0xbe
,
0x72
,
0x87
,
0x15
,
0x57
,
0xaf
,
0xb9
,
0x91
,
0x3f
,
0x6f
,
0x4b
,
0x25
,
0x0f
,
0xab
,
0x9f
,
0x79
,
0x70
,
0x8d
,
0xf1
,
0x47
,
0x79
,
0xa5
,
0x40
,
0x29
,
0x22
,
0x3e
,
0x4e
,
0x1e
,
0x56
,
0x3f
,
0xf7
,
0xe0
,
0x1a
,
0xe3
,
0x8f
,
0xf2
,
0x4a
,
0x81
,
0x52
,
0x44
,
0x7c
,
0x92
,
0xcc
,
0xe6
,
0x7b
,
0x58
,
0xa4
,
0x1f
,
0x20
,
0xf3
,
0xc5
,
0x6d
,
0x1a
,
0xc2
,
0xce
,
0x7b
,
0x74
,
0xac
,
0x34
,
0xf6
,
0xb0
,
0x48
,
0x3f
,
0x40
,
0xe6
,
0x8b
,
0x5b
,
0x37
,
0x84
,
0x9d
,
0xf5
,
0xe8
,
0x58
,
0x69
,
0xb4
,
0xda
,
0x76
,
0xd3
,
0xe8
,
0x0e
,
0xac
,
0x31
,
0x2e
,
0xa6
,
0x16
,
0x23
,
0xd2
,
0xca
,
0x5f
,
0x84
,
0x66
,
0xe9
,
0xa6
,
0xd1
,
0x3d
,
0xd8
,
0x60
,
0x5c
,
0x4c
,
0x2c
,
0x46
,
0xa4
,
0x95
,
0xbf
,
0x0c
,
0xf5
,
0x68
,
0x34
,
0x92
,
0x6f
,
0x6a
,
0x4d
,
0x3a
,
0x43
,
0x9a
,
0xe0
,
0x2d
,
0xcc
,
0x11
,
0xce
,
0x21
,
0x24
,
0xb6
,
0x28
,
0xdf
,
0xd4
,
0x39
,
0xe9
,
0x0c
,
0x69
,
0x82
,
0xb7
,
0x30
,
0x47
,
0x38
,
0x87
,
0x90
,
0xd8
,
0xc2
,
0xf0
,
0x6f
,
0x9a
,
0xa7
,
0xd4
,
0xa9
,
0x86
,
0x0e
,
0x9a
,
0xca
,
0xb7
,
0x6e
,
0x3b
,
0x8a
,
0x47
,
0xfb
,
0xbf
,
0x69
,
0x9e
,
0x32
,
0x4f
,
0x35
,
0x74
,
0xd0
,
0x44
,
0xbe
,
0x75
,
0xbb
,
0x51
,
0x3c
,
0x3c
,
0x8c
,
0x51
,
0xcc
,
0xd3
,
0x9d
,
0xc9
,
0x88
,
0xfc
,
0x22
,
0x8a
,
0x47
,
0x6f
,
0x50
,
0x6f
,
0xa6
,
0xea
,
0x66
,
0x62
,
0x9e
,
0xee
,
0x8d
,
0x87
,
0xe4
,
0x17
,
0x51
,
0x3c
,
0x7c
,
0x83
,
0x7a
,
0x33
,
0x55
,
0x37
,
0x1b
,
0x03
,
0x43
,
0xf2
,
0x45
,
0xf1
,
0x68
,
0x07
,
0xdd
,
0x4f
,
0x15
,
0x4f
,
0x05
,
0xa2
,
0xc8
,
0x3e
,
0x78
,
0x18
,
0x92
,
0x2f
,
0x8a
,
0x87
,
0x7b
,
0xe8
,
0x7e
,
0xaa
,
0x78
,
0x2a
,
0x10
,
0x45
,
0xf6
,
0xc1
,
0xfb
,
0x9f
,
0x9d
,
0x7d
,
0x10
,
0x13
,
0xfc
,
0xc5
,
0x83
,
0xab
,
0xd6
,
0x95
,
0x64
,
0x85
,
0x39
,
0xc5
,
0x00
,
0xec
,
0xec
,
0x83
,
0x98
,
0xe0
,
0x2f
,
0x1e
,
0xac
,
0x5b
,
0x57
,
0x92
,
0x15
,
0x66
,
0x14
,
0x03
,
0x78
,
0x1e
,
0x7b
,
0x60
,
0x46
,
0x92
,
0x81
,
0xb1
,
0xf9
,
0x68
,
0xd6
,
0xf3
,
0xd1
,
0x72
,
0xf9
,
0xc8
,
0x2b
,
0x6c
,
0xdf
,
0x8c
,
0x24
,
0x03
,
0x63
,
0xf3
,
0x51
,
0x9f
,
0xcf
,
0x47
,
0xc3
,
0xe5
,
0x23
,
0xaf
,
0x48
,
0xd2
,
0xc3
,
0x68
,
0xc2
,
0x55
,
0x44
,
0x15
,
0x08
,
0x8c
,
0x38
,
0x59
,
0x9e
,
0xca
,
0xc0
,
0x51
,
0x75
,
0x8f
,
0xa2
,
0x31
,
0x57
,
0x11
,
0x55
,
0x20
,
0x30
,
0xe2
,
0x64
,
0x79
,
0x2a
,
0x03
,
0x47
,
0xd5
,
0x4d
,
0x93
,
0x81
,
0x0a
,
0x7e
,
0xe1
,
0xc1
,
0xc0
,
0x88
,
0x8e
,
0x8b
,
0xc5
,
0xb9
,
0x69
,
0x3d
,
0x20
,
0x03
,
0x06
,
0x2a
,
0xf8
,
0xa5
,
0x07
,
0x3d
,
0x23
,
0x3a
,
0x2e
,
0x17
,
0xe7
,
0xa6
,
0xf5
,
0x80
,
0xf4
,
0x0c
,
0xc3
,
0x32
,
0xd6
,
0x5e
,
0xe5
,
0xe5
,
0x5b
,
0xee
,
0xeb
,
0x31
,
0x7f
,
0x43
,
0xee
,
0xe3
,
0xf7
,
0x65
,
0xcb
,
0x58
,
0x7b
,
0x95
,
0x97
,
0xef
,
0xb8
,
0xaf
,
0xc7
,
0xec
,
0x0d
,
0xb9
,
0x8f
,
0xdf
,
0x97
,
0x55
,
0x95
,
0x8e
,
0xe2
,
0x21
,
0xc5
,
0xb7
,
0x62
,
0x92
,
0x92
,
0x5a
,
0x26
,
0x52
,
0x82
,
0xe4
,
0xa6
,
0x40
,
0x3a
,
0x8a
,
0x87
,
0x14
,
0xdf
,
0x89
,
0x49
,
0x4a
,
0x6a
,
0x99
,
0x48
,
0x09
,
0x92
,
0x9b
,
0x02
,
0x81
,
0xa0
,
0xef
,
0x4f
,
0xf0
,
0x18
,
0xfd
,
0x7e
,
0x10
,
0x10
,
0x7c
,
0xb7
,
0xa8
,
0x7f
,
0xf0
,
0x98
,
0x07
,
0xbe
,
0x3f
,
0xc6
,
0x63
,
0xf4
,
0xfb
,
0x41
,
0x40
,
0xf0
,
0xfd
,
0xa2
,
0xfe
,
0xc1
,
0x63
,
0x1e
,
0x44
,
0x91
,
0xc8
,
0xe6
,
0x44
,
0xc9
,
0x2d
,
0xe8
,
0xd0
,
0x16
,
0x59
,
0xf2
,
0x2d
,
0x6d
,
0xad
,
0x39
,
0xee
,
0x22
,
0x9b
,
0x11
,
0x25
,
0xb7
,
0xa0
,
0x45
,
0x5b
,
0x64
,
0xc9
,
0xb7
,
0xb4
,
0xb3
,
0xe1
,
0xb8
,
0x9b
,
0xa6
,
0xb8
,
0x60
,
0x8a
,
0x2a
,
0xf8
,
0xa8
,
0xf4
,
0x00
,
0xeb
,
0x0b
,
0xd4
,
0x03
,
0xac
,
0x4b
,
0x00
,
0xe2
,
0x82
,
0x29
,
0xaa
,
0xe0
,
0xa3
,
0xd2
,
0x03
,
0xac
,
0x2f
,
0x50
,
0x0f
,
0xb0
,
0x2e
,
0x01
,
0xbc
,
0xaf
,
0xf2
,
0x49
,
0xd7
,
0xc4
,
0xe5
,
0x12
,
0xa0
,
0x51
,
0x4f
,
0x9f
,
0x6b
,
0xe8
,
0x31
,
0x26
,
0x01
,
0xca
,
0x27
,
0x5d
,
0x13
,
0x97
,
0x4b
,
0x80
,
0xda
,
0x7c
,
0xfa
,
0x5c
,
0x43
,
0x8f
,
0x31
,
0x09
,
0xc8
,
0x19
,
0x37
,
0x96
,
0x78
,
0x2f
,
0x41
,
0x6b
,
0x1c
,
0x89
,
0xec
,
0xc2
,
0x7b
,
0x91
,
0x08
,
0x4d
,
0xa3
,
0xb8
,
0xb1
,
0xc4
,
0x7b
,
0x09
,
0x1a
,
0xa3
,
0x48
,
0x64
,
0x97
,
0xde
,
0x8b
,
0x44
,
0x68
,
0x1a
,
0xdd
,
0x9b
,
0x6f
,
0x29
,
0x76
,
0x8d
,
0x69
,
0x14
,
0x61
,
0xf0
,
0x53
,
0xed
,
0xf5
,
0xe8
,
0x41
,
0x5b
,
0xfb
,
0x7c
,
0x4b
,
0xb1
,
0xe7
,
0x98
,
0x46
,
0x11
,
0x06
,
0x3f
,
0xd3
,
0x5e
,
0x8f
,
0x1e
,
0xb4
,
0x73
,
0x18
,
0x61
,
0x14
,
0xef
,
0x87
,
0x53
,
0x23
,
0x33
,
0x7b
,
0xf3
,
0xbb
,
0xa5
,
0x86
,
0xce
,
0x20
,
0xd5
,
0xdd
,
0x46
,
0xf1
,
0x61
,
0x38
,
0x31
,
0x32
,
0xb3
,
0x37
,
0xbb
,
0x5b
,
0xaa
,
0xe9
,
0x0c
,
0x52
,
0xdd
,
0x2d
,
0x52
,
0xb3
,
0xb6
,
0x5b
,
0x6a
,
0xd9
,
0xdd
,
0x68
,
0x70
,
0x4f
,
0xd6
,
0xf3
,
0x05
,
0x1b
,
0xe4
,
0xae
,
0xd5
,
0xe7
,
0x76
,
0x4b
,
0x0d
,
0xbb
,
0x1b
,
0x0d
,
0xee
,
0xc9
,
0x7a
,
0xbe
,
0x60
,
0x83
,
0xdc
,
0xf5
,
0xb7
,
0xa0
,
0x1d
,
0x65
,
0x7c
,
0xa2
,
0xb3
,
0x86
,
0x25
,
0x8f
,
0xc9
,
0x30
,
0x93
,
0x64
,
0xc1
,
0x3f
,
0x16
,
0x34
,
0xa3
,
0x8c
,
0x8f
,
0x75
,
0xd6
,
0xb0
,
0xe4
,
0x31
,
0x19
,
0x66
,
0x92
,
0x2c
,
0xf8
,
0x67
,
0x9b
,
0xf2
,
0x1d
,
0xcc
,
0x73
,
0x8f
,
0x8a
,
0xc8
,
0x17
,
0xa0
,
0x8f
,
0x37
,
0x15
,
0xdd
,
0x90
,
0x47
,
0x5d
,
0xbe
,
0x83
,
0x79
,
0xee
,
0x51
,
0x11
,
0xf9
,
0x02
,
0x74
,
0xf1
,
0xa6
,
0xa2
,
0x1b
,
0xf2
,
0xa8
,
0xcd
,
0x9a
,
0x8d
,
0xc4
,
0x7e
,
0xb7
,
0x40
,
0x98
,
0x2d
,
0x98
,
0x8b
,
0x9e
,
0xf3
,
0x5e
,
0x16
,
0x5a
,
0x59
,
0xb3
,
0x91
,
0xd8
,
0xef
,
0x16
,
0x08
,
0xb3
,
0x05
,
0x73
,
0xd1
,
0x33
,
0xde
,
0xcb
,
0x42
,
0x6b
,
0x6b
,
0x59
,
0x5a
,
0x0b
,
0x60
,
0x79
,
0x9a
,
0xf2
,
0xe2
,
0x72
,
0xd9
,
0x29
,
0x5a
,
0x38
,
0x5b
,
0xb3
,
0x0d
,
0x4b
,
0x6b
,
0x01
,
0x2c
,
0x4f
,
0x52
,
0x5e
,
0x5c
,
0x2e
,
0x3b
,
0x45
,
0x0b
,
0x67
,
0x6b
,
0xb6
,
0x1d
,
0xb7
,
0x0f
,
0x95
,
0x27
,
0xa0
,
0x30
,
0x5c
,
0xb5
,
0xe1
,
0xfa
,
0x84
,
0x1c
,
0x47
,
0x11
,
0x95
,
0xe5
,
0xf6
,
0xa1
,
0xf2
,
0x04
,
0x14
,
0x86
,
0xab
,
0x36
,
0x5c
,
0x9f
,
0x90
,
0xe3
,
0x28
,
0xa2
,
0x72
,
0x13
,
0x74
,
0xe5
,
0x09
,
0x39
,
0x02
,
0x75
,
0x9f
,
0x9d
,
0xed
,
0x24
,
0xb3
,
0x38
,
0x13
,
0x54
,
0x41
,
0x82
,
0xb6
,
0x3c
,
0x21
,
0x47
,
0xa0
,
0xee
,
0xb3
,
0xf3
,
0xbd
,
0x64
,
0x1a
,
0x67
,
0x82
,
0x2a
,
0xe8
,
0xf7
,
0x59
,
0x0e
,
0xcb
,
0x35
,
0x39
,
0x21
,
0x1a
,
0x80
,
0xec
,
0x62
,
0x35
,
0x8c
,
0x95
,
0x53
,
0x76
,
0x2e
,
0xcb
,
0x61
,
0xb9
,
0x26
,
0x27
,
0x44
,
0x3d
,
0x90
,
0x5d
,
0xac
,
0x86
,
0xb1
,
0x72
,
0xca
,
0xce
,
0x26
,
0x67
,
0x4d
,
0x4b
,
0x34
,
0x4c
,
0xd2
,
0x20
,
0xb5
,
0xa2
,
0xa8
,
0xe6
,
0x43
,
0xbd
,
0x75
,
0x59
,
0xe5
,
0xac
,
0x69
,
0x89
,
0x86
,
0x49
,
0x1a
,
0xa4
,
0x56
,
0x14
,
0xd5
,
0x7c
,
0xa4
,
0xb7
,
0x2e
,
0x4b
,
0xea
,
0xd4
,
0x42
,
0x22
,
0xe7
,
0x0a
,
0x21
,
0x0f
,
0xe9
,
0xd3
,
0x21
,
0x16
,
0xce
,
0xbf
,
0x09
,
0x57
,
0x9d
,
0x5a
,
0x48
,
0xe4
,
0x5c
,
0x21
,
0xe4
,
0x21
,
0x5d
,
0x3a
,
0xc4
,
0xc2
,
0xf9
,
0x37
,
0x61
,
0x3d
,
0xe3
,
0x24
,
0xde
,
0xa1
,
0x36
,
0xff
,
0x50
,
0x33
,
0xb9
,
0x42
,
0x4c
,
0x96
,
0x17
,
0x82
,
0x6d
,
0xb8
,
0x4e
,
0xe2
,
0x3d
,
0x6a
,
0xf3
,
0x8f
,
0x34
,
0x93
,
0x2b
,
0xc4
,
0x64
,
0x79
,
0x21
,
0xd8
,
0x85
,
0xf5
,
0x7a
,
0xc0
,
0xc7
,
0xc7
,
0xaa
,
0xa3
,
0x3e
,
0xc8
,
0xc2
,
0x13
,
0x2e
,
0xfc
,
0x97
,
0x6d
,
0x47
,
0xd1
,
0x3e
,
0x1f
,
0x9d
,
0xa8
,
0x8e
,
0xba
,
0x9f
,
0x85
,
0xa7
,
0x5c
,
0xf8
,
0x2f
,
0xdb
,
0x8e
,
0xa2
,
0x03
,
0x81
,
0xe2
,
0x12
,
0x6a
,
0x3f
,
0x79
,
0x00
,
0x57
,
0xdc
,
0x25
,
0xcc
,
0xac
,
0x22
,
0x0b
,
0xd3
,
0x6c
,
0xc5
,
0x25
,
0xd4
,
0x7e
,
0xf2
,
0x00
,
0xd6
,
0xdc
,
0x25
,
0xcc
,
0xac
,
0x22
,
0x0b
,
0xd3
,
0x6c
,
0xdf
,
0xd7
,
0x74
,
0x7c
,
0x13
,
0x85
,
0xf6
,
0xe5
,
0x71
,
0x78
,
0xa4
,
0xca
,
0xda
,
0x3e
,
0x53
,
0x50
,
0xf0
,
0x74
,
0x7c
,
0x13
,
0x85
,
0xf6
,
0xe5
,
0x71
,
0x78
,
0xac
,
0xca
,
0xda
,
0x2e
,
0x53
,
0x50
,
0xf0
,
0x77
,
0x77
,
0x0f
,
0xae
,
0xb9
,
0xc7
,
0x91
,
0xfb
,
0xd6
,
0x97
,
0x5f
,
0xfd
,
0xfc
,
0x61
,
0x7e
,
0x19
,
0xda
,
0x0f
,
0xae
,
0xb9
,
0xc7
,
0x91
,
0xfb
,
0xce
,
0x2f
,
0xbf
,
0xba
,
0xf9
,
0xc3
,
0xfc
,
0x32
,
0x34
,
0x05
,
0x02
,
0x37
,
0x39
,
0x1d
,
0x46
,
0x99
,
0x7b
,
0xa2
,
0xb2
,
0x6a
,
0xaa
,
0x96
,
0x53
,
0x53
,
0xdd
,
0x00
,
0x6e
,
0x72
,
0x3a
,
0x8c
,
0x32
,
0xf7
,
0x44
,
0x65
,
0xd5
,
0x54
,
0x0d
,
0xa7
,
0xa6
,
0xba
,
0x01
,
0xc0
,
0xe0
,
0x67
,
0x7c
,
0x68
,
0xcf
,
0xd1
,
0x0a
,
0xcc
,
0xa7
,
0xee
,
0xd7
,
0x02
,
0x0e
,
0x6b
,
0x0f
,
0x92
,
0xcf
,
0xf9
,
0xc0
,
0x9e
,
0xa3
,
0x15
,
0x98
,
0xcf
,
0xdc
,
0xaf
,
0x05
,
0x1c
,
0x36
,
0x1e
,
0x24
,
0x83
,
0x61
,
0x38
,
0xd6
,
0xcc
,
0x14
,
0xd2
,
0xdd
,
0xd1
,
0x5c
,
0x7b
,
0x56
,
0x17
,
0x51
,
0xa5
,
0x09
,
0xcd
,
0x70
,
0xa4
,
0x99
,
0x29
,
0xa4
,
0xbb
,
0xa3
,
0xb9
,
0xf6
,
0xac
,
0x2e
,
0xa2
,
0x4a
,
0x13
,
0x9a
,
0x73
,
0x39
,
0x79
,
0xd3
,
0x5e
,
0x3c
,
0xe2
,
0x67
,
0x2a
,
0x7b
,
0x68
,
0x30
,
0xb8
,
0x0b
,
0x2b
,
0xb2
,
0xfc
,
0xf2
,
0xa6
,
0x83
,
0x78
,
0xc8
,
0xcf
,
0x55
,
0xf6
,
0xd0
,
0x60
,
0x70
,
0x17
,
0x56
,
0x64
,
0xf9
,
0x85
,
0x42
,
0x0e
,
0x2a
,
0x95
,
0x97
,
0xcf
,
0x11
,
0x1a
,
0xc6
,
0x1c
,
0x21
,
0x08
,
0xe0
,
0x8a
,
0xdc
,
0xb7
,
0x1c
,
0x54
,
0x2a
,
0x2f
,
0x9f
,
0x23
,
0xd4
,
0x8c
,
0x39
,
0x42
,
0x10
,
0xc0
,
0x9a
,
0xdc
,
0xb7
,
0x17
,
0x13
,
0xc6
,
0x43
,
0x3e
,
0xae
,
0xda
,
0x19
,
0x7c
,
0xa2
,
0xa6
,
0x44
,
0xc4
,
0xce
,
0x45
,
0xf5
,
0x7b
,
0xc6
,
0x03
,
0x3e
,
0xaa
,
0xda
,
0x19
,
0x7c
,
0xaa
,
0xa6
,
0x44
,
0xc4
,
0xce
,
0x65
,
0xf5
,
0x7b
,
0x76
,
0x76
,
0xae
,
0xeb
,
0xf7
,
0xec
,
0x1c
,
0xb5
,
0x25
,
0x45
,
0x84
,
0x5a
,
0xc3
,
0xec
,
0x2e
,
0x68
,
0x01
,
0xa1
,
0xeb
,
0xf7
,
0xec
,
0x02
,
0xb5
,
0x25
,
0x45
,
0x84
,
0xb9
,
0x86
,
0xd9
,
0x5f
,
0xd0
,
0x02
,
0xbe
,
0x5f
,
0x82
,
0x16
,
0xaa
,
0x6d
,
0xb0
,
0x44
,
0xf4
,
0xd7
,
0x15
,
0xbd
,
0x2d
,
0xd9
,
0xee
,
0x02
,
0x23
,
0x04
,
0x0d
,
0x54
,
0x5b
,
0x6f
,
0x89
,
0xe8
,
0xaf
,
0x2b
,
0x7a
,
0x5b
,
0xb2
,
0xfd
,
0x05
,
0x46
,
0x44
,
0x22
,
0x6a
,
0x45
,
0x89
,
0x6b
,
0x0a
,
0x9d
,
0xe2
,
0x78
,
0x57
,
0xa0
,
0xdd
,
0x05
,
0xa6
,
0x08
,
0xb7
,
0xd4
,
0x8a
,
0x12
,
0xd7
,
0x14
,
0x3a
,
0xc5
,
0xf1
,
0xae
,
0x40
,
0xfb
,
0x0b
,
0x4c
,
0x11
,
0xee
,
0x2e
,
0x17
,
0x95
,
0x12
,
0x82
,
0x9f
,
0x14
,
0x35
,
0xb0
,
0x65
,
0x19
,
0x25
,
0xde
,
0x6d
,
0xeb
,
0xbd
,
0xaa
,
0x2a
,
0x25
,
0x04
,
0x3f
,
0x2d
,
0x6a
,
0x60
,
0xcb
,
0x32
,
0x4a
,
0xbc
,
0xdb
,
0xd6
,
0x7b
,
0x35
,
0xd7
,
0x35
,
0x4d
,
0xa9
,
0x29
,
0x6c
,
0x5c
,
0xbc
,
0x27
,
0x7f
,
0xb7
,
0x3e
,
0xf1
,
0xe0
,
0xb9
,
0x2a
,
0x36
,
0x34
,
0xa5
,
0xa6
,
0xb0
,
0x76
,
0xf9
,
0x9e
,
0xfc
,
0xdd
,
0xfa
,
0xd4
,
0x83
,
0xe7
,
0xaa
,
0xd8
,
0x98
,
0xe6
,
0x76
,
0x86
,
0xb9
,
0xab
,
0x37
,
0x2e
,
0xe5
,
0xea
,
0x76
,
0x4b
,
0xd8
,
0xac
,
0x6f
,
0x09
,
0x5b
,
0xd9
,
0x19
,
0xe6
,
0xae
,
0x5e
,
0xbb
,
0x92
,
0xab
,
0xdb
,
0x2d
,
0x61
,
0x7d
,
0x7e
,
0x4b
,
0xd8
,
0x98
,
0x75
,
0x2d
,
0x61
,
0x7b
,
0x7e
,
0x4b
,
0xd8
,
0xb1
,
0x5a
,
0xc2
,
0xe0
,
0x23
,
0x78
,
0xb6
,
0x4a
,
0x24
,
0xd7
,
0x12
,
0x36
,
0x67
,
0xb7
,
0x84
,
0x2d
,
0xab
,
0x25
,
0x0c
,
0x3e
,
0x82
,
0x67
,
0xab
,
0x44
,
0x12
,
0xa1
,
0x4a
,
0x81
,
0x9b
,
0x96
,
0x6a
,
0x07
,
0x73
,
0x04
,
0x10
,
0xe5
,
0x72
,
0xa9
,
0x71
,
0xc1
,
0x86
,
0xaa
,
0x14
,
0xb8
,
0x69
,
0xa9
,
0xb6
,
0x37
,
0x43
,
0x00
,
0x51
,
0x2e
,
0x97
,
0x6a
,
0x97
,
0x6c
,
0xc8
,
0x5c
,
0xa9
,
0xbf
,
0xf1
,
0xc0
,
0x67
,
0xfc
,
0xd1
,
0xbb
,
0x33
,
0x9e
,
0x9e
,
0x23
,
0x99
,
0xca
,
0x71
,
0x95
,
0xfa
,
0x5b
,
0x0f
,
0x7c
,
0xc6
,
0x1f
,
0xbd
,
0x3b
,
0xe5
,
0xe9
,
0x05
,
0x92
,
0xa9
,
0x1c
,
0x67
,
0xf6
,
0xc8
,
0xb8
,
0xc8
,
0x1e
,
0x6e
,
0x4b
,
0x70
,
0x0d
,
0xda
,
0x43
,
0x4c
,
0x95
,
0x4a
,
0x5d
,
0x12
,
0x8f
,
0x8c
,
0x8b
,
0xec
,
0xe1
,
0xb6
,
0x04
,
0xd7
,
0xa0
,
0x39
,
0xc0
,
0x54
,
0xa9
,
0xd4
,
0x25
,
0x01
,
0x40
,
0x4d
,
0x8d
,
0xa2
,
0x94
,
0xcb
,
0xda
,
0x59
,
0x69
,
0x2a
,
0x47
,
0x18
,
0x4f
,
0x57
,
0xdb
,
0x7a
,
0xd4
,
0xd4
,
0x30
,
0x4a
,
0xb9
,
0xac
,
0x9d
,
0x95
,
0xa6
,
0x72
,
0x84
,
0xf1
,
0x74
,
0x35
,
0xad
,
0xa7
,
0xba
,
0xae
,
0x41
,
0x3b
,
0xa2
,
0x70
,
0x95
,
0x1d
,
0xb5
,
0x04
,
0x82
,
0x77
,
0xb1
,
0x5a
,
0x99
,
0x8e
,
0xeb
,
0x1a
,
0x34
,
0x23
,
0x0a
,
0x57
,
0xd9
,
0x51
,
0x4b
,
0x20
,
0x78
,
0x17
,
0xab
,
0x95
,
0xc9
,
0xe8
,
0xcf
,
0x5d
,
0x0e
,
0x5f
,
0xa7
,
0x27
,
0x48
,
0xfa
,
0x88
,
0xca
,
0xc4
,
0xb5
,
0x6e
,
0x54
,
0x50
,
0x07
,
0xc2
,
0xe5
,
0xf0
,
0x75
,
0x7a
,
0x82
,
0xa4
,
0x8f
,
0xa8
,
0x4c
,
0x3c
,
0xd7
,
0x8d
,
0x0a
,
0xea
,
0xe0
,
0xdf
,
0x37
,
0xfe
,
0x43
,
0xd9
,
0x51
,
0xd3
,
0x65
,
0xa1
,
0x4b
,
0x56
,
0x11
,
0x9d
,
0xc4
,
0xea
,
0xc9
,
0x87
,
0xc6
,
0x7f
,
0x28
,
0x7b
,
0x6a
,
0xba
,
0x2c
,
0x74
,
0xc9
,
0x2a
,
0xa2
,
0xd3
,
0x58
,
0x3d
,
0xd9
,
0xa6
,
0xdf
,
0x68
,
0x58
,
0x6a
,
0x9d
,
0xf7
,
0x43
,
0xd9
,
0x6d
,
0x2f
,
0xb3
,
0x1c
,
0x2e
,
0x7a
,
0xec
,
0xf4
,
0x1b
,
0x0d
,
0x4b
,
0xad
,
0xf3
,
0x61
,
0x28
,
0xbb
,
0xed
,
0x65
,
0x96
,
0xc3
,
0x45
,
0x8f
,
0x5d
,
0xa6
,
0x31
,
0x03
,
0x0c
,
0x7e
,
0x64
,
0xfc
,
0xef
,
0x21
,
0xcf
,
0x57
,
0x4d
,
0xc3
,
0x96
,
0xa5
,
0x55
,
0x37
,
0x66
,
0x80
,
0xc1
,
0x4f
,
0x8c
,
0xff
,
0x3d
,
0xe4
,
0xf9
,
0xaa
,
0x69
,
0xd8
,
0xb1
,
0xb4
,
0x6a
,
0xbb
,
0x33
,
0x71
,
0xca
,
0x88
,
0x5c
,
0xe3
,
0xb7
,
0xa1
,
0x79
,
0x34
,
0x16
,
0xca
,
0xa0
,
0xa5
,
0x7f
,
0x77
,
0x26
,
0x4e
,
0x19
,
0x91
,
0x6b
,
0xfc
,
0x36
,
0xd4
,
0x8f
,
0x47
,
0x42
,
0x19
,
0xb4
,
0xf4
,
0xcf
,
0x06
,
0x2c
,
0xf6
,
0x19
,
0x52
,
0x06
,
0x99
,
0x1c
,
0x35
,
0xd2
,
0x32
,
0x15
,
0x61
,
0x4f
,
0x70
,
0xf9
,
0x80
,
0xc5
,
0x3e
,
0x43
,
0xca
,
0x20
,
0x93
,
0xa3
,
0x46
,
0x5a
,
0xa6
,
0x22
,
0xec
,
0x09
,
0x2e
,
0xdf
,
0x26
,
0xac
,
0x46
,
0xc2
,
0x50
,
0xa7
,
0x7a
,
0x4d
,
0xba
,
0xcc
,
0x45
,
0x07
,
0xbf
,
0xf2
,
0xc0
,
0xdf
,
0x86
,
0xd5
,
0x48
,
0x18
,
0xea
,
0x54
,
0xaf
,
0x49
,
0x9b
,
0xb9
,
0xe8
,
0xe0
,
0xd7
,
0x1e
,
0xf8
,
0x7b
,
0xc1
,
0x53
,
0xde
,
0x10
,
0x82
,
0x67
,
0x87
,
0x69
,
0x18
,
0x8b
,
0x63
,
0x9e
,
0xa2
,
0x27
,
0x84
,
0x88
,
0x78
,
0xca
,
0x1b
,
0x42
,
0xf0
,
0xec
,
0x28
,
0x0d
,
0x63
,
0x71
,
0xc2
,
0x53
,
0xf4
,
0x84
,
0x10
,
0x11
,
0xb8
,
0x7f
,
0xc6
,
0x87
,
0xba
,
0xf4
,
0xce
,
0x11
,
0xf8
,
0x0c
,
0x12
,
0x70
,
0x70
,
0x3e
,
0x39
,
0x4a
,
0xf7
,
0xcf
,
0xf9
,
0x40
,
0x97
,
0xde
,
0x39
,
0x02
,
0x9f
,
0x41
,
0x02
,
0xfa
,
0x17
,
0xe3
,
0xe3
,
0x64
,
0xc6
,
0xca
,
0xad
,
0x4c
,
0x14
,
0xfa
,
0x4a
,
0x38
,
0xc9
,
0x1d
,
0xac
,
0xc9
,
0x14
,
0x84
,
0xf8
,
0x2c
,
0xa4
,
0xdc
,
0xca
,
0x44
,
0xa1
,
0xaf
,
0x84
,
0xe3
,
0xdc
,
0xc1
,
0xea
,
0x4c
,
0x41
,
0x88
,
0xcf
,
0x12
,
0x31
,
0x1e
,
0x25
,
0x05
,
0xa1
,
0x01
,
0x63
,
0x1d
,
0x81
,
0x3d
,
0x46
,
0xbf
,
0x83
,
0xff
,
0x76
,
0x8c
,
0xe3
,
0x51
,
0x52
,
0x10
,
0x1a
,
0x30
,
0xd6
,
0x11
,
0xd8
,
0x61
,
0xf4
,
0x3b
,
0xf8
,
0x6f
,
0xcb
,
0x18
,
0xc1
,
0xbd
,
0x52
,
0xc6
,
0x5d
,
0xec
,
0xd1
,
0x51
,
0x75
,
0x4a
,
0x19
,
0xcf
,
0x55
,
0x2b
,
0x56
,
0x52
,
0xdc
,
0x2b
,
0x65
,
0xdc
,
0xc5
,
0x1e
,
0x1d
,
0x55
,
0xa7
,
0x94
,
0xf1
,
0x5c
,
0xb5
,
0x62
,
0x25
,
0x35
,
0x53
,
0x4e
,
0x24
,
0xd8
,
0x7f
,
0x55
,
0x37
,
0x0b
,
0xe5
,
0x69
,
0x96
,
0xab
,
0x70
,
0x4c
,
0xd4
,
0x44
,
0xe5
,
0x44
,
0x82
,
0xfd
,
0x57
,
0x75
,
0xb3
,
0x50
,
0x9e
,
0x66
,
0xb9
,
0x0a
,
0xc7
,
0x44
,
0x4d
,
0xb4
,
0xeb
,
0x7f
,
0x0d
,
0xfa
,
0xa1
,
0xa9
,
0x15
,
0xd5
,
0xb2
,
0xeb
,
0x8c
,
0x4d
,
0x1a
,
0x13
,
0x7a
,
0x71
,
0xfe
,
0x37
,
0xa0
,
0x1b
,
0x9a
,
0x5a
,
0x51
,
0x2d
,
0xbb
,
0xce
,
0xd8
,
0xa4
,
0x31
,
0xa1
,
0x17
,
0xf7
,
0x77
,
0x81
,
0xd9
,
0xd4
,
0xf9
,
0xf6
,
0xef
,
0x44
,
0xd9
,
0xe9
,
0x28
,
0x0d
,
0x1f
,
0x93
,
0x70
,
0xee
,
0x17
,
0x98
,
0x4d
,
0x9d
,
0x6f
,
0xff
,
0x5e
,
0x94
,
0x9d
,
0x0d
,
0xd3
,
0xf0
,
0x31
,
0x09
,
0xe7
,
0x6e
,
0x76
,
0xbd
,
0x98
,
0x6f
,
0xd7
,
0x08
,
0xff
,
0x55
,
0xe8
,
0x66
,
0xfa
,
0xe2
,
0x4e
,
0xfd
,
0xc5
,
0x39
,
0xd7
,
0x8b
,
0xf9
,
0x76
,
0x8d
,
0xf0
,
0x5f
,
0x85
,
0x76
,
0xa6
,
0x2f
,
0x6e
,
0xcd
,
0xbf
,
0x38
,
0x27
,
0x21
,
0x6e
,
0x7a
,
0xac
,
0xaf
,
0x5b
,
0xac
,
0xbf
,
0x2e
,
0x27
,
0xf4
,
0xef
,
0xc3
,
0x8a
,
0x3e
,
0xe0
,
0xc4
,
0x4d
,
0x8f
,
0xf5
,
0x75
,
0x8b
,
0xf3
,
0xaf
,
0xcb
,
0x09
,
0xfd
,
0xfb
,
0xb0
,
0xa2
,
0x0f
,
0x38
,
0x30
,
0x21
,
0x8b
,
0x77
,
0x2d
,
0x2d
,
0xd9
,
0xf7
,
0x49
,
0x92
,
0xdd
,
0x05
,
0xe6
,
0x6c
,
0xf2
,
0xbf
,
0x4a
,
0xc8
,
0xe2
,
0x6d
,
0x4b
,
0x4b
,
0xf6
,
0x7d
,
0x92
,
0x64
,
0x7f
,
0x81
,
0x39
,
0x9b
,
0xfc
,
0xaf
,
0x0a
,
0x10
,
0xe7
,
0x73
,
0x55
,
0x2a
,
0x20
,
0xeb
,
0x26
,
0xa7
,
0xbb
,
0x0b
,
0xcc
,
0x20
,
0xf7
,
0xdf
,
0x03
,
0xc4
,
0xf9
,
0x5c
,
0x95
,
0x0a
,
0xc8
,
0x79
,
0x93
,
0xd3
,
0xfd
,
0x05
,
0x66
,
0x90
,
0xfb
,
0x6f
,
0x84
,
0xd5
,
0xd8
,
0x9e
,
0xb1
,
0xa8
,
0xf7
,
0xb4
,
0x66
,
0x0a
,
0xb3
,
0xbb
,
0xc0
,
0xdc
,
0x4d
,
0xfe
,
0xc2
,
0x6a
,
0x6c
,
0xcf
,
0x58
,
0xd4
,
0x7b
,
0x3a
,
0x67
,
0x0a
,
0xb3
,
0xbf
,
0xc0
,
0xdc
,
0x4d
,
0xfe
,
0x36
,
0xac
,
0x0a
,
0x9d
,
0x6c
,
0xd4
,
0x39
,
0xf2
,
0x9d
,
0x35
,
0xdb
,
0x3b
,
0x63
,
0x15
,
0xcf
,
0x70
,
0x2e
,
0xac
,
0x0a
,
0x9d
,
0x6c
,
0xd4
,
0x39
,
0xf2
,
0x9d
,
0x35
,
0xdb
,
0x3b
,
0x63
,
0x15
,
0xcf
,
0x70
,
0x36
,
0xf8
,
0x6f
,
0x83
,
0x3f
,
0x2c
,
0x85
,
0x84
,
0x7a
,
0x7f
,
0xb5
,
0x40
,
0xe5
,
0x98
,
0xd9
,
0x5d
,
0x36
,
0xf8
,
0x6f
,
0x83
,
0x3f
,
0x28
,
0x85
,
0x84
,
0x7a
,
0x7f
,
0xb5
,
0x40
,
0xe5
,
0x98
,
0xd9
,
0x5f
,
0x60
,
0x15
,
0xdb
,
0xfc
,
0x6f
,
0x40
,
0x7f
,
0x6a
,
0xb6
,
0x56
,
0x83
,
0x7e
,
0xa9
,
0x4d
,
0x33
,
0x07
,
0x60
,
0x15
,
0xdb
,
0xfc
,
0x6f
,
0x41
,
0x77
,
0x62
,
0xb6
,
0x56
,
0xbd
,
0x6e
,
0xa9
,
0x4d
,
0x33
,
0x07
,
0x18
,
0xe8
,
0x07
,
0x16
,
0xbd
,
0xff
,
0x3e
,
0xac
,
0x1b
,
0x7f
,
0x1c
,
0x3a
,
0x2a
,
0xa0
,
0x12
,
0xf8
,
0x18
,
0xe8
,
0x07
,
0x16
,
0xbd
,
0xff
,
0x3e
,
0x6c
,
0x1a
,
0x7f
,
0x1c
,
0x3a
,
0x2a
,
0xa0
,
0x12
,
0xf8
,
0x02
,
0x35
,
0xd7
,
0x6c
,
0x37
,
0x8a
,
0x99
,
0x36
,
0x16
,
0x33
,
0x45
,
0xed
,
0xf0
,
0xb1
,
0x07
,
0x6b
,
0x12
,
0x35
,
0xcf
,
0xd9
,
0x6e
,
0x14
,
0x33
,
0x4d
,
0x2c
,
0x66
,
0x8a
,
0xda
,
0xe1
,
0x13
,
0x0f
,
0x36
,
0x46
,
0xbb
,
0x6b
,
0xc4
,
0xd6
,
0xbc
,
0xd9
,
0x99
,
0x51
,
0xb5
,
0x5e
,
0x2e
,
0x49
,
0xbd
,
0x62
,
0xcd
,
0x8c
,
0x76
,
0xd7
,
0x88
,
0xad
,
0x59
,
0xb3
,
0x33
,
0xa3
,
0x6a
,
0xbd
,
0x5a
,
0x92
,
0x7a
,
0xc5
,
0x9a
,
0xce
,
0x4a
,
0x91
,
0x6c
,
0xfd
,
0x1b
,
0x2a
,
0x1f
,
0xca
,
0xbb
,
0xee
,
0xf4
,
0xac
,
0x7e
,
0x53
,
0xfe
,
0x9d
,
0x95
,
0x22
,
0xd9
,
0xfa
,
0x37
,
0x54
,
0x3e
,
0x94
,
0x77
,
0xdd
,
0xe9
,
0xd9
,
0xfc
,
0x4d
,
0xf9
,
0x58
,
0xbe
,
0x6d
,
0x0d
,
0xff
,
0x8b
,
0x80
,
0xff
,
0x2c
,
0xb9
,
0x35
,
0xf8
,
0x71
,
0x0b
,
0x5f
,
0x36
,
0x63
,
0xf9
,
0xb6
,
0x35
,
0xfc
,
0x2f
,
0x02
,
0xfe
,
0xf3
,
0xe4
,
0xd6
,
0xe0
,
0xe3
,
0x26
,
0xbe
,
0x6c
,
0xfb
,
0x34
,
0x2a
,
0x63
,
0xec
,
0x3a
,
0xc4
,
0x2b
,
0xd5
,
0x21
,
0x1b
,
0xb0
,
0x44
,
0x90
,
0x54
,
0xa3
,
0xf6
,
0x69
,
0x54
,
0xc6
,
0xd8
,
0x75
,
0x88
,
0x57
,
0xaa
,
0x43
,
0xb6
,
0x60
,
0x89
,
0x20
,
0xa9
,
0x46
,
0x52
,
0xba
,
0x89
,
0xf2
,
0x5f
,
0x84
,
0x15
,
0xac
,
0x3d
,
0x0e
,
0xc2
,
0x09
,
0x57
,
0x44
,
0xf2
,
0x79
,
0xa5
,
0x74
,
0x13
,
0xe5
,
0xbf
,
0x08
,
0x2b
,
0x58
,
0x7b
,
0xf4
,
0xc3
,
0x31
,
0x57
,
0x44
,
0xf2
,
0x79
,
0x76
,
0xb0
,
0x45
,
0x61
,
0xda
,
0xaa
,
0x6e
,
0x2d
,
0xdb
,
0x6e
,
0x43
,
0x5e
,
0x34
,
0x7d
,
0x9d
,
0xba
,
0x76
,
0xb0
,
0x45
,
0x61
,
0xda
,
0xa8
,
0x6e
,
0x2d
,
0x9b
,
0x6e
,
0x43
,
0x5e
,
0x34
,
0x7d
,
0xad
,
0x79
,
0xa6
,
0x6f
,
0xb1
,
0xa6
,
0xe9
,
0xeb
,
0x3a
,
0x4d
,
0x9f
,
0xd5
,
0x8c
,
0xf6
,
0xdc
,
0x66
,
0xd4
,
0x68
,
0x4d
,
0xdf
,
0xe2
,
0x9c
,
0xa6
,
0xaf
,
0xed
,
0x34
,
0x7d
,
0x56
,
0x33
,
0xda
,
0x71
,
0x9b
,
0x51
,
0xa3
,
0x09
,
0xe1
,
0x82
,
0x96
,
0x70
,
0xe9
,
0x32
,
0x2d
,
0xe1
,
0x72
,
0x45
,
0x4b
,
0x58
,
0x6a
,
0xd8
,
0xfb
,
0x25
,
0x84
,
0x4b
,
0x5a
,
0xc2
,
0xa5
,
0xab
,
0xb4
,
0x84
,
0xcb
,
0x15
,
0x2d
,
0x61
,
0xa9
,
0x61
,
0xef
,
0x97
,
0x6c
,
0xd8
,
0x57
,
0xaa
,
0x1b
,
0xf6
,
0x4d
,
0x58
,
0xa5
,
0xbf
,
0x51
,
0xef
,
0x17
,
0xbd
,
0xd1
,
0x5e
,
0xb1
,
0x61
,
0x5f
,
0xa9
,
0x6e
,
0xd8
,
0xb7
,
0x61
,
0x95
,
0xfe
,
0x46
,
0xbd
,
0x5f
,
0xf4
,
0x46
,
0xaa
,
0xa4
,
0x74
,
0xd0
,
0xc1
,
0x0f
,
0xca
,
0xb1
,
0xc1
,
0xf8
,
0x30
,
0x49
,
0x47
,
0x9f
,
0x57
,
0x6c
,
0xab
,
0x92
,
0xd2
,
0x41
,
0xfb
,
0xaf
,
0xc1
,
0x75
,
0x32
,
0x5b
,
0xdf
,
0x0e
,
0x2c
,
0xd1
,
0x5b
,
0x23
,
0x04
,
0x5f
,
0x80
,
0xa5
,
0x7c
,
0xf9
,
0xf0
,
0x8c
,
0x9e
,
0xcd
,
0xb3
,
0x7c
,
0x28
,
0x81
,
0xcf
,
0x26
,
0x73
,
0x55
,
0x2f
,
0xfa
,
0x77
,
0x61
,
0xc3
,
0x5d
,
0x50
,
0x56
,
0x5e
,
0xa7
,
0x6d
,
0x33
,
0x56
,
0xf1
,
0x41
,
0x72
,
0x94
,
0x5a
,
0xcc
,
0x85
,
0x0f
,
0xd1
,
0x0f
,
0xdc
,
0xf1
,
0xc3
,
0x65
,
0xfe
,
0xe2
,
0x0e
,
0x36
,
0xb2
,
0x7f
,
0x69
,
0x9b
,
0x2f
,
0x6f
,
0xab
,
0x5c
,
0x0c
,
0x7e
,
0x54
,
0x8e
,
0x5f
,
0xc6
,
0x07
,
0x7e
,
0xdf
,
0x80
,
0xab
,
0xd6
,
0x50
,
0xf6
,
0xff
,
0xcb
,
0xa3
,
0x7b
,
0x9f
,
0xd5
,
0xa3
,
0x7b
,
0x86
,
0x49
,
0x3a
,
0xfc
,
0xa2
,
0xe2
,
0x37
,
0xf8
,
0x12
,
0x2c
,
0xe5
,
0xcb
,
0x47
,
0xe7
,
0xf4
,
0xb4
,
0x9f
,
0x47
,
0x57
,
0xd8
,
0xbf
,
0x57
,
0x6d
,
0xff
,
0xb7
,
0xe0
,
0x29
,
0x4b
,
0x59
,
0xa4
,
0x77
,
0x4c
,
0x68
,
0xe7
,
0x83
,
0x13
,
0x7c
,
0xda
,
0x09
,
0x92
,
0xe3
,
0xde
,
0x62
,
0x76
,
0x7d
,
0x84
,
0xbe
,
0xea
,
0x8e
,
0x1d
,
0xe2
,
0xdb
,
0x1d
,
0x45
,
0x95
,
0x14
,
0xcb
,
0x14
,
0x9d
,
0x4c
,
0x4c
,
0xae
,
0xfd
,
0x50
,
0x86
,
0x48
,
0xae
,
0xf2
,
0x37
,
0x7c
,
0xf0
,
0xfb
,
0x1a
,
0xac
,
0x5b
,
0x83
,
0xe3
,
0xff
,
0xaf
,
0xa8
,
0xeb
,
0x6a
,
0xeb
,
0x95
,
0x46
,
0x6b
,
0xd6
,
0x47
,
0x41
,
0x7f
,
0x6d
,
0xc0
,
0x4a
,
0x51
,
0x2f
,
0xe1
,
0x23
,
0x7c
,
0xde
,
0xa8
,
0xeb
,
0x18
,
0x51
,
0x57
,
0xe1
,
0xa3
,
0x9d
,
0x4a
,
0x1f
,
0x0d
,
0xde
,
0x82
,
0xa7
,
0x84
,
0xee
,
0x88
,
0x5d
,
0xbf
,
0x76
,
0x47
,
0xfc
,
0x4d
,
0x29
,
0x3f
,
0xd1
,
0xad
,
0x40
,
0x96
,
0xa0
,
0x2c
,
0x65
,
0x91
,
0xde
,
0x31
,
0xe9
,
0xb6
,
0x88
,
0x6f
,
0x77
,
0x5c
,
0x56
,
0x52
,
0x2c
,
0x53
,
0x74
,
0x91
,
0xa3
,
0xbc
,
0x2e
,
0x20
,
0xf3
,
0x74
,
0x99
,
0x81
,
0x31
,
0x7c
,
0xaf
,
0x65
,
0xfa
,
0x9e
,
0x51
,
0x32
,
0x79
,
0xba
,
0xf6
,
0x43
,
0x19
,
0xaa
,
0xad
,
0x57
,
0x1a
,
0xff
,
0x59
,
0x1f
,
0x2e
,
0xfd
,
0xb5
,
0xe2
,
0xb5
,
0xad
,
0x12
,
0xcf
,
0x87
,
0x16
,
0xc7
,
0x1a
,
0x42
,
0xda
,
0x85
,
0x7e
,
0x53
,
0x5b
,
0x22
,
0x06
,
0x2b
,
0x45
,
0x4d
,
0x87
,
0x0f
,
0x25
,
0xba
,
0xe3
,
0x49
,
0x9a
,
0x8c
,
0xb5
,
0x3b
,
0xe2
,
0x6f
,
0x6b
,
0x45
,
0xf9
,
0xd7
,
0x9a
,
0x82
,
0x50
,
0x20
,
0x29
,
0xf8
,
0xf9
,
0x94
,
0x93
,
0x3d
,
0xfa
,
0xac
,
0x7a
,
0x96
,
0x12
,
0xdd
,
0xae
,
0x64
,
0x09
,
0x1a
,
0x39
,
0xca
,
0x6b
,
0x17
,
0x32
,
0x4f
,
0x9b
,
0x19
,
0x40
,
0x18
,
0xe6
,
0x07
,
0xcb
,
0xfc
,
0xf4
,
0xe9
,
0x02
,
0xba
,
0x0d
,
0xea
,
0x52
,
0x59
,
0xea
,
0x3a
,
0x18
,
0xc3
,
0xf7
,
0x1a
,
0xa6
,
0xef
,
0x19
,
0x65
,
0x68
,
0xd3
,
0x2a
,
0x43
,
0x7d
,
0x68
,
0x70
,
0xac
,
0x51
,
0x94
,
0xf0
,
0xf4
,
0xa7
,
0x7c
,
0x98
,
0x86
,
0x8a
,
0x6a
,
0x4d
,
0xce
,
0x3a
,
0x0a
,
0x0c
,
0x26
,
0x73
,
0xa4
,
0x5d
,
0xe8
,
0x37
,
0xb5
,
0x4e
,
0xb2
,
0x9e
,
0x95
,
0x7f
,
0xff
,
0x29
,
0x08
,
0x05
,
0x92
,
0x2a
,
0x31
,
0x1b
,
0x0e
,
0xb9
,
0x10
,
0x83
,
0xa7
,
0x49
,
0x74
,
0x0d
,
0x06
,
0x7f
,
0xf3
,
0xe4
,
0x28
,
0x82
,
0x5f
,
0x4c
,
0x38
,
0xd9
,
0xa3
,
0xcb
,
0x0a
,
0x84
,
0x61
,
0x7e
,
0xb0
,
0xcc
,
0x4f
,
0x9f
,
0x57
,
0x99
,
0x26
,
0x1b
,
0xf7
,
0x8e
,
0x28
,
0x53
,
0xcc
,
0x1d
,
0x7a
,
0x9a
,
0x63
,
0xcb
,
0x86
,
0xf3
,
0xe9
,
0xa0
,
0xdb
,
0xa0
,
0x2e
,
0x95
,
0xa5
,
0xae
,
0x13
,
0x45
,
0x09
,
0x4f
,
0x1f
,
0x0e
,
0x84
,
0x69
,
0xa8
,
0xd1
,
0x45
,
0x23
,
0xcf
,
0x17
,
0x61
,
0x65
,
0x1a
,
0xe2
,
0x3b
,
0xb5
,
0x6f
,
0x0e
,
0x3e
,
0x97
,
0x99
,
0xa8
,
0x36
,
0xe4
,
0x3c
,
0xa6
,
0xc0
,
0x60
,
0x32
,
0x15
,
0xd3
,
0xc1
,
0x80
,
0x0b
,
0xd1
,
0x7b
,
0x9a
,
0x83
,
0xbd
,
0x60
,
0xe8
,
0xff
,
0x02
,
0x34
,
0xb3
,
0x33
,
0xf9
,
0x89
,
0xce
,
0xd2
,
0x96
,
0xaf
,
0x3c
,
0x44
,
0xd7
,
0x60
,
0xf0
,
0x37
,
0x4f
,
0x8e
,
0xbb
,
0x69
,
0xfa
,
0x72
,
0xef
,
0x98
,
0xb2
,
0xd9
,
0xcc
,
0xef
,
0xb0
,
0xf8
,
0x4e
,
0x8d
,
0xe1
,
0x72
,
0xf0
,
0x67
,
0xf5
,
0x41
,
0x83
,
0x29
,
0x14
,
0x75
,
0x50
,
0xc1
,
0xac
,
0x39
,
0x5a
,
0xad
,
0x39
,
0x9f
,
0x47
,
0x5d
,
0x36
,
0x96
,
0x7d
,
0x11
,
0x56
,
0x26
,
0x21
,
0x97
,
0x15
,
0xac
,
0xf7
,
0xc4
,
0x82
,
0xf5
,
0x3e
,
0xa5
,
0x60
,
0x57
,
0x0a
,
0xc1
,
0x7a
,
0x52
,
0x88
,
0xbe
,
0xa5
,
0x87
,
0xe6
,
0x70
,
0x76
,
0x99
,
0x39
,
0xd8
,
0x4b
,
0xfe
,
0x98
,
0x78
,
0x01
,
0xea
,
0xd9
,
0x44
,
0xf6
,
0x69
,
0xdb
,
0x63
,
0x71
,
0x10
,
0x9d
,
0xc4
,
0x07
,
0xb3
,
0x89
,
0xfe
,
0x38
,
0x6b
,
0x9e
,
0xb9
,
0xfc
,
0x8c
,
0x68
,
0x69
,
0xc7
,
0x57
,
0x9e
,
0x77
,
0x54
,
0x7c
,
0x4b
,
0xc7
,
0x70
,
0x39
,
0xf8
,
0x10
,
0x79
,
0xbb
,
0xd7
,
0x30
,
0x3f
,
0xf9
,
0xf0
,
0xa1
,
0x35
,
0x11
,
0x27
,
0xb2
,
0x07
,
0x5c
,
0x66
,
0xb3
,
0xfa
,
0xe8
,
0xc2
,
0x14
,
0x8a
,
0xba
,
0xbc
,
0xab
,
0x0a
,
0xd6
,
0x79
,
0x62
,
0xc1
,
0x3a
,
0x9f
,
0xf4
,
0x1b
,
0x29
,
0xb1
,
0x79
,
0x14
,
0x83
,
0x16
,
0x21
,
0x25
,
0x10
,
0x7c
,
0x0f
,
0x9e
,
0xa9
,
0xbc
,
0x51
,
0xb0
,
0xb5
,
0x42
,
0xb0
,
0x8e
,
0x14
,
0x22
,
0x91
,
0xbd
,
0xe4
,
0xee
,
0x48
,
0xf4
,
0xa3
,
0xd3
,
0xf0
,
0xe0
,
0x34
,
0x79
,
0xfc
,
0x04
,
0x97
,
0xf6
,
0xe4
,
0xa5
,
0xc1
,
0x91
,
0x9e
,
0x6b
,
0xeb
,
0xe3
,
0xb8
,
0x3f
,
0x1d
,
0xeb
,
0x0f
,
0xc8
,
0x66
,
0x09
,
0x91
,
0xb7
,
0xa4
,
0x35
,
0xf3
,
0xb3
,
0x14
,
0x1f
,
0xc9
,
0x22
,
0xaf
,
0x41
,
0x2b
,
0x2a
,
0x7a
,
0xe4
,
0x0d
,
0x6b
,
0xac
,
0x5d
,
0xc1
,
0x07
,
0x23
,
0x6a
,
0x1a
,
0x63
,
0x71
,
0x2a
,
0xfb
,
0xd4
,
0x65
,
0x46
,
0xbf
,
0x91
,
0x12
,
0x1b
,
0x5c
,
0xd1
,
0x6b
,
0x10
,
0xd9
,
0x60
,
0x4d
,
0xa3
,
0xa1
,
0xbe
,
0x56
,
0x41
,
0x01
,
0x83
,
0x95
,
0x07
,
0x3c
,
0x1c
,
0xf1
,
0xf4
,
0x52
,
0x02
,
0xc1
,
0x0f
,
0xe0
,
0x99
,
0xca
,
0x0b
,
0xfb
,
0x67
,
0xc9
,
0xe3
,
0x27
,
0xb8
,
0xb4
,
0x23
,
0xe0
,
0x3c
,
0x1e
,
0xea
,
0x09
,
0xd8
,
0xde
,
0x3d
,
0x3d
,
0x75
,
0xd9
,
0xbb
,
0x87
,
0x91
,
0x70
,
0x14
,
0x2f
,
0x0d
,
0x8e
,
0xf5
,
0xec
,
0x5d
,
0x1f
,
0x4f
,
0x16
,
0x79
,
0x0d
,
0x1a
,
0x51
,
0xd1
,
0xc7
,
0x6f
,
0x0a
,
0xbe
,
0x37
,
0x3a
,
0x53
,
0x89
,
0x5c
,
0x83
,
0x78
,
0x66
,
0x72
,
0x7c
,
0x2c
,
0xb8
,
0x4e
,
0xde
,
0x59
,
0xa3
,
0xf7
,
0x0a
,
0x3e
,
0x18
,
0x51
,
0xcb
,
0x26
,
0x70
,
0x12
,
0x0d
,
0xf4
,
0xb5
,
0x0a
,
0x0a
,
0x0a
,
0x0a
,
0x7e
,
0xee
,
0x41
,
0x1f
,
0xf9
,
0x79
,
0xb8
,
0xf5
,
0xf0
,
0x60
,
0x76
,
0xb4
,
0x2f
,
0x74
,
0x18
,
0xac
,
0x3c
,
0xe0
,
0xe1
,
0x90
,
0xa7
,
0xfd
,
0x8b
,
0x78
,
0xa0
,
0xa7
,
0x74
,
0x07
,
0xf7
,
0xf4
,
0x39
,
0xe9
,
0xe9
,
0x72
,
0xd2
,
0x7f
,
0x05
,
0xba
,
0x43
,
0x35
,
0x99
,
0x55
,
0xe5
,
0x7c
,
0x85
,
0x67
,
0x64
,
0xe8
,
0xe0
,
0x1e
,
0x46
,
0xc2
,
0x71
,
0x28
,
0xf8
,
0xc1
,
0xf0
,
0x5c
,
0x25
,
0x72
,
0x0d
,
0xe2
,
0x62
,
0x2f
,
0xa2
,
0xa9
,
0xfc
,
0x3b
,
0xb0
,
0x28
,
0xce
,
0xe3
,
0xe1
,
0xbe
,
0x38
,
0x71
,
0xe6
,
0x63
,
0x99
,
0xc9
,
0xc9
,
0x89
,
0xe0
,
0x3a
,
0x79
,
0x2b
,
0x28
,
0xf8
,
0x85
,
0x07
,
0x5d
,
0xe4
,
0xe7
,
0xe1
,
0x36
,
0xf7
,
0xbb
,
0x0b
,
0x4c
,
0xd3
,
0x15
,
0x35
,
0xeb
,
0xfb
,
0xb0
,
0x72
,
0x7f
,
0x2c
,
0x87
,
0x15
,
0xce
,
0xc3
,
0xfe
,
0xf4
,
0xf8
,
0x50
,
0xe8
,
0x92
,
0xd7
,
0xd3
,
0x25
,
0xaf
,
0xff
,
0x0a
,
0xb4
,
0x07
,
0x6a
,
0xa6
,
0xbf
,
0x0e
,
0xdd
,
0x48
,
0xc8
,
0x9d
,
0xc4
,
0x55
,
0x97
,
0xe5
,
0xb0
,
0xff
,
0x32
,
0x74
,
0x6a
,
0x7a
,
0xac
,
0x5a
,
0x8e
,
0x0a
,
0xcf
,
0xc4
,
0x7e
,
0x49
,
0x53
,
0xf9
,
0x77
,
0x60
,
0x51
,
0x5c
,
0xc6
,
0x72
,
0xa5
,
0x51
,
0x73
,
0x11
,
0x53
,
0x44
,
0xc1
,
0xf3
,
0xd0
,
0xdb
,
0xd6
,
0xff
,
0x83
,
0xa2
,
0xc4
,
0x83
,
0x43
,
0x71
,
0xea
,
0xcc
,
0xf0
,
0x6c
,
0xee
,
0xf7
,
0x17
,
0x98
,
0xa6
,
0x2b
,
0xea
,
0xea
,
0x4f
,
0x7e
,
0xc0
,
0xcf
,
0x95
,
0xf2
,
0xf0
,
0xe7
,
0xd6
,
0xeb
,
0xd0
,
0xcb
,
0x3f
,
0x16
,
0xf5
,
0x6f
,
0xf7
,
0x61
,
0xe5
,
0xfe
,
0x48
,
0x0e
,
0x54
,
0xd4
,
0xff
,
0x0e
,
0x9b
,
0xd0
,
0x8e
,
0x84
,
0xdc
,
0x49
,
0x42
,
0x67
,
0x4f
,
0xe0
,
0x09
,
0x7e
,
0x3f
,
0x7f
,
0x02
,
0x1e
,
0xbd
,
0x13
,
0x8d
,
0xd7
,
0xaf
,
0x2a
,
0x5c
,
0xb5
,
0x59
,
0x0e
,
0xfb
,
0x2f
,
0x43
,
0x6b
,
0x24
,
0x57
,
0x6a
,
0x73
,
0x2e
,
0x62
,
0x8a
,
0x28
,
0x70
,
0x4f
,
0xec
,
0x84
,
0xb3
,
0x93
,
0xd3
,
0xec
,
0xbd
,
0x69
,
0xb0
,
0x70
,
0xd4
,
0xa1
,
0x2f
,
0x44
,
0x78
,
0x1e
,
0x3a
,
0xbb
,
0xfa
,
0xbf
,
0x5a
,
0xf4
,
0xc9
,
0x0f
,
0xf8
,
0x85
,
0x52
,
0x1e
,
0xfe
,
0xdc
,
0x5f
,
0xfd
,
0x5f
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x32
,
0x10
,
0x4a
,
0x73
,
0x6e
,
0x2a
,
0x00
,
0x00
,
0x79
,
0x1d
,
0x3a
,
0xf9
,
0x07
,
0xad
,
0xfe
,
0x4d
,
0x68
,
0x1d
,
0x08
,
0x3c
,
0xc1
,
0xef
,
0xe6
,
0x4f
,
0xc0
,
0xa3
,
0x77
,
0xa2
,
0xd1
,
0xe6
,
0xba
,
0x02
,
0x0f
,
0xc4
,
0x5e
,
0x38
,
0x3d
,
0x3d
,
0xcb
,
0xde
,
0x9b
,
0x04
,
0x0b
,
0xc7
,
0x2d
,
0xfa
,
0x8a
,
0xf5
,
0xd5
,
0xff
,
0x05
,
0x00
,
0x00
,
0xff
,
0xff
,
0xd1
,
0x8e
,
0x2e
,
0x5e
,
0x12
,
0x2b
,
0x00
,
0x00
,
}
}
// Reference imports to suppress errors if they are not otherwise used.
// Reference imports to suppress errors if they are not otherwise used.
...
...
plugin/dapp/paracross/types/type.go
View file @
0179fec6
...
@@ -116,11 +116,9 @@ func (p *ParacrossType) GetLogMap() map[int64]*types.LogInfo {
...
@@ -116,11 +116,9 @@ func (p *ParacrossType) GetLogMap() map[int64]*types.LogInfo {
TyLogParaStageGroupUpdate
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptSelfConsStagesUpdate
{}),
Name
:
"LogParaSelfConfStagesUpdate"
},
TyLogParaStageGroupUpdate
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptSelfConsStagesUpdate
{}),
Name
:
"LogParaSelfConfStagesUpdate"
},
TyLogParaBindMinerAddr
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptParaBindMinerInfo
{}),
Name
:
"TyLogParaBindMinerAddrUpdate"
},
TyLogParaBindMinerAddr
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptParaBindMinerInfo
{}),
Name
:
"TyLogParaBindMinerAddrUpdate"
},
TyLogParaBindMinerNode
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptParaNodeBindListUpdate
{}),
Name
:
"TyLogParaBindNodeListUpdate"
},
TyLogParaBindMinerNode
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptParaNodeBindListUpdate
{}),
Name
:
"TyLogParaBindNodeListUpdate"
},
TyLogParaSupervisionNodeGroupConfig
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptParaNodeGroupConfig
{}),
Name
:
"LogParaSupervisionNodeGroupConfig"
},
TyLogParaSupervisionNodeGroupAddrsUpdate
:
{
Ty
:
reflect
.
TypeOf
(
types
.
ReceiptConfig
{}),
Name
:
"LogParaSupervisionNodeGroupAddrsUpdate"
},
TyLogParaSupervisionNodeConfig
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptParaNodeConfig
{}),
Name
:
"LogParaSupervisionNodeConfig"
},
TyLogParaSupervisionNodeConfig
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptParaNodeConfig
{}),
Name
:
"LogParaSupervisionNodeConfig"
},
TyLogParaSupervisionNodeGroupAddrsUpdate
:
{
Ty
:
reflect
.
TypeOf
(
types
.
ReceiptConfig
{}),
Name
:
"LogParaSupervisionNodeGroupAddrsUpdate"
},
TyLogParaSupervisionNodeStatusUpdate
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptParaNodeAddrStatUpdate
{}),
Name
:
"LogParaSupervisionNodeStatusUpdate"
},
TyLogParaSupervisionNodeStatusUpdate
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptParaNodeAddrStatUpdate
{}),
Name
:
"LogParaSupervisionNodeStatusUpdate"
},
TyLogParaStageSupervisionGroupUpdate
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptSelfConsStagesUpdate
{}),
Name
:
"LogParaStageSupervisionGroupUpdate"
},
TyLogParaSupervisionNodeGroupStatusUpdate
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptParaNodeGroupConfig
{}),
Name
:
"LogParaSupervisionNodeGroupStatusUpdate"
},
TyLogParaSupervisionNodeGroupStatusUpdate
:
{
Ty
:
reflect
.
TypeOf
(
ReceiptParaNodeGroupConfig
{}),
Name
:
"LogParaSupervisionNodeGroupStatusUpdate"
},
}
}
}
}
...
...
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