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
23751000
Commit
23751000
authored
Jan 12, 2021
by
madengji
Committed by
vipwzw
Sep 18, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mix wallet base pass
parent
1ea44029
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
178 additions
and
150 deletions
+178
-150
mix.go
plugin/dapp/mix/commands/mix.go
+28
-0
mixlocaldb.go
plugin/dapp/mix/executor/mixlocaldb.go
+9
-14
mixtxtable.go
plugin/dapp/mix/executor/mixtxtable.go
+2
-2
mix.proto
plugin/dapp/mix/proto/mix.proto
+2
-2
mix.pb.go
plugin/dapp/mix/types/mix.pb.go
+117
-118
mix.go
plugin/dapp/mix/wallet/mix.go
+6
-2
mixbizdb.go
plugin/dapp/mix/wallet/mixbizdb.go
+9
-9
mixbizdb_test.go
plugin/dapp/mix/wallet/mixbizdb_test.go
+1
-1
mixbizpolicy.go
plugin/dapp/mix/wallet/mixbizpolicy.go
+1
-1
mixbiztable.go
plugin/dapp/mix/wallet/mixbiztable.go
+3
-1
No files found.
plugin/dapp/mix/commands/mix.go
View file @
23751000
...
@@ -60,6 +60,19 @@ func addCreateDepositFlags(cmd *cobra.Command) {
...
@@ -60,6 +60,19 @@ func addCreateDepositFlags(cmd *cobra.Command) {
cmd
.
Flags
()
.
Uint64P
(
"amount"
,
"a"
,
0
,
"deposit amount"
)
cmd
.
Flags
()
.
Uint64P
(
"amount"
,
"a"
,
0
,
"deposit amount"
)
cmd
.
MarkFlagRequired
(
"amount"
)
cmd
.
MarkFlagRequired
(
"amount"
)
cmd
.
Flags
()
.
StringP
(
"secretPayment"
,
"s"
,
""
,
"secret for payment addr"
)
cmd
.
MarkFlagRequired
(
"secretPayment"
)
cmd
.
Flags
()
.
StringP
(
"pubX"
,
"x"
,
""
,
"receiving pub key X"
)
cmd
.
MarkFlagRequired
(
"pubX"
)
cmd
.
Flags
()
.
StringP
(
"pubY"
,
"y"
,
""
,
"receiving pub key Y"
)
cmd
.
MarkFlagRequired
(
"pubY"
)
cmd
.
Flags
()
.
StringP
(
"secretAuth"
,
"u"
,
""
,
"secret for authorize addr"
)
cmd
.
Flags
()
.
StringP
(
"secretReturn"
,
"r"
,
""
,
"secret for return addr"
)
}
}
func
parseProofPara
(
input
string
)
([]
*
mixTy
.
ZkProofInfo
,
error
)
{
func
parseProofPara
(
input
string
)
([]
*
mixTy
.
ZkProofInfo
,
error
)
{
...
@@ -83,15 +96,30 @@ func createDeposit(cmd *cobra.Command, args []string) {
...
@@ -83,15 +96,30 @@ func createDeposit(cmd *cobra.Command, args []string) {
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
amount
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"amount"
)
amount
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"amount"
)
proofsPara
,
_
:=
cmd
.
Flags
()
.
GetString
(
"proofs"
)
proofsPara
,
_
:=
cmd
.
Flags
()
.
GetString
(
"proofs"
)
secretPayment
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretPayment"
)
pubX
,
_
:=
cmd
.
Flags
()
.
GetString
(
"pubX"
)
pubY
,
_
:=
cmd
.
Flags
()
.
GetString
(
"pubY"
)
proofInputs
,
err
:=
parseProofPara
(
proofsPara
)
proofInputs
,
err
:=
parseProofPara
(
proofsPara
)
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
var
pubkey
mixTy
.
PubKey
pubkey
.
X
=
pubX
pubkey
.
Y
=
pubY
var
paySecret
mixTy
.
DHSecret
paySecret
.
Secret
=
secretPayment
paySecret
.
Epk
=
&
pubkey
var
group
mixTy
.
DHSecretGroup
group
.
Spender
=
&
paySecret
payload
:=
&
mixTy
.
MixDepositAction
{}
payload
:=
&
mixTy
.
MixDepositAction
{}
payload
.
Amount
=
amount
payload
.
Amount
=
amount
payload
.
NewCommits
=
append
(
payload
.
NewCommits
,
proofInputs
...
)
payload
.
NewCommits
=
append
(
payload
.
NewCommits
,
proofInputs
...
)
payload
.
NewCommits
[
0
]
.
Group
=
&
group
params
:=
&
rpctypes
.
CreateTxIn
{
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
getRealExecName
(
paraName
,
mixTy
.
MixX
),
Execer
:
getRealExecName
(
paraName
,
mixTy
.
MixX
),
ActionName
:
"Deposit"
,
ActionName
:
"Deposit"
,
...
...
plugin/dapp/mix/executor/mixlocaldb.go
View file @
23751000
...
@@ -27,7 +27,7 @@ func (e *Mix) execLocalMix(tx *types.Transaction, receiptData *types.ReceiptData
...
@@ -27,7 +27,7 @@ func (e *Mix) execLocalMix(tx *types.Transaction, receiptData *types.ReceiptData
table
:=
NewMixTxTable
(
e
.
GetLocalDB
())
table
:=
NewMixTxTable
(
e
.
GetLocalDB
())
r
:=
&
mixTy
.
LocalMixTx
{
r
:=
&
mixTy
.
LocalMixTx
{
Hash
:
tx
.
Hash
(
),
Hash
:
common
.
ToHex
(
tx
.
Hash
()
),
Height
:
e
.
GetHeight
(),
Height
:
e
.
GetHeight
(),
Index
:
int64
(
index
),
Index
:
int64
(
index
),
}
}
...
@@ -66,29 +66,24 @@ func (e *Mix) listMixInfos(req *mixTy.MixTxListReq) (types.Message, error) {
...
@@ -66,29 +66,24 @@ func (e *Mix) listMixInfos(req *mixTy.MixTxListReq) (types.Message, error) {
primary
=
[]
byte
(
req
.
TxIndex
)
primary
=
[]
byte
(
req
.
TxIndex
)
}
}
cur
:=
&
MixTxRow
{}
indexName
:=
"height"
indexName
:=
"height"
var
prefix
[]
byte
info
:=
&
mixTy
.
LocalMixTx
{
Height
:
req
.
Height
,
Index
:
req
.
Index
}
info
:=
&
mixTy
.
LocalMixTx
{
Height
:
req
.
Height
,
Index
:
req
.
Index
}
if
len
(
req
.
Hash
)
>
0
{
if
len
(
req
.
Hash
)
>
0
{
hash
,
err
:=
common
.
FromHex
(
req
.
Hash
)
info
.
Hash
=
req
.
Hash
if
err
!=
nil
{
mlog
.
Error
(
"listMixInfos fromHex"
,
"hash"
,
req
.
Hash
,
"err"
,
err
)
return
nil
,
err
}
info
.
Hash
=
hash
indexName
=
"hash"
indexName
=
"hash"
}
var
err
error
prefix
,
err
=
cur
.
Get
(
indexName
)
cur
:=
&
MixTxRow
{}
cur
.
SetPayload
(
info
)
prefix
,
err
:=
cur
.
Get
(
indexName
)
if
err
!=
nil
{
if
err
!=
nil
{
mlog
.
Error
(
"listMixInfos Get"
,
"indexName"
,
indexName
,
"err"
,
err
)
mlog
.
Error
(
"listMixInfos Get"
,
"indexName"
,
indexName
,
"err"
,
err
)
return
nil
,
err
return
nil
,
err
}
}
}
cur
.
SetPayload
(
info
)
rows
,
err
:=
query
.
ListIndex
(
indexName
,
prefix
,
primary
,
req
.
Count
,
req
.
Direction
)
rows
,
err
:=
query
.
ListIndex
(
indexName
,
prefix
,
primary
,
req
.
Count
,
req
.
Direction
)
if
err
!=
nil
{
if
err
!=
nil
{
mlog
.
Error
(
"listMixInfos query failed"
,
"indexName"
,
indexName
,
"prefix"
,
prefix
,
"key"
,
string
(
primary
),
"err"
,
err
)
mlog
.
Error
(
"listMixInfos query failed"
,
"indexName"
,
indexName
,
"prefix"
,
string
(
prefix
)
,
"key"
,
string
(
primary
),
"err"
,
err
)
return
nil
,
err
return
nil
,
err
}
}
if
len
(
rows
)
==
0
{
if
len
(
rows
)
==
0
{
...
...
plugin/dapp/mix/executor/mixtxtable.go
View file @
23751000
...
@@ -18,7 +18,7 @@ index: status
...
@@ -18,7 +18,7 @@ index: status
*/
*/
var
txBoardOpt
=
&
table
.
Option
{
var
txBoardOpt
=
&
table
.
Option
{
Prefix
:
"LODB-mix
coin
"
,
Prefix
:
"LODB-mix"
,
Name
:
"tx"
,
Name
:
"tx"
,
Primary
:
"txIndex"
,
Primary
:
"txIndex"
,
Index
:
[]
string
{
"height"
,
"hash"
},
Index
:
[]
string
{
"height"
,
"hash"
},
...
@@ -66,7 +66,7 @@ func (r *MixTxRow) Get(key string) ([]byte, error) {
...
@@ -66,7 +66,7 @@ func (r *MixTxRow) Get(key string) ([]byte, error) {
case
"height"
:
case
"height"
:
return
[]
byte
(
fmt
.
Sprintf
(
"%022d"
,
r
.
Height
)),
nil
return
[]
byte
(
fmt
.
Sprintf
(
"%022d"
,
r
.
Height
)),
nil
case
"hash"
:
case
"hash"
:
return
r
.
Hash
,
nil
return
[]
byte
(
r
.
Hash
)
,
nil
default
:
default
:
return
nil
,
types
.
ErrNotFound
return
nil
,
types
.
ErrNotFound
...
...
plugin/dapp/mix/proto/mix.proto
View file @
23751000
...
@@ -273,7 +273,7 @@ message WalletIndexInfo {
...
@@ -273,7 +273,7 @@ message WalletIndexInfo {
string
spender
=
4
;
string
spender
=
4
;
string
account
=
5
;
//账户地址
string
account
=
5
;
//账户地址
NoteStatus
status
=
6
;
NoteStatus
status
=
6
;
SecretData
note
=
7
;
SecretData
secret
=
7
;
}
}
...
@@ -322,7 +322,7 @@ enum MixWalletRescanStatus{
...
@@ -322,7 +322,7 @@ enum MixWalletRescanStatus{
///////localdb index query
///////localdb index query
message
LocalMixTx
{
message
LocalMixTx
{
bytes
hash
=
1
;
string
hash
=
1
;
int64
height
=
2
;
int64
height
=
2
;
int64
index
=
3
;
int64
index
=
3
;
}
}
...
...
plugin/dapp/mix/types/mix.pb.go
View file @
23751000
...
@@ -2064,7 +2064,7 @@ type WalletIndexInfo struct {
...
@@ -2064,7 +2064,7 @@ type WalletIndexInfo struct {
Spender
string
`protobuf:"bytes,4,opt,name=spender,proto3" json:"spender,omitempty"`
Spender
string
`protobuf:"bytes,4,opt,name=spender,proto3" json:"spender,omitempty"`
Account
string
`protobuf:"bytes,5,opt,name=account,proto3" json:"account,omitempty"`
Account
string
`protobuf:"bytes,5,opt,name=account,proto3" json:"account,omitempty"`
Status
NoteStatus
`protobuf:"varint,6,opt,name=status,proto3,enum=types.NoteStatus" json:"status,omitempty"`
Status
NoteStatus
`protobuf:"varint,6,opt,name=status,proto3,enum=types.NoteStatus" json:"status,omitempty"`
Note
*
SecretData
`protobuf:"bytes,7,opt,name=note,proto3" json:"note
,omitempty"`
Secret
*
SecretData
`protobuf:"bytes,7,opt,name=secret,proto3" json:"secret
,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:"-"`
...
@@ -2137,9 +2137,9 @@ func (m *WalletIndexInfo) GetStatus() NoteStatus {
...
@@ -2137,9 +2137,9 @@ func (m *WalletIndexInfo) GetStatus() NoteStatus {
return
NoteStatus_UNDEF
return
NoteStatus_UNDEF
}
}
func
(
m
*
WalletIndexInfo
)
Get
Note
()
*
SecretData
{
func
(
m
*
WalletIndexInfo
)
Get
Secret
()
*
SecretData
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Note
return
m
.
Secret
}
}
return
nil
return
nil
}
}
...
@@ -2459,7 +2459,7 @@ func (m *WalletEnablePrivacyResp) GetData() []*WalletEnablePrivacyRst {
...
@@ -2459,7 +2459,7 @@ func (m *WalletEnablePrivacyResp) GetData() []*WalletEnablePrivacyRst {
}
}
type
LocalMixTx
struct
{
type
LocalMixTx
struct
{
Hash
[]
byte
`protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
Hash
string
`protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
Height
int64
`protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"`
Height
int64
`protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"`
Index
int64
`protobuf:"varint,3,opt,name=index,proto3" json:"index,omitempty"`
Index
int64
`protobuf:"varint,3,opt,name=index,proto3" json:"index,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
...
@@ -2492,11 +2492,11 @@ func (m *LocalMixTx) XXX_DiscardUnknown() {
...
@@ -2492,11 +2492,11 @@ func (m *LocalMixTx) XXX_DiscardUnknown() {
var
xxx_messageInfo_LocalMixTx
proto
.
InternalMessageInfo
var
xxx_messageInfo_LocalMixTx
proto
.
InternalMessageInfo
func
(
m
*
LocalMixTx
)
GetHash
()
[]
byte
{
func
(
m
*
LocalMixTx
)
GetHash
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Hash
return
m
.
Hash
}
}
return
nil
return
""
}
}
func
(
m
*
LocalMixTx
)
GetHeight
()
int64
{
func
(
m
*
LocalMixTx
)
GetHeight
()
int64
{
...
@@ -2785,31 +2785,31 @@ func init() {
...
@@ -2785,31 +2785,31 @@ func init() {
}
}
var
fileDescriptor_5c21d519a9be369a
=
[]
byte
{
var
fileDescriptor_5c21d519a9be369a
=
[]
byte
{
// 201
8
bytes of a gzipped FileDescriptorProto
// 201
4
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xcc
,
0x58
,
0x5b
,
0x73
,
0x1b
,
0x49
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xcc
,
0x58
,
0x5b
,
0x73
,
0x1b
,
0x49
,
0x15
,
0xf6
,
0xe8
,
0xae
,
0x23
,
0x
d9
,
0x1e
,
0x75
,
0xbc
,
0x5e
,
0xad
,
0x8b
,
0x05
,
0x33
,
0xeb
,
0xdd
,
0x15
,
0xf6
,
0xe8
,
0xae
,
0x23
,
0x
cb
,
0x1e
,
0x75
,
0xbc
,
0x5e
,
0xad
,
0x8b
,
0x05
,
0x33
,
0xeb
,
0xdd
,
0xf2
,
0x2a
,
0x10
,
0x76
,
0x95
,
0x6c
,
0x36
,
0x14
,
0x05
,
0x94
,
0x62
,
0x29
,
0x91
,
0x88
,
0x2d
,
0xa9
,
0xf2
,
0x2a
,
0x10
,
0x76
,
0x95
,
0x6c
,
0x36
,
0x14
,
0x05
,
0x94
,
0x62
,
0x29
,
0x91
,
0x88
,
0x2d
,
0xa9
,
0x5a
,
0xf2
,
0x3a
,
0x31
,
0x97
,
0xaa
,
0xb1
,
0xa6
,
0x6d
,
0x4d
,
0x59
,
0x9a
,
0x19
,
0xcf
,
0xb4
,
0x1c
,
0x5a
,
0xf2
,
0x3a
,
0x31
,
0x97
,
0xaa
,
0xb1
,
0xa6
,
0x6d
,
0x4d
,
0x59
,
0x9a
,
0x19
,
0xcf
,
0xb4
,
0x1c
,
0x89
,
0x1f
,
0xc0
,
0x1b
,
0xaf
,
0x3c
,
0x42
,
0xf1
,
0xc4
,
0x1f
,
0xa0
,
0x28
,
0x8a
,
0x5f
,
0xc0
,
0x6f
,
0x89
,
0x1f
,
0xc0
,
0x1b
,
0xaf
,
0x3c
,
0x42
,
0xf1
,
0xc4
,
0x1f
,
0xa0
,
0x28
,
0x8a
,
0x5f
,
0xc0
,
0x6f
,
0xe1
,
0x95
,
0x
07
,
0x5e
,
0xa9
,
0xbe
,
0xcd
,
0x45
,
0x96
,
0x72
,
0x81
,
0x97
,
0x7d
,
0x9b
,
0x73
,
0xfa
,
0xe1
,
0x95
,
0x
47
,
0x5e
,
0xa8
,
0xbe
,
0xcd
,
0x45
,
0x96
,
0x72
,
0x81
,
0x97
,
0x7d
,
0x9b
,
0x73
,
0xfa
,
0xeb
,
0xd3
,
0xe7
,
0xde
,
0xa7
,
0x07
,
0x8a
,
0x53
,
0x7b
,
0xfe
,
0xc0
,
0xf3
,
0x5d
,
0xea
,
0xa2
,
0x2c
,
0xeb
,
0xd3
,
0xe7
,
0xde
,
0xa7
,
0x07
,
0x8a
,
0x53
,
0x7b
,
0xfe
,
0xc0
,
0xf3
,
0x5d
,
0xea
,
0xa2
,
0x2c
,
0x5d
,
0x78
,
0x24
,
0xd8
,
0x
2b
,
0x8f
,
0xdc
,
0xe9
,
0xd4
,
0x75
,
0x04
,
0x73
,
0xaf
,
0x42
,
0x7d
,
0xd3
,
0x5d
,
0x78
,
0x24
,
0xd8
,
0x
db
,
0x1c
,
0xb9
,
0xd3
,
0xa9
,
0xeb
,
0x08
,
0xe6
,
0x5e
,
0x85
,
0xfa
,
0xa6
,
0x
09
,
0xcc
,
0x11
,
0xb5
,
0x15
,
0xcb
,
0xb8
,
0x85
,
0xd2
,
0xf9
,
0xf5
,
0x37
,
0xc4
,
0xb7
,
0x2f
,
0x17
,
0x
13
,
0x98
,
0x23
,
0x6a
,
0x2b
,
0x96
,
0x71
,
0x0b
,
0xa5
,
0xf3
,
0xeb
,
0x6f
,
0x88
,
0x6f
,
0x5f
,
0x2e
,
0x
2f
,
0xc8
,
0x02
,
0xd5
,
0x20
,
0x3f
,
0x9a
,
0xf9
,
0xb7
,
0xa4
,
0x63
,
0x55
,
0xb5
,
0x7d
,
0xed
,
0x70
,
0x
5e
,
0x90
,
0x05
,
0xaa
,
0x41
,
0x7e
,
0x34
,
0xf3
,
0x6f
,
0x49
,
0xc7
,
0xaa
,
0x6a
,
0xfb
,
0xda
,
0xe1
,
0x
ab
,
0xae
,
0x3f
,
0xe0
,
0x82
,
0x1e
,
0x9c
,
0x5f
,
0x1f
,
0x09
,
0x3e
,
0x56
,
0x00
,
0xf4
,
0x29
,
0x64
,
0x
56
,
0x5d
,
0x7f
,
0xc0
,
0x05
,
0x3d
,
0x38
,
0xbf
,
0x3e
,
0x12
,
0x7c
,
0xac
,
0x00
,
0xe8
,
0x53
,
0xc8
,
0x
d8
,
0x5a
,
0x35
,
0xc5
,
0x81
,
0x15
,
0x09
,
0x14
,
0xb2
,
0x86
,
0x0b
,
0x8f
,
0x60
,
0xbe
,
0x8c
,
0x76
,
0x
b0
,
0xb5
,
0x6a
,
0x8a
,
0x03
,
0x2b
,
0x12
,
0x28
,
0x64
,
0x0d
,
0x17
,
0x1e
,
0xc1
,
0x7c
,
0x19
,
0xed
,
0x
20
,
0x7b
,
0x6b
,
0x4e
,
0x66
,
0xa4
,
0x9a
,
0xde
,
0xd7
,
0x0e
,
0x8b
,
0x58
,
0x10
,
0xc6
,
0x63
,
0x28
,
0x
40
,
0xf6
,
0xd6
,
0x9c
,
0xcc
,
0x48
,
0x35
,
0xbd
,
0xaf
,
0x1d
,
0x16
,
0xb1
,
0x20
,
0x8c
,
0xc7
,
0xb0
,
0x
c7
,
0xce
,
0x0d
,
0xd0
,
0x67
,
0x90
,
0xb1
,
0x4c
,
0x6a
,
0x56
,
0xb5
,
0xfd
,
0xf4
,
0x61
,
0xa9
,
0x8e
,
0x
19
,
0x3b
,
0x37
,
0x40
,
0x9f
,
0x41
,
0xc6
,
0x32
,
0xa9
,
0x59
,
0xd5
,
0xf6
,
0xd3
,
0x87
,
0xa5
,
0x3a
,
0x
c2
,
0x53
,
0x43
,
0x08
,
0xe6
,
0xeb
,
0xc6
,
0xf7
,
0xa1
,
0xd4
,
0x98
,
0xd1
,
0x71
,
0x7f
,
0x76
,
0xc1
,
0x
0a
,
0x4f
,
0x0d
,
0x21
,
0x98
,
0xaf
,
0x1b
,
0xdf
,
0x87
,
0x52
,
0x63
,
0x46
,
0xc7
,
0xfd
,
0xd9
,
0x05
,
0x
b7
,
0xa1
,
0xd8
,
0xb6
,
0xa2
,
0x84
,
0xfc
,
0x4b
,
0x83
,
0xed
,
0x13
,
0x7b
,
0x7e
,
0xe4
,
0x3a
,
0x97
,
0x
df
,
0x86
,
0x62
,
0xdb
,
0x8a
,
0x12
,
0xf2
,
0x2f
,
0x0d
,
0xb6
,
0x4f
,
0xec
,
0xf9
,
0x91
,
0xeb
,
0x5c
,
0x
f6
,
0x55
,
0x83
,
0x1b
,
0x8b
,
0x0e
,
0x20
,
0x35
,
0x5c
,
0x48
,
0x93
,
0x76
,
0xa4
,
0xf0
,
0x10
,
0xc3
,
0x
da
,
0x57
,
0x0d
,
0x6e
,
0x2c
,
0x3a
,
0x80
,
0xd4
,
0x70
,
0x21
,
0x4d
,
0xda
,
0x91
,
0xc2
,
0x43
,
0x0c
,
0x
95
,
0x4d
,
0x0d
,
0x17
,
0xe8
,
0x3e
,
0xe4
,
0x04
,
0x5e
,
0xda
,
0x74
,
0x6f
,
0x19
,
0xd9
,
0x18
,
0x51
,
0x
57
,
0x36
,
0x35
,
0x5c
,
0xa0
,
0xfb
,
0x90
,
0x13
,
0x78
,
0x69
,
0xd3
,
0xbd
,
0x65
,
0x64
,
0x63
,
0x44
,
0x
2c
,
0x21
,
0xa8
,
0x0e
,
0xc5
,
0x5b
,
0xa5
,
0x1c
,
0xb7
,
0x6d
,
0xa5
,
0xda
,
0xed
,
0x0d
,
0x1c
,
0xc1
,
0x
b1
,
0x84
,
0xa0
,
0x3a
,
0x14
,
0x6f
,
0x95
,
0x72
,
0xdc
,
0xb6
,
0x95
,
0x6a
,
0xb7
,
0x37
,
0x70
,
0x04
,
0x
50
,
0x15
,
0x72
,
0x26
,
0xd3
,
0xfe
,
0xba
,
0x9a
,
0x61
,
0xce
,
0x68
,
0x6f
,
0x60
,
0x49
,
0xa3
,
0x1f
,
0x
43
,
0x55
,
0xc8
,
0x99
,
0x4c
,
0xfb
,
0xeb
,
0x6a
,
0x86
,
0x39
,
0xa3
,
0xbd
,
0x81
,
0x25
,
0x8d
,
0x7e
,
0x
42
,
0xd1
,
0x33
,
0x17
,
0x53
,
0xe2
,
0xd0
,
0xfe
,
0x75
,
0x35
,
0xcb
,
0xa5
,
0x6d
,
0x4a
,
0x69
,
0xc2
,
0x
08
,
0x45
,
0xcf
,
0x5c
,
0x4c
,
0x89
,
0x43
,
0xfb
,
0xd7
,
0xd5
,
0x2c
,
0x97
,
0x56
,
0x96
,
0xd2
,
0x84
,
0x
56
,
0x26
,
0x28
,
0x44
,
0x3c
,
0xcd
,
0x4b
,
0xa7
,
0x1a
,
0x47
,
0x50
,
0x68
,
0xb6
,
0x07
,
0x64
,
0xe4
,
0x
ad
,
0x4c
,
0x50
,
0x88
,
0x78
,
0x9a
,
0x97
,
0x4e
,
0x35
,
0x8e
,
0xa0
,
0xd0
,
0x6c
,
0x0f
,
0xc8
,
0xc8
,
0x
13
,
0x8a
,
0xbe
,
0x07
,
0x69
,
0xe2
,
0x5d
,
0x73
,
0x2b
,
0x97
,
0x77
,
0x63
,
0xb6
,
0x82
,
0x76
,
0x21
,
0x
27
,
0x14
,
0x7d
,
0x0f
,
0xd2
,
0xc4
,
0xbb
,
0xe6
,
0x56
,
0x2e
,
0xef
,
0xc6
,
0x6c
,
0x05
,
0xed
,
0x42
,
0x
17
,
0x70
,
0xa8
,
0x8c
,
0x85
,
0xa4
,
0x8c
,
0x3f
,
0x68
,
0xb0
,
0xa9
,
0xa4
,
0x3c
,
0xf7
,
0xdd
,
0x99
,
0x
2e
,
0xe0
,
0x50
,
0x19
,
0x0b
,
0x49
,
0x19
,
0x7f
,
0xd0
,
0xa0
,
0xac
,
0xa4
,
0x3c
,
0xf7
,
0xdd
,
0x99
,
0x87
,
0x3e
,
0x87
,
0x7c
,
0xe0
,
0x11
,
0xc7
,
0x22
,
0xbe
,
0x14
,
0xb7
,
0x2d
,
0xc5
,
0x29
,
0x18
,
0x56
,
0x87
,
0x3e
,
0x87
,
0x7c
,
0xe0
,
0x11
,
0xc7
,
0x22
,
0xbe
,
0x14
,
0xb7
,
0x2d
,
0xc5
,
0x29
,
0x18
,
0x56
,
0xeb
,
0xe8
,
0x3e
,
0x14
,
0x7c
,
0x42
,
0x67
,
0xbe
,
0x43
,
0x7c
,
0xee
,
0xb6
,
0x15
,
0xd8
,
0x10
,
0xc0
,
0xeb
,
0xe8
,
0x3e
,
0x14
,
0x7c
,
0x42
,
0x67
,
0xbe
,
0x43
,
0x7c
,
0xee
,
0xb6
,
0x15
,
0xd8
,
0x10
,
0xc0
,
0xcc
,
0x64
,
0x06
,
0xbb
,
0xbe
,
0xfd
,
0x5b
,
0x22
,
0x9d
,
0x76
,
0x07
,
0x1d
,
0x21
,
0x8c
,
0x1b
,
0x96
,
0xcc
,
0x64
,
0x06
,
0xbb
,
0xbe
,
0xfd
,
0x5b
,
0x22
,
0x9d
,
0x76
,
0x07
,
0x1d
,
0x21
,
0x8c
,
0x1b
,
0x96
,
...
@@ -2821,98 +2821,97 @@ var fileDescriptor_5c21d519a9be369a = []byte{
...
@@ -2821,98 +2821,97 @@ var fileDescriptor_5c21d519a9be369a = []byte{
0x72
,
0xa7
,
0x53
,
0x9b
,
0x06
,
0xd5
,
0xd4
,
0x52
,
0xea
,
0x86
,
0x7a
,
0xe3
,
0x18
,
0xca
,
0xb0
,
0xa1
,
0x72
,
0xa7
,
0x53
,
0x9b
,
0x06
,
0xd5
,
0xd4
,
0x52
,
0xea
,
0x86
,
0x7a
,
0xe3
,
0x18
,
0xca
,
0xb0
,
0xa1
,
0x72
,
0x62
,
0xcf
,
0x87
,
0xac
,
0x10
,
0x2f
,
0x89
,
0x2f
,
0x0f
,
0x38
,
0x84
,
0xac
,
0xcd
,
0x95
,
0xd7
,
0x72
,
0x62
,
0xcf
,
0x87
,
0xac
,
0x10
,
0x2f
,
0x89
,
0x2f
,
0x0f
,
0x38
,
0x84
,
0xac
,
0xcd
,
0x95
,
0xd7
,
0xd6
,
0xca
,
0x10
,
0x00
,
0x54
,
0x83
,
0x9c
,
0x3b
,
0xa3
,
0xc2
,
0xce
,
0x75
,
0x50
,
0x89
,
0x30
,
0x46
,
0xd6
,
0xca
,
0x10
,
0x00
,
0x54
,
0x83
,
0x9c
,
0x3b
,
0xa3
,
0xc2
,
0xce
,
0x75
,
0x50
,
0x89
,
0x30
,
0x46
,
0xfc
,
0xa8
,
0x33
,
0x9b
,
0x8e
,
0x2d
,
0xdf
,
0x7c
,
0xfd
,
0x16
,
0x5b
,
0x1e
,
0x43
,
0x99
,
0x47
,
0xf4
,
0xfc
,
0xa8
,
0x33
,
0x9b
,
0x8e
,
0x2d
,
0xdf
,
0x7c
,
0xfd
,
0x16
,
0x5b
,
0x1e
,
0xc3
,
0x26
,
0x8f
,
0xe8
,
0xed
,
0xd6
,
0x24
,
0x70
,
0xc6
,
0x2f
,
0x00
,
0x9d
,
0xd8
,
0xf3
,
0x86
,
0x0a
,
0x99
,
0x3c
,
0xe5
,
0x11
,
0xdb
,
0xad
,
0x49
,
0xe0
,
0x8c
,
0x5f
,
0x00
,
0x3a
,
0xb1
,
0xe7
,
0x0d
,
0x15
,
0x32
,
0x79
,
0xca
,
0x23
,
0x94
,
0x58
,
0x14
,
0x95
,
0xb0
,
0xf5
,
0x66
,
0xc5
,
0x61
,
0xc6
,
0xdf
,
0x52
,
0x50
,
0x64
,
0xc2
,
0x84
,
0x28
,
0xb1
,
0x28
,
0x2a
,
0x61
,
0xeb
,
0xcd
,
0x8a
,
0xc3
,
0x8c
,
0xbf
,
0xa5
,
0xa0
,
0xc8
,
0x84
,
0x09
,
0x8c
,
0x2d
,
0x48
,
0x51
,
0x51
,
0xb3
,
0x59
,
0x9c
,
0xa2
,
0x0b
,
0xf4
,
0x05
,
0xe4
,
0x46
,
0xbc
,
0x0a
,
0x19
,
0x5b
,
0x90
,
0xa2
,
0xa2
,
0x66
,
0xb3
,
0x38
,
0x45
,
0x17
,
0xe8
,
0x0b
,
0xc8
,
0x8d
,
0x78
,
0x15
,
0x65
,
0x9a
,
0xed
,
0xae
,
0xa8
,
0x4e
,
0xdb
,
0x75
,
0x58
,
0x51
,
0x09
,
0x1c
,
0x7a
,
0x08
,
0x79
,
0x4b
,
0xca
,
0x34
,
0xdb
,
0x5d
,
0x51
,
0x9d
,
0xb6
,
0xeb
,
0xb0
,
0xa2
,
0x12
,
0x38
,
0xf4
,
0x10
,
0xf2
,
0x96
,
0x04
,
0x52
,
0x46
,
0xfe
,
0xc3
,
0x68
,
0x4b
,
0x22
,
0xc2
,
0xed
,
0x0d
,
0xac
,
0x90
,
0xe8
,
0x31
,
0x14
,
0x08
,
0xa4
,
0x8c
,
0xfc
,
0x87
,
0xd1
,
0x96
,
0x44
,
0x84
,
0xdb
,
0x1b
,
0x58
,
0x21
,
0xd1
,
0x63
,
0x28
,
0x5e
,
0x4b
,
0x97
,
0xf1
,
0x2a
,
0x2d
,
0xd5
,
0xab
,
0xd1
,
0xae
,
0xa4
,
0x33
,
0xdb
,
0x1b
,
0x38
,
0xc4
,
0xbc
,
0x96
,
0x2e
,
0xe3
,
0x55
,
0x5a
,
0xaa
,
0x57
,
0xa3
,
0x5d
,
0x49
,
0x67
,
0xb6
,
0x37
,
0x70
,
0x88
,
0xb2
,
0x7d
,
0x54
,
0x46
,
0x55
,
0x16
,
0x70
,
0x6c
,
0x5f
,
0x32
,
0xde
,
0x6c
,
0x9f
,
0xc2
,
0xa2
,
0x1f
,
0x65
,
0xfb
,
0xa8
,
0x8c
,
0xaa
,
0x2c
,
0xe0
,
0xd8
,
0xbe
,
0x64
,
0xbc
,
0xd9
,
0x3e
,
0x85
,
0x45
,
0x3f
,
0xc7
,
0x4b
,
0x22
,
0xc7
,
0x37
,
0x7e
,
0x14
,
0x6d
,
0x5c
,
0x72
,
0x2c
,
0xeb
,
0x02
,
0x21
,
0x3a
,
0xea
,
0x8e
,
0x97
,
0x44
,
0x8e
,
0x6f
,
0xfc
,
0x28
,
0xda
,
0xb8
,
0xe4
,
0x58
,
0xd6
,
0x05
,
0x42
,
0x74
,
0xd4
,
0x02
,
0x6d
,
0x40
,
0xd2
,
0x9e
,
0x7e
,
0x2c
,
0xed
,
0xf7
,
0xa0
,
0xe0
,
0xb8
,
0x94
,
0xb4
,
0xcd
,
0x60
,
0x05
,
0xda
,
0x80
,
0xa4
,
0x3d
,
0xfd
,
0x58
,
0xda
,
0xef
,
0x41
,
0xc1
,
0x71
,
0x29
,
0x69
,
0x9b
,
0xc1
,
0x2c
,
0x2b
,
0x26
,
0xa4
,
0x63
,
0x69
,
0x20
,
0xea
,
0x45
,
0x52
,
0xc6
,
0x5f
,
0x34
,
0xb8
,
0xa7
,
0x8c
,
0x58
,
0x56
,
0x4c
,
0x48
,
0xc7
,
0xd2
,
0x40
,
0xd4
,
0x8b
,
0xa4
,
0x8c
,
0xbf
,
0x68
,
0x70
,
0x4f
,
0x19
,
0x8c
,
0xcb
,
0x32
,
0xa0
,
0x4c
,
0x7d
,
0x42
,
0xb0
,
0xeb
,
0xd2
,
0x98
,
0xbc
,
0x04
,
0x0f
,
0x1d
,
0xc0
,
0x19
,
0x97
,
0x65
,
0xc0
,
0x26
,
0xf5
,
0x09
,
0xc1
,
0xae
,
0x4b
,
0x63
,
0xf2
,
0x12
,
0x3c
,
0x74
,
0x00
,
0xa6
,
0x33
,
0x9b
,
0x4c
,
0xec
,
0x4b
,
0x9b
,
0xf8
,
0x1c
,
0x24
,
0x44
,
0x27
,
0x99
,
0xe8
,
0x01
,
0xa0
,
0x65
,
0x67
,
0x36
,
0x99
,
0xd8
,
0x97
,
0x36
,
0xf1
,
0x39
,
0x48
,
0x88
,
0x4e
,
0x32
,
0xd1
,
0x03
,
0x40
,
0xd0
,
0x82
,
0x01
,
0xcb
,
0x24
,
0x0e
,
0x15
,
0x0d
,
0x69
,
0xc5
,
0x4a
,
0x4c
,
0xd3
,
0x4c
,
0x42
,
0xd3
,
0xa1
,
0x05
,
0x03
,
0x96
,
0x49
,
0x1c
,
0x2a
,
0x1a
,
0xd2
,
0x8a
,
0x95
,
0x98
,
0xa6
,
0x99
,
0x84
,
0xa6
,
0x1a
,
0xf0
,
0xcb
,
0xcd
,
0xa6
,
0x0d
,
0x91
,
0xc0
,
0x65
,
0xd0
,
0x5e
,
0x4a
,
0xb5
,
0xb4
,
0x97
,
0x8c
,
0x35
,
0xe0
,
0x97
,
0x9b
,
0x4d
,
0x1b
,
0x22
,
0x81
,
0x37
,
0x41
,
0x7b
,
0x29
,
0xd5
,
0xd2
,
0x5e
,
0x32
,
0x7a
,
0x25
,
0xcf
,
0xd7
,
0x5e
,
0x19
,
0xff
,
0xd4
,
0xa0
,
0xaa
,
0x42
,
0xc0
,
0xed
,
0x79
,
0x5f
,
0xd3
,
0xea
,
0x95
,
0x3c
,
0x5f
,
0x7b
,
0x65
,
0xfc
,
0x53
,
0x83
,
0xaa
,
0x0a
,
0x01
,
0xb7
,
0xe7
,
0x7d
,
0x4d
,
0xaa
,
0x90
,
0x17
,
0xc7
,
0xbe
,
0x94
,
0x42
,
0x15
,
0x19
,
0xad
,
0xbc
,
0x92
,
0x36
,
0x28
,
0x72
,
0x8d
,
0xab
,
0x42
,
0x5e
,
0x1c
,
0xfb
,
0x52
,
0x0a
,
0x55
,
0x64
,
0xb4
,
0xf2
,
0x4a
,
0xda
,
0xa0
,
0xc8
,
0x35
,
0xa1
,
0x99
,
0xb5
,
0x86
,
0xde
,
0x71
,
0x5f
,
0x76
,
0x85
,
0xfb
,
0x8c
,
0x3f
,
0x69
,
0xf0
,
0x91
,
0x32
,
0x86
,
0x66
,
0xd6
,
0x1a
,
0x7a
,
0xc7
,
0x7d
,
0xd9
,
0x15
,
0xee
,
0x33
,
0xfe
,
0xa4
,
0xc1
,
0x47
,
0xca
,
0xa5
,
0xc7
,
0xeb
,
0xfc
,
0x5d
,
0x43
,
0xfe
,
0xbf
,
0xd8
,
0x50
,
0x87
,
0xa2
,
0x35
,
0x16
,
0x5d
,
0x32
,
0x94
,
0x1e
,
0xaf
,
0xf3
,
0x77
,
0x0d
,
0xf9
,
0xff
,
0x62
,
0x43
,
0x1d
,
0x8a
,
0xd6
,
0x58
,
0x74
,
0xc9
,
0x90
,
0xd5
,
0xb0
,
0xba
,
0x7b
,
0x46
,
0x30
,
0xe3
,
0x1f
,
0x1a
,
0xec
,
0x84
,
0x69
,
0xfb
,
0xbe
,
0x8e
,
0x40
,
0x56
,
0xc3
,
0xea
,
0xee
,
0x19
,
0xc1
,
0x8c
,
0x7f
,
0x68
,
0xb0
,
0x13
,
0xa6
,
0xed
,
0xfb
,
0x3a
,
0x3e
,
0x84
,
0x6d
,
0x33
,
0xb6
,
0x97
,
0xdd
,
0xad
,
0x42
,
0xd9
,
0x65
,
0x36
,
0x73
,
0x57
,
0xc8
,
0x8a
,
0xfa
,
0x10
,
0xb6
,
0xcd
,
0xd8
,
0x5e
,
0x76
,
0xb7
,
0x0a
,
0x65
,
0x97
,
0xd9
,
0xcc
,
0x5d
,
0x21
,
0x2b
,
0xa5
,
0x50
,
0x92
,
0xf9
,
0xbe
,
0x41
,
0x30
,
0xf6
,
0x01
,
0x5a
,
0x73
,
0x3b
,
0xa0
,
0xdf
,
0xb0
,
0xba
,
0x96
,
0x42
,
0x49
,
0xe6
,
0xfb
,
0x06
,
0xc1
,
0xd8
,
0x07
,
0x68
,
0xcd
,
0xed
,
0x80
,
0x7e
,
0xc3
,
0xea
,
0x8a
,
0x8d
,
0x17
,
0xda
,
0x61
,
0x41
,
0x8e
,
0x17
,
0x9f
,
0x81
,
0x2e
,
0xfa
,
0xd5
,
0xd0
,
0x27
,
0xe4
,
0x2a
,
0x36
,
0x5e
,
0x68
,
0x87
,
0x05
,
0x39
,
0x5e
,
0x7c
,
0x06
,
0xba
,
0xe8
,
0x57
,
0x43
,
0x9f
,
0x90
,
0x98
,
0x98
,
0xb7
,
0x24
,
0x39
,
0x86
,
0x94
,
0x25
,
0xee
,
0x53
,
0xd8
,
0x8e
,
0x70
,
0xcc
,
0xbe
,
0xd5
,
0x63
,
0x62
,
0xde
,
0x92
,
0xe4
,
0x18
,
0xb2
,
0x29
,
0x71
,
0x9f
,
0xc2
,
0x76
,
0x84
,
0x63
,
0xf6
,
0xad
,
0xb0
,
0x3f
,
0x6b
,
0x71
,
0x5c
,
0xdf
,
0x77
,
0x6f
,
0x09
,
0x8b
,
0xa2
,
0x9f
,
0x74
,
0x52
,
0x48
,
0xb3
,
0x86
,
0xfd
,
0x59
,
0x8b
,
0xe3
,
0xfa
,
0xbe
,
0x7b
,
0x4b
,
0x58
,
0x14
,
0xfd
,
0xa4
,
0x93
,
0x42
,
0x9a
,
0x35
,
0x7e
,
0xed
,
0x0d
,
0x88
,
0xb8
,
0x02
,
0x8a
,
0x38
,
0xa4
,
0xd1
,
0x77
,
0x01
,
0x3c
,
0xd1
,
0x59
,
0xad
,
0xf1
,
0x6b
,
0x6f
,
0x40
,
0xc4
,
0x15
,
0x50
,
0xc4
,
0x21
,
0x8d
,
0xbe
,
0x0b
,
0xe0
,
0x89
,
0xce
,
0x2d
,
0x32
,
0xe7
,
0xfe
,
0xd8
,
0xc4
,
0x31
,
0x0e
,
0xfa
,
0x0e
,
0x14
,
0x9d
,
0xd9
,
0x54
,
0xe8
,
0xcc
,
0x6a
,
0x91
,
0x39
,
0xf7
,
0x47
,
0x19
,
0xc7
,
0x38
,
0xe8
,
0x3b
,
0x50
,
0x74
,
0x66
,
0x53
,
0xa1
,
0x33
,
0x7d
,
0xb0
,
0x89
,
0x23
,
0x06
,
0xcb
,
0x82
,
0x31
,
0x99
,
0x78
,
0xc4
,
0x0f
,
0x64
,
0xe6
,
0x29
,
0xd2
,
0xf7
,
0x41
,
0x19
,
0x47
,
0x0c
,
0x96
,
0x05
,
0x63
,
0x32
,
0xf1
,
0x88
,
0x1f
,
0xc8
,
0xcc
,
0x53
,
0xa4
,
0x68
,
0x41
,
0x89
,
0x29
,
0xc7
,
0x1b
,
0x36
,
0xb9
,
0x79
,
0x9b
,
0x7a
,
0x13
,
0x62
,
0x5e
,
0xc6
,
0xca
,
0xd1
,
0x82
,
0x12
,
0x53
,
0x8e
,
0x37
,
0x6c
,
0x72
,
0xf3
,
0x36
,
0xf5
,
0x26
,
0xc4
,
0xbc
,
0x8c
,
0x95
,
0x3f
,
0xa4
,
0x8d
,
0x03
,
0x28
,
0x73
,
0x9f
,
0xd9
,
0x01
,
0xc5
,
0x24
,
0xf0
,
0xd8
,
0x75
,
0xce
,
0x5c
,
0x7f
,
0x48
,
0x1b
,
0x07
,
0xb0
,
0xc9
,
0x7d
,
0x66
,
0x07
,
0x14
,
0x93
,
0xc0
,
0x63
,
0xd7
,
0x39
,
0x73
,
0x10
,
0xc8
,
0xe9
,
0x4d
,
0x10
,
0x46
,
0x13
,
0xb6
,
0xfa
,
0x62
,
0xce
,
0x79
,
0x41
,
0x16
,
0x7d
,
0xd3
,
0x41
,
0x20
,
0xa7
,
0x37
,
0x41
,
0x18
,
0x4d
,
0xd8
,
0xea
,
0x8b
,
0x39
,
0xe7
,
0x05
,
0x59
,
0xf4
,
0x4d
,
0xf6
,
0x59
,
0x07
,
0xf0
,
0x4c
,
0x3e
,
0x66
,
0x89
,
0xd3
,
0x24
,
0xc5
,
0xce
,
0xe2
,
0x57
,
0x51
,
0x94
,
0xdb
,
0x67
,
0x1d
,
0xc0
,
0x33
,
0xf9
,
0x98
,
0x25
,
0x4e
,
0x93
,
0x14
,
0x3b
,
0x8b
,
0x5f
,
0x45
,
0x51
,
0x24
,
0x21
,
0x6d
,
0x1c
,
0x40
,
0x4e
,
0xe6
,
0xc9
,
0x9b
,
0xfa
,
0xc2
,
0xc7
,
0x90
,
0xef
,
0xfb
,
0xf6
,
0x92
,
0x84
,
0xb4
,
0x71
,
0x00
,
0x39
,
0x99
,
0x27
,
0x6f
,
0xea
,
0x0b
,
0x1f
,
0x43
,
0xbe
,
0xef
,
0xdb
,
0x2d
,
0x83
,
0xc5
,
0x43
,
0xad
,
0x26
,
0x49
,
0x17
,
0xd0
,
0x60
,
0x6c
,
0xfa
,
0x44
,
0x64
,
0xb6
,
0x52
,
0xb7
,
0x0c
,
0x16
,
0x0f
,
0xb5
,
0x9a
,
0x24
,
0x5d
,
0x40
,
0x83
,
0xb1
,
0xe9
,
0x13
,
0x91
,
0xd9
,
0x4a
,
0xe7
,
0x10
,
0xf2
,
0x9e
,
0xd8
,
0x24
,
0x67
,
0xa3
,
0x2d
,
0x35
,
0x6a
,
0x09
,
0x2e
,
0x56
,
0xcb
,
0xe8
,
0x9d
,
0x43
,
0xc8
,
0x7b
,
0x62
,
0x93
,
0x9c
,
0x8d
,
0xb6
,
0xd4
,
0xa8
,
0x25
,
0xb8
,
0x58
,
0x2d
,
0xa3
,
0x47
,
0x50
,
0xf2
,
0xc9
,
0x88
,
0xd8
,
0xb7
,
0xb6
,
0x73
,
0xd5
,
0xbf
,
0x96
,
0xd7
,
0xd6
,
0xd2
,
0x60
,
0x1f
,
0x41
,
0xc9
,
0x27
,
0x23
,
0x62
,
0xdf
,
0xda
,
0xce
,
0x55
,
0xff
,
0x5a
,
0x5e
,
0x5b
,
0x4b
,
0x83
,
0x16
,
0x47
,
0x18
,
0xbf
,
0xd7
,
0xa0
,
0xd2
,
0x18
,
0x8d
,
0x58
,
0xed
,
0x31
,
0x61
,
0xe6
,
0x88
,
0xdb
,
0x59
,
0x1c
,
0x61
,
0xfc
,
0x5e
,
0x83
,
0x4a
,
0x63
,
0x34
,
0x62
,
0xb5
,
0xc7
,
0x84
,
0x99
,
0x23
,
0x6e
,
0xf9
,
0x15
,
0x80
,
0x17
,
0x7a
,
0x44
,
0x9e
,
0xf9
,
0x81
,
0x92
,
0x92
,
0x70
,
0x15
,
0x8e
,
0x01
,
0x51
,
0xe7
,
0x57
,
0x00
,
0x5e
,
0xe8
,
0x11
,
0x79
,
0xe6
,
0x07
,
0x4a
,
0x4a
,
0xc2
,
0x55
,
0x38
,
0x06
,
0x44
,
0x03
,
0xb6
,
0x82
,
0x84
,
0xf6
,
0x52
,
0x01
,
0x75
,
0xbb
,
0xdc
,
0x35
,
0x0d
,
0x2f
,
0x6d
,
0x30
,
0x7e
,
0x0d
,
0xd8
,
0x0a
,
0x12
,
0xda
,
0x4b
,
0x05
,
0xd4
,
0xed
,
0x72
,
0xd7
,
0x34
,
0xbc
,
0xb4
,
0xc1
,
0xf8
,
0x09
,
0x95
,
0x33
,
0x73
,
0x32
,
0x21
,
0xb4
,
0x61
,
0x59
,
0xbe
,
0xd4
,
0x08
,
0xd5
,
0x85
,
0xfd
,
0xe6
,
0x25
,
0x54
,
0xce
,
0xcc
,
0xc9
,
0x84
,
0xd0
,
0x86
,
0x65
,
0xf9
,
0x52
,
0x23
,
0x54
,
0x17
,
0xf6
,
0x9b
,
0x48
,
0xe9
,
0xa2
,
0xee
,
0xb9
,
0x3b
,
0x9a
,
0x63
,
0x05
,
0x64
,
0xde
,
0x35
,
0x2d
,
0xcb
,
0x97
,
0x9e
,
0x23
,
0xa5
,
0x8b
,
0xba
,
0xe7
,
0xee
,
0x68
,
0x8e
,
0x15
,
0x90
,
0x79
,
0xd7
,
0xb4
,
0x2c
,
0x5f
,
0x7a
,
0xe7
,
0xdf
,
0xc6
,
0xdf
,
0x35
,
0x00
,
0x71
,
0x54
,
0xd3
,
0xa4
,
0x26
,
0xab
,
0x67
,
0x35
,
0xdf
,
0x8a
,
0x9e
,
0x7f
,
0x1b
,
0x7f
,
0xd7
,
0x00
,
0xc4
,
0x51
,
0x4d
,
0x93
,
0x9a
,
0xac
,
0x9e
,
0xd5
,
0x7c
,
0x2b
,
0xba
,
0x17
,
0x91
,
0x48
,
0x32
,
0x59
,
0x0f
,
0x11
,
0xc3
,
0x64
,
0xa2
,
0x39
,
0x24
,
0x78
,
0xab
,
0x7a
,
0xea
,
0x5e
,
0x44
,
0x22
,
0xc9
,
0x64
,
0x3d
,
0x44
,
0x0c
,
0x93
,
0x89
,
0xe6
,
0x90
,
0xe0
,
0xad
,
0xea
,
0x48
,
0x7a
,
0x75
,
0x0f
,
0x59
,
0x73
,
0xb7
,
0xb0
,
0x42
,
0x62
,
0x6d
,
0x13
,
0x9b
,
0x8e
,
0xe5
,
0x4e
,
0x21
,
0xe9
,
0xd5
,
0x3d
,
0x64
,
0xcd
,
0xdd
,
0xc2
,
0x0a
,
0x89
,
0xb5
,
0x4d
,
0x6c
,
0x3a
,
0x96
,
0x3b
,
0x65
,
0x35
,
0xc4
,
0x38
,
0xc6
,
0x39
,
0x54
,
0x5a
,
0xce
,
0xc8
,
0xb5
,
0x88
,
0x15
,
0x33
,
0xa0
,
0x0a
,
0x95
,
0xd5
,
0x10
,
0xe3
,
0x18
,
0xe7
,
0x50
,
0x69
,
0x39
,
0x23
,
0xd7
,
0x22
,
0x56
,
0xcc
,
0x80
,
0x2a
,
0x79
,
0x22
,
0x98
,
0x52
,
0x75
,
0x45
,
0xa2
,
0xfb
,
0x90
,
0xf7
,
0xcd
,
0xd7
,
0x0c
,
0x24
,
0x43
,
0xa0
,
0xe4
,
0x89
,
0x60
,
0x4a
,
0xd5
,
0x15
,
0x89
,
0xee
,
0x43
,
0xde
,
0x37
,
0x5f
,
0x33
,
0x90
,
0x0c
,
0x81
,
0x1e
,
0x4b
,
0xd1
,
0x6e
,
0xac
,
0x10
,
0xc6
,
0xaf
,
0xb8
,
0x6c
,
0x7f
,
0xe1
,
0xd1
,
0x98
,
0xec
,
0x68
,
0x7a
,
0x2c
,
0x45
,
0xbb
,
0xb1
,
0x42
,
0x18
,
0xbf
,
0xe2
,
0xb2
,
0xfd
,
0x85
,
0x47
,
0x63
,
0xb2
,
0xa3
,
0x72
,
0xd7
,
0xe2
,
0x93
,
0xfb
,
0xfb
,
0x67
,
0xd8
,
0xef
,
0x34
,
0xa8
,
0x34
,
0xc9
,
0xbb
,
0x8a
,
0x7f
,
0xc9
,
0x5d
,
0x8b
,
0x4f
,
0xee
,
0xef
,
0x9f
,
0x61
,
0xbf
,
0xd3
,
0xa0
,
0xd2
,
0x24
,
0xef
,
0x2a
,
0xfe
,
0x02
,
0xdb
,
0xd1
,
0x66
,
0xdf
,
0x8e
,
0x72
,
0x68
,
0x39
,
0xe5
,
0x97
,
0x61
,
0xea
,
0x2d
,
0x92
,
0x5e
,
0x09
,
0x6c
,
0x47
,
0x9b
,
0x7d
,
0x3b
,
0xca
,
0xa1
,
0xe5
,
0x94
,
0x5f
,
0x86
,
0xa9
,
0xb7
,
0x48
,
0x7a
,
0xf7
,
0x16
,
0x31
,
0xfe
,
0xa3
,
0xc1
,
0xb6
,
0xc8
,
0x2d
,
0xde
,
0x9b
,
0xf8
,
0x7c
,
0xff
,
0xa6
,
0xdb
,
0xdd
,
0x5b
,
0xc4
,
0xf8
,
0x8f
,
0x06
,
0xdb
,
0x22
,
0xb7
,
0x78
,
0x6f
,
0xe2
,
0xf3
,
0xfd
,
0x9b
,
0x6e
,
0x8b
,
0xf7
,
0x2e
,
0x79
,
0x11
,
0xca
,
0xa8
,
0x47
,
0x0c
,
0x75
,
0x19
,
0x2c
,
0xcf
,
0x13
,
0x49
,
0x26
,
0x2f
,
0xde
,
0xbb
,
0xe4
,
0x45
,
0x28
,
0xa3
,
0x1e
,
0x31
,
0xd4
,
0x65
,
0xb0
,
0x3c
,
0x4f
,
0x24
,
0x99
,
0x8b
,
0x90
,
0x7a
,
0xd5
,
0x88
,
0x78
,
0x87
,
0x8f
,
0x18
,
0x76
,
0x03
,
0x8a
,
0xec
,
0x55
,
0xbd
,
0x4f
,
0x2c
,
0x42
,
0xea
,
0x55
,
0x23
,
0xe2
,
0x1d
,
0x3e
,
0x62
,
0xd8
,
0x0d
,
0x28
,
0xb2
,
0x57
,
0xf5
,
0x3e
,
0x92
,
0xe8
,
0x73
,
0xc8
,
0x05
,
0xd4
,
0xa4
,
0xb3
,
0x80
,
0xcf
,
0x66
,
0xd1
,
0x3b
,
0xb7
,
0xeb
,
0x52
,
0x49
,
0xa2
,
0xcf
,
0x21
,
0x17
,
0x50
,
0x93
,
0xce
,
0x02
,
0x3e
,
0x9b
,
0x45
,
0xef
,
0xdc
,
0xae
,
0x4b
,
0x32
,
0xe0
,
0x0b
,
0x58
,
0x02
,
0xd8
,
0x83
,
0x98
,
0xa9
,
0x5b
,
0xcd
,
0xaf
,
0x8b
,
0x31
,
0x5f
,
0x36
,
0xc9
,
0x80
,
0x2f
,
0x60
,
0x09
,
0xe0
,
0x50
,
0xe1
,
0xc5
,
0xfc
,
0xba
,
0x28
,
0xab
,
0x17
,
0xd7
,
0x99
,
0xce
,
0x94
,
0xe1
,
0xcd
,
0x8b
,
0x13
,
0x5b
,
0x18
,
0x5e
,
0x83
,
0x8c
,
0xed
,
0x5c
,
0xba
,
0xb2
,
0x9e
,
0x32
,
0xbe
,
0x79
,
0x71
,
0x62
,
0x0b
,
0xe3
,
0x6b
,
0x90
,
0xb1
,
0x9d
,
0x4b
,
0x57
,
0xd6
,
0x94
,
0x1a
,
0xd4
,
0x60
,
0xbb
,
0xe4
,
0x1e
,
0xcc
,
0x31
,
0x4c
,
0x55
,
0x3a
,
0x17
,
0x1d
,
0x5e
,
0x5e
,
0xe3
,
0x92
,
0x6e
,
0x97
,
0x5c
,
0x84
,
0x39
,
0x86
,
0xa9
,
0x4b
,
0xe7
,
0xa2
,
0xcb
,
0xcb
,
0xab
,
0x5c
,
0x92
,
0xc6
,
0x34
,
0xfe
,
0xad
,
0xa9
,
0x72
,
0xe5
,
0x72
,
0x2d
,
0x32
,
0x97
,
0xdd
,
0xfa
,
0x5b
,
0xe7
,
0xd4
,
0xdd
,
0xbf
,
0x35
,
0x55
,
0xb2
,
0x5c
,
0xae
,
0x45
,
0xe6
,
0xb2
,
0x63
,
0x7f
,
0xeb
,
0x1c
,
0xbb
,
0x9b
,
0x70
,
0x84
,
0x53
,
0xb3
,
0xa1
,
0x07
,
0x77
,
0x20
,
0x2b
,
0xf0
,
0x79
,
0xce
,
0x16
,
0x04
,
0xd3
,
0xd2
,
0xb2
,
0x6c
,
0x36
,
0xf4
,
0xe2
,
0x0e
,
0x64
,
0x05
,
0x3e
,
0xcf
,
0xd9
,
0x82
,
0x60
,
0x5a
,
0x5a
,
0xb6
,
0x4f
,
0x7d
,
0x22
,
0x5e
,
0xe6
,
0x05
,
0xbe
,
0x12
,
0x31
,
0x8c
,
0x9f
,
0x27
,
0xf2
,
0x88
,
0x5f
,
0x2c
,
0x3f
,
0xc4
,
0xeb
,
0xbc
,
0xc0
,
0x57
,
0x22
,
0x86
,
0xf1
,
0xf3
,
0x44
,
0x2e
,
0xf1
,
0xcb
,
0xe5
,
0x07
,
0xf1
,
0x88
,
0x5f
,
0x2c
,
0xeb
,
0xfd
,
0x29
,
0x2f
,
0x9c
,
0x03
,
0xd8
,
0x12
,
0x2b
,
0x98
,
0xdc
,
0xb0
,
0x3e
,
0xcb
,
0x65
,
0xbd
,
0x3f
,
0xe5
,
0xa5
,
0x73
,
0x00
,
0x5b
,
0x62
,
0x05
,
0x93
,
0x1b
,
0xd6
,
0xeb
,
0x56
,
0xb7
,
0xfa
,
0xaf
,
0x02
,
0x86
,
0x5d
,
0x81
,
0x6a
,
0x39
,
0xe6
,
0xc5
,
0x84
,
0xc8
,
0x26
,
0x87
,
0x03
,
0xff
,
0x59
,
0xc0
,
0xb0
,
0x2b
,
0x50
,
0x2d
,
0xc7
,
0xbc
,
0x98
,
0x10
,
0xd9
,
0xe8
,
0x70
,
0x40
,
0xc3
,
0x1a
,
0xf6
,
0x36
,
0x2d
,
0xea
,
0x6d
,
0x8c
,
0x67
,
0x07
,
0xbd
,
0x17
,
0xdc
,
0xa7
,
0x05
,
0xcc
,
0xbf
,
0xfe
,
0xa6
,
0x45
,
0xfd
,
0x8d
,
0xf1
,
0xec
,
0xa0
,
0xf7
,
0x82
,
0xfb
,
0xb4
,
0x80
,
0xf9
,
0x37
,
0xd2
,
0x91
,
0x0e
,
0xe9
,
0x69
,
0x70
,
0x25
,
0x9d
,
0xc8
,
0x3e
,
0x8d
,
0x63
,
0xf8
,
0x70
,
0x95
,
0x4c
,
0x66
,
0x21
,
0x3d
,
0x0d
,
0xae
,
0xa4
,
0x13
,
0xd9
,
0xa7
,
0x71
,
0x0c
,
0x1f
,
0xae
,
0x92
,
0xc9
,
0x4c
,
0xf8
,
0xc2
,
0x97
,
0x89
,
0xff
,
0x21
,
0x1f
,
0x27
,
0x2c
,
0x58
,
0xd6
,
0x40
,
0x6a
,
0xd8
,
0x05
,
0x38
,
0x76
,
0x32
,
0xf1
,
0x4f
,
0xe4
,
0xe3
,
0x84
,
0x05
,
0xcb
,
0x1a
,
0x48
,
0x0d
,
0xbb
,
0x00
,
0xc7
,
0xee
,
0xc8
,
0x47
,
0xe6
,
0x84
,
0x3d
,
0x37
,
0xe6
,
0x4c
,
0x83
,
0xb1
,
0x0a
,
0x79
,
0x19
,
0xf3
,
0x6f
,
0xe6
,
0xf6
,
0x9c
,
0xb0
,
0x27
,
0xc7
,
0x9c
,
0x69
,
0x30
,
0x8e
,
0x42
,
0xce
,
0xbf
,
0x99
,
0xdb
,
0xc7
,
0xc4
,
0xbe
,
0x31
,
0xb1
,
0xaf
,
0xc6
,
0x62
,
0xe8
,
0x4f
,
0x63
,
0x49
,
0x31
,
0xb7
,
0xdb
,
0xe1
,
0xc8
,
0x90
,
0xc6
,
0x1a
,
0x8b
,
0xc1
,
0x3f
,
0x8d
,
0x25
,
0xc5
,
0xdc
,
0x6e
,
0x87
,
0x63
,
0x43
,
0x1a
,
0x0b
,
0xc2
,
0xf8
,
0x82
,
0x30
,
0xfe
,
0xa8
,
0x41
,
0x99
,
0xcb
,
0x12
,
0x17
,
0xf6
,
0x4d
,
0x3c
,
0xf3
,
0xb4
,
0x44
,
0xe6
,
0xa3
,
0x06
,
0x9b
,
0x5c
,
0x96
,
0xb8
,
0xb4
,
0x6f
,
0xe2
,
0x99
,
0xa7
,
0x25
,
0x32
,
0x2f
,
0x3c
,
0x2c
,
0x85
,
0x87
,
0xc9
,
0xf6
,
0xbe
,
0x74
,
0x58
,
0x7a
,
0xf5
,
0x61
,
0x99
,
0xd8
,
0x61
,
0x51
,
0xe4
,
0xb3
,
0xb5
,
0xf2
,
0xb0
,
0xf4
,
0xea
,
0xc3
,
0x32
,
0xb1
,
0xc3
,
0xa2
,
0xc8
,
0x67
,
0xd7
,
0x46
,
0x3e
,
0xb7
,
0x6b
,
0x23
,
0x9f
,
0x5b
,
0x8e
,
0xfc
,
0x23
,
0xd8
,
0x8c
,
0xe9
,
0x17
,
0x78
,
0xe8
,
0x13
,
0x48
,
0xd3
,
0x1c
,
0xf9
,
0x47
,
0x50
,
0x8e
,
0xe9
,
0x17
,
0x78
,
0xe8
,
0x13
,
0x48
,
0xd3
,
0xb9
,
0x8a
,
0xba
,
0xaa
,
0xb9
,
0x8a
,
0xba
,
0xaa
,
0xbf
,
0xc8
,
0x27
,
0x98
,
0xad
,
0x1a
,
0x27
,
0x50
,
0x91
,
0xae
,
0x63
,
0xc1
,
0xc0
,
0xc8
,
0x27
,
0x98
,
0xad
,
0x1a
,
0x27
,
0x50
,
0x91
,
0xae
,
0x63
,
0xc1
,
0xc6
,
0x24
,
0x98
,
0x4d
,
0xc6
,
0x24
,
0x98
,
0x4d
,
0xfe
,
0x9f
,
0x18
,
0x76
,
0xe0
,
0x1e
,
0x26
,
0x37
,
0x77
,
0x92
,
0xa2
,
0x0e
,
0xfe
,
0x9f
,
0x18
,
0x76
,
0xe0
,
0x1e
,
0x26
,
0x37
,
0x77
,
0x92
,
0xa2
,
0x0e
,
0x79
,
0x9f
,
0x8b
,
0x56
,
0x79
,
0x9f
,
0x8b
,
0x56
,
0xea
,
0x54
,
0x63
,
0x1d
,
0x33
,
0x71
,
0x36
,
0x56
,
0xc0
,
0xda
,
0xaf
,
0x01
,
0xea
,
0x54
,
0x63
,
0x5d
,
0x33
,
0x71
,
0x36
,
0x56
,
0xc0
,
0xda
,
0xaf
,
0x01
,
0xa2
,
0x3f
,
0x68
,
0xa8
,
0xa2
,
0xbf
,
0x67
,
0xa8
,
0x04
,
0xf9
,
0x66
,
0xab
,
0xdf
,
0x1b
,
0x74
,
0x86
,
0xfa
,
0x06
,
0x2a
,
0x43
,
0x04
,
0xf9
,
0x66
,
0xab
,
0xdf
,
0x1b
,
0x74
,
0x86
,
0xfa
,
0x06
,
0xda
,
0x84
,
0xc2
,
0x59
,
0x67
,
0xd8
,
0xe1
,
0xac
,
0x33
,
0x6c
,
0x37
,
0x71
,
0xe3
,
0x4c
,
0xd7
,
0x50
,
0x05
,
0x36
,
0x87
,
0xb8
,
0xd1
,
0x1d
,
0x6e
,
0xe2
,
0xc6
,
0x99
,
0xae
,
0xa1
,
0x0a
,
0x94
,
0x87
,
0xb8
,
0xd1
,
0x1d
,
0x3c
,
0x6b
,
0xe1
,
0x4e
,
0x3c
,
0x6b
,
0xe1
,
0x4e
,
0xb7
,
0x7f
,
0x3a
,
0xd4
,
0x53
,
0x08
,
0xc1
,
0x96
,
0x62
,
0xf5
,
0x4e
,
0x87
,
0xb7
,
0x7f
,
0x3a
,
0xd4
,
0x53
,
0x08
,
0xc1
,
0x96
,
0x62
,
0xf5
,
0x4e
,
0x87
,
0x8c
,
0x97
,
0x46
,
0x65
,
0x8c
,
0x97
,
0x46
,
0x9b
,
0x50
,
0x6c
,
0x9c
,
0x0e
,
0xdb
,
0x3d
,
0xdc
,
0x39
,
0x6f
,
0xe9
,
0x99
,
0xda
,
0x28
,
0x36
,
0x4e
,
0x87
,
0xed
,
0x1e
,
0xee
,
0x9c
,
0xb7
,
0xf4
,
0x4c
,
0xed
,
0x27
,
0x50
,
0x0c
,
0xff
,
0x4f
,
0xa0
,
0x18
,
0xfe
,
0xc5
,
0x63
,
0xd2
,
0x4f
,
0xbb
,
0x2f
,
0xba
,
0xbd
,
0xb3
,
0xae
,
0xbe
,
0x81
,
0xe4
,
0x31
,
0xe9
,
0xa7
,
0xdd
,
0x17
,
0xdd
,
0xde
,
0x59
,
0x57
,
0xdf
,
0x40
,
0x00
,
0xb9
,
0xa7
,
0xc7
,
0x00
,
0x72
,
0x4f
,
0x8f
,
0x07
,
0x0f
,
0xbf
,
0xfe
,
0x5a
,
0xd7
,
0xd4
,
0xf7
,
0x93
,
0x2f
,
0xf5
,
0x14
,
0x83
,
0x87
,
0x5f
,
0x7f
,
0xad
,
0x6b
,
0xea
,
0xfb
,
0xc9
,
0x97
,
0x7a
,
0x0a
,
0x15
,
0x21
,
0xfb
,
0xb4
,
0x2a
,
0x42
,
0xf6
,
0x69
,
0xb7
,
0xfe
,
0xd5
,
0x63
,
0x3d
,
0x5d
,
0x6b
,
0x70
,
0x5f
,
0x47
,
0xff
,
0xcb
,
0x5b
,
0xff
,
0xea
,
0xb1
,
0x9e
,
0xae
,
0x35
,
0xb8
,
0xaf
,
0xa3
,
0x7f
,
0x66
,
0x4c
,
0x78
,
0xf8
,
0xa3
,
0x98
,
0xf0
,
0xf0
,
0x27
,
0x97
,
0xbe
,
0x81
,
0xb6
,
0x00
,
0xa2
,
0xff
,
0x72
,
0x42
,
0xc5
,
0x7e
,
0xfc
,
0x4b
,
0xdf
,
0x40
,
0x5b
,
0x00
,
0xd1
,
0xbf
,
0x39
,
0xa1
,
0x62
,
0x3f
,
0x7e
,
0x79
,
0xeb
,
0xa9
,
0xda
,
0xe2
,
0xd6
,
0x53
,
0xb5
,
0x4f
,
0x78
,
0x3a
,
0x85
,
0x4f
,
0x75
,
0x94
,
0x87
,
0x74
,
0xc3
,
0xb2
,
0xc4
,
0x27
,
0x3c
,
0x9d
,
0xc2
,
0xe7
,
0x3a
,
0xca
,
0x43
,
0xba
,
0x61
,
0x59
,
0xe2
,
0xf8
,
0x26
,
0x99
,
0x10
,
0xf1
,
0x4d
,
0x32
,
0x21
,
0x94
,
0xe8
,
0x5a
,
0xed
,
0x09
,
0x40
,
0xd4
,
0x59
,
0x99
,
0x02
,
0xa7
,
0xdd
,
0x4a
,
0x74
,
0xad
,
0xf6
,
0x04
,
0x20
,
0xea
,
0xae
,
0x4c
,
0x81
,
0xd3
,
0x6e
,
0xb3
,
0xf5
,
0x4c
,
0x80
,
0x66
,
0xeb
,
0x99
,
0x00
,
0x3d
,
0xc3
,
0xbd
,
0xf3
,
0x56
,
0x57
,
0xd7
,
0x50
,
0x01
,
0x32
,
0xbd
,
0x7e
,
0x9e
,
0xe1
,
0xde
,
0x79
,
0xab
,
0xab
,
0x6b
,
0xa8
,
0x00
,
0x99
,
0x5e
,
0xbf
,
0xd5
,
0x15
,
0x1a
,
0x1e
,
0xab
,
0x2b
,
0x34
,
0x3c
,
0x3a
,
0xee
,
0x0d
,
0x5a
,
0x7a
,
0xba
,
0xf6
,
0x53
,
0xf8
,
0x80
,
0x3d
,
0xd0
,
0x1d
,
0xf7
,
0x06
,
0x2d
,
0x3d
,
0x5d
,
0xfb
,
0x29
,
0x7c
,
0xc0
,
0x1e
,
0xe9
,
0xb2
,
0x92
,
0x83
,
0x91
,
0x65
,
0x25
,
0x07
,
0x23
,
0xd3
,
0x91
,
0x42
,
0x0a
,
0x90
,
0xe9
,
0x34
,
0x8f
,
0x5b
,
0xc2
,
0x8b
,
0x83
,
0xe9
,
0x48
,
0x21
,
0x05
,
0xc8
,
0x74
,
0x9a
,
0xc7
,
0x2d
,
0xe1
,
0xc5
,
0xc1
,
0x51
,
0xa3
,
0xdb
,
0xed
,
0xa3
,
0x46
,
0xb7
,
0xdb
,
0xe9
,
0x3e
,
0xd7
,
0x35
,
0x46
,
0x3d
,
0xeb
,
0x74
,
0x3b
,
0x83
,
0x76
,
0xab
,
0x74
,
0x9f
,
0xeb
,
0x1a
,
0xa3
,
0x9e
,
0x75
,
0xba
,
0x9d
,
0x41
,
0xbb
,
0xd5
,
0xd4
,
0x53
,
0xf5
,
0xbf
,
0xa9
,
0xa7
,
0xea
,
0x7f
,
0xd5
,
0x00
,
0xa6
,
0xf6
,
0x5c
,
0x0d
,
0x39
,
0x8f
,
0x60
,
0xfb
,
0xf9
,
0x92
,
0x6a
,
0x00
,
0x53
,
0x7b
,
0xae
,
0x06
,
0x9d
,
0x47
,
0xb0
,
0xfd
,
0x7c
,
0x49
,
0x8e
,
0xba
,
0xc9
,
0x30
,
0x1c
,
0x75
,
0x8b
,
0x61
,
0x72
,
0xd3
,
0xb5
,
0x27
,
0x7b
,
0x7a
,
0x44
,
0x0e
,
0xa8
,
0x6f
,
0x3b
,
0x57
,
0xb9
,
0xe9
,
0xda
,
0x93
,
0x3d
,
0x3d
,
0x22
,
0x07
,
0xd4
,
0xb7
,
0x9d
,
0x2b
,
0x63
,
0x03
,
0x7d
,
0x01
,
0xc6
,
0x06
,
0xfa
,
0x02
,
0x4a
,
0x62
,
0x0b
,
0xb3
,
0xe1
,
0x9d
,
0x76
,
0xfc
,
0x0c
,
0x36
,
0x13
,
0xb9
,
0x25
,
0xb1
,
0x85
,
0xd9
,
0xf0
,
0x4e
,
0x3b
,
0x7e
,
0x06
,
0xe5
,
0x44
,
0xee
,
0xa0
,
0xed
,
0x08
,
0xc4
,
0x83
,
0xb6
,
0x23
,
0x10
,
0x6f
,
0x46
,
0x7b
,
0x7b
,
0x11
,
0x63
,
0x39
,
0xcb
,
0x8c
,
0x8d
,
0x8b
,
0x1c
,
0x9b
,
0xd1
,
0xde
,
0x5e
,
0xc4
,
0x58
,
0xce
,
0x32
,
0x63
,
0xe3
,
0x22
,
0xc7
,
0x7f
,
0xe5
,
0x3e
,
0xfc
,
0xff
,
0x8d
,
0xfb
,
0xf0
,
0xbf
,
0x01
,
0x00
,
0x00
,
0xff
,
0xff
,
0x14
,
0x2c
,
0xb6
,
0xdb
,
0xfb
,
0x15
,
0x6f
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x4a
,
0x7b
,
0x68
,
0x23
,
0xff
,
0x15
,
0x00
,
0x00
,
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/mix/wallet/mix.go
View file @
23751000
...
@@ -292,7 +292,7 @@ func (policy *mixPolicy) rescanNotes() {
...
@@ -292,7 +292,7 @@ func (policy *mixPolicy) rescanNotes() {
}
}
mixTxInfos
:=
msg
.
(
*
mixTy
.
MixTxListResp
)
mixTxInfos
:=
msg
.
(
*
mixTy
.
MixTxListResp
)
if
mixTxInfos
==
nil
{
if
mixTxInfos
==
nil
{
bizlog
.
Info
(
"privacy ReqTxInfosByAddr ReplyTxInfos is nil"
)
bizlog
.
Info
(
"
rescanNotes mix
privacy ReqTxInfosByAddr ReplyTxInfos is nil"
)
break
break
}
}
txcount
:=
len
(
mixTxInfos
.
Txs
)
txcount
:=
len
(
mixTxInfos
.
Txs
)
...
@@ -300,7 +300,11 @@ func (policy *mixPolicy) rescanNotes() {
...
@@ -300,7 +300,11 @@ func (policy *mixPolicy) rescanNotes() {
var
ReqHashes
types
.
ReqHashes
var
ReqHashes
types
.
ReqHashes
ReqHashes
.
Hashes
=
make
([][]
byte
,
len
(
mixTxInfos
.
Txs
))
ReqHashes
.
Hashes
=
make
([][]
byte
,
len
(
mixTxInfos
.
Txs
))
for
index
,
tx
:=
range
mixTxInfos
.
Txs
{
for
index
,
tx
:=
range
mixTxInfos
.
Txs
{
ReqHashes
.
Hashes
[
index
]
=
tx
.
GetHash
()
hash
,
err
:=
common
.
FromHex
(
tx
.
Hash
)
if
err
!=
nil
{
bizlog
.
Error
(
"rescanNotes mix decode hash"
,
"hash"
,
tx
.
Hash
)
}
ReqHashes
.
Hashes
[
index
]
=
hash
}
}
if
txcount
>
0
{
if
txcount
>
0
{
...
...
plugin/dapp/mix/wallet/mixbizdb.go
View file @
23751000
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
package
wallet
package
wallet
import
(
import
(
"
encoding/hex
"
"
github.com/33cn/chain33/common
"
commondb
"github.com/33cn/chain33/common/db"
commondb
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/common/db/table"
"github.com/33cn/chain33/common/db/table"
...
@@ -46,7 +46,7 @@ func (p *mixPolicy) processMixTx(tx *types.Transaction, height, index int64) (*t
...
@@ -46,7 +46,7 @@ func (p *mixPolicy) processMixTx(tx *types.Transaction, height, index int64) (*t
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
}
}
table
:=
NewMixTable
(
p
.
getWalletOperate
()
.
GetDBStore
(
))
table
:=
NewMixTable
(
commondb
.
NewKVDB
(
p
.
getWalletOperate
()
.
GetDBStore
()
))
switch
v
.
GetTy
()
{
switch
v
.
GetTy
()
{
//deposit 匹配newcommits,属于自己的存到数据库
//deposit 匹配newcommits,属于自己的存到数据库
case
mixTy
.
MixActionDeposit
:
case
mixTy
.
MixActionDeposit
:
...
@@ -227,12 +227,12 @@ func (e *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e
...
@@ -227,12 +227,12 @@ func (e *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e
}
}
var
rep
mixTy
.
WalletIndexResp
var
rep
mixTy
.
WalletIndexResp
for
_
,
row
:=
range
rows
{
for
_
,
row
:=
range
rows
{
r
,
ok
:=
row
.
Data
.
(
*
mixTy
.
Wallet
Inde
xInfo
)
r
,
ok
:=
row
.
Data
.
(
*
mixTy
.
Wallet
DbMi
xInfo
)
if
!
ok
{
if
!
ok
{
bizlog
.
Error
(
"listMixInfos"
,
"err"
,
"bad row type"
)
bizlog
.
Error
(
"listMixInfos"
,
"err"
,
"bad row type"
)
return
nil
,
types
.
ErrDecode
return
nil
,
types
.
ErrDecode
}
}
rep
.
Datas
=
append
(
rep
.
Datas
,
r
)
rep
.
Datas
=
append
(
rep
.
Datas
,
r
.
Info
)
}
}
return
&
rep
,
nil
return
&
rep
,
nil
}
}
...
@@ -273,7 +273,7 @@ func (p *mixPolicy) processSecretGroup(noteHash string, secretGroup *mixTy.DHSec
...
@@ -273,7 +273,7 @@ func (p *mixPolicy) processSecretGroup(noteHash string, secretGroup *mixTy.DHSec
//可能自己账户里面既有spender,也有returner 或authorize,都要解一遍
//可能自己账户里面既有spender,也有returner 或authorize,都要解一遍
info
,
err
:=
p
.
decodeSecret
(
noteHash
,
secretGroup
.
Spender
,
privacyKeys
)
info
,
err
:=
p
.
decodeSecret
(
noteHash
,
secretGroup
.
Spender
,
privacyKeys
)
if
err
!=
nil
{
if
err
!=
nil
{
bizlog
.
Info
(
"processSecretGroup.spender"
,
"err"
,
err
)
bizlog
.
Error
(
"processSecretGroup.spender"
,
"err"
,
err
)
}
}
if
info
!=
nil
{
if
info
!=
nil
{
p
.
addTable
(
info
,
heightIndex
,
table
)
p
.
addTable
(
info
,
heightIndex
,
table
)
...
@@ -281,7 +281,7 @@ func (p *mixPolicy) processSecretGroup(noteHash string, secretGroup *mixTy.DHSec
...
@@ -281,7 +281,7 @@ func (p *mixPolicy) processSecretGroup(noteHash string, secretGroup *mixTy.DHSec
info
,
err
=
p
.
decodeSecret
(
noteHash
,
secretGroup
.
Returner
,
privacyKeys
)
info
,
err
=
p
.
decodeSecret
(
noteHash
,
secretGroup
.
Returner
,
privacyKeys
)
if
err
!=
nil
{
if
err
!=
nil
{
bizlog
.
Info
(
"processSecretGroup.Returner"
,
"err"
,
err
)
bizlog
.
Error
(
"processSecretGroup.Returner"
,
"err"
,
err
)
}
}
if
info
!=
nil
{
if
info
!=
nil
{
p
.
addTable
(
info
,
heightIndex
,
table
)
p
.
addTable
(
info
,
heightIndex
,
table
)
...
@@ -289,7 +289,7 @@ func (p *mixPolicy) processSecretGroup(noteHash string, secretGroup *mixTy.DHSec
...
@@ -289,7 +289,7 @@ func (p *mixPolicy) processSecretGroup(noteHash string, secretGroup *mixTy.DHSec
info
,
err
=
p
.
decodeSecret
(
noteHash
,
secretGroup
.
Authorize
,
privacyKeys
)
info
,
err
=
p
.
decodeSecret
(
noteHash
,
secretGroup
.
Authorize
,
privacyKeys
)
if
err
!=
nil
{
if
err
!=
nil
{
bizlog
.
Info
(
"processSecretGroup.Authorize"
,
"err"
,
err
)
bizlog
.
Error
(
"processSecretGroup.Authorize"
,
"err"
,
err
)
}
}
if
info
!=
nil
{
if
info
!=
nil
{
p
.
addTable
(
info
,
heightIndex
,
table
)
p
.
addTable
(
info
,
heightIndex
,
table
)
...
@@ -304,7 +304,7 @@ func (p *mixPolicy) decodeSecret(noteHash string, dhSecret *mixTy.DHSecret, priv
...
@@ -304,7 +304,7 @@ func (p *mixPolicy) decodeSecret(noteHash string, dhSecret *mixTy.DHSecret, priv
tempPubKey
:=
&
mixTy
.
PubKey
{
X
:
dhSecret
.
Epk
.
X
,
Y
:
dhSecret
.
Epk
.
Y
}
tempPubKey
:=
&
mixTy
.
PubKey
{
X
:
dhSecret
.
Epk
.
X
,
Y
:
dhSecret
.
Epk
.
Y
}
for
_
,
key
:=
range
privacyKeys
{
for
_
,
key
:=
range
privacyKeys
{
cryptData
,
err
:=
hex
.
DecodeString
(
dhSecret
.
Secret
)
cryptData
,
err
:=
common
.
FromHex
(
dhSecret
.
Secret
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"decode for notehash=%s,crypt=%s"
,
noteHash
,
dhSecret
.
Secret
)
return
nil
,
errors
.
Wrapf
(
err
,
"decode for notehash=%s,crypt=%s"
,
noteHash
,
dhSecret
.
Secret
)
}
}
...
@@ -341,7 +341,7 @@ func (p *mixPolicy) decodeSecret(noteHash string, dhSecret *mixTy.DHSecret, priv
...
@@ -341,7 +341,7 @@ func (p *mixPolicy) decodeSecret(noteHash string, dhSecret *mixTy.DHSecret, priv
}
}
//账户地址
//账户地址
info
.
Account
=
key
.
Addr
info
.
Account
=
key
.
Addr
info
.
Secret
=
&
rawData
return
&
info
,
nil
return
&
info
,
nil
}
}
...
...
plugin/dapp/mix/wallet/mixbizdb_test.go
View file @
23751000
...
@@ -93,7 +93,7 @@ func TestEncodeSecretData(t *testing.T) {
...
@@ -93,7 +93,7 @@ func TestEncodeSecretData(t *testing.T) {
privacy
,
err
:=
newPrivacyWithPrivKey
(
keyByte
)
privacy
,
err
:=
newPrivacyWithPrivKey
(
keyByte
)
assert
.
Equal
(
t
,
nil
,
err
)
assert
.
Equal
(
t
,
nil
,
err
)
req
:=
&
mixTy
.
EncryptSecretData
{
ReceivingPk
:
privacy
.
ShareSecretKey
.
ReceivingPk
,
Secret
:
ret
.
Encode
}
req
:=
&
mixTy
.
EncryptSecretData
{
ReceivingPk
:
privacy
.
ShareSecretKey
.
ReceivingPk
,
Secret
:
ret
.
Encode
d
}
dhSecret
,
err
:=
encryptSecretData
(
req
)
dhSecret
,
err
:=
encryptSecretData
(
req
)
assert
.
Nil
(
t
,
err
)
assert
.
Nil
(
t
,
err
)
t
.
Log
(
dhSecret
)
t
.
Log
(
dhSecret
)
...
...
plugin/dapp/mix/wallet/mixbizpolicy.go
View file @
23751000
...
@@ -141,5 +141,5 @@ func (policy *mixPolicy) Call(funName string, in types.Message) (ret types.Messa
...
@@ -141,5 +141,5 @@ func (policy *mixPolicy) Call(funName string, in types.Message) (ret types.Messa
// SignTransaction 对隐私交易进行签名
// SignTransaction 对隐私交易进行签名
func
(
policy
*
mixPolicy
)
SignTransaction
(
key
crypto
.
PrivKey
,
req
*
types
.
ReqSignRawTx
)
(
needSysSign
bool
,
signtxhex
string
,
err
error
)
{
func
(
policy
*
mixPolicy
)
SignTransaction
(
key
crypto
.
PrivKey
,
req
*
types
.
ReqSignRawTx
)
(
needSysSign
bool
,
signtxhex
string
,
err
error
)
{
return
fals
e
,
""
,
types
.
ErrNotSupport
return
tru
e
,
""
,
types
.
ErrNotSupport
}
}
plugin/dapp/mix/wallet/mixbiztable.go
View file @
23751000
...
@@ -16,7 +16,7 @@ index: status
...
@@ -16,7 +16,7 @@ index: status
*/
*/
var
boardOpt
=
&
table
.
Option
{
var
boardOpt
=
&
table
.
Option
{
Prefix
:
"LODB-mix
coin
"
,
Prefix
:
"LODB-mix"
,
Name
:
"wallet"
,
Name
:
"wallet"
,
Primary
:
"heightindex"
,
Primary
:
"heightindex"
,
Index
:
[]
string
{
Index
:
[]
string
{
...
@@ -69,6 +69,8 @@ func (r *MixRow) Get(key string) ([]byte, error) {
...
@@ -69,6 +69,8 @@ func (r *MixRow) Get(key string) ([]byte, error) {
return
[]
byte
(
r
.
TxIndex
),
nil
return
[]
byte
(
r
.
TxIndex
),
nil
case
"noteHash"
:
case
"noteHash"
:
return
[]
byte
(
r
.
Info
.
NoteHash
),
nil
return
[]
byte
(
r
.
Info
.
NoteHash
),
nil
case
"nullifier"
:
return
[]
byte
(
r
.
Info
.
Nullifier
),
nil
case
"authSpendHash"
:
case
"authSpendHash"
:
return
[]
byte
(
r
.
Info
.
AuthSpendHash
),
nil
return
[]
byte
(
r
.
Info
.
AuthSpendHash
),
nil
case
"spender"
:
case
"spender"
:
...
...
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