Commit 4e9e7064 authored by heyubin's avatar heyubin

add by hyb for bug

parent d23433af
...@@ -516,12 +516,11 @@ func createMultiSigAccTransferIn(cmd *cobra.Command, args []string) { ...@@ -516,12 +516,11 @@ func createMultiSigAccTransferIn(cmd *cobra.Command, args []string) {
fmt.Fprintln(os.Stderr, types.ErrAmount) fmt.Fprintln(os.Stderr, types.ErrAmount)
return return
} }
params := &mty.MultiSigExecTransfer{ params := &mty.MultiSigExecTransferTo{
Symbol: symbol, Symbol: symbol,
Amount: int64(math.Trunc((amount+0.0000001)*1e4)) * 1e4, Amount: int64(math.Trunc((amount+0.0000001)*1e4)) * 1e4,
Note: note, Note: note,
Execname: execer, Execname: execer,
From: "",
To: to, To: to,
} }
var res string var res string
...@@ -573,7 +572,7 @@ func createMultiSigAccTransferOut(cmd *cobra.Command, args []string) { ...@@ -573,7 +572,7 @@ func createMultiSigAccTransferOut(cmd *cobra.Command, args []string) {
fmt.Fprintln(os.Stderr, types.ErrAmount) fmt.Fprintln(os.Stderr, types.ErrAmount)
return return
} }
params := &mty.MultiSigExecTransfer{ params := &mty.MultiSigExecTransferFrom{
Symbol: symbol, Symbol: symbol,
Amount: int64(math.Trunc((amount+0.0000001)*1e4)) * 1e4, Amount: int64(math.Trunc((amount+0.0000001)*1e4)) * 1e4,
Note: note, Note: note,
......
...@@ -201,7 +201,7 @@ func (a *action) MultiSigOwnerOperate(AccOwnerOperate *mty.MultiSigOwnerOperate) ...@@ -201,7 +201,7 @@ func (a *action) MultiSigOwnerOperate(AccOwnerOperate *mty.MultiSigOwnerOperate)
//MultiSigExecTransferFrom 首先判断转账的额度是否大于每日限量,小于就直接执行交易,调用ExecTransferFrozen进行转账 //MultiSigExecTransferFrom 首先判断转账的额度是否大于每日限量,小于就直接执行交易,调用ExecTransferFrozen进行转账
//大于每日限量只需要将交易信息记录 //大于每日限量只需要将交易信息记录
//合约中多重签名账户转账到外部账户,multiSigAddr--->Addr //合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecTransfer) (*types.Receipt, error) { func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecTransferFrom) (*types.Receipt, error) {
//首先从statedb中获取MultiSigAccAddr的状态信息 //首先从statedb中获取MultiSigAccAddr的状态信息
multiSigAccAddr := multiSigAccTransfer.From multiSigAccAddr := multiSigAccTransfer.From
...@@ -247,7 +247,7 @@ func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecT ...@@ -247,7 +247,7 @@ func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecT
//MultiSigExecTransferTo 将合约中外部账户转账上的Execname.Symbol资产转到多重签名账户上,from:Addr --->to:multiSigAddr //MultiSigExecTransferTo 将合约中外部账户转账上的Execname.Symbol资产转到多重签名账户上,from:Addr --->to:multiSigAddr
// from地址使用tx中的签名的地址,payload中from地址不使用在 TransferTo交易中 // from地址使用tx中的签名的地址,payload中from地址不使用在 TransferTo交易中
func (a *action) MultiSigExecTransferTo(execTransfer *mty.MultiSigExecTransfer) (*types.Receipt, error) { func (a *action) MultiSigExecTransferTo(execTransfer *mty.MultiSigExecTransferTo) (*types.Receipt, error) {
//from地址校验必须不是多重签名账户地址 //from地址校验必须不是多重签名账户地址
multiSigAccFrom, _ := getMultiSigAccFromDb(a.db, a.fromaddr) multiSigAccFrom, _ := getMultiSigAccFromDb(a.db, a.fromaddr)
...@@ -728,7 +728,7 @@ func (a *action) receiptMultiSigTx(multiSigTx *mty.MultiSigTx, owner *mty.Owner, ...@@ -728,7 +728,7 @@ func (a *action) receiptMultiSigTx(multiSigTx *mty.MultiSigTx, owner *mty.Owner,
} }
//确认并执行转账交易:区分submitTx和confirmtx阶段。 //确认并执行转账交易:区分submitTx和confirmtx阶段。
func (a *action) executeTransferTx(multiSigAcc *mty.MultiSig, newMultiSigTx *mty.MultiSigTx, transfer *mty.MultiSigExecTransfer, confOwner *mty.Owner, subOrConfirm bool) (*types.Receipt, error) { func (a *action) executeTransferTx(multiSigAcc *mty.MultiSig, newMultiSigTx *mty.MultiSigTx, transfer *mty.MultiSigExecTransferFrom, confOwner *mty.Owner, subOrConfirm bool) (*types.Receipt, error) {
//获取对应资产的每日限额信息 //获取对应资产的每日限额信息
var findindex int var findindex int
......
...@@ -34,13 +34,13 @@ func (m *MultiSig) Exec_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx, tx *ty ...@@ -34,13 +34,13 @@ func (m *MultiSig) Exec_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx, tx *ty
} }
//Exec_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr //Exec_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
func (m *MultiSig) Exec_MultiSigExecTransferTo(payload *mty.MultiSigExecTransfer, tx *types.Transaction, index int) (*types.Receipt, error) { func (m *MultiSig) Exec_MultiSigExecTransferTo(payload *mty.MultiSigExecTransferTo, tx *types.Transaction, index int) (*types.Receipt, error) {
action := newAction(m, tx, int32(index)) action := newAction(m, tx, int32(index))
return action.MultiSigExecTransferTo(payload) return action.MultiSigExecTransferTo(payload)
} }
//Exec_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr //Exec_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (m *MultiSig) Exec_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransfer, tx *types.Transaction, index int) (*types.Receipt, error) { func (m *MultiSig) Exec_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransferFrom, tx *types.Transaction, index int) (*types.Receipt, error) {
action := newAction(m, tx, int32(index)) action := newAction(m, tx, int32(index))
return action.MultiSigExecTransferFrom(payload) return action.MultiSigExecTransferFrom(payload)
} }
...@@ -62,7 +62,7 @@ func (m *MultiSig) ExecDelLocal_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx ...@@ -62,7 +62,7 @@ func (m *MultiSig) ExecDelLocal_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx
} }
//ExecDelLocal_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr //ExecDelLocal_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
func (m *MultiSig) ExecDelLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (m *MultiSig) ExecDelLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransferTo, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk { if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil return &types.LocalDBSet{}, nil
} }
...@@ -75,7 +75,7 @@ func (m *MultiSig) ExecDelLocal_MultiSigExecTransferTo(payload *mty.MultiSigExec ...@@ -75,7 +75,7 @@ func (m *MultiSig) ExecDelLocal_MultiSigExecTransferTo(payload *mty.MultiSigExec
} }
//ExecDelLocal_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr //ExecDelLocal_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (m *MultiSig) ExecDelLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (m *MultiSig) ExecDelLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransferFrom, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk { if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil return &types.LocalDBSet{}, nil
} }
......
...@@ -65,7 +65,7 @@ func (m *MultiSig) ExecLocal_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx, t ...@@ -65,7 +65,7 @@ func (m *MultiSig) ExecLocal_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx, t
} }
//ExecLocal_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr //ExecLocal_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
func (m *MultiSig) ExecLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (m *MultiSig) ExecLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransferTo, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk { if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil return &types.LocalDBSet{}, nil
} }
...@@ -79,7 +79,7 @@ func (m *MultiSig) ExecLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTra ...@@ -79,7 +79,7 @@ func (m *MultiSig) ExecLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTra
} }
//ExecLocal_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr //ExecLocal_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (m *MultiSig) ExecLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (m *MultiSig) ExecLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransferFrom, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk { if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil return &types.LocalDBSet{}, nil
} }
......
...@@ -764,16 +764,15 @@ func testMultiSigAccConfirmTx(t *testing.T, driver drivers.Driver, env execEnv, ...@@ -764,16 +764,15 @@ func testMultiSigAccConfirmTx(t *testing.T, driver drivers.Driver, env execEnv,
//合约内转账到多重签名账户 //合约内转账到多重签名账户
func testMultiSigAccExecTransferTo(t *testing.T, driver drivers.Driver, env execEnv, multiSigAddr string) { func testMultiSigAccExecTransferTo(t *testing.T, driver drivers.Driver, env execEnv, multiSigAddr string) {
params := &mty.MultiSigExecTransfer{ params := &mty.MultiSigExecTransferTo{
Symbol: Symbol, Symbol: Symbol,
Amount: InAmount, Amount: InAmount,
Note: "testMultiSigAccExecTransferTo", Note: "testMultiSigAccExecTransferTo",
Execname: Asset, Execname: Asset,
From: AddrD,
To: multiSigAddr, To: multiSigAddr,
} }
tx, _ := multiSigExecTransfer(params, false) tx, _ := multiSigExecTransferTo(params, false)
tx, _ = signTx(tx, PrivKeyD) tx, _ = signTx(tx, PrivKeyD)
receipt, err := driver.Exec(tx, env.index) receipt, err := driver.Exec(tx, env.index)
...@@ -837,7 +836,7 @@ func testMultiSigAccExecTransferTo(t *testing.T, driver drivers.Driver, env exec ...@@ -837,7 +836,7 @@ func testMultiSigAccExecTransferTo(t *testing.T, driver drivers.Driver, env exec
//合约内转账到多重签名账户 //合约内转账到多重签名账户
func testMultiSigAccExecTransferFrom(t *testing.T, driver drivers.Driver, env execEnv, multiSigAddr string) { func testMultiSigAccExecTransferFrom(t *testing.T, driver drivers.Driver, env execEnv, multiSigAddr string) {
params := &mty.MultiSigExecTransfer{ params := &mty.MultiSigExecTransferFrom{
Symbol: Symbol, Symbol: Symbol,
Amount: OutAmount, Amount: OutAmount,
Note: "testMultiSigAccExecTransferFrom", Note: "testMultiSigAccExecTransferFrom",
...@@ -846,7 +845,7 @@ func testMultiSigAccExecTransferFrom(t *testing.T, driver drivers.Driver, env ex ...@@ -846,7 +845,7 @@ func testMultiSigAccExecTransferFrom(t *testing.T, driver drivers.Driver, env ex
To: AddrD, To: AddrD,
} }
tx, _ := multiSigExecTransfer(params, true) tx, _ := multiSigExecTransferFrom(params, true)
tx, _ = signTx(tx, PrivKeyB) tx, _ = signTx(tx, PrivKeyB)
receipt, err := driver.Exec(tx, env.index) receipt, err := driver.Exec(tx, env.index)
...@@ -993,20 +992,24 @@ func multiSigConfirmTx(parm *mty.MultiSigConfirmTx) (*types.Transaction, error) ...@@ -993,20 +992,24 @@ func multiSigConfirmTx(parm *mty.MultiSigConfirmTx) (*types.Transaction, error)
} }
return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig)) return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig))
} }
func multiSigExecTransfer(parm *mty.MultiSigExecTransfer, fromOrTo bool) (*types.Transaction, error) { func multiSigExecTransferTo(parm *mty.MultiSigExecTransferTo, fromOrTo bool) (*types.Transaction, error) {
if parm == nil { if parm == nil {
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
if fromOrTo {
multiSig := &mty.MultiSigAction{ multiSig := &mty.MultiSigAction{
Ty: mty.ActionMultiSigExecTransferFrom, Ty: mty.ActionMultiSigExecTransferTo,
Value: &mty.MultiSigAction_MultiSigExecTransferFrom{MultiSigExecTransferFrom: parm}, Value: &mty.MultiSigAction_MultiSigExecTransferTo{MultiSigExecTransferTo: parm},
} }
return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig)) return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig))
}
func multiSigExecTransferFrom(parm *mty.MultiSigExecTransferFrom, fromOrTo bool) (*types.Transaction, error) {
if parm == nil {
return nil, types.ErrInvalidParam
} }
multiSig := &mty.MultiSigAction{ multiSig := &mty.MultiSigAction{
Ty: mty.ActionMultiSigExecTransferTo, Ty: mty.ActionMultiSigExecTransferFrom,
Value: &mty.MultiSigAction_MultiSigExecTransferTo{MultiSigExecTransferTo: parm}, Value: &mty.MultiSigAction_MultiSigExecTransferFrom{MultiSigExecTransferFrom: parm},
} }
return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig)) return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig))
} }
...@@ -104,14 +104,23 @@ func (m *MultiSig) CheckTx(tx *types.Transaction, index int) error { ...@@ -104,14 +104,23 @@ func (m *MultiSig) CheckTx(tx *types.Transaction, index int) error {
return nil return nil
} }
//MultiSigExecTransfer 交易的检测 //MultiSigExecTransferTo 交易的检测
if ato, ok := payload.(*mty.MultiSigExecTransfer); ok { if ato, ok := payload.(*mty.MultiSigExecTransferTo); ok {
if err := address.CheckAddress(ato.GetTo()); err != nil { if err := address.CheckAddress(ato.GetTo()); err != nil {
return types.ErrInvalidAddress return types.ErrInvalidAddress
} }
//assets check //assets check
return mty.IsAssetsInvalid(ato.GetExecname(), ato.GetSymbol()) return mty.IsAssetsInvalid(ato.GetExecname(), ato.GetSymbol())
} }
//MultiSigExecTransferFrom 交易的检测
if ato, ok := payload.(*mty.MultiSigExecTransferFrom); ok {
if err := address.CheckAddress(ato.GetTo()); err != nil {
return types.ErrInvalidAddress
}
//assets check
return mty.IsAssetsInvalid(ato.GetExecname(), ato.GetSymbol())
}
return nil return nil
} }
func checkAccountCreateTx(ato *mty.MultiSigAccCreate) error { func checkAccountCreateTx(ato *mty.MultiSigAccCreate) error {
...@@ -377,16 +386,26 @@ func (m *MultiSig) saveMultiSigTransfer(tx *types.Transaction, SubmitOrConfirm, ...@@ -377,16 +386,26 @@ func (m *MultiSig) saveMultiSigTransfer(tx *types.Transaction, SubmitOrConfirm,
if err != nil { if err != nil {
panic(err) panic(err)
} }
var to string
multiSigTransfer := &mty.MultiSigExecTransfer{} var execname string
var symbol string
var amount int64
//addr-->multiSigAccAddr //addr-->multiSigAccAddr
//multiSigAccAddr-->addr //multiSigAccAddr-->addr
if SubmitOrConfirm { if SubmitOrConfirm {
if action.Ty == mty.ActionMultiSigExecTransferTo && action.GetMultiSigExecTransferTo() != nil { if action.Ty == mty.ActionMultiSigExecTransferTo && action.GetMultiSigExecTransferTo() != nil {
multiSigTransfer = action.GetMultiSigExecTransferTo() tx := action.GetMultiSigExecTransferTo()
to = tx.To
execname = tx.Execname
symbol = tx.Symbol
amount = tx.Amount
} else if action.Ty == mty.ActionMultiSigExecTransferFrom && action.GetMultiSigExecTransferFrom() != nil { } else if action.Ty == mty.ActionMultiSigExecTransferFrom && action.GetMultiSigExecTransferFrom() != nil {
multiSigTransfer = action.GetMultiSigExecTransferFrom() tx := action.GetMultiSigExecTransferFrom()
to = tx.To
execname = tx.Execname
symbol = tx.Symbol
amount = tx.Amount
} else { } else {
return set, nil return set, nil
} }
...@@ -409,16 +428,15 @@ func (m *MultiSig) saveMultiSigTransfer(tx *types.Transaction, SubmitOrConfirm, ...@@ -409,16 +428,15 @@ func (m *MultiSig) saveMultiSigTransfer(tx *types.Transaction, SubmitOrConfirm,
return nil, err return nil, err
} }
if multiSigTx.TxType == mty.TransferOperate { if multiSigTx.TxType == mty.TransferOperate {
multiSigTransfer = payload.GetMultiSigExecTransferFrom() tx := payload.GetMultiSigExecTransferFrom()
to = tx.To
execname = tx.Execname
symbol = tx.Symbol
amount = tx.Amount
} else { } else {
return set, nil return set, nil
} }
} }
to := multiSigTransfer.To
execname := multiSigTransfer.Execname
symbol := multiSigTransfer.Symbol
amount := multiSigTransfer.Amount
kv, err := updateAddrReciver(m.GetLocalDB(), to, execname, symbol, amount, addOrRollback) kv, err := updateAddrReciver(m.GetLocalDB(), to, execname, symbol, amount, addOrRollback)
if err != nil { if err != nil {
return set, err return set, err
......
...@@ -77,8 +77,8 @@ message MultiSigAction { ...@@ -77,8 +77,8 @@ message MultiSigAction {
MultiSigOwnerOperate multiSigOwnerOperate = 2; MultiSigOwnerOperate multiSigOwnerOperate = 2;
MultiSigAccOperate multiSigAccOperate = 3; MultiSigAccOperate multiSigAccOperate = 3;
MultiSigConfirmTx multiSigConfirmTx = 4;//确认或者撤销已确认 MultiSigConfirmTx multiSigConfirmTx = 4;//确认或者撤销已确认
MultiSigExecTransfer multiSigExecTransferTo = 5;//合约中外部账户转账到多重签名账户,Addr --->multiSigAddr MultiSigExecTransferTo multiSigExecTransferTo = 5;//合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
MultiSigExecTransfer multiSigExecTransferFrom = 6;//合约中多重签名账户转账到外部账户,multiSigAddr--->Addr MultiSigExecTransferFrom multiSigExecTransferFrom = 6;//合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
} }
int32 Ty = 7; int32 Ty = 7;
...@@ -109,10 +109,10 @@ message MultiSigAccOperate { ...@@ -109,10 +109,10 @@ message MultiSigAccOperate {
bool operateFlag = 4; bool operateFlag = 4;
} }
//多重签名合约中账户之间转币操作:增加一个from的字段实现MultiSigAddr<--->addr之间的转账 //多重签名合约中账户之间转币操作:增加一个from的字段实现MultiSigAddr--->addr之间的转账
//需要判断from地址是否是多重签名地址 //需要判断from地址是否是多重签名地址
//将MultiSig合约中from地址上execname+symbol的资产转移到to地址 //将MultiSig合约中from地址上execname+symbol的资产转移到to地址
message MultiSigExecTransfer { message MultiSigExecTransferFrom {
string symbol = 1; string symbol = 1;
int64 amount = 2; int64 amount = 2;
string note = 3; string note = 3;
...@@ -120,6 +120,16 @@ message MultiSigExecTransfer { ...@@ -120,6 +120,16 @@ message MultiSigExecTransfer {
string to = 5; string to = 5;
string from = 6; string from = 6;
} }
//多重签名合约中账户之间转币操作: addr --->MultiSigAddr之间的转账
//需要判断to地址是否是多重签名地址
//将MultiSig合约中签名地址上execname+symbol的资产转移到to地址
message MultiSigExecTransferTo {
string symbol = 1;
int64 amount = 2;
string note = 3;
string execname = 4;
string to = 5;
}
//多重签名账户withdraw交易的确认或者取消确认 //多重签名账户withdraw交易的确认或者取消确认
//multisigaccaddr:多重签名账户地址 //multisigaccaddr:多重签名账户地址
......
...@@ -107,11 +107,11 @@ func testCreateMultiSigConfirmTxCmd(t *testing.T, jrpc *jsonclient.JSONClient) e ...@@ -107,11 +107,11 @@ func testCreateMultiSigConfirmTxCmd(t *testing.T, jrpc *jsonclient.JSONClient) e
return jrpc.Call("multisig.MultiSigConfirmTx", params, nil) return jrpc.Call("multisig.MultiSigConfirmTx", params, nil)
} }
func testCreateMultiSigAccTransferInCmd(t *testing.T, jrpc *jsonclient.JSONClient) error { func testCreateMultiSigAccTransferInCmd(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := &mty.MultiSigExecTransfer{} params := &mty.MultiSigExecTransferTo{}
return jrpc.Call("multisig.MultiSigAccTransferInTx", params, nil) return jrpc.Call("multisig.MultiSigAccTransferInTx", params, nil)
} }
func testCreateMultiSigAccTransferOutCmd(t *testing.T, jrpc *jsonclient.JSONClient) error { func testCreateMultiSigAccTransferOutCmd(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := &mty.MultiSigExecTransfer{} params := &mty.MultiSigExecTransferFrom{}
return jrpc.Call("multisig.MultiSigAccTransferOutTx", params, nil) return jrpc.Call("multisig.MultiSigAccTransferOutTx", params, nil)
} }
......
...@@ -65,7 +65,7 @@ func (c *Jrpc) MultiSigConfirmTx(param *mty.MultiSigConfirmTx, result *interface ...@@ -65,7 +65,7 @@ func (c *Jrpc) MultiSigConfirmTx(param *mty.MultiSigConfirmTx, result *interface
} }
// MultiSigAccTransferInTx :构造在多重签名合约中转账到多重签名账户的交易 // MultiSigAccTransferInTx :构造在多重签名合约中转账到多重签名账户的交易
func (c *Jrpc) MultiSigAccTransferInTx(param *mty.MultiSigExecTransfer, result *interface{}) error { func (c *Jrpc) MultiSigAccTransferInTx(param *mty.MultiSigExecTransferTo, result *interface{}) error {
if param == nil { if param == nil {
return types.ErrInvalidParam return types.ErrInvalidParam
} }
...@@ -78,7 +78,7 @@ func (c *Jrpc) MultiSigAccTransferInTx(param *mty.MultiSigExecTransfer, result * ...@@ -78,7 +78,7 @@ func (c *Jrpc) MultiSigAccTransferInTx(param *mty.MultiSigExecTransfer, result *
} }
// MultiSigAccTransferOutTx :构造在多重签名合约中从多重签名账户转账的交易 // MultiSigAccTransferOutTx :构造在多重签名合约中从多重签名账户转账的交易
func (c *Jrpc) MultiSigAccTransferOutTx(param *mty.MultiSigExecTransfer, result *interface{}) error { func (c *Jrpc) MultiSigAccTransferOutTx(param *mty.MultiSigExecTransferFrom, result *interface{}) error {
if param == nil { if param == nil {
return types.ErrInvalidParam return types.ErrInvalidParam
} }
......
...@@ -470,11 +470,11 @@ type MultiSigAction_MultiSigConfirmTx struct { ...@@ -470,11 +470,11 @@ type MultiSigAction_MultiSigConfirmTx struct {
} }
type MultiSigAction_MultiSigExecTransferTo struct { type MultiSigAction_MultiSigExecTransferTo struct {
MultiSigExecTransferTo *MultiSigExecTransfer `protobuf:"bytes,5,opt,name=multiSigExecTransferTo,proto3,oneof"` MultiSigExecTransferTo *MultiSigExecTransferTo `protobuf:"bytes,5,opt,name=multiSigExecTransferTo,proto3,oneof"`
} }
type MultiSigAction_MultiSigExecTransferFrom struct { type MultiSigAction_MultiSigExecTransferFrom struct {
MultiSigExecTransferFrom *MultiSigExecTransfer `protobuf:"bytes,6,opt,name=multiSigExecTransferFrom,proto3,oneof"` MultiSigExecTransferFrom *MultiSigExecTransferFrom `protobuf:"bytes,6,opt,name=multiSigExecTransferFrom,proto3,oneof"`
} }
func (*MultiSigAction_MultiSigAccCreate) isMultiSigAction_Value() {} func (*MultiSigAction_MultiSigAccCreate) isMultiSigAction_Value() {}
...@@ -524,14 +524,14 @@ func (m *MultiSigAction) GetMultiSigConfirmTx() *MultiSigConfirmTx { ...@@ -524,14 +524,14 @@ func (m *MultiSigAction) GetMultiSigConfirmTx() *MultiSigConfirmTx {
return nil return nil
} }
func (m *MultiSigAction) GetMultiSigExecTransferTo() *MultiSigExecTransfer { func (m *MultiSigAction) GetMultiSigExecTransferTo() *MultiSigExecTransferTo {
if x, ok := m.GetValue().(*MultiSigAction_MultiSigExecTransferTo); ok { if x, ok := m.GetValue().(*MultiSigAction_MultiSigExecTransferTo); ok {
return x.MultiSigExecTransferTo return x.MultiSigExecTransferTo
} }
return nil return nil
} }
func (m *MultiSigAction) GetMultiSigExecTransferFrom() *MultiSigExecTransfer { func (m *MultiSigAction) GetMultiSigExecTransferFrom() *MultiSigExecTransferFrom {
if x, ok := m.GetValue().(*MultiSigAction_MultiSigExecTransferFrom); ok { if x, ok := m.GetValue().(*MultiSigAction_MultiSigExecTransferFrom); ok {
return x.MultiSigExecTransferFrom return x.MultiSigExecTransferFrom
} }
...@@ -637,7 +637,7 @@ func _MultiSigAction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto ...@@ -637,7 +637,7 @@ func _MultiSigAction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto
if wire != proto.WireBytes { if wire != proto.WireBytes {
return true, proto.ErrInternalBadWireType return true, proto.ErrInternalBadWireType
} }
msg := new(MultiSigExecTransfer) msg := new(MultiSigExecTransferTo)
err := b.DecodeMessage(msg) err := b.DecodeMessage(msg)
m.Value = &MultiSigAction_MultiSigExecTransferTo{msg} m.Value = &MultiSigAction_MultiSigExecTransferTo{msg}
return true, err return true, err
...@@ -645,7 +645,7 @@ func _MultiSigAction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto ...@@ -645,7 +645,7 @@ func _MultiSigAction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto
if wire != proto.WireBytes { if wire != proto.WireBytes {
return true, proto.ErrInternalBadWireType return true, proto.ErrInternalBadWireType
} }
msg := new(MultiSigExecTransfer) msg := new(MultiSigExecTransferFrom)
err := b.DecodeMessage(msg) err := b.DecodeMessage(msg)
m.Value = &MultiSigAction_MultiSigExecTransferFrom{msg} m.Value = &MultiSigAction_MultiSigExecTransferFrom{msg}
return true, err return true, err
...@@ -888,10 +888,10 @@ func (m *MultiSigAccOperate) GetOperateFlag() bool { ...@@ -888,10 +888,10 @@ func (m *MultiSigAccOperate) GetOperateFlag() bool {
return false return false
} }
//多重签名合约中账户之间转币操作:增加一个from的字段实现MultiSigAddr<--->addr之间的转账 //多重签名合约中账户之间转币操作:增加一个from的字段实现MultiSigAddr--->addr之间的转账
//需要判断from地址是否是多重签名地址 //需要判断from地址是否是多重签名地址
//将MultiSig合约中from地址上execname+symbol的资产转移到to地址 //将MultiSig合约中from地址上execname+symbol的资产转移到to地址
type MultiSigExecTransfer struct { type MultiSigExecTransferFrom struct {
Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"`
Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"`
Note string `protobuf:"bytes,3,opt,name=note,proto3" json:"note,omitempty"` Note string `protobuf:"bytes,3,opt,name=note,proto3" json:"note,omitempty"`
...@@ -903,73 +903,147 @@ type MultiSigExecTransfer struct { ...@@ -903,73 +903,147 @@ type MultiSigExecTransfer struct {
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
} }
func (m *MultiSigExecTransfer) Reset() { *m = MultiSigExecTransfer{} } func (m *MultiSigExecTransferFrom) Reset() { *m = MultiSigExecTransferFrom{} }
func (m *MultiSigExecTransfer) String() string { return proto.CompactTextString(m) } func (m *MultiSigExecTransferFrom) String() string { return proto.CompactTextString(m) }
func (*MultiSigExecTransfer) ProtoMessage() {} func (*MultiSigExecTransferFrom) ProtoMessage() {}
func (*MultiSigExecTransfer) Descriptor() ([]byte, []int) { func (*MultiSigExecTransferFrom) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{10} return fileDescriptor_62b8b91adf3febfa, []int{10}
} }
func (m *MultiSigExecTransfer) XXX_Unmarshal(b []byte) error { func (m *MultiSigExecTransferFrom) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MultiSigExecTransfer.Unmarshal(m, b) return xxx_messageInfo_MultiSigExecTransferFrom.Unmarshal(m, b)
} }
func (m *MultiSigExecTransfer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { func (m *MultiSigExecTransferFrom) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_MultiSigExecTransfer.Marshal(b, m, deterministic) return xxx_messageInfo_MultiSigExecTransferFrom.Marshal(b, m, deterministic)
} }
func (m *MultiSigExecTransfer) XXX_Merge(src proto.Message) { func (m *MultiSigExecTransferFrom) XXX_Merge(src proto.Message) {
xxx_messageInfo_MultiSigExecTransfer.Merge(m, src) xxx_messageInfo_MultiSigExecTransferFrom.Merge(m, src)
} }
func (m *MultiSigExecTransfer) XXX_Size() int { func (m *MultiSigExecTransferFrom) XXX_Size() int {
return xxx_messageInfo_MultiSigExecTransfer.Size(m) return xxx_messageInfo_MultiSigExecTransferFrom.Size(m)
} }
func (m *MultiSigExecTransfer) XXX_DiscardUnknown() { func (m *MultiSigExecTransferFrom) XXX_DiscardUnknown() {
xxx_messageInfo_MultiSigExecTransfer.DiscardUnknown(m) xxx_messageInfo_MultiSigExecTransferFrom.DiscardUnknown(m)
} }
var xxx_messageInfo_MultiSigExecTransfer proto.InternalMessageInfo var xxx_messageInfo_MultiSigExecTransferFrom proto.InternalMessageInfo
func (m *MultiSigExecTransfer) GetSymbol() string { func (m *MultiSigExecTransferFrom) GetSymbol() string {
if m != nil { if m != nil {
return m.Symbol return m.Symbol
} }
return "" return ""
} }
func (m *MultiSigExecTransfer) GetAmount() int64 { func (m *MultiSigExecTransferFrom) GetAmount() int64 {
if m != nil { if m != nil {
return m.Amount return m.Amount
} }
return 0 return 0
} }
func (m *MultiSigExecTransfer) GetNote() string { func (m *MultiSigExecTransferFrom) GetNote() string {
if m != nil { if m != nil {
return m.Note return m.Note
} }
return "" return ""
} }
func (m *MultiSigExecTransfer) GetExecname() string { func (m *MultiSigExecTransferFrom) GetExecname() string {
if m != nil { if m != nil {
return m.Execname return m.Execname
} }
return "" return ""
} }
func (m *MultiSigExecTransfer) GetTo() string { func (m *MultiSigExecTransferFrom) GetTo() string {
if m != nil { if m != nil {
return m.To return m.To
} }
return "" return ""
} }
func (m *MultiSigExecTransfer) GetFrom() string { func (m *MultiSigExecTransferFrom) GetFrom() string {
if m != nil { if m != nil {
return m.From return m.From
} }
return "" return ""
} }
//多重签名合约中账户之间转币操作: addr --->MultiSigAddr之间的转账
//需要判断to地址是否是多重签名地址
//将MultiSig合约中签名地址上execname+symbol的资产转移到to地址
type MultiSigExecTransferTo struct {
Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"`
Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"`
Note string `protobuf:"bytes,3,opt,name=note,proto3" json:"note,omitempty"`
Execname string `protobuf:"bytes,4,opt,name=execname,proto3" json:"execname,omitempty"`
To string `protobuf:"bytes,5,opt,name=to,proto3" json:"to,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *MultiSigExecTransferTo) Reset() { *m = MultiSigExecTransferTo{} }
func (m *MultiSigExecTransferTo) String() string { return proto.CompactTextString(m) }
func (*MultiSigExecTransferTo) ProtoMessage() {}
func (*MultiSigExecTransferTo) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{11}
}
func (m *MultiSigExecTransferTo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MultiSigExecTransferTo.Unmarshal(m, b)
}
func (m *MultiSigExecTransferTo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_MultiSigExecTransferTo.Marshal(b, m, deterministic)
}
func (m *MultiSigExecTransferTo) XXX_Merge(src proto.Message) {
xxx_messageInfo_MultiSigExecTransferTo.Merge(m, src)
}
func (m *MultiSigExecTransferTo) XXX_Size() int {
return xxx_messageInfo_MultiSigExecTransferTo.Size(m)
}
func (m *MultiSigExecTransferTo) XXX_DiscardUnknown() {
xxx_messageInfo_MultiSigExecTransferTo.DiscardUnknown(m)
}
var xxx_messageInfo_MultiSigExecTransferTo proto.InternalMessageInfo
func (m *MultiSigExecTransferTo) GetSymbol() string {
if m != nil {
return m.Symbol
}
return ""
}
func (m *MultiSigExecTransferTo) GetAmount() int64 {
if m != nil {
return m.Amount
}
return 0
}
func (m *MultiSigExecTransferTo) GetNote() string {
if m != nil {
return m.Note
}
return ""
}
func (m *MultiSigExecTransferTo) GetExecname() string {
if m != nil {
return m.Execname
}
return ""
}
func (m *MultiSigExecTransferTo) GetTo() string {
if m != nil {
return m.To
}
return ""
}
//多重签名账户withdraw交易的确认或者取消确认 //多重签名账户withdraw交易的确认或者取消确认
//multisigaccaddr:多重签名账户地址 //multisigaccaddr:多重签名账户地址
//transactionid:多重签名账户上的withdraw交易的内部id //transactionid:多重签名账户上的withdraw交易的内部id
...@@ -986,7 +1060,7 @@ func (m *MultiSigConfirmTx) Reset() { *m = MultiSigConfirmTx{} } ...@@ -986,7 +1060,7 @@ func (m *MultiSigConfirmTx) Reset() { *m = MultiSigConfirmTx{} }
func (m *MultiSigConfirmTx) String() string { return proto.CompactTextString(m) } func (m *MultiSigConfirmTx) String() string { return proto.CompactTextString(m) }
func (*MultiSigConfirmTx) ProtoMessage() {} func (*MultiSigConfirmTx) ProtoMessage() {}
func (*MultiSigConfirmTx) Descriptor() ([]byte, []int) { func (*MultiSigConfirmTx) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{11} return fileDescriptor_62b8b91adf3febfa, []int{12}
} }
func (m *MultiSigConfirmTx) XXX_Unmarshal(b []byte) error { func (m *MultiSigConfirmTx) XXX_Unmarshal(b []byte) error {
...@@ -1041,7 +1115,7 @@ func (m *ReqMultiSigAccs) Reset() { *m = ReqMultiSigAccs{} } ...@@ -1041,7 +1115,7 @@ func (m *ReqMultiSigAccs) Reset() { *m = ReqMultiSigAccs{} }
func (m *ReqMultiSigAccs) String() string { return proto.CompactTextString(m) } func (m *ReqMultiSigAccs) String() string { return proto.CompactTextString(m) }
func (*ReqMultiSigAccs) ProtoMessage() {} func (*ReqMultiSigAccs) ProtoMessage() {}
func (*ReqMultiSigAccs) Descriptor() ([]byte, []int) { func (*ReqMultiSigAccs) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{12} return fileDescriptor_62b8b91adf3febfa, []int{13}
} }
func (m *ReqMultiSigAccs) XXX_Unmarshal(b []byte) error { func (m *ReqMultiSigAccs) XXX_Unmarshal(b []byte) error {
...@@ -1087,7 +1161,7 @@ func (m *ReplyMultiSigAccs) Reset() { *m = ReplyMultiSigAccs{} } ...@@ -1087,7 +1161,7 @@ func (m *ReplyMultiSigAccs) Reset() { *m = ReplyMultiSigAccs{} }
func (m *ReplyMultiSigAccs) String() string { return proto.CompactTextString(m) } func (m *ReplyMultiSigAccs) String() string { return proto.CompactTextString(m) }
func (*ReplyMultiSigAccs) ProtoMessage() {} func (*ReplyMultiSigAccs) ProtoMessage() {}
func (*ReplyMultiSigAccs) Descriptor() ([]byte, []int) { func (*ReplyMultiSigAccs) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{13} return fileDescriptor_62b8b91adf3febfa, []int{14}
} }
func (m *ReplyMultiSigAccs) XXX_Unmarshal(b []byte) error { func (m *ReplyMultiSigAccs) XXX_Unmarshal(b []byte) error {
...@@ -1127,7 +1201,7 @@ func (m *ReqMultiSigAccInfo) Reset() { *m = ReqMultiSigAccInfo{} } ...@@ -1127,7 +1201,7 @@ func (m *ReqMultiSigAccInfo) Reset() { *m = ReqMultiSigAccInfo{} }
func (m *ReqMultiSigAccInfo) String() string { return proto.CompactTextString(m) } func (m *ReqMultiSigAccInfo) String() string { return proto.CompactTextString(m) }
func (*ReqMultiSigAccInfo) ProtoMessage() {} func (*ReqMultiSigAccInfo) ProtoMessage() {}
func (*ReqMultiSigAccInfo) Descriptor() ([]byte, []int) { func (*ReqMultiSigAccInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{14} return fileDescriptor_62b8b91adf3febfa, []int{15}
} }
func (m *ReqMultiSigAccInfo) XXX_Unmarshal(b []byte) error { func (m *ReqMultiSigAccInfo) XXX_Unmarshal(b []byte) error {
...@@ -1172,7 +1246,7 @@ func (m *ReplyMultiSigAccInfo) Reset() { *m = ReplyMultiSigAccInfo{} } ...@@ -1172,7 +1246,7 @@ func (m *ReplyMultiSigAccInfo) Reset() { *m = ReplyMultiSigAccInfo{} }
func (m *ReplyMultiSigAccInfo) String() string { return proto.CompactTextString(m) } func (m *ReplyMultiSigAccInfo) String() string { return proto.CompactTextString(m) }
func (*ReplyMultiSigAccInfo) ProtoMessage() {} func (*ReplyMultiSigAccInfo) ProtoMessage() {}
func (*ReplyMultiSigAccInfo) Descriptor() ([]byte, []int) { func (*ReplyMultiSigAccInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{15} return fileDescriptor_62b8b91adf3febfa, []int{16}
} }
func (m *ReplyMultiSigAccInfo) XXX_Unmarshal(b []byte) error { func (m *ReplyMultiSigAccInfo) XXX_Unmarshal(b []byte) error {
...@@ -1251,7 +1325,7 @@ func (m *ReqMultiSigTxids) Reset() { *m = ReqMultiSigTxids{} } ...@@ -1251,7 +1325,7 @@ func (m *ReqMultiSigTxids) Reset() { *m = ReqMultiSigTxids{} }
func (m *ReqMultiSigTxids) String() string { return proto.CompactTextString(m) } func (m *ReqMultiSigTxids) String() string { return proto.CompactTextString(m) }
func (*ReqMultiSigTxids) ProtoMessage() {} func (*ReqMultiSigTxids) ProtoMessage() {}
func (*ReqMultiSigTxids) Descriptor() ([]byte, []int) { func (*ReqMultiSigTxids) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{16} return fileDescriptor_62b8b91adf3febfa, []int{17}
} }
func (m *ReqMultiSigTxids) XXX_Unmarshal(b []byte) error { func (m *ReqMultiSigTxids) XXX_Unmarshal(b []byte) error {
...@@ -1319,7 +1393,7 @@ func (m *ReplyMultiSigTxids) Reset() { *m = ReplyMultiSigTxids{} } ...@@ -1319,7 +1393,7 @@ func (m *ReplyMultiSigTxids) Reset() { *m = ReplyMultiSigTxids{} }
func (m *ReplyMultiSigTxids) String() string { return proto.CompactTextString(m) } func (m *ReplyMultiSigTxids) String() string { return proto.CompactTextString(m) }
func (*ReplyMultiSigTxids) ProtoMessage() {} func (*ReplyMultiSigTxids) ProtoMessage() {}
func (*ReplyMultiSigTxids) Descriptor() ([]byte, []int) { func (*ReplyMultiSigTxids) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{17} return fileDescriptor_62b8b91adf3febfa, []int{18}
} }
func (m *ReplyMultiSigTxids) XXX_Unmarshal(b []byte) error { func (m *ReplyMultiSigTxids) XXX_Unmarshal(b []byte) error {
...@@ -1367,7 +1441,7 @@ func (m *ReqMultiSigTxInfo) Reset() { *m = ReqMultiSigTxInfo{} } ...@@ -1367,7 +1441,7 @@ func (m *ReqMultiSigTxInfo) Reset() { *m = ReqMultiSigTxInfo{} }
func (m *ReqMultiSigTxInfo) String() string { return proto.CompactTextString(m) } func (m *ReqMultiSigTxInfo) String() string { return proto.CompactTextString(m) }
func (*ReqMultiSigTxInfo) ProtoMessage() {} func (*ReqMultiSigTxInfo) ProtoMessage() {}
func (*ReqMultiSigTxInfo) Descriptor() ([]byte, []int) { func (*ReqMultiSigTxInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{18} return fileDescriptor_62b8b91adf3febfa, []int{19}
} }
func (m *ReqMultiSigTxInfo) XXX_Unmarshal(b []byte) error { func (m *ReqMultiSigTxInfo) XXX_Unmarshal(b []byte) error {
...@@ -1413,7 +1487,7 @@ func (m *ReplyMultiSigTxInfo) Reset() { *m = ReplyMultiSigTxInfo{} } ...@@ -1413,7 +1487,7 @@ func (m *ReplyMultiSigTxInfo) Reset() { *m = ReplyMultiSigTxInfo{} }
func (m *ReplyMultiSigTxInfo) String() string { return proto.CompactTextString(m) } func (m *ReplyMultiSigTxInfo) String() string { return proto.CompactTextString(m) }
func (*ReplyMultiSigTxInfo) ProtoMessage() {} func (*ReplyMultiSigTxInfo) ProtoMessage() {}
func (*ReplyMultiSigTxInfo) Descriptor() ([]byte, []int) { func (*ReplyMultiSigTxInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{19} return fileDescriptor_62b8b91adf3febfa, []int{20}
} }
func (m *ReplyMultiSigTxInfo) XXX_Unmarshal(b []byte) error { func (m *ReplyMultiSigTxInfo) XXX_Unmarshal(b []byte) error {
...@@ -1455,7 +1529,7 @@ func (m *ReqMultiSigAccUnSpentToday) Reset() { *m = ReqMultiSigAccUnSpen ...@@ -1455,7 +1529,7 @@ func (m *ReqMultiSigAccUnSpentToday) Reset() { *m = ReqMultiSigAccUnSpen
func (m *ReqMultiSigAccUnSpentToday) String() string { return proto.CompactTextString(m) } func (m *ReqMultiSigAccUnSpentToday) String() string { return proto.CompactTextString(m) }
func (*ReqMultiSigAccUnSpentToday) ProtoMessage() {} func (*ReqMultiSigAccUnSpentToday) ProtoMessage() {}
func (*ReqMultiSigAccUnSpentToday) Descriptor() ([]byte, []int) { func (*ReqMultiSigAccUnSpentToday) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{20} return fileDescriptor_62b8b91adf3febfa, []int{21}
} }
func (m *ReqMultiSigAccUnSpentToday) XXX_Unmarshal(b []byte) error { func (m *ReqMultiSigAccUnSpentToday) XXX_Unmarshal(b []byte) error {
...@@ -1508,7 +1582,7 @@ func (m *ReplyUnSpentAssets) Reset() { *m = ReplyUnSpentAssets{} } ...@@ -1508,7 +1582,7 @@ func (m *ReplyUnSpentAssets) Reset() { *m = ReplyUnSpentAssets{} }
func (m *ReplyUnSpentAssets) String() string { return proto.CompactTextString(m) } func (m *ReplyUnSpentAssets) String() string { return proto.CompactTextString(m) }
func (*ReplyUnSpentAssets) ProtoMessage() {} func (*ReplyUnSpentAssets) ProtoMessage() {}
func (*ReplyUnSpentAssets) Descriptor() ([]byte, []int) { func (*ReplyUnSpentAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{21} return fileDescriptor_62b8b91adf3febfa, []int{22}
} }
func (m *ReplyUnSpentAssets) XXX_Unmarshal(b []byte) error { func (m *ReplyUnSpentAssets) XXX_Unmarshal(b []byte) error {
...@@ -1548,7 +1622,7 @@ func (m *UnSpentAssets) Reset() { *m = UnSpentAssets{} } ...@@ -1548,7 +1622,7 @@ func (m *UnSpentAssets) Reset() { *m = UnSpentAssets{} }
func (m *UnSpentAssets) String() string { return proto.CompactTextString(m) } func (m *UnSpentAssets) String() string { return proto.CompactTextString(m) }
func (*UnSpentAssets) ProtoMessage() {} func (*UnSpentAssets) ProtoMessage() {}
func (*UnSpentAssets) Descriptor() ([]byte, []int) { func (*UnSpentAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{22} return fileDescriptor_62b8b91adf3febfa, []int{23}
} }
func (m *UnSpentAssets) XXX_Unmarshal(b []byte) error { func (m *UnSpentAssets) XXX_Unmarshal(b []byte) error {
...@@ -1595,7 +1669,7 @@ func (m *ReceiptMultiSig) Reset() { *m = ReceiptMultiSig{} } ...@@ -1595,7 +1669,7 @@ func (m *ReceiptMultiSig) Reset() { *m = ReceiptMultiSig{} }
func (m *ReceiptMultiSig) String() string { return proto.CompactTextString(m) } func (m *ReceiptMultiSig) String() string { return proto.CompactTextString(m) }
func (*ReceiptMultiSig) ProtoMessage() {} func (*ReceiptMultiSig) ProtoMessage() {}
func (*ReceiptMultiSig) Descriptor() ([]byte, []int) { func (*ReceiptMultiSig) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{23} return fileDescriptor_62b8b91adf3febfa, []int{24}
} }
func (m *ReceiptMultiSig) XXX_Unmarshal(b []byte) error { func (m *ReceiptMultiSig) XXX_Unmarshal(b []byte) error {
...@@ -1636,7 +1710,7 @@ func (m *ReceiptOwnerAddOrDel) Reset() { *m = ReceiptOwnerAddOrDel{} } ...@@ -1636,7 +1710,7 @@ func (m *ReceiptOwnerAddOrDel) Reset() { *m = ReceiptOwnerAddOrDel{} }
func (m *ReceiptOwnerAddOrDel) String() string { return proto.CompactTextString(m) } func (m *ReceiptOwnerAddOrDel) String() string { return proto.CompactTextString(m) }
func (*ReceiptOwnerAddOrDel) ProtoMessage() {} func (*ReceiptOwnerAddOrDel) ProtoMessage() {}
func (*ReceiptOwnerAddOrDel) Descriptor() ([]byte, []int) { func (*ReceiptOwnerAddOrDel) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{24} return fileDescriptor_62b8b91adf3febfa, []int{25}
} }
func (m *ReceiptOwnerAddOrDel) XXX_Unmarshal(b []byte) error { func (m *ReceiptOwnerAddOrDel) XXX_Unmarshal(b []byte) error {
...@@ -1694,7 +1768,7 @@ func (m *ReceiptOwnerModOrRep) Reset() { *m = ReceiptOwnerModOrRep{} } ...@@ -1694,7 +1768,7 @@ func (m *ReceiptOwnerModOrRep) Reset() { *m = ReceiptOwnerModOrRep{} }
func (m *ReceiptOwnerModOrRep) String() string { return proto.CompactTextString(m) } func (m *ReceiptOwnerModOrRep) String() string { return proto.CompactTextString(m) }
func (*ReceiptOwnerModOrRep) ProtoMessage() {} func (*ReceiptOwnerModOrRep) ProtoMessage() {}
func (*ReceiptOwnerModOrRep) Descriptor() ([]byte, []int) { func (*ReceiptOwnerModOrRep) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{25} return fileDescriptor_62b8b91adf3febfa, []int{26}
} }
func (m *ReceiptOwnerModOrRep) XXX_Unmarshal(b []byte) error { func (m *ReceiptOwnerModOrRep) XXX_Unmarshal(b []byte) error {
...@@ -1758,7 +1832,7 @@ func (m *ReceiptWeightModify) Reset() { *m = ReceiptWeightModify{} } ...@@ -1758,7 +1832,7 @@ func (m *ReceiptWeightModify) Reset() { *m = ReceiptWeightModify{} }
func (m *ReceiptWeightModify) String() string { return proto.CompactTextString(m) } func (m *ReceiptWeightModify) String() string { return proto.CompactTextString(m) }
func (*ReceiptWeightModify) ProtoMessage() {} func (*ReceiptWeightModify) ProtoMessage() {}
func (*ReceiptWeightModify) Descriptor() ([]byte, []int) { func (*ReceiptWeightModify) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{26} return fileDescriptor_62b8b91adf3febfa, []int{27}
} }
func (m *ReceiptWeightModify) XXX_Unmarshal(b []byte) error { func (m *ReceiptWeightModify) XXX_Unmarshal(b []byte) error {
...@@ -1816,7 +1890,7 @@ func (m *ReceiptDailyLimitOperate) Reset() { *m = ReceiptDailyLimitOpera ...@@ -1816,7 +1890,7 @@ func (m *ReceiptDailyLimitOperate) Reset() { *m = ReceiptDailyLimitOpera
func (m *ReceiptDailyLimitOperate) String() string { return proto.CompactTextString(m) } func (m *ReceiptDailyLimitOperate) String() string { return proto.CompactTextString(m) }
func (*ReceiptDailyLimitOperate) ProtoMessage() {} func (*ReceiptDailyLimitOperate) ProtoMessage() {}
func (*ReceiptDailyLimitOperate) Descriptor() ([]byte, []int) { func (*ReceiptDailyLimitOperate) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{27} return fileDescriptor_62b8b91adf3febfa, []int{28}
} }
func (m *ReceiptDailyLimitOperate) XXX_Unmarshal(b []byte) error { func (m *ReceiptDailyLimitOperate) XXX_Unmarshal(b []byte) error {
...@@ -1880,7 +1954,7 @@ func (m *ReceiptConfirmTx) Reset() { *m = ReceiptConfirmTx{} } ...@@ -1880,7 +1954,7 @@ func (m *ReceiptConfirmTx) Reset() { *m = ReceiptConfirmTx{} }
func (m *ReceiptConfirmTx) String() string { return proto.CompactTextString(m) } func (m *ReceiptConfirmTx) String() string { return proto.CompactTextString(m) }
func (*ReceiptConfirmTx) ProtoMessage() {} func (*ReceiptConfirmTx) ProtoMessage() {}
func (*ReceiptConfirmTx) Descriptor() ([]byte, []int) { func (*ReceiptConfirmTx) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{28} return fileDescriptor_62b8b91adf3febfa, []int{29}
} }
func (m *ReceiptConfirmTx) XXX_Unmarshal(b []byte) error { func (m *ReceiptConfirmTx) XXX_Unmarshal(b []byte) error {
...@@ -1929,7 +2003,7 @@ func (m *ReceiptAccDailyLimitUpdate) Reset() { *m = ReceiptAccDailyLimit ...@@ -1929,7 +2003,7 @@ func (m *ReceiptAccDailyLimitUpdate) Reset() { *m = ReceiptAccDailyLimit
func (m *ReceiptAccDailyLimitUpdate) String() string { return proto.CompactTextString(m) } func (m *ReceiptAccDailyLimitUpdate) String() string { return proto.CompactTextString(m) }
func (*ReceiptAccDailyLimitUpdate) ProtoMessage() {} func (*ReceiptAccDailyLimitUpdate) ProtoMessage() {}
func (*ReceiptAccDailyLimitUpdate) Descriptor() ([]byte, []int) { func (*ReceiptAccDailyLimitUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{29} return fileDescriptor_62b8b91adf3febfa, []int{30}
} }
func (m *ReceiptAccDailyLimitUpdate) XXX_Unmarshal(b []byte) error { func (m *ReceiptAccDailyLimitUpdate) XXX_Unmarshal(b []byte) error {
...@@ -1988,7 +2062,7 @@ func (m *ReceiptMultiSigTx) Reset() { *m = ReceiptMultiSigTx{} } ...@@ -1988,7 +2062,7 @@ func (m *ReceiptMultiSigTx) Reset() { *m = ReceiptMultiSigTx{} }
func (m *ReceiptMultiSigTx) String() string { return proto.CompactTextString(m) } func (m *ReceiptMultiSigTx) String() string { return proto.CompactTextString(m) }
func (*ReceiptMultiSigTx) ProtoMessage() {} func (*ReceiptMultiSigTx) ProtoMessage() {}
func (*ReceiptMultiSigTx) Descriptor() ([]byte, []int) { func (*ReceiptMultiSigTx) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{30} return fileDescriptor_62b8b91adf3febfa, []int{31}
} }
func (m *ReceiptMultiSigTx) XXX_Unmarshal(b []byte) error { func (m *ReceiptMultiSigTx) XXX_Unmarshal(b []byte) error {
...@@ -2063,7 +2137,7 @@ func (m *ReceiptTxCountUpdate) Reset() { *m = ReceiptTxCountUpdate{} } ...@@ -2063,7 +2137,7 @@ func (m *ReceiptTxCountUpdate) Reset() { *m = ReceiptTxCountUpdate{} }
func (m *ReceiptTxCountUpdate) String() string { return proto.CompactTextString(m) } func (m *ReceiptTxCountUpdate) String() string { return proto.CompactTextString(m) }
func (*ReceiptTxCountUpdate) ProtoMessage() {} func (*ReceiptTxCountUpdate) ProtoMessage() {}
func (*ReceiptTxCountUpdate) Descriptor() ([]byte, []int) { func (*ReceiptTxCountUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{31} return fileDescriptor_62b8b91adf3febfa, []int{32}
} }
func (m *ReceiptTxCountUpdate) XXX_Unmarshal(b []byte) error { func (m *ReceiptTxCountUpdate) XXX_Unmarshal(b []byte) error {
...@@ -2111,7 +2185,7 @@ func (m *MultiSigTxOwner) Reset() { *m = MultiSigTxOwner{} } ...@@ -2111,7 +2185,7 @@ func (m *MultiSigTxOwner) Reset() { *m = MultiSigTxOwner{} }
func (m *MultiSigTxOwner) String() string { return proto.CompactTextString(m) } func (m *MultiSigTxOwner) String() string { return proto.CompactTextString(m) }
func (*MultiSigTxOwner) ProtoMessage() {} func (*MultiSigTxOwner) ProtoMessage() {}
func (*MultiSigTxOwner) Descriptor() ([]byte, []int) { func (*MultiSigTxOwner) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{32} return fileDescriptor_62b8b91adf3febfa, []int{33}
} }
func (m *MultiSigTxOwner) XXX_Unmarshal(b []byte) error { func (m *MultiSigTxOwner) XXX_Unmarshal(b []byte) error {
...@@ -2164,7 +2238,7 @@ func (m *Uint64) Reset() { *m = Uint64{} } ...@@ -2164,7 +2238,7 @@ func (m *Uint64) Reset() { *m = Uint64{} }
func (m *Uint64) String() string { return proto.CompactTextString(m) } func (m *Uint64) String() string { return proto.CompactTextString(m) }
func (*Uint64) ProtoMessage() {} func (*Uint64) ProtoMessage() {}
func (*Uint64) Descriptor() ([]byte, []int) { func (*Uint64) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{33} return fileDescriptor_62b8b91adf3febfa, []int{34}
} }
func (m *Uint64) XXX_Unmarshal(b []byte) error { func (m *Uint64) XXX_Unmarshal(b []byte) error {
...@@ -2206,7 +2280,7 @@ func (m *AccountAssets) Reset() { *m = AccountAssets{} } ...@@ -2206,7 +2280,7 @@ func (m *AccountAssets) Reset() { *m = AccountAssets{} }
func (m *AccountAssets) String() string { return proto.CompactTextString(m) } func (m *AccountAssets) String() string { return proto.CompactTextString(m) }
func (*AccountAssets) ProtoMessage() {} func (*AccountAssets) ProtoMessage() {}
func (*AccountAssets) Descriptor() ([]byte, []int) { func (*AccountAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{34} return fileDescriptor_62b8b91adf3febfa, []int{35}
} }
func (m *AccountAssets) XXX_Unmarshal(b []byte) error { func (m *AccountAssets) XXX_Unmarshal(b []byte) error {
...@@ -2262,7 +2336,7 @@ func (m *ReqAccAssets) Reset() { *m = ReqAccAssets{} } ...@@ -2262,7 +2336,7 @@ func (m *ReqAccAssets) Reset() { *m = ReqAccAssets{} }
func (m *ReqAccAssets) String() string { return proto.CompactTextString(m) } func (m *ReqAccAssets) String() string { return proto.CompactTextString(m) }
func (*ReqAccAssets) ProtoMessage() {} func (*ReqAccAssets) ProtoMessage() {}
func (*ReqAccAssets) Descriptor() ([]byte, []int) { func (*ReqAccAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{35} return fileDescriptor_62b8b91adf3febfa, []int{36}
} }
func (m *ReqAccAssets) XXX_Unmarshal(b []byte) error { func (m *ReqAccAssets) XXX_Unmarshal(b []byte) error {
...@@ -2315,7 +2389,7 @@ func (m *ReplyAccAssets) Reset() { *m = ReplyAccAssets{} } ...@@ -2315,7 +2389,7 @@ func (m *ReplyAccAssets) Reset() { *m = ReplyAccAssets{} }
func (m *ReplyAccAssets) String() string { return proto.CompactTextString(m) } func (m *ReplyAccAssets) String() string { return proto.CompactTextString(m) }
func (*ReplyAccAssets) ProtoMessage() {} func (*ReplyAccAssets) ProtoMessage() {}
func (*ReplyAccAssets) Descriptor() ([]byte, []int) { func (*ReplyAccAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{36} return fileDescriptor_62b8b91adf3febfa, []int{37}
} }
func (m *ReplyAccAssets) XXX_Unmarshal(b []byte) error { func (m *ReplyAccAssets) XXX_Unmarshal(b []byte) error {
...@@ -2357,7 +2431,7 @@ func (m *AccAssets) Reset() { *m = AccAssets{} } ...@@ -2357,7 +2431,7 @@ func (m *AccAssets) Reset() { *m = AccAssets{} }
func (m *AccAssets) String() string { return proto.CompactTextString(m) } func (m *AccAssets) String() string { return proto.CompactTextString(m) }
func (*AccAssets) ProtoMessage() {} func (*AccAssets) ProtoMessage() {}
func (*AccAssets) Descriptor() ([]byte, []int) { func (*AccAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{37} return fileDescriptor_62b8b91adf3febfa, []int{38}
} }
func (m *AccAssets) XXX_Unmarshal(b []byte) error { func (m *AccAssets) XXX_Unmarshal(b []byte) error {
...@@ -2411,7 +2485,7 @@ func (m *Assets) Reset() { *m = Assets{} } ...@@ -2411,7 +2485,7 @@ func (m *Assets) Reset() { *m = Assets{} }
func (m *Assets) String() string { return proto.CompactTextString(m) } func (m *Assets) String() string { return proto.CompactTextString(m) }
func (*Assets) ProtoMessage() {} func (*Assets) ProtoMessage() {}
func (*Assets) Descriptor() ([]byte, []int) { func (*Assets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{38} return fileDescriptor_62b8b91adf3febfa, []int{39}
} }
func (m *Assets) XXX_Unmarshal(b []byte) error { func (m *Assets) XXX_Unmarshal(b []byte) error {
...@@ -2458,7 +2532,7 @@ func (m *AccAddress) Reset() { *m = AccAddress{} } ...@@ -2458,7 +2532,7 @@ func (m *AccAddress) Reset() { *m = AccAddress{} }
func (m *AccAddress) String() string { return proto.CompactTextString(m) } func (m *AccAddress) String() string { return proto.CompactTextString(m) }
func (*AccAddress) ProtoMessage() {} func (*AccAddress) ProtoMessage() {}
func (*AccAddress) Descriptor() ([]byte, []int) { func (*AccAddress) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{39} return fileDescriptor_62b8b91adf3febfa, []int{40}
} }
func (m *AccAddress) XXX_Unmarshal(b []byte) error { func (m *AccAddress) XXX_Unmarshal(b []byte) error {
...@@ -2497,7 +2571,8 @@ func init() { ...@@ -2497,7 +2571,8 @@ func init() {
proto.RegisterType((*MultiSigAccCreate)(nil), "types.MultiSigAccCreate") proto.RegisterType((*MultiSigAccCreate)(nil), "types.MultiSigAccCreate")
proto.RegisterType((*MultiSigOwnerOperate)(nil), "types.MultiSigOwnerOperate") proto.RegisterType((*MultiSigOwnerOperate)(nil), "types.MultiSigOwnerOperate")
proto.RegisterType((*MultiSigAccOperate)(nil), "types.MultiSigAccOperate") proto.RegisterType((*MultiSigAccOperate)(nil), "types.MultiSigAccOperate")
proto.RegisterType((*MultiSigExecTransfer)(nil), "types.MultiSigExecTransfer") proto.RegisterType((*MultiSigExecTransferFrom)(nil), "types.MultiSigExecTransferFrom")
proto.RegisterType((*MultiSigExecTransferTo)(nil), "types.MultiSigExecTransferTo")
proto.RegisterType((*MultiSigConfirmTx)(nil), "types.MultiSigConfirmTx") proto.RegisterType((*MultiSigConfirmTx)(nil), "types.MultiSigConfirmTx")
proto.RegisterType((*ReqMultiSigAccs)(nil), "types.ReqMultiSigAccs") proto.RegisterType((*ReqMultiSigAccs)(nil), "types.ReqMultiSigAccs")
proto.RegisterType((*ReplyMultiSigAccs)(nil), "types.ReplyMultiSigAccs") proto.RegisterType((*ReplyMultiSigAccs)(nil), "types.ReplyMultiSigAccs")
...@@ -2532,100 +2607,101 @@ func init() { ...@@ -2532,100 +2607,101 @@ func init() {
func init() { proto.RegisterFile("multisig.proto", fileDescriptor_62b8b91adf3febfa) } func init() { proto.RegisterFile("multisig.proto", fileDescriptor_62b8b91adf3febfa) }
var fileDescriptor_62b8b91adf3febfa = []byte{ var fileDescriptor_62b8b91adf3febfa = []byte{
// 1517 bytes of a gzipped FileDescriptorProto // 1535 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x5f, 0x6f, 0xdc, 0xc4, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x18, 0xdd, 0x6e, 0xdc, 0x44,
0x16, 0xaf, 0xbd, 0x7f, 0x92, 0x3d, 0x49, 0xb6, 0xc9, 0xdc, 0x55, 0xaf, 0x6f, 0x6e, 0x55, 0xad, 0x37, 0xde, 0xbf, 0x64, 0xcf, 0x26, 0xdb, 0x64, 0xbe, 0x55, 0x3e, 0x13, 0x4a, 0x59, 0x8d, 0x4a,
0x46, 0xbd, 0xd5, 0xaa, 0xba, 0x44, 0xa8, 0x2d, 0x94, 0x22, 0x81, 0xba, 0x34, 0xad, 0x52, 0x95, 0xb5, 0xaa, 0x20, 0x42, 0x69, 0xa1, 0x14, 0x09, 0xd4, 0xa5, 0x69, 0x95, 0xaa, 0xa4, 0x29, 0xd3,
0x34, 0x65, 0xea, 0x08, 0xc1, 0x9b, 0x63, 0x4f, 0x52, 0x8b, 0x5d, 0x7b, 0x6b, 0x7b, 0x93, 0x5d, 0xad, 0x2a, 0x21, 0x71, 0xe1, 0xd8, 0x93, 0xd4, 0x62, 0xd7, 0xde, 0xda, 0xde, 0x64, 0x17, 0x90,
0x40, 0x2a, 0xdf, 0x80, 0x37, 0x1e, 0xfa, 0xc4, 0x87, 0xe0, 0x81, 0x4f, 0x00, 0x5f, 0x80, 0x6f, 0xca, 0x25, 0x2f, 0x00, 0x17, 0x5c, 0x20, 0x1e, 0x82, 0x0b, 0x9e, 0x00, 0x5e, 0x80, 0xb7, 0xe0,
0xc1, 0x33, 0xe2, 0x15, 0xcd, 0x3f, 0x7b, 0xc6, 0x76, 0x8a, 0x2b, 0x15, 0x09, 0xf1, 0xe6, 0xf3, 0x1a, 0x71, 0x8b, 0xe6, 0xcf, 0x9e, 0xb1, 0x9d, 0xc8, 0x95, 0x0a, 0x42, 0xdc, 0xf9, 0x9c, 0x39,
0x9b, 0x33, 0x67, 0xce, 0xbf, 0x39, 0xe7, 0x78, 0xa0, 0x3f, 0x9d, 0x4f, 0xb2, 0x30, 0x0d, 0x4f, 0x73, 0xfe, 0xff, 0x3c, 0xd0, 0x9d, 0xcc, 0xc6, 0x89, 0x1f, 0xfb, 0xc7, 0xdb, 0xd3, 0x28, 0x4c,
0x76, 0x66, 0x49, 0x9c, 0xc5, 0xa8, 0x93, 0x2d, 0x67, 0x34, 0xdd, 0xde, 0xf0, 0x7c, 0x3f, 0x9e, 0x42, 0xd4, 0x4c, 0x16, 0x53, 0x1a, 0x6f, 0xad, 0x39, 0xae, 0x1b, 0xce, 0x82, 0x44, 0x60, 0xf1,
0x47, 0x99, 0x40, 0xf1, 0xaf, 0x16, 0xac, 0xee, 0x33, 0xc6, 0xa7, 0xe1, 0x09, 0xba, 0x02, 0xe0, 0xef, 0x16, 0xac, 0xec, 0x33, 0xc2, 0x47, 0xfe, 0x31, 0xba, 0x04, 0xe0, 0x46, 0xd4, 0x49, 0xe8,
0x27, 0xd4, 0xcb, 0xe8, 0x38, 0x08, 0x12, 0xc7, 0x1a, 0x5a, 0xa3, 0x1e, 0xd1, 0x10, 0x84, 0x61, 0xd0, 0xf3, 0x22, 0xdb, 0xea, 0x5b, 0x83, 0x36, 0xd1, 0x30, 0x08, 0xc3, 0xea, 0x44, 0xd2, 0x72,
0x7d, 0x2a, 0x79, 0x39, 0x87, 0xcd, 0x39, 0x0c, 0x0c, 0x5d, 0x85, 0x6e, 0x7c, 0x16, 0xd1, 0x24, 0x8a, 0x1a, 0xa7, 0x30, 0x70, 0xe8, 0x32, 0xb4, 0xc2, 0xd3, 0x80, 0x46, 0xb1, 0x5d, 0xef, 0xd7,
0x75, 0x5a, 0xc3, 0xd6, 0x68, 0xed, 0xc6, 0xfa, 0x0e, 0x3f, 0x77, 0xe7, 0x80, 0x81, 0x44, 0xae, 0x07, 0x9d, 0x9d, 0xd5, 0x6d, 0x2e, 0x77, 0xfb, 0x80, 0x21, 0x89, 0x3c, 0x43, 0xd7, 0xa0, 0xe3,
0xa1, 0x9b, 0xb0, 0x16, 0x78, 0xe1, 0x64, 0xf9, 0x71, 0x38, 0x0d, 0xb3, 0xd4, 0x69, 0x73, 0xd6, 0x39, 0xfe, 0x78, 0xf1, 0xb1, 0x3f, 0xf1, 0x93, 0xd8, 0x6e, 0x70, 0xd2, 0x0d, 0x49, 0xba, 0x9b,
0x2d, 0xc9, 0xba, 0x9b, 0xaf, 0x10, 0x9d, 0x0b, 0x39, 0xb0, 0x92, 0x2d, 0xee, 0x31, 0xe5, 0x9d, 0x9e, 0x10, 0x9d, 0x0a, 0xd9, 0xb0, 0x9c, 0xcc, 0x6f, 0x33, 0xe5, 0xed, 0x66, 0xdf, 0x1a, 0x34,
0xce, 0xd0, 0x1a, 0xb5, 0x89, 0x22, 0xd1, 0x35, 0xe8, 0x27, 0xf4, 0xf9, 0x3c, 0x4c, 0x68, 0xf0, 0x88, 0x02, 0xd1, 0x15, 0xe8, 0x46, 0xf4, 0xd9, 0xcc, 0x8f, 0xa8, 0xf7, 0x84, 0xfa, 0xc7, 0x4f,
0x29, 0x0d, 0x4f, 0x9e, 0x65, 0x4e, 0x97, 0x33, 0x94, 0x50, 0xfc, 0x00, 0xfa, 0xf7, 0xe2, 0xe8, 0x13, 0xbb, 0xc5, 0x09, 0x72, 0x58, 0x7c, 0x17, 0xba, 0xb7, 0xc3, 0xe0, 0xc8, 0x8f, 0x26, 0xd4,
0x38, 0x4c, 0xa6, 0x34, 0xe0, 0x0a, 0xa1, 0x5b, 0xd0, 0xf7, 0x0d, 0xc4, 0xb1, 0x6a, 0xd4, 0x2e, 0xe3, 0x0a, 0xa1, 0xeb, 0xd0, 0x75, 0x0d, 0x8c, 0x6d, 0x95, 0xa8, 0x9d, 0xa3, 0xc1, 0xbf, 0x58,
0xf1, 0xe0, 0x9f, 0x2c, 0x00, 0xe5, 0x35, 0x77, 0x81, 0x10, 0xb4, 0xb3, 0x45, 0x18, 0x70, 0x8f, 0x00, 0xca, 0x6b, 0xa3, 0x39, 0x42, 0xd0, 0x48, 0xe6, 0xbe, 0xc7, 0x3d, 0xd6, 0x20, 0xfc, 0x1b,
0xb5, 0x09, 0xff, 0x46, 0x97, 0xa0, 0x9b, 0x2d, 0xf6, 0xbc, 0xf4, 0x99, 0xf4, 0x92, 0xa4, 0xd0, 0x6d, 0x42, 0x2b, 0x99, 0xef, 0x39, 0xf1, 0x53, 0xe9, 0x25, 0x09, 0xa1, 0x2d, 0x58, 0xa1, 0x73,
0x36, 0xac, 0xd2, 0x05, 0xf5, 0xe7, 0x19, 0x0d, 0x9c, 0xd6, 0xd0, 0x1a, 0xad, 0x92, 0x9c, 0x16, 0xea, 0xce, 0x12, 0xea, 0xd9, 0xf5, 0xbe, 0x35, 0x58, 0x21, 0x29, 0x2c, 0xee, 0x8c, 0x16, 0x53,
0x7b, 0xdc, 0xe5, 0x8c, 0x3a, 0x6d, 0x2e, 0x49, 0x52, 0x15, 0xbf, 0x77, 0x6a, 0xfc, 0x5e, 0x35, 0x6a, 0x37, 0x38, 0x27, 0x09, 0x15, 0xfc, 0xde, 0x2c, 0xf1, 0x7b, 0xd1, 0x90, 0x56, 0x05, 0x43,
0xa4, 0xdb, 0xc0, 0x90, 0x0f, 0xa0, 0x23, 0xfc, 0x70, 0x19, 0x7a, 0x3c, 0x34, 0x5a, 0xe4, 0x0b, 0x3e, 0x80, 0xa6, 0xf0, 0xc3, 0x45, 0x68, 0xf3, 0xd0, 0x68, 0x91, 0xcf, 0x10, 0x4c, 0xb1, 0x53,
0x80, 0x29, 0x76, 0x26, 0xfc, 0x6a, 0x0b, 0xc5, 0x04, 0x85, 0xbf, 0xb3, 0x00, 0x8a, 0x68, 0x31, 0xe1, 0xd7, 0x9a, 0x50, 0x4c, 0x40, 0xf8, 0x3b, 0x0b, 0x20, 0x8b, 0x16, 0x23, 0x8b, 0x17, 0x93,
0xb6, 0x74, 0x39, 0x3d, 0x8a, 0x27, 0x52, 0x82, 0xa4, 0x18, 0xce, 0x6c, 0xa4, 0x2a, 0x63, 0x24, 0xc3, 0x70, 0x2c, 0x39, 0x48, 0x88, 0xe1, 0x99, 0x8d, 0x54, 0x65, 0x8c, 0x84, 0x58, 0xbe, 0x65,
0xc5, 0xf2, 0xad, 0x88, 0x2f, 0xf7, 0x46, 0x9b, 0x68, 0x08, 0x5b, 0x4f, 0x67, 0x34, 0xca, 0xdc, 0xf1, 0xe5, 0xde, 0x68, 0x10, 0x0d, 0xc3, 0xce, 0xe3, 0x29, 0x0d, 0x92, 0x51, 0xe8, 0x39, 0x0b,
0x38, 0xf0, 0x96, 0xd2, 0x27, 0x1a, 0xc2, 0x12, 0x62, 0xe2, 0xa5, 0xd9, 0xae, 0xb7, 0xe4, 0x2e, 0xe9, 0x13, 0x0d, 0xc3, 0x12, 0x62, 0xec, 0xc4, 0xc9, 0xae, 0xb3, 0xe0, 0x2e, 0xa9, 0x13, 0x05,
0x69, 0x11, 0x45, 0xe2, 0x23, 0xd8, 0x7c, 0xca, 0xcf, 0xfe, 0xeb, 0xb4, 0xc3, 0xdf, 0xb6, 0xa1, 0xe2, 0x43, 0x58, 0x7f, 0xc4, 0x65, 0xff, 0x7d, 0xda, 0xe1, 0x6f, 0x1b, 0xd0, 0x55, 0x49, 0x30,
0xaf, 0x92, 0x60, 0xec, 0x67, 0x61, 0x1c, 0xa1, 0x3d, 0xd8, 0xca, 0x83, 0xe2, 0xfb, 0xf7, 0xf8, 0x74, 0x13, 0x3f, 0x0c, 0xd0, 0x1e, 0x6c, 0xa4, 0x41, 0x71, 0xdd, 0xdb, 0xbc, 0x72, 0xb8, 0xb4,
0xcd, 0xe1, 0xa7, 0xad, 0xdd, 0x70, 0x64, 0x1c, 0xf6, 0xcb, 0xeb, 0x7b, 0x17, 0x48, 0x75, 0x13, 0xce, 0x8e, 0x2d, 0xe3, 0xb0, 0x9f, 0x3f, 0xdf, 0x5b, 0x22, 0xc5, 0x4b, 0xe8, 0x13, 0xe8, 0x29,
0xfa, 0x04, 0x06, 0x0a, 0xe4, 0x01, 0x3a, 0x98, 0xd1, 0x84, 0x09, 0xb3, 0xb9, 0xb0, 0xff, 0x96, 0x24, 0x0f, 0xd0, 0xc1, 0x94, 0x46, 0x8c, 0x59, 0x8d, 0x33, 0x7b, 0x35, 0xc7, 0x4c, 0x27, 0xd9,
0x84, 0xe9, 0x2c, 0x7b, 0x17, 0x48, 0xed, 0x56, 0xf4, 0x08, 0x90, 0x76, 0x8e, 0x12, 0xd8, 0xe2, 0x5b, 0x22, 0xa5, 0x57, 0xd1, 0x7d, 0x40, 0x9a, 0x1c, 0xc5, 0xb0, 0xce, 0x19, 0xbe, 0x52, 0xd4,
0x02, 0xff, 0x53, 0xd5, 0xae, 0x10, 0x57, 0xb3, 0x4d, 0xb7, 0x54, 0xde, 0x28, 0x77, 0xc1, 0x23, 0x2e, 0x63, 0x57, 0x72, 0x4d, 0xb7, 0x54, 0x56, 0xd4, 0x68, 0xce, 0x23, 0x54, 0xb4, 0x34, 0x3d,
0x54, 0xb5, 0x34, 0x5f, 0xd7, 0x2d, 0xcd, 0x41, 0x74, 0x08, 0x97, 0x14, 0x78, 0x7f, 0x41, 0x7d, 0xd7, 0x2d, 0x4d, 0x91, 0xe8, 0x09, 0x6c, 0x2a, 0xe4, 0x9d, 0x39, 0x75, 0x47, 0x91, 0x13, 0xc4,
0x37, 0xf1, 0xa2, 0xf4, 0x98, 0x26, 0x6e, 0xcc, 0x63, 0x5a, 0xb5, 0x55, 0x67, 0xda, 0xbb, 0x40, 0x47, 0x34, 0x1a, 0x85, 0x3c, 0xa6, 0x9d, 0x9d, 0xd7, 0x72, 0xec, 0x4c, 0xa2, 0xbd, 0x25, 0x72,
0xce, 0xd9, 0x8c, 0x3e, 0x03, 0xa7, 0x6e, 0xe5, 0x41, 0x12, 0x4f, 0x79, 0x71, 0xf8, 0x53, 0xc1, 0xc6, 0x75, 0xf4, 0x19, 0xd8, 0x65, 0x27, 0x77, 0xa3, 0x70, 0xc2, 0xdb, 0x43, 0x67, 0xe7, 0xf5,
0xe7, 0x6e, 0x47, 0x7d, 0xb0, 0xdd, 0xa5, 0xb3, 0x32, 0xb4, 0x46, 0x1d, 0x62, 0xbb, 0xcb, 0x8f, 0x73, 0x58, 0x33, 0xb2, 0xbd, 0x25, 0x72, 0x26, 0x0b, 0xd4, 0x85, 0xda, 0x68, 0x61, 0x2f, 0xf7,
0x56, 0xa0, 0x73, 0xea, 0x4d, 0xe6, 0x14, 0xbf, 0xb4, 0x60, 0xab, 0x12, 0x5f, 0xad, 0x22, 0x5a, 0xad, 0x41, 0x93, 0xd4, 0x46, 0x8b, 0x8f, 0x96, 0xa1, 0x79, 0xe2, 0x8c, 0x67, 0x14, 0x7f, 0x6f,
0xaf, 0xa8, 0x88, 0xd5, 0x12, 0x66, 0xd7, 0x95, 0x30, 0x74, 0xbb, 0x92, 0x95, 0x6b, 0x37, 0xfe, 0xc1, 0x46, 0x21, 0xca, 0x5a, 0x5f, 0xb4, 0xce, 0xe9, 0x8b, 0xc5, 0x46, 0x56, 0x2b, 0x6b, 0x64,
0x2d, 0x25, 0x96, 0x53, 0xde, 0x48, 0xd7, 0x1f, 0x2d, 0x18, 0xd4, 0xe5, 0x0b, 0x1a, 0xc1, 0x45, 0xe8, 0x46, 0x21, 0x37, 0x3b, 0x3b, 0xff, 0x97, 0x1c, 0xf3, 0x89, 0x6f, 0x24, 0xed, 0xcf, 0x16,
0x2d, 0xc0, 0x5a, 0x01, 0x28, 0xc3, 0xac, 0x76, 0xc5, 0x13, 0x59, 0x5d, 0xc4, 0x5d, 0xc9, 0x69, 0xf4, 0xca, 0xb2, 0x06, 0x0d, 0xe0, 0x82, 0x16, 0x66, 0xad, 0x0d, 0xe4, 0xd1, 0xac, 0x83, 0x85,
0xb6, 0x16, 0xd1, 0x33, 0xb1, 0xd6, 0x12, 0x6b, 0x8a, 0x66, 0xc5, 0x25, 0xa2, 0x67, 0xd2, 0x2c, 0x63, 0xd9, 0x63, 0x44, 0xc5, 0xa4, 0x30, 0x3b, 0x0b, 0xe8, 0xa9, 0x38, 0xab, 0x8b, 0x33, 0x05,
0x71, 0x8d, 0x0b, 0x00, 0x0d, 0x61, 0x2d, 0x16, 0xaa, 0x3c, 0x98, 0x78, 0x27, 0xb2, 0xb4, 0xeb, 0xb3, 0x16, 0x13, 0xd0, 0x53, 0x69, 0x96, 0x28, 0xe6, 0x0c, 0x81, 0xfa, 0xd0, 0x09, 0x85, 0x2a,
0x10, 0xfe, 0xd9, 0x02, 0x54, 0xcd, 0xcc, 0xd7, 0x50, 0xdc, 0x74, 0x9a, 0xdd, 0xd8, 0x69, 0xe8, 0x77, 0xc7, 0xce, 0xb1, 0x6c, 0xf0, 0x3a, 0x0a, 0xff, 0x6a, 0x01, 0x2a, 0xe6, 0xe7, 0x0b, 0x28,
0xff, 0xb0, 0x15, 0xd1, 0x33, 0x62, 0x06, 0x46, 0x94, 0x82, 0xea, 0x42, 0xd9, 0x92, 0x36, 0x2f, 0x6e, 0x3a, 0xad, 0x56, 0xd9, 0x69, 0xe8, 0x4d, 0xd8, 0x08, 0xe8, 0x29, 0x31, 0x03, 0x23, 0x1a,
0xef, 0x86, 0x25, 0x2f, 0xb5, 0x20, 0xe8, 0x79, 0xf5, 0xaa, 0xe2, 0xe4, 0x4d, 0x79, 0xcb, 0xb3, 0x42, 0xf1, 0x20, 0x6f, 0x49, 0x83, 0x37, 0x79, 0xc3, 0x92, 0x1f, 0x2c, 0xb0, 0xcf, 0xca, 0xb9,
0x79, 0x85, 0x93, 0x14, 0x6b, 0x39, 0x51, 0x2c, 0xaf, 0x6f, 0x8f, 0xf0, 0x6f, 0xd5, 0x5a, 0x22, 0xf3, 0xda, 0x94, 0x33, 0xe1, 0xc3, 0xaf, 0xc6, 0x7b, 0x9d, 0x84, 0xd8, 0xf0, 0x09, 0x42, 0x59,
0x6f, 0x2a, 0x1a, 0x48, 0x8f, 0xe4, 0x34, 0xcb, 0xd9, 0x2c, 0x96, 0x8d, 0xc3, 0xce, 0x62, 0xb6, 0xc8, 0x6d, 0xc2, 0xbf, 0xd5, 0x90, 0x09, 0x9c, 0x89, 0x18, 0x25, 0x6d, 0x92, 0xc2, 0x2c, 0x6f,
0xff, 0x58, 0x5d, 0x85, 0x1e, 0xe1, 0xdf, 0xf8, 0xab, 0x22, 0x7b, 0x8b, 0xeb, 0xd9, 0xdc, 0xc9, 0x93, 0x50, 0x8e, 0x90, 0x5a, 0x12, 0xb2, 0xfb, 0x47, 0xaa, 0x24, 0xda, 0x84, 0x7f, 0xe3, 0x6f,
0xbc, 0x0b, 0x3e, 0x0c, 0x64, 0xde, 0xf2, 0x6f, 0xb6, 0x5b, 0x76, 0x9c, 0x83, 0x84, 0xd0, 0xd3, 0x2c, 0xd8, 0x2c, 0xaf, 0xb7, 0x7f, 0x5a, 0x3d, 0xfc, 0x65, 0x56, 0x4c, 0x59, 0xcf, 0xa8, 0x1e,
0xf8, 0x0b, 0x2a, 0x9b, 0x5e, 0x19, 0xc6, 0x77, 0xe0, 0x22, 0xa1, 0xcf, 0xb5, 0x28, 0xa7, 0x68, 0x73, 0x3e, 0x9a, 0xef, 0x79, 0xb2, 0x8c, 0xf8, 0x37, 0xbb, 0x2d, 0xc7, 0xe0, 0x41, 0x44, 0xe8,
0x00, 0x9d, 0x34, 0xf3, 0x92, 0x8c, 0x1f, 0xd8, 0x22, 0x82, 0x40, 0x9b, 0xd0, 0xa2, 0x51, 0x20, 0x49, 0xf8, 0x39, 0x95, 0x93, 0x38, 0x8f, 0xc6, 0x37, 0xe1, 0x02, 0xa1, 0xcf, 0xb4, 0xa4, 0x8b,
0xdd, 0xc1, 0x3e, 0xf1, 0x5b, 0xb0, 0x45, 0xe8, 0x6c, 0xb2, 0x34, 0x36, 0x3b, 0xb0, 0xe2, 0x05, 0x51, 0x0f, 0x9a, 0x71, 0xe2, 0x44, 0x09, 0x17, 0x58, 0x27, 0x02, 0x40, 0xeb, 0x50, 0xa7, 0x81,
0x41, 0x42, 0x53, 0x71, 0xed, 0x7a, 0x44, 0x91, 0xf8, 0x43, 0x40, 0xe6, 0x49, 0x0f, 0xa3, 0xe3, 0x27, 0x4d, 0x67, 0x9f, 0xf8, 0x2d, 0xd8, 0x20, 0x74, 0x3a, 0x5e, 0x18, 0x97, 0x6d, 0x58, 0x76,
0xb8, 0xb9, 0x9d, 0xf8, 0x77, 0x0b, 0x06, 0xe5, 0xf3, 0xb8, 0x88, 0x7f, 0xfc, 0xf8, 0xf4, 0xbd, 0x3c, 0x2f, 0xa2, 0xb1, 0xe8, 0x02, 0x6d, 0xa2, 0x40, 0xfc, 0x21, 0x20, 0x53, 0xd2, 0xbd, 0xe0,
0x05, 0x9b, 0x9a, 0xeb, 0xdc, 0x45, 0x18, 0xa4, 0x15, 0xab, 0xac, 0x1a, 0xab, 0xb6, 0x61, 0x95, 0x28, 0xac, 0x6e, 0x27, 0xfe, 0xd3, 0x82, 0x5e, 0x5e, 0x1e, 0x67, 0xf1, 0x9f, 0xdf, 0xe9, 0x7e,
0x65, 0x98, 0x5b, 0xa4, 0x47, 0x4e, 0xf3, 0xa1, 0x27, 0xe6, 0x2b, 0x2d, 0x39, 0xf4, 0x70, 0x8a, 0xb4, 0x60, 0x5d, 0x73, 0xdd, 0x68, 0xee, 0x7b, 0x71, 0xc1, 0x2a, 0xab, 0xc4, 0xaa, 0x2d, 0x58,
0xa9, 0x3b, 0xa3, 0x51, 0x10, 0x46, 0xea, 0x22, 0x29, 0xd2, 0x18, 0xa1, 0x3a, 0xe6, 0x08, 0x85, 0x61, 0xc9, 0x3e, 0xca, 0xd2, 0x23, 0x85, 0xf9, 0x26, 0x16, 0xf2, 0x93, 0xba, 0xdc, 0xc4, 0x38,
0x1f, 0xb3, 0xe0, 0x6a, 0xb1, 0x69, 0xae, 0xe3, 0x00, 0x3a, 0x6c, 0x70, 0x4b, 0x1d, 0x7b, 0xd8, 0xc4, 0xd4, 0x9d, 0xd2, 0xc0, 0xf3, 0x03, 0x55, 0xd7, 0x0a, 0x34, 0xf6, 0xba, 0xa6, 0xb9, 0xd7,
0x1a, 0xb5, 0x89, 0x20, 0xf0, 0x23, 0x96, 0x5b, 0x9a, 0xc5, 0x3c, 0xd0, 0x4d, 0xc4, 0xd5, 0xdc, 0xe1, 0x07, 0x2c, 0xb8, 0x5a, 0x6c, 0xaa, 0xeb, 0xd8, 0x83, 0x26, 0xdb, 0x26, 0x63, 0xbb, 0xd6,
0x06, 0xfc, 0x04, 0xfe, 0x55, 0x52, 0x8e, 0x8b, 0xbb, 0x23, 0x67, 0xf5, 0x1c, 0x91, 0x23, 0xc3, 0xaf, 0x0f, 0x1a, 0x44, 0x00, 0xf8, 0x3e, 0xcb, 0x2d, 0xcd, 0x62, 0x1e, 0xe8, 0x2a, 0xec, 0x4a,
0x56, 0xa9, 0x41, 0xb9, 0x0b, 0x52, 0x62, 0xc4, 0x33, 0xd8, 0x36, 0x73, 0xf9, 0x30, 0x7a, 0x5a, 0xaa, 0x01, 0x3f, 0x84, 0xff, 0xe5, 0x94, 0xe3, 0xec, 0x6e, 0xca, 0x1f, 0x88, 0x14, 0x23, 0xf7,
0xcc, 0x47, 0x4d, 0xf4, 0x3c, 0x6f, 0xfa, 0x29, 0x0a, 0x52, 0x4b, 0x2f, 0x48, 0xf8, 0x89, 0x74, 0x98, 0x8d, 0xdc, 0xcc, 0x1c, 0xcd, 0x49, 0x8e, 0x10, 0x4f, 0x61, 0xcb, 0xcc, 0xe5, 0xc7, 0xc1,
0xb0, 0x3c, 0x68, 0x9c, 0xa6, 0x34, 0x4b, 0xd1, 0xfb, 0xb0, 0x31, 0xd7, 0x01, 0x99, 0xbd, 0x03, 0xa3, 0x6c, 0x69, 0xab, 0xa2, 0xe7, 0x59, 0x2b, 0x59, 0xd6, 0x7c, 0xea, 0x7a, 0xf3, 0xc1, 0x0f,
0x69, 0x81, 0xc1, 0x4c, 0x4c, 0x56, 0xfc, 0x18, 0x36, 0x4c, 0x61, 0xff, 0x83, 0xae, 0x27, 0xa4, 0xa5, 0x83, 0xa5, 0xa0, 0x61, 0x1c, 0xd3, 0x24, 0x46, 0xef, 0xc3, 0xda, 0x4c, 0x47, 0xc8, 0xec,
0x08, 0x3f, 0x6c, 0x48, 0x29, 0x72, 0xbb, 0x5c, 0x2c, 0x95, 0xc6, 0xb6, 0x2a, 0x8d, 0xf8, 0x1d, 0xed, 0x49, 0x0b, 0x0c, 0x62, 0x62, 0x92, 0xe2, 0x07, 0xb0, 0x66, 0x32, 0x7b, 0x03, 0x5a, 0x8e,
0x56, 0x49, 0x7c, 0x1a, 0xce, 0xb2, 0xfc, 0xc7, 0xa6, 0x81, 0x23, 0xf0, 0x97, 0xec, 0x56, 0xf3, 0xe0, 0x22, 0xfc, 0xb0, 0x26, 0xb9, 0xc8, 0xeb, 0xf2, 0x30, 0xd7, 0x06, 0x1b, 0xaa, 0x0d, 0xe2,
0x6d, 0x07, 0x72, 0xee, 0x3d, 0x48, 0x76, 0xe9, 0xa4, 0x91, 0x13, 0x31, 0x74, 0xe2, 0xbc, 0x2b, 0x77, 0x58, 0x27, 0x71, 0xa9, 0x3f, 0x4d, 0xd2, 0xbf, 0xad, 0x0a, 0x8e, 0xc0, 0x5f, 0xb0, 0xaa,
0x96, 0x2f, 0xad, 0x58, 0x62, 0x59, 0xeb, 0x49, 0x99, 0x6a, 0xf0, 0x57, 0x34, 0xfe, 0xc1, 0x32, 0xe6, 0xd7, 0x0e, 0xe4, 0x32, 0x7e, 0x10, 0xed, 0xd2, 0x71, 0x25, 0x27, 0x62, 0x68, 0x86, 0xe9,
0x0f, 0xdf, 0x8f, 0x03, 0x56, 0x18, 0x67, 0x8d, 0x0e, 0xbf, 0x0e, 0xbd, 0x59, 0x42, 0x4f, 0x0f, 0x90, 0xce, 0x17, 0xad, 0x38, 0x62, 0x59, 0xeb, 0x48, 0x9e, 0xea, 0x6f, 0x44, 0xc1, 0xf8, 0x27,
0xce, 0x55, 0xa0, 0x58, 0x46, 0x6f, 0xc3, 0xba, 0x3f, 0x4f, 0x12, 0x1a, 0x65, 0x45, 0xa7, 0x2e, 0xcb, 0x14, 0xbe, 0x1f, 0x7a, 0xac, 0x31, 0x4e, 0x2b, 0x09, 0xbf, 0x0a, 0xed, 0x69, 0x44, 0x4f,
0xb3, 0x1b, 0x1c, 0x4c, 0xed, 0xa9, 0xd4, 0x46, 0xde, 0xc3, 0x9c, 0xc6, 0x2f, 0x58, 0x3e, 0x73, 0x0e, 0xce, 0x54, 0x20, 0x3b, 0x46, 0x6f, 0xc3, 0xaa, 0x3b, 0x8b, 0x22, 0x1a, 0x24, 0xd9, 0xe2,
0xad, 0x45, 0x81, 0xd8, 0x8f, 0x83, 0xf0, 0xb8, 0x59, 0xda, 0x5d, 0x01, 0x60, 0x5a, 0x19, 0xa3, 0x90, 0x27, 0x37, 0x28, 0x98, 0xda, 0x13, 0xa9, 0x8d, 0xac, 0xc3, 0x14, 0xc6, 0xcf, 0x59, 0x3e,
0x8e, 0x86, 0xa0, 0xab, 0xb0, 0x21, 0xd5, 0x30, 0x9a, 0xae, 0x09, 0xe2, 0x5f, 0x2c, 0x70, 0xa4, 0x73, 0xad, 0x45, 0x83, 0xd8, 0x0f, 0x3d, 0xff, 0xa8, 0x5a, 0xda, 0x5d, 0x02, 0x60, 0x5a, 0x19,
0x06, 0x45, 0xd5, 0x53, 0xe3, 0x41, 0x13, 0x35, 0xee, 0x40, 0x9f, 0x1d, 0xba, 0x5b, 0x1e, 0x0e, 0x9b, 0x97, 0x86, 0x41, 0x97, 0x61, 0x4d, 0xaa, 0x61, 0xec, 0x00, 0x26, 0x12, 0xff, 0x66, 0x81,
0x6a, 0x6a, 0x69, 0x89, 0x11, 0xdd, 0xe6, 0x1a, 0xee, 0x96, 0x67, 0xb1, 0x9a, 0x9d, 0x26, 0x1f, 0x2d, 0x35, 0xc8, 0xba, 0x9e, 0xda, 0x56, 0xaa, 0xa8, 0x71, 0x13, 0xba, 0x4c, 0xe8, 0x6e, 0x7e,
0x9b, 0x12, 0x78, 0xe0, 0x85, 0xb7, 0xd4, 0x94, 0xa0, 0x41, 0xf8, 0x1b, 0x5e, 0x67, 0xb9, 0x59, 0x57, 0x29, 0xe9, 0xa5, 0x39, 0x42, 0x74, 0x83, 0x6b, 0xb8, 0x9b, 0x5f, 0x0d, 0x4b, 0x6e, 0x9a,
0x45, 0x23, 0xbe, 0x5b, 0x34, 0x28, 0x77, 0xa1, 0x7e, 0x55, 0xd9, 0x89, 0x97, 0x2a, 0x65, 0x42, 0x74, 0x6c, 0x69, 0xe1, 0x81, 0x17, 0xde, 0x52, 0x4b, 0x8b, 0x86, 0xc2, 0x5f, 0xf3, 0x3e, 0xcb,
0xc4, 0xb1, 0xcc, 0x8e, 0xae, 0xc3, 0xa6, 0xfa, 0xfd, 0xcb, 0xbb, 0xb1, 0xcd, 0x4f, 0xaf, 0xe0, 0xcd, 0xca, 0x06, 0xf1, 0xad, 0x6c, 0x40, 0x8d, 0xe6, 0xea, 0xff, 0x99, 0x49, 0xdc, 0x2c, 0xb4,
0x2c, 0x23, 0xb7, 0xa5, 0x0a, 0x63, 0xdf, 0x2f, 0xb4, 0x3f, 0x9c, 0x05, 0x7f, 0x63, 0xdf, 0xe2, 0x09, 0x11, 0xc7, 0x3c, 0x39, 0xba, 0x0a, 0xeb, 0xea, 0x9f, 0x34, 0x9d, 0xc6, 0x35, 0x2e, 0xbd,
0xdf, 0x2c, 0x56, 0xaf, 0x8d, 0xcb, 0xff, 0x46, 0x5c, 0x87, 0x61, 0x9d, 0xa9, 0x78, 0x5f, 0xb5, 0x80, 0x67, 0x19, 0xb9, 0x25, 0x55, 0x18, 0xba, 0x6e, 0xa6, 0xfd, 0xe3, 0xa9, 0xf7, 0x2f, 0xf6,
0x1d, 0xe1, 0x36, 0x03, 0x63, 0x71, 0xf5, 0xe7, 0xc9, 0x7d, 0xf3, 0xe7, 0x5e, 0x87, 0xd8, 0x8c, 0x2d, 0xfe, 0xc3, 0x62, 0xfd, 0xda, 0x28, 0xfe, 0x97, 0xe2, 0x3a, 0x0c, 0xab, 0x4c, 0xc5, 0x3b,
0x91, 0xce, 0x8f, 0x58, 0x8a, 0x26, 0x32, 0xae, 0x32, 0xfa, 0x65, 0x58, 0x7b, 0x3d, 0xe8, 0x18, 0x6a, 0xec, 0x08, 0xb7, 0x19, 0x38, 0x16, 0x57, 0x77, 0x16, 0xdd, 0x31, 0x5f, 0x1c, 0x74, 0x14,
0xaf, 0x07, 0xc5, 0x0b, 0x41, 0x57, 0x7f, 0x21, 0xc0, 0x9f, 0xe7, 0xf5, 0xc3, 0x15, 0x3d, 0xfd, 0xdb, 0x31, 0xe2, 0xd9, 0x21, 0x4b, 0xd1, 0x48, 0xc6, 0x55, 0x46, 0x3f, 0x8f, 0xd6, 0x9e, 0x34,
0x35, 0xe2, 0xc4, 0xc6, 0x96, 0x79, 0x22, 0xf7, 0xa9, 0xab, 0x58, 0x20, 0xf8, 0x05, 0x5c, 0xdc, 0x9a, 0xc6, 0x93, 0x46, 0xf6, 0x6c, 0xd1, 0xd2, 0x9f, 0x2d, 0xf0, 0xa7, 0x69, 0xff, 0x18, 0x89,
0xaf, 0xba, 0xa3, 0x59, 0x03, 0x0c, 0xb5, 0x06, 0x18, 0x06, 0x35, 0x8f, 0x14, 0x75, 0x05, 0xa8, 0x99, 0xfe, 0x02, 0x71, 0x62, 0x6b, 0xcb, 0x2c, 0x92, 0xf7, 0x54, 0x29, 0x66, 0x18, 0xfc, 0x1c,
0xfc, 0x48, 0x71, 0x19, 0xba, 0x87, 0x61, 0x94, 0xbd, 0x7b, 0x8b, 0xc9, 0x0c, 0xbc, 0xcc, 0x53, 0x2e, 0xec, 0x17, 0xdd, 0x51, 0x6d, 0x00, 0xfa, 0xda, 0x00, 0xf4, 0xbd, 0x92, 0x97, 0x93, 0xb2,
0x0f, 0x2d, 0xec, 0x1b, 0x27, 0xb0, 0x31, 0x16, 0x4f, 0x5a, 0xb2, 0x7d, 0x34, 0x51, 0xae, 0x68, 0x06, 0x94, 0x7f, 0x39, 0xb9, 0x08, 0xad, 0xc7, 0x7e, 0x90, 0xbc, 0x7b, 0x9d, 0xf1, 0xf4, 0x9c,
0x31, 0x76, 0xb3, 0x16, 0xd3, 0xd2, 0xa7, 0x6f, 0x1c, 0xc3, 0x3a, 0xa1, 0xcf, 0xd9, 0x40, 0xf8, 0xc4, 0x51, 0xaf, 0x3f, 0xec, 0x1b, 0x47, 0xb0, 0x36, 0x14, 0xef, 0x6c, 0x72, 0x7c, 0x54, 0x51,
0xc6, 0x8f, 0x1c, 0x40, 0x27, 0x4c, 0xc7, 0x13, 0xd5, 0x23, 0x04, 0x81, 0xef, 0x42, 0x9f, 0x77, 0x2e, 0x1b, 0x31, 0xb5, 0x6a, 0x23, 0xa6, 0xae, 0x6f, 0xda, 0x38, 0x84, 0x55, 0x42, 0x9f, 0xb1,
0xdd, 0xe2, 0xc8, 0x1d, 0xe8, 0x79, 0x8a, 0x90, 0x3f, 0x96, 0x9b, 0x4a, 0xa2, 0xc2, 0x49, 0xc1, 0x85, 0xf0, 0xa5, 0x8b, 0xec, 0x41, 0xd3, 0x8f, 0x87, 0x63, 0x35, 0x23, 0x04, 0x80, 0x6f, 0x41,
0x82, 0xbf, 0x86, 0x5e, 0xb1, 0xb9, 0x61, 0x87, 0xbd, 0x02, 0x90, 0x50, 0xff, 0x74, 0xac, 0xff, 0x97, 0x4f, 0xdd, 0x4c, 0xe4, 0x36, 0xb4, 0x1d, 0x05, 0xc8, 0xff, 0xdc, 0x75, 0xc5, 0x51, 0xe1,
0x80, 0x68, 0x08, 0x1a, 0xc1, 0x8a, 0x7c, 0x4d, 0x94, 0x71, 0xec, 0x17, 0x1a, 0x30, 0x94, 0xa8, 0x49, 0x46, 0x82, 0xbf, 0x82, 0x76, 0x76, 0xb9, 0xe2, 0x84, 0xbd, 0x04, 0x10, 0x51, 0xf7, 0x64,
0x65, 0xfc, 0x1e, 0x74, 0xc7, 0xb9, 0x4b, 0xe5, 0xbc, 0x61, 0x9d, 0x33, 0x6f, 0xd8, 0xc6, 0xbc, 0xa8, 0xff, 0x6c, 0x68, 0x18, 0x34, 0x80, 0x65, 0xf9, 0xc4, 0x29, 0xe3, 0xd8, 0xcd, 0x34, 0x60,
0x71, 0x0d, 0x40, 0x0e, 0xde, 0x34, 0x7d, 0xc5, 0x54, 0x7f, 0xd4, 0xe5, 0xef, 0x99, 0x37, 0xff, 0x58, 0xa2, 0x8e, 0xf1, 0x7b, 0xd0, 0x1a, 0xa6, 0x2e, 0x95, 0xfb, 0x86, 0x75, 0xc6, 0xbe, 0x51,
0x08, 0x00, 0x00, 0xff, 0xff, 0x30, 0x1f, 0xdd, 0x3b, 0xf7, 0x14, 0x00, 0x00, 0x33, 0xf6, 0x8d, 0x2b, 0x00, 0x72, 0xf1, 0xa6, 0xf1, 0x39, 0x5b, 0xfd, 0x61, 0x8b, 0x3f, 0xb2,
0x5e, 0xfb, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xd0, 0xe8, 0xee, 0x8c, 0x15, 0x00, 0x00,
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment