Browse Source

functional/rpcpb: add "Member.SnapshotPath", more description

Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
Gyuho Lee 7 years ago
parent
commit
a0c0dc2f09
3 changed files with 248 additions and 172 deletions
  1. 6 0
      functional/rpcpb/member.go
  2. 221 165
      functional/rpcpb/rpc.pb.go
  3. 21 7
      functional/rpcpb/rpc.proto

+ 6 - 0
functional/rpcpb/member.go

@@ -227,3 +227,9 @@ func (m *Member) WriteHealthKey() error {
 	}
 	}
 	return nil
 	return nil
 }
 }
+
+// FetchSnapshot downloads a snapshot file from this member.
+func (m *Member) FetchSnapshot() error {
+
+	return nil
+}

+ 221 - 165
functional/rpcpb/rpc.pb.go

@@ -384,13 +384,25 @@ const (
 	// As always, after recovery, each member must be able to process client
 	// As always, after recovery, each member must be able to process client
 	// requests.
 	// requests.
 	FailureCase_RANDOM_DELAY_PEER_PORT_TX_RX_ALL FailureCase = 211
 	FailureCase_RANDOM_DELAY_PEER_PORT_TX_RX_ALL FailureCase = 211
-	// NO_FAIL_WITH_STRESS runs no-op failure injection that does not do
-	// anything against cluster for "failure-delay-ms" duration, while
-	// stressers are still sending requests.
+	// NO_FAIL_WITH_STRESS stops injecting failures while testing the
+	// consistency and correctness under pressure loads, for the duration of
+	// "failure-delay-ms". Goal is to ensure cluster be still making progress
+	// on recovery, and verify system does not deadlock following a sequence
+	// of failure injections.
+	// The expected behavior is that cluster remains fully operative in healthy
+	// condition. As always, after recovery, each member must be able to process
+	// client requests.
 	FailureCase_NO_FAIL_WITH_STRESS FailureCase = 300
 	FailureCase_NO_FAIL_WITH_STRESS FailureCase = 300
-	// NO_FAIL_WITH_NO_STRESS_FOR_LIVENESS runs no-op failure injection
-	// that does not do anything against cluster for "failure-delay-ms"
-	// duration, while all stressers are stopped.
+	// NO_FAIL_WITH_NO_STRESS_FOR_LIVENESS neither injects failures nor
+	// sends stressig client requests to the cluster, for the duration of
+	// "failure-delay-ms". Goal is to ensure cluster be still making progress
+	// on recovery, and verify system does not deadlock following a sequence
+	// of failure injections.
+	// The expected behavior is that cluster remains fully operative in healthy
+	// condition, and clients requests during liveness period succeed without
+	// errors.
+	// Note: this is how Google Chubby does failure injection testing
+	// https://static.googleusercontent.com/media/research.google.com/en//archive/paxos_made_live.pdf.
 	FailureCase_NO_FAIL_WITH_NO_STRESS_FOR_LIVENESS FailureCase = 301
 	FailureCase_NO_FAIL_WITH_NO_STRESS_FOR_LIVENESS FailureCase = 301
 	// FAILPOINTS injects failpoints to etcd server runtime, triggering panics
 	// FAILPOINTS injects failpoints to etcd server runtime, triggering panics
 	// in critical code paths.
 	// in critical code paths.
@@ -572,6 +584,8 @@ type Member struct {
 	// PeerTrustedCAData contains trusted CA file contents from this member's etcd server.
 	// PeerTrustedCAData contains trusted CA file contents from this member's etcd server.
 	PeerTrustedCAData string `protobuf:"bytes,505,opt,name=PeerTrustedCAData,proto3" json:"PeerTrustedCAData,omitempty" yaml:"peer-trusted-ca-data"`
 	PeerTrustedCAData string `protobuf:"bytes,505,opt,name=PeerTrustedCAData,proto3" json:"PeerTrustedCAData,omitempty" yaml:"peer-trusted-ca-data"`
 	PeerTrustedCAPath string `protobuf:"bytes,506,opt,name=PeerTrustedCAPath,proto3" json:"PeerTrustedCAPath,omitempty" yaml:"peer-trusted-ca-path"`
 	PeerTrustedCAPath string `protobuf:"bytes,506,opt,name=PeerTrustedCAPath,proto3" json:"PeerTrustedCAPath,omitempty" yaml:"peer-trusted-ca-path"`
+	// SnapshotPath is the snapshot file path to store or restore from.
+	SnapshotPath string `protobuf:"bytes,601,opt,name=SnapshotPath,proto3" json:"SnapshotPath,omitempty" yaml:"snapshot-path"`
 }
 }
 
 
 func (m *Member) Reset()                    { *m = Member{} }
 func (m *Member) Reset()                    { *m = Member{} }
@@ -1070,6 +1084,14 @@ func (m *Member) MarshalTo(dAtA []byte) (int, error) {
 		i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerTrustedCAPath)))
 		i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerTrustedCAPath)))
 		i += copy(dAtA[i:], m.PeerTrustedCAPath)
 		i += copy(dAtA[i:], m.PeerTrustedCAPath)
 	}
 	}
+	if len(m.SnapshotPath) > 0 {
+		dAtA[i] = 0xca
+		i++
+		dAtA[i] = 0x25
+		i++
+		i = encodeVarintRpc(dAtA, i, uint64(len(m.SnapshotPath)))
+		i += copy(dAtA[i:], m.SnapshotPath)
+	}
 	return i, nil
 	return i, nil
 }
 }
 
 
@@ -1702,6 +1724,10 @@ func (m *Member) Size() (n int) {
 	if l > 0 {
 	if l > 0 {
 		n += 2 + l + sovRpc(uint64(l))
 		n += 2 + l + sovRpc(uint64(l))
 	}
 	}
+	l = len(m.SnapshotPath)
+	if l > 0 {
+		n += 2 + l + sovRpc(uint64(l))
+	}
 	return n
 	return n
 }
 }
 
 
@@ -2809,6 +2835,35 @@ func (m *Member) Unmarshal(dAtA []byte) error {
 			}
 			}
 			m.PeerTrustedCAPath = string(dAtA[iNdEx:postIndex])
 			m.PeerTrustedCAPath = string(dAtA[iNdEx:postIndex])
 			iNdEx = postIndex
 			iNdEx = postIndex
+		case 601:
+			if wireType != 2 {
+				return fmt.Errorf("proto: wrong wireType = %d for field SnapshotPath", wireType)
+			}
+			var stringLen uint64
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowRpc
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				stringLen |= (uint64(b) & 0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			intStringLen := int(stringLen)
+			if intStringLen < 0 {
+				return ErrInvalidLengthRpc
+			}
+			postIndex := iNdEx + intStringLen
+			if postIndex > l {
+				return io.ErrUnexpectedEOF
+			}
+			m.SnapshotPath = string(dAtA[iNdEx:postIndex])
+			iNdEx = postIndex
 		default:
 		default:
 			iNdEx = preIndex
 			iNdEx = preIndex
 			skippy, err := skipRpc(dAtA[iNdEx:])
 			skippy, err := skipRpc(dAtA[iNdEx:])
@@ -4238,164 +4293,165 @@ var (
 func init() { proto.RegisterFile("rpcpb/rpc.proto", fileDescriptorRpc) }
 func init() { proto.RegisterFile("rpcpb/rpc.proto", fileDescriptorRpc) }
 
 
 var fileDescriptorRpc = []byte{
 var fileDescriptorRpc = []byte{
-	// 2539 bytes of a gzipped FileDescriptorProto
+	// 2559 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x59, 0x4b, 0x77, 0xdb, 0xc6,
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x59, 0x4b, 0x77, 0xdb, 0xc6,
-	0x15, 0x36, 0x44, 0xcb, 0x8e, 0x86, 0x7a, 0x50, 0x23, 0xcb, 0x86, 0x5f, 0x82, 0x0c, 0xc7, 0xa9,
-	0xed, 0x14, 0x76, 0x6a, 0xe7, 0xa4, 0x8d, 0xf3, 0x70, 0x40, 0x0a, 0xb6, 0x58, 0x41, 0x24, 0x3d,
-	0x84, 0xec, 0x64, 0x85, 0x42, 0xe4, 0x48, 0x42, 0x4d, 0x01, 0x0c, 0x30, 0x74, 0xa4, 0xfc, 0x81,
-	0x6e, 0xfb, 0x3e, 0x5d, 0xf5, 0x17, 0x34, 0xfd, 0x1d, 0x4e, 0xfa, 0x4a, 0xdb, 0x3d, 0x4f, 0x9b,
-	0xec, 0xbb, 0xe0, 0xe9, 0x2b, 0x5d, 0xf5, 0xcc, 0x03, 0xe4, 0x00, 0x20, 0x25, 0xed, 0x8c, 0x7b,
-	0xbf, 0xef, 0x9b, 0x3b, 0x73, 0x67, 0xee, 0xbd, 0x32, 0xc1, 0x42, 0xd4, 0x6d, 0x75, 0xb7, 0xef,
-	0x46, 0xdd, 0xd6, 0x9d, 0x6e, 0x14, 0x92, 0x10, 0x4e, 0x33, 0xc3, 0x25, 0x63, 0xd7, 0x27, 0x7b,
-	0xbd, 0xed, 0x3b, 0xad, 0x70, 0xff, 0xee, 0x6e, 0xb8, 0x1b, 0xde, 0x65, 0xde, 0xed, 0xde, 0x0e,
-	0xfb, 0x62, 0x1f, 0xec, 0x5f, 0x9c, 0xa5, 0xff, 0x48, 0x01, 0x67, 0x11, 0xfe, 0xb8, 0x87, 0x63,
-	0x02, 0xef, 0x80, 0x99, 0x7a, 0x17, 0x47, 0x1e, 0xf1, 0xc3, 0x40, 0x55, 0x56, 0x95, 0x9b, 0xf3,
-	0xf7, 0x4a, 0x77, 0x98, 0xea, 0x9d, 0xa1, 0x1d, 0x8d, 0x20, 0xf0, 0x06, 0x38, 0xb3, 0x89, 0xf7,
-	0xb7, 0x71, 0xa4, 0x4e, 0xad, 0x2a, 0x37, 0x8b, 0xf7, 0xe6, 0x04, 0x98, 0x1b, 0x91, 0x70, 0x52,
-	0x98, 0x83, 0x63, 0x82, 0x23, 0xb5, 0x90, 0x82, 0x71, 0x23, 0x12, 0x4e, 0xbd, 0x05, 0x5e, 0x41,
-	0x38, 0xee, 0x86, 0x41, 0x8c, 0xa1, 0x0a, 0xce, 0x36, 0x7b, 0xad, 0x16, 0x8e, 0x63, 0x16, 0xc7,
-	0x2b, 0x28, 0xf9, 0x84, 0xe7, 0xc1, 0x99, 0x26, 0xf1, 0x48, 0x2f, 0x66, 0x6b, 0xce, 0x20, 0xf1,
-	0x25, 0xc5, 0x52, 0x38, 0x22, 0x16, 0xfd, 0xd7, 0xc5, 0x04, 0x07, 0xdf, 0x03, 0xb3, 0x16, 0x69,
-	0xb5, 0xad, 0x03, 0xdc, 0x6a, 0x78, 0x64, 0x8f, 0x2d, 0x34, 0x53, 0xbe, 0x38, 0xe8, 0x6b, 0xcb,
-	0x87, 0xde, 0x7e, 0xe7, 0x81, 0x8e, 0x49, 0xab, 0x6d, 0xe0, 0x03, 0xdc, 0x32, 0xba, 0x1e, 0xd9,
-	0xd3, 0x51, 0x0a, 0x0e, 0xef, 0x83, 0x19, 0x73, 0x17, 0x07, 0xc4, 0x6c, 0xb7, 0x23, 0xb5, 0xc8,
-	0xb8, 0xcb, 0x83, 0xbe, 0xb6, 0xc8, 0xb9, 0x1e, 0x75, 0x19, 0x5e, 0xbb, 0x1d, 0xe9, 0x68, 0x84,
-	0x83, 0x36, 0x58, 0x7c, 0xe4, 0xf9, 0x9d, 0x6e, 0xe8, 0x07, 0x64, 0xdd, 0x71, 0x1a, 0x8c, 0x3c,
-	0xcb, 0xc8, 0x2b, 0x83, 0xbe, 0x76, 0x89, 0x93, 0x77, 0x12, 0x88, 0xb1, 0x47, 0x48, 0x57, 0xa8,
-	0xe4, 0x89, 0xd0, 0x00, 0x67, 0xcb, 0x5e, 0x8c, 0xd7, 0xfc, 0x48, 0xc5, 0x4c, 0x63, 0x69, 0xd0,
-	0xd7, 0x16, 0xb8, 0xc6, 0xb6, 0x17, 0x63, 0xa3, 0xed, 0x47, 0x3a, 0x4a, 0x30, 0xf0, 0x01, 0x28,
-	0xd2, 0x1d, 0xd8, 0xe1, 0x2e, 0xdb, 0xef, 0x0e, 0xa3, 0xa8, 0x83, 0xbe, 0x76, 0x4e, 0xda, 0x6f,
-	0x27, 0xdc, 0x15, 0xdb, 0x95, 0xc1, 0xf0, 0x31, 0x58, 0xa0, 0x9f, 0x95, 0x8e, 0x8f, 0x03, 0xd2,
-	0x88, 0xc2, 0x83, 0x43, 0xf5, 0x73, 0x96, 0x99, 0xf2, 0x95, 0x41, 0x5f, 0x53, 0x25, 0x81, 0x16,
-	0x83, 0x18, 0x5d, 0x8a, 0xd1, 0x51, 0x96, 0x05, 0x4d, 0x30, 0x47, 0x4d, 0x0d, 0x8c, 0x23, 0x2e,
-	0xf3, 0x05, 0x97, 0xb9, 0x34, 0xe8, 0x6b, 0xe7, 0x25, 0x99, 0x2e, 0xc6, 0x51, 0x22, 0x92, 0x66,
-	0xc0, 0x06, 0x80, 0x23, 0x55, 0x2b, 0x68, 0xb3, 0x43, 0x51, 0x3f, 0x63, 0xf7, 0xa1, 0xac, 0x0d,
-	0xfa, 0xda, 0xe5, 0x7c, 0x38, 0x58, 0xc0, 0x74, 0x34, 0x86, 0x0b, 0xbf, 0x03, 0x4e, 0x53, 0xab,
-	0xfa, 0x5b, 0x7e, 0x8f, 0x8b, 0xe2, 0xee, 0x50, 0x5b, 0x79, 0x61, 0xd0, 0xd7, 0x8a, 0x23, 0x41,
-	0x1d, 0x31, 0x28, 0x5c, 0x03, 0xf3, 0x5c, 0xa4, 0x82, 0x23, 0xb2, 0xe6, 0x11, 0x4f, 0xfd, 0x49,
-	0x81, 0x05, 0x70, 0x79, 0xd0, 0xd7, 0x2e, 0x70, 0xbc, 0x58, 0xbb, 0x85, 0x23, 0x62, 0xb4, 0x3d,
-	0xe2, 0xe9, 0x28, 0xc3, 0x49, 0xab, 0xb0, 0xac, 0xfc, 0xf4, 0x48, 0x15, 0x9e, 0x99, 0x0c, 0x87,
-	0x9e, 0x29, 0xb7, 0x6c, 0xe0, 0x43, 0x16, 0xca, 0xcf, 0xb8, 0x88, 0x74, 0xa6, 0x42, 0xe4, 0x39,
-	0x3e, 0x14, 0x91, 0xa4, 0x19, 0x29, 0x09, 0x16, 0xc7, 0xcf, 0x8f, 0x92, 0xe0, 0x61, 0xa4, 0x19,
-	0xd0, 0x01, 0x4b, 0xdc, 0xe0, 0x44, 0xbd, 0x98, 0xe0, 0x76, 0xc5, 0x64, 0xb1, 0xfc, 0x82, 0x0b,
-	0x5d, 0x1b, 0xf4, 0xb5, 0xab, 0x29, 0x21, 0xc2, 0x61, 0x46, 0xcb, 0x13, 0x21, 0x8d, 0xa3, 0x8f,
-	0x51, 0x65, 0xe1, 0xfd, 0xf2, 0x04, 0xaa, 0x3c, 0xca, 0x71, 0x74, 0xf8, 0x3e, 0x98, 0xa5, 0xf7,
-	0x69, 0x98, 0xbb, 0x7f, 0x15, 0xb2, 0x8f, 0x9f, 0xdd, 0x3f, 0x29, 0x73, 0x29, 0xbc, 0xcc, 0x67,
-	0xe1, 0xfc, 0xfb, 0x08, 0xbe, 0x28, 0x1e, 0x32, 0x1e, 0xbe, 0x03, 0x8a, 0xf4, 0x3b, 0xc9, 0xd7,
-	0x7f, 0x0a, 0xd9, 0xb7, 0xc8, 0xe8, 0xa3, 0x6c, 0xc9, 0x68, 0x89, 0xcc, 0xd6, 0xfe, 0xef, 0x64,
-	0xb2, 0x78, 0xc8, 0x12, 0x1a, 0xd6, 0xc0, 0x22, 0xfd, 0x4c, 0xe7, 0xe8, 0x9b, 0x42, 0xf6, 0xed,
-	0x30, 0x89, 0x5c, 0x86, 0xf2, 0xd4, 0x9c, 0x1e, 0x0b, 0xe9, 0x7f, 0xc7, 0xea, 0xf1, 0xc8, 0xf2,
-	0x54, 0xfd, 0xeb, 0xd9, 0xa4, 0x5b, 0xd0, 0xf2, 0x46, 0x97, 0xa0, 0xe5, 0x4d, 0xc9, 0x96, 0x37,
-	0x1a, 0x8f, 0x28, 0x6f, 0x02, 0x03, 0xbf, 0x0d, 0xce, 0xd6, 0x30, 0xf9, 0x24, 0x8c, 0x9e, 0xf3,
-	0xd6, 0x50, 0x86, 0x83, 0xbe, 0x36, 0xcf, 0xe1, 0x01, 0x77, 0xe8, 0x28, 0x81, 0xc0, 0xeb, 0xe0,
-	0x34, 0x2b, 0xbe, 0x3c, 0x52, 0xe9, 0x91, 0xf3, 0x6a, 0xcb, 0x9c, 0xb0, 0x02, 0xe6, 0xd7, 0x70,
-	0xc7, 0x3b, 0xb4, 0x3d, 0x82, 0x83, 0xd6, 0xe1, 0x66, 0xcc, 0x0a, 0xfd, 0x9c, 0xfc, 0x3a, 0xdb,
-	0xd4, 0x6f, 0x74, 0x38, 0xc0, 0xd8, 0x8f, 0x75, 0x94, 0xa1, 0xc0, 0xef, 0x83, 0x52, 0xda, 0x82,
-	0x5e, 0xb0, 0x92, 0x3f, 0x27, 0x97, 0xfc, 0xac, 0x8c, 0x11, 0xbd, 0xd0, 0x51, 0x8e, 0x07, 0x3f,
-	0x02, 0xcb, 0x5b, 0xdd, 0xb6, 0x47, 0x70, 0x3b, 0x13, 0xd7, 0x1c, 0x13, 0xbc, 0x3e, 0xe8, 0x6b,
-	0x1a, 0x17, 0xec, 0x71, 0x98, 0x91, 0x8f, 0x6f, 0xbc, 0x02, 0x7c, 0x0b, 0x00, 0x14, 0xf6, 0x82,
-	0xb6, 0xed, 0xef, 0xfb, 0x44, 0x5d, 0x5e, 0x55, 0x6e, 0x4e, 0x97, 0xcf, 0x0f, 0xfa, 0x1a, 0xe4,
-	0x7a, 0x11, 0xf5, 0x19, 0x1d, 0xea, 0xd4, 0x91, 0x84, 0x84, 0x1f, 0x80, 0x39, 0xeb, 0xc0, 0x27,
-	0xf5, 0x80, 0xf6, 0xa7, 0x5e, 0x84, 0xd5, 0xf3, 0xb9, 0x7a, 0x7e, 0xe0, 0x13, 0x23, 0x0c, 0x8c,
-	0x1d, 0x0e, 0xa0, 0xf5, 0x5c, 0x26, 0xc0, 0x75, 0x50, 0xaa, 0x84, 0x41, 0xec, 0xc7, 0x2c, 0x94,
-	0xca, 0x1e, 0x6e, 0x3d, 0x57, 0x2f, 0x64, 0x7b, 0x4b, 0x6b, 0x84, 0x30, 0x5a, 0x14, 0xa2, 0xa3,
-	0x1c, 0x0b, 0xbe, 0x0d, 0x8a, 0x56, 0xe0, 0x6d, 0x77, 0x70, 0xa3, 0x1b, 0x85, 0x3b, 0xaa, 0xca,
-	0x44, 0x2e, 0x0c, 0xfa, 0xda, 0x92, 0x88, 0x84, 0x39, 0x8d, 0x2e, 0xf5, 0xd2, 0x06, 0x37, 0xc2,
-	0xd2, 0x54, 0x8b, 0x78, 0xd8, 0xb9, 0x6c, 0xc6, 0xaa, 0x96, 0x4d, 0xb5, 0x88, 0x5f, 0x1c, 0x29,
-	0x4b, 0x75, 0x9a, 0x02, 0xcb, 0x43, 0x91, 0xe6, 0x5e, 0x6f, 0x67, 0xa7, 0x83, 0xd5, 0xd5, 0xec,
-	0x61, 0x24, 0x22, 0x31, 0x07, 0x8c, 0x34, 0x04, 0x03, 0xbe, 0x0b, 0x66, 0x85, 0xa5, 0xe2, 0xc5,
-	0x38, 0x56, 0xaf, 0xad, 0x16, 0xd2, 0xaf, 0x3b, 0x51, 0x68, 0x51, 0xb7, 0x8e, 0x52, 0x68, 0xb8,
-	0x21, 0x0d, 0x18, 0x95, 0x70, 0x7f, 0xdf, 0x0b, 0xda, 0xb1, 0xaa, 0x33, 0x89, 0xab, 0x83, 0xbe,
-	0x76, 0x31, 0x3b, 0x60, 0xb4, 0x04, 0x46, 0x9e, 0x2f, 0x12, 0x1e, 0x3d, 0x13, 0xd4, 0x0b, 0x02,
-	0x1c, 0x0d, 0x67, 0xa4, 0x5b, 0xd9, 0xe6, 0x14, 0x31, 0xbf, 0x3c, 0x25, 0x65, 0x28, 0xb0, 0x0a,
-	0x4a, 0xd6, 0x01, 0xc1, 0x51, 0xe0, 0x75, 0x86, 0x32, 0xb7, 0x99, 0x8c, 0x14, 0x10, 0x16, 0x08,
-	0x59, 0x28, 0x47, 0xa3, 0xe9, 0x6d, 0x92, 0x08, 0xc7, 0xb1, 0x73, 0xd8, 0xc5, 0xb1, 0x8a, 0xd9,
-	0xb6, 0xa4, 0xf4, 0xc6, 0xcc, 0x69, 0x10, 0xea, 0xd5, 0x91, 0x8c, 0xa5, 0xb7, 0x94, 0x7f, 0x6e,
-	0xe0, 0xc3, 0xa6, 0xff, 0x29, 0x66, 0xd3, 0xcf, 0xb4, 0x9c, 0x18, 0x41, 0xa6, 0x65, 0x33, 0xf6,
-	0x3f, 0xa5, 0xb7, 0x34, 0x45, 0xa0, 0x53, 0x47, 0xca, 0x60, 0x7b, 0xd1, 0x2e, 0x56, 0x77, 0x99,
-	0xcc, 0xea, 0xa0, 0xaf, 0x5d, 0x19, 0x2b, 0x63, 0x74, 0x28, 0x4c, 0x47, 0x63, 0xb8, 0xf0, 0x29,
-	0x38, 0x37, 0xb2, 0xf6, 0x76, 0x76, 0xfc, 0x03, 0xe4, 0x05, 0xbb, 0x58, 0xdd, 0x63, 0x9a, 0xfa,
-	0xa0, 0xaf, 0xad, 0xe4, 0x35, 0x19, 0xce, 0x88, 0x28, 0x50, 0x47, 0x63, 0xf9, 0xf0, 0x07, 0xe0,
-	0xc2, 0x38, 0xbb, 0x73, 0x10, 0xa8, 0x3e, 0x93, 0x7e, 0x6d, 0xd0, 0xd7, 0xf4, 0x23, 0xa5, 0x0d,
-	0x72, 0x10, 0xe8, 0x68, 0x92, 0x0c, 0x9d, 0x06, 0x87, 0x2e, 0xe7, 0x20, 0xa8, 0x77, 0x63, 0xf5,
-	0x87, 0x4c, 0x59, 0x4a, 0xa9, 0xa4, 0x4c, 0x0e, 0x02, 0x23, 0xec, 0xc6, 0x3a, 0xca, 0xb2, 0x46,
-	0x69, 0xe1, 0x4d, 0x3a, 0xe6, 0x43, 0xe5, 0xb4, 0xdc, 0x48, 0x85, 0x0e, 0x6f, 0xef, 0xf1, 0x30,
-	0x2d, 0x82, 0x00, 0xdf, 0x04, 0x33, 0xdc, 0xf0, 0xa4, 0xd1, 0xe4, 0xb3, 0xe4, 0xb4, 0x3c, 0x87,
-	0x0b, 0xf6, 0xc7, 0x74, 0xf5, 0x11, 0x50, 0xff, 0x66, 0x8e, 0x4f, 0x7c, 0xb4, 0x0d, 0xd4, 0xbc,
-	0x7d, 0x2c, 0x1a, 0x8c, 0xd4, 0x06, 0x02, 0x6f, 0x1f, 0xeb, 0x88, 0x39, 0xe5, 0x46, 0x34, 0x75,
-	0x82, 0x46, 0x74, 0x1b, 0x9c, 0x79, 0x66, 0xda, 0x14, 0x5d, 0xc8, 0xf6, 0xa1, 0x4f, 0xbc, 0x0e,
-	0x07, 0x0b, 0x04, 0xac, 0x83, 0xa5, 0x75, 0xec, 0x45, 0x64, 0x1b, 0x7b, 0xa4, 0x1a, 0x10, 0x1c,
-	0xbd, 0xf0, 0x3a, 0xa2, 0xcd, 0x14, 0xe4, 0xd3, 0xdc, 0x4b, 0x40, 0x86, 0x2f, 0x50, 0x3a, 0x1a,
-	0xc7, 0x84, 0x55, 0xb0, 0x68, 0x75, 0x70, 0x8b, 0xfe, 0x7d, 0xe6, 0xf8, 0xfb, 0x38, 0xec, 0x91,
-	0xcd, 0x98, 0xb5, 0x9b, 0x82, 0xfc, 0x6c, 0xb1, 0x80, 0x18, 0x84, 0x63, 0x74, 0x94, 0x67, 0xd1,
-	0x97, 0x6b, 0xb3, 0xf2, 0xca, 0xcf, 0x7a, 0x0b, 0xd9, 0xb1, 0xba, 0x9c, 0x2d, 0x25, 0x1d, 0x86,
-	0x48, 0xc6, 0xec, 0x5e, 0xd4, 0x89, 0x75, 0x94, 0xa3, 0x41, 0x04, 0x96, 0xcc, 0xf6, 0x0b, 0x1c,
-	0x11, 0x3f, 0xc6, 0x92, 0xda, 0x79, 0xa6, 0x26, 0xbd, 0x1e, 0x2f, 0x01, 0xa5, 0x05, 0xc7, 0x91,
-	0xe1, 0xdb, 0xc9, 0xc8, 0x6a, 0xf6, 0x48, 0xe8, 0xd8, 0x4d, 0xd1, 0x33, 0xa4, 0xdc, 0x78, 0x3d,
-	0x12, 0x1a, 0x84, 0x0a, 0xa4, 0x91, 0xb4, 0xb0, 0x8d, 0x46, 0x68, 0xb3, 0x47, 0xf6, 0x44, 0xab,
-	0x98, 0x30, 0x75, 0x7b, 0xbd, 0xcc, 0xd4, 0x4d, 0x29, 0xf0, 0x5d, 0x59, 0xe4, 0x91, 0xdf, 0xc1,
-	0xea, 0x45, 0x96, 0xee, 0x73, 0x83, 0xbe, 0x56, 0x12, 0x22, 0x94, 0xbd, 0xe3, 0xb3, 0x32, 0x9f,
-	0xc6, 0x8e, 0xa2, 0xdf, 0xc0, 0x87, 0x8c, 0x7c, 0x29, 0x7b, 0xb3, 0xe8, 0xcb, 0xe1, 0xdc, 0x34,
-	0x12, 0xda, 0xb9, 0x91, 0x98, 0x09, 0x5c, 0xce, 0x0e, 0xec, 0xd2, 0xb8, 0xc5, 0x75, 0xc6, 0xd1,
-	0xe8, 0x59, 0xf0, 0x74, 0xd1, 0x59, 0x8c, 0x65, 0x45, 0x63, 0x59, 0x91, 0xce, 0x42, 0xe4, 0x98,
-	0xcd, 0x70, 0x3c, 0x21, 0x19, 0x0a, 0x74, 0xc0, 0xe2, 0x30, 0x45, 0x43, 0x9d, 0x55, 0xa6, 0x23,
-	0x15, 0x1b, 0x3f, 0xf0, 0x89, 0xef, 0x75, 0x8c, 0x51, 0x96, 0x25, 0xc9, 0xbc, 0x00, 0xfd, 0x83,
-	0x95, 0xfe, 0x3b, 0xc9, 0xef, 0x35, 0x96, 0xa3, 0xec, 0x9c, 0x3b, 0x4a, 0xb2, 0x0c, 0xa6, 0xe5,
-	0x9a, 0x4d, 0xdc, 0xe9, 0x34, 0xeb, 0x4c, 0x42, 0xba, 0x70, 0x7c, 0x4c, 0xcf, 0xe5, 0x7a, 0x0c,
-	0x17, 0xbe, 0x37, 0x9a, 0xf9, 0xd9, 0x79, 0x5f, 0x9f, 0x3c, 0xf2, 0xf3, 0xe3, 0x4e, 0xc1, 0x93,
-	0xcd, 0x24, 0xe9, 0x7e, 0x75, 0xe2, 0xd0, 0xce, 0xc9, 0x32, 0x18, 0x6e, 0x66, 0x86, 0x6c, 0xa6,
-	0x70, 0xe3, 0xb8, 0x19, 0x9b, 0x0b, 0xe5, 0x99, 0x74, 0x4c, 0xa9, 0xf2, 0x54, 0x54, 0x3a, 0x3d,
-	0xf6, 0x1f, 0x33, 0xb7, 0xb2, 0x77, 0x27, 0x49, 0x55, 0x8b, 0x03, 0x74, 0x94, 0x61, 0xd0, 0x17,
-	0x9d, 0xb6, 0x34, 0x89, 0x47, 0xb0, 0xe8, 0xec, 0xd2, 0x01, 0x67, 0x84, 0x8c, 0x98, 0xc2, 0x74,
-	0x34, 0x8e, 0x9c, 0xd7, 0x74, 0xc2, 0xe7, 0x38, 0x50, 0x5f, 0x3f, 0x4e, 0x93, 0x50, 0x58, 0x4e,
-	0x93, 0x91, 0xe1, 0x43, 0x30, 0xd7, 0x0c, 0xbc, 0x6e, 0xbc, 0x17, 0x92, 0x4a, 0xd8, 0x0b, 0x88,
-	0x7a, 0x9f, 0xd5, 0x42, 0xb9, 0xc1, 0x08, 0xb7, 0xd1, 0xa2, 0x7e, 0xda, 0x60, 0x64, 0x3c, 0xb4,
-	0xc1, 0xe2, 0x93, 0x5e, 0x48, 0xbc, 0xb2, 0xd7, 0x7a, 0x8e, 0x83, 0x76, 0xf9, 0x90, 0xe0, 0x58,
-	0x7d, 0x93, 0x89, 0x48, 0xf3, 0xfb, 0xc7, 0x14, 0x62, 0x6c, 0x73, 0x8c, 0xb1, 0x4d, 0x41, 0x3a,
-	0xca, 0x13, 0x69, 0x2b, 0x69, 0x44, 0xf8, 0x69, 0x48, 0xb0, 0xfa, 0x30, 0x5b, 0xae, 0xba, 0x11,
-	0x36, 0x5e, 0x84, 0xf4, 0x74, 0x12, 0x8c, 0x7c, 0x22, 0x61, 0x14, 0xf5, 0xba, 0x84, 0x4f, 0xc7,
-	0x1f, 0x64, 0xaf, 0xf1, 0xf0, 0x44, 0x38, 0x2a, 0x99, 0x90, 0xc7, 0x91, 0x6f, 0xbf, 0x9c, 0x92,
-	0xfe, 0x9b, 0x0f, 0x2e, 0x80, 0x62, 0xad, 0xee, 0xb8, 0x4d, 0xc7, 0x44, 0x8e, 0xb5, 0x56, 0x3a,
-	0x05, 0xcf, 0x03, 0x58, 0xad, 0x55, 0x9d, 0xaa, 0x69, 0x73, 0xa3, 0x6b, 0x39, 0x95, 0xb5, 0x12,
-	0x80, 0x25, 0x30, 0x8b, 0x2c, 0xc9, 0x52, 0xa4, 0x96, 0x66, 0xf5, 0xb1, 0x63, 0xa1, 0x4d, 0x6e,
-	0x39, 0x07, 0x57, 0xc1, 0x95, 0x66, 0xf5, 0xf1, 0x93, 0xad, 0x2a, 0xc7, 0xb8, 0x66, 0x6d, 0xcd,
-	0x45, 0xd6, 0x66, 0xfd, 0xa9, 0xe5, 0xae, 0x99, 0x8e, 0x59, 0x5a, 0x86, 0xd7, 0xc0, 0xd5, 0x1c,
-	0xc2, 0x44, 0x95, 0xf5, 0x6a, 0x02, 0x59, 0x81, 0x77, 0xc1, 0xeb, 0x47, 0x89, 0xb0, 0xef, 0xa6,
-	0x53, 0x6f, 0xb8, 0xe6, 0x63, 0xab, 0xe6, 0x94, 0x34, 0x78, 0x15, 0x5c, 0x2c, 0xdb, 0x66, 0x65,
-	0x63, 0xbd, 0x6e, 0x5b, 0x6e, 0xc3, 0xb2, 0x90, 0xdb, 0xa8, 0x23, 0xc7, 0x75, 0x3e, 0x74, 0xd1,
-	0x87, 0xa5, 0x36, 0xd4, 0xc0, 0xe5, 0xad, 0xda, 0x64, 0x00, 0x86, 0x97, 0xc0, 0xf2, 0x9a, 0x65,
-	0x9b, 0x1f, 0xe5, 0x5c, 0x2f, 0x15, 0x78, 0x05, 0x5c, 0xd8, 0xaa, 0x8d, 0xf7, 0x7e, 0xae, 0xdc,
-	0xfe, 0x07, 0x00, 0x45, 0x69, 0xfc, 0x86, 0x2a, 0x38, 0x97, 0x9c, 0x48, 0xbd, 0x66, 0xb9, 0x8f,
-	0xea, 0xb6, 0x5d, 0x7f, 0x66, 0xa1, 0xd2, 0x29, 0xb1, 0xa9, 0x9c, 0xc7, 0xdd, 0xaa, 0x39, 0x55,
-	0xdb, 0x75, 0x50, 0xf5, 0xf1, 0x63, 0x0b, 0xb9, 0xcd, 0x9a, 0xd9, 0x68, 0xae, 0xd7, 0x9d, 0x92,
-	0x02, 0x21, 0x98, 0x4f, 0x08, 0xb6, 0x65, 0xae, 0x59, 0xa8, 0x34, 0x05, 0x6f, 0x81, 0x1b, 0x69,
-	0xdb, 0x24, 0x7a, 0x41, 0xa6, 0x3f, 0xd9, 0xaa, 0xa3, 0xad, 0xcd, 0xd2, 0x69, 0x9a, 0xea, 0xc4,
-	0x66, 0xda, 0x76, 0x69, 0x1a, 0x5e, 0x07, 0x5a, 0x72, 0xd2, 0xd2, 0x21, 0xa7, 0x22, 0x07, 0xf0,
-	0x01, 0x78, 0xeb, 0x18, 0xd0, 0xa4, 0x28, 0x8a, 0x34, 0x33, 0x63, 0xb8, 0x62, 0x3f, 0xb3, 0xf0,
-	0x4d, 0xf0, 0xc6, 0x44, 0xf7, 0x24, 0xd1, 0x39, 0xf8, 0x10, 0xbc, 0x33, 0x86, 0xc5, 0x77, 0x29,
-	0x2c, 0x4d, 0xa7, 0x8e, 0xac, 0x21, 0xc7, 0x7d, 0x84, 0xea, 0x9b, 0x6e, 0xb3, 0x82, 0x4c, 0xa7,
-	0xb2, 0x5e, 0x9a, 0x87, 0xb7, 0xc1, 0x6b, 0x13, 0xaf, 0x43, 0x7a, 0xf7, 0x6d, 0x68, 0x82, 0xf7,
-	0x4e, 0x86, 0x9d, 0x14, 0x2f, 0x86, 0xaf, 0x82, 0xd5, 0xc9, 0x12, 0xe2, 0x2c, 0x76, 0xe0, 0x3b,
-	0xe0, 0xbb, 0xc7, 0xa1, 0x26, 0x2d, 0xb1, 0x7b, 0xf4, 0x12, 0x22, 0xff, 0x7b, 0xf4, 0xed, 0x4d,
-	0x46, 0xd1, 0x1b, 0xe1, 0xc3, 0x6f, 0x01, 0x7d, 0xec, 0x65, 0x4f, 0x1f, 0xcb, 0x4b, 0x05, 0xde,
-	0x01, 0xb7, 0x90, 0x59, 0x5b, 0xab, 0x6f, 0xba, 0x27, 0xc0, 0x7f, 0xae, 0xc0, 0xf7, 0xc1, 0xdb,
-	0xc7, 0x03, 0x27, 0x6d, 0xf0, 0x0b, 0x05, 0x5a, 0xe0, 0x83, 0x13, 0xaf, 0x37, 0x49, 0xe6, 0x77,
-	0x0a, 0xbc, 0x06, 0xae, 0x8c, 0xe7, 0x8b, 0x3c, 0xfc, 0x5e, 0x81, 0x37, 0xc1, 0xf5, 0x23, 0x57,
-	0x12, 0xc8, 0x3f, 0x28, 0xf0, 0x7b, 0xe0, 0xfe, 0x51, 0x90, 0x49, 0x61, 0xfc, 0x51, 0x81, 0x0f,
-	0xc1, 0x83, 0x13, 0xac, 0x31, 0x49, 0xe0, 0x4f, 0x47, 0xec, 0x43, 0x24, 0xfb, 0xcb, 0xe3, 0xf7,
-	0x21, 0x90, 0x7f, 0x56, 0xe0, 0x0a, 0xb8, 0x38, 0x1e, 0x42, 0xef, 0xc4, 0x5f, 0x14, 0x78, 0x03,
-	0xac, 0x1e, 0xa9, 0x44, 0x61, 0x7f, 0x55, 0xa0, 0x0a, 0x96, 0x6a, 0x75, 0xf7, 0x91, 0x59, 0xb5,
-	0xdd, 0x67, 0x55, 0x67, 0xdd, 0x6d, 0x3a, 0xc8, 0x6a, 0x36, 0x4b, 0xbf, 0x99, 0xa2, 0xa1, 0xa4,
-	0x3c, 0xb5, 0xba, 0x70, 0xba, 0x8f, 0xea, 0xc8, 0xb5, 0xab, 0x4f, 0xad, 0x1a, 0x45, 0x7e, 0x36,
-	0x05, 0x17, 0x00, 0xa0, 0xb0, 0x46, 0xbd, 0x5a, 0x73, 0x9a, 0xa5, 0x1f, 0x17, 0xe0, 0x1c, 0x78,
-	0xc5, 0xfa, 0xd0, 0xb1, 0x50, 0xcd, 0xb4, 0x4b, 0xff, 0x2c, 0xdc, 0x0e, 0x01, 0x18, 0xfd, 0x55,
-	0x0f, 0xcf, 0x80, 0xa9, 0x8d, 0xa7, 0xa5, 0x53, 0x70, 0x06, 0x4c, 0xdb, 0x96, 0xd9, 0xb4, 0x4a,
-	0x0a, 0x5c, 0x02, 0x0b, 0x96, 0x6d, 0x55, 0x9c, 0x6a, 0xbd, 0xe6, 0xa2, 0xad, 0x5a, 0x8d, 0xd5,
-	0xcd, 0x12, 0x98, 0x7d, 0x46, 0xdf, 0x7e, 0x62, 0x29, 0xc0, 0x65, 0xb0, 0x68, 0xd7, 0x2b, 0x1b,
-	0x2e, 0x32, 0x2b, 0x16, 0x4a, 0xcc, 0xa7, 0x29, 0x90, 0x09, 0x25, 0x96, 0xe9, 0x7b, 0x0f, 0xc1,
-	0x8c, 0x13, 0x79, 0x41, 0xdc, 0x0d, 0x23, 0x02, 0xef, 0xc9, 0x1f, 0xf3, 0xe2, 0x47, 0x02, 0xf1,
-	0xe3, 0xd9, 0xa5, 0x85, 0xe1, 0x37, 0xff, 0x0d, 0x4b, 0x3f, 0x75, 0x53, 0x79, 0x43, 0x29, 0x9f,
-	0x7b, 0xf9, 0xf7, 0x95, 0x53, 0x2f, 0xbf, 0x5a, 0x51, 0xbe, 0xfc, 0x6a, 0x45, 0xf9, 0xdb, 0x57,
-	0x2b, 0xca, 0xaf, 0xbe, 0x5e, 0x39, 0xb5, 0x7d, 0x86, 0xfd, 0xf8, 0x76, 0xff, 0xff, 0x01, 0x00,
-	0x00, 0xff, 0xff, 0xf7, 0xfb, 0xe3, 0x68, 0xc5, 0x1b, 0x00, 0x00,
+	0xf5, 0x37, 0x44, 0xcb, 0x8e, 0x86, 0x7a, 0x50, 0x23, 0xcb, 0x86, 0x5f, 0x82, 0x0c, 0xc7, 0xf9,
+	0xdb, 0xce, 0x1f, 0x76, 0x6a, 0xe7, 0xa4, 0x8d, 0xf3, 0x70, 0x40, 0x0a, 0xb6, 0x58, 0x41, 0x24,
+	0x3d, 0x84, 0xec, 0x64, 0x85, 0x42, 0xe4, 0x48, 0x42, 0x4d, 0x01, 0x0c, 0x30, 0x74, 0xa4, 0x7c,
+	0x81, 0x6e, 0xfb, 0x3e, 0xfd, 0x10, 0x4d, 0x3f, 0x87, 0x93, 0xbe, 0xd2, 0x76, 0xd5, 0x45, 0x79,
+	0xda, 0x64, 0xdf, 0x05, 0x4f, 0x5f, 0xe9, 0xaa, 0x67, 0x1e, 0x20, 0x07, 0x00, 0x29, 0x69, 0x27,
+	0xdc, 0xfb, 0xfb, 0xfd, 0x70, 0xe7, 0xde, 0x99, 0xb9, 0x17, 0x22, 0x58, 0x88, 0xba, 0xad, 0xee,
+	0xf6, 0xdd, 0xa8, 0xdb, 0xba, 0xd3, 0x8d, 0x42, 0x12, 0xc2, 0x69, 0x66, 0xb8, 0x64, 0xec, 0xfa,
+	0x64, 0xaf, 0xb7, 0x7d, 0xa7, 0x15, 0xee, 0xdf, 0xdd, 0x0d, 0x77, 0xc3, 0xbb, 0xcc, 0xbb, 0xdd,
+	0xdb, 0x61, 0x4f, 0xec, 0x81, 0xfd, 0xc5, 0x59, 0xfa, 0x0f, 0x14, 0x70, 0x16, 0xe1, 0x8f, 0x7b,
+	0x38, 0x26, 0xf0, 0x0e, 0x98, 0xa9, 0x77, 0x71, 0xe4, 0x11, 0x3f, 0x0c, 0x54, 0x65, 0x55, 0xb9,
+	0x39, 0x7f, 0xaf, 0x74, 0x87, 0xa9, 0xde, 0x19, 0xda, 0xd1, 0x08, 0x02, 0x6f, 0x80, 0x33, 0x9b,
+	0x78, 0x7f, 0x1b, 0x47, 0xea, 0xd4, 0xaa, 0x72, 0xb3, 0x78, 0x6f, 0x4e, 0x80, 0xb9, 0x11, 0x09,
+	0x27, 0x85, 0x39, 0x38, 0x26, 0x38, 0x52, 0x0b, 0x29, 0x18, 0x37, 0x22, 0xe1, 0xd4, 0x5b, 0xe0,
+	0x15, 0x84, 0xe3, 0x6e, 0x18, 0xc4, 0x18, 0xaa, 0xe0, 0x6c, 0xb3, 0xd7, 0x6a, 0xe1, 0x38, 0x66,
+	0x71, 0xbc, 0x82, 0x92, 0x47, 0x78, 0x1e, 0x9c, 0x69, 0x12, 0x8f, 0xf4, 0x62, 0xf6, 0xce, 0x19,
+	0x24, 0x9e, 0xa4, 0x58, 0x0a, 0x47, 0xc4, 0xa2, 0xff, 0xa5, 0x98, 0xe0, 0xe0, 0x7b, 0x60, 0xd6,
+	0x22, 0xad, 0xb6, 0x75, 0x80, 0x5b, 0x0d, 0x8f, 0xec, 0xb1, 0x17, 0xcd, 0x94, 0x2f, 0x0e, 0xfa,
+	0xda, 0xf2, 0xa1, 0xb7, 0xdf, 0x79, 0xa0, 0x63, 0xd2, 0x6a, 0x1b, 0xf8, 0x00, 0xb7, 0x8c, 0xae,
+	0x47, 0xf6, 0x74, 0x94, 0x82, 0xc3, 0xfb, 0x60, 0xc6, 0xdc, 0xc5, 0x01, 0x31, 0xdb, 0xed, 0x48,
+	0x2d, 0x32, 0xee, 0xf2, 0xa0, 0xaf, 0x2d, 0x72, 0xae, 0x47, 0x5d, 0x86, 0xd7, 0x6e, 0x47, 0x3a,
+	0x1a, 0xe1, 0xa0, 0x0d, 0x16, 0x1f, 0x79, 0x7e, 0xa7, 0x1b, 0xfa, 0x01, 0x59, 0x77, 0x9c, 0x06,
+	0x23, 0xcf, 0x32, 0xf2, 0xca, 0xa0, 0xaf, 0x5d, 0xe2, 0xe4, 0x9d, 0x04, 0x62, 0xec, 0x11, 0xd2,
+	0x15, 0x2a, 0x79, 0x22, 0x34, 0xc0, 0xd9, 0xb2, 0x17, 0xe3, 0x35, 0x3f, 0x52, 0x31, 0xd3, 0x58,
+	0x1a, 0xf4, 0xb5, 0x05, 0xae, 0xb1, 0xed, 0xc5, 0xd8, 0x68, 0xfb, 0x91, 0x8e, 0x12, 0x0c, 0x7c,
+	0x00, 0x8a, 0x74, 0x05, 0x76, 0xb8, 0xcb, 0xd6, 0xbb, 0xc3, 0x28, 0xea, 0xa0, 0xaf, 0x9d, 0x93,
+	0xd6, 0xdb, 0x09, 0x77, 0xc5, 0x72, 0x65, 0x30, 0x7c, 0x0c, 0x16, 0xe8, 0x63, 0xa5, 0xe3, 0xe3,
+	0x80, 0x34, 0xa2, 0xf0, 0xe0, 0x50, 0xfd, 0x9c, 0x55, 0xa6, 0x7c, 0x65, 0xd0, 0xd7, 0x54, 0x49,
+	0xa0, 0xc5, 0x20, 0x46, 0x97, 0x62, 0x74, 0x94, 0x65, 0x41, 0x13, 0xcc, 0x51, 0x53, 0x03, 0xe3,
+	0x88, 0xcb, 0x7c, 0xc1, 0x65, 0x2e, 0x0d, 0xfa, 0xda, 0x79, 0x49, 0xa6, 0x8b, 0x71, 0x94, 0x88,
+	0xa4, 0x19, 0xb0, 0x01, 0xe0, 0x48, 0xd5, 0x0a, 0xda, 0x2c, 0x29, 0xea, 0x67, 0x6c, 0x3f, 0x94,
+	0xb5, 0x41, 0x5f, 0xbb, 0x9c, 0x0f, 0x07, 0x0b, 0x98, 0x8e, 0xc6, 0x70, 0xe1, 0xb7, 0xc0, 0x69,
+	0x6a, 0x55, 0x7f, 0xc5, 0xf7, 0x71, 0x51, 0xec, 0x1d, 0x6a, 0x2b, 0x2f, 0x0c, 0xfa, 0x5a, 0x71,
+	0x24, 0xa8, 0x23, 0x06, 0x85, 0x6b, 0x60, 0x9e, 0x8b, 0x54, 0x70, 0x44, 0xd6, 0x3c, 0xe2, 0xa9,
+	0x3f, 0x2a, 0xb0, 0x00, 0x2e, 0x0f, 0xfa, 0xda, 0x05, 0x8e, 0x17, 0xef, 0x6e, 0xe1, 0x88, 0x18,
+	0x6d, 0x8f, 0x78, 0x3a, 0xca, 0x70, 0xd2, 0x2a, 0xac, 0x2a, 0x3f, 0x3e, 0x52, 0x85, 0x57, 0x26,
+	0xc3, 0xa1, 0x39, 0xe5, 0x96, 0x0d, 0x7c, 0xc8, 0x42, 0xf9, 0x09, 0x17, 0x91, 0x72, 0x2a, 0x44,
+	0x9e, 0xe3, 0x43, 0x11, 0x49, 0x9a, 0x91, 0x92, 0x60, 0x71, 0xfc, 0xf4, 0x28, 0x09, 0x1e, 0x46,
+	0x9a, 0x01, 0x1d, 0xb0, 0xc4, 0x0d, 0x4e, 0xd4, 0x8b, 0x09, 0x6e, 0x57, 0x4c, 0x16, 0xcb, 0xcf,
+	0xb8, 0xd0, 0xb5, 0x41, 0x5f, 0xbb, 0x9a, 0x12, 0x22, 0x1c, 0x66, 0xb4, 0x3c, 0x11, 0xd2, 0x38,
+	0xfa, 0x18, 0x55, 0x16, 0xde, 0xcf, 0x4f, 0xa0, 0xca, 0xa3, 0x1c, 0x47, 0x87, 0xef, 0x83, 0x59,
+	0xba, 0x9f, 0x86, 0xb5, 0xfb, 0x67, 0x21, 0x7b, 0xf8, 0xd9, 0xfe, 0x93, 0x2a, 0x97, 0xc2, 0xcb,
+	0x7c, 0x16, 0xce, 0xbf, 0x8e, 0xe0, 0x8b, 0xcb, 0x43, 0xc6, 0xc3, 0x77, 0x40, 0x91, 0x3e, 0x27,
+	0xf5, 0xfa, 0x77, 0x21, 0x7b, 0x16, 0x19, 0x7d, 0x54, 0x2d, 0x19, 0x2d, 0x91, 0xd9, 0xbb, 0xff,
+	0x33, 0x99, 0x2c, 0x0e, 0xb2, 0x84, 0x86, 0x35, 0xb0, 0x48, 0x1f, 0xd3, 0x35, 0xfa, 0xa6, 0x90,
+	0x3d, 0x3b, 0x4c, 0x22, 0x57, 0xa1, 0x3c, 0x35, 0xa7, 0xc7, 0x42, 0xfa, 0xef, 0xb1, 0x7a, 0x3c,
+	0xb2, 0x3c, 0x95, 0xde, 0xca, 0xcd, 0xc0, 0xeb, 0xc6, 0x7b, 0x21, 0xcf, 0xec, 0x9f, 0x4f, 0x67,
+	0x57, 0x17, 0x0b, 0x77, 0x92, 0x58, 0x19, 0xae, 0x7f, 0x3d, 0x9b, 0x34, 0x1b, 0x7a, 0x3b, 0xd2,
+	0x08, 0xe9, 0xed, 0xa8, 0x64, 0x6f, 0x47, 0xba, 0x1c, 0x71, 0x3b, 0x0a, 0x0c, 0xfc, 0x7f, 0x70,
+	0xb6, 0x86, 0xc9, 0x27, 0x61, 0xf4, 0x9c, 0x77, 0x96, 0x32, 0x1c, 0xf4, 0xb5, 0x79, 0x0e, 0x0f,
+	0xb8, 0x43, 0x47, 0x09, 0x04, 0x5e, 0x07, 0xa7, 0xd9, 0xdd, 0xcd, 0x17, 0x2a, 0xdd, 0x11, 0xfc,
+	0xb2, 0x66, 0x4e, 0x58, 0x01, 0xf3, 0x6b, 0xb8, 0xe3, 0x1d, 0xda, 0x1e, 0xc1, 0x41, 0xeb, 0x70,
+	0x33, 0x66, 0x7d, 0x62, 0x4e, 0x3e, 0xdc, 0x6d, 0xea, 0x37, 0x3a, 0x1c, 0x60, 0xec, 0xc7, 0x3a,
+	0xca, 0x50, 0xe0, 0x77, 0x41, 0x29, 0x6d, 0x41, 0x2f, 0x58, 0xc7, 0x98, 0x93, 0x3b, 0x46, 0x56,
+	0xc6, 0x88, 0x5e, 0xe8, 0x28, 0xc7, 0x83, 0x1f, 0x81, 0xe5, 0xad, 0x6e, 0xdb, 0x23, 0xb8, 0x9d,
+	0x89, 0x6b, 0x8e, 0x09, 0x5e, 0x1f, 0xf4, 0x35, 0x8d, 0x0b, 0xf6, 0x38, 0xcc, 0xc8, 0xc7, 0x37,
+	0x5e, 0x01, 0xbe, 0x05, 0x00, 0x0a, 0x7b, 0x41, 0xdb, 0xf6, 0xf7, 0x7d, 0xa2, 0x2e, 0xaf, 0x2a,
+	0x37, 0xa7, 0xcb, 0xe7, 0x07, 0x7d, 0x0d, 0x72, 0xbd, 0x88, 0xfa, 0x8c, 0x0e, 0x75, 0xea, 0x48,
+	0x42, 0xc2, 0x0f, 0xc0, 0x9c, 0x75, 0xe0, 0x93, 0x7a, 0x40, 0xdb, 0x5b, 0x2f, 0xc2, 0xea, 0xf9,
+	0x5c, 0x3b, 0x38, 0xf0, 0x89, 0x11, 0x06, 0xc6, 0x0e, 0x07, 0xd0, 0x76, 0x20, 0x13, 0xe0, 0x3a,
+	0x28, 0x55, 0xc2, 0x20, 0xf6, 0x63, 0x16, 0x4a, 0x65, 0x0f, 0xb7, 0x9e, 0xab, 0x17, 0xb2, 0xad,
+	0xa9, 0x35, 0x42, 0x18, 0x2d, 0x0a, 0xd1, 0x51, 0x8e, 0x05, 0xdf, 0x06, 0x45, 0x2b, 0xf0, 0xb6,
+	0x3b, 0xb8, 0xd1, 0x8d, 0xc2, 0x1d, 0x55, 0x65, 0x22, 0x17, 0x06, 0x7d, 0x6d, 0x49, 0x44, 0xc2,
+	0x9c, 0x46, 0x97, 0x7a, 0x69, 0x7f, 0x1c, 0x61, 0x69, 0xa9, 0x45, 0x3c, 0x2c, 0x2f, 0x9b, 0xb1,
+	0xaa, 0x65, 0x4b, 0x2d, 0xe2, 0x17, 0x29, 0x65, 0xa5, 0x4e, 0x53, 0x60, 0x79, 0x28, 0xd2, 0xdc,
+	0xeb, 0xed, 0xec, 0x74, 0xb0, 0xba, 0x9a, 0x4d, 0x46, 0x22, 0x12, 0x73, 0xc0, 0x48, 0x43, 0x30,
+	0xe0, 0xbb, 0x60, 0x56, 0x58, 0x2a, 0x5e, 0x8c, 0x63, 0xf5, 0xda, 0x6a, 0x21, 0x7d, 0x7c, 0x12,
+	0x85, 0x16, 0x75, 0xeb, 0x28, 0x85, 0x86, 0x1b, 0xd2, 0x7c, 0x52, 0x09, 0xf7, 0xf7, 0xbd, 0xa0,
+	0x1d, 0xab, 0x3a, 0x93, 0xb8, 0x3a, 0xe8, 0x6b, 0x17, 0xb3, 0xf3, 0x49, 0x4b, 0x60, 0xe4, 0xf1,
+	0x24, 0xe1, 0xd1, 0x9c, 0xa0, 0x5e, 0x10, 0xe0, 0x68, 0x38, 0x62, 0xdd, 0xca, 0xf6, 0xb6, 0x88,
+	0xf9, 0xe5, 0x21, 0x2b, 0x43, 0x81, 0x55, 0x50, 0xb2, 0x0e, 0x08, 0x8e, 0x02, 0xaf, 0x33, 0x94,
+	0xb9, 0xcd, 0x64, 0xa4, 0x80, 0xb0, 0x40, 0xc8, 0x42, 0x39, 0x1a, 0x2d, 0x6f, 0x93, 0x44, 0x38,
+	0x8e, 0x9d, 0xc3, 0x2e, 0x8e, 0x55, 0xcc, 0x96, 0x25, 0x95, 0x37, 0x66, 0x4e, 0x83, 0x50, 0xaf,
+	0x8e, 0x64, 0x2c, 0xdd, 0xa5, 0xfc, 0x71, 0x03, 0x1f, 0x36, 0xfd, 0x4f, 0x31, 0x1b, 0x9e, 0xa6,
+	0xe5, 0xc2, 0x08, 0x32, 0xbd, 0x75, 0x63, 0xff, 0x53, 0xba, 0x4b, 0x53, 0x04, 0x3a, 0xb4, 0xa4,
+	0x0c, 0xb6, 0x17, 0xed, 0x62, 0x75, 0x97, 0xc9, 0xac, 0x0e, 0xfa, 0xda, 0x95, 0xb1, 0x32, 0x46,
+	0x87, 0xc2, 0x74, 0x34, 0x86, 0x0b, 0x9f, 0x82, 0x73, 0x23, 0x6b, 0x6f, 0x67, 0xc7, 0x3f, 0x40,
+	0x5e, 0xb0, 0x8b, 0xd5, 0x3d, 0xa6, 0xa9, 0x0f, 0xfa, 0xda, 0x4a, 0x5e, 0x93, 0xe1, 0x8c, 0x88,
+	0x02, 0x75, 0x34, 0x96, 0x0f, 0xbf, 0x07, 0x2e, 0x8c, 0xb3, 0x3b, 0x07, 0x81, 0xea, 0x33, 0xe9,
+	0xd7, 0x06, 0x7d, 0x4d, 0x3f, 0x52, 0xda, 0x20, 0x07, 0x81, 0x8e, 0x26, 0xc9, 0xd0, 0x61, 0x72,
+	0xe8, 0x72, 0x0e, 0x82, 0x7a, 0x37, 0x56, 0xbf, 0xcf, 0x94, 0xa5, 0x92, 0x4a, 0xca, 0xe4, 0x20,
+	0x30, 0xc2, 0x6e, 0xac, 0xa3, 0x2c, 0x6b, 0x54, 0x16, 0xde, 0xe3, 0x63, 0x3e, 0x93, 0x4e, 0xcb,
+	0x7d, 0x58, 0xe8, 0xf0, 0xe9, 0x20, 0x1e, 0x96, 0x45, 0x10, 0xe0, 0x9b, 0x60, 0x86, 0x1b, 0x9e,
+	0x34, 0x9a, 0x7c, 0x14, 0x9d, 0x96, 0xc7, 0x78, 0xc1, 0xfe, 0x98, 0xbe, 0x7d, 0x04, 0xd4, 0xbf,
+	0x99, 0xe3, 0x03, 0x23, 0x6d, 0x03, 0x35, 0x6f, 0x1f, 0x8b, 0x06, 0x23, 0xb5, 0x81, 0xc0, 0xdb,
+	0xc7, 0x3a, 0x62, 0x4e, 0xb9, 0x11, 0x4d, 0x9d, 0xa0, 0x11, 0xdd, 0x06, 0x67, 0x9e, 0x99, 0x36,
+	0x45, 0x17, 0xb2, 0x7d, 0xe8, 0x13, 0xaf, 0xc3, 0xc1, 0x02, 0x01, 0xeb, 0x60, 0x69, 0x1d, 0x7b,
+	0x11, 0xd9, 0xc6, 0x1e, 0xa9, 0x06, 0x04, 0x47, 0x2f, 0xbc, 0x8e, 0x68, 0x33, 0x05, 0x39, 0x9b,
+	0x7b, 0x09, 0xc8, 0xf0, 0x05, 0x4a, 0x47, 0xe3, 0x98, 0xb0, 0x0a, 0x16, 0xad, 0x0e, 0x6e, 0xd1,
+	0xcf, 0x3b, 0xc7, 0xdf, 0xc7, 0x61, 0x8f, 0x6c, 0xc6, 0xac, 0xdd, 0x14, 0xe4, 0x63, 0x8b, 0x05,
+	0xc4, 0x20, 0x1c, 0xa3, 0xa3, 0x3c, 0x8b, 0x9e, 0x5c, 0x9b, 0x5d, 0xaf, 0x3c, 0xd7, 0x5b, 0xc8,
+	0x8e, 0xd5, 0xe5, 0xec, 0x55, 0xd2, 0x61, 0x88, 0x64, 0x4a, 0xef, 0x45, 0x9d, 0x58, 0x47, 0x39,
+	0x1a, 0x44, 0x60, 0xc9, 0x6c, 0xbf, 0xc0, 0x11, 0xf1, 0x63, 0x2c, 0xa9, 0x9d, 0x67, 0x6a, 0xd2,
+	0xe9, 0xf1, 0x12, 0x50, 0x5a, 0x70, 0x1c, 0x19, 0xbe, 0x9d, 0x4c, 0xbc, 0x66, 0x8f, 0x84, 0x8e,
+	0xdd, 0x14, 0x3d, 0x43, 0xaa, 0x8d, 0xd7, 0x23, 0xa1, 0x41, 0xa8, 0x40, 0x1a, 0x49, 0x2f, 0xb6,
+	0xd1, 0x04, 0x6e, 0xf6, 0xc8, 0x9e, 0x68, 0x15, 0x13, 0x86, 0x76, 0xaf, 0x97, 0x19, 0xda, 0x29,
+	0x05, 0xbe, 0x2b, 0x8b, 0x3c, 0xf2, 0x3b, 0x58, 0xbd, 0xc8, 0xca, 0x7d, 0x6e, 0xd0, 0xd7, 0x4a,
+	0x42, 0x84, 0xb2, 0x77, 0x7c, 0x76, 0xcd, 0xa7, 0xb1, 0xa3, 0xe8, 0x37, 0xf0, 0x21, 0x23, 0x5f,
+	0xca, 0xee, 0x2c, 0x7a, 0x72, 0x38, 0x37, 0x8d, 0x84, 0x76, 0x6e, 0xa2, 0x66, 0x02, 0x97, 0xb3,
+	0xf3, 0xbe, 0x34, 0xad, 0x71, 0x9d, 0x71, 0x34, 0x9a, 0x0b, 0x5e, 0x2e, 0x3a, 0xca, 0xb1, 0xaa,
+	0x68, 0xac, 0x2a, 0x52, 0x2e, 0x44, 0x8d, 0xd9, 0x08, 0xc8, 0x0b, 0x92, 0xa1, 0x40, 0x07, 0x2c,
+	0x0e, 0x4b, 0x34, 0xd4, 0x59, 0x65, 0x3a, 0xd2, 0x65, 0xe3, 0x07, 0x3e, 0xf1, 0xbd, 0x8e, 0x31,
+	0xaa, 0xb2, 0x24, 0x99, 0x17, 0xa0, 0xdf, 0xbb, 0xf4, 0xef, 0xa4, 0xbe, 0xd7, 0x58, 0x8d, 0xb2,
+	0x63, 0xf2, 0xa8, 0xc8, 0x32, 0x98, 0x5e, 0xd7, 0x6c, 0x60, 0x4f, 0x97, 0x59, 0x67, 0x12, 0xd2,
+	0x86, 0xe3, 0x53, 0x7e, 0xae, 0xd6, 0x63, 0xb8, 0x74, 0xb0, 0x4d, 0x3e, 0x01, 0x58, 0xbe, 0xaf,
+	0x4f, 0xfe, 0x62, 0xe0, 0xe9, 0x4e, 0xc1, 0x93, 0xc5, 0x24, 0xe5, 0x7e, 0x75, 0xe2, 0xcc, 0xcf,
+	0xc9, 0x32, 0x18, 0x6e, 0x66, 0x66, 0x74, 0xa6, 0x70, 0xe3, 0xb8, 0x11, 0x9d, 0x0b, 0xe5, 0x99,
+	0x74, 0x4c, 0xa9, 0xf2, 0x52, 0x54, 0x3a, 0x3d, 0xf6, 0x7f, 0x9d, 0x5b, 0xd9, 0xbd, 0x93, 0x94,
+	0xaa, 0xc5, 0x01, 0x3a, 0xca, 0x30, 0xe8, 0x89, 0x4e, 0x5b, 0x9a, 0xc4, 0x23, 0x58, 0x74, 0x76,
+	0x29, 0xc1, 0x19, 0x21, 0x23, 0xa6, 0x30, 0x1d, 0x8d, 0x23, 0xe7, 0x35, 0x9d, 0xf0, 0x39, 0x0e,
+	0xd4, 0xd7, 0x8f, 0xd3, 0x24, 0x14, 0x96, 0xd3, 0x64, 0x64, 0xf8, 0x10, 0xcc, 0x25, 0xdf, 0x17,
+	0x95, 0xb0, 0x17, 0x10, 0xf5, 0x3e, 0xbb, 0x0b, 0xe5, 0x06, 0x93, 0x7c, 0x8e, 0xb4, 0xa8, 0x9f,
+	0x36, 0x18, 0x19, 0x0f, 0x6d, 0xb0, 0xf8, 0xa4, 0x17, 0x12, 0xaf, 0xec, 0xb5, 0x9e, 0xe3, 0xa0,
+	0x5d, 0x3e, 0x24, 0x38, 0x56, 0xdf, 0x64, 0x22, 0xd2, 0xfc, 0xfe, 0x31, 0x85, 0x18, 0xdb, 0x1c,
+	0x63, 0x6c, 0x53, 0x90, 0x8e, 0xf2, 0x44, 0xda, 0x4a, 0x1a, 0x11, 0x7e, 0x1a, 0x12, 0xac, 0x3e,
+	0xcc, 0x5e, 0x57, 0xdd, 0x08, 0x1b, 0x2f, 0x42, 0x9a, 0x9d, 0x04, 0x23, 0x67, 0x24, 0x8c, 0xa2,
+	0x5e, 0x97, 0xf0, 0xe9, 0xf8, 0x83, 0xec, 0x36, 0x1e, 0x66, 0x84, 0xa3, 0x92, 0x09, 0x79, 0x1c,
+	0xf9, 0xf6, 0xcb, 0x29, 0xe9, 0xbf, 0x84, 0x70, 0x01, 0x14, 0x6b, 0x75, 0xc7, 0x6d, 0x3a, 0x26,
+	0x72, 0xac, 0xb5, 0xd2, 0x29, 0x78, 0x1e, 0xc0, 0x6a, 0xad, 0xea, 0x54, 0x4d, 0x9b, 0x1b, 0x5d,
+	0xcb, 0xa9, 0xac, 0x95, 0x00, 0x2c, 0x81, 0x59, 0x64, 0x49, 0x96, 0x22, 0xb5, 0x34, 0xab, 0x8f,
+	0x1d, 0x0b, 0x6d, 0x72, 0xcb, 0x39, 0xb8, 0x0a, 0xae, 0x34, 0xab, 0x8f, 0x9f, 0x6c, 0x55, 0x39,
+	0xc6, 0x35, 0x6b, 0x6b, 0x2e, 0xb2, 0x36, 0xeb, 0x4f, 0x2d, 0x77, 0xcd, 0x74, 0xcc, 0xd2, 0x32,
+	0xbc, 0x06, 0xae, 0xe6, 0x10, 0x26, 0xaa, 0xac, 0x57, 0x13, 0xc8, 0x0a, 0xbc, 0x0b, 0x5e, 0x3f,
+	0x4a, 0x84, 0x3d, 0x37, 0x9d, 0x7a, 0xc3, 0x35, 0x1f, 0x5b, 0x35, 0xa7, 0xa4, 0xc1, 0xab, 0xe0,
+	0x62, 0xd9, 0x36, 0x2b, 0x1b, 0xeb, 0x75, 0xdb, 0x72, 0x1b, 0x96, 0x85, 0xdc, 0x46, 0x1d, 0x39,
+	0xae, 0xf3, 0xa1, 0x8b, 0x3e, 0x2c, 0xb5, 0xa1, 0x06, 0x2e, 0x6f, 0xd5, 0x26, 0x03, 0x30, 0xbc,
+	0x04, 0x96, 0xd7, 0x2c, 0xdb, 0xfc, 0x28, 0xe7, 0x7a, 0xa9, 0xc0, 0x2b, 0xe0, 0xc2, 0x56, 0x6d,
+	0xbc, 0xf7, 0x73, 0xe5, 0xf6, 0xdf, 0x01, 0x28, 0x4a, 0xe3, 0x37, 0x54, 0xc1, 0xb9, 0x24, 0x23,
+	0xf5, 0x9a, 0xe5, 0x3e, 0xaa, 0xdb, 0x76, 0xfd, 0x99, 0x85, 0x4a, 0xa7, 0xc4, 0xa2, 0x72, 0x1e,
+	0x77, 0xab, 0xe6, 0x54, 0x6d, 0xd7, 0x41, 0xd5, 0xc7, 0x8f, 0x2d, 0xe4, 0x36, 0x6b, 0x66, 0xa3,
+	0xb9, 0x5e, 0x77, 0x4a, 0x0a, 0x84, 0x60, 0x3e, 0x21, 0xd8, 0x96, 0xb9, 0x66, 0xa1, 0xd2, 0x14,
+	0xbc, 0x05, 0x6e, 0xa4, 0x6d, 0x93, 0xe8, 0x05, 0x99, 0xfe, 0x64, 0xab, 0x8e, 0xb6, 0x36, 0x4b,
+	0xa7, 0x69, 0xa9, 0x13, 0x9b, 0x69, 0xdb, 0xa5, 0x69, 0x78, 0x1d, 0x68, 0x49, 0xa6, 0xa5, 0x24,
+	0xa7, 0x22, 0x07, 0xf0, 0x01, 0x78, 0xeb, 0x18, 0xd0, 0xa4, 0x28, 0x8a, 0xb4, 0x32, 0x63, 0xb8,
+	0x62, 0x3d, 0xb3, 0xf0, 0x4d, 0xf0, 0xc6, 0x44, 0xf7, 0x24, 0xd1, 0x39, 0xf8, 0x10, 0xbc, 0x33,
+	0x86, 0xc5, 0x57, 0x29, 0x2c, 0x4d, 0xa7, 0x8e, 0xac, 0x21, 0xc7, 0x7d, 0x84, 0xea, 0x9b, 0x6e,
+	0xb3, 0x82, 0x4c, 0xa7, 0xb2, 0x5e, 0x9a, 0x87, 0xb7, 0xc1, 0x6b, 0x13, 0xb7, 0x43, 0x7a, 0xf5,
+	0x6d, 0x68, 0x82, 0xf7, 0x4e, 0x86, 0x9d, 0x14, 0x2f, 0x86, 0xaf, 0x82, 0xd5, 0xc9, 0x12, 0x22,
+	0x17, 0x3b, 0xf0, 0x1d, 0xf0, 0xed, 0xe3, 0x50, 0x93, 0x5e, 0xb1, 0x7b, 0xf4, 0x2b, 0x44, 0xfd,
+	0xf7, 0xe8, 0xd9, 0x9b, 0x8c, 0xa2, 0x3b, 0xc2, 0x87, 0xff, 0x07, 0xf4, 0xb1, 0x9b, 0x3d, 0x9d,
+	0x96, 0x97, 0x0a, 0xbc, 0x03, 0x6e, 0x21, 0xb3, 0xb6, 0x56, 0xdf, 0x74, 0x4f, 0x80, 0xff, 0x5c,
+	0x81, 0xef, 0x83, 0xb7, 0x8f, 0x07, 0x4e, 0x5a, 0xe0, 0x17, 0x0a, 0xb4, 0xc0, 0x07, 0x27, 0x7e,
+	0xdf, 0x24, 0x99, 0x5f, 0x2b, 0xf0, 0x1a, 0xb8, 0x32, 0x9e, 0x2f, 0xea, 0xf0, 0x1b, 0x05, 0xde,
+	0x04, 0xd7, 0x8f, 0x7c, 0x93, 0x40, 0xfe, 0x56, 0x81, 0xdf, 0x01, 0xf7, 0x8f, 0x82, 0x4c, 0x0a,
+	0xe3, 0x77, 0x0a, 0x7c, 0x08, 0x1e, 0x9c, 0xe0, 0x1d, 0x93, 0x04, 0x7e, 0x7f, 0xc4, 0x3a, 0x44,
+	0xb1, 0xbf, 0x3c, 0x7e, 0x1d, 0x02, 0xf9, 0x07, 0x05, 0xae, 0x80, 0x8b, 0xe3, 0x21, 0x74, 0x4f,
+	0xfc, 0x51, 0x81, 0x37, 0xc0, 0xea, 0x91, 0x4a, 0x14, 0xf6, 0x27, 0x05, 0xaa, 0x60, 0xa9, 0x56,
+	0x77, 0x1f, 0x99, 0x55, 0xdb, 0x7d, 0x56, 0x75, 0xd6, 0xdd, 0xa6, 0x83, 0xac, 0x66, 0xb3, 0xf4,
+	0xcb, 0x29, 0x1a, 0x4a, 0xca, 0x53, 0xab, 0x0b, 0xa7, 0xfb, 0xa8, 0x8e, 0x5c, 0xbb, 0xfa, 0xd4,
+	0xaa, 0x51, 0xe4, 0x67, 0x53, 0x70, 0x01, 0x00, 0x0a, 0x6b, 0xd4, 0xab, 0x35, 0xa7, 0x59, 0xfa,
+	0x61, 0x01, 0xce, 0x81, 0x57, 0xac, 0x0f, 0x1d, 0x0b, 0xd5, 0x4c, 0xbb, 0xf4, 0x8f, 0xc2, 0xed,
+	0x10, 0x80, 0xd1, 0x57, 0x3d, 0x3c, 0x03, 0xa6, 0x36, 0x9e, 0x96, 0x4e, 0xc1, 0x19, 0x30, 0x6d,
+	0x5b, 0x66, 0xd3, 0x2a, 0x29, 0x70, 0x09, 0x2c, 0x58, 0xb6, 0x55, 0x71, 0xaa, 0xf5, 0x9a, 0x8b,
+	0xb6, 0x6a, 0x35, 0x76, 0x6f, 0x96, 0xc0, 0xec, 0x33, 0x7a, 0xf6, 0x13, 0x4b, 0x01, 0x2e, 0x83,
+	0x45, 0xbb, 0x5e, 0xd9, 0x70, 0x91, 0x59, 0xb1, 0x50, 0x62, 0x3e, 0x4d, 0x81, 0x4c, 0x28, 0xb1,
+	0x4c, 0xdf, 0x7b, 0x08, 0x66, 0x9c, 0xc8, 0x0b, 0xe2, 0x6e, 0x18, 0x11, 0x78, 0x4f, 0x7e, 0x98,
+	0x17, 0xbf, 0x31, 0x88, 0xdf, 0xde, 0x2e, 0x2d, 0x0c, 0x9f, 0xf9, 0x4f, 0x60, 0xfa, 0xa9, 0x9b,
+	0xca, 0x1b, 0x4a, 0xf9, 0xdc, 0xcb, 0xbf, 0xad, 0x9c, 0x7a, 0xf9, 0xd5, 0x8a, 0xf2, 0xe5, 0x57,
+	0x2b, 0xca, 0x5f, 0xbf, 0x5a, 0x51, 0x7e, 0xf1, 0xf5, 0xca, 0xa9, 0xed, 0x33, 0xec, 0xb7, 0xbb,
+	0xfb, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x78, 0xc5, 0xb4, 0x04, 0x1c, 0x00, 0x00,
 }
 }

+ 21 - 7
functional/rpcpb/rpc.proto

@@ -30,7 +30,6 @@ service Transport {
 message Member {
 message Member {
   // EtcdExecPath is the executable etcd binary path in agent server.
   // EtcdExecPath is the executable etcd binary path in agent server.
   string EtcdExecPath = 1 [(gogoproto.moretags) = "yaml:\"etcd-exec-path\""];
   string EtcdExecPath = 1 [(gogoproto.moretags) = "yaml:\"etcd-exec-path\""];
-
   // TODO: support embedded etcd
   // TODO: support embedded etcd
 
 
   // AgentAddr is the agent HTTP server address.
   // AgentAddr is the agent HTTP server address.
@@ -74,6 +73,9 @@ message Member {
   // PeerTrustedCAData contains trusted CA file contents from this member's etcd server.
   // PeerTrustedCAData contains trusted CA file contents from this member's etcd server.
   string PeerTrustedCAData = 505 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-data\""];
   string PeerTrustedCAData = 505 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-data\""];
   string PeerTrustedCAPath = 506 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-path\""];
   string PeerTrustedCAPath = 506 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-path\""];
+
+  // SnapshotPath is the snapshot file path to store or restore from.
+  string SnapshotPath = 601 [(gogoproto.moretags) = "yaml:\"snapshot-path\""];
 }
 }
 
 
 message Tester {
 message Tester {
@@ -523,14 +525,26 @@ enum FailureCase {
   // requests.
   // requests.
   RANDOM_DELAY_PEER_PORT_TX_RX_ALL = 211;
   RANDOM_DELAY_PEER_PORT_TX_RX_ALL = 211;
 
 
-  // NO_FAIL_WITH_STRESS runs no-op failure injection that does not do
-  // anything against cluster for "failure-delay-ms" duration, while
-  // stressers are still sending requests.
+  // NO_FAIL_WITH_STRESS stops injecting failures while testing the
+  // consistency and correctness under pressure loads, for the duration of
+  // "failure-delay-ms". Goal is to ensure cluster be still making progress
+  // on recovery, and verify system does not deadlock following a sequence
+  // of failure injections.
+  // The expected behavior is that cluster remains fully operative in healthy
+  // condition. As always, after recovery, each member must be able to process
+  // client requests.
   NO_FAIL_WITH_STRESS = 300;
   NO_FAIL_WITH_STRESS = 300;
 
 
-  // NO_FAIL_WITH_NO_STRESS_FOR_LIVENESS runs no-op failure injection
-  // that does not do anything against cluster for "failure-delay-ms"
-  // duration, while all stressers are stopped.
+  // NO_FAIL_WITH_NO_STRESS_FOR_LIVENESS neither injects failures nor
+  // sends stressig client requests to the cluster, for the duration of
+  // "failure-delay-ms". Goal is to ensure cluster be still making progress
+  // on recovery, and verify system does not deadlock following a sequence
+  // of failure injections.
+  // The expected behavior is that cluster remains fully operative in healthy
+  // condition, and clients requests during liveness period succeed without
+  // errors.
+  // Note: this is how Google Chubby does failure injection testing
+  // https://static.googleusercontent.com/media/research.google.com/en//archive/paxos_made_live.pdf.
   NO_FAIL_WITH_NO_STRESS_FOR_LIVENESS = 301;
   NO_FAIL_WITH_NO_STRESS_FOR_LIVENESS = 301;
 
 
   // FAILPOINTS injects failpoints to etcd server runtime, triggering panics
   // FAILPOINTS injects failpoints to etcd server runtime, triggering panics