Browse Source

lib/db, lib/protocol: Compact FileInfo and BlockInfo alignment (#6215)

* lib/db, lib/protocol: Compact FileInfo and BlockInfo alignment

This fixes the following two lint warnings

    FileInfo: struct of size 160 bytes could be of size 136 bytes
    BlockInfo: struct of size 48 bytes could be of size 40 bytes

by reordering fields in alignment order (64 bit fields, then 32 bit
fields, then 16 bit fields (if any), then small ones). The end result is
a slightly less aesthetically pleasing struct field order, but since
these are the objects we often juggle in bulk and keep large queues of I
think it's worth it.

It's a micro optimization, but a cheap one.
Jakob Borg 6 years ago
parent
commit
325c3c1fa7
4 changed files with 201 additions and 195 deletions
  1. 58 58
      lib/db/structs.pb.go
  2. 8 7
      lib/db/structs.proto
  3. 122 122
      lib/protocol/bep.pb.go
  4. 13 8
      lib/protocol/bep.proto

+ 58 - 58
lib/db/structs.pb.go

@@ -102,23 +102,23 @@ var xxx_messageInfo_VersionList proto.InternalMessageInfo
 
 // Must be the same as FileInfo but without the blocks field
 type FileInfoTruncated struct {
-	Name          string                                              `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	Type          protocol.FileInfoType                               `protobuf:"varint,2,opt,name=type,proto3,enum=protocol.FileInfoType" json:"type,omitempty"`
-	Size          int64                                               `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"`
-	Permissions   uint32                                              `protobuf:"varint,4,opt,name=permissions,proto3" json:"permissions,omitempty"`
-	ModifiedS     int64                                               `protobuf:"varint,5,opt,name=modified_s,json=modifiedS,proto3" json:"modified_s,omitempty"`
-	ModifiedNs    int32                                               `protobuf:"varint,11,opt,name=modified_ns,json=modifiedNs,proto3" json:"modified_ns,omitempty"`
-	ModifiedBy    github_com_syncthing_syncthing_lib_protocol.ShortID `protobuf:"varint,12,opt,name=modified_by,json=modifiedBy,proto3,customtype=github.com/syncthing/syncthing/lib/protocol.ShortID" json:"modified_by"`
-	Deleted       bool                                                `protobuf:"varint,6,opt,name=deleted,proto3" json:"deleted,omitempty"`
-	RawInvalid    bool                                                `protobuf:"varint,7,opt,name=invalid,proto3" json:"invalid,omitempty"`
-	NoPermissions bool                                                `protobuf:"varint,8,opt,name=no_permissions,json=noPermissions,proto3" json:"no_permissions,omitempty"`
-	Version       protocol.Vector                                     `protobuf:"bytes,9,opt,name=version,proto3" json:"version"`
-	Sequence      int64                                               `protobuf:"varint,10,opt,name=sequence,proto3" json:"sequence,omitempty"`
-	RawBlockSize  int32                                               `protobuf:"varint,13,opt,name=block_size,json=blockSize,proto3" json:"block_size,omitempty"`
+	Name       string                                              `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Size       int64                                               `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"`
+	ModifiedS  int64                                               `protobuf:"varint,5,opt,name=modified_s,json=modifiedS,proto3" json:"modified_s,omitempty"`
+	ModifiedBy github_com_syncthing_syncthing_lib_protocol.ShortID `protobuf:"varint,12,opt,name=modified_by,json=modifiedBy,proto3,customtype=github.com/syncthing/syncthing/lib/protocol.ShortID" json:"modified_by"`
+	Version    protocol.Vector                                     `protobuf:"bytes,9,opt,name=version,proto3" json:"version"`
+	Sequence   int64                                               `protobuf:"varint,10,opt,name=sequence,proto3" json:"sequence,omitempty"`
 	// repeated BlockInfo Blocks         = 16
-	SymlinkTarget string `protobuf:"bytes,17,opt,name=symlink_target,json=symlinkTarget,proto3" json:"symlink_target,omitempty"`
+	SymlinkTarget string                `protobuf:"bytes,17,opt,name=symlink_target,json=symlinkTarget,proto3" json:"symlink_target,omitempty"`
+	Type          protocol.FileInfoType `protobuf:"varint,2,opt,name=type,proto3,enum=protocol.FileInfoType" json:"type,omitempty"`
+	Permissions   uint32                `protobuf:"varint,4,opt,name=permissions,proto3" json:"permissions,omitempty"`
+	ModifiedNs    int32                 `protobuf:"varint,11,opt,name=modified_ns,json=modifiedNs,proto3" json:"modified_ns,omitempty"`
+	RawBlockSize  int32                 `protobuf:"varint,13,opt,name=block_size,json=blockSize,proto3" json:"block_size,omitempty"`
 	// see bep.proto
-	LocalFlags uint32 `protobuf:"varint,1000,opt,name=local_flags,json=localFlags,proto3" json:"local_flags,omitempty"`
+	LocalFlags    uint32 `protobuf:"varint,1000,opt,name=local_flags,json=localFlags,proto3" json:"local_flags,omitempty"`
+	Deleted       bool   `protobuf:"varint,6,opt,name=deleted,proto3" json:"deleted,omitempty"`
+	RawInvalid    bool   `protobuf:"varint,7,opt,name=invalid,proto3" json:"invalid,omitempty"`
+	NoPermissions bool   `protobuf:"varint,8,opt,name=no_permissions,json=noPermissions,proto3" json:"no_permissions,omitempty"`
 }
 
 func (m *FileInfoTruncated) Reset()      { *m = FileInfoTruncated{} }
@@ -249,49 +249,49 @@ func init() { proto.RegisterFile("structs.proto", fileDescriptor_e774e8f5f348d14
 
 var fileDescriptor_e774e8f5f348d14d = []byte{
 	// 683 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x4f, 0x6b, 0xdb, 0x4e,
-	0x10, 0xb5, 0x62, 0xf9, 0xdf, 0xd8, 0xce, 0x2f, 0x59, 0x42, 0x10, 0x86, 0x9f, 0x2c, 0x5c, 0x0a,
-	0xa2, 0x07, 0xbb, 0x4d, 0x6e, 0xed, 0xcd, 0x0d, 0x01, 0x43, 0x69, 0xcb, 0x3a, 0xe4, 0x54, 0x30,
-	0xfa, 0xb3, 0x76, 0x96, 0xc8, 0x5a, 0x47, 0xbb, 0x4e, 0x70, 0x3e, 0x45, 0x8f, 0x3d, 0xe6, 0xe3,
-	0xe4, 0x98, 0x63, 0xe9, 0xc1, 0xa4, 0x76, 0x0f, 0xfd, 0x18, 0x65, 0x77, 0x25, 0x45, 0xcd, 0xa9,
-	0xb7, 0x79, 0x6f, 0x66, 0x77, 0x67, 0xe6, 0xbd, 0x85, 0x36, 0x17, 0xc9, 0x32, 0x10, 0xbc, 0xbf,
-	0x48, 0x98, 0x60, 0x68, 0x27, 0xf4, 0x3b, 0x2f, 0x12, 0xb2, 0x60, 0x7c, 0xa0, 0x08, 0x7f, 0x39,
-	0x1d, 0xcc, 0xd8, 0x8c, 0x29, 0xa0, 0x22, 0x5d, 0xd8, 0x39, 0x8c, 0xa8, 0xaf, 0x4b, 0x02, 0x16,
-	0x0d, 0x7c, 0xb2, 0xd0, 0x7c, 0xef, 0x0a, 0x9a, 0xa7, 0x34, 0x22, 0xe7, 0x24, 0xe1, 0x94, 0xc5,
-	0xe8, 0x35, 0xd4, 0xae, 0x75, 0x68, 0x19, 0x8e, 0xe1, 0x36, 0x8f, 0xf6, 0xfa, 0xd9, 0xa1, 0xfe,
-	0x39, 0x09, 0x04, 0x4b, 0x86, 0xe6, 0xfd, 0xba, 0x5b, 0xc2, 0x59, 0x19, 0x3a, 0x84, 0x6a, 0x48,
-	0xae, 0x69, 0x40, 0xac, 0x1d, 0xc7, 0x70, 0x5b, 0x38, 0x45, 0xc8, 0x82, 0x1a, 0x8d, 0xaf, 0xbd,
-	0x88, 0x86, 0x56, 0xd9, 0x31, 0xdc, 0x3a, 0xce, 0x60, 0xef, 0x14, 0x9a, 0xe9, 0x73, 0x1f, 0x28,
-	0x17, 0xe8, 0x0d, 0xd4, 0xd3, 0xbb, 0xb8, 0x65, 0x38, 0x65, 0xb7, 0x79, 0xf4, 0x5f, 0x3f, 0xf4,
-	0xfb, 0x85, 0xae, 0xd2, 0x27, 0xf3, 0xb2, 0xb7, 0xe6, 0xb7, 0xbb, 0x6e, 0xa9, 0xf7, 0x68, 0xc2,
-	0xbe, 0xac, 0x1a, 0xc5, 0x53, 0x76, 0x96, 0x2c, 0xe3, 0xc0, 0x13, 0x24, 0x44, 0x08, 0xcc, 0xd8,
-	0x9b, 0x13, 0xd5, 0x7e, 0x03, 0xab, 0x18, 0xbd, 0x02, 0x53, 0xac, 0x16, 0xba, 0xc3, 0xdd, 0xa3,
-	0xc3, 0xa7, 0x91, 0xf2, 0xe3, 0xab, 0x05, 0xc1, 0xaa, 0x46, 0x9e, 0xe7, 0xf4, 0x96, 0xa8, 0xa6,
-	0xcb, 0x58, 0xc5, 0xc8, 0x81, 0xe6, 0x82, 0x24, 0x73, 0xca, 0x75, 0x97, 0xa6, 0x63, 0xb8, 0x6d,
-	0x5c, 0xa4, 0xd0, 0xff, 0x00, 0x73, 0x16, 0xd2, 0x29, 0x25, 0xe1, 0x84, 0x5b, 0x15, 0x75, 0xb6,
-	0x91, 0x31, 0x63, 0xd4, 0x85, 0x66, 0x9e, 0x8e, 0xb9, 0xd5, 0x74, 0x0c, 0xb7, 0x82, 0xf3, 0x13,
-	0x1f, 0x39, 0xfa, 0x52, 0x28, 0xf0, 0x57, 0x56, 0xcb, 0x31, 0x5c, 0x73, 0xf8, 0x4e, 0x8e, 0xfd,
-	0x63, 0xdd, 0x3d, 0x9e, 0x51, 0x71, 0xb1, 0xf4, 0xfb, 0x01, 0x9b, 0x0f, 0xf8, 0x2a, 0x0e, 0xc4,
-	0x05, 0x8d, 0x67, 0x85, 0xa8, 0x28, 0x6d, 0x7f, 0x7c, 0xc1, 0x12, 0x31, 0x3a, 0x79, 0xba, 0x7d,
-	0xb8, 0x92, 0x5a, 0x84, 0x24, 0x22, 0x82, 0x84, 0x56, 0x55, 0x6b, 0x91, 0x42, 0xe4, 0x3e, 0xa9,
-	0x54, 0x93, 0x99, 0xe1, 0xee, 0x66, 0xdd, 0x05, 0xec, 0xdd, 0x8c, 0x34, 0x9b, 0xab, 0x86, 0x5e,
-	0xc2, 0x6e, 0xcc, 0x26, 0xc5, 0x35, 0xd4, 0xd5, 0x55, 0xed, 0x98, 0x7d, 0x2e, 0x2c, 0xa2, 0x60,
-	0xa0, 0xc6, 0xbf, 0x19, 0xa8, 0x03, 0x75, 0x4e, 0xae, 0x96, 0x24, 0x0e, 0x88, 0x05, 0x6a, 0x71,
-	0x39, 0x46, 0x03, 0x00, 0x3f, 0x62, 0xc1, 0xe5, 0x44, 0x49, 0xd2, 0x96, 0x6b, 0x1b, 0xee, 0x6d,
-	0xd6, 0xdd, 0x16, 0xf6, 0x6e, 0x86, 0x32, 0x31, 0xa6, 0xb7, 0x04, 0x37, 0xfc, 0x2c, 0x94, 0x5d,
-	0xf2, 0xd5, 0x3c, 0xa2, 0xf1, 0xe5, 0x44, 0x78, 0xc9, 0x8c, 0x08, 0x6b, 0x5f, 0xf9, 0xa0, 0x9d,
-	0xb2, 0x67, 0x8a, 0x94, 0x82, 0x46, 0x2c, 0xf0, 0xa2, 0xc9, 0x34, 0xf2, 0x66, 0xdc, 0xfa, 0x5d,
-	0x53, 0x8a, 0x82, 0xe2, 0x4e, 0x25, 0x95, 0x5a, 0xec, 0x97, 0x01, 0xd5, 0xf7, 0x6c, 0x19, 0x0b,
-	0x8e, 0x0e, 0xa0, 0x32, 0xa5, 0x11, 0xe1, 0xca, 0x58, 0x15, 0xac, 0x81, 0xbc, 0x28, 0xa4, 0x89,
-	0x9a, 0x8b, 0x12, 0xae, 0x0c, 0x56, 0xc1, 0x45, 0x4a, 0x8d, 0xa7, 0xdf, 0xe6, 0xca, 0x53, 0x15,
-	0x9c, 0xe3, 0xa2, 0x2e, 0xa6, 0x4a, 0xe5, 0xba, 0x1c, 0x40, 0xc5, 0x5f, 0x09, 0x92, 0x59, 0x49,
-	0x83, 0xbf, 0x56, 0x55, 0x7d, 0xb6, 0xaa, 0x0e, 0xd4, 0xf5, 0xcf, 0x1b, 0x9d, 0xa8, 0x99, 0x5b,
-	0x38, 0xc7, 0xc8, 0x86, 0xc2, 0x68, 0x16, 0x7a, 0x3e, 0x6c, 0xef, 0x13, 0x34, 0xf4, 0x94, 0x63,
-	0x22, 0x90, 0x0b, 0xd5, 0x40, 0x81, 0xf4, 0x37, 0x82, 0xfc, 0x8d, 0x3a, 0x9d, 0x4a, 0x97, 0xe6,
-	0x65, 0xfb, 0x41, 0x42, 0xe4, 0xaf, 0x53, 0x83, 0x97, 0x71, 0x06, 0x87, 0xce, 0xfd, 0x4f, 0xbb,
-	0x74, 0xbf, 0xb1, 0x8d, 0x87, 0x8d, 0x6d, 0x3c, 0x6e, 0xec, 0xd2, 0xd7, 0xad, 0x5d, 0xba, 0xdb,
-	0xda, 0xc6, 0xc3, 0xd6, 0x2e, 0x7d, 0xdf, 0xda, 0x25, 0xbf, 0xaa, 0x5c, 0x71, 0xfc, 0x27, 0x00,
-	0x00, 0xff, 0xff, 0x38, 0xe1, 0x29, 0xbf, 0xd0, 0x04, 0x00, 0x00,
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x4f, 0x6f, 0xda, 0x4e,
+	0x10, 0xc5, 0xc1, 0x10, 0x18, 0x20, 0xbf, 0x64, 0x15, 0x45, 0x16, 0xd2, 0xcf, 0x58, 0x54, 0x95,
+	0xac, 0x1e, 0xa0, 0x4d, 0x6e, 0xed, 0x8d, 0x46, 0x91, 0x90, 0xaa, 0xb6, 0x5a, 0xa2, 0x9c, 0x2a,
+	0x21, 0xff, 0x59, 0xc8, 0x2a, 0xc6, 0x4b, 0xbc, 0x4b, 0x22, 0xf2, 0x29, 0x7a, 0xec, 0x31, 0x1f,
+	0x27, 0xc7, 0x1c, 0xab, 0x1e, 0x50, 0x0a, 0x3d, 0xf4, 0x63, 0x54, 0xbb, 0x6b, 0x1b, 0x37, 0xa7,
+	0xde, 0xe6, 0xbd, 0x19, 0x7b, 0x66, 0xde, 0xbc, 0x85, 0x16, 0x17, 0xc9, 0x22, 0x10, 0xbc, 0x37,
+	0x4f, 0x98, 0x60, 0x68, 0x27, 0xf4, 0xdb, 0x2f, 0x12, 0x32, 0x67, 0xbc, 0xaf, 0x08, 0x7f, 0x31,
+	0xe9, 0x4f, 0xd9, 0x94, 0x29, 0xa0, 0x22, 0x5d, 0xd8, 0x3e, 0x8a, 0xa8, 0xaf, 0x4b, 0x02, 0x16,
+	0xf5, 0x7d, 0x32, 0xd7, 0x7c, 0xf7, 0x1a, 0x1a, 0x67, 0x34, 0x22, 0x17, 0x24, 0xe1, 0x94, 0xc5,
+	0xe8, 0x35, 0xec, 0xde, 0xe8, 0xd0, 0x32, 0x1c, 0xc3, 0x6d, 0x1c, 0xef, 0xf7, 0xb2, 0x8f, 0x7a,
+	0x17, 0x24, 0x10, 0x2c, 0x19, 0x98, 0x0f, 0xab, 0x4e, 0x09, 0x67, 0x65, 0xe8, 0x08, 0xaa, 0x21,
+	0xb9, 0xa1, 0x01, 0xb1, 0x76, 0x1c, 0xc3, 0x6d, 0xe2, 0x14, 0x21, 0x0b, 0x76, 0x69, 0x7c, 0xe3,
+	0x45, 0x34, 0xb4, 0xca, 0x8e, 0xe1, 0xd6, 0x70, 0x06, 0xbb, 0x67, 0xd0, 0x48, 0xdb, 0x7d, 0xa0,
+	0x5c, 0xa0, 0x37, 0x50, 0x4b, 0xff, 0xc5, 0x2d, 0xc3, 0x29, 0xbb, 0x8d, 0xe3, 0xff, 0x7a, 0xa1,
+	0xdf, 0x2b, 0x4c, 0x95, 0xb6, 0xcc, 0xcb, 0xde, 0x9a, 0xdf, 0xee, 0x3b, 0xa5, 0xee, 0x93, 0x09,
+	0x07, 0xb2, 0x6a, 0x18, 0x4f, 0xd8, 0x79, 0xb2, 0x88, 0x03, 0x4f, 0x90, 0x10, 0x21, 0x30, 0x63,
+	0x6f, 0x46, 0xd4, 0xf8, 0x75, 0xac, 0x62, 0xc9, 0x71, 0x7a, 0x47, 0xd4, 0x20, 0x65, 0xac, 0x62,
+	0xf4, 0x3f, 0xc0, 0x8c, 0x85, 0x74, 0x42, 0x49, 0x38, 0xe6, 0x56, 0x45, 0x65, 0xea, 0x19, 0x33,
+	0x42, 0x5f, 0xa0, 0x91, 0xa7, 0xfd, 0xa5, 0xd5, 0x74, 0x0c, 0xd7, 0x1c, 0xbc, 0x93, 0x73, 0xfc,
+	0x58, 0x75, 0x4e, 0xa6, 0x54, 0x5c, 0x2e, 0xfc, 0x5e, 0xc0, 0x66, 0x7d, 0xbe, 0x8c, 0x03, 0x71,
+	0x49, 0xe3, 0x69, 0x21, 0x2a, 0x6a, 0xdd, 0x1b, 0x5d, 0xb2, 0x44, 0x0c, 0x4f, 0x71, 0xde, 0x6e,
+	0xb0, 0x2c, 0xca, 0x5c, 0xff, 0x37, 0x99, 0xdb, 0x50, 0xe3, 0xe4, 0x7a, 0x41, 0xe2, 0x80, 0x58,
+	0xa0, 0x86, 0xcd, 0x31, 0x7a, 0x09, 0x7b, 0x7c, 0x39, 0x8b, 0x68, 0x7c, 0x35, 0x16, 0x5e, 0x32,
+	0x25, 0xc2, 0x3a, 0x50, 0xcb, 0xb7, 0x52, 0xf6, 0x5c, 0x91, 0xe8, 0x15, 0x98, 0x62, 0x39, 0xd7,
+	0x77, 0xda, 0x3b, 0x3e, 0xda, 0x76, 0xcc, 0x45, 0x5c, 0xce, 0x09, 0x56, 0x35, 0xc8, 0x81, 0xc6,
+	0x9c, 0x24, 0x33, 0xca, 0xf5, 0x5d, 0x4c, 0xc7, 0x70, 0x5b, 0xb8, 0x48, 0xa1, 0x4e, 0x41, 0xa0,
+	0x98, 0x5b, 0x0d, 0xc7, 0x70, 0x2b, 0xdb, 0x1d, 0x3f, 0x72, 0xd4, 0x07, 0xf0, 0x23, 0x16, 0x5c,
+	0x8d, 0x95, 0xf4, 0x2d, 0x99, 0x1f, 0xec, 0xaf, 0x57, 0x9d, 0x26, 0xf6, 0x6e, 0x07, 0x32, 0x31,
+	0xa2, 0x77, 0x04, 0xd7, 0xfd, 0x2c, 0x94, 0x3d, 0x23, 0x16, 0x78, 0xd1, 0x78, 0x12, 0x79, 0x53,
+	0x6e, 0xfd, 0xde, 0x55, 0x4d, 0x41, 0x71, 0x67, 0x92, 0x92, 0x9e, 0x0a, 0x49, 0x44, 0x04, 0x09,
+	0xad, 0xaa, 0xf6, 0x54, 0x0a, 0x91, 0xbb, 0x75, 0x9b, 0xfc, 0xac, 0x36, 0xd8, 0x5b, 0xaf, 0x3a,
+	0x80, 0xbd, 0xdb, 0xa1, 0x66, 0x73, 0xf7, 0x49, 0xb1, 0x62, 0x36, 0x2e, 0x2e, 0x57, 0x53, 0xbf,
+	0x6a, 0xc5, 0xec, 0xf3, 0x96, 0x4c, 0x2d, 0xf6, 0xcb, 0x80, 0xea, 0x7b, 0xb6, 0x88, 0x05, 0x47,
+	0x87, 0x50, 0x99, 0xd0, 0x88, 0x70, 0x65, 0xac, 0x0a, 0xd6, 0x40, 0xce, 0x1c, 0xd2, 0x44, 0x5d,
+	0x8c, 0x12, 0xae, 0xa4, 0xad, 0xe0, 0x22, 0xa5, 0x0e, 0xa7, 0xcf, 0xc0, 0x95, 0xff, 0x2a, 0x38,
+	0xc7, 0xc5, 0x7d, 0x4c, 0x95, 0xca, 0xf7, 0x39, 0x84, 0x8a, 0xbf, 0x14, 0x24, 0x33, 0xa6, 0x06,
+	0x7f, 0x99, 0xa0, 0xfa, 0xcc, 0x04, 0x6d, 0xa8, 0xe9, 0x97, 0x37, 0x3c, 0x55, 0xe7, 0x6f, 0xe2,
+	0x1c, 0x23, 0x1b, 0x0a, 0x2a, 0x5a, 0xe8, 0xb9, 0xae, 0xdd, 0x4f, 0x50, 0xd7, 0x5b, 0x8e, 0x88,
+	0x40, 0x2e, 0x54, 0x03, 0x05, 0xd2, 0xd7, 0x08, 0xf2, 0x35, 0xea, 0x74, 0x6a, 0xca, 0x34, 0x2f,
+	0xc7, 0x0f, 0x12, 0x22, 0x5f, 0x9d, 0x5a, 0xbc, 0x8c, 0x33, 0x38, 0x70, 0x1e, 0x7e, 0xda, 0xa5,
+	0x87, 0xb5, 0x6d, 0x3c, 0xae, 0x6d, 0xe3, 0x69, 0x6d, 0x97, 0xbe, 0x6e, 0xec, 0xd2, 0xfd, 0xc6,
+	0x36, 0x1e, 0x37, 0x76, 0xe9, 0xfb, 0xc6, 0x2e, 0xf9, 0x55, 0xe5, 0xbe, 0x93, 0x3f, 0x01, 0x00,
+	0x00, 0xff, 0xff, 0x7e, 0x87, 0x05, 0xb2, 0xd0, 0x04, 0x00, 0x00,
 }
 
 func (m *FileVersion) Marshal() (dAtA []byte, err error) {

+ 8 - 7
lib/db/structs.proto

@@ -27,23 +27,24 @@ message VersionList {
 message FileInfoTruncated {
     option (gogoproto.goproto_stringer) = false;
     string                name           = 1;
-    protocol.FileInfoType type           = 2;
     int64                 size           = 3;
-    uint32                permissions    = 4;
     int64                 modified_s     = 5;
-    int32                 modified_ns    = 11;
     uint64                modified_by    = 12 [(gogoproto.customtype) = "github.com/syncthing/syncthing/lib/protocol.ShortID", (gogoproto.nullable) = false];
-    bool                  deleted        = 6;
-    bool                  invalid        = 7 [(gogoproto.customname) = "RawInvalid"];
-    bool                  no_permissions = 8;
     protocol.Vector       version        = 9 [(gogoproto.nullable) = false];
     int64                 sequence       = 10;
-    int32                 block_size     = 13 [(gogoproto.customname) = "RawBlockSize"];
     // repeated BlockInfo Blocks         = 16
     string                symlink_target = 17;
+    protocol.FileInfoType type           = 2;
+    uint32                permissions    = 4;
+    int32                 modified_ns    = 11;
+    int32                 block_size     = 13 [(gogoproto.customname) = "RawBlockSize"];
 
     // see bep.proto
     uint32 local_flags = 1000;
+
+    bool deleted        = 6;
+    bool invalid        = 7 [(gogoproto.customname) = "RawInvalid"];
+    bool no_permissions = 8;
 }
 
 // For each folder and device we keep one of these to track the current

+ 122 - 122
lib/protocol/bep.pb.go

@@ -490,25 +490,25 @@ var xxx_messageInfo_IndexUpdate proto.InternalMessageInfo
 
 type FileInfo struct {
 	Name          string       `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	Type          FileInfoType `protobuf:"varint,2,opt,name=type,proto3,enum=protocol.FileInfoType" json:"type,omitempty"`
 	Size          int64        `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"`
-	Permissions   uint32       `protobuf:"varint,4,opt,name=permissions,proto3" json:"permissions,omitempty"`
 	ModifiedS     int64        `protobuf:"varint,5,opt,name=modified_s,json=modifiedS,proto3" json:"modified_s,omitempty"`
-	ModifiedNs    int32        `protobuf:"varint,11,opt,name=modified_ns,json=modifiedNs,proto3" json:"modified_ns,omitempty"`
 	ModifiedBy    ShortID      `protobuf:"varint,12,opt,name=modified_by,json=modifiedBy,proto3,customtype=ShortID" json:"modified_by"`
-	Deleted       bool         `protobuf:"varint,6,opt,name=deleted,proto3" json:"deleted,omitempty"`
-	RawInvalid    bool         `protobuf:"varint,7,opt,name=invalid,proto3" json:"invalid,omitempty"`
-	NoPermissions bool         `protobuf:"varint,8,opt,name=no_permissions,json=noPermissions,proto3" json:"no_permissions,omitempty"`
 	Version       Vector       `protobuf:"bytes,9,opt,name=version,proto3" json:"version"`
 	Sequence      int64        `protobuf:"varint,10,opt,name=sequence,proto3" json:"sequence,omitempty"`
-	RawBlockSize  int32        `protobuf:"varint,13,opt,name=block_size,json=blockSize,proto3" json:"block_size,omitempty"`
 	Blocks        []BlockInfo  `protobuf:"bytes,16,rep,name=Blocks,proto3" json:"Blocks"`
 	SymlinkTarget string       `protobuf:"bytes,17,opt,name=symlink_target,json=symlinkTarget,proto3" json:"symlink_target,omitempty"`
+	Type          FileInfoType `protobuf:"varint,2,opt,name=type,proto3,enum=protocol.FileInfoType" json:"type,omitempty"`
+	Permissions   uint32       `protobuf:"varint,4,opt,name=permissions,proto3" json:"permissions,omitempty"`
+	ModifiedNs    int32        `protobuf:"varint,11,opt,name=modified_ns,json=modifiedNs,proto3" json:"modified_ns,omitempty"`
+	RawBlockSize  int32        `protobuf:"varint,13,opt,name=block_size,json=blockSize,proto3" json:"block_size,omitempty"`
 	// The local_flags fields stores flags that are relevant to the local
 	// host only. It is not part of the protocol, doesn't get sent or
 	// received (we make sure to zero it), nonetheless we need it on our
 	// struct and to be able to serialize it to/from the database.
-	LocalFlags uint32 `protobuf:"varint,1000,opt,name=local_flags,json=localFlags,proto3" json:"local_flags,omitempty"`
+	LocalFlags    uint32 `protobuf:"varint,1000,opt,name=local_flags,json=localFlags,proto3" json:"local_flags,omitempty"`
+	Deleted       bool   `protobuf:"varint,6,opt,name=deleted,proto3" json:"deleted,omitempty"`
+	RawInvalid    bool   `protobuf:"varint,7,opt,name=invalid,proto3" json:"invalid,omitempty"`
+	NoPermissions bool   `protobuf:"varint,8,opt,name=no_permissions,json=noPermissions,proto3" json:"no_permissions,omitempty"`
 }
 
 func (m *FileInfo) Reset()      { *m = FileInfo{} }
@@ -544,9 +544,9 @@ func (m *FileInfo) XXX_DiscardUnknown() {
 var xxx_messageInfo_FileInfo proto.InternalMessageInfo
 
 type BlockInfo struct {
+	Hash     []byte `protobuf:"bytes,3,opt,name=hash,proto3" json:"hash,omitempty"`
 	Offset   int64  `protobuf:"varint,1,opt,name=offset,proto3" json:"offset,omitempty"`
 	Size     int32  `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"`
-	Hash     []byte `protobuf:"bytes,3,opt,name=hash,proto3" json:"hash,omitempty"`
 	WeakHash uint32 `protobuf:"varint,4,opt,name=weak_hash,json=weakHash,proto3" json:"weak_hash,omitempty"`
 }
 
@@ -920,120 +920,120 @@ func init() {
 func init() { proto.RegisterFile("bep.proto", fileDescriptor_e3f59eb60afbbc6e) }
 
 var fileDescriptor_e3f59eb60afbbc6e = []byte{
-	// 1802 bytes of a gzipped FileDescriptorProto
+	// 1803 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xcf, 0x6f, 0xdb, 0xc8,
-	0xf5, 0x17, 0x25, 0x4a, 0xa2, 0x9e, 0x64, 0x2f, 0x3d, 0x49, 0xfc, 0xe5, 0x97, 0x9b, 0x95, 0x18,
-	0x25, 0xd9, 0x68, 0x8d, 0x6d, 0xe2, 0xee, 0x6e, 0x5b, 0xb4, 0x68, 0x0b, 0xe8, 0x07, 0xed, 0x08,
-	0x75, 0x28, 0x77, 0x24, 0x67, 0x9b, 0x3d, 0x94, 0xa0, 0xc5, 0x91, 0x4c, 0x84, 0xe2, 0xa8, 0x24,
-	0x65, 0x47, 0xfb, 0x27, 0xe8, 0xd4, 0x63, 0x2f, 0x02, 0x16, 0xe8, 0xa9, 0xff, 0x49, 0x8e, 0x69,
-	0x0f, 0x45, 0xd1, 0x83, 0xd1, 0x75, 0x2e, 0x7b, 0xec, 0x5f, 0x50, 0x14, 0x9c, 0x21, 0x25, 0xca,
-	0x4e, 0x16, 0x7b, 0xe8, 0x89, 0x33, 0xef, 0x7d, 0xe6, 0x0d, 0xe7, 0xf3, 0xde, 0xfb, 0xcc, 0x40,
-	0xe9, 0x94, 0x4c, 0x1f, 0x4f, 0x7d, 0x1a, 0x52, 0x24, 0xb1, 0xcf, 0x90, 0xba, 0xea, 0x7d, 0x9f,
-	0x4c, 0x69, 0xf0, 0x84, 0xcd, 0x4f, 0x67, 0xa3, 0x27, 0x63, 0x3a, 0xa6, 0x6c, 0xc2, 0x46, 0x1c,
-	0x5e, 0x9f, 0x42, 0xfe, 0x29, 0x71, 0x5d, 0x8a, 0x6a, 0x50, 0xb6, 0xc9, 0xb9, 0x33, 0x24, 0xa6,
-	0x67, 0x4d, 0x88, 0x22, 0x68, 0x42, 0xa3, 0x84, 0x81, 0x9b, 0x0c, 0x6b, 0x42, 0x22, 0xc0, 0xd0,
-	0x75, 0x88, 0x17, 0x72, 0x40, 0x96, 0x03, 0xb8, 0x89, 0x01, 0x1e, 0xc2, 0x76, 0x0c, 0x38, 0x27,
-	0x7e, 0xe0, 0x50, 0x4f, 0xc9, 0x31, 0xcc, 0x16, 0xb7, 0x3e, 0xe7, 0xc6, 0x7a, 0x00, 0x85, 0xa7,
-	0xc4, 0xb2, 0x89, 0x8f, 0x3e, 0x01, 0x31, 0x9c, 0x4f, 0xf9, 0x5e, 0xdb, 0x9f, 0xdd, 0x79, 0x9c,
-	0xfc, 0xf9, 0xe3, 0x67, 0x24, 0x08, 0xac, 0x31, 0x19, 0xcc, 0xa7, 0x04, 0x33, 0x08, 0xfa, 0x35,
-	0x94, 0x87, 0x74, 0x32, 0xf5, 0x49, 0xc0, 0x02, 0x67, 0xd9, 0x8a, 0xbb, 0x37, 0x56, 0xb4, 0xd7,
-	0x18, 0x9c, 0x5e, 0x50, 0x6f, 0xc2, 0x56, 0xdb, 0x9d, 0x05, 0x21, 0xf1, 0xdb, 0xd4, 0x1b, 0x39,
-	0x63, 0xb4, 0x0f, 0xc5, 0x11, 0x75, 0x6d, 0xe2, 0x07, 0x8a, 0xa0, 0xe5, 0x1a, 0xe5, 0xcf, 0xe4,
-	0x75, 0xb0, 0x03, 0xe6, 0x68, 0x89, 0xaf, 0x2f, 0x6b, 0x19, 0x9c, 0xc0, 0xea, 0x7f, 0xce, 0x42,
-	0x81, 0x7b, 0xd0, 0x2e, 0x64, 0x1d, 0x9b, 0x53, 0xd4, 0x2a, 0x5c, 0x5d, 0xd6, 0xb2, 0xdd, 0x0e,
-	0xce, 0x3a, 0x36, 0xba, 0x0d, 0x79, 0xd7, 0x3a, 0x25, 0x6e, 0x4c, 0x0e, 0x9f, 0xa0, 0x0f, 0xa1,
-	0xe4, 0x13, 0xcb, 0x36, 0xa9, 0xe7, 0xce, 0x19, 0x25, 0x12, 0x96, 0x22, 0x43, 0xcf, 0x73, 0xe7,
-	0xe8, 0x47, 0x80, 0x9c, 0xb1, 0x47, 0x7d, 0x62, 0x4e, 0x89, 0x3f, 0x71, 0xd8, 0xdf, 0x06, 0x8a,
-	0xc8, 0x50, 0x3b, 0xdc, 0x73, 0xbc, 0x76, 0xa0, 0xfb, 0xb0, 0x15, 0xc3, 0x6d, 0xe2, 0x92, 0x90,
-	0x28, 0x79, 0x86, 0xac, 0x70, 0x63, 0x87, 0xd9, 0xd0, 0x3e, 0xdc, 0xb6, 0x9d, 0xc0, 0x3a, 0x75,
-	0x89, 0x19, 0x92, 0xc9, 0xd4, 0x74, 0x3c, 0x9b, 0xbc, 0x22, 0x81, 0x52, 0x60, 0x58, 0x14, 0xfb,
-	0x06, 0x64, 0x32, 0xed, 0x72, 0x0f, 0xda, 0x85, 0xc2, 0xd4, 0x9a, 0x05, 0xc4, 0x56, 0x8a, 0x0c,
-	0x13, 0xcf, 0x22, 0x96, 0x78, 0x05, 0x04, 0x8a, 0x7c, 0x9d, 0xa5, 0x0e, 0x73, 0x24, 0x2c, 0xc5,
-	0xb0, 0xfa, 0xbf, 0xb3, 0x50, 0xe0, 0x1e, 0xf4, 0xf1, 0x8a, 0xa5, 0x4a, 0x6b, 0x37, 0x42, 0xfd,
-	0xf3, 0xb2, 0x26, 0x71, 0x5f, 0xb7, 0x93, 0x62, 0x0d, 0x81, 0x98, 0xaa, 0x28, 0x36, 0x46, 0x77,
-	0xa1, 0x64, 0xd9, 0x76, 0x94, 0x3d, 0x12, 0x28, 0x39, 0x2d, 0xd7, 0x28, 0xe1, 0xb5, 0x01, 0xfd,
-	0x6c, 0xb3, 0x1a, 0xc4, 0xeb, 0xf5, 0xf3, 0xbe, 0x32, 0x88, 0x52, 0x31, 0x24, 0x7e, 0x5c, 0xc1,
-	0x79, 0xb6, 0x9f, 0x14, 0x19, 0x58, 0xfd, 0xde, 0x83, 0xca, 0xc4, 0x7a, 0x65, 0x06, 0xe4, 0x0f,
-	0x33, 0xe2, 0x0d, 0x09, 0xa3, 0x2b, 0x87, 0xcb, 0x13, 0xeb, 0x55, 0x3f, 0x36, 0xa1, 0x2a, 0x80,
-	0xe3, 0x85, 0x3e, 0xb5, 0x67, 0x43, 0xe2, 0xc7, 0x5c, 0xa5, 0x2c, 0xe8, 0x27, 0x20, 0x31, 0xb2,
-	0x4d, 0xc7, 0x56, 0x24, 0x4d, 0x68, 0x88, 0x2d, 0x35, 0x3e, 0x78, 0x91, 0x51, 0xcd, 0xce, 0x9d,
-	0x0c, 0x71, 0x91, 0x61, 0xbb, 0x36, 0xfa, 0x25, 0xa8, 0xc1, 0x4b, 0x27, 0x4a, 0x14, 0x8f, 0x14,
-	0x3a, 0xd4, 0x33, 0x7d, 0x32, 0xa1, 0xe7, 0x96, 0x1b, 0x28, 0x25, 0xb6, 0x8d, 0x12, 0x21, 0xba,
-	0x29, 0x00, 0x8e, 0xfd, 0xf5, 0x1e, 0xe4, 0x59, 0xc4, 0x28, 0x8b, 0xbc, 0x58, 0xe3, 0xee, 0x8d,
-	0x67, 0xe8, 0x31, 0xe4, 0x47, 0x8e, 0x4b, 0x02, 0x25, 0xcb, 0x72, 0x88, 0x52, 0x95, 0xee, 0xb8,
-	0xa4, 0xeb, 0x8d, 0x68, 0x9c, 0x45, 0x0e, 0xab, 0x9f, 0x40, 0x99, 0x05, 0x3c, 0x99, 0xda, 0x56,
-	0x48, 0xfe, 0x67, 0x61, 0x2f, 0x45, 0x90, 0x12, 0xcf, 0x2a, 0xe9, 0x42, 0x2a, 0xe9, 0x7b, 0xb1,
-	0x1e, 0xf0, 0xee, 0xde, 0xbd, 0x19, 0x2f, 0x25, 0x08, 0x08, 0xc4, 0xc0, 0xf9, 0x9a, 0xb0, 0x7e,
-	0xca, 0x61, 0x36, 0x46, 0x1a, 0x94, 0xaf, 0x37, 0xd1, 0x16, 0x4e, 0x9b, 0xd0, 0x47, 0x00, 0x13,
-	0x6a, 0x3b, 0x23, 0x87, 0xd8, 0x66, 0xc0, 0x0a, 0x20, 0x87, 0x4b, 0x89, 0xa5, 0x1f, 0x49, 0xdc,
-	0xca, 0xed, 0x05, 0x4a, 0x59, 0x13, 0x1a, 0x79, 0xbc, 0x5a, 0x61, 0x04, 0x68, 0x3f, 0x05, 0x38,
-	0x9d, 0x2b, 0x15, 0x96, 0xe2, 0x0f, 0x92, 0x14, 0xf7, 0xcf, 0xa8, 0x1f, 0x76, 0x3b, 0xeb, 0x15,
-	0xad, 0x39, 0x52, 0xa2, 0x0e, 0x8a, 0xba, 0xd2, 0x8e, 0xdb, 0x2f, 0x99, 0xa2, 0x06, 0x14, 0x1d,
-	0xef, 0xdc, 0x72, 0x9d, 0xb8, 0xe9, 0x5a, 0xdb, 0x57, 0x97, 0x35, 0xc0, 0xd6, 0x45, 0x97, 0x5b,
-	0x71, 0xe2, 0x8e, 0x84, 0xd5, 0xa3, 0x1b, 0xfa, 0x20, 0xb1, 0x50, 0x5b, 0x1e, 0x4d, 0x6b, 0xc3,
-	0x3e, 0x14, 0x13, 0xe1, 0x8d, 0x4a, 0x66, 0xa3, 0x59, 0x9f, 0x93, 0x61, 0x48, 0x57, 0x92, 0x16,
-	0xc3, 0x90, 0x0a, 0xd2, 0xaa, 0xda, 0x81, 0x91, 0xb1, 0x9a, 0xa3, 0x27, 0x00, 0xa7, 0x2e, 0x1d,
-	0xbe, 0x34, 0x19, 0xcd, 0x5b, 0x11, 0x15, 0x2d, 0xf9, 0xea, 0xb2, 0x56, 0xc1, 0xd6, 0x45, 0x2b,
-	0x72, 0xf4, 0x9d, 0xaf, 0x09, 0x2e, 0x9d, 0x26, 0x43, 0xf4, 0x63, 0x28, 0x30, 0x7b, 0x22, 0x15,
-	0xb7, 0xd6, 0xbb, 0x33, 0x7b, 0xaa, 0x20, 0x62, 0x60, 0x74, 0xb0, 0x60, 0x3e, 0x71, 0x1d, 0xef,
-	0xa5, 0x19, 0x5a, 0xfe, 0x98, 0x84, 0xca, 0x0e, 0xbf, 0x31, 0x62, 0xeb, 0x80, 0x19, 0xa3, 0xbc,
-	0xba, 0x74, 0x68, 0xb9, 0xe6, 0xc8, 0xb5, 0xc6, 0x81, 0xf2, 0x5d, 0x91, 0x25, 0x16, 0x98, 0xed,
-	0x20, 0x32, 0xfd, 0x42, 0xfc, 0xd3, 0x37, 0xb5, 0x4c, 0xdd, 0x83, 0xd2, 0x6a, 0xa7, 0xa8, 0x6a,
-	0xe9, 0x68, 0x14, 0x90, 0x90, 0x95, 0x58, 0x0e, 0xc7, 0xb3, 0x55, 0xe1, 0x64, 0x59, 0x72, 0x79,
-	0xe1, 0x20, 0x10, 0xcf, 0xac, 0xe0, 0x8c, 0x15, 0x53, 0x05, 0xb3, 0x71, 0x24, 0x15, 0x17, 0xc4,
-	0x7a, 0x69, 0x32, 0x07, 0x2f, 0x25, 0x29, 0x32, 0x3c, 0xb5, 0x82, 0xb3, 0x78, 0xbf, 0x5f, 0x41,
-	0x81, 0xf3, 0x8a, 0x3e, 0x07, 0x69, 0x48, 0x67, 0x5e, 0xb8, 0xbe, 0x4e, 0x76, 0xd2, 0x6a, 0xc4,
-	0x3c, 0xf1, 0xd9, 0x57, 0xc0, 0xfa, 0x01, 0x14, 0x63, 0x17, 0x7a, 0xb8, 0x92, 0x4a, 0xb1, 0x75,
-	0xe7, 0x5a, 0x39, 0x6d, 0xde, 0x2f, 0xe7, 0x96, 0x3b, 0xe3, 0x3f, 0x2f, 0x62, 0x3e, 0xa9, 0xff,
-	0x55, 0x80, 0x22, 0x8e, 0xd2, 0x16, 0x84, 0xa9, 0x9b, 0x29, 0xbf, 0x71, 0x33, 0xad, 0x7b, 0x38,
-	0xbb, 0xd1, 0xc3, 0x49, 0x1b, 0xe6, 0x52, 0x6d, 0xb8, 0x66, 0x4e, 0x7c, 0x27, 0x73, 0xf9, 0x77,
-	0x30, 0x57, 0x48, 0x31, 0xf7, 0x10, 0xb6, 0x47, 0x3e, 0x9d, 0xb0, 0xbb, 0x87, 0xfa, 0x96, 0x3f,
-	0x8f, 0x85, 0x72, 0x2b, 0xb2, 0x0e, 0x12, 0xe3, 0x26, 0xc1, 0xd2, 0x26, 0xc1, 0x75, 0x13, 0x24,
-	0x4c, 0x82, 0x29, 0xf5, 0x02, 0xf2, 0xde, 0x33, 0x21, 0x10, 0x6d, 0x2b, 0xb4, 0xd8, 0x89, 0x2a,
-	0x98, 0x8d, 0xd1, 0x23, 0x10, 0x87, 0xd4, 0xe6, 0xe7, 0xd9, 0x4e, 0x97, 0xa0, 0xee, 0xfb, 0xd4,
-	0x6f, 0x53, 0x9b, 0x60, 0x06, 0xa8, 0x4f, 0x41, 0xee, 0xd0, 0x0b, 0xcf, 0xa5, 0x96, 0x7d, 0xec,
-	0xd3, 0x71, 0x74, 0x41, 0xbc, 0x57, 0xe8, 0x3a, 0x50, 0x9c, 0x31, 0x29, 0x4c, 0xa4, 0xee, 0xc1,
-	0xa6, 0x34, 0x5d, 0x0f, 0xc4, 0x75, 0x33, 0x69, 0xb6, 0x78, 0x69, 0xfd, 0xef, 0x02, 0xa8, 0xef,
-	0x47, 0xa3, 0x2e, 0x94, 0x39, 0xd2, 0x4c, 0xbd, 0x89, 0x1a, 0x3f, 0x64, 0x23, 0xa6, 0x8a, 0x30,
-	0x5b, 0x8d, 0xdf, 0x79, 0xa1, 0xa6, 0xc4, 0x21, 0xf7, 0xc3, 0xc4, 0xe1, 0x11, 0x6c, 0x71, 0x01,
-	0x48, 0x9e, 0x0f, 0xa2, 0x96, 0x6b, 0xe4, 0x5b, 0x59, 0x39, 0x83, 0x2b, 0xa7, 0xbc, 0xcd, 0x98,
-	0xbd, 0x5e, 0x00, 0xf1, 0xd8, 0xf1, 0xc6, 0xf5, 0x1a, 0xe4, 0xdb, 0x2e, 0x65, 0x09, 0x2b, 0xf8,
-	0xc4, 0x0a, 0xa8, 0x97, 0xf0, 0xc8, 0x67, 0x7b, 0x7f, 0xcb, 0x42, 0x39, 0xf5, 0xb4, 0x43, 0xfb,
-	0xb0, 0xdd, 0x3e, 0x3a, 0xe9, 0x0f, 0x74, 0x6c, 0xb6, 0x7b, 0xc6, 0x41, 0xf7, 0x50, 0xce, 0xa8,
-	0x77, 0x17, 0x4b, 0x4d, 0x99, 0xac, 0x41, 0x9b, 0xaf, 0xb6, 0x1a, 0xe4, 0xbb, 0x46, 0x47, 0xff,
-	0x9d, 0x2c, 0xa8, 0xb7, 0x17, 0x4b, 0x4d, 0x4e, 0x01, 0xf9, 0x15, 0xf8, 0x29, 0x54, 0x18, 0xc0,
-	0x3c, 0x39, 0xee, 0x34, 0x07, 0xba, 0x9c, 0x55, 0xd5, 0xc5, 0x52, 0xdb, 0xbd, 0x8e, 0x8b, 0x39,
-	0xbf, 0x0f, 0x45, 0xac, 0xff, 0xf6, 0x44, 0xef, 0x0f, 0xe4, 0x9c, 0xba, 0xbb, 0x58, 0x6a, 0x28,
-	0x05, 0x4c, 0x5a, 0xea, 0x21, 0x48, 0x58, 0xef, 0x1f, 0xf7, 0x8c, 0xbe, 0x2e, 0x8b, 0xea, 0xff,
-	0x2d, 0x96, 0xda, 0xad, 0x0d, 0x54, 0x5c, 0xa5, 0x3f, 0x85, 0x9d, 0x4e, 0xef, 0x4b, 0xe3, 0xa8,
-	0xd7, 0xec, 0x98, 0xc7, 0xb8, 0x77, 0x88, 0xf5, 0x7e, 0x5f, 0xce, 0xab, 0xb5, 0xc5, 0x52, 0xfb,
-	0x30, 0x85, 0xbf, 0x51, 0x74, 0x1f, 0x81, 0x78, 0xdc, 0x35, 0x0e, 0xe5, 0x82, 0x7a, 0x6b, 0xb1,
-	0xd4, 0x3e, 0x48, 0x41, 0x23, 0x52, 0xa3, 0x13, 0xb7, 0x8f, 0x7a, 0x7d, 0x5d, 0x2e, 0xde, 0x38,
-	0x31, 0x23, 0x7b, 0xef, 0xf7, 0x80, 0x6e, 0x3e, 0x7e, 0xd1, 0x03, 0x10, 0x8d, 0x9e, 0xa1, 0xcb,
-	0x19, 0x7e, 0xfe, 0x9b, 0x08, 0x83, 0x7a, 0x04, 0xd5, 0x21, 0x77, 0xf4, 0xd5, 0x17, 0xb2, 0xa0,
-	0xfe, 0xff, 0x62, 0xa9, 0xdd, 0xb9, 0x09, 0x3a, 0xfa, 0xea, 0x8b, 0x3d, 0x0a, 0xe5, 0x74, 0xe0,
-	0x3a, 0x48, 0xcf, 0xf4, 0x41, 0xb3, 0xd3, 0x1c, 0x34, 0xe5, 0x0c, 0xff, 0xa5, 0xc4, 0xfd, 0x8c,
-	0x84, 0x16, 0x6b, 0xc2, 0xbb, 0x90, 0x37, 0xf4, 0xe7, 0x3a, 0x96, 0x05, 0x75, 0x67, 0xb1, 0xd4,
-	0xb6, 0x12, 0x80, 0x41, 0xce, 0x89, 0x8f, 0xaa, 0x50, 0x68, 0x1e, 0x7d, 0xd9, 0x7c, 0xd1, 0x97,
-	0xb3, 0x2a, 0x5a, 0x2c, 0xb5, 0xed, 0xc4, 0xdd, 0x74, 0x2f, 0xac, 0x79, 0xb0, 0xf7, 0x1f, 0x01,
-	0x2a, 0xe9, 0x0b, 0x1f, 0x55, 0x41, 0x3c, 0xe8, 0x1e, 0xe9, 0xc9, 0x76, 0x69, 0x5f, 0x34, 0x46,
-	0x0d, 0x28, 0x75, 0xba, 0x58, 0x6f, 0x0f, 0x7a, 0xf8, 0x45, 0x72, 0x96, 0x34, 0xa8, 0xe3, 0xf8,
-	0xac, 0xc0, 0xe7, 0xe8, 0xe7, 0x50, 0xe9, 0xbf, 0x78, 0x76, 0xd4, 0x35, 0x7e, 0x63, 0xb2, 0x88,
-	0x59, 0xf5, 0xd1, 0x62, 0xa9, 0xdd, 0xdb, 0x00, 0x93, 0xa9, 0x4f, 0x86, 0x56, 0x48, 0xec, 0x3e,
-	0xbf, 0x83, 0x22, 0xa7, 0x24, 0xa0, 0x36, 0xec, 0x24, 0x4b, 0xd7, 0x9b, 0xe5, 0xd4, 0x4f, 0x17,
-	0x4b, 0xed, 0xe3, 0xef, 0x5d, 0xbf, 0xda, 0x5d, 0x12, 0xd0, 0x03, 0x28, 0xc6, 0x41, 0x92, 0x4a,
-	0x4a, 0x2f, 0x8d, 0x17, 0xec, 0xfd, 0x45, 0x80, 0xd2, 0x4a, 0xae, 0x22, 0xc2, 0x8d, 0x9e, 0xa9,
-	0x63, 0xdc, 0xc3, 0x09, 0x03, 0x2b, 0xa7, 0x41, 0xd9, 0x10, 0xdd, 0x83, 0xe2, 0xa1, 0x6e, 0xe8,
-	0xb8, 0xdb, 0x4e, 0x1a, 0x63, 0x05, 0x39, 0x24, 0x1e, 0xf1, 0x9d, 0x21, 0xfa, 0x04, 0x2a, 0x46,
-	0xcf, 0xec, 0x9f, 0xb4, 0x9f, 0x26, 0x47, 0x67, 0xfb, 0xa7, 0x42, 0xf5, 0x67, 0xc3, 0x33, 0xc6,
-	0xe7, 0x5e, 0xd4, 0x43, 0xcf, 0x9b, 0x47, 0xdd, 0x0e, 0x87, 0xe6, 0x54, 0x65, 0xb1, 0xd4, 0x6e,
-	0xaf, 0xa0, 0xf1, 0xfb, 0x24, 0xc2, 0xee, 0xd9, 0x50, 0xfd, 0x7e, 0x61, 0x42, 0x1a, 0x14, 0x9a,
-	0xc7, 0xc7, 0xba, 0xd1, 0x49, 0xfe, 0x7e, 0xed, 0x6b, 0x4e, 0xa7, 0xc4, 0xb3, 0x23, 0xc4, 0x41,
-	0x0f, 0x1f, 0xea, 0x83, 0xe4, 0xe7, 0xd7, 0x88, 0x03, 0x1a, 0x3d, 0x00, 0x5a, 0x8d, 0xd7, 0xdf,
-	0x56, 0x33, 0x6f, 0xbe, 0xad, 0x66, 0x5e, 0x5f, 0x55, 0x85, 0x37, 0x57, 0x55, 0xe1, 0x5f, 0x57,
-	0xd5, 0xcc, 0x77, 0x57, 0x55, 0xe1, 0x8f, 0x6f, 0xab, 0x99, 0x6f, 0xde, 0x56, 0x85, 0x37, 0x6f,
-	0xab, 0x99, 0x7f, 0xbc, 0xad, 0x66, 0x4e, 0x0b, 0x4c, 0xd4, 0x3e, 0xff, 0x6f, 0x00, 0x00, 0x00,
-	0xff, 0xff, 0x64, 0xa1, 0x2b, 0x55, 0x11, 0x0f, 0x00, 0x00,
+	0x15, 0x16, 0x25, 0xea, 0xd7, 0x93, 0xec, 0xa5, 0x27, 0x89, 0xcb, 0x32, 0x59, 0x89, 0x51, 0x92,
+	0x8d, 0xd6, 0xd8, 0x26, 0xe9, 0xee, 0xb6, 0x45, 0x8b, 0xb6, 0x80, 0x7e, 0xd0, 0x8e, 0x50, 0x47,
+	0x72, 0x47, 0x72, 0xb6, 0xd9, 0x43, 0x09, 0x5a, 0x1c, 0xc9, 0x44, 0x28, 0x8e, 0x4a, 0x52, 0x76,
+	0xb4, 0x7f, 0x82, 0x4e, 0x3d, 0xf6, 0x22, 0x60, 0x81, 0x9e, 0xfa, 0x9f, 0xe4, 0x98, 0xf6, 0x50,
+	0x14, 0x3d, 0x18, 0x5d, 0xe7, 0xb2, 0xc7, 0xfe, 0x05, 0x45, 0x31, 0x33, 0xa4, 0x44, 0xd9, 0x9b,
+	0x45, 0x0e, 0x7b, 0xd2, 0xcc, 0x7b, 0x1f, 0xdf, 0xcc, 0x7c, 0xf3, 0xbd, 0x6f, 0x04, 0xc5, 0x13,
+	0x32, 0x7d, 0x34, 0xf5, 0x69, 0x48, 0x51, 0x81, 0xff, 0x0c, 0xa9, 0xab, 0xdd, 0xf3, 0xc9, 0x94,
+	0x06, 0x8f, 0xf9, 0xfc, 0x64, 0x36, 0x7a, 0x3c, 0xa6, 0x63, 0xca, 0x27, 0x7c, 0x24, 0xe0, 0xb5,
+	0x29, 0x64, 0x9f, 0x12, 0xd7, 0xa5, 0xa8, 0x0a, 0x25, 0x9b, 0x9c, 0x39, 0x43, 0x62, 0x7a, 0xd6,
+	0x84, 0xa8, 0x92, 0x2e, 0xd5, 0x8b, 0x18, 0x44, 0xa8, 0x6b, 0x4d, 0x08, 0x03, 0x0c, 0x5d, 0x87,
+	0x78, 0xa1, 0x00, 0xa4, 0x05, 0x40, 0x84, 0x38, 0xe0, 0x01, 0x6c, 0x47, 0x80, 0x33, 0xe2, 0x07,
+	0x0e, 0xf5, 0xd4, 0x0c, 0xc7, 0x6c, 0x89, 0xe8, 0x73, 0x11, 0xac, 0x05, 0x90, 0x7b, 0x4a, 0x2c,
+	0x9b, 0xf8, 0xe8, 0x63, 0x90, 0xc3, 0xf9, 0x54, 0xac, 0xb5, 0xfd, 0xe9, 0xad, 0x47, 0xf1, 0xce,
+	0x1f, 0x3d, 0x23, 0x41, 0x60, 0x8d, 0xc9, 0x60, 0x3e, 0x25, 0x98, 0x43, 0xd0, 0x6f, 0xa1, 0x34,
+	0xa4, 0x93, 0xa9, 0x4f, 0x02, 0x5e, 0x38, 0xcd, 0xbf, 0xb8, 0x73, 0xed, 0x8b, 0xd6, 0x1a, 0x83,
+	0x93, 0x1f, 0xd4, 0x1a, 0xb0, 0xd5, 0x72, 0x67, 0x41, 0x48, 0xfc, 0x16, 0xf5, 0x46, 0xce, 0x18,
+	0x3d, 0x81, 0xfc, 0x88, 0xba, 0x36, 0xf1, 0x03, 0x55, 0xd2, 0x33, 0xf5, 0xd2, 0xa7, 0xca, 0xba,
+	0xd8, 0x3e, 0x4f, 0x34, 0xe5, 0xd7, 0x17, 0xd5, 0x14, 0x8e, 0x61, 0xb5, 0xbf, 0xa6, 0x21, 0x27,
+	0x32, 0x68, 0x17, 0xd2, 0x8e, 0x2d, 0x28, 0x6a, 0xe6, 0x2e, 0x2f, 0xaa, 0xe9, 0x4e, 0x1b, 0xa7,
+	0x1d, 0x1b, 0xdd, 0x84, 0xac, 0x6b, 0x9d, 0x10, 0x37, 0x22, 0x47, 0x4c, 0xd0, 0x6d, 0x28, 0xfa,
+	0xc4, 0xb2, 0x4d, 0xea, 0xb9, 0x73, 0x4e, 0x49, 0x01, 0x17, 0x58, 0xa0, 0xe7, 0xb9, 0x73, 0xf4,
+	0x13, 0x40, 0xce, 0xd8, 0xa3, 0x3e, 0x31, 0xa7, 0xc4, 0x9f, 0x38, 0x7c, 0xb7, 0x81, 0x2a, 0x73,
+	0xd4, 0x8e, 0xc8, 0x1c, 0xad, 0x13, 0xe8, 0x1e, 0x6c, 0x45, 0x70, 0x9b, 0xb8, 0x24, 0x24, 0x6a,
+	0x96, 0x23, 0xcb, 0x22, 0xd8, 0xe6, 0x31, 0xf4, 0x04, 0x6e, 0xda, 0x4e, 0x60, 0x9d, 0xb8, 0xc4,
+	0x0c, 0xc9, 0x64, 0x6a, 0x3a, 0x9e, 0x4d, 0x5e, 0x91, 0x40, 0xcd, 0x71, 0x2c, 0x8a, 0x72, 0x03,
+	0x32, 0x99, 0x76, 0x44, 0x06, 0xed, 0x42, 0x6e, 0x6a, 0xcd, 0x02, 0x62, 0xab, 0x79, 0x8e, 0x89,
+	0x66, 0x8c, 0x25, 0xa1, 0x80, 0x40, 0x55, 0xae, 0xb2, 0xd4, 0xe6, 0x89, 0x98, 0xa5, 0x08, 0x56,
+	0xfb, 0x6f, 0x1a, 0x72, 0x22, 0x83, 0x3e, 0x5a, 0xb1, 0x54, 0x6e, 0xee, 0x32, 0xd4, 0xbf, 0x2f,
+	0xaa, 0x05, 0x91, 0xeb, 0xb4, 0x13, 0xac, 0x21, 0x90, 0x13, 0x8a, 0xe2, 0x63, 0x74, 0x07, 0x8a,
+	0x96, 0x6d, 0xb3, 0xdb, 0x23, 0x81, 0x9a, 0xd1, 0x33, 0xf5, 0x22, 0x5e, 0x07, 0xd0, 0x2f, 0x36,
+	0xd5, 0x20, 0x5f, 0xd5, 0xcf, 0xbb, 0x64, 0xc0, 0xae, 0x62, 0x48, 0xfc, 0x48, 0xc1, 0x59, 0xbe,
+	0x5e, 0x81, 0x05, 0xb8, 0x7e, 0xef, 0x42, 0x79, 0x62, 0xbd, 0x32, 0x03, 0xf2, 0xa7, 0x19, 0xf1,
+	0x86, 0x84, 0xd3, 0x95, 0xc1, 0xa5, 0x89, 0xf5, 0xaa, 0x1f, 0x85, 0x50, 0x05, 0xc0, 0xf1, 0x42,
+	0x9f, 0xda, 0xb3, 0x21, 0xf1, 0x23, 0xae, 0x12, 0x11, 0xf4, 0x33, 0x28, 0x70, 0xb2, 0x4d, 0xc7,
+	0x56, 0x0b, 0xba, 0x54, 0x97, 0x9b, 0x5a, 0x74, 0xf0, 0x3c, 0xa7, 0x9a, 0x9f, 0x3b, 0x1e, 0xe2,
+	0x3c, 0xc7, 0x76, 0x6c, 0xf4, 0x6b, 0xd0, 0x82, 0x97, 0x0e, 0xbb, 0x28, 0x51, 0x29, 0x74, 0xa8,
+	0x67, 0xfa, 0x64, 0x42, 0xcf, 0x2c, 0x37, 0x50, 0x8b, 0x7c, 0x19, 0x95, 0x21, 0x3a, 0x09, 0x00,
+	0x8e, 0xf2, 0xb5, 0x1e, 0x64, 0x79, 0x45, 0x76, 0x8b, 0x42, 0xac, 0x51, 0xf7, 0x46, 0x33, 0xf4,
+	0x08, 0xb2, 0x23, 0xc7, 0x25, 0x81, 0x9a, 0xe6, 0x77, 0x88, 0x12, 0x4a, 0x77, 0x5c, 0xd2, 0xf1,
+	0x46, 0x34, 0xba, 0x45, 0x01, 0xab, 0x1d, 0x43, 0x89, 0x17, 0x3c, 0x9e, 0xda, 0x56, 0x48, 0x7e,
+	0xb0, 0xb2, 0x17, 0x32, 0x14, 0xe2, 0xcc, 0xea, 0xd2, 0xa5, 0xc4, 0xa5, 0x23, 0x90, 0x03, 0xe7,
+	0x2b, 0xc2, 0x7b, 0x24, 0x83, 0xf9, 0x18, 0x7d, 0x08, 0x30, 0xa1, 0xb6, 0x33, 0x72, 0x88, 0x6d,
+	0x06, 0xfc, 0xca, 0x32, 0xb8, 0x18, 0x47, 0xfa, 0xe8, 0x09, 0x94, 0x56, 0xe9, 0x93, 0xb9, 0x5a,
+	0xe6, 0x9c, 0x7f, 0x10, 0x73, 0xde, 0x3f, 0xa5, 0x7e, 0xd8, 0x69, 0xe3, 0x55, 0x89, 0xe6, 0x9c,
+	0x49, 0x3a, 0xb6, 0x27, 0x46, 0xec, 0x86, 0xa4, 0x9f, 0x93, 0x61, 0x48, 0x57, 0x8d, 0x1f, 0xc1,
+	0x90, 0x06, 0x85, 0x95, 0x26, 0x80, 0x6f, 0x60, 0x35, 0x47, 0x3f, 0x85, 0x5c, 0xd3, 0xa5, 0xc3,
+	0x97, 0x71, 0x7f, 0xdc, 0x58, 0x17, 0xe3, 0xf1, 0x04, 0x0b, 0x11, 0x90, 0xd9, 0x64, 0x30, 0x9f,
+	0xb8, 0x8e, 0xf7, 0xd2, 0x0c, 0x2d, 0x7f, 0x4c, 0x42, 0x75, 0x47, 0xd8, 0x64, 0x14, 0x1d, 0xf0,
+	0x20, 0xda, 0x8b, 0xcc, 0x51, 0x58, 0xdd, 0xee, 0x75, 0x72, 0x13, 0xee, 0xa8, 0x43, 0xe9, 0xaa,
+	0x7b, 0x6c, 0xe1, 0x64, 0x88, 0x99, 0xf7, 0x8a, 0x27, 0x2f, 0x50, 0x4b, 0xba, 0x54, 0xcf, 0xae,
+	0x69, 0xe9, 0x06, 0xe8, 0x31, 0xc0, 0x09, 0xdb, 0x9f, 0xc9, 0x6f, 0x60, 0x8b, 0xe5, 0x9b, 0xca,
+	0xe5, 0x45, 0xb5, 0x8c, 0xad, 0x73, 0xbe, 0xf1, 0xbe, 0xf3, 0x15, 0xc1, 0xc5, 0x93, 0x78, 0xc8,
+	0xd6, 0x74, 0xe9, 0xd0, 0x72, 0xcd, 0x91, 0x6b, 0x8d, 0x03, 0xf5, 0xdb, 0x3c, 0x5f, 0x14, 0x78,
+	0x6c, 0x9f, 0x85, 0x90, 0xca, 0xcc, 0x83, 0x19, 0x92, 0x1d, 0x39, 0x4f, 0x3c, 0x45, 0x75, 0xc8,
+	0x3b, 0xde, 0x99, 0xe5, 0x3a, 0x91, 0xdf, 0x34, 0xb7, 0x2f, 0x2f, 0xaa, 0x80, 0xad, 0xf3, 0x8e,
+	0x88, 0xe2, 0x38, 0xcd, 0xc8, 0xf2, 0xe8, 0x86, 0x35, 0x16, 0x78, 0xa9, 0x2d, 0x8f, 0x26, 0x6c,
+	0xf1, 0x57, 0xf2, 0x5f, 0xbe, 0xae, 0xa6, 0x6a, 0x1e, 0x14, 0x57, 0xa4, 0x33, 0x31, 0x9d, 0x5a,
+	0xc1, 0x29, 0x17, 0x53, 0x19, 0xf3, 0x31, 0x53, 0x32, 0x1d, 0x8d, 0x02, 0x12, 0x72, 0xd9, 0x65,
+	0x70, 0x34, 0x5b, 0x09, 0x2f, 0xcd, 0x69, 0x11, 0xc2, 0xbb, 0x0d, 0xc5, 0x73, 0x62, 0xbd, 0x34,
+	0x79, 0x11, 0xc1, 0x68, 0x81, 0x05, 0x9e, 0x5a, 0xc1, 0x69, 0xb4, 0xde, 0x6f, 0x20, 0x27, 0x14,
+	0x83, 0x3e, 0x83, 0xc2, 0x90, 0xce, 0xbc, 0x70, 0xfd, 0x9c, 0xec, 0x24, 0xdd, 0x88, 0x67, 0x22,
+	0x19, 0xac, 0x80, 0xb5, 0x7d, 0xc8, 0x47, 0x29, 0xf4, 0x60, 0x65, 0x95, 0x72, 0xf3, 0xd6, 0x15,
+	0xf5, 0x6e, 0xbe, 0x2f, 0x67, 0x96, 0x3b, 0x13, 0x1b, 0x95, 0xb1, 0x98, 0xd4, 0xfe, 0x2e, 0x41,
+	0x1e, 0x33, 0x41, 0x06, 0x61, 0xe2, 0x65, 0xca, 0x6e, 0xbc, 0x4c, 0xeb, 0x1e, 0x4e, 0x6f, 0xf4,
+	0x70, 0xdc, 0x86, 0x99, 0x44, 0x1b, 0xae, 0x59, 0x92, 0xbf, 0x93, 0xa5, 0x6c, 0x82, 0xa5, 0x98,
+	0xe5, 0x5c, 0x82, 0xe5, 0x07, 0xb0, 0x3d, 0xf2, 0xe9, 0x84, 0xbf, 0x3d, 0xd4, 0xb7, 0xfc, 0x79,
+	0x64, 0x94, 0x5b, 0x2c, 0x3a, 0x88, 0x83, 0x9b, 0x04, 0x17, 0x36, 0x09, 0xae, 0x99, 0x50, 0xc0,
+	0x24, 0x98, 0x52, 0x2f, 0x20, 0xef, 0x3c, 0x13, 0x02, 0xd9, 0xb6, 0x42, 0x8b, 0x9f, 0xa8, 0x8c,
+	0xf9, 0x18, 0x3d, 0x04, 0x79, 0x48, 0x6d, 0x71, 0x9e, 0xed, 0x64, 0x37, 0x1a, 0xbe, 0x4f, 0xfd,
+	0x16, 0xb5, 0x09, 0xe6, 0x80, 0xda, 0x14, 0x94, 0x36, 0x3d, 0xf7, 0x5c, 0x6a, 0xd9, 0x47, 0x3e,
+	0x1d, 0xb3, 0x07, 0xe2, 0x9d, 0x46, 0xd7, 0x86, 0xfc, 0x8c, 0x5b, 0x61, 0x6c, 0x75, 0xf7, 0x37,
+	0xbb, 0xf1, 0x6a, 0x21, 0xe1, 0x9b, 0xb1, 0x8d, 0x44, 0x9f, 0xd6, 0xfe, 0x29, 0x81, 0xf6, 0x6e,
+	0x34, 0xea, 0x40, 0x49, 0x20, 0xcd, 0xc4, 0x7f, 0xa2, 0xfa, 0xfb, 0x2c, 0xc4, 0x8d, 0x00, 0x66,
+	0xab, 0xf1, 0x77, 0x3e, 0xa8, 0x09, 0xdb, 0xcb, 0xbc, 0x9f, 0xed, 0x3d, 0x84, 0x2d, 0xe1, 0x08,
+	0xf1, 0xdf, 0x07, 0x59, 0xcf, 0xd4, 0xb3, 0xcd, 0xb4, 0x92, 0xc2, 0xe5, 0x13, 0xd1, 0x66, 0x3c,
+	0x5e, 0xcb, 0x81, 0x7c, 0xe4, 0x78, 0xe3, 0x5a, 0x15, 0xb2, 0x2d, 0x97, 0xf2, 0x0b, 0xcb, 0xf9,
+	0xc4, 0x0a, 0xa8, 0x17, 0xf3, 0x28, 0x66, 0x7b, 0xff, 0x48, 0x43, 0x29, 0xf1, 0xd7, 0x0e, 0x3d,
+	0x81, 0xed, 0xd6, 0xe1, 0x71, 0x7f, 0x60, 0x60, 0xb3, 0xd5, 0xeb, 0xee, 0x77, 0x0e, 0x94, 0x94,
+	0x76, 0x67, 0xb1, 0xd4, 0xd5, 0xc9, 0x1a, 0xb4, 0xf9, 0xaf, 0xad, 0x0a, 0xd9, 0x4e, 0xb7, 0x6d,
+	0xfc, 0x41, 0x91, 0xb4, 0x9b, 0x8b, 0xa5, 0xae, 0x24, 0x80, 0xe2, 0x09, 0xfc, 0x04, 0xca, 0x1c,
+	0x60, 0x1e, 0x1f, 0xb5, 0x1b, 0x03, 0x43, 0x49, 0x6b, 0xda, 0x62, 0xa9, 0xef, 0x5e, 0xc5, 0x45,
+	0x9c, 0xdf, 0x83, 0x3c, 0x36, 0x7e, 0x7f, 0x6c, 0xf4, 0x07, 0x4a, 0x46, 0xdb, 0x5d, 0x2c, 0x75,
+	0x94, 0x00, 0xc6, 0x2d, 0xf5, 0x00, 0x0a, 0xd8, 0xe8, 0x1f, 0xf5, 0xba, 0x7d, 0x43, 0x91, 0xb5,
+	0x1f, 0x2d, 0x96, 0xfa, 0x8d, 0x0d, 0x54, 0xa4, 0xd2, 0x9f, 0xc3, 0x4e, 0xbb, 0xf7, 0x45, 0xf7,
+	0xb0, 0xd7, 0x68, 0x9b, 0x47, 0xb8, 0x77, 0x80, 0x8d, 0x7e, 0x5f, 0xc9, 0x6a, 0xd5, 0xc5, 0x52,
+	0xbf, 0x9d, 0xc0, 0x5f, 0x13, 0xdd, 0x87, 0x20, 0x1f, 0x75, 0xba, 0x07, 0x4a, 0x4e, 0xbb, 0xb1,
+	0x58, 0xea, 0x1f, 0x24, 0xa0, 0x8c, 0x54, 0x76, 0xe2, 0xd6, 0x61, 0xaf, 0x6f, 0x28, 0xf9, 0x6b,
+	0x27, 0xe6, 0x64, 0xef, 0xfd, 0x11, 0xd0, 0xf5, 0x3f, 0xbf, 0xe8, 0x3e, 0xc8, 0xdd, 0x5e, 0xd7,
+	0x50, 0x52, 0xe2, 0xfc, 0xd7, 0x11, 0x5d, 0xea, 0x11, 0x54, 0x83, 0xcc, 0xe1, 0x97, 0x9f, 0x2b,
+	0x92, 0xf6, 0xe3, 0xc5, 0x52, 0xbf, 0x75, 0x1d, 0x74, 0xf8, 0xe5, 0xe7, 0x7b, 0x14, 0x4a, 0xc9,
+	0xc2, 0x35, 0x28, 0x3c, 0x33, 0x06, 0x8d, 0x76, 0x63, 0xd0, 0x50, 0x52, 0x62, 0x4b, 0x71, 0xfa,
+	0x19, 0x09, 0x2d, 0xde, 0x84, 0x77, 0x20, 0xdb, 0x35, 0x9e, 0x1b, 0x58, 0x91, 0xb4, 0x9d, 0xc5,
+	0x52, 0xdf, 0x8a, 0x01, 0x5d, 0x72, 0x46, 0x7c, 0x54, 0x81, 0x5c, 0xe3, 0xf0, 0x8b, 0xc6, 0x8b,
+	0xbe, 0x92, 0xd6, 0xd0, 0x62, 0xa9, 0x6f, 0xc7, 0xe9, 0x86, 0x7b, 0x6e, 0xcd, 0x83, 0xbd, 0xff,
+	0x49, 0x50, 0x4e, 0xbe, 0x71, 0xa8, 0x02, 0xf2, 0x7e, 0xe7, 0xd0, 0x88, 0x97, 0x4b, 0xe6, 0xd8,
+	0x18, 0xd5, 0xa1, 0xd8, 0xee, 0x60, 0xa3, 0x35, 0xe8, 0xe1, 0x17, 0xf1, 0x59, 0x92, 0xa0, 0xb6,
+	0xe3, 0x73, 0x81, 0xcf, 0xd1, 0x2f, 0xa1, 0xdc, 0x7f, 0xf1, 0xec, 0xb0, 0xd3, 0xfd, 0x9d, 0xc9,
+	0x2b, 0xa6, 0xb5, 0x87, 0x8b, 0xa5, 0x7e, 0x77, 0x03, 0x4c, 0xa6, 0x3e, 0x19, 0x5a, 0x21, 0xb1,
+	0xfb, 0xe2, 0x39, 0x66, 0xc9, 0x82, 0x84, 0x5a, 0xb0, 0x13, 0x7f, 0xba, 0x5e, 0x2c, 0xa3, 0x7d,
+	0xb2, 0x58, 0xea, 0x1f, 0x7d, 0xef, 0xf7, 0xab, 0xd5, 0x0b, 0x12, 0xba, 0x0f, 0xf9, 0xa8, 0x48,
+	0xac, 0xa4, 0xe4, 0xa7, 0xd1, 0x07, 0x7b, 0x7f, 0x93, 0xa0, 0xb8, 0xb2, 0x2b, 0x46, 0x78, 0xb7,
+	0x67, 0x1a, 0x18, 0xf7, 0x70, 0xcc, 0xc0, 0x2a, 0xd9, 0xa5, 0x7c, 0x88, 0xee, 0x42, 0xfe, 0xc0,
+	0xe8, 0x1a, 0xb8, 0xd3, 0x8a, 0x1b, 0x63, 0x05, 0x39, 0x20, 0x1e, 0xf1, 0x9d, 0x21, 0xfa, 0x18,
+	0xca, 0xdd, 0x9e, 0xd9, 0x3f, 0x6e, 0x3d, 0x8d, 0x8f, 0xce, 0xd7, 0x4f, 0x94, 0xea, 0xcf, 0x86,
+	0xa7, 0x9c, 0xcf, 0x3d, 0xd6, 0x43, 0xcf, 0x1b, 0x87, 0x9d, 0xb6, 0x80, 0x66, 0x34, 0x75, 0xb1,
+	0xd4, 0x6f, 0xae, 0xa0, 0xd1, 0x23, 0xcd, 0xb0, 0x7b, 0x36, 0x54, 0xbe, 0xdf, 0x98, 0x90, 0x0e,
+	0xb9, 0xc6, 0xd1, 0x91, 0xd1, 0x6d, 0xc7, 0xbb, 0x5f, 0xe7, 0x1a, 0xd3, 0x29, 0xf1, 0x6c, 0x86,
+	0xd8, 0xef, 0xe1, 0x03, 0x63, 0x10, 0x6f, 0x7e, 0x8d, 0xd8, 0xa7, 0xec, 0xbf, 0x50, 0xb3, 0xfe,
+	0xfa, 0x9b, 0x4a, 0xea, 0xcd, 0x37, 0x95, 0xd4, 0xeb, 0xcb, 0x8a, 0xf4, 0xe6, 0xb2, 0x22, 0xfd,
+	0xe7, 0xb2, 0x92, 0xfa, 0xf6, 0xb2, 0x22, 0xfd, 0xf9, 0x6d, 0x25, 0xf5, 0xf5, 0xdb, 0x8a, 0xf4,
+	0xe6, 0x6d, 0x25, 0xf5, 0xaf, 0xb7, 0x95, 0xd4, 0x49, 0x8e, 0x9b, 0xda, 0x67, 0xff, 0x0f, 0x00,
+	0x00, 0xff, 0xff, 0xd6, 0x0e, 0x8e, 0xa4, 0x11, 0x0f, 0x00, 0x00,
 }
 
 func (m *Hello) Marshal() (dAtA []byte, err error) {

+ 13 - 8
lib/protocol/bep.proto

@@ -96,27 +96,32 @@ message IndexUpdate {
 
 message FileInfo {
     option (gogoproto.goproto_stringer) = false;
+
+    // The field ordering here optimizes for struct size / alignment --
+    // large types come before smaller ones.
+
     string             name           = 1;
-    FileInfoType       type           = 2;
     int64              size           = 3;
-    uint32             permissions    = 4;
     int64              modified_s     = 5;
-    int32              modified_ns    = 11;
     uint64             modified_by    = 12 [(gogoproto.customtype) = "ShortID", (gogoproto.nullable) = false];
-    bool               deleted        = 6;
-    bool               invalid        = 7 [(gogoproto.customname) = "RawInvalid"];
-    bool               no_permissions = 8;
     Vector             version        = 9 [(gogoproto.nullable) = false];
     int64              sequence       = 10;
-    int32              block_size     = 13 [(gogoproto.customname) = "RawBlockSize"];
     repeated BlockInfo Blocks         = 16 [(gogoproto.nullable) = false];
     string             symlink_target = 17;
+    FileInfoType       type           = 2;
+    uint32             permissions    = 4;
+    int32              modified_ns    = 11;
+    int32              block_size     = 13 [(gogoproto.customname) = "RawBlockSize"];
 
     // The local_flags fields stores flags that are relevant to the local
     // host only. It is not part of the protocol, doesn't get sent or
     // received (we make sure to zero it), nonetheless we need it on our
     // struct and to be able to serialize it to/from the database.
     uint32 local_flags = 1000;
+
+    bool deleted        = 6;
+    bool invalid        = 7 [(gogoproto.customname) = "RawInvalid"];
+    bool no_permissions = 8;
 }
 
 enum FileInfoType {
@@ -129,9 +134,9 @@ enum FileInfoType {
 
 message BlockInfo {
     option (gogoproto.goproto_stringer) = false;
+    bytes  hash      = 3;
     int64  offset    = 1;
     int32  size      = 2;
-    bytes  hash      = 3;
     uint32 weak_hash = 4;
 }