Hotfix/rename caspervotes (#1384)

* Begin renaming

* Missing goimports

* Continue rename

* Fix errors and mismatches

* Run proto script

* Fix proto

* Fix some more issues

* Fix tests
duh

* Fix goimports
This commit is contained in:
Ivan Martinez
2019-01-28 01:13:37 -05:00
committed by Nishant Das
parent 4d43f5128a
commit 8d88394b28
9 changed files with 342 additions and 332 deletions

View File

@@ -65,14 +65,14 @@ test_cases:
LkmqmqoodLKAslkjdkajsdljasdkajlksjdasldjasdd
casper_slashings:
- slot: 59 # At slot 59, we trigger a casper slashing
votes_1_slot: 55
votes_2_slot: 55
votes_1_justified_slot: 0
votes_2_justified_slot: 1
votes_1_custody_0_indices: [16386]
votes_1_custody_1_indices: []
votes_2_custody_0_indices: []
votes_2_custody_1_indices: [16386]
slashable_vote_data_1_slot: 55
slashable_vote_data_2_slot: 55
slashable_vote_data_1_justified_slot: 0
slashable_vote_data_2_justified_slot: 1
slashable_vote_data_1_custody_0_indices: [16386]
slashable_vote_data_1_custody_1_indices: []
slashable_vote_data_2_custody_0_indices: []
slashable_vote_data_2_custody_1_indices: [16386]
results:
slot: 64
num_validators: 16387
@@ -98,7 +98,6 @@ test_cases:
num_validators: 1000 # Validator registry should not have grown if slots 10 and 20 were skipped
```
#### Test Configuration Options
The following configuration options are available for state transition tests:
@@ -115,39 +114,44 @@ The following configuration options are available for state transition tests:
- **validator_exits**: `[Validator Exit Config]` trigger a voluntary validator exit at a certain slot for a validator index
**Deposit Config**
- **slot**: `int` a slot in which to trigger a deposit during a state transition test
- **amount**: `int` the ETH deposit amount to trigger
- **merkle_index**: `int` the index of the deposit in the validator deposit contract's Merkle trie
- **pubkey**: `!!binary` the public key of the validator in the triggered deposit object
**Proposer Slashing Config**
- **slot**: `int` a slot in which to trigger a proposer slashing during a state transition test
- **proposer_index**: `int` the proposer to penalize
- **proposal_1_shard**: `int` the first proposal data's shard id
- **proposal_1_slot**: `int` the first proposal data's slot
- **proposal_1_root**: `!!binary` the second proposal data's block root
- **proposal_2_shard**: `int` the second proposal data's shard id
- **proposal_2_shard**: `int` the second proposal data's shard id
- **proposal_2_slot**: `int` the second proposal data's slot
- **proposal_2_root**: `!!binary` the second proposal data's block root
**Casper Slashing Config**
- **slot**: `int` a slot in which to trigger a casper slashing during a state transition test
- **votes_1_slot**: `int` the slot of the attestation data of votes1
- **votes_2_slot**: `int` the slot of the attestation data of votes2
- **votes_1_justified_slot**: `int` the justified slot of the attestation data of votes1
- **votes_2_justified_slot**: `int` the justified slot of the attestation data of votes2
- **votes_1_custody_0_indices**: `[int]` the custody indices 0 for votes1
- **votes_1_custody_1_indices**: `[int]` the custody indices 1 for votes1
- **votes_2_custody_0_indices**: `[int]` the custody indices 0 for votes2
- **votes_2_custody_1_indices**: `[int]` the custody indices 1 for votes2
- **slashable_vote_data_1_slot**: `int` the slot of the attestation data of slashableVoteData1
- **slashable_vote_data_2_slot**: `int` the slot of the attestation data of slashableVoteData2
- **slashable_vote_data_1_justified_slot**: `int` the justified slot of the attestation data of slashableVoteData1
- **slashable_vote_data_2_justified_slot**: `int` the justified slot of the attestation data of slashableVoteData2
- **slashable_vote_data_1_custody_0_indices**: `[int]` the custody indices 0 for slashableVoteData1
- **slashable_vote_data_1_custody_1_indices**: `[int]` the custody indices 1 for slashableVoteData1
- **slashable_vote_data_2_custody_0_indices**: `[int]` the custody indices 0 for slashableVoteData2
- **slashable_vote_data_2_custody_1_indices**: `[int]` the custody indices 1 for slashableVoteData2
**Validator Exit Config**
- **slot**: `int` the slot at which a validator wants to voluntarily exit the validator registry
- **validator_index**: `int` the index of the validator in the registry that is exiting
#### Test Results
The following are **mandatory** fields as they correspond to checks done at the end of the test run.
- **slot**: `int` check the slot of the state resulting from applying N state transitions in the test
- **num_validators** `[int]` check the number of validators in the validator registry after applying N state transitions
- **penalized_validators** `[int]` the list of validator indices we verify were penalized during the test
@@ -175,32 +179,32 @@ fork: tchaikovsky
version: 1.0
test_cases:
- input: []
output: []
seed: !!binary ""
- name: boring_list
description: List with a single element, 0
input: [0]
output: [0]
seed: !!binary ""
- input: [255]
output: [255]
seed: !!binary ""
- input: [4, 6, 2, 6, 1, 4, 6, 2, 1, 5]
output: [1, 6, 4, 1, 6, 6, 2, 2, 4, 5]
seed: !!binary ""
- input: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
output: [4, 7, 10, 13, 3, 1, 2, 9, 12, 6, 11, 8, 5]
seed: !!binary ""
- input: [65, 6, 2, 6, 1, 4, 6, 2, 1, 5]
output: [6, 65, 2, 5, 4, 2, 6, 6, 1, 1]
seed: !!binary |
JlAYJ5H2j8g7PLiPHZI/rTS1uAvKiieOrifPN6Moso0=
- input: []
output: []
seed: !!binary ""
- name: boring_list
description: List with a single element, 0
input: [0]
output: [0]
seed: !!binary ""
- input: [255]
output: [255]
seed: !!binary ""
- input: [4, 6, 2, 6, 1, 4, 6, 2, 1, 5]
output: [1, 6, 4, 1, 6, 6, 2, 2, 4, 5]
seed: !!binary ""
- input: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
output: [4, 7, 10, 13, 3, 1, 2, 9, 12, 6, 11, 8, 5]
seed: !!binary ""
- input: [65, 6, 2, 6, 1, 4, 6, 2, 1, 5]
output: [6, 65, 2, 5, 4, 2, 6, 6, 1, 1]
seed: !!binary |
JlAYJ5H2j8g7PLiPHZI/rTS1uAvKiieOrifPN6Moso0=
```
# Using the Runner
First, create a directory containing the YAML files you wish to test (or use the default `./sampletests` directory included with Prysm).
First, create a directory containing the YAML files you wish to test (or use the default `./sampletests` directory included with Prysm).
Then, make sure you have the following folder structure for the directory:
```
@@ -218,7 +222,6 @@ yourtestdir/
Then, navigate to the test runner's directory and use the go tool as follows:
```bash
go run main.go -tests-dir /path/to/your/testsdir
```

View File

@@ -87,21 +87,21 @@ func generateSimulatedBlock(
}
if simulatedCasperSlashing != nil {
block.Body.CasperSlashings = append(block.Body.CasperSlashings, &pb.CasperSlashing{
Votes_1: &pb.SlashableVoteData{
SlashableVoteData_1: &pb.SlashableVoteData{
Data: &pb.AttestationData{
Slot: simulatedCasperSlashing.Votes1Slot,
JustifiedSlot: simulatedCasperSlashing.Votes1JustifiedSlot,
Slot: simulatedCasperSlashing.SlashableVoteData1Slot,
JustifiedSlot: simulatedCasperSlashing.SlashableVoteData1JustifiedSlot,
},
CustodyBit_0Indices: simulatedCasperSlashing.Votes1CustodyBit0Indices,
CustodyBit_1Indices: simulatedCasperSlashing.Votes1CustodyBit1Indices,
CustodyBit_0Indices: simulatedCasperSlashing.SlashableVoteData1CustodyBit0Indices,
CustodyBit_1Indices: simulatedCasperSlashing.SlashableVoteData1CustodyBit1Indices,
},
Votes_2: &pb.SlashableVoteData{
SlashableVoteData_2: &pb.SlashableVoteData{
Data: &pb.AttestationData{
Slot: simulatedCasperSlashing.Votes2Slot,
JustifiedSlot: simulatedCasperSlashing.Votes2JustifiedSlot,
Slot: simulatedCasperSlashing.SlashableVoteData2Slot,
JustifiedSlot: simulatedCasperSlashing.SlashableVoteData2JustifiedSlot,
},
CustodyBit_0Indices: simulatedCasperSlashing.Votes2CustodyBit0Indices,
CustodyBit_1Indices: simulatedCasperSlashing.Votes2CustodyBit1Indices,
CustodyBit_0Indices: simulatedCasperSlashing.SlashableVoteData2CustodyBit0Indices,
CustodyBit_1Indices: simulatedCasperSlashing.SlashableVoteData2CustodyBit1Indices,
},
})
}

View File

@@ -52,15 +52,15 @@ type StateTestProposerSlashing struct {
// StateTestCasperSlashing --
type StateTestCasperSlashing struct {
Slot uint64 `yaml:"slot"`
Votes1Slot uint64 `yaml:"votes_1_slot"`
Votes1JustifiedSlot uint64 `yaml:"votes_1_justified_slot"`
Votes1CustodyBit0Indices []uint32 `yaml:"votes_1_custody_0_indices"`
Votes1CustodyBit1Indices []uint32 `yaml:"votes_1_custody_1_indices"`
Votes2Slot uint64 `yaml:"votes_2_slot"`
Votes2JustifiedSlot uint64 `yaml:"votes_2_justified_slot"`
Votes2CustodyBit0Indices []uint32 `yaml:"votes_2_custody_0_indices"`
Votes2CustodyBit1Indices []uint32 `yaml:"votes_2_custody_1_indices"`
Slot uint64 `yaml:"slot"`
SlashableVoteData1Slot uint64 `yaml:"slashable_vote_data_1_slot"`
SlashableVoteData1JustifiedSlot uint64 `yaml:"slashable_vote_data_1_justified_slot"`
SlashableVoteData1CustodyBit0Indices []uint32 `yaml:"slashable_vote_data_1_custody_0_indices"`
SlashableVoteData1CustodyBit1Indices []uint32 `yaml:"slashable_vote_data_1_custody_1_indices"`
SlashableVoteData2Slot uint64 `yaml:"slashable_vote_data_2_slot"`
SlashableVoteData2JustifiedSlot uint64 `yaml:"slashable_vote_data_2_justified_slot"`
SlashableVoteData2CustodyBit0Indices []uint32 `yaml:"slashable_vote_data_2_custody_0_indices"`
SlashableVoteData2CustodyBit1Indices []uint32 `yaml:"slashable_vote_data_2_custody_1_indices"`
}
// StateTestValidatorExit --

View File

@@ -44,14 +44,14 @@ test_cases:
LkmqmqoodLKAslkjdkajsdljasdkajlksjdasldjasdd
casper_slashings:
- slot: 59 # At slot 59, we trigger a casper slashing
votes_1_slot: 55
votes_2_slot: 55
votes_1_justified_slot: 0
votes_2_justified_slot: 1
votes_1_custody_0_indices: [16386]
votes_1_custody_1_indices: []
votes_2_custody_0_indices: []
votes_2_custody_1_indices: [16386]
slashable_vote_data_1_slot: 55
slashable_vote_data_2_slot: 55
slashable_vote_data_1_justified_slot: 0
slashable_vote_data_2_justified_slot: 1
slashable_vote_data_1_custody_0_indices: [16386]
slashable_vote_data_1_custody_1_indices: []
slashable_vote_data_2_custody_0_indices: []
slashable_vote_data_2_custody_1_indices: [16386]
validator_exits:
- slot: 60
validator_index: 100 # At slot 60, validator at index 100 triggers a voluntary exit
@@ -79,4 +79,4 @@ test_cases:
# Oklajsjdkaklsdlkajsdjlajslkdjlkasjlkdjlajdsd
# results:
# slot: 128
# num_validators: 1000 # Validator registry should not have grown if slots 10 and 20 were skipped
# num_validators: 1000 # Validator registry should not have grown if slots 10 and 20 were skipped

View File

@@ -247,26 +247,26 @@ func ProcessCasperSlashings(
}
func verifyCasperSlashing(slashing *pb.CasperSlashing) error {
votes1 := slashing.Votes_1
votes2 := slashing.Votes_2
votes1Attestation := votes1.Data
votes2Attestation := votes2.Data
slashableVoteData1 := slashing.SlashableVoteData_1
slashableVoteData2 := slashing.SlashableVoteData_2
slashableVoteData1Attestation := slashableVoteData1.Data
slashableVoteData2Attestation := slashableVoteData2.Data
if err := verifyCasperVotes(votes1); err != nil {
return fmt.Errorf("could not verify casper votes 1: %v", err)
if err := verifySlashableVoteData(slashableVoteData1); err != nil {
return fmt.Errorf("could not verify casper slashable vote data 1: %v", err)
}
if err := verifyCasperVotes(votes2); err != nil {
return fmt.Errorf("could not verify casper votes 2: %v", err)
if err := verifySlashableVoteData(slashableVoteData2); err != nil {
return fmt.Errorf("could not verify casper slashable vote data 2: %v", err)
}
// Inner attestation data structures for the votes should not be equal,
// as that would mean both votes are the same and therefore no slashing
// should occur.
if reflect.DeepEqual(votes1Attestation, votes2Attestation) {
if reflect.DeepEqual(slashableVoteData1Attestation, slashableVoteData2Attestation) {
return fmt.Errorf(
"casper slashing inner vote attestation data should not match: %v, %v",
votes1Attestation,
votes2Attestation,
"casper slashing inner slashable vote data attestation should not match: %v, %v",
slashableVoteData1Attestation,
slashableVoteData2Attestation,
)
}
@@ -276,46 +276,50 @@ func verifyCasperSlashing(slashing *pb.CasperSlashing) error {
// (vote2.slot < vote1.slot)
// OR
// vote1.slot == vote2.slot
justificationValidity := (votes1Attestation.JustifiedSlot < votes2Attestation.JustifiedSlot) &&
(votes2Attestation.JustifiedSlot+1 == votes2Attestation.Slot) &&
(votes2Attestation.Slot < votes1Attestation.Slot)
justificationValidity :=
(slashableVoteData1Attestation.JustifiedSlot < slashableVoteData2Attestation.JustifiedSlot) &&
(slashableVoteData2Attestation.JustifiedSlot+1 == slashableVoteData2Attestation.Slot) &&
(slashableVoteData2Attestation.Slot < slashableVoteData1Attestation.Slot)
slotsEqual := votes1Attestation.Slot == votes2Attestation.Slot
slotsEqual := slashableVoteData1Attestation.Slot == slashableVoteData2Attestation.Slot
if !(justificationValidity || slotsEqual) {
return fmt.Errorf(
`
Expected the following conditions to hold:
(vote1.JustifiedSlot < vote2.JustifiedSlot) &&
(vote2.JustifiedSlot + 1 == vote2.Slot) &&
(vote2.Slot < vote1.Slot)
(slashableVoteData1.JustifiedSlot <
slashableVoteData2.JustifiedSlot) &&
(slashableVoteData2.JustifiedSlot + 1
== slashableVoteData1.Slot) &&
(slashableVoteData2.Slot < slashableVoteData1.Slot)
OR
vote1.Slot == vote.Slot
slashableVoteData1.Slot == slashableVoteData2.Slot
Instead, received vote1.JustifiedSlot %d, vote2.JustifiedSlot %d
and vote1.Slot %d, vote2.Slot %d
Instead, received slashableVoteData1.JustifiedSlot %d,
slashableVoteData2.JustifiedSlot %d
and slashableVoteData1.Slot %d, slashableVoteData2.Slot %d
`,
votes1Attestation.JustifiedSlot,
votes2Attestation.JustifiedSlot,
votes1Attestation.Slot,
votes2Attestation.Slot,
slashableVoteData1Attestation.JustifiedSlot,
slashableVoteData2Attestation.JustifiedSlot,
slashableVoteData1Attestation.Slot,
slashableVoteData2Attestation.Slot,
)
}
return nil
}
func casperSlashingPenalizedIndices(slashing *pb.CasperSlashing) ([]uint32, error) {
votes1 := slashing.Votes_1
votes2 := slashing.Votes_2
votes1Indices := append(
votes1.CustodyBit_0Indices,
votes1.CustodyBit_1Indices...,
slashableVoteData1 := slashing.SlashableVoteData_1
slashableVoteData2 := slashing.SlashableVoteData_2
slashableVoteData1Indices := append(
slashableVoteData1.CustodyBit_0Indices,
slashableVoteData1.CustodyBit_1Indices...,
)
votes2Indices := append(
votes2.CustodyBit_0Indices,
votes2.CustodyBit_1Indices...,
slashableVoteData2Indices := append(
slashableVoteData2.CustodyBit_0Indices,
slashableVoteData2.CustodyBit_1Indices...,
)
indicesIntersection := slices.Intersection(votes1Indices, votes2Indices)
indicesIntersection := slices.Intersection(slashableVoteData1Indices, slashableVoteData2Indices)
if len(indicesIntersection) < 1 {
return nil, fmt.Errorf(
"expected intersection of vote indices to be non-empty: %v",
@@ -325,7 +329,7 @@ func casperSlashingPenalizedIndices(slashing *pb.CasperSlashing) ([]uint32, erro
return indicesIntersection, nil
}
func verifyCasperVotes(votes *pb.SlashableVoteData) error {
func verifySlashableVoteData(votes *pb.SlashableVoteData) error {
totalCustody := len(votes.CustodyBit_0Indices) +
len(votes.CustodyBit_1Indices)
if uint64(totalCustody) > params.BeaconConfig().MaxCasperVotes {

View File

@@ -363,7 +363,7 @@ func TestProcessCasperSlashings_ThresholdReached(t *testing.T) {
func TestProcessCasperSlashings_VoteThresholdReached(t *testing.T) {
slashings := []*pb.CasperSlashing{
{
Votes_1: &pb.SlashableVoteData{
SlashableVoteData_1: &pb.SlashableVoteData{
CustodyBit_0Indices: make(
[]uint32,
config.MaxCasperVotes,
@@ -373,7 +373,7 @@ func TestProcessCasperSlashings_VoteThresholdReached(t *testing.T) {
config.MaxCasperVotes,
),
},
Votes_2: &pb.SlashableVoteData{
SlashableVoteData_2: &pb.SlashableVoteData{
CustodyBit_0Indices: make(
[]uint32,
config.MaxCasperVotes,
@@ -410,10 +410,10 @@ func TestProcessCasperSlashings_VoteThresholdReached(t *testing.T) {
t.Errorf("Expected %s, received %v", want, err)
}
// Perform the same check for Votes_2.
// Perform the same check for SlashableVoteData_2.
slashings = []*pb.CasperSlashing{
{
Votes_1: &pb.SlashableVoteData{
SlashableVoteData_1: &pb.SlashableVoteData{
CustodyBit_0Indices: make(
[]uint32,
config.MaxCasperVotes,
@@ -423,7 +423,7 @@ func TestProcessCasperSlashings_VoteThresholdReached(t *testing.T) {
config.MaxCasperVotes,
),
},
Votes_2: &pb.SlashableVoteData{
SlashableVoteData_2: &pb.SlashableVoteData{
CustodyBit_0Indices: make(
[]uint32,
config.MaxCasperVotes,
@@ -458,10 +458,10 @@ func TestProcessCasperSlashings_UnmatchedAttestations(t *testing.T) {
}
slashings := []*pb.CasperSlashing{
{
Votes_1: &pb.SlashableVoteData{
SlashableVoteData_1: &pb.SlashableVoteData{
Data: att1,
},
Votes_2: &pb.SlashableVoteData{
SlashableVoteData_2: &pb.SlashableVoteData{
Data: att1,
},
},
@@ -479,7 +479,7 @@ func TestProcessCasperSlashings_UnmatchedAttestations(t *testing.T) {
},
}
want := fmt.Sprintf(
"casper slashing inner vote attestation data should not match: %v, %v",
"casper slashing inner slashable vote data attestation should not match: %v, %v",
att1,
att1,
)
@@ -543,10 +543,10 @@ func TestProcessCasperSlashings_SlotsInequalities(t *testing.T) {
for _, tt := range testCases {
slashings := []*pb.CasperSlashing{
{
Votes_1: &pb.SlashableVoteData{
SlashableVoteData_1: &pb.SlashableVoteData{
Data: tt.att1,
},
Votes_2: &pb.SlashableVoteData{
SlashableVoteData_2: &pb.SlashableVoteData{
Data: tt.att2,
},
},
@@ -566,14 +566,17 @@ func TestProcessCasperSlashings_SlotsInequalities(t *testing.T) {
want := fmt.Sprintf(
`
Expected the following conditions to hold:
(vote1.JustifiedSlot < vote2.JustifiedSlot) &&
(vote2.JustifiedSlot + 1 == vote2.Slot) &&
(vote2.Slot < vote1.Slot)
(slashableVoteData1.JustifiedSlot <
slashableVoteData2.JustifiedSlot) &&
(slashableVoteData2.JustifiedSlot + 1
== slashableVoteData1.Slot) &&
(slashableVoteData2.Slot < slashableVoteData1.Slot)
OR
vote1.Slot == vote.Slot
slashableVoteData1.Slot == slashableVoteData2.Slot
Instead, received vote1.JustifiedSlot %d, vote2.JustifiedSlot %d
and vote1.Slot %d, vote2.Slot %d
Instead, received slashableVoteData1.JustifiedSlot %d,
slashableVoteData2.JustifiedSlot %d
and slashableVoteData1.Slot %d, slashableVoteData2.Slot %d
`,
tt.att1.JustifiedSlot,
tt.att2.JustifiedSlot,
@@ -601,12 +604,12 @@ func TestProcessCasperSlashings_EmptyVoteIndexIntersection(t *testing.T) {
}
slashings := []*pb.CasperSlashing{
{
Votes_1: &pb.SlashableVoteData{
SlashableVoteData_1: &pb.SlashableVoteData{
Data: att1,
CustodyBit_0Indices: []uint32{1, 2},
CustodyBit_1Indices: []uint32{3, 4},
},
Votes_2: &pb.SlashableVoteData{
SlashableVoteData_2: &pb.SlashableVoteData{
Data: att2,
CustodyBit_0Indices: []uint32{5, 6},
CustodyBit_1Indices: []uint32{7, 8},
@@ -655,12 +658,12 @@ func TestProcessCasperSlashings_AppliesCorrectStatus(t *testing.T) {
}
slashings := []*pb.CasperSlashing{
{
Votes_1: &pb.SlashableVoteData{
SlashableVoteData_1: &pb.SlashableVoteData{
Data: att1,
CustodyBit_0Indices: []uint32{0, 1},
CustodyBit_1Indices: []uint32{2, 3},
},
Votes_2: &pb.SlashableVoteData{
SlashableVoteData_2: &pb.SlashableVoteData{
Data: att2,
CustodyBit_0Indices: []uint32{4, 5},
CustodyBit_1Indices: []uint32{6, 1},

View File

@@ -133,12 +133,12 @@ func TestProcessBlock_IncorrectProcessBlockAttestations(t *testing.T) {
}
casperSlashings := []*pb.CasperSlashing{
{
Votes_1: &pb.SlashableVoteData{
SlashableVoteData_1: &pb.SlashableVoteData{
Data: att1,
CustodyBit_0Indices: []uint32{0, 1},
CustodyBit_1Indices: []uint32{2, 3},
},
Votes_2: &pb.SlashableVoteData{
SlashableVoteData_2: &pb.SlashableVoteData{
Data: att2,
CustodyBit_0Indices: []uint32{4, 5},
CustodyBit_1Indices: []uint32{6, 1},
@@ -195,12 +195,12 @@ func TestProcessBlock_IncorrectProcessExits(t *testing.T) {
}
casperSlashings := []*pb.CasperSlashing{
{
Votes_1: &pb.SlashableVoteData{
SlashableVoteData_1: &pb.SlashableVoteData{
Data: att1,
CustodyBit_0Indices: []uint32{0, 1},
CustodyBit_1Indices: []uint32{2, 3},
},
Votes_2: &pb.SlashableVoteData{
SlashableVoteData_2: &pb.SlashableVoteData{
Data: att2,
CustodyBit_0Indices: []uint32{4, 5},
CustodyBit_1Indices: []uint32{6, 1},
@@ -282,12 +282,12 @@ func TestProcessBlock_PassesProcessingConditions(t *testing.T) {
}
casperSlashings := []*pb.CasperSlashing{
{
Votes_1: &pb.SlashableVoteData{
SlashableVoteData_1: &pb.SlashableVoteData{
Data: att1,
CustodyBit_0Indices: []uint32{0, 1},
CustodyBit_1Indices: []uint32{2, 3},
},
Votes_2: &pb.SlashableVoteData{
SlashableVoteData_2: &pb.SlashableVoteData{
Data: att2,
CustodyBit_0Indices: []uint32{4, 5},
CustodyBit_1Indices: []uint32{6, 1},

View File

@@ -44,7 +44,7 @@ func (x ValidatorRecord_StatusFlags) String() string {
return proto.EnumName(ValidatorRecord_StatusFlags_name, int32(x))
}
func (ValidatorRecord_StatusFlags) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{7, 0}
return fileDescriptor_types_74a41dc3cff57ab5, []int{7, 0}
}
type ValidatorRegistryDeltaBlock_ValidatorRegistryDeltaFlags int32
@@ -67,7 +67,7 @@ func (x ValidatorRegistryDeltaBlock_ValidatorRegistryDeltaFlags) String() string
return proto.EnumName(ValidatorRegistryDeltaBlock_ValidatorRegistryDeltaFlags_name, int32(x))
}
func (ValidatorRegistryDeltaBlock_ValidatorRegistryDeltaFlags) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{22, 0}
return fileDescriptor_types_74a41dc3cff57ab5, []int{22, 0}
}
type BeaconState struct {
@@ -109,7 +109,7 @@ func (m *BeaconState) Reset() { *m = BeaconState{} }
func (m *BeaconState) String() string { return proto.CompactTextString(m) }
func (*BeaconState) ProtoMessage() {}
func (*BeaconState) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{0}
return fileDescriptor_types_74a41dc3cff57ab5, []int{0}
}
func (m *BeaconState) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -354,7 +354,7 @@ func (m *Fork) Reset() { *m = Fork{} }
func (m *Fork) String() string { return proto.CompactTextString(m) }
func (*Fork) ProtoMessage() {}
func (*Fork) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{1}
return fileDescriptor_types_74a41dc3cff57ab5, []int{1}
}
func (m *Fork) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -416,7 +416,7 @@ func (m *DepositRootVote) Reset() { *m = DepositRootVote{} }
func (m *DepositRootVote) String() string { return proto.CompactTextString(m) }
func (*DepositRootVote) ProtoMessage() {}
func (*DepositRootVote) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{2}
return fileDescriptor_types_74a41dc3cff57ab5, []int{2}
}
func (m *DepositRootVote) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -473,7 +473,7 @@ func (m *PendingAttestationRecord) Reset() { *m = PendingAttestationReco
func (m *PendingAttestationRecord) String() string { return proto.CompactTextString(m) }
func (*PendingAttestationRecord) ProtoMessage() {}
func (*PendingAttestationRecord) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{3}
return fileDescriptor_types_74a41dc3cff57ab5, []int{3}
}
func (m *PendingAttestationRecord) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -544,7 +544,7 @@ func (m *Attestation) Reset() { *m = Attestation{} }
func (m *Attestation) String() string { return proto.CompactTextString(m) }
func (*Attestation) ProtoMessage() {}
func (*Attestation) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{4}
return fileDescriptor_types_74a41dc3cff57ab5, []int{4}
}
func (m *Attestation) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -619,7 +619,7 @@ func (m *AttestationData) Reset() { *m = AttestationData{} }
func (m *AttestationData) String() string { return proto.CompactTextString(m) }
func (*AttestationData) ProtoMessage() {}
func (*AttestationData) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{5}
return fileDescriptor_types_74a41dc3cff57ab5, []int{5}
}
func (m *AttestationData) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -716,7 +716,7 @@ func (m *AttestationDataAndCustodyBit) Reset() { *m = AttestationDataAnd
func (m *AttestationDataAndCustodyBit) String() string { return proto.CompactTextString(m) }
func (*AttestationDataAndCustodyBit) ProtoMessage() {}
func (*AttestationDataAndCustodyBit) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{6}
return fileDescriptor_types_74a41dc3cff57ab5, []int{6}
}
func (m *AttestationDataAndCustodyBit) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -783,7 +783,7 @@ func (m *ValidatorRecord) Reset() { *m = ValidatorRecord{} }
func (m *ValidatorRecord) String() string { return proto.CompactTextString(m) }
func (*ValidatorRecord) ProtoMessage() {}
func (*ValidatorRecord) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{7}
return fileDescriptor_types_74a41dc3cff57ab5, []int{7}
}
func (m *ValidatorRecord) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -924,7 +924,7 @@ func (m *ShardReassignmentRecord) Reset() { *m = ShardReassignmentRecord
func (m *ShardReassignmentRecord) String() string { return proto.CompactTextString(m) }
func (*ShardReassignmentRecord) ProtoMessage() {}
func (*ShardReassignmentRecord) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{8}
return fileDescriptor_types_74a41dc3cff57ab5, []int{8}
}
func (m *ShardReassignmentRecord) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -986,7 +986,7 @@ func (m *CrosslinkRecord) Reset() { *m = CrosslinkRecord{} }
func (m *CrosslinkRecord) String() string { return proto.CompactTextString(m) }
func (*CrosslinkRecord) ProtoMessage() {}
func (*CrosslinkRecord) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{9}
return fileDescriptor_types_74a41dc3cff57ab5, []int{9}
}
func (m *CrosslinkRecord) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1040,7 +1040,7 @@ func (m *ShardCommitteeArray) Reset() { *m = ShardCommitteeArray{} }
func (m *ShardCommitteeArray) String() string { return proto.CompactTextString(m) }
func (*ShardCommitteeArray) ProtoMessage() {}
func (*ShardCommitteeArray) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{10}
return fileDescriptor_types_74a41dc3cff57ab5, []int{10}
}
func (m *ShardCommitteeArray) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1089,7 +1089,7 @@ func (m *ShardCommittee) Reset() { *m = ShardCommittee{} }
func (m *ShardCommittee) String() string { return proto.CompactTextString(m) }
func (*ShardCommittee) ProtoMessage() {}
func (*ShardCommittee) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{11}
return fileDescriptor_types_74a41dc3cff57ab5, []int{11}
}
func (m *ShardCommittee) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1156,7 +1156,7 @@ func (m *BeaconBlock) Reset() { *m = BeaconBlock{} }
func (m *BeaconBlock) String() string { return proto.CompactTextString(m) }
func (*BeaconBlock) ProtoMessage() {}
func (*BeaconBlock) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{12}
return fileDescriptor_types_74a41dc3cff57ab5, []int{12}
}
func (m *BeaconBlock) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1249,7 +1249,7 @@ func (m *BeaconBlockBody) Reset() { *m = BeaconBlockBody{} }
func (m *BeaconBlockBody) String() string { return proto.CompactTextString(m) }
func (*BeaconBlockBody) ProtoMessage() {}
func (*BeaconBlockBody) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{13}
return fileDescriptor_types_74a41dc3cff57ab5, []int{13}
}
func (m *BeaconBlockBody) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1328,7 +1328,7 @@ func (m *DepositInput) Reset() { *m = DepositInput{} }
func (m *DepositInput) String() string { return proto.CompactTextString(m) }
func (*DepositInput) ProtoMessage() {}
func (*DepositInput) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{14}
return fileDescriptor_types_74a41dc3cff57ab5, []int{14}
}
func (m *DepositInput) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1405,7 +1405,7 @@ func (m *ProposalSignedData) Reset() { *m = ProposalSignedData{} }
func (m *ProposalSignedData) String() string { return proto.CompactTextString(m) }
func (*ProposalSignedData) ProtoMessage() {}
func (*ProposalSignedData) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{15}
return fileDescriptor_types_74a41dc3cff57ab5, []int{15}
}
func (m *ProposalSignedData) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1469,7 +1469,7 @@ func (m *SlashableVoteData) Reset() { *m = SlashableVoteData{} }
func (m *SlashableVoteData) String() string { return proto.CompactTextString(m) }
func (*SlashableVoteData) ProtoMessage() {}
func (*SlashableVoteData) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{16}
return fileDescriptor_types_74a41dc3cff57ab5, []int{16}
}
func (m *SlashableVoteData) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1539,7 +1539,7 @@ func (m *DepositData) Reset() { *m = DepositData{} }
func (m *DepositData) String() string { return proto.CompactTextString(m) }
func (*DepositData) ProtoMessage() {}
func (*DepositData) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{17}
return fileDescriptor_types_74a41dc3cff57ab5, []int{17}
}
func (m *DepositData) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1604,7 +1604,7 @@ func (m *ProposerSlashing) Reset() { *m = ProposerSlashing{} }
func (m *ProposerSlashing) String() string { return proto.CompactTextString(m) }
func (*ProposerSlashing) ProtoMessage() {}
func (*ProposerSlashing) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{18}
return fileDescriptor_types_74a41dc3cff57ab5, []int{18}
}
func (m *ProposerSlashing) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1669,8 +1669,8 @@ func (m *ProposerSlashing) GetProposalSignature_2() []byte {
}
type CasperSlashing struct {
Votes_1 *SlashableVoteData `protobuf:"bytes,1,opt,name=votes_1,json=votes1" json:"votes_1,omitempty"`
Votes_2 *SlashableVoteData `protobuf:"bytes,2,opt,name=votes_2,json=votes2" json:"votes_2,omitempty"`
SlashableVoteData_1 *SlashableVoteData `protobuf:"bytes,1,opt,name=slashable_vote_data_1,json=slashableVoteData1" json:"slashable_vote_data_1,omitempty"`
SlashableVoteData_2 *SlashableVoteData `protobuf:"bytes,2,opt,name=slashable_vote_data_2,json=slashableVoteData2" json:"slashable_vote_data_2,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -1680,7 +1680,7 @@ func (m *CasperSlashing) Reset() { *m = CasperSlashing{} }
func (m *CasperSlashing) String() string { return proto.CompactTextString(m) }
func (*CasperSlashing) ProtoMessage() {}
func (*CasperSlashing) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{19}
return fileDescriptor_types_74a41dc3cff57ab5, []int{19}
}
func (m *CasperSlashing) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1709,16 +1709,16 @@ func (m *CasperSlashing) XXX_DiscardUnknown() {
var xxx_messageInfo_CasperSlashing proto.InternalMessageInfo
func (m *CasperSlashing) GetVotes_1() *SlashableVoteData {
func (m *CasperSlashing) GetSlashableVoteData_1() *SlashableVoteData {
if m != nil {
return m.Votes_1
return m.SlashableVoteData_1
}
return nil
}
func (m *CasperSlashing) GetVotes_2() *SlashableVoteData {
func (m *CasperSlashing) GetSlashableVoteData_2() *SlashableVoteData {
if m != nil {
return m.Votes_2
return m.SlashableVoteData_2
}
return nil
}
@@ -1736,7 +1736,7 @@ func (m *Deposit) Reset() { *m = Deposit{} }
func (m *Deposit) String() string { return proto.CompactTextString(m) }
func (*Deposit) ProtoMessage() {}
func (*Deposit) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{20}
return fileDescriptor_types_74a41dc3cff57ab5, []int{20}
}
func (m *Deposit) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1799,7 +1799,7 @@ func (m *Exit) Reset() { *m = Exit{} }
func (m *Exit) String() string { return proto.CompactTextString(m) }
func (*Exit) ProtoMessage() {}
func (*Exit) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{21}
return fileDescriptor_types_74a41dc3cff57ab5, []int{21}
}
func (m *Exit) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1864,7 +1864,7 @@ func (m *ValidatorRegistryDeltaBlock) Reset() { *m = ValidatorRegistryDe
func (m *ValidatorRegistryDeltaBlock) String() string { return proto.CompactTextString(m) }
func (*ValidatorRegistryDeltaBlock) ProtoMessage() {}
func (*ValidatorRegistryDeltaBlock) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{22}
return fileDescriptor_types_74a41dc3cff57ab5, []int{22}
}
func (m *ValidatorRegistryDeltaBlock) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1938,7 +1938,7 @@ func (m *CustodyChallenge) Reset() { *m = CustodyChallenge{} }
func (m *CustodyChallenge) String() string { return proto.CompactTextString(m) }
func (*CustodyChallenge) ProtoMessage() {}
func (*CustodyChallenge) Descriptor() ([]byte, []int) {
return fileDescriptor_types_078fb5cfdd968b95, []int{23}
return fileDescriptor_types_74a41dc3cff57ab5, []int{23}
}
func (m *CustodyChallenge) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3258,21 +3258,21 @@ func (m *CasperSlashing) MarshalTo(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if m.Votes_1 != nil {
if m.SlashableVoteData_1 != nil {
dAtA[i] = 0xa
i++
i = encodeVarintTypes(dAtA, i, uint64(m.Votes_1.Size()))
n20, err := m.Votes_1.MarshalTo(dAtA[i:])
i = encodeVarintTypes(dAtA, i, uint64(m.SlashableVoteData_1.Size()))
n20, err := m.SlashableVoteData_1.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n20
}
if m.Votes_2 != nil {
if m.SlashableVoteData_2 != nil {
dAtA[i] = 0x12
i++
i = encodeVarintTypes(dAtA, i, uint64(m.Votes_2.Size()))
n21, err := m.Votes_2.MarshalTo(dAtA[i:])
i = encodeVarintTypes(dAtA, i, uint64(m.SlashableVoteData_2.Size()))
n21, err := m.SlashableVoteData_2.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
@@ -4047,12 +4047,12 @@ func (m *ProposerSlashing) Size() (n int) {
func (m *CasperSlashing) Size() (n int) {
var l int
_ = l
if m.Votes_1 != nil {
l = m.Votes_1.Size()
if m.SlashableVoteData_1 != nil {
l = m.SlashableVoteData_1.Size()
n += 1 + l + sovTypes(uint64(l))
}
if m.Votes_2 != nil {
l = m.Votes_2.Size()
if m.SlashableVoteData_2 != nil {
l = m.SlashableVoteData_2.Size()
n += 1 + l + sovTypes(uint64(l))
}
if m.XXX_unrecognized != nil {
@@ -8115,7 +8115,7 @@ func (m *CasperSlashing) Unmarshal(dAtA []byte) error {
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Votes_1", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field SlashableVoteData_1", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -8139,16 +8139,16 @@ func (m *CasperSlashing) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Votes_1 == nil {
m.Votes_1 = &SlashableVoteData{}
if m.SlashableVoteData_1 == nil {
m.SlashableVoteData_1 = &SlashableVoteData{}
}
if err := m.Votes_1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
if err := m.SlashableVoteData_1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Votes_2", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field SlashableVoteData_2", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -8172,10 +8172,10 @@ func (m *CasperSlashing) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Votes_2 == nil {
m.Votes_2 = &SlashableVoteData{}
if m.SlashableVoteData_2 == nil {
m.SlashableVoteData_2 = &SlashableVoteData{}
}
if err := m.Votes_2.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
if err := m.SlashableVoteData_2.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -8778,156 +8778,156 @@ var (
)
func init() {
proto.RegisterFile("proto/beacon/p2p/v1/types.proto", fileDescriptor_types_078fb5cfdd968b95)
proto.RegisterFile("proto/beacon/p2p/v1/types.proto", fileDescriptor_types_74a41dc3cff57ab5)
}
var fileDescriptor_types_078fb5cfdd968b95 = []byte{
// 2343 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcb, 0x6f, 0x1c, 0x59,
0xd5, 0x9f, 0x6e, 0xb7, 0x1f, 0x39, 0xdd, 0x76, 0xb7, 0xaf, 0xc7, 0x76, 0x25, 0xb6, 0x63, 0x4f,
0x65, 0x66, 0xe2, 0xe4, 0xfb, 0xb0, 0xd3, 0x1d, 0x0d, 0x41, 0x84, 0x97, 0xbb, 0xed, 0x4c, 0x1a,
0x85, 0x49, 0x28, 0x7b, 0x9c, 0x11, 0x42, 0x2a, 0x6e, 0x57, 0xdd, 0x6e, 0x57, 0x5c, 0x5d, 0x55,
0xd4, 0xbd, 0xed, 0xb1, 0x11, 0x3b, 0x56, 0x3c, 0x04, 0x2c, 0xd9, 0xc2, 0x5f, 0x01, 0xe2, 0xb1,
0x43, 0x62, 0xc9, 0x6b, 0x85, 0x04, 0x42, 0xd9, 0x80, 0xc4, 0x73, 0x60, 0x81, 0xc4, 0x0a, 0xdd,
0x47, 0x3d, 0xfb, 0x91, 0x84, 0x6c, 0x58, 0x25, 0x7d, 0xce, 0xef, 0x77, 0xee, 0xbd, 0xe7, 0x9e,
0x7b, 0x1e, 0x65, 0xd8, 0x0c, 0x42, 0x9f, 0xf9, 0xbb, 0x1d, 0x82, 0x2d, 0xdf, 0xdb, 0x0d, 0x1a,
0xc1, 0xee, 0x59, 0x7d, 0x97, 0x5d, 0x04, 0x84, 0xee, 0x08, 0x0d, 0x5a, 0x21, 0xec, 0x84, 0x84,
0x64, 0xd0, 0xdf, 0x91, 0x98, 0x9d, 0xa0, 0x11, 0xec, 0x9c, 0xd5, 0xaf, 0xac, 0x49, 0xa2, 0xe5,
0xf7, 0xfb, 0xbe, 0xb7, 0xdb, 0x27, 0x94, 0xe2, 0x5e, 0x44, 0xd2, 0xbf, 0x52, 0x85, 0x72, 0x53,
0xc0, 0x0f, 0x19, 0x66, 0x04, 0x1d, 0x03, 0x3a, 0xc3, 0xae, 0x63, 0x63, 0xe6, 0x87, 0x66, 0x48,
0x7a, 0x0e, 0x65, 0xe1, 0x85, 0x56, 0xd8, 0x9a, 0xda, 0x2e, 0x37, 0xae, 0xef, 0x8c, 0x5e, 0x61,
0xe7, 0x38, 0x62, 0x18, 0xc4, 0xf2, 0x43, 0xdb, 0x58, 0x3c, 0x4b, 0x04, 0xd2, 0x02, 0x6a, 0xc1,
0xd5, 0x61, 0xbb, 0xe6, 0x20, 0xb0, 0x31, 0x23, 0x26, 0x75, 0x7d, 0xa6, 0x15, 0xb7, 0x0a, 0xdb,
0x25, 0x63, 0x6d, 0x88, 0xfa, 0xae, 0xc0, 0x1c, 0xba, 0x3e, 0x43, 0x7b, 0xb0, 0x31, 0xc2, 0x08,
0x39, 0x77, 0x98, 0x69, 0xf9, 0x03, 0x8f, 0x69, 0x53, 0xc2, 0xc6, 0x95, 0x21, 0x1b, 0x07, 0xe7,
0x0e, 0x6b, 0x71, 0x04, 0x7a, 0x0c, 0x37, 0x46, 0x98, 0xb0, 0x89, 0xcb, 0xb0, 0x69, 0x9d, 0x60,
0xc7, 0x33, 0x99, 0x13, 0x98, 0x27, 0x98, 0x9e, 0xdc, 0x6e, 0x68, 0xa5, 0xad, 0xc2, 0x76, 0xc5,
0x78, 0x7d, 0xc8, 0xdc, 0x3e, 0x87, 0xb7, 0x38, 0xfa, 0xc8, 0x09, 0xee, 0x0b, 0x2c, 0xfa, 0x50,
0xda, 0x71, 0x1d, 0xec, 0x62, 0xcf, 0x22, 0x54, 0x9b, 0xde, 0x9a, 0xda, 0x2e, 0xa5, 0xfc, 0xd1,
0x54, 0x0a, 0xd4, 0x83, 0xcb, 0xf4, 0x04, 0x87, 0xb6, 0xc9, 0xaf, 0xc5, 0x61, 0x8c, 0x10, 0x6a,
0x62, 0x26, 0x3c, 0x41, 0xb5, 0x3f, 0xcd, 0x0a, 0x7f, 0xff, 0xdf, 0x38, 0x7f, 0x1f, 0x72, 0x66,
0x2b, 0x22, 0xee, 0x85, 0x21, 0xbe, 0x30, 0x56, 0x68, 0x46, 0x48, 0xf7, 0x18, 0x77, 0x19, 0x45,
0x9f, 0x80, 0x35, 0x17, 0x33, 0x42, 0x99, 0x19, 0x62, 0xcf, 0xc6, 0xbe, 0xd9, 0x77, 0xce, 0x09,
0x55, 0x27, 0xa4, 0xda, 0x9f, 0xf9, 0x52, 0x15, 0x43, 0x93, 0x18, 0x43, 0x40, 0x3e, 0xc3, 0x11,
0xf2, 0x58, 0x14, 0x7d, 0x0c, 0xae, 0x28, 0xfe, 0x99, 0xdd, 0x35, 0xfd, 0x01, 0x0b, 0x06, 0x2c,
0xa1, 0xff, 0x45, 0xd2, 0x57, 0x25, 0xe4, 0xd8, 0xee, 0x3e, 0x94, 0x80, 0x14, 0x3b, 0x08, 0xc9,
0x99, 0xe3, 0x0f, 0xa8, 0x49, 0x02, 0xdf, 0x3a, 0x31, 0x29, 0xc3, 0x21, 0x33, 0xc5, 0x66, 0xb5,
0xbf, 0xce, 0x8a, 0xfb, 0x5a, 0x8d, 0x20, 0x07, 0x1c, 0x71, 0xc8, 0x01, 0xe2, 0x84, 0xe8, 0xa3,
0x70, 0xd9, 0x1a, 0x84, 0x21, 0xf1, 0xd8, 0x08, 0xf2, 0xdf, 0x24, 0x79, 0x45, 0x21, 0xf2, 0xdc,
0x7b, 0xfc, 0xc1, 0x64, 0x56, 0xb6, 0xb0, 0x6b, 0x0d, 0x5c, 0xcc, 0x1c, 0xdf, 0x93, 0x11, 0xf7,
0x77, 0x69, 0x61, 0x3d, 0xb3, 0x7c, 0x2b, 0x41, 0x89, 0x98, 0xdb, 0x87, 0xab, 0xd9, 0x3d, 0x0c,
0x99, 0xf9, 0x40, 0x9a, 0x59, 0x4b, 0x6f, 0x24, 0x6f, 0xe5, 0x6d, 0xd8, 0xca, 0xed, 0x26, 0xb9,
0x8d, 0x28, 0xda, 0xfe, 0x31, 0x2b, 0xc2, 0x2d, 0xbb, 0x9d, 0xf8, 0x46, 0x54, 0x98, 0x1d, 0xc0,
0x66, 0x76, 0x3b, 0xc3, 0x76, 0xfe, 0x29, 0xed, 0x64, 0xf6, 0x93, 0x37, 0x73, 0x07, 0x62, 0xa7,
0x9b, 0x4f, 0x06, 0x94, 0x39, 0x5d, 0x87, 0xd8, 0xf2, 0x38, 0xbf, 0xa8, 0x8a, 0xe3, 0x2c, 0x47,
0xfa, 0x4f, 0x47, 0x6a, 0x71, 0x90, 0x37, 0x61, 0x21, 0x87, 0xff, 0xa5, 0xc4, 0xcf, 0x3f, 0xc9,
0xe0, 0x3e, 0x0c, 0x2b, 0x4a, 0x60, 0x49, 0x57, 0x75, 0x1c, 0xd6, 0x75, 0x88, 0x6b, 0x6b, 0xbf,
0x52, 0xf6, 0x33, 0xea, 0xa6, 0xd2, 0x72, 0xfb, 0x5d, 0xc7, 0xc3, 0xae, 0xf3, 0xa5, 0xc8, 0xfe,
0xaf, 0x95, 0xfd, 0x58, 0x2c, 0xec, 0xbf, 0x0b, 0x8b, 0x2a, 0x2c, 0xad, 0xd0, 0xa7, 0xd4, 0x75,
0xbc, 0x53, 0xaa, 0xfd, 0x60, 0x75, 0x72, 0x9e, 0x6a, 0x45, 0x50, 0x95, 0xa7, 0x6a, 0xd2, 0x44,
0x2c, 0xa6, 0x3c, 0xe2, 0x94, 0xd9, 0x8e, 0xeb, 0x5b, 0xa7, 0x66, 0xe8, 0xfb, 0x2c, 0x0e, 0xf6,
0x1f, 0xae, 0x8a, 0x60, 0x5f, 0x91, 0x88, 0x26, 0x07, 0x18, 0xbe, 0xcf, 0x52, 0xb1, 0xde, 0xc1,
0xcc, 0x3a, 0x21, 0xf6, 0x28, 0xf2, 0x8f, 0x24, 0x79, 0x55, 0x41, 0x86, 0xd8, 0x77, 0xe3, 0x95,
0x03, 0x12, 0x9d, 0x3f, 0x4e, 0x23, 0x3f, 0x5e, 0x15, 0x79, 0x44, 0x3d, 0xb3, 0x47, 0x11, 0x20,
0xce, 0x26, 0x1d, 0x58, 0x52, 0x64, 0xcc, 0xf8, 0x3f, 0xc2, 0xa7, 0x54, 0xfb, 0x89, 0xf4, 0xc7,
0xad, 0x71, 0xfe, 0x78, 0x44, 0x3c, 0xdb, 0xf1, 0x7a, 0x7b, 0x09, 0x47, 0x39, 0x06, 0x49, 0x6b,
0x29, 0x45, 0x3a, 0x11, 0xd8, 0x24, 0xf0, 0xa9, 0xc3, 0xd2, 0xe7, 0xd3, 0xbe, 0xbb, 0x29, 0x82,
0x4e, 0xed, 0x70, 0x5f, 0x22, 0x92, 0xf3, 0xf1, 0xba, 0x92, 0xa1, 0x9d, 0xf9, 0x8c, 0x50, 0xed,
0x7b, 0x9b, 0x93, 0x2f, 0x2c, 0x65, 0xe7, 0xd8, 0x67, 0xc4, 0xa8, 0xd9, 0x59, 0x01, 0x45, 0x3a,
0x54, 0x7a, 0xc4, 0x23, 0xd4, 0xa1, 0x26, 0x73, 0xfa, 0x44, 0xfb, 0xea, 0x75, 0x11, 0x2d, 0x65,
0x25, 0x3c, 0x72, 0xfa, 0x04, 0xd5, 0xa1, 0xd4, 0xf5, 0xc3, 0x53, 0xed, 0x6b, 0x5c, 0x57, 0x6e,
0xac, 0x8f, 0x5b, 0xed, 0x9e, 0x1f, 0x9e, 0x1a, 0x02, 0x8a, 0x96, 0xa0, 0x24, 0x82, 0xef, 0xeb,
0xd2, 0x9c, 0xf8, 0x81, 0xde, 0x03, 0x64, 0x0d, 0x28, 0xf3, 0xed, 0x0b, 0x5e, 0x2a, 0x5c, 0x97,
0x78, 0x3d, 0x42, 0xb5, 0x0f, 0x76, 0xc4, 0x19, 0xb6, 0xc7, 0x06, 0x9d, 0xa4, 0xb4, 0x22, 0x86,
0xb1, 0x68, 0xe5, 0x24, 0x54, 0xf7, 0xa0, 0xc4, 0x17, 0x47, 0x37, 0xa0, 0x16, 0x3f, 0xcb, 0x33,
0x12, 0x52, 0xc7, 0xf7, 0xb4, 0x82, 0xd8, 0x41, 0x35, 0x92, 0x1f, 0x4b, 0x31, 0xba, 0x0e, 0xd5,
0x28, 0x11, 0x44, 0x48, 0x59, 0x41, 0x17, 0x94, 0x38, 0x02, 0x22, 0x75, 0x94, 0xa9, 0xe4, 0x24,
0xfa, 0x17, 0xa0, 0x9a, 0x73, 0x2d, 0xda, 0x81, 0xa5, 0x51, 0xf7, 0x5a, 0x10, 0xd7, 0xba, 0x68,
0x0f, 0x5d, 0xe8, 0x06, 0x00, 0xbf, 0x43, 0x55, 0x78, 0xe5, 0xd2, 0x97, 0xb8, 0x44, 0xd4, 0x59,
0xfd, 0x77, 0x05, 0xd0, 0xc6, 0x85, 0x17, 0xba, 0x0b, 0x25, 0x1b, 0x33, 0x2c, 0x8c, 0x4f, 0xb8,
0xfd, 0x14, 0x71, 0x1f, 0x33, 0x6c, 0x08, 0x12, 0x7a, 0x0b, 0x56, 0x02, 0x1c, 0x32, 0xc7, 0x72,
0x82, 0x5c, 0x66, 0x29, 0x8a, 0xbd, 0x2e, 0x67, 0xb4, 0x71, 0x62, 0xb9, 0x01, 0xb5, 0xe8, 0xf2,
0x62, 0xc2, 0x94, 0x20, 0x54, 0x95, 0x3c, 0x86, 0x5e, 0x83, 0x79, 0xee, 0x25, 0xd3, 0xf1, 0x2c,
0x77, 0x60, 0x13, 0x5b, 0xf4, 0x01, 0x25, 0xa3, 0xc2, 0x85, 0x6d, 0x25, 0xd3, 0x7f, 0x5b, 0x80,
0x72, 0x6a, 0x83, 0xff, 0xeb, 0x67, 0xda, 0x85, 0x25, 0xdc, 0xeb, 0x85, 0xa4, 0x27, 0xfa, 0x2d,
0xa7, 0xe7, 0x61, 0x36, 0x08, 0x89, 0xea, 0x70, 0x50, 0xac, 0x3a, 0x8c, 0x34, 0xfa, 0xb7, 0xa6,
0xa0, 0x9a, 0xdb, 0x6c, 0x1c, 0x4a, 0x85, 0xd4, 0xa3, 0x78, 0x15, 0xa6, 0x65, 0x3d, 0x96, 0x21,
0x20, 0x7f, 0xa0, 0x3b, 0xa0, 0xc9, 0x73, 0x0f, 0xa7, 0x42, 0xb5, 0xc3, 0x65, 0xa9, 0xcf, 0xe5,
0x41, 0x74, 0x17, 0xae, 0xc8, 0xba, 0xd6, 0xf1, 0x07, 0x9e, 0x8d, 0xc3, 0x8b, 0x0c, 0x55, 0x6e,
0x77, 0x55, 0x20, 0x9a, 0x0a, 0x90, 0x22, 0xbf, 0x05, 0xab, 0xb2, 0xa9, 0x1a, 0x5e, 0x74, 0x5a,
0x30, 0x5f, 0x15, 0xea, 0xfc, 0x9a, 0x9f, 0x84, 0xf5, 0x7c, 0x2d, 0xc9, 0x70, 0x67, 0x04, 0xf7,
0x72, 0xae, 0x58, 0xa4, 0x0c, 0xbc, 0x31, 0x54, 0x14, 0x67, 0x47, 0xd5, 0xc4, 0x8f, 0xc3, 0x5a,
0x02, 0x1b, 0xde, 0xe2, 0x9c, 0x58, 0x46, 0x8b, 0x21, 0xb9, 0x6d, 0xea, 0x5f, 0x86, 0xf5, 0xdc,
0x85, 0xec, 0x79, 0x76, 0x2b, 0xbe, 0xe7, 0x97, 0x8b, 0xc0, 0x4d, 0x28, 0xa7, 0x42, 0x49, 0x5c,
0xe6, 0x9c, 0x01, 0x49, 0x14, 0xe9, 0xff, 0x9e, 0x86, 0x6a, 0xae, 0xcf, 0x47, 0x2b, 0x30, 0x13,
0x0c, 0x3a, 0xa7, 0xe4, 0x42, 0xa5, 0x09, 0xf5, 0x0b, 0x35, 0x61, 0xe3, 0x7d, 0x87, 0x9d, 0xd8,
0x21, 0x7e, 0x1f, 0xbb, 0xa6, 0x15, 0x12, 0x9b, 0x78, 0xcc, 0xc1, 0x6e, 0xd4, 0x37, 0xaa, 0xa8,
0x5e, 0x4b, 0x40, 0xad, 0x04, 0xa3, 0x7c, 0xfa, 0x11, 0xd0, 0x54, 0x6b, 0x23, 0x3b, 0xe4, 0x3e,
0xcf, 0x74, 0x99, 0x08, 0x5a, 0x91, 0xfa, 0x56, 0xac, 0x56, 0xcc, 0x6b, 0x30, 0xaf, 0x98, 0x2e,
0xbe, 0x20, 0x21, 0x8d, 0x9e, 0xaf, 0x14, 0x3e, 0x10, 0x32, 0x9e, 0x3e, 0xb1, 0xc5, 0x9c, 0xb3,
0x54, 0x1f, 0x37, 0x2d, 0xd3, 0x67, 0x22, 0x16, 0x97, 0xb6, 0x06, 0x97, 0xc4, 0x80, 0x21, 0x20,
0x33, 0x02, 0x32, 0xc7, 0x05, 0x42, 0x79, 0x1d, 0xaa, 0xa9, 0x83, 0xa6, 0x6e, 0x7e, 0x21, 0x11,
0x0b, 0xe0, 0x1b, 0xb0, 0x90, 0x94, 0x75, 0x81, 0x9b, 0x93, 0x11, 0x12, 0x4b, 0x05, 0x6c, 0x03,
0x20, 0x35, 0xcd, 0x5c, 0x92, 0x49, 0x95, 0xc4, 0xc3, 0xcb, 0x31, 0x54, 0xf8, 0xcd, 0x0d, 0xa8,
0xd9, 0x75, 0x71, 0x8f, 0x6a, 0xb0, 0x55, 0xd8, 0x5e, 0x68, 0xdc, 0x7e, 0xce, 0xb1, 0x6c, 0xe7,
0x50, 0x70, 0xef, 0x71, 0xaa, 0x51, 0xa6, 0xc9, 0x0f, 0xd9, 0x67, 0xab, 0xc2, 0x36, 0xe4, 0xec,
0xb2, 0x7c, 0x73, 0x51, 0xd1, 0xca, 0x7b, 0xfb, 0x6e, 0xdc, 0x16, 0x44, 0x26, 0x42, 0x42, 0x49,
var fileDescriptor_types_74a41dc3cff57ab5 = []byte{
// 2348 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcb, 0x6f, 0x1c, 0x49,
0x19, 0xdf, 0x19, 0x8f, 0x63, 0xe7, 0x9b, 0xf1, 0xcc, 0xb8, 0xbc, 0xb6, 0x7b, 0x63, 0x3b, 0xf6,
0xf6, 0x3e, 0xe2, 0x04, 0xb0, 0x33, 0x13, 0x2d, 0x41, 0x84, 0x97, 0x67, 0xec, 0x6c, 0x06, 0x85,
0x4d, 0x68, 0x7b, 0x9d, 0x15, 0x5a, 0xa9, 0xa9, 0xe9, 0xae, 0x19, 0x77, 0xdc, 0xd3, 0xdd, 0x74,
0xd5, 0x78, 0x6d, 0xc4, 0x8d, 0x13, 0x0f, 0x01, 0xff, 0x02, 0xfc, 0x15, 0x20, 0x1e, 0x37, 0x24,
0x0e, 0x1c, 0x78, 0x9d, 0x90, 0x40, 0x28, 0x17, 0x90, 0x78, 0x2e, 0x1c, 0x90, 0x38, 0xa1, 0x7a,
0xf4, 0x73, 0x1e, 0xc9, 0x92, 0x0b, 0xa7, 0x64, 0xbe, 0xef, 0xf7, 0xfb, 0xaa, 0xea, 0xab, 0xaf,
0xbe, 0x47, 0x1b, 0x36, 0x83, 0xd0, 0x67, 0xfe, 0x6e, 0x97, 0x60, 0xcb, 0xf7, 0x76, 0x83, 0x66,
0xb0, 0x7b, 0xd6, 0xd8, 0x65, 0x17, 0x01, 0xa1, 0x3b, 0x42, 0x83, 0x56, 0x08, 0x3b, 0x21, 0x21,
0x19, 0x0e, 0x76, 0x24, 0x66, 0x27, 0x68, 0x06, 0x3b, 0x67, 0x8d, 0x2b, 0x6b, 0x92, 0x68, 0xf9,
0x83, 0x81, 0xef, 0xed, 0x0e, 0x08, 0xa5, 0xb8, 0x1f, 0x91, 0xf4, 0xaf, 0xd6, 0xa0, 0xdc, 0x12,
0xf0, 0x43, 0x86, 0x19, 0x41, 0xc7, 0x80, 0xce, 0xb0, 0xeb, 0xd8, 0x98, 0xf9, 0xa1, 0x19, 0x92,
0xbe, 0x43, 0x59, 0x78, 0xa1, 0x15, 0xb6, 0x66, 0xb6, 0xcb, 0xcd, 0x6b, 0x3b, 0xe3, 0x57, 0xd8,
0x39, 0x8e, 0x18, 0x06, 0xb1, 0xfc, 0xd0, 0x36, 0x16, 0xcf, 0x12, 0x81, 0xb4, 0x80, 0xda, 0x70,
0x75, 0xd4, 0xae, 0x39, 0x0c, 0x6c, 0xcc, 0x88, 0x49, 0x5d, 0x9f, 0x69, 0xc5, 0xad, 0xc2, 0x76,
0xc9, 0x58, 0x1b, 0xa1, 0xbe, 0x2d, 0x30, 0x87, 0xae, 0xcf, 0xd0, 0x1e, 0x6c, 0x8c, 0x31, 0x42,
0xce, 0x1d, 0x66, 0x5a, 0xfe, 0xd0, 0x63, 0xda, 0x8c, 0xb0, 0x71, 0x65, 0xc4, 0xc6, 0xc1, 0xb9,
0xc3, 0xda, 0x1c, 0x81, 0x1e, 0xc1, 0xf5, 0x31, 0x26, 0x6c, 0xe2, 0x32, 0x6c, 0x5a, 0x27, 0xd8,
0xf1, 0x4c, 0xe6, 0x04, 0xe6, 0x09, 0xa6, 0x27, 0xb7, 0x9a, 0x5a, 0x69, 0xab, 0xb0, 0x5d, 0x31,
0x5e, 0x1d, 0x31, 0xb7, 0xcf, 0xe1, 0x6d, 0x8e, 0x3e, 0x72, 0x82, 0x7b, 0x02, 0x8b, 0x3e, 0x92,
0x76, 0x5c, 0x17, 0xbb, 0xd8, 0xb3, 0x08, 0xd5, 0x66, 0xb7, 0x66, 0xb6, 0x4b, 0x29, 0x7f, 0xb4,
0x94, 0x02, 0xf5, 0xe1, 0x25, 0x7a, 0x82, 0x43, 0xdb, 0xe4, 0xd7, 0xe2, 0x30, 0x46, 0x08, 0x35,
0x31, 0x13, 0x9e, 0xa0, 0xda, 0x9f, 0xe7, 0x84, 0xbf, 0x3f, 0x34, 0xc9, 0xdf, 0x87, 0x9c, 0xd9,
0x8e, 0x88, 0x7b, 0x61, 0x88, 0x2f, 0x8c, 0x15, 0x9a, 0x11, 0xd2, 0x3d, 0xc6, 0x5d, 0x46, 0xd1,
0xa7, 0x60, 0xcd, 0xc5, 0x8c, 0x50, 0x66, 0x86, 0xd8, 0xb3, 0xb1, 0x6f, 0x0e, 0x9c, 0x73, 0x42,
0xd5, 0x09, 0xa9, 0xf6, 0x17, 0xbe, 0x54, 0xc5, 0xd0, 0x24, 0xc6, 0x10, 0x90, 0xcf, 0x71, 0x84,
0x3c, 0x16, 0x45, 0x9f, 0x80, 0x2b, 0x8a, 0x7f, 0x66, 0xf7, 0x4c, 0x7f, 0xc8, 0x82, 0x21, 0x4b,
0xe8, 0x7f, 0x95, 0xf4, 0x55, 0x09, 0x39, 0xb6, 0x7b, 0x0f, 0x24, 0x20, 0xc5, 0x0e, 0x42, 0x72,
0xe6, 0xf8, 0x43, 0x6a, 0x92, 0xc0, 0xb7, 0x4e, 0x4c, 0xca, 0x70, 0xc8, 0x4c, 0xb1, 0x59, 0xed,
0x6f, 0x73, 0xe2, 0xbe, 0x56, 0x23, 0xc8, 0x01, 0x47, 0x1c, 0x72, 0x80, 0x38, 0x21, 0xfa, 0x38,
0xbc, 0x64, 0x0d, 0xc3, 0x90, 0x78, 0x6c, 0x0c, 0xf9, 0xef, 0x92, 0xbc, 0xa2, 0x10, 0x79, 0xee,
0x5d, 0xfe, 0x60, 0x32, 0x2b, 0x5b, 0xd8, 0xb5, 0x86, 0x2e, 0x66, 0x8e, 0xef, 0xc9, 0x88, 0xfb,
0x87, 0xb4, 0xb0, 0x9e, 0x59, 0xbe, 0x9d, 0xa0, 0x44, 0xcc, 0xed, 0xc3, 0xd5, 0xec, 0x1e, 0x46,
0xcc, 0xbc, 0x2f, 0xcd, 0xac, 0xa5, 0x37, 0x92, 0xb7, 0xf2, 0x26, 0x6c, 0xe5, 0x76, 0x93, 0xdc,
0x46, 0x14, 0x6d, 0xff, 0x9c, 0x13, 0xe1, 0x96, 0xdd, 0x4e, 0x7c, 0x23, 0x2a, 0xcc, 0x0e, 0x60,
0x33, 0xbb, 0x9d, 0x51, 0x3b, 0xff, 0x92, 0x76, 0x32, 0xfb, 0xc9, 0x9b, 0xb9, 0x0d, 0xb1, 0xd3,
0xcd, 0xc7, 0x43, 0xca, 0x9c, 0x9e, 0x43, 0x6c, 0x79, 0x9c, 0x5f, 0xd6, 0xc4, 0x71, 0x96, 0x23,
0xfd, 0x67, 0x23, 0xb5, 0x38, 0xc8, 0xeb, 0x50, 0xcd, 0xe1, 0x7f, 0x25, 0xf1, 0x0b, 0x8f, 0x33,
0xb8, 0x8f, 0xc2, 0x8a, 0x12, 0x58, 0xd2, 0x55, 0x5d, 0x87, 0xf5, 0x1c, 0xe2, 0xda, 0xda, 0xaf,
0x95, 0xfd, 0x8c, 0xba, 0xa5, 0xb4, 0xdc, 0x7e, 0xcf, 0xf1, 0xb0, 0xeb, 0x7c, 0x39, 0xb2, 0xff,
0x1b, 0x65, 0x3f, 0x16, 0x0b, 0xfb, 0x6f, 0xc3, 0xa2, 0x0a, 0x4b, 0x2b, 0xf4, 0x29, 0x75, 0x1d,
0xef, 0x94, 0x6a, 0x3f, 0x58, 0x9d, 0x9e, 0xa7, 0xda, 0x11, 0x54, 0xe5, 0xa9, 0xba, 0x34, 0x11,
0x8b, 0x29, 0x8f, 0x38, 0x65, 0xb6, 0xeb, 0xfa, 0xd6, 0xa9, 0x19, 0xfa, 0x3e, 0x8b, 0x83, 0xfd,
0x87, 0xab, 0x22, 0xd8, 0x57, 0x24, 0xa2, 0xc5, 0x01, 0x86, 0xef, 0xb3, 0x54, 0xac, 0x77, 0x31,
0xb3, 0x4e, 0x88, 0x3d, 0x8e, 0xfc, 0x23, 0x49, 0x5e, 0x55, 0x90, 0x11, 0xf6, 0x9d, 0x78, 0xe5,
0x80, 0x44, 0xe7, 0x8f, 0xd3, 0xc8, 0x8f, 0x57, 0x45, 0x1e, 0x51, 0xcf, 0xec, 0x61, 0x04, 0x88,
0xb3, 0x49, 0x17, 0x96, 0x14, 0x19, 0x33, 0xfe, 0x8f, 0xf0, 0x29, 0xd5, 0x7e, 0x22, 0xfd, 0x71,
0x73, 0x92, 0x3f, 0x1e, 0x12, 0xcf, 0x76, 0xbc, 0xfe, 0x5e, 0xc2, 0x51, 0x8e, 0x41, 0xd2, 0x5a,
0x4a, 0x91, 0x4e, 0x04, 0x36, 0x09, 0x7c, 0xea, 0xb0, 0xf4, 0xf9, 0xb4, 0xef, 0x6e, 0x8a, 0xa0,
0x53, 0x3b, 0xdc, 0x97, 0x88, 0xe4, 0x7c, 0xbc, 0xae, 0x64, 0x68, 0x67, 0x3e, 0x23, 0x54, 0xfb,
0xde, 0xe6, 0xf4, 0x0b, 0x4b, 0xd9, 0x39, 0xf6, 0x19, 0x31, 0xea, 0x76, 0x56, 0x40, 0x91, 0x0e,
0x95, 0x3e, 0xf1, 0x08, 0x75, 0xa8, 0xc9, 0x9c, 0x01, 0xd1, 0xbe, 0x76, 0x4d, 0x44, 0x4b, 0x59,
0x09, 0x8f, 0x9c, 0x01, 0x41, 0x0d, 0x28, 0xf5, 0xfc, 0xf0, 0x54, 0xfb, 0x3a, 0xd7, 0x95, 0x9b,
0xeb, 0x93, 0x56, 0xbb, 0xeb, 0x87, 0xa7, 0x86, 0x80, 0xa2, 0x25, 0x28, 0x89, 0xe0, 0xfb, 0x86,
0x34, 0x27, 0x7e, 0xa0, 0x77, 0x00, 0x59, 0x43, 0xca, 0x7c, 0xfb, 0x82, 0x97, 0x0a, 0xd7, 0x25,
0x5e, 0x9f, 0x50, 0xed, 0xfd, 0x1d, 0x71, 0x86, 0xed, 0x89, 0x41, 0x27, 0x29, 0xed, 0x88, 0x61,
0x2c, 0x5a, 0x39, 0x09, 0xd5, 0x3d, 0x28, 0xf1, 0xc5, 0xd1, 0x75, 0xa8, 0xc7, 0xcf, 0xf2, 0x8c,
0x84, 0xd4, 0xf1, 0x3d, 0xad, 0x20, 0x76, 0x50, 0x8b, 0xe4, 0xc7, 0x52, 0x8c, 0xae, 0x41, 0x2d,
0x4a, 0x04, 0x11, 0x52, 0x56, 0xd0, 0xaa, 0x12, 0x47, 0x40, 0xa4, 0x8e, 0x32, 0x93, 0x9c, 0x44,
0xff, 0x22, 0xd4, 0x72, 0xae, 0x45, 0x3b, 0xb0, 0x34, 0xee, 0x5e, 0x0b, 0xe2, 0x5a, 0x17, 0xed,
0x91, 0x0b, 0xdd, 0x00, 0xe0, 0x77, 0xa8, 0x0a, 0xaf, 0x5c, 0xfa, 0x32, 0x97, 0x88, 0x3a, 0xab,
0xff, 0xbe, 0x00, 0xda, 0xa4, 0xf0, 0x42, 0x77, 0xa0, 0x64, 0x63, 0x86, 0x85, 0xf1, 0x29, 0xb7,
0x9f, 0x22, 0xee, 0x63, 0x86, 0x0d, 0x41, 0x42, 0x6f, 0xc0, 0x4a, 0x80, 0x43, 0xe6, 0x58, 0x4e,
0x90, 0xcb, 0x2c, 0x45, 0xb1, 0xd7, 0xe5, 0x8c, 0x36, 0x4e, 0x2c, 0xd7, 0xa1, 0x1e, 0x5d, 0x5e,
0x4c, 0x98, 0x11, 0x84, 0x9a, 0x92, 0xc7, 0xd0, 0x57, 0x60, 0x81, 0x7b, 0xc9, 0x74, 0x3c, 0xcb,
0x1d, 0xda, 0xc4, 0x16, 0x7d, 0x40, 0xc9, 0xa8, 0x70, 0x61, 0x47, 0xc9, 0xf4, 0xdf, 0x15, 0xa0,
0x9c, 0xda, 0xe0, 0xff, 0xfb, 0x99, 0x76, 0x61, 0x09, 0xf7, 0xfb, 0x21, 0xe9, 0x8b, 0x7e, 0xcb,
0xe9, 0x7b, 0x98, 0x0d, 0x43, 0xa2, 0x3a, 0x1c, 0x14, 0xab, 0x0e, 0x23, 0x8d, 0xfe, 0xed, 0x19,
0xa8, 0xe5, 0x36, 0x1b, 0x87, 0x52, 0x21, 0xf5, 0x28, 0x5e, 0x84, 0x59, 0x59, 0x8f, 0x65, 0x08,
0xc8, 0x1f, 0xe8, 0x36, 0x68, 0xf2, 0xdc, 0xa3, 0xa9, 0x50, 0xed, 0x70, 0x59, 0xea, 0x73, 0x79,
0x10, 0xdd, 0x81, 0x2b, 0xb2, 0xae, 0x75, 0xfd, 0xa1, 0x67, 0xe3, 0xf0, 0x22, 0x43, 0x95, 0xdb,
0x5d, 0x15, 0x88, 0x96, 0x02, 0xa4, 0xc8, 0x6f, 0xc0, 0xaa, 0x6c, 0xaa, 0x46, 0x17, 0x9d, 0x15,
0xcc, 0x17, 0x85, 0x3a, 0xbf, 0xe6, 0xa7, 0x61, 0x3d, 0x5f, 0x4b, 0x32, 0xdc, 0x4b, 0x82, 0xfb,
0x52, 0xae, 0x58, 0xa4, 0x0c, 0xbc, 0x36, 0x52, 0x14, 0xe7, 0xc6, 0xd5, 0xc4, 0x4f, 0xc2, 0x5a,
0x02, 0x1b, 0xdd, 0xe2, 0xbc, 0x58, 0x46, 0x8b, 0x21, 0xb9, 0x6d, 0xea, 0x5f, 0x81, 0xf5, 0xdc,
0x85, 0xec, 0x79, 0x76, 0x3b, 0xbe, 0xe7, 0xe7, 0x8b, 0xc0, 0x4d, 0x28, 0xa7, 0x42, 0x49, 0x5c,
0xe6, 0xbc, 0x01, 0x49, 0x14, 0xe9, 0xff, 0x99, 0x85, 0x5a, 0xae, 0xcf, 0x47, 0x2b, 0x70, 0x29,
0x18, 0x76, 0x4f, 0xc9, 0x85, 0x4a, 0x13, 0xea, 0x17, 0x6a, 0xc1, 0xc6, 0x7b, 0x0e, 0x3b, 0xb1,
0x43, 0xfc, 0x1e, 0x76, 0x4d, 0x2b, 0x24, 0x36, 0xf1, 0x98, 0x83, 0xdd, 0xa8, 0x6f, 0x54, 0x51,
0xbd, 0x96, 0x80, 0xda, 0x09, 0x46, 0xf9, 0xf4, 0x63, 0xa0, 0xa9, 0xd6, 0x46, 0x76, 0xc8, 0x03,
0x9e, 0xe9, 0x32, 0x11, 0xb4, 0x22, 0xf5, 0xed, 0x58, 0xad, 0x98, 0xaf, 0xc0, 0x82, 0x62, 0xba,
0xf8, 0x82, 0x84, 0x34, 0x7a, 0xbe, 0x52, 0x78, 0x5f, 0xc8, 0x78, 0xfa, 0xc4, 0x16, 0x73, 0xce,
0x52, 0x7d, 0xdc, 0xac, 0x4c, 0x9f, 0x89, 0x58, 0x5c, 0xda, 0x1a, 0x5c, 0x16, 0x03, 0x86, 0x80,
0x5c, 0x12, 0x90, 0x79, 0x2e, 0x10, 0xca, 0x6b, 0x50, 0x4b, 0x1d, 0x34, 0x75, 0xf3, 0xd5, 0x44,
0x2c, 0x80, 0xaf, 0x41, 0x35, 0x29, 0xeb, 0x02, 0x37, 0x2f, 0x23, 0x24, 0x96, 0x0a, 0xd8, 0x06,
0x40, 0x6a, 0x9a, 0xb9, 0x2c, 0x93, 0x2a, 0x89, 0x87, 0x97, 0x63, 0xa8, 0xf0, 0x9b, 0x1b, 0x52,
0xb3, 0xe7, 0xe2, 0x3e, 0xd5, 0x60, 0xab, 0xb0, 0x5d, 0x6d, 0xde, 0x7a, 0xc6, 0xb1, 0x6c, 0xe7,
0x50, 0x70, 0xef, 0x72, 0xaa, 0x51, 0xa6, 0xc9, 0x0f, 0xd9, 0x67, 0xab, 0xc2, 0x36, 0xe2, 0xec,
0xb2, 0x7c, 0x73, 0x51, 0xd1, 0xca, 0x7b, 0xfb, 0x4e, 0xdc, 0x16, 0x44, 0x26, 0x42, 0x42, 0x49,
0x74, 0xca, 0x8a, 0x6c, 0xf0, 0xd5, 0xd3, 0x91, 0x00, 0x43, 0xe8, 0xc5, 0x79, 0x0f, 0x60, 0x33,
0x20, 0xde, 0xc0, 0x65, 0x4e, 0x9f, 0xe7, 0xa5, 0x51, 0x16, 0xe6, 0x55, 0x8f, 0x9e, 0xc0, 0x86,
0xcd, 0x6c, 0xc0, 0xac, 0x6a, 0x95, 0xb4, 0x3f, 0x0a, 0xff, 0x37, 0x8b, 0x5a, 0xc1, 0x88, 0x64,
0xfa, 0xa7, 0xa0, 0x9c, 0x3a, 0x3a, 0x2a, 0xc3, 0x6c, 0xfb, 0x9d, 0xf6, 0x51, 0x7b, 0xef, 0x41,
0xed, 0x15, 0x84, 0x60, 0x41, 0xfe, 0x38, 0x3a, 0xd8, 0x37, 0x0f, 0xde, 0x6b, 0x1f, 0xd5, 0x0a,
0xa8, 0x06, 0x95, 0xc7, 0xed, 0xa3, 0xfb, 0xfb, 0xc6, 0xde, 0xe3, 0xbd, 0xe6, 0x83, 0x83, 0x5a,
0x51, 0x77, 0x61, 0x55, 0x4c, 0x15, 0x06, 0xc1, 0x94, 0x27, 0x4f, 0x7e, 0x7e, 0xf5, 0x06, 0xae,
0x43, 0x35, 0x99, 0xfb, 0x1c, 0xcf, 0x26, 0xe7, 0xe2, 0x31, 0xcc, 0x1b, 0x0b, 0xb1, 0xb8, 0xcd,
0xa5, 0x63, 0x12, 0xe5, 0xa8, 0xea, 0xfc, 0x79, 0xa8, 0xe6, 0x3a, 0xd5, 0x91, 0x99, 0x77, 0x42,
0xb6, 0x2b, 0x8e, 0xcf, 0x76, 0xfa, 0x17, 0x61, 0x69, 0xc4, 0xfc, 0x88, 0x3e, 0x07, 0xcb, 0x98,
0xff, 0xc7, 0xcc, 0x8d, 0xa5, 0x6a, 0xf6, 0x7f, 0xf3, 0xf9, 0x66, 0x51, 0x63, 0x49, 0x18, 0xc9,
0x0a, 0xf5, 0x73, 0x58, 0xc8, 0x4a, 0x12, 0x67, 0x14, 0xd2, 0xce, 0x58, 0x87, 0x4b, 0xc9, 0xba,
0xc5, 0xad, 0xa9, 0xed, 0x79, 0x23, 0x11, 0xa0, 0x06, 0x2c, 0x33, 0x9f, 0x61, 0xd7, 0x4c, 0xfc,
0x9d, 0x9e, 0xfa, 0x97, 0x84, 0x32, 0x8e, 0x79, 0xd9, 0x86, 0x7c, 0xbf, 0x18, 0x7d, 0xde, 0x10,
0x6e, 0x18, 0xe9, 0xc7, 0xff, 0x07, 0x14, 0x60, 0xd1, 0x48, 0x0d, 0xbb, 0xb0, 0x26, 0x35, 0xa9,
0x5c, 0x7f, 0x13, 0x16, 0xf9, 0xd3, 0x21, 0x23, 0x4a, 0x5a, 0x55, 0x28, 0x52, 0xd8, 0x5b, 0xf0,
0xaa, 0xca, 0x44, 0x21, 0x39, 0x23, 0xd8, 0xcd, 0x96, 0x31, 0x24, 0x75, 0x86, 0x50, 0x29, 0xc6,
0x98, 0x2e, 0x6c, 0x7a, 0x5c, 0x17, 0xb6, 0x0e, 0x97, 0x92, 0x62, 0x3e, 0x23, 0x26, 0x8c, 0x44,
0xc0, 0x2b, 0x42, 0xc7, 0xb7, 0x2f, 0x44, 0x4e, 0x9a, 0x50, 0x11, 0x52, 0x0e, 0x6a, 0xf2, 0x87,
0x25, 0x48, 0xfa, 0xbf, 0x8a, 0x50, 0xcd, 0x69, 0xd0, 0xdb, 0x50, 0xc9, 0x0c, 0x18, 0x32, 0x36,
0xae, 0x3d, 0x47, 0xa9, 0x31, 0x32, 0x44, 0xf4, 0x18, 0x50, 0x10, 0xfa, 0x81, 0x4f, 0x49, 0x68,
0x52, 0x17, 0xd3, 0x13, 0xc7, 0xeb, 0x51, 0x71, 0xe5, 0x13, 0x3a, 0xe9, 0x47, 0x8a, 0x71, 0xa8,
0x08, 0xc6, 0x62, 0x90, 0x93, 0x50, 0xf4, 0x59, 0xa8, 0x59, 0x98, 0x06, 0x19, 0xb3, 0x53, 0x93,
0x23, 0xb8, 0x25, 0xf0, 0xb1, 0xd1, 0xaa, 0x95, 0xf9, 0xcd, 0x27, 0xb3, 0x39, 0xe5, 0x78, 0x5e,
0x4a, 0xb8, 0xa9, 0xcd, 0x67, 0xcd, 0x2b, 0x31, 0x01, 0x35, 0x60, 0x9a, 0xe7, 0x6f, 0xf9, 0x25,
0x68, 0xc2, 0xec, 0x71, 0x70, 0xee, 0x30, 0x43, 0x42, 0xf5, 0x6f, 0x17, 0xa1, 0xa2, 0x2c, 0xb5,
0xbd, 0x60, 0xc0, 0xc6, 0xd6, 0xd9, 0x1d, 0x58, 0x0a, 0x42, 0xdf, 0xef, 0x9a, 0x7e, 0xd7, 0x0c,
0x7c, 0x4a, 0x09, 0x8d, 0xe7, 0x80, 0x8a, 0x70, 0x8e, 0xdf, 0x7d, 0xd8, 0x7d, 0x14, 0x2b, 0x9e,
0x5d, 0x97, 0xa7, 0x5e, 0xae, 0x2e, 0x97, 0x26, 0xd6, 0xe5, 0x89, 0x55, 0x66, 0x7a, 0x62, 0x95,
0xd1, 0x9f, 0x00, 0x92, 0xb7, 0x8f, 0x5d, 0xde, 0xa2, 0x12, 0xfb, 0x05, 0xfb, 0xd1, 0x9b, 0xb0,
0x38, 0xae, 0x11, 0xad, 0x76, 0x72, 0x09, 0xf2, 0x0f, 0x05, 0x58, 0x14, 0xb7, 0x8f, 0x3b, 0x2e,
0xe1, 0xb3, 0x91, 0x58, 0xab, 0x0e, 0xcb, 0xa9, 0x06, 0xc9, 0xbc, 0xc5, 0x73, 0xbd, 0xc3, 0x67,
0xf3, 0x82, 0xc8, 0x53, 0x28, 0x69, 0x95, 0x6e, 0xb5, 0xa5, 0x26, 0x4f, 0xa9, 0xc7, 0x94, 0x62,
0x9e, 0x52, 0x8f, 0x28, 0x51, 0x0f, 0x37, 0xf5, 0xdf, 0xf4, 0x70, 0x2f, 0xdc, 0xe3, 0x7f, 0xb3,
0x00, 0x65, 0x15, 0x68, 0xe2, 0x8c, 0x6d, 0x98, 0x8f, 0xb2, 0x8f, 0xc3, 0x03, 0x4f, 0xb5, 0x92,
0xaf, 0x3f, 0x23, 0xdc, 0x45, 0x90, 0x1a, 0x15, 0x3b, 0x17, 0xb2, 0xb8, 0x9f, 0x1a, 0x0d, 0xd5,
0x2f, 0x9e, 0xb0, 0xf8, 0x9c, 0x4e, 0x19, 0xee, 0x07, 0x2a, 0x71, 0x27, 0x02, 0xfd, 0xa7, 0x45,
0xa8, 0xe5, 0x5f, 0xb9, 0xe8, 0x9d, 0xa2, 0x5c, 0x91, 0x2e, 0xb0, 0xf3, 0x91, 0x54, 0xd6, 0x57,
0x03, 0xaa, 0x81, 0x0a, 0x11, 0x93, 0xbb, 0xc3, 0xac, 0x8b, 0xa5, 0xcb, 0x8d, 0x9b, 0x93, 0xf3,
0x49, 0x3a, 0xa2, 0x22, 0x9b, 0xd8, 0xe5, 0xbf, 0xea, 0x3c, 0x81, 0xc7, 0x36, 0x63, 0x87, 0x9a,
0x75, 0x15, 0x39, 0x28, 0x48, 0x19, 0x10, 0xaa, 0xfa, 0xf0, 0x2e, 0xe4, 0xab, 0x78, 0x89, 0x5d,
0x34, 0xc6, 0xec, 0x22, 0x7a, 0x33, 0xc3, 0xbb, 0x68, 0xe8, 0xdf, 0x29, 0xc0, 0x42, 0x36, 0xad,
0xa1, 0x26, 0xcc, 0x8a, 0x6f, 0x2e, 0x66, 0x5d, 0xdd, 0xea, 0x8d, 0xb1, 0x15, 0x3d, 0x1f, 0xfb,
0xc6, 0x8c, 0x60, 0xd6, 0x13, 0x1b, 0x0d, 0xe5, 0xda, 0x17, 0xb6, 0xd1, 0xd0, 0xbf, 0x51, 0x80,
0x59, 0x15, 0x37, 0xbc, 0xa2, 0xf7, 0x49, 0x78, 0xea, 0x12, 0xb3, 0x13, 0x62, 0xcf, 0x3a, 0x89,
0x3f, 0x96, 0x15, 0x44, 0x25, 0x5b, 0x92, 0xca, 0xa6, 0xd0, 0x45, 0xdf, 0xc9, 0x6e, 0xc2, 0xa2,
0xe2, 0xb0, 0x90, 0x10, 0x15, 0x10, 0x32, 0xc6, 0xaa, 0x52, 0x71, 0x14, 0x12, 0x22, 0x43, 0xe2,
0x35, 0x88, 0x82, 0xd2, 0x8c, 0x5f, 0x55, 0xc5, 0x28, 0xdb, 0x49, 0xc8, 0xeb, 0x18, 0x4a, 0x3c,
0xf5, 0x8e, 0x4c, 0x25, 0x23, 0x5a, 0xbb, 0xe2, 0xc8, 0xd6, 0x2e, 0x53, 0x85, 0xe5, 0x22, 0x89,
0x40, 0xff, 0x4d, 0x11, 0xd6, 0x8e, 0x47, 0xfe, 0x09, 0x41, 0xf6, 0x24, 0xf7, 0xe1, 0xb5, 0xe8,
0x0b, 0x7d, 0xf6, 0xef, 0x11, 0xc3, 0xdf, 0x61, 0x36, 0xd4, 0x67, 0xfa, 0xb4, 0x91, 0x54, 0x37,
0xf0, 0xdc, 0x1b, 0x4e, 0x0a, 0xca, 0x54, 0xa6, 0xa0, 0x44, 0x5e, 0x28, 0xa5, 0xbc, 0x60, 0x41,
0x89, 0x4f, 0x1b, 0x22, 0xda, 0x16, 0x1a, 0x0f, 0x9f, 0x63, 0xd8, 0xc8, 0x9f, 0x70, 0x8c, 0x4e,
0x0e, 0x22, 0xc2, 0xb8, 0x7e, 0x67, 0x9c, 0x8b, 0x64, 0xcb, 0xbe, 0x00, 0xb0, 0xd7, 0x3a, 0x6a,
0x1f, 0xef, 0x1d, 0xb5, 0x1f, 0xbe, 0x53, 0x7b, 0x05, 0xcd, 0x41, 0x49, 0xf6, 0xea, 0x3a, 0x82,
0x5a, 0xfe, 0x03, 0x5b, 0xb3, 0xf2, 0xb3, 0xa7, 0x57, 0x0b, 0x3f, 0x7f, 0x7a, 0xb5, 0xf0, 0xfb,
0xa7, 0x57, 0x0b, 0x9d, 0x19, 0xf1, 0x87, 0xae, 0xdb, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xa3,
0xb7, 0x53, 0xa6, 0x40, 0x1b, 0x00, 0x00,
0x20, 0xde, 0xd0, 0x65, 0xce, 0x80, 0xe7, 0xa5, 0x71, 0x16, 0x16, 0x54, 0x8f, 0x9e, 0xc0, 0x46,
0xcd, 0x6c, 0xc0, 0x9c, 0x6a, 0x95, 0xb4, 0x3f, 0x09, 0xff, 0xb7, 0x8a, 0x5a, 0xc1, 0x88, 0x64,
0xfa, 0x67, 0xa0, 0x9c, 0x3a, 0x3a, 0x2a, 0xc3, 0x5c, 0xe7, 0xad, 0xce, 0x51, 0x67, 0xef, 0x7e,
0xfd, 0x05, 0x84, 0xa0, 0x2a, 0x7f, 0x1c, 0x1d, 0xec, 0x9b, 0x07, 0xef, 0x74, 0x8e, 0xea, 0x05,
0x54, 0x87, 0xca, 0xa3, 0xce, 0xd1, 0xbd, 0x7d, 0x63, 0xef, 0xd1, 0x5e, 0xeb, 0xfe, 0x41, 0xbd,
0xa8, 0xbb, 0xb0, 0x2a, 0xa6, 0x0a, 0x83, 0x60, 0xca, 0x93, 0x27, 0x3f, 0xbf, 0x7a, 0x03, 0xd7,
0xa0, 0x96, 0xcc, 0x7d, 0x8e, 0x67, 0x93, 0x73, 0xf1, 0x18, 0x16, 0x8c, 0x6a, 0x2c, 0xee, 0x70,
0xe9, 0x84, 0x44, 0x39, 0xae, 0x3a, 0xbf, 0x0b, 0xb5, 0x5c, 0xa7, 0x3a, 0x36, 0xf3, 0x4e, 0xc9,
0x76, 0xc5, 0xc9, 0xd9, 0x4e, 0xff, 0x12, 0x2c, 0x8d, 0x99, 0x1f, 0xd1, 0x17, 0x60, 0x19, 0xf3,
0xff, 0x98, 0xb9, 0xb1, 0x54, 0xcd, 0xfe, 0xaf, 0x3f, 0xdb, 0x2c, 0x6a, 0x2c, 0x09, 0x23, 0x59,
0xa1, 0x7e, 0x0e, 0xd5, 0xac, 0x24, 0x71, 0x46, 0x21, 0xed, 0x8c, 0x75, 0xb8, 0x9c, 0xac, 0x5b,
0xdc, 0x9a, 0xd9, 0x5e, 0x30, 0x12, 0x01, 0x6a, 0xc2, 0x32, 0xf3, 0x19, 0x76, 0xcd, 0xc4, 0xdf,
0xe9, 0xa9, 0x7f, 0x49, 0x28, 0xe3, 0x98, 0x97, 0x6d, 0xc8, 0xf7, 0x8b, 0xd1, 0xe7, 0x0d, 0xe1,
0x86, 0xb1, 0x7e, 0xfc, 0x30, 0xa0, 0x00, 0x8b, 0x46, 0x6a, 0xd4, 0x85, 0x75, 0xa9, 0x49, 0xe5,
0xfa, 0x1b, 0xb0, 0xc8, 0x9f, 0x0e, 0x19, 0x53, 0xd2, 0x6a, 0x42, 0x91, 0xc2, 0xde, 0x84, 0x17,
0x55, 0x26, 0x0a, 0xc9, 0x19, 0xc1, 0x6e, 0xb6, 0x8c, 0x21, 0xa9, 0x33, 0x84, 0x4a, 0x31, 0x26,
0x74, 0x61, 0xb3, 0x93, 0xba, 0xb0, 0x75, 0xb8, 0x9c, 0x14, 0xf3, 0x4b, 0x62, 0xc2, 0x48, 0x04,
0xbc, 0x22, 0x74, 0x7d, 0xfb, 0x42, 0xe4, 0xa4, 0x29, 0x15, 0x21, 0xe5, 0xa0, 0x16, 0x7f, 0x58,
0x82, 0xa4, 0xff, 0xbb, 0x08, 0xb5, 0x9c, 0x06, 0xbd, 0x09, 0x95, 0xcc, 0x80, 0x21, 0x63, 0xe3,
0x95, 0x67, 0x28, 0x35, 0x46, 0x86, 0x88, 0x1e, 0x01, 0x0a, 0x42, 0x3f, 0xf0, 0x29, 0x09, 0x4d,
0xea, 0x62, 0x7a, 0xe2, 0x78, 0x7d, 0x2a, 0xae, 0x7c, 0x4a, 0x27, 0xfd, 0x50, 0x31, 0x0e, 0x15,
0xc1, 0x58, 0x0c, 0x72, 0x12, 0x8a, 0x3e, 0x0f, 0x75, 0x0b, 0xd3, 0x20, 0x63, 0x76, 0x66, 0x7a,
0x04, 0xb7, 0x05, 0x3e, 0x36, 0x5a, 0xb3, 0x32, 0xbf, 0xf9, 0x64, 0x36, 0xaf, 0x1c, 0xcf, 0x4b,
0x09, 0x37, 0xb5, 0xf9, 0xb4, 0x79, 0x25, 0x26, 0xa0, 0x26, 0xcc, 0xf2, 0xfc, 0x2d, 0xbf, 0x04,
0x4d, 0x99, 0x3d, 0x0e, 0xce, 0x1d, 0x66, 0x48, 0xa8, 0xfe, 0x9d, 0x22, 0x54, 0x94, 0xa5, 0x8e,
0x17, 0x0c, 0xd9, 0xc4, 0x3a, 0xbb, 0x03, 0x4b, 0x41, 0xe8, 0xfb, 0x3d, 0xd3, 0xef, 0x99, 0x81,
0x4f, 0x29, 0xa1, 0xf1, 0x1c, 0x50, 0x11, 0xce, 0xf1, 0x7b, 0x0f, 0x7a, 0x0f, 0x63, 0xc5, 0xd3,
0xeb, 0xf2, 0xcc, 0xf3, 0xd5, 0xe5, 0xd2, 0xd4, 0xba, 0x3c, 0xb5, 0xca, 0xcc, 0x4e, 0xad, 0x32,
0xfa, 0x63, 0x40, 0xf2, 0xf6, 0xb1, 0xcb, 0x5b, 0x54, 0x62, 0x7f, 0xc0, 0x7e, 0xf4, 0x06, 0x2c,
0x4e, 0x6a, 0x44, 0x6b, 0xdd, 0x5c, 0x82, 0xfc, 0x63, 0x01, 0x16, 0xc5, 0xed, 0xe3, 0xae, 0x4b,
0xf8, 0x6c, 0x24, 0xd6, 0x6a, 0xc0, 0x72, 0xaa, 0x41, 0x32, 0x6f, 0xf2, 0x5c, 0xef, 0xf0, 0xd9,
0xbc, 0x20, 0xf2, 0x14, 0x4a, 0x5a, 0xa5, 0x9b, 0x1d, 0xa9, 0xc9, 0x53, 0x1a, 0x31, 0xa5, 0x98,
0xa7, 0x34, 0x22, 0x4a, 0xd4, 0xc3, 0xcd, 0xfc, 0x2f, 0x3d, 0xdc, 0x07, 0xee, 0xf1, 0xbf, 0x55,
0x80, 0xb2, 0x0a, 0x34, 0x71, 0xc6, 0x0e, 0x2c, 0x44, 0xd9, 0xc7, 0xe1, 0x81, 0xa7, 0x5a, 0xc9,
0x57, 0x9f, 0x12, 0xee, 0x22, 0x48, 0x8d, 0x8a, 0x9d, 0x0b, 0x59, 0x3c, 0x48, 0x8d, 0x86, 0xea,
0x17, 0x4f, 0x58, 0x7c, 0x4e, 0xa7, 0x0c, 0x0f, 0x02, 0x95, 0xb8, 0x13, 0x81, 0xfe, 0xd3, 0x22,
0xd4, 0xf3, 0xaf, 0x5c, 0xf4, 0x4e, 0x51, 0xae, 0x48, 0x17, 0xd8, 0x85, 0x48, 0x2a, 0xeb, 0xab,
0x01, 0xb5, 0x40, 0x85, 0x88, 0xc9, 0xdd, 0x61, 0x36, 0xc4, 0xd2, 0xe5, 0xe6, 0x8d, 0xe9, 0xf9,
0x24, 0x1d, 0x51, 0x91, 0x4d, 0xec, 0xf2, 0x5f, 0x0d, 0x9e, 0xc0, 0x63, 0x9b, 0xb1, 0x43, 0xcd,
0x86, 0x8a, 0x1c, 0x14, 0xa4, 0x0c, 0x08, 0x55, 0x63, 0x74, 0x17, 0xf2, 0x55, 0x3c, 0xc7, 0x2e,
0x9a, 0x13, 0x76, 0x11, 0xbd, 0x99, 0xd1, 0x5d, 0x34, 0xf5, 0x9f, 0x17, 0xa0, 0x9a, 0x4d, 0x6b,
0xe8, 0x5d, 0x58, 0xa6, 0x51, 0x50, 0x8b, 0xaf, 0x2f, 0x91, 0x93, 0xe4, 0x1d, 0x5f, 0x9f, 0x58,
0xdf, 0xf3, 0x2f, 0xc1, 0x40, 0x34, 0x2f, 0x6a, 0x4c, 0xb2, 0xde, 0x54, 0x57, 0xf0, 0x5c, 0xd6,
0x9b, 0xfa, 0x37, 0x0b, 0x30, 0xa7, 0x62, 0x8d, 0x77, 0x01, 0x03, 0x12, 0x9e, 0xba, 0xc4, 0xec,
0x86, 0xd8, 0xb3, 0x4e, 0xe2, 0x0f, 0x6c, 0x05, 0x51, 0xfd, 0x96, 0xa4, 0xb2, 0x25, 0x74, 0xd1,
0xb7, 0xb5, 0x1b, 0xb0, 0xa8, 0x38, 0x2c, 0x24, 0x44, 0x05, 0x91, 0x8c, 0xcb, 0x9a, 0x54, 0x1c,
0x85, 0x84, 0xc8, 0x30, 0x7a, 0x19, 0xa2, 0x40, 0x36, 0xe3, 0x97, 0x58, 0x31, 0xca, 0x76, 0xf2,
0x4c, 0x74, 0x0c, 0x25, 0x9e, 0xae, 0xc7, 0xa6, 0x9f, 0x31, 0xed, 0x60, 0x71, 0x6c, 0x3b, 0x98,
0xa9, 0xdc, 0x72, 0x91, 0x44, 0xa0, 0xff, 0xb6, 0x08, 0x6b, 0xc7, 0x63, 0xff, 0xec, 0x20, 0xfb,
0x98, 0x7b, 0xf0, 0x72, 0xf4, 0x55, 0x3f, 0xfb, 0x37, 0x8c, 0xd1, 0x6f, 0x37, 0x1b, 0xea, 0xd3,
0x7e, 0xda, 0x48, 0xaa, 0x83, 0x78, 0xe6, 0x0d, 0x27, 0x45, 0x68, 0x26, 0x53, 0x84, 0x22, 0x2f,
0x94, 0x52, 0x5e, 0xb0, 0xa0, 0xc4, 0x27, 0x14, 0x11, 0xa1, 0xd5, 0xe6, 0x83, 0x67, 0x18, 0x50,
0xf2, 0x27, 0x9c, 0xa0, 0x93, 0xc3, 0x8b, 0x30, 0xae, 0xdf, 0x9e, 0xe4, 0x22, 0xd9, 0xe6, 0x57,
0x01, 0xf6, 0xda, 0x47, 0x9d, 0xe3, 0xbd, 0xa3, 0xce, 0x83, 0xb7, 0xea, 0x2f, 0xa0, 0x79, 0x28,
0xc9, 0xfe, 0x5e, 0x47, 0x50, 0xcf, 0x7f, 0x94, 0x6b, 0x55, 0x7e, 0xf6, 0xe4, 0x6a, 0xe1, 0x17,
0x4f, 0xae, 0x16, 0xfe, 0xf0, 0xe4, 0x6a, 0xa1, 0x7b, 0x49, 0xfc, 0x71, 0xec, 0xd6, 0x7f, 0x03,
0x00, 0x00, 0xff, 0xff, 0x33, 0x5c, 0xc5, 0x37, 0x74, 0x1b, 0x00, 0x00,
}

View File

@@ -200,8 +200,8 @@ message ProposerSlashing {
}
message CasperSlashing {
SlashableVoteData votes_1 = 1;
SlashableVoteData votes_2 = 2;
SlashableVoteData slashable_vote_data_1 = 1;
SlashableVoteData slashable_vote_data_2 = 2;
}
message Deposit {