Rename crosslinks to latest crosslinks (#1032)

This commit is contained in:
Preston Van Loon
2018-12-02 22:10:47 -05:00
committed by GitHub
parent 621d5fad72
commit 8620311bfc
7 changed files with 162 additions and 173 deletions

View File

@@ -33,9 +33,9 @@ func FinalizeAndJustifySlots(
return justifiedSlot, finalizedSlot, justifiedStreak
}
// UpdateCrosslinks checks the vote balances and if there is a supermajority it sets the crosslink
// UpdateLatestCrosslinks checks the vote balances and if there is a supermajority it sets the crosslink
// for that shard.
func UpdateCrosslinks(slot uint64, voteBalance uint64, totalBalance uint64,
func UpdateLatestCrosslinks(slot uint64, voteBalance uint64, totalBalance uint64,
attestation *pb.AggregatedAttestation, crosslinkRecords []*pb.CrosslinkRecord) []*pb.CrosslinkRecord {
// if 2/3 of committee voted on this crosslink, update the crosslink
// with latest dynasty number, shard block hash, and slot number.

View File

@@ -69,7 +69,7 @@ func TestFinalizeAndJustifySlots(t *testing.T) {
}
func TestCrosslinks(t *testing.T) {
func TestLatestCrosslinks(t *testing.T) {
totalBalance := uint64(5e9)
voteBalance := uint64(4e9)
@@ -91,8 +91,8 @@ func TestCrosslinks(t *testing.T) {
AttesterBitfield: []byte{100, 128, 8},
}
crossLinks = UpdateCrosslinks(10, voteBalance, totalBalance, attestation, crossLinks)
crossLinks = UpdateCrosslinks(10, voteBalance, totalBalance, attestation, crossLinks)
crossLinks = UpdateLatestCrosslinks(10, voteBalance, totalBalance, attestation, crossLinks)
crossLinks = UpdateLatestCrosslinks(10, voteBalance, totalBalance, attestation, crossLinks)
if !bytes.Equal(crossLinks[1].GetShardBlockHash(), []byte{'B'}) {
t.Errorf("shard blockhash not saved in crosslink record %v", crossLinks[1].GetShardBlockHash())

View File

@@ -132,7 +132,7 @@ func crossLinkCalculations(
currentSlot uint64,
) ([]*pb.CrosslinkRecord, error) {
slot := st.LastStateRecalculationSlot() + params.BeaconConfig().CycleLength
crossLinkRecords := st.Crosslinks()
crossLinkRecords := st.LatestCrosslinks()
for _, attestation := range pendingAttestations {
shardCommittees, err := v.GetShardAndCommitteesForSlot(
st.ShardAndCommitteesForSlots(),
@@ -167,7 +167,7 @@ func crossLinkCalculations(
return nil, err
}
st.SetValidators(newValidatorSet)
crossLinkRecords = UpdateCrosslinks(slot, voteBalance, totalBalance, attestation, crossLinkRecords)
crossLinkRecords = UpdateLatestCrosslinks(slot, voteBalance, totalBalance, attestation, crossLinkRecords)
}
return crossLinkRecords, nil
}

View File

@@ -137,7 +137,7 @@ func TestNextDeriveSlot(t *testing.T) {
}
}
func TestProcessCrosslinks(t *testing.T) {
func TestProcessLatestCrosslinks(t *testing.T) {
// Set up crosslink record for every shard.
var clRecords []*pb.CrosslinkRecord
for i := uint64(0); i < params.BeaconConfig().ShardCount; i++ {
@@ -176,20 +176,20 @@ func TestProcessCrosslinks(t *testing.T) {
shardAndCommitteesForSlots[0].ArrayShardAndCommittee[0].Committee = committee
beaconState := types.NewBeaconState(&pb.BeaconState{
Crosslinks: clRecords,
LatestCrosslinks: clRecords,
Validators: validators,
ShardAndCommitteesForSlots: shardAndCommitteesForSlots,
})
newCrosslinks, err := crossLinkCalculations(beaconState, pAttestations, 100)
newLatestCrosslinks, err := crossLinkCalculations(beaconState, pAttestations, 100)
if err != nil {
t.Fatalf("process crosslink failed %v", err)
}
if newCrosslinks[1].Slot != params.BeaconConfig().CycleLength {
t.Errorf("Slot did not change for new cross link. Wanted: %d. Got: %d", params.BeaconConfig().CycleLength, newCrosslinks[0].Slot)
if newLatestCrosslinks[1].Slot != params.BeaconConfig().CycleLength {
t.Errorf("Slot did not change for new cross link. Wanted: %d. Got: %d", params.BeaconConfig().CycleLength, newLatestCrosslinks[0].Slot)
}
if !bytes.Equal(newCrosslinks[1].ShardBlockHash, []byte{'a'}) {
t.Errorf("ShardBlockHash did not change for new cross link. Wanted a. Got: %s", newCrosslinks[0].ShardBlockHash)
if !bytes.Equal(newLatestCrosslinks[1].ShardBlockHash, []byte{'a'}) {
t.Errorf("ShardBlockHash did not change for new cross link. Wanted a. Got: %s", newLatestCrosslinks[0].ShardBlockHash)
}
//TODO(#538) Implement tests on balances of the validators in committee once big.Int is introduced.
}

View File

@@ -59,7 +59,7 @@ func NewGenesisBeaconState(genesisValidators []*pb.ValidatorRecord) (*BeaconStat
LastJustifiedSlot: 0,
LastFinalizedSlot: 0,
ValidatorSetChangeSlot: 0,
Crosslinks: crosslinks,
LatestCrosslinks: crosslinks,
Validators: genesisValidators,
ShardAndCommitteesForSlots: shardAndCommitteesForSlots,
PendingAttestations: []*pb.AggregatedAttestation{},
@@ -72,8 +72,8 @@ func NewGenesisBeaconState(genesisValidators []*pb.ValidatorRecord) (*BeaconStat
// CopyState returns a deep copy of the current state.
func (b *BeaconState) CopyState() *BeaconState {
crosslinks := make([]*pb.CrosslinkRecord, len(b.Crosslinks()))
for index, crossLink := range b.Crosslinks() {
crosslinks := make([]*pb.CrosslinkRecord, len(b.LatestCrosslinks()))
for index, crossLink := range b.LatestCrosslinks() {
crosslinks[index] = &pb.CrosslinkRecord{
ShardBlockHash: crossLink.GetShardBlockHash(),
Slot: crossLink.GetSlot(),
@@ -111,7 +111,7 @@ func (b *BeaconState) CopyState() *BeaconState {
LastJustifiedSlot: b.LastJustifiedSlot(),
LastFinalizedSlot: b.LastFinalizedSlot(),
ValidatorSetChangeSlot: b.ValidatorSetChangeSlot(),
Crosslinks: crosslinks,
LatestCrosslinks: crosslinks,
Validators: validators,
ShardAndCommitteesForSlots: shardAndCommitteesForSlots,
DepositsPenalizedInPeriod: b.DepositsPenalizedInPeriod(),
@@ -163,7 +163,7 @@ func (b *BeaconState) IsValidatorSetChange(slotNumber uint64) bool {
}
}
crosslinks := b.Crosslinks()
crosslinks := b.LatestCrosslinks()
for shard := range shardProcessed {
if b.ValidatorSetChangeSlot() >= crosslinks[shard].Slot {
return false
@@ -183,9 +183,9 @@ func (b *BeaconState) ShardAndCommitteesForSlots() []*pb.ShardAndCommitteeArray
return b.data.ShardAndCommitteesForSlots
}
// Crosslinks returns the cross link records of the all the shards.
func (b *BeaconState) Crosslinks() []*pb.CrosslinkRecord {
return b.data.Crosslinks
// LatestCrosslinks returns the cross link records of the all the shards.
func (b *BeaconState) LatestCrosslinks() []*pb.CrosslinkRecord {
return b.data.LatestCrosslinks
}
// Validators returns list of validators.
@@ -333,7 +333,7 @@ func (b *BeaconState) CalculateNewBlockHashes(block *Block, parentSlot uint64) (
// SetCrossLinks updates the inner proto's cross link records.
func (b *BeaconState) SetCrossLinks(crossLinks []*pb.CrosslinkRecord) {
b.data.Crosslinks = crossLinks
b.data.LatestCrosslinks = crossLinks
}
// SetDepositsPenalizedInPeriod updates the inner proto's penalized deposits.

View File

@@ -45,7 +45,7 @@ func (x ValidatorRecord_ValiatorStateCode) String() string {
return proto.EnumName(ValidatorRecord_ValiatorStateCode_name, int32(x))
}
func (ValidatorRecord_ValiatorStateCode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_types_4792363c4c36f52f, []int{5, 0}
return fileDescriptor_types_16bed0c4f86f5b13, []int{5, 0}
}
type BeaconState struct {
@@ -73,7 +73,6 @@ type BeaconState struct {
ForkData *ForkData `protobuf:"bytes,5002,opt,name=fork_data,json=forkData,proto3" json:"fork_data,omitempty"`
Validators []*ValidatorRecord `protobuf:"bytes,10000,rep,name=validators,proto3" json:"validators,omitempty"` // Deprecated: Do not use.
ValidatorSetChangeSlot uint64 `protobuf:"varint,10001,opt,name=validator_set_change_slot,json=validatorSetChangeSlot,proto3" json:"validator_set_change_slot,omitempty"` // Deprecated: Do not use.
Crosslinks []*CrosslinkRecord `protobuf:"bytes,10002,rep,name=crosslinks,proto3" json:"crosslinks,omitempty"` // Deprecated: Do not use.
RandaoMix []byte `protobuf:"bytes,10003,opt,name=randao_mix,json=randaoMix,proto3" json:"randao_mix,omitempty"` // Deprecated: Do not use.
LastFinalizedSlot uint64 `protobuf:"varint,10005,opt,name=last_finalized_slot,json=lastFinalizedSlot,proto3" json:"last_finalized_slot,omitempty"` // Deprecated: Do not use.
LastJustifiedSlot uint64 `protobuf:"varint,10006,opt,name=last_justified_slot,json=lastJustifiedSlot,proto3" json:"last_justified_slot,omitempty"` // Deprecated: Do not use.
@@ -90,7 +89,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_4792363c4c36f52f, []int{0}
return fileDescriptor_types_16bed0c4f86f5b13, []int{0}
}
func (m *BeaconState) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BeaconState.Unmarshal(m, b)
@@ -281,14 +280,6 @@ func (m *BeaconState) GetValidatorSetChangeSlot() uint64 {
return 0
}
// Deprecated: Do not use.
func (m *BeaconState) GetCrosslinks() []*CrosslinkRecord {
if m != nil {
return m.Crosslinks
}
return nil
}
// Deprecated: Do not use.
func (m *BeaconState) GetRandaoMix() []byte {
if m != nil {
@@ -358,7 +349,7 @@ func (m *ForkData) Reset() { *m = ForkData{} }
func (m *ForkData) String() string { return proto.CompactTextString(m) }
func (*ForkData) ProtoMessage() {}
func (*ForkData) Descriptor() ([]byte, []int) {
return fileDescriptor_types_4792363c4c36f52f, []int{1}
return fileDescriptor_types_16bed0c4f86f5b13, []int{1}
}
func (m *ForkData) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ForkData.Unmarshal(m, b)
@@ -411,7 +402,7 @@ func (m *CandidatePoWReceiptRootRecord) Reset() { *m = CandidatePoWRecei
func (m *CandidatePoWReceiptRootRecord) String() string { return proto.CompactTextString(m) }
func (*CandidatePoWReceiptRootRecord) ProtoMessage() {}
func (*CandidatePoWReceiptRootRecord) Descriptor() ([]byte, []int) {
return fileDescriptor_types_4792363c4c36f52f, []int{2}
return fileDescriptor_types_16bed0c4f86f5b13, []int{2}
}
func (m *CandidatePoWReceiptRootRecord) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CandidatePoWReceiptRootRecord.Unmarshal(m, b)
@@ -459,7 +450,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_4792363c4c36f52f, []int{3}
return fileDescriptor_types_16bed0c4f86f5b13, []int{3}
}
func (m *PendingAttestationRecord) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PendingAttestationRecord.Unmarshal(m, b)
@@ -525,7 +516,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_4792363c4c36f52f, []int{4}
return fileDescriptor_types_16bed0c4f86f5b13, []int{4}
}
func (m *AttestationData) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AttestationData.Unmarshal(m, b)
@@ -620,7 +611,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_4792363c4c36f52f, []int{5}
return fileDescriptor_types_16bed0c4f86f5b13, []int{5}
}
func (m *ValidatorRecord) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidatorRecord.Unmarshal(m, b)
@@ -717,7 +708,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_4792363c4c36f52f, []int{6}
return fileDescriptor_types_16bed0c4f86f5b13, []int{6}
}
func (m *ShardReassignmentRecord) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ShardReassignmentRecord.Unmarshal(m, b)
@@ -776,7 +767,7 @@ func (m *AggregatedAttestation) Reset() { *m = AggregatedAttestation{} }
func (m *AggregatedAttestation) String() string { return proto.CompactTextString(m) }
func (*AggregatedAttestation) ProtoMessage() {}
func (*AggregatedAttestation) Descriptor() ([]byte, []int) {
return fileDescriptor_types_4792363c4c36f52f, []int{7}
return fileDescriptor_types_16bed0c4f86f5b13, []int{7}
}
func (m *AggregatedAttestation) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AggregatedAttestation.Unmarshal(m, b)
@@ -872,7 +863,7 @@ func (m *SpecialRecord) Reset() { *m = SpecialRecord{} }
func (m *SpecialRecord) String() string { return proto.CompactTextString(m) }
func (*SpecialRecord) ProtoMessage() {}
func (*SpecialRecord) Descriptor() ([]byte, []int) {
return fileDescriptor_types_4792363c4c36f52f, []int{8}
return fileDescriptor_types_16bed0c4f86f5b13, []int{8}
}
func (m *SpecialRecord) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SpecialRecord.Unmarshal(m, b)
@@ -918,7 +909,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_4792363c4c36f52f, []int{9}
return fileDescriptor_types_16bed0c4f86f5b13, []int{9}
}
func (m *CrosslinkRecord) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CrosslinkRecord.Unmarshal(m, b)
@@ -963,7 +954,7 @@ func (m *ShardAndCommitteeArray) Reset() { *m = ShardAndCommitteeArray{}
func (m *ShardAndCommitteeArray) String() string { return proto.CompactTextString(m) }
func (*ShardAndCommitteeArray) ProtoMessage() {}
func (*ShardAndCommitteeArray) Descriptor() ([]byte, []int) {
return fileDescriptor_types_4792363c4c36f52f, []int{10}
return fileDescriptor_types_16bed0c4f86f5b13, []int{10}
}
func (m *ShardAndCommitteeArray) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ShardAndCommitteeArray.Unmarshal(m, b)
@@ -1002,7 +993,7 @@ func (m *ShardAndCommittee) Reset() { *m = ShardAndCommittee{} }
func (m *ShardAndCommittee) String() string { return proto.CompactTextString(m) }
func (*ShardAndCommittee) ProtoMessage() {}
func (*ShardAndCommittee) Descriptor() ([]byte, []int) {
return fileDescriptor_types_4792363c4c36f52f, []int{11}
return fileDescriptor_types_16bed0c4f86f5b13, []int{11}
}
func (m *ShardAndCommittee) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ShardAndCommittee.Unmarshal(m, b)
@@ -1059,7 +1050,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_4792363c4c36f52f, []int{12}
return fileDescriptor_types_16bed0c4f86f5b13, []int{12}
}
func (m *BeaconBlock) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BeaconBlock.Unmarshal(m, b)
@@ -1194,134 +1185,133 @@ func init() {
}
func init() {
proto.RegisterFile("proto/beacon/p2p/v1/types.proto", fileDescriptor_types_4792363c4c36f52f)
proto.RegisterFile("proto/beacon/p2p/v1/types.proto", fileDescriptor_types_16bed0c4f86f5b13)
}
var fileDescriptor_types_4792363c4c36f52f = []byte{
// 1992 bytes of a gzipped FileDescriptorProto
var fileDescriptor_types_16bed0c4f86f5b13 = []byte{
// 1977 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0x4b, 0x73, 0x1b, 0xc7,
0xf1, 0xff, 0x83, 0x84, 0xf8, 0x68, 0x82, 0x04, 0x30, 0x24, 0xc1, 0x15, 0x65, 0x5a, 0x12, 0xfc,
0xf1, 0xff, 0x83, 0x84, 0xf8, 0x68, 0x82, 0x04, 0x30, 0x24, 0xc1, 0x15, 0x65, 0x5a, 0x14, 0xfc,
0x77, 0x44, 0x3a, 0x32, 0x68, 0x51, 0xb1, 0x65, 0x57, 0x2a, 0xae, 0x22, 0xa9, 0x28, 0x52, 0x4a,
0x51, 0x58, 0x0b, 0x59, 0xae, 0xca, 0x65, 0x6b, 0xb0, 0x3b, 0x00, 0xc7, 0x5c, 0xee, 0x6c, 0x76,
0x06, 0x7c, 0xa4, 0x2a, 0xce, 0x39, 0x39, 0xe5, 0x51, 0x89, 0x93, 0xa3, 0xfd, 0x11, 0x72, 0xcb,
0xeb, 0x43, 0xe4, 0x71, 0xce, 0x21, 0xb7, 0xc8, 0x76, 0x3e, 0x43, 0x6a, 0x7a, 0x66, 0x5f, 0x78,
0xa8, 0xe4, 0x9c, 0x80, 0x9d, 0xfe, 0xf5, 0x4c, 0x6f, 0x77, 0xff, 0xba, 0x7b, 0x16, 0xae, 0xc7,
0x89, 0x50, 0x62, 0xb7, 0xc7, 0xa8, 0x2f, 0xa2, 0xdd, 0x78, 0x2f, 0xde, 0x3d, 0xbb, 0xb3, 0xab,
0x2e, 0x63, 0x26, 0x3b, 0x28, 0x21, 0x2d, 0xa6, 0x8e, 0x59, 0xc2, 0x86, 0xa7, 0x1d, 0x83, 0xe9,
0xc4, 0x7b, 0x71, 0xe7, 0xec, 0xce, 0xe6, 0xf5, 0x81, 0x10, 0x83, 0x90, 0xed, 0x22, 0xaa, 0x37,
0xec, 0xef, 0x2a, 0x7e, 0xca, 0xa4, 0xa2, 0xa7, 0xb1, 0x51, 0x6c, 0xff, 0xbe, 0x09, 0x4b, 0x07,
0xa8, 0xd2, 0x55, 0x54, 0x31, 0xf2, 0x0c, 0xc8, 0x19, 0x0d, 0x79, 0x40, 0x95, 0x48, 0xbc, 0x84,
0x0d, 0xb8, 0x54, 0xc9, 0xa5, 0x53, 0xb9, 0x31, 0xbb, 0xbd, 0xb4, 0x77, 0xab, 0x33, 0xf9, 0x94,
0xce, 0xb3, 0x54, 0xc3, 0x65, 0xbe, 0x48, 0x02, 0xb7, 0x79, 0x96, 0x2f, 0x98, 0x1d, 0xc8, 0x63,
0x78, 0x6d, 0x7c, 0x5f, 0x2f, 0xa4, 0x52, 0x79, 0xfe, 0x31, 0x8d, 0x06, 0xcc, 0x93, 0xa1, 0x50,
0xce, 0xcc, 0x8d, 0xca, 0x76, 0xd5, 0xbd, 0x3e, 0xa6, 0xff, 0x98, 0x4a, 0x75, 0x88, 0xb8, 0x6e,
0x28, 0x14, 0xd9, 0x87, 0xad, 0x09, 0xbb, 0xb1, 0x0b, 0xae, 0x3c, 0x5f, 0x0c, 0x23, 0xe5, 0xcc,
0xe2, 0x3e, 0x9b, 0x63, 0xfb, 0x7c, 0xfb, 0x82, 0xab, 0x43, 0x8d, 0x20, 0x1f, 0xc2, 0xce, 0x84,
0x2d, 0x02, 0x16, 0x2a, 0xaa, 0x2d, 0xe2, 0x91, 0xa7, 0x78, 0xec, 0x1d, 0x53, 0x79, 0x7c, 0x77,
0xcf, 0xa9, 0xde, 0xa8, 0x6c, 0xd7, 0xdc, 0xff, 0x1f, 0xdb, 0xee, 0xbe, 0x86, 0x1f, 0x6a, 0xf4,
0x53, 0x1e, 0x3f, 0x44, 0x2c, 0xf9, 0x3a, 0x34, 0x13, 0x1a, 0x05, 0x54, 0x78, 0xa7, 0xfc, 0x22,
0xdd, 0xe0, 0xdf, 0xf3, 0xb8, 0x43, 0xdd, 0x48, 0xbe, 0xc7, 0x2f, 0x2c, 0x78, 0x07, 0x1a, 0x11,
0xbb, 0x50, 0x9e, 0x64, 0x2c, 0x48, 0xb1, 0xcf, 0x0d, 0x76, 0x45, 0x0b, 0xba, 0x8c, 0x05, 0x16,
0x2a, 0xe1, 0x55, 0x79, 0x4c, 0x93, 0xc0, 0xa3, 0x51, 0xe0, 0xf9, 0xe2, 0xf4, 0x94, 0x2b, 0xc5,
0x98, 0xf4, 0xfa, 0x22, 0x41, 0xdf, 0x49, 0xe7, 0xf3, 0x79, 0x0c, 0x53, 0x67, 0x5a, 0x98, 0xba,
0x5a, 0x7d, 0x3f, 0x0a, 0x0e, 0x53, 0xe5, 0xfd, 0x24, 0xa1, 0x97, 0xee, 0xa6, 0x1c, 0x5d, 0x97,
0x0f, 0x44, 0xa2, 0xfd, 0x2c, 0xc9, 0xbb, 0xb0, 0x1e, 0xb3, 0x44, 0x72, 0xa9, 0x58, 0xa4, 0x0a,
0xa7, 0x3a, 0x5f, 0xe8, 0xb3, 0x96, 0x0f, 0x66, 0x9c, 0x8a, 0xbb, 0x96, 0x23, 0xf2, 0x1d, 0xc8,
0xc7, 0xd0, 0x9e, 0xa4, 0xe9, 0x25, 0x8c, 0x4a, 0xc9, 0x07, 0xd1, 0x29, 0x8b, 0x94, 0x74, 0xbe,
0x34, 0x26, 0xef, 0xbe, 0xd0, 0x64, 0xb7, 0xa0, 0x62, 0x33, 0xec, 0xc6, 0x84, 0x33, 0x8b, 0x30,
0x49, 0xee, 0xc1, 0x46, 0x9c, 0xb0, 0x33, 0x2e, 0x86, 0xd2, 0xfb, 0x68, 0x28, 0x15, 0xef, 0x73,
0x16, 0x98, 0x24, 0xfb, 0x6b, 0x1d, 0xb3, 0x63, 0x3d, 0x95, 0x7f, 0x37, 0x15, 0x63, 0x6e, 0x7d,
0x0d, 0x56, 0x46, 0xf0, 0x7f, 0x33, 0xf8, 0xe5, 0x8f, 0x4a, 0xb8, 0x7b, 0xb0, 0x51, 0xc6, 0x79,
0x3d, 0xae, 0xfa, 0x9c, 0x85, 0x81, 0xf3, 0x77, 0x7b, 0x40, 0x49, 0xe1, 0xc0, 0x4a, 0xf5, 0x01,
0x7d, 0x1e, 0xd1, 0x90, 0xff, 0x28, 0x3d, 0xe0, 0x1f, 0xf6, 0x80, 0x6c, 0x19, 0x0f, 0xf8, 0x00,
0x9a, 0x21, 0x55, 0x4c, 0x33, 0x24, 0x11, 0x52, 0x86, 0x3c, 0x3a, 0x91, 0xce, 0x1f, 0x36, 0x5e,
0x4c, 0xc5, 0xc3, 0x14, 0x6a, 0x1d, 0xd5, 0x30, 0x5b, 0x64, 0xcb, 0x92, 0x1c, 0xc0, 0x16, 0xd2,
0x4e, 0x6a, 0xbe, 0x7b, 0x09, 0xf3, 0x69, 0xe8, 0x0f, 0x43, 0xaa, 0xb8, 0x88, 0x8c, 0x35, 0x7f,
0xdc, 0x30, 0xe4, 0xd1, 0x28, 0x2c, 0x0a, 0x6e, 0x11, 0x83, 0xa6, 0xdd, 0x81, 0x35, 0x6b, 0x5a,
0x2f, 0x14, 0xfe, 0x89, 0xcd, 0x5c, 0xe9, 0xfc, 0x49, 0x5b, 0x57, 0x73, 0x89, 0x11, 0x1e, 0x68,
0x99, 0xc9, 0x5e, 0x49, 0xee, 0xc3, 0xab, 0x56, 0x25, 0x66, 0xe9, 0xcb, 0x23, 0x61, 0x7b, 0x34,
0xa4, 0x91, 0xcf, 0xa4, 0xf3, 0x67, 0xad, 0x5c, 0x75, 0xaf, 0x19, 0xd8, 0x51, 0x8a, 0xd2, 0x94,
0x3d, 0xb0, 0x18, 0xd2, 0x83, 0x55, 0xbb, 0x0b, 0x55, 0xfa, 0x07, 0x4d, 0x92, 0xce, 0x5f, 0x8c,
0x57, 0xde, 0x9a, 0xe6, 0x95, 0x23, 0x16, 0x05, 0x3c, 0x1a, 0xec, 0xe7, 0x3a, 0xd6, 0x3d, 0xd6,
0xd2, 0x82, 0x40, 0x92, 0x47, 0x70, 0x33, 0x4e, 0x84, 0xcf, 0xa4, 0x64, 0x81, 0x17, 0x8b, 0x73,
0xed, 0x23, 0xc6, 0x63, 0xe5, 0x25, 0x42, 0xa8, 0x94, 0xa4, 0x9f, 0x5e, 0xc7, 0x37, 0xdd, 0xca,
0x90, 0x47, 0xe2, 0xdc, 0x35, 0x38, 0x57, 0x08, 0x65, 0x39, 0x3b, 0x84, 0x6b, 0x3e, 0x8d, 0x02,
0x5d, 0x34, 0xd8, 0xd8, 0x56, 0xd2, 0xf9, 0xec, 0x3a, 0x9a, 0xfd, 0xf6, 0xd4, 0x60, 0xa6, 0xba,
0x47, 0xe2, 0xc3, 0xc2, 0xe6, 0xd6, 0x76, 0xc7, 0xcf, 0xc5, 0xc5, 0xb3, 0x25, 0x69, 0x43, 0x6d,
0xc0, 0x22, 0x26, 0xb9, 0xf4, 0x74, 0xbd, 0x77, 0x7e, 0x7a, 0x0b, 0x23, 0xba, 0x64, 0x17, 0x9f,
0xf2, 0x53, 0x46, 0xde, 0x87, 0xc5, 0xbe, 0x48, 0x4e, 0xbc, 0x80, 0x2a, 0xea, 0xfc, 0x4c, 0x03,
0x96, 0xf6, 0x6e, 0x4c, 0x33, 0xe4, 0x81, 0x48, 0x4e, 0xee, 0x53, 0x45, 0xdd, 0x85, 0xbe, 0xfd,
0x47, 0x1e, 0x03, 0x64, 0xe5, 0x50, 0x3a, 0x3f, 0x7f, 0xf2, 0x95, 0x3a, 0x04, 0xd6, 0x8d, 0x82,
0x3e, 0x79, 0x1f, 0xae, 0xe6, 0xd5, 0x58, 0xb2, 0x72, 0x53, 0xf8, 0xc5, 0x13, 0x6d, 0x3e, 0xea,
0xb4, 0x32, 0x54, 0x97, 0x15, 0x1b, 0xc2, 0x63, 0x80, 0x02, 0x49, 0x7e, 0xf9, 0xe4, 0x2b, 0x91,
0xc4, 0x58, 0x93, 0xeb, 0x93, 0x36, 0x40, 0x5e, 0xc2, 0x9d, 0x5f, 0xe9, 0xe3, 0x6b, 0x08, 0x5a,
0xcc, 0xea, 0x37, 0xb9, 0xab, 0x33, 0x51, 0x2a, 0x6f, 0x84, 0xca, 0xbf, 0xce, 0x6d, 0x6d, 0x6a,
0xf9, 0x83, 0x12, 0xa5, 0x53, 0xa5, 0x91, 0x02, 0xf3, 0x9b, 0x11, 0xa5, 0x72, 0x41, 0xea, 0x40,
0xa3, 0x80, 0x57, 0x09, 0xa3, 0x27, 0xce, 0x27, 0xb9, 0x46, 0x3d, 0xaf, 0x32, 0x28, 0xd3, 0x87,
0x98, 0x9e, 0x72, 0x3c, 0xec, 0xf7, 0x43, 0x1e, 0x0d, 0xb0, 0xbb, 0x38, 0xbf, 0xcd, 0x5f, 0xa3,
0x89, 0xad, 0x25, 0x15, 0xeb, 0x1e, 0x43, 0xee, 0xc3, 0x2b, 0x01, 0x8b, 0x85, 0xe4, 0x4a, 0x16,
0x08, 0xca, 0x23, 0x2f, 0x66, 0x09, 0x17, 0x81, 0xf3, 0x3b, 0xed, 0x52, 0x73, 0xe0, 0xd5, 0x14,
0x98, 0x51, 0xf4, 0x51, 0x74, 0x84, 0x28, 0xc2, 0x60, 0x2d, 0x36, 0x54, 0x2b, 0xf3, 0xf3, 0x33,
0x13, 0x90, 0x37, 0xa7, 0x05, 0x64, 0x7f, 0x30, 0x48, 0xd8, 0x80, 0x2a, 0x16, 0x14, 0x98, 0x88,
0x87, 0xad, 0xc6, 0x63, 0xd4, 0x95, 0xed, 0x1f, 0xc3, 0x42, 0x9a, 0x91, 0x64, 0x1b, 0x1a, 0x71,
0xc2, 0x3c, 0xcc, 0xe5, 0x33, 0xdd, 0x14, 0x44, 0xe4, 0x54, 0x30, 0xdd, 0x57, 0xe2, 0x84, 0x69,
0xd8, 0x33, 0xb3, 0x4a, 0xde, 0x80, 0x66, 0x2c, 0x74, 0xc4, 0x8a, 0x50, 0x33, 0x70, 0xd4, 0xb5,
0xa0, 0x88, 0xbd, 0x66, 0xd9, 0x81, 0xe1, 0x31, 0xc3, 0x04, 0xa6, 0xbe, 0x0e, 0x48, 0xfb, 0x27,
0xb0, 0xf5, 0x42, 0x66, 0x92, 0x87, 0x70, 0x73, 0x3a, 0xed, 0xd3, 0x0a, 0x52, 0xc1, 0x2e, 0xbf,
0x35, 0x85, 0xc4, 0xb6, 0x80, 0xac, 0xc1, 0x95, 0x33, 0xa1, 0x98, 0xb4, 0x76, 0x9a, 0x87, 0xf6,
0x3f, 0x2b, 0xe0, 0x4c, 0x2b, 0x69, 0xe4, 0x9b, 0x50, 0x45, 0x4e, 0x57, 0x90, 0xd2, 0x53, 0x39,
0x50, 0x50, 0x44, 0x66, 0xa3, 0x12, 0x79, 0x1b, 0x5a, 0x31, 0x4d, 0x14, 0xf7, 0x79, 0x6c, 0x3a,
0x42, 0xd6, 0xd3, 0x66, 0xd0, 0xdc, 0xf5, 0x92, 0x34, 0x6b, 0x69, 0x3b, 0xd0, 0xf0, 0x87, 0x52,
0x89, 0xe0, 0x32, 0x57, 0x98, 0x35, 0x13, 0x8f, 0x5d, 0xcf, 0xa0, 0xaf, 0xc1, 0x32, 0x36, 0x4b,
0x1e, 0xf9, 0xe1, 0x30, 0x60, 0x01, 0xce, 0x56, 0x55, 0xb7, 0xa6, 0x17, 0x1f, 0xd9, 0xb5, 0xf6,
0xbf, 0x66, 0xa0, 0x3e, 0x62, 0x20, 0x21, 0x50, 0xc5, 0x68, 0x98, 0xe0, 0xe2, 0x7f, 0xed, 0x1e,
0x1c, 0x5e, 0x52, 0xf7, 0xe0, 0x03, 0xe9, 0xc0, 0xaa, 0x79, 0xd7, 0x52, 0x77, 0xb2, 0x06, 0x35,
0x8d, 0xa8, 0xd0, 0x9b, 0xc8, 0x1e, 0xac, 0xb3, 0x58, 0xf8, 0xc7, 0x5e, 0x4f, 0x0c, 0xa3, 0x80,
0x26, 0x97, 0xe5, 0xb1, 0x6f, 0x15, 0x85, 0x07, 0x56, 0x66, 0x75, 0x6e, 0x03, 0x31, 0xd3, 0x58,
0xe9, 0x88, 0x2b, 0xa8, 0xd0, 0x40, 0x49, 0xf1, 0x84, 0x77, 0x60, 0x63, 0xb4, 0x95, 0xa7, 0x2a,
0x73, 0xc6, 0xaf, 0x23, 0x6d, 0xda, 0xea, 0xbd, 0x3e, 0x36, 0x8b, 0xcc, 0x4f, 0x1a, 0x45, 0xbe,
0x01, 0xad, 0x1c, 0x56, 0x32, 0x68, 0x01, 0x77, 0x5f, 0xcb, 0xa4, 0x05, 0xa3, 0xda, 0x9f, 0x54,
0xa1, 0x3e, 0x52, 0x97, 0x49, 0x0b, 0xe6, 0xe2, 0x61, 0xef, 0x84, 0x5d, 0xda, 0xf4, 0xb4, 0x4f,
0x3a, 0x2f, 0xce, 0xb9, 0x3a, 0x0e, 0x12, 0x7a, 0x4e, 0x43, 0xcf, 0x4f, 0x58, 0xc0, 0x22, 0xc5,
0x69, 0x28, 0xd3, 0xbc, 0xc8, 0xa5, 0x87, 0xb9, 0x90, 0xbc, 0x0b, 0x8e, 0x2d, 0xa4, 0x66, 0x00,
0xd4, 0xa3, 0x59, 0x39, 0x1c, 0x2d, 0x23, 0x3f, 0xcc, 0xc4, 0xf6, 0xcd, 0x6f, 0x42, 0xcd, 0x6a,
0xca, 0x13, 0x1e, 0x4b, 0x9b, 0x25, 0x4b, 0x66, 0xad, 0xab, 0x97, 0x88, 0x03, 0xf3, 0x76, 0x76,
0x40, 0xbf, 0x57, 0xdd, 0xf4, 0x91, 0xfc, 0x00, 0x96, 0x74, 0xe6, 0x0c, 0xa5, 0xe7, 0x8b, 0x80,
0xa1, 0x8b, 0x57, 0xf6, 0xde, 0x7b, 0xc9, 0xde, 0x84, 0xcf, 0xd8, 0x61, 0xf4, 0xec, 0x73, 0x28,
0x02, 0xe6, 0x82, 0xd9, 0x4d, 0xff, 0x27, 0xef, 0xc1, 0x55, 0x1b, 0xca, 0xf4, 0x88, 0x42, 0xa7,
0x32, 0xd1, 0x69, 0x19, 0x40, 0xd7, 0x28, 0xe5, 0x4d, 0x6a, 0x0b, 0xa0, 0x70, 0x45, 0x59, 0x40,
0xec, 0x22, 0xcb, 0x6e, 0x24, 0x9b, 0x30, 0x67, 0xb6, 0x74, 0x16, 0xb3, 0xe2, 0x6e, 0x57, 0xda,
0x21, 0x34, 0xc7, 0xcc, 0x22, 0x2d, 0x20, 0x59, 0xb5, 0xf5, 0x15, 0x3f, 0x43, 0xae, 0x34, 0xfe,
0x8f, 0x00, 0xcc, 0xe1, 0x33, 0x6b, 0x54, 0xc8, 0x26, 0xb4, 0xf4, 0x09, 0x2c, 0xf0, 0x74, 0x84,
0xc4, 0xd0, 0x8e, 0x5f, 0xea, 0xb2, 0x31, 0x43, 0x36, 0x60, 0xb5, 0x20, 0xcb, 0x04, 0xb3, 0xed,
0x10, 0x36, 0xa6, 0x0c, 0xde, 0xe4, 0x16, 0xd4, 0xf3, 0x46, 0xcd, 0xa3, 0x80, 0x5d, 0x60, 0xa6,
0x2c, 0xbb, 0x2b, 0xd9, 0xf2, 0x23, 0xbd, 0x3a, 0x85, 0x9a, 0x29, 0x89, 0x67, 0x73, 0x12, 0xb7,
0x9f, 0xcf, 0xc0, 0xfa, 0xc4, 0x06, 0x40, 0x5a, 0x45, 0xca, 0xa3, 0x3f, 0x0c, 0xed, 0x9d, 0xd2,
0xde, 0x28, 0xb0, 0xfb, 0xef, 0x8c, 0x11, 0x66, 0x36, 0x83, 0x8c, 0x91, 0x66, 0x6d, 0x12, 0x69,
0x0c, 0xe9, 0x51, 0x81, 0x8c, 0xd3, 0x86, 0xdc, 0x86, 0xc6, 0x28, 0xef, 0x0d, 0xeb, 0x51, 0x63,
0xa5, 0xcc, 0x7c, 0xb2, 0x0b, 0x4d, 0xd3, 0x07, 0x59, 0x92, 0x17, 0xc6, 0xb9, 0x0c, 0xde, 0x48,
0x85, 0x59, 0x75, 0x7c, 0x07, 0xd6, 0x45, 0x2f, 0xe4, 0x3f, 0x1c, 0x32, 0x2f, 0xa6, 0x49, 0xca,
0x16, 0x26, 0x1d, 0x7d, 0x4f, 0x32, 0x4a, 0xab, 0x16, 0x70, 0x84, 0xf2, 0x87, 0x28, 0x26, 0xb7,
0x60, 0x99, 0xa6, 0x2e, 0xf4, 0x24, 0x1f, 0x38, 0x0b, 0x59, 0xbb, 0xae, 0x65, 0x82, 0x2e, 0x1f,
0xb4, 0xef, 0xc1, 0x72, 0x37, 0x66, 0x3e, 0xa7, 0xa1, 0x0d, 0x28, 0x81, 0xea, 0x09, 0x8f, 0x02,
0x1b, 0x45, 0xfc, 0xaf, 0xd7, 0xb0, 0x85, 0xcc, 0xe0, 0x8c, 0x8b, 0xff, 0xdb, 0xdf, 0x87, 0xfa,
0xc8, 0xd8, 0xa4, 0x5b, 0xef, 0x98, 0x2f, 0x4c, 0xd9, 0x18, 0xf5, 0x43, 0x1a, 0xf6, 0x99, 0x42,
0xd8, 0x3f, 0x86, 0xd6, 0xe4, 0x0b, 0x29, 0x09, 0xe0, 0x2a, 0xd5, 0x7f, 0xbc, 0x09, 0xf7, 0x5d,
0xfb, 0x29, 0x62, 0xe7, 0xa5, 0xef, 0xb8, 0x6e, 0x0b, 0xf7, 0x1a, 0x5b, 0x6f, 0x7f, 0x07, 0x9a,
0x63, 0x8b, 0x79, 0xd6, 0x56, 0x8a, 0x59, 0xfb, 0x0a, 0x2c, 0xe6, 0x06, 0x68, 0xa7, 0x2c, 0xbb,
0xf9, 0x42, 0xfb, 0xd3, 0x2b, 0xe9, 0x27, 0x14, 0x7c, 0xe1, 0x89, 0x8d, 0xea, 0x2d, 0x58, 0xb3,
0xe5, 0x2c, 0x61, 0x67, 0x8c, 0x86, 0x69, 0x11, 0x34, 0xd5, 0x93, 0x18, 0x99, 0x8b, 0x22, 0x5b,
0x00, 0x5f, 0x6a, 0x86, 0x98, 0x7d, 0x99, 0x19, 0x62, 0x07, 0x1a, 0x78, 0x79, 0xd2, 0x8c, 0x4d,
0x2f, 0x6a, 0x55, 0x8c, 0x6c, 0x3d, 0x5d, 0x4f, 0x2f, 0x69, 0x6f, 0x40, 0xd3, 0x5e, 0x0b, 0x0b,
0x87, 0x98, 0xa6, 0x56, 0x47, 0x41, 0x61, 0xdb, 0x0f, 0xa0, 0x56, 0x9a, 0xf1, 0xe6, 0xfe, 0xd7,
0x11, 0xaf, 0xb4, 0x0d, 0xd9, 0x87, 0x05, 0x69, 0x12, 0xd4, 0x24, 0xfd, 0xd2, 0xde, 0xeb, 0x53,
0x63, 0x5d, 0x4c, 0x64, 0x37, 0x53, 0x23, 0x6f, 0x02, 0x89, 0x13, 0x11, 0x0b, 0xc9, 0x12, 0xcd,
0x85, 0x88, 0xaa, 0x61, 0xc2, 0x90, 0x11, 0x35, 0xb7, 0x99, 0x4a, 0xba, 0xa9, 0x80, 0xdc, 0x86,
0x7a, 0xc9, 0x3f, 0x4c, 0x3a, 0xcf, 0x73, 0xba, 0xad, 0x14, 0x7d, 0xc4, 0x24, 0xd9, 0x86, 0xe5,
0x52, 0x24, 0x9d, 0xcf, 0xe7, 0x33, 0x3e, 0xd7, 0x8a, 0x71, 0xd4, 0x9c, 0xd4, 0x71, 0x33, 0x1f,
0x93, 0x12, 0xd6, 0x77, 0xbe, 0xc8, 0x91, 0x4b, 0xb1, 0x38, 0xc7, 0xef, 0x46, 0x2e, 0xeb, 0xeb,
0xeb, 0x46, 0xee, 0x75, 0xe7, 0xcb, 0x1c, 0xb5, 0x98, 0xf9, 0x9c, 0x7c, 0x0b, 0x16, 0xb3, 0x4f,
0x77, 0xce, 0x7f, 0xe6, 0x71, 0xb6, 0xdb, 0xec, 0x98, 0xaf, 0x7b, 0x9d, 0xf4, 0xeb, 0x5e, 0xe7,
0x69, 0x0a, 0x31, 0xea, 0x99, 0x46, 0x6f, 0x0e, 0x21, 0x77, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff,
0xd7, 0xa2, 0x66, 0xb1, 0x49, 0x14, 0x00, 0x00,
0x71, 0x58, 0x0b, 0x59, 0xae, 0xca, 0x65, 0x6b, 0xb0, 0x3b, 0x00, 0xc7, 0x5c, 0xee, 0x6c, 0x76,
0x06, 0x7c, 0xa4, 0x2a, 0xce, 0x39, 0x39, 0x25, 0x95, 0x4a, 0x9c, 0x1c, 0xed, 0x6f, 0x91, 0xd7,
0x87, 0xc8, 0xe3, 0x9c, 0x43, 0x2a, 0x97, 0xc8, 0x76, 0x3e, 0x43, 0x6a, 0x7a, 0x66, 0x5f, 0x78,
0xa8, 0x94, 0x9c, 0x80, 0x9d, 0xfe, 0x75, 0x4f, 0x6f, 0x77, 0xff, 0xba, 0x67, 0x16, 0x6e, 0xc6,
0x89, 0x50, 0x62, 0xaf, 0xc7, 0xa8, 0x2f, 0xa2, 0xbd, 0x78, 0x3f, 0xde, 0x3b, 0xbf, 0xbb, 0xa7,
0xae, 0x62, 0x26, 0x3b, 0x28, 0x21, 0x2d, 0xa6, 0x4e, 0x58, 0xc2, 0x86, 0x67, 0x1d, 0x83, 0xe9,
0xc4, 0xfb, 0x71, 0xe7, 0xfc, 0xee, 0xe6, 0xcd, 0x81, 0x10, 0x83, 0x90, 0xed, 0x21, 0xaa, 0x37,
0xec, 0xef, 0x29, 0x7e, 0xc6, 0xa4, 0xa2, 0x67, 0xb1, 0x51, 0x6c, 0xff, 0xb3, 0x01, 0x4b, 0x87,
0xa8, 0xd2, 0x55, 0x54, 0x31, 0xf2, 0x0c, 0xc8, 0x39, 0x0d, 0x79, 0x40, 0x95, 0x48, 0xbc, 0x84,
0x0d, 0xb8, 0x54, 0xc9, 0x95, 0x53, 0xd9, 0x9e, 0xdd, 0x59, 0xda, 0xbf, 0xdd, 0x99, 0xbc, 0x4b,
0xe7, 0x59, 0xaa, 0xe1, 0x32, 0x5f, 0x24, 0x81, 0xdb, 0x3c, 0xcf, 0x17, 0x8c, 0x05, 0xf2, 0x04,
0x5e, 0x1b, 0xb7, 0xeb, 0x85, 0x54, 0x2a, 0xcf, 0x3f, 0xa1, 0xd1, 0x80, 0x79, 0x32, 0x14, 0xca,
0x99, 0xd9, 0xae, 0xec, 0x54, 0xdd, 0x9b, 0x63, 0xfa, 0x4f, 0xa8, 0x54, 0x47, 0x88, 0xeb, 0x86,
0x42, 0x91, 0x03, 0xd8, 0x9a, 0x60, 0x8d, 0x5d, 0x72, 0xe5, 0xf9, 0x62, 0x18, 0x29, 0x67, 0x16,
0xed, 0x6c, 0x8e, 0xd9, 0xf9, 0xf6, 0x25, 0x57, 0x47, 0x1a, 0x41, 0x3e, 0x82, 0xdd, 0x09, 0x26,
0x02, 0x16, 0x2a, 0xaa, 0x3d, 0xe2, 0x91, 0xa7, 0x78, 0xec, 0x9d, 0x50, 0x79, 0x72, 0x6f, 0xdf,
0xa9, 0x6e, 0x57, 0x76, 0x6a, 0xee, 0xff, 0x8f, 0x99, 0x7b, 0xa0, 0xe1, 0x47, 0x1a, 0xfd, 0x94,
0xc7, 0x8f, 0x10, 0x4b, 0xbe, 0x0e, 0xcd, 0x84, 0x46, 0x01, 0x15, 0xde, 0x19, 0xbf, 0x4c, 0x0d,
0xfc, 0x6b, 0x1e, 0x2d, 0xd4, 0x8d, 0xe4, 0x7b, 0xfc, 0xd2, 0x82, 0x77, 0xa1, 0x11, 0xb1, 0x4b,
0xe5, 0x49, 0xc6, 0x82, 0x14, 0xfb, 0xdc, 0x60, 0x57, 0xb4, 0xa0, 0xcb, 0x58, 0x60, 0xa1, 0x12,
0x5e, 0x95, 0x27, 0x34, 0x09, 0x3c, 0x1a, 0x05, 0x9e, 0x2f, 0xce, 0xce, 0xb8, 0x52, 0x8c, 0x49,
0xaf, 0x2f, 0x12, 0x8c, 0x9d, 0x74, 0xbe, 0x98, 0xc7, 0x34, 0x75, 0xa6, 0xa5, 0xa9, 0xab, 0xd5,
0x0f, 0xa2, 0xe0, 0x28, 0x55, 0x3e, 0x48, 0x12, 0x7a, 0xe5, 0x6e, 0xca, 0xd1, 0x75, 0xf9, 0x50,
0x24, 0x3a, 0xce, 0x92, 0xbc, 0x0b, 0xeb, 0x31, 0x4b, 0x24, 0x97, 0x8a, 0x45, 0xaa, 0xb0, 0xab,
0xf3, 0xa5, 0xde, 0x6b, 0xf9, 0x70, 0xc6, 0xa9, 0xb8, 0x6b, 0x39, 0x22, 0xb7, 0x40, 0x3e, 0x81,
0xf6, 0x24, 0x4d, 0x2f, 0x61, 0x54, 0x4a, 0x3e, 0x88, 0xce, 0x58, 0xa4, 0xa4, 0xf3, 0x95, 0x71,
0x79, 0xef, 0x85, 0x2e, 0xbb, 0x05, 0x15, 0x5b, 0x61, 0xdb, 0x13, 0xf6, 0x2c, 0xc2, 0x24, 0xb9,
0x0f, 0x1b, 0x71, 0xc2, 0xce, 0xb9, 0x18, 0x4a, 0xef, 0xe3, 0xa1, 0x54, 0xbc, 0xcf, 0x59, 0x60,
0x8a, 0xec, 0xcf, 0x75, 0xac, 0x8e, 0xf5, 0x54, 0xfe, 0xdd, 0x54, 0x8c, 0xb5, 0xf5, 0x35, 0x58,
0x19, 0xc1, 0xff, 0xc5, 0xe0, 0x97, 0x3f, 0x2e, 0xe1, 0xee, 0xc3, 0x46, 0x19, 0xe7, 0xf5, 0xb8,
0xea, 0x73, 0x16, 0x06, 0xce, 0x5f, 0xed, 0x06, 0x25, 0x85, 0x43, 0x2b, 0xd5, 0x1b, 0xf4, 0x79,
0x44, 0x43, 0xfe, 0xa3, 0x74, 0x83, 0xbf, 0xd9, 0x0d, 0xb2, 0x65, 0xdc, 0xe0, 0x43, 0x68, 0x86,
0x54, 0x31, 0xcd, 0x90, 0x44, 0x48, 0x19, 0xf2, 0xe8, 0x54, 0x3a, 0xbf, 0xdb, 0x78, 0x31, 0x15,
0x8f, 0x52, 0xa8, 0x0d, 0x54, 0xc3, 0x98, 0xc8, 0x96, 0x25, 0x39, 0x84, 0x2d, 0xa4, 0x9d, 0xd4,
0x7c, 0xf7, 0x12, 0xe6, 0xd3, 0xd0, 0x1f, 0x86, 0x54, 0x71, 0x11, 0x19, 0x6f, 0x7e, 0xbf, 0x61,
0xc8, 0xa3, 0x51, 0xd8, 0x14, 0xdc, 0x22, 0x06, 0x5d, 0xbb, 0x0b, 0x6b, 0xd6, 0xb5, 0x5e, 0x28,
0xfc, 0x53, 0x5b, 0xb9, 0xd2, 0xf9, 0x83, 0xf6, 0xae, 0xe6, 0x12, 0x23, 0x3c, 0xd4, 0x32, 0x53,
0xbd, 0x92, 0x3c, 0x80, 0x57, 0xad, 0x4a, 0xcc, 0xd2, 0x97, 0x47, 0xc2, 0xf6, 0x68, 0x48, 0x23,
0x9f, 0x49, 0xe7, 0x8f, 0x5a, 0xb9, 0xea, 0xde, 0x30, 0xb0, 0xe3, 0x14, 0xa5, 0x29, 0x7b, 0x68,
0x31, 0xa4, 0x07, 0xab, 0xd6, 0x0a, 0x55, 0xfa, 0x07, 0x5d, 0x92, 0xce, 0x9f, 0x4c, 0x54, 0xde,
0x9a, 0x16, 0x95, 0x63, 0x16, 0x05, 0x3c, 0x1a, 0x1c, 0xe4, 0x3a, 0x36, 0x3c, 0xd6, 0xd3, 0x82,
0x40, 0x92, 0xc7, 0x70, 0x2b, 0x4e, 0x84, 0xcf, 0xa4, 0x64, 0x81, 0x17, 0x8b, 0x0b, 0x1d, 0x23,
0xc6, 0x63, 0xe5, 0x25, 0x42, 0xa8, 0x94, 0xa4, 0x9f, 0xdd, 0xc4, 0x37, 0xdd, 0xca, 0x90, 0xc7,
0xe2, 0xc2, 0x35, 0x38, 0x57, 0x08, 0x65, 0x39, 0x3b, 0x84, 0x1b, 0x3e, 0x8d, 0x02, 0xdd, 0x34,
0xd8, 0x98, 0x29, 0xe9, 0x7c, 0x7e, 0x13, 0xdd, 0x7e, 0x7b, 0x6a, 0x32, 0x53, 0xdd, 0x63, 0xf1,
0x51, 0xc1, 0xb8, 0xf5, 0xdd, 0xf1, 0x73, 0x71, 0x71, 0x6f, 0x49, 0xda, 0x50, 0x1b, 0xb0, 0x88,
0x49, 0x2e, 0x3d, 0xdd, 0xef, 0x9d, 0x9f, 0xde, 0xc6, 0x8c, 0x2e, 0xd9, 0xc5, 0xa7, 0xfc, 0x8c,
0x91, 0xf7, 0x61, 0xb1, 0x2f, 0x92, 0x53, 0x2f, 0xa0, 0x8a, 0x3a, 0x3f, 0xd3, 0x80, 0xa5, 0xfd,
0xed, 0x69, 0x8e, 0x3c, 0x14, 0xc9, 0xe9, 0x03, 0xaa, 0xa8, 0xbb, 0xd0, 0xb7, 0xff, 0xc8, 0x13,
0x80, 0xac, 0x1d, 0x4a, 0xe7, 0xe7, 0x1f, 0xfc, 0x57, 0x13, 0x02, 0xfb, 0x46, 0x41, 0x9f, 0xbc,
0x0f, 0xd7, 0xf3, 0x6e, 0x2c, 0x59, 0x79, 0x28, 0xfc, 0xe2, 0x03, 0xed, 0x3e, 0xea, 0xb4, 0x32,
0x54, 0x97, 0x15, 0x07, 0x42, 0x1b, 0x20, 0x6f, 0xba, 0xce, 0x2f, 0xb5, 0x42, 0x0d, 0x15, 0x16,
0xb3, 0x8e, 0x4b, 0xee, 0xe9, 0xda, 0x91, 0xca, 0x1b, 0x21, 0xdf, 0xaf, 0x72, 0xeb, 0x4d, 0x2d,
0x7f, 0x58, 0x22, 0x61, 0xaa, 0x34, 0xd2, 0x12, 0x7e, 0x3d, 0xa2, 0x54, 0x6e, 0x21, 0x1d, 0x68,
0x14, 0xf0, 0x2a, 0x61, 0xf4, 0xd4, 0xf9, 0x34, 0xd7, 0xa8, 0xe7, 0x7d, 0x01, 0x65, 0x7a, 0x13,
0x33, 0x05, 0x4e, 0x86, 0xfd, 0x7e, 0xc8, 0xa3, 0x01, 0xce, 0x03, 0xe7, 0x37, 0xf9, 0x6b, 0x34,
0x71, 0x18, 0xa4, 0x62, 0x3d, 0x15, 0xc8, 0x03, 0x78, 0x25, 0x60, 0xb1, 0x90, 0x5c, 0xc9, 0x02,
0xa5, 0x78, 0xe4, 0xc5, 0x2c, 0xe1, 0x22, 0x70, 0x7e, 0xab, 0x53, 0x62, 0x36, 0xbc, 0x9e, 0x02,
0x33, 0x52, 0x3d, 0x8e, 0x8e, 0x11, 0x45, 0x18, 0xac, 0xc5, 0x86, 0x1c, 0x65, 0x46, 0x7d, 0x6e,
0x12, 0xfa, 0xe6, 0xb4, 0x84, 0x1e, 0x0c, 0x06, 0x09, 0x1b, 0x50, 0xc5, 0x82, 0x02, 0x77, 0x70,
0xb3, 0xd5, 0x78, 0x8c, 0x6c, 0xb2, 0xfd, 0x63, 0x58, 0x48, 0x6b, 0x88, 0xec, 0x40, 0x23, 0x4e,
0x98, 0x87, 0xd5, 0x77, 0xae, 0xdb, 0xb8, 0x88, 0x9c, 0x0a, 0x16, 0xe8, 0x4a, 0x9c, 0x30, 0x0d,
0x7b, 0x66, 0x56, 0xc9, 0x1b, 0xd0, 0x8c, 0x85, 0xce, 0x58, 0x11, 0x6a, 0x8e, 0x08, 0x75, 0x2d,
0x28, 0x62, 0x6f, 0xd8, 0x7a, 0xc6, 0xf4, 0x98, 0xf1, 0x8f, 0xc5, 0xaa, 0x13, 0xd2, 0xfe, 0x09,
0x6c, 0xbd, 0x90, 0x4b, 0xe4, 0x11, 0xdc, 0x9a, 0x4e, 0xd4, 0x94, 0xf3, 0x15, 0x9c, 0xcb, 0x5b,
0x53, 0x68, 0x67, 0x29, 0xbf, 0x06, 0xd7, 0xce, 0x85, 0x62, 0xd2, 0xfa, 0x69, 0x1e, 0xda, 0x7f,
0xaf, 0x80, 0x33, 0xad, 0x09, 0x91, 0x6f, 0x42, 0x15, 0x59, 0x58, 0x41, 0x12, 0x4e, 0xe5, 0x50,
0x41, 0x11, 0xb9, 0x88, 0x4a, 0xe4, 0x6d, 0x68, 0xc5, 0x34, 0x51, 0xdc, 0xe7, 0xb1, 0xe9, 0xe1,
0xd9, 0x14, 0x9a, 0x41, 0x77, 0xd7, 0x4b, 0xd2, 0x6c, 0x08, 0xed, 0x42, 0xc3, 0x1f, 0x4a, 0x25,
0x82, 0xab, 0x5c, 0x61, 0xd6, 0x9c, 0x51, 0xec, 0x7a, 0x06, 0x7d, 0x0d, 0x96, 0x71, 0xbc, 0xf1,
0xc8, 0x0f, 0x87, 0x01, 0x0b, 0xf0, 0x34, 0x54, 0x75, 0x6b, 0x7a, 0xf1, 0xb1, 0x5d, 0x6b, 0xff,
0x63, 0x06, 0xea, 0x23, 0x0e, 0x12, 0x02, 0x55, 0xcc, 0x86, 0x49, 0x2e, 0xfe, 0xd7, 0xe1, 0xc1,
0xe3, 0x46, 0x1a, 0x1e, 0x7c, 0x20, 0x1d, 0x58, 0x35, 0xef, 0x5a, 0x9a, 0x27, 0xd6, 0xa1, 0xa6,
0x11, 0x15, 0xa6, 0x09, 0xd9, 0x87, 0x75, 0x16, 0x0b, 0xff, 0xc4, 0xeb, 0x89, 0x61, 0x14, 0xd0,
0xe4, 0xaa, 0x7c, 0x50, 0x5b, 0x45, 0xe1, 0xa1, 0x95, 0x59, 0x9d, 0x3b, 0x40, 0xcc, 0xf9, 0xa9,
0xb4, 0xc5, 0x35, 0x54, 0x68, 0xa0, 0xa4, 0xb8, 0xc3, 0x3b, 0xb0, 0x31, 0x3a, 0x7c, 0x53, 0x95,
0x39, 0x13, 0xd7, 0x91, 0xc1, 0x6a, 0xf5, 0x5e, 0x1f, 0x3b, 0x3d, 0xcc, 0x4f, 0x3a, 0x3c, 0x7c,
0x03, 0x5a, 0x39, 0xac, 0xe4, 0xd0, 0x02, 0x5a, 0x5f, 0xcb, 0xa4, 0x05, 0xa7, 0xda, 0x9f, 0x56,
0xa1, 0x3e, 0xd2, 0x49, 0x49, 0x0b, 0xe6, 0xe2, 0x61, 0xef, 0x94, 0x5d, 0xd9, 0xf2, 0xb4, 0x4f,
0xba, 0x2e, 0x2e, 0xb8, 0x3a, 0x09, 0x12, 0x7a, 0x41, 0x43, 0xcf, 0x4f, 0x58, 0xc0, 0x22, 0xc5,
0x69, 0x28, 0xd3, 0xba, 0xc8, 0xa5, 0x47, 0xb9, 0x90, 0xbc, 0x0b, 0x8e, 0x6d, 0xa4, 0xe6, 0xc8,
0xa6, 0x0f, 0x53, 0xe5, 0x74, 0xb4, 0x8c, 0xfc, 0x28, 0x13, 0xdb, 0x37, 0xbf, 0x05, 0x35, 0xab,
0x29, 0x4f, 0x79, 0x2c, 0x6d, 0x95, 0x2c, 0x99, 0xb5, 0xae, 0x5e, 0x22, 0x0e, 0xcc, 0xdb, 0x69,
0x8f, 0x71, 0xaf, 0xba, 0xe9, 0x23, 0xf9, 0x01, 0x2c, 0xe9, 0xca, 0x19, 0x4a, 0xcf, 0x17, 0x01,
0xc3, 0x10, 0xaf, 0xec, 0xbf, 0xf7, 0x92, 0xd3, 0x04, 0x9f, 0x71, 0x26, 0xe8, 0xd3, 0xca, 0x91,
0x08, 0x98, 0x0b, 0xc6, 0x9a, 0xfe, 0x4f, 0xde, 0x83, 0xeb, 0x36, 0x95, 0xe9, 0x16, 0x85, 0xd9,
0x62, 0xb2, 0xd3, 0x32, 0x80, 0xae, 0x51, 0xca, 0xc7, 0xca, 0x16, 0x40, 0xe1, 0x52, 0xb1, 0x80,
0xd8, 0x45, 0x96, 0xdd, 0x21, 0x36, 0x61, 0xce, 0x98, 0x74, 0x16, 0xb3, 0xe6, 0x6e, 0x57, 0xda,
0x21, 0x34, 0xc7, 0xdc, 0x22, 0x2d, 0x20, 0x59, 0xb7, 0xf5, 0x15, 0x3f, 0x47, 0xae, 0x34, 0xfe,
0x8f, 0x00, 0xcc, 0xe1, 0x33, 0x6b, 0x54, 0xc8, 0x26, 0xb4, 0xf4, 0x0e, 0x2c, 0xf0, 0x74, 0x86,
0xc4, 0xd0, 0x1e, 0x98, 0xd4, 0x55, 0x63, 0x86, 0x6c, 0xc0, 0x6a, 0x41, 0x96, 0x09, 0x66, 0xdb,
0x21, 0x6c, 0x4c, 0x39, 0x2a, 0x93, 0xdb, 0x50, 0xcf, 0x47, 0x2b, 0x8f, 0x02, 0x76, 0x89, 0x95,
0xb2, 0xec, 0xae, 0x64, 0xcb, 0x8f, 0xf5, 0xea, 0x14, 0x6a, 0xa6, 0x24, 0x9e, 0xcd, 0x49, 0xdc,
0x7e, 0x3e, 0x03, 0xeb, 0x13, 0x07, 0x00, 0x69, 0x15, 0x29, 0x8f, 0xf1, 0x30, 0xb4, 0x77, 0x4a,
0xb6, 0x51, 0x60, 0xed, 0xef, 0x8e, 0x11, 0x66, 0x36, 0x83, 0x8c, 0x91, 0x66, 0x6d, 0x12, 0x69,
0x0c, 0xe9, 0x51, 0x81, 0x8c, 0xd3, 0x86, 0xdc, 0x81, 0xc6, 0x28, 0xef, 0x0d, 0xeb, 0x51, 0x63,
0xa5, 0xcc, 0x7c, 0xb2, 0x07, 0x4d, 0x33, 0x07, 0x59, 0x92, 0x37, 0xc6, 0xb9, 0x0c, 0xde, 0x48,
0x85, 0x59, 0x77, 0x7c, 0x07, 0xd6, 0x45, 0x2f, 0xe4, 0x3f, 0x1c, 0x32, 0x2f, 0xa6, 0x49, 0xca,
0x16, 0x26, 0x1d, 0x7d, 0xb3, 0x31, 0x4a, 0xab, 0x16, 0x70, 0x8c, 0xf2, 0x47, 0x28, 0x26, 0xb7,
0x61, 0x99, 0xa6, 0x21, 0xf4, 0x24, 0x1f, 0x38, 0x0b, 0xd9, 0xb8, 0xae, 0x65, 0x82, 0x2e, 0x1f,
0xb4, 0xef, 0xc3, 0x72, 0x37, 0x66, 0x3e, 0xa7, 0xa1, 0x4d, 0x28, 0x81, 0xea, 0x29, 0x8f, 0x02,
0x9b, 0x45, 0xfc, 0xaf, 0xd7, 0x70, 0x84, 0xcc, 0xe0, 0xa9, 0x14, 0xff, 0xb7, 0xbf, 0x0f, 0xf5,
0x91, 0xdb, 0x80, 0x1e, 0xbd, 0x63, 0xb1, 0x30, 0x6d, 0x63, 0x34, 0x0e, 0x69, 0xda, 0x67, 0x0a,
0x69, 0xff, 0x04, 0x5a, 0x93, 0xaf, 0x90, 0x24, 0x80, 0xeb, 0x54, 0xff, 0xf1, 0x26, 0xdc, 0x50,
0xed, 0xc7, 0x83, 0xdd, 0x97, 0xbe, 0x95, 0xba, 0x2d, 0xb4, 0x35, 0xb6, 0xde, 0xfe, 0x0e, 0x34,
0xc7, 0x16, 0xf3, 0xaa, 0xad, 0x14, 0xab, 0xf6, 0x15, 0x58, 0xcc, 0x1d, 0xd0, 0x41, 0x59, 0x76,
0xf3, 0x85, 0xf6, 0x67, 0xd7, 0xd2, 0x8f, 0x1e, 0xf8, 0xc2, 0x13, 0x07, 0xd5, 0x5b, 0xb0, 0x66,
0xdb, 0x59, 0xc2, 0xce, 0x19, 0x0d, 0xd3, 0x26, 0x68, 0xba, 0x27, 0x31, 0x32, 0x17, 0x45, 0xb6,
0x01, 0xbe, 0xd4, 0x19, 0x62, 0xf6, 0x65, 0xce, 0x10, 0xbb, 0xd0, 0xc0, 0xeb, 0x8e, 0x66, 0x6c,
0x7a, 0xb5, 0xaa, 0x62, 0x66, 0xeb, 0xe9, 0x7a, 0x7a, 0xad, 0x7a, 0x03, 0x9a, 0xf6, 0x22, 0x57,
0xd8, 0xc4, 0x0c, 0xb5, 0x3a, 0x0a, 0x0a, 0x66, 0x3f, 0x84, 0x5a, 0xe9, 0x8c, 0x37, 0xf7, 0xbf,
0x1e, 0xf1, 0x4a, 0x66, 0xc8, 0x01, 0x2c, 0x48, 0x53, 0xa0, 0xa6, 0xe8, 0x97, 0xf6, 0x5f, 0x9f,
0x9a, 0xeb, 0x62, 0x21, 0xbb, 0x99, 0x1a, 0x79, 0x13, 0x48, 0x9c, 0x88, 0x58, 0x48, 0x96, 0x68,
0x2e, 0x44, 0x54, 0x0d, 0x13, 0x86, 0x8c, 0xa8, 0xb9, 0xcd, 0x54, 0xd2, 0x4d, 0x05, 0xe4, 0x0e,
0xd4, 0x4b, 0xf1, 0x61, 0xd2, 0x79, 0x9e, 0xd3, 0x6d, 0xa5, 0x18, 0x23, 0x26, 0xc9, 0x0e, 0x2c,
0x97, 0x32, 0xe9, 0x7c, 0x31, 0x9f, 0xf1, 0xb9, 0x56, 0xcc, 0xa3, 0xe6, 0xa4, 0xce, 0x9b, 0xf9,
0xfc, 0x93, 0xb0, 0xbe, 0xf3, 0x65, 0x8e, 0x5c, 0x8a, 0xc5, 0x05, 0x7e, 0xe9, 0x71, 0x59, 0x5f,
0x5f, 0x37, 0xf2, 0xa8, 0x3b, 0x5f, 0xe5, 0xa8, 0xc5, 0x2c, 0xe6, 0xe4, 0x5b, 0xb0, 0x98, 0x7d,
0x6c, 0x73, 0xfe, 0x3d, 0x8f, 0x67, 0xbb, 0xcd, 0x8e, 0xf9, 0x1e, 0xd7, 0x49, 0xbf, 0xc7, 0x75,
0x9e, 0xa6, 0x10, 0xa3, 0x9e, 0x69, 0xf4, 0xe6, 0x10, 0x72, 0xef, 0x3f, 0x01, 0x00, 0x00, 0xff,
0xff, 0xa6, 0xdd, 0xbc, 0xc9, 0xfb, 0x13, 0x00, 0x00,
}

View File

@@ -48,7 +48,6 @@ message BeaconState {
// All fields mustbe annotated with [deprecated=true];
repeated ValidatorRecord validators = 10000 [deprecated=true]; // Deprecated by validator_registry
uint64 validator_set_change_slot = 10001 [deprecated=true]; // Deprecated by validator_registry_latest_change_slot
repeated CrosslinkRecord crosslinks = 10002 [deprecated=true]; // Deprecated by latest_cross_links
bytes randao_mix = 10003 [deprecated=true]; // Renamed to randao_mix_hash32
uint64 last_finalized_slot = 10005 [deprecated=true]; // Replaced/renamed by finalized_slot
uint64 last_justified_slot = 10006 [deprecated=true]; // Replaced/renamed by justified_slot