@chill-institute/contracts 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,12 +4,237 @@
4
4
 
5
5
  import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
7
8
 
8
9
  /**
9
10
  * Describes the file chill/v4/api.proto.
10
11
  */
11
12
  export declare const file_chill_v4_api: GenFile;
12
13
 
14
+ /**
15
+ * @generated from message chill.v4.ResolvePlaybackRequest
16
+ */
17
+ export declare type ResolvePlaybackRequest = Message<"chill.v4.ResolvePlaybackRequest"> & {
18
+ /**
19
+ * Positive provider file ID. Check current access for the authenticated user
20
+ * before resolving any URL; never trust a previous folder listing.
21
+ *
22
+ * @generated from field: int64 file_id = 1;
23
+ */
24
+ fileId: bigint;
25
+ };
26
+
27
+ /**
28
+ * Describes the message chill.v4.ResolvePlaybackRequest.
29
+ * Use `create(ResolvePlaybackRequestSchema)` to create a new message.
30
+ */
31
+ export declare const ResolvePlaybackRequestSchema: GenMessage<ResolvePlaybackRequest>;
32
+
33
+ /**
34
+ * @generated from message chill.v4.ResolvePlaybackResponse
35
+ */
36
+ export declare type ResolvePlaybackResponse = Message<"chill.v4.ResolvePlaybackResponse"> & {
37
+ /**
38
+ * Exactly one result is required. Invalid/expired credentials return
39
+ * unauthenticated, not unavailable; transient provider failure returns
40
+ * unavailable RPC status. Calls never initiate transfers or conversion.
41
+ *
42
+ * @generated from oneof chill.v4.ResolvePlaybackResponse.result
43
+ */
44
+ result: {
45
+ /**
46
+ * @generated from field: chill.v4.PlaybackReady ready = 1;
47
+ */
48
+ value: PlaybackReady;
49
+ case: "ready";
50
+ } | {
51
+ /**
52
+ * @generated from field: chill.v4.PlaybackPending pending = 2;
53
+ */
54
+ value: PlaybackPending;
55
+ case: "pending";
56
+ } | {
57
+ /**
58
+ * @generated from field: chill.v4.PlaybackUnavailable unavailable = 3;
59
+ */
60
+ value: PlaybackUnavailable;
61
+ case: "unavailable";
62
+ } | { case: undefined; value?: undefined };
63
+ };
64
+
65
+ /**
66
+ * Describes the message chill.v4.ResolvePlaybackResponse.
67
+ * Use `create(ResolvePlaybackResponseSchema)` to create a new message.
68
+ */
69
+ export declare const ResolvePlaybackResponseSchema: GenMessage<ResolvePlaybackResponse>;
70
+
71
+ /**
72
+ * @generated from message chill.v4.PlaybackReady
73
+ */
74
+ export declare type PlaybackReady = Message<"chill.v4.PlaybackReady"> & {
75
+ /**
76
+ * @generated from field: chill.v4.PlaybackUrl media = 1;
77
+ */
78
+ media?: PlaybackUrl | undefined;
79
+
80
+ /**
81
+ * Provider format information when known; unspecified values mean unknown.
82
+ * Clients decide whether their playback surface supports the format.
83
+ *
84
+ * @generated from field: chill.v4.PlaybackFormat format = 2;
85
+ */
86
+ format?: PlaybackFormat | undefined;
87
+
88
+ /**
89
+ * At most 32 tracks. Every URL is independently usable without a provider
90
+ * bearer; omit tracks that cannot meet this requirement.
91
+ *
92
+ * @generated from field: repeated chill.v4.Subtitle subtitles = 3;
93
+ */
94
+ subtitles: Subtitle[];
95
+ };
96
+
97
+ /**
98
+ * Describes the message chill.v4.PlaybackReady.
99
+ * Use `create(PlaybackReadySchema)` to create a new message.
100
+ */
101
+ export declare const PlaybackReadySchema: GenMessage<PlaybackReady>;
102
+
103
+ /**
104
+ * @generated from message chill.v4.PlaybackPending
105
+ */
106
+ export declare type PlaybackPending = Message<"chill.v4.PlaybackPending"> & {
107
+ /**
108
+ * Describes existing provider work only; callers must explicitly resolve
109
+ * again to observe a change. No background polling or conversion request.
110
+ *
111
+ * @generated from field: chill.v4.PendingReason reason = 1;
112
+ */
113
+ reason: PendingReason;
114
+ };
115
+
116
+ /**
117
+ * Describes the message chill.v4.PlaybackPending.
118
+ * Use `create(PlaybackPendingSchema)` to create a new message.
119
+ */
120
+ export declare const PlaybackPendingSchema: GenMessage<PlaybackPending>;
121
+
122
+ /**
123
+ * @generated from message chill.v4.PlaybackUnavailable
124
+ */
125
+ export declare type PlaybackUnavailable = Message<"chill.v4.PlaybackUnavailable"> & {
126
+ /**
127
+ * @generated from field: chill.v4.UnavailableReason reason = 1;
128
+ */
129
+ reason: UnavailableReason;
130
+ };
131
+
132
+ /**
133
+ * Describes the message chill.v4.PlaybackUnavailable.
134
+ * Use `create(PlaybackUnavailableSchema)` to create a new message.
135
+ */
136
+ export declare const PlaybackUnavailableSchema: GenMessage<PlaybackUnavailable>;
137
+
138
+ /**
139
+ * @generated from message chill.v4.PlaybackUrl
140
+ */
141
+ export declare type PlaybackUrl = Message<"chill.v4.PlaybackUrl"> & {
142
+ /**
143
+ * Required direct HTTPS URL usable without forwarding provider credentials.
144
+ * Signed URLs are sensitive: never log or share-cache them.
145
+ *
146
+ * @generated from field: string url = 1;
147
+ */
148
+ url: string;
149
+
150
+ /**
151
+ * Exactly one expiry state is required. Unknown must be true when selected;
152
+ * unknown expiry is not a guarantee that the URL remains valid.
153
+ *
154
+ * @generated from oneof chill.v4.PlaybackUrl.expiry
155
+ */
156
+ expiry: {
157
+ /**
158
+ * @generated from field: google.protobuf.Timestamp expires_at = 2;
159
+ */
160
+ value: Timestamp;
161
+ case: "expiresAt";
162
+ } | {
163
+ /**
164
+ * @generated from field: bool expiry_unknown = 3;
165
+ */
166
+ value: boolean;
167
+ case: "expiryUnknown";
168
+ } | { case: undefined; value?: undefined };
169
+ };
170
+
171
+ /**
172
+ * Describes the message chill.v4.PlaybackUrl.
173
+ * Use `create(PlaybackUrlSchema)` to create a new message.
174
+ */
175
+ export declare const PlaybackUrlSchema: GenMessage<PlaybackUrl>;
176
+
177
+ /**
178
+ * @generated from message chill.v4.PlaybackFormat
179
+ */
180
+ export declare type PlaybackFormat = Message<"chill.v4.PlaybackFormat"> & {
181
+ /**
182
+ * @generated from field: chill.v4.Container container = 1;
183
+ */
184
+ container: Container;
185
+
186
+ /**
187
+ * @generated from field: chill.v4.VideoCodec video_codec = 2;
188
+ */
189
+ videoCodec: VideoCodec;
190
+
191
+ /**
192
+ * @generated from field: chill.v4.AudioCodec audio_codec = 3;
193
+ */
194
+ audioCodec: AudioCodec;
195
+ };
196
+
197
+ /**
198
+ * Describes the message chill.v4.PlaybackFormat.
199
+ * Use `create(PlaybackFormatSchema)` to create a new message.
200
+ */
201
+ export declare const PlaybackFormatSchema: GenMessage<PlaybackFormat>;
202
+
203
+ /**
204
+ * @generated from message chill.v4.Subtitle
205
+ */
206
+ export declare type Subtitle = Message<"chill.v4.Subtitle"> & {
207
+ /**
208
+ * Unique within the response, without credentials or URLs.
209
+ *
210
+ * @generated from field: string id = 1;
211
+ */
212
+ id: string;
213
+
214
+ /**
215
+ * ISO 639-2 language code, or und when unknown.
216
+ *
217
+ * @generated from field: string language = 2;
218
+ */
219
+ language: string;
220
+
221
+ /**
222
+ * @generated from field: chill.v4.SubtitleFormat format = 3;
223
+ */
224
+ format: SubtitleFormat;
225
+
226
+ /**
227
+ * @generated from field: chill.v4.PlaybackUrl source = 4;
228
+ */
229
+ source?: PlaybackUrl | undefined;
230
+ };
231
+
232
+ /**
233
+ * Describes the message chill.v4.Subtitle.
234
+ * Use `create(SubtitleSchema)` to create a new message.
235
+ */
236
+ export declare const SubtitleSchema: GenMessage<Subtitle>;
237
+
13
238
  /**
14
239
  * @generated from message chill.v4.HealthCheckRequest
15
240
  */
@@ -1796,6 +2021,143 @@ export declare type UserProfile = Message<"chill.v4.UserProfile"> & {
1796
2021
  */
1797
2022
  export declare const UserProfileSchema: GenMessage<UserProfile>;
1798
2023
 
2024
+ /**
2025
+ * @generated from enum chill.v4.PendingReason
2026
+ */
2027
+ export enum PendingReason {
2028
+ /**
2029
+ * @generated from enum value: PENDING_REASON_UNSPECIFIED = 0;
2030
+ */
2031
+ UNSPECIFIED = 0,
2032
+
2033
+ /**
2034
+ * @generated from enum value: PENDING_REASON_PROCESSING = 1;
2035
+ */
2036
+ PROCESSING = 1,
2037
+ }
2038
+
2039
+ /**
2040
+ * Describes the enum chill.v4.PendingReason.
2041
+ */
2042
+ export declare const PendingReasonSchema: GenEnum<PendingReason>;
2043
+
2044
+ /**
2045
+ * @generated from enum chill.v4.UnavailableReason
2046
+ */
2047
+ export enum UnavailableReason {
2048
+ /**
2049
+ * @generated from enum value: UNAVAILABLE_REASON_UNSPECIFIED = 0;
2050
+ */
2051
+ UNSPECIFIED = 0,
2052
+
2053
+ /**
2054
+ * Missing files and files inaccessible to the user are indistinguishable.
2055
+ *
2056
+ * @generated from enum value: UNAVAILABLE_REASON_NOT_FOUND = 1;
2057
+ */
2058
+ NOT_FOUND = 1,
2059
+
2060
+ /**
2061
+ * @generated from enum value: UNAVAILABLE_REASON_UNSUPPORTED_FORMAT = 2;
2062
+ */
2063
+ UNSUPPORTED_FORMAT = 2,
2064
+
2065
+ /**
2066
+ * @generated from enum value: UNAVAILABLE_REASON_NO_PLAYABLE_SOURCE = 3;
2067
+ */
2068
+ NO_PLAYABLE_SOURCE = 3,
2069
+ }
2070
+
2071
+ /**
2072
+ * Describes the enum chill.v4.UnavailableReason.
2073
+ */
2074
+ export declare const UnavailableReasonSchema: GenEnum<UnavailableReason>;
2075
+
2076
+ /**
2077
+ * @generated from enum chill.v4.Container
2078
+ */
2079
+ export enum Container {
2080
+ /**
2081
+ * @generated from enum value: CONTAINER_UNSPECIFIED = 0;
2082
+ */
2083
+ UNSPECIFIED = 0,
2084
+
2085
+ /**
2086
+ * @generated from enum value: CONTAINER_MP4 = 1;
2087
+ */
2088
+ MP4 = 1,
2089
+ }
2090
+
2091
+ /**
2092
+ * Describes the enum chill.v4.Container.
2093
+ */
2094
+ export declare const ContainerSchema: GenEnum<Container>;
2095
+
2096
+ /**
2097
+ * @generated from enum chill.v4.VideoCodec
2098
+ */
2099
+ export enum VideoCodec {
2100
+ /**
2101
+ * @generated from enum value: VIDEO_CODEC_UNSPECIFIED = 0;
2102
+ */
2103
+ UNSPECIFIED = 0,
2104
+
2105
+ /**
2106
+ * @generated from enum value: VIDEO_CODEC_H264 = 1;
2107
+ */
2108
+ H264 = 1,
2109
+ }
2110
+
2111
+ /**
2112
+ * Describes the enum chill.v4.VideoCodec.
2113
+ */
2114
+ export declare const VideoCodecSchema: GenEnum<VideoCodec>;
2115
+
2116
+ /**
2117
+ * @generated from enum chill.v4.AudioCodec
2118
+ */
2119
+ export enum AudioCodec {
2120
+ /**
2121
+ * @generated from enum value: AUDIO_CODEC_UNSPECIFIED = 0;
2122
+ */
2123
+ UNSPECIFIED = 0,
2124
+
2125
+ /**
2126
+ * @generated from enum value: AUDIO_CODEC_AAC = 1;
2127
+ */
2128
+ AAC = 1,
2129
+ }
2130
+
2131
+ /**
2132
+ * Describes the enum chill.v4.AudioCodec.
2133
+ */
2134
+ export declare const AudioCodecSchema: GenEnum<AudioCodec>;
2135
+
2136
+ /**
2137
+ * @generated from enum chill.v4.SubtitleFormat
2138
+ */
2139
+ export enum SubtitleFormat {
2140
+ /**
2141
+ * @generated from enum value: SUBTITLE_FORMAT_UNSPECIFIED = 0;
2142
+ */
2143
+ UNSPECIFIED = 0,
2144
+
2145
+ /**
2146
+ * @generated from enum value: SUBTITLE_FORMAT_VTT = 1;
2147
+ */
2148
+ VTT = 1,
2149
+
2150
+ /**
2151
+ * @generated from enum value: SUBTITLE_FORMAT_SRT = 2;
2152
+ */
2153
+ SRT = 2,
2154
+ }
2155
+
2156
+ /**
2157
+ * Describes the enum chill.v4.SubtitleFormat.
2158
+ */
2159
+ export declare const SubtitleFormatSchema: GenEnum<SubtitleFormat>;
2160
+
1799
2161
  /**
1800
2162
  * @generated from enum chill.v4.IndexerStatus
1801
2163
  */
@@ -2365,6 +2727,17 @@ export declare const UserService: GenService<{
2365
2727
  input: typeof GetFolderRequestSchema;
2366
2728
  output: typeof GetFolderResponseSchema;
2367
2729
  },
2730
+ /**
2731
+ * Resolve media with the same regular user bearer as other UserService RPCs.
2732
+ * Read-only: never initiate a transfer or conversion.
2733
+ *
2734
+ * @generated from rpc chill.v4.UserService.ResolvePlayback
2735
+ */
2736
+ resolvePlayback: {
2737
+ methodKind: "unary";
2738
+ input: typeof ResolvePlaybackRequestSchema;
2739
+ output: typeof ResolvePlaybackResponseSchema;
2740
+ },
2368
2741
  /**
2369
2742
  * @generated from rpc chill.v4.UserService.GetUserProfile
2370
2743
  */
@@ -3,411 +3,540 @@
3
3
  /* eslint-disable */
4
4
 
5
5
  import { enumDesc, fileDesc, messageDesc, serviceDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
6
+ import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
6
7
  import { file_protoc_gen_openapiv2_options_annotations } from "../../protoc-gen-openapiv2/options/annotations_pb.js";
7
8
 
8
9
  /**
9
10
  * Describes the file chill/v4/api.proto.
10
11
  */
11
12
  export const file_chill_v4_api = /*@__PURE__*/
12
- fileDesc("ChJjaGlsbC92NC9hcGkucHJvdG8SCGNoaWxsLnY0IhQKEkhlYWx0aENoZWNrUmVxdWVzdCIgCg5IZWFsdGhSZXNwb25zZRIOCgZzdGF0dXMYASABKAkiGAoWQ29yZUdldEluZGV4ZXJzUmVxdWVzdCJ/CgdJbmRleGVyEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDAoEdGFncxgDIAMoCRIsCgZzdGF0dXMYBiABKA4yFy5jaGlsbC52NC5JbmRleGVyU3RhdHVzSACIAQFCCQoHX3N0YXR1c0oECAQQBUoECAUQBlIHaGVhbHRoeSI+ChdDb3JlR2V0SW5kZXhlcnNSZXNwb25zZRIjCghpbmRleGVycxgBIAMoCzIRLmNoaWxsLnY0LkluZGV4ZXIiGAoWVXNlckdldEluZGV4ZXJzUmVxdWVzdCJCChdVc2VyR2V0SW5kZXhlcnNSZXNwb25zZRInCghpbmRleGVycxgBIAMoCzIVLmNoaWxsLnY0LlVzZXJJbmRleGVyIpQBCgtVc2VySW5kZXhlchIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg8KB2VuYWJsZWQYAyABKAgSDAoEdGFncxgEIAMoCRIsCgZzdGF0dXMYByABKA4yFy5jaGlsbC52NC5JbmRleGVyU3RhdHVzSACIAQFCCQoHX3N0YXR1c0oECAUQBkoECAYQB1IHaGVhbHRoeSIiChFDb3JlU2VhcmNoUmVxdWVzdBINCgVxdWVyeRgBIAEoCSLVBAoLUmVsZWFzZUluZm8SDQoFdGl0bGUYASABKAkSEQoEeWVhchgCIAEoBUgAiAEBEhMKBnNlYXNvbhgDIAEoBUgBiAEBEhQKB2VwaXNvZGUYBCABKAVIAogBARIYCgtlcGlzb2RlX2VuZBgFIAEoBUgDiAEBEhEKBHBhcnQYBiABKAVIBIgBARISCgpyZXNvbHV0aW9uGAogASgJEg8KB3F1YWxpdHkYCyABKAkSDgoGc291cmNlGAwgASgJEg0KBWNvZGVjGA0gASgJEgsKA2hkchgOIAEoCRINCgVhdWRpbxgPIAEoCRINCgVncm91cBgQIAEoCRIRCgljb250YWluZXIYESABKAkSEAoIbGFuZ3VhZ2UYEiABKAkSDgoGcmVnaW9uGBMgASgJEgwKBHNpemUYFCABKAkSEQoJYml0X2RlcHRoGBUgASgJEg8KB2VkaXRpb24YFiABKAkSEAoIZXh0ZW5kZWQYHiABKAgSEQoJaGFyZGNvZGVkGB8gASgIEg4KBnByb3BlchggIAEoCBIOCgZyZXBhY2sYISABKAgSEgoKcmVtYXN0ZXJlZBgiIAEoCBIQCghjb21wbGV0ZRgjIAEoCBIPCgd0aHJlZV9kGCQgASgIEgwKBGltYXgYJSABKAgSDwoHdW5yYXRlZBgmIAEoCBISCgp3aWRlc2NyZWVuGCcgASgIEg4KBmV4Y2VzcxgyIAEoCUIHCgVfeWVhckIJCgdfc2Vhc29uQgoKCF9lcGlzb2RlQg4KDF9lcGlzb2RlX2VuZEIHCgVfcGFydCKAAgoMU2VhcmNoUmVzdWx0EgoKAmlkGAEgASgJEg0KBXRpdGxlGAIgASgJEg8KB2luZGV4ZXIYAyABKAkSDAoEbGluaxgEIAEoCRIUCgdpbWRiX2lkGAUgASgJSACIAQESDQoFcGVlcnMYBiABKAMSDwoHc2VlZGVycxgHIAEoAxIMCgRzaXplGAggASgDEg4KBnNvdXJjZRgJIAEoCRITCgt1cGxvYWRlZF9hdBgKIAEoCRIwCgxyZWxlYXNlX2luZm8YCyABKAsyFS5jaGlsbC52NC5SZWxlYXNlSW5mb0gBiAEBQgoKCF9pbWRiX2lkQg8KDV9yZWxlYXNlX2luZm8idgoOU2VhcmNoUmVzcG9uc2USDQoFcXVlcnkYASABKAkSJwoHcmVzdWx0cxgCIAMoCzIWLmNoaWxsLnY0LlNlYXJjaFJlc3VsdBIsCg1pbmRleGVyX3N0YXRzGAMgAygLMhUuY2hpbGwudjQuSW5kZXhlclN0YXQiYAoLSW5kZXhlclN0YXQSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRISCgplbGFwc2VkX21zGAMgASgFEhQKDHJlc3VsdF9jb3VudBgEIAEoBRINCgVlcnJvchgFIAEoCSJKChFVc2VyU2VhcmNoUmVxdWVzdBINCgVxdWVyeRgBIAEoCRIXCgppbmRleGVyX2lkGAIgASgJSACIAQFCDQoLX2luZGV4ZXJfaWQiQgoYR2V0TW92aWVzQnlTb3VyY2VSZXF1ZXN0EiYKBnNvdXJjZRgBIAEoDjIWLmNoaWxsLnY0Lk1vdmllc1NvdXJjZSLbAgoFTW92aWUSCgoCaWQYASABKAkSDQoFdGl0bGUYAiABKAkSDAoEeWVhchgDIAEoBRImCgZzb3VyY2UYBCABKA4yFi5jaGlsbC52NC5Nb3ZpZXNTb3VyY2USFAoMdGl0bGVfcHJldHR5GAUgASgJEgwKBGxpbmsYBiABKAkSDQoFcGVlcnMYByABKAMSDwoHc2VlZGVycxgIIAEoAxIMCgRzaXplGAkgASgDEhMKC3VwbG9hZGVkX2F0GAogASgJEhIKCnBvc3Rlcl91cmwYCyABKAkSDgoGcmF0aW5nGAwgASgBEhQKDGV4dGVybmFsX3VybBgNIAEoCRIUCgxiYWNrZHJvcF91cmwYDiABKAkSEAoIb3ZlcnZpZXcYDyABKAkSDgoGZ2VucmVzGBAgAygJEhQKDHJlbGVhc2VfZGF0ZRgRIAEoCToSkkEPCg3SAQpwb3N0ZXJfdXJsImQKGUdldE1vdmllc0J5U291cmNlUmVzcG9uc2USJgoGc291cmNlGAEgASgOMhYuY2hpbGwudjQuTW92aWVzU291cmNlEh8KBm1vdmllcxgCIAMoCzIPLmNoaWxsLnY0Lk1vdmllIhIKEEdldE1vdmllc1JlcXVlc3QicgoRR2V0TW92aWVzUmVzcG9uc2USJgoGc291cmNlGAEgASgOMhYuY2hpbGwudjQuTW92aWVzU291cmNlEh8KBm1vdmllcxgCIAMoCzIPLmNoaWxsLnY0Lk1vdmllEhQKDHJzc19mZWVkX3VybBgDIAEoCSKxAgoGVFZTaG93Eg8KB2ltZGJfaWQYASABKAkSDQoFdGl0bGUYAiABKAkSDAoEeWVhchgDIAEoBRInCgZzb3VyY2UYBCABKA4yFy5jaGlsbC52NC5UVlNob3dzU291cmNlEhIKCnBvc3Rlcl91cmwYBSABKAkSDgoGcmF0aW5nGAYgASgBEhAKCG92ZXJ2aWV3GAcgASgJEhQKDGV4dGVybmFsX3VybBgIIAEoCRIUCgxzZWFzb25fY291bnQYCSABKAUSJgoGc3RhdHVzGAogASgOMhYuY2hpbGwudjQuVFZTaG93U3RhdHVzEhAKCG5ldHdvcmtzGAsgAygJEhYKDmZpcnN0X2Fpcl9kYXRlGAwgASgJOhySQRkKF9IBB2ltZGJfaWTSAQpwb3N0ZXJfdXJsIkQKGUdldFRWU2hvd3NCeVNvdXJjZVJlcXVlc3QSJwoGc291cmNlGAEgASgOMhcuY2hpbGwudjQuVFZTaG93c1NvdXJjZSJmChpHZXRUVlNob3dzQnlTb3VyY2VSZXNwb25zZRInCgZzb3VyY2UYASABKA4yFy5jaGlsbC52NC5UVlNob3dzU291cmNlEh8KBXNob3dzGAIgAygLMhAuY2hpbGwudjQuVFZTaG93IjwKEUdldFRWU2hvd3NSZXF1ZXN0EicKBnNvdXJjZRgBIAEoDjIXLmNoaWxsLnY0LlRWU2hvd3NTb3VyY2UiXgoSR2V0VFZTaG93c1Jlc3BvbnNlEicKBnNvdXJjZRgBIAEoDjIXLmNoaWxsLnY0LlRWU2hvd3NTb3VyY2USHwoFc2hvd3MYAiADKAsyEC5jaGlsbC52NC5UVlNob3cilgIKDFRWU2hvd0RldGFpbBIPCgdpbWRiX2lkGAEgASgJEg0KBXRpdGxlGAIgASgJEgwKBHllYXIYAyABKAUSEgoKcG9zdGVyX3VybBgEIAEoCRIUCgxiYWNrZHJvcF91cmwYBSABKAkSDgoGcmF0aW5nGAYgASgBEhAKCG92ZXJ2aWV3GAcgASgJEhQKDGV4dGVybmFsX3VybBgIIAEoCRIUCgxzZWFzb25fY291bnQYCSABKAUSJgoGc3RhdHVzGAogASgOMhYuY2hpbGwudjQuVFZTaG93U3RhdHVzEhAKCG5ldHdvcmtzGAsgAygJEg4KBmdlbnJlcxgMIAMoCRIWCg5maXJzdF9haXJfZGF0ZRgNIAEoCSJwCgxUVlNob3dTZWFzb24SFQoNc2Vhc29uX251bWJlchgBIAEoBRIMCgRuYW1lGAIgASgJEhUKDWVwaXNvZGVfY291bnQYAyABKAUSEAoIYWlyX2RhdGUYBCABKAkSEgoKcG9zdGVyX3VybBgFIAEoCSKkAQoNVFZTaG93RXBpc29kZRIVCg1zZWFzb25fbnVtYmVyGAEgASgFEhYKDmVwaXNvZGVfbnVtYmVyGAIgASgFEgwKBG5hbWUYAyABKAkSEAoIb3ZlcnZpZXcYBCABKAkSEAoIYWlyX2RhdGUYBSABKAkSDwoHcnVudGltZRgGIAEoBRIRCglzdGlsbF91cmwYByABKAkSDgoGcmF0aW5nGAggASgBIikKFkdldFRWU2hvd0RldGFpbFJlcXVlc3QSDwoHaW1kYl9pZBgBIAEoCSJoChdHZXRUVlNob3dEZXRhaWxSZXNwb25zZRIkCgRzaG93GAEgASgLMhYuY2hpbGwudjQuVFZTaG93RGV0YWlsEicKB3NlYXNvbnMYAiADKAsyFi5jaGlsbC52NC5UVlNob3dTZWFzb24iQAoWR2V0VFZTaG93U2Vhc29uUmVxdWVzdBIPCgdpbWRiX2lkGAEgASgJEhUKDXNlYXNvbl9udW1iZXIYAiABKAUilAEKF0dldFRWU2hvd1NlYXNvblJlc3BvbnNlEg8KB2ltZGJfaWQYASABKAkSFQoNc2Vhc29uX251bWJlchgCIAEoBRImCgZzZWFzb24YAyABKAsyFi5jaGlsbC52NC5UVlNob3dTZWFzb24SKQoIZXBpc29kZXMYBCADKAsyFy5jaGlsbC52NC5UVlNob3dFcGlzb2RlItgBCg5UVlNob3dEb3dubG9hZBINCgV0aXRsZRgBIAEoCRIMCgRsaW5rGAIgASgJEgwKBHNpemUYAyABKAMSDwoHc2VlZGVycxgEIAEoAxISCgpyZXNvbHV0aW9uGAUgASgJEg0KBWNvZGVjGAYgASgJEg8KB3F1YWxpdHkYByABKAkSDwoHaW5kZXhlchgIIAEoCRIVCg1zZWFzb25fbnVtYmVyGAkgASgFEhsKDmVwaXNvZGVfbnVtYmVyGAogASgFSACIAQFCEQoPX2VwaXNvZGVfbnVtYmVyImEKH0dldFRWU2hvd0VwaXNvZGVEb3dubG9hZFJlcXVlc3QSDwoHaW1kYl9pZBgBIAEoCRIVCg1zZWFzb25fbnVtYmVyGAIgASgFEhYKDmVwaXNvZGVfbnVtYmVyGAMgASgFInYKIEdldFRWU2hvd0VwaXNvZGVEb3dubG9hZFJlc3BvbnNlEi8KCGRvd25sb2FkGAEgASgLMhguY2hpbGwudjQuVFZTaG93RG93bmxvYWRIAIgBARIUCgxzZWFyY2hfcXVlcnkYAiABKAlCCwoJX2Rvd25sb2FkIkkKH0dldFRWU2hvd1NlYXNvbkRvd25sb2Fkc1JlcXVlc3QSDwoHaW1kYl9pZBgBIAEoCRIVCg1zZWFzb25fbnVtYmVyGAIgASgFIrwBCiBHZXRUVlNob3dTZWFzb25Eb3dubG9hZHNSZXNwb25zZRIyCgtzZWFzb25fcGFjaxgBIAEoCzIYLmNoaWxsLnY0LlRWU2hvd0Rvd25sb2FkSACIAQESNwoIZXBpc29kZXMYAiADKAsyJS5jaGlsbC52NC5UVlNob3dFcGlzb2RlRG93bmxvYWRSZXN1bHQSGwoTc2Vhc29uX3NlYXJjaF9xdWVyeRgDIAEoCUIOCgxfc2Vhc29uX3BhY2siiQEKG1RWU2hvd0VwaXNvZGVEb3dubG9hZFJlc3VsdBIWCg5lcGlzb2RlX251bWJlchgBIAEoBRIvCghkb3dubG9hZBgCIAEoCzIYLmNoaWxsLnY0LlRWU2hvd0Rvd25sb2FkSACIAQESFAoMc2VhcmNoX3F1ZXJ5GAMgASgJQgsKCV9kb3dubG9hZCIYChZHZXRVc2VyU2V0dGluZ3NSZXF1ZXN0Io0ECgxVc2VyU2V0dGluZ3MSKAoGc2VhcmNoGBMgASgLMhguY2hpbGwudjQuU2VhcmNoU2V0dGluZ3MSKgoHY2F0YWxvZxgUIAEoCzIZLmNoaWxsLnY0LkNhdGFsb2dTZXR0aW5ncxIsCghkb3dubG9hZBgVIAEoCzIaLmNoaWxsLnY0LkRvd25sb2FkU2V0dGluZ3M6I5JBIAoe0gEGc2VhcmNo0gEHY2F0YWxvZ9IBCGRvd25sb2FkSgQIARATUg1jb2RlY19maWx0ZXJzUhRkaXNhYmxlZF9pbmRleGVyX2lkc1ISZG93bmxvYWRfZm9sZGVyX2lkUhRmaWx0ZXJfbmFzdHlfcmVzdWx0c1IeZmlsdGVyX3Jlc3VsdHNfd2l0aF9ub19zZWVkZXJzUg1vdGhlcl9maWx0ZXJzUhZyZW1lbWJlcl9xdWlja19maWx0ZXJzUhJyZXNvbHV0aW9uX2ZpbHRlcnNSHnNlYXJjaF9yZXN1bHRfZGlzcGxheV9iZWhhdmlvclIcc2VhcmNoX3Jlc3VsdF90aXRsZV9iZWhhdmlvclILc2hvd19tb3ZpZXNSB3NvcnRfYnlSDnNvcnRfZGlyZWN0aW9uUhFjYXJkX2Rpc3BsYXlfdHlwZVINbW92aWVzX3NvdXJjZVINc2hvd190dl9zaG93c1IPdHZfc2hvd3Nfc291cmNlIpYECg5TZWFyY2hTZXR0aW5ncxIsCg1jb2RlY19maWx0ZXJzGAEgAygOMhUuY2hpbGwudjQuQ29kZWNGaWx0ZXISHAoUZGlzYWJsZWRfaW5kZXhlcl9pZHMYAiADKAkSHAoUZmlsdGVyX25hc3R5X3Jlc3VsdHMYAyABKAgSJgoeZmlsdGVyX3Jlc3VsdHNfd2l0aF9ub19zZWVkZXJzGAQgASgIEiwKDW90aGVyX2ZpbHRlcnMYBSADKA4yFS5jaGlsbC52NC5PdGhlckZpbHRlchIeChZyZW1lbWJlcl9xdWlja19maWx0ZXJzGAYgASgIEjYKEnJlc29sdXRpb25fZmlsdGVycxgHIAMoDjIaLmNoaWxsLnY0LlJlc29sdXRpb25GaWx0ZXISTQoec2VhcmNoX3Jlc3VsdF9kaXNwbGF5X2JlaGF2aW9yGAggASgOMiUuY2hpbGwudjQuU2VhcmNoUmVzdWx0RGlzcGxheUJlaGF2aW9yEkkKHHNlYXJjaF9yZXN1bHRfdGl0bGVfYmVoYXZpb3IYCSABKA4yIy5jaGlsbC52NC5TZWFyY2hSZXN1bHRUaXRsZUJlaGF2aW9yEiEKB3NvcnRfYnkYCiABKA4yEC5jaGlsbC52NC5Tb3J0QnkSLwoOc29ydF9kaXJlY3Rpb24YCyABKA4yFy5jaGlsbC52NC5Tb3J0RGlyZWN0aW9uIrMCCg9DYXRhbG9nU2V0dGluZ3MSLQoNbW92aWVzX3NvdXJjZRgBIAEoDjIWLmNoaWxsLnY0Lk1vdmllc1NvdXJjZRIwCg90dl9zaG93c19zb3VyY2UYAiABKA4yFy5jaGlsbC52NC5UVlNob3dzU291cmNlEjMKC21vdmllc19zb3J0GAMgASgOMhUuY2hpbGwudjQuQ2F0YWxvZ1NvcnRCAhgBSACIAQESNQoNdHZfc2hvd3Nfc29ydBgEIAEoDjIVLmNoaWxsLnY0LkNhdGFsb2dTb3J0QgIYAUgBiAEBEigKBHNvcnQYBSABKA4yFS5jaGlsbC52NC5DYXRhbG9nU29ydEgCiAEBQg4KDF9tb3ZpZXNfc29ydEIQCg5fdHZfc2hvd3Nfc29ydEIHCgVfc29ydCI4ChBEb3dubG9hZFNldHRpbmdzEhYKCWZvbGRlcl9pZBgBIAEoA0gAiAEBQgwKCl9mb2xkZXJfaWQiQwoXU2F2ZVVzZXJTZXR0aW5nc1JlcXVlc3QSKAoIc2V0dGluZ3MYASABKAsyFi5jaGlsbC52NC5Vc2VyU2V0dGluZ3MifwoNQ2F0YWxvZ09yaWdpbhIvCg1tb3ZpZXNfc291cmNlGAEgASgOMhYuY2hpbGwudjQuTW92aWVzU291cmNlSAASMgoPdHZfc2hvd3Nfc291cmNlGAIgASgOMhcuY2hpbGwudjQuVFZTaG93c1NvdXJjZUgAQgkKB2NhdGFsb2ciUgoSQWRkVHJhbnNmZXJSZXF1ZXN0EgsKA3VybBgBIAEoCRIvCg5jYXRhbG9nX29yaWdpbhgCIAEoCzIXLmNoaWxsLnY0LkNhdGFsb2dPcmlnaW4iSwoTQWRkVHJhbnNmZXJSZXNwb25zZRIOCgZzdGF0dXMYASABKAkSJAoIdHJhbnNmZXIYAiABKAsyEi5jaGlsbC52NC5UcmFuc2ZlciIgChJHZXRUcmFuc2ZlclJlcXVlc3QSCgoCaWQYASABKAMiOwoTR2V0VHJhbnNmZXJSZXNwb25zZRIkCgh0cmFuc2ZlchgBIAEoCzISLmNoaWxsLnY0LlRyYW5zZmVyIr0ECghUcmFuc2ZlchIKCgJpZBgBIAEoAxIMCgRuYW1lGAIgASgJEg4KBnN0YXR1cxgDIAEoCRIUCgxwZXJjZW50X2RvbmUYBCABKAUSFgoOc3RhdHVzX21lc3NhZ2UYBSABKAkSFQoNZXJyb3JfbWVzc2FnZRgGIAEoCRIMCgRzaXplGAcgASgDEhIKCmRvd25sb2FkZWQYCCABKAMSEAoIdXBsb2FkZWQYCSABKAMSFgoOZG93bmxvYWRfc3BlZWQYCiABKAUSFAoMdXBsb2FkX3NwZWVkGAsgASgFEhcKD3BlZXJzX2Nvbm5lY3RlZBgMIAEoBRIbChNwZWVyc19zZW5kaW5nX3RvX3VzGA0gASgFEh0KFXBlZXJzX2dldHRpbmdfZnJvbV91cxgOIAEoBRIeChZlc3RpbWF0ZWRfdGltZV9zZWNvbmRzGA8gASgDEhQKB2ZpbGVfaWQYECABKANIAIgBARIVCghmaWxlX3VybBgRIAEoCUgBiAEBEhsKDnNhdmVfcGFyZW50X2lkGBIgASgDSAKIAQESDgoGc291cmNlGBMgASgJEhcKCmNyZWF0ZWRfYXQYFCABKAlIA4gBARIYCgtmaW5pc2hlZF9hdBgVIAEoCUgEiAEBEhMKC2lzX2ZpbmlzaGVkGBYgASgIQgoKCF9maWxlX2lkQgsKCV9maWxlX3VybEIRCg9fc2F2ZV9wYXJlbnRfaWRCDQoLX2NyZWF0ZWRfYXRCDgoMX2ZpbmlzaGVkX2F0IhoKGEdldERvd25sb2FkRm9sZGVyUmVxdWVzdCI/ChlHZXREb3dubG9hZEZvbGRlclJlc3BvbnNlEiIKBmZvbGRlchgBIAEoCzISLmNoaWxsLnY0LlVzZXJGaWxlIh4KEEdldEZvbGRlclJlcXVlc3QSCgoCaWQYASABKAMiXgoIVXNlckZpbGUSCgoCaWQYASABKAMSDAoEbmFtZRgCIAEoCRIRCglmaWxlX3R5cGUYAyABKAkSEQoJaXNfc2hhcmVkGAQgASgIEhIKCmNyZWF0ZWRfYXQYBSABKAkiWgoRR2V0Rm9sZGVyUmVzcG9uc2USIgoGcGFyZW50GAEgASgLMhIuY2hpbGwudjQuVXNlckZpbGUSIQoFZmlsZXMYAiADKAsyEi5jaGlsbC52NC5Vc2VyRmlsZSIXChVHZXRVc2VyUHJvZmlsZVJlcXVlc3QiUwoLVXNlclByb2ZpbGUSDwoHdXNlcl9pZBgBIAEoCRIQCgh1c2VybmFtZRgCIAEoCRISCgphdmF0YXJfdXJsGAMgASgJEg0KBWVtYWlsGAQgASgJKoEBCg1JbmRleGVyU3RhdHVzEh4KGklOREVYRVJfU1RBVFVTX1VOU1BFQ0lGSUVEEAASGgoWSU5ERVhFUl9TVEFUVVNfSEVBTFRIWRABEhsKF0lOREVYRVJfU1RBVFVTX0RFR1JBREVEEAISFwoTSU5ERVhFUl9TVEFUVVNfRE9XThADKsMBCgxNb3ZpZXNTb3VyY2USHQoZTU9WSUVTX1NPVVJDRV9VTlNQRUNJRklFRBAAEiEKHU1PVklFU19TT1VSQ0VfSU1EQl9NT1ZJRU1FVEVSEAESHgoaTU9WSUVTX1NPVVJDRV9JTURCX1RPUF8yNTAQAhIVChFNT1ZJRVNfU09VUkNFX1lUUxADEiEKHU1PVklFU19TT1VSQ0VfUk9UVEVOX1RPTUFUT0VTEAQSFwoTTU9WSUVTX1NPVVJDRV9UUkFLVBAFKusCCg1UVlNob3dzU291cmNlEh8KG1RWX1NIT1dTX1NPVVJDRV9VTlNQRUNJRklFRBAAEhsKF1RWX1NIT1dTX1NPVVJDRV9ORVRGTElYEAESGwoXVFZfU0hPV1NfU09VUkNFX0hCT19NQVgQAhIhCh1UVl9TSE9XU19TT1VSQ0VfQVBQTEVfVFZfUExVUxADEh8KG1RWX1NIT1dTX1NPVVJDRV9QUklNRV9WSURFTxAEEh8KG1RWX1NIT1dTX1NPVVJDRV9ESVNORVlfUExVUxAFEiEKHVRWX1NIT1dTX1NPVVJDRV9BTExfUFJPVklERVJTEAYSGAoUVFZfU0hPV1NfU09VUkNFX0hVTFUQBxIiCh5UVl9TSE9XU19TT1VSQ0VfUEFSQU1PVU5UX1BMVVMQCBIcChhUVl9TSE9XU19TT1VSQ0VfQU1DX1BMVVMQCRIbChdUVl9TSE9XU19TT1VSQ0VfUEVBQ09DSxAKKsEBCgxUVlNob3dTdGF0dXMSHgoaVFZfU0hPV19TVEFUVVNfVU5TUEVDSUZJRUQQABIcChhUVl9TSE9XX1NUQVRVU19SRVRVUk5JTkcQARIYChRUVl9TSE9XX1NUQVRVU19FTkRFRBACEhsKF1RWX1NIT1dfU1RBVFVTX0NBTkNFTEVEEAMSIAocVFZfU0hPV19TVEFUVVNfSU5fUFJPRFVDVElPThAEEhoKFlRWX1NIT1dfU1RBVFVTX1BMQU5ORUQQBSqLAQoQUmVzb2x1dGlvbkZpbHRlchIhCh1SRVNPTFVUSU9OX0ZJTFRFUl9VTlNQRUNJRklFRBAAEhoKFlJFU09MVVRJT05fRklMVEVSXzcyMFAQARIbChdSRVNPTFVUSU9OX0ZJTFRFUl8xMDgwUBACEhsKF1JFU09MVVRJT05fRklMVEVSXzIxNjBQEAMqWQoLQ29kZWNGaWx0ZXISHAoYQ09ERUNfRklMVEVSX1VOU1BFQ0lGSUVEEAASFQoRQ09ERUNfRklMVEVSX1gyNjQQARIVChFDT0RFQ19GSUxURVJfWDI2NRACKkEKC090aGVyRmlsdGVyEhwKGE9USEVSX0ZJTFRFUl9VTlNQRUNJRklFRBAAEhQKEE9USEVSX0ZJTFRFUl9IRFIQASqhAQobU2VhcmNoUmVzdWx0RGlzcGxheUJlaGF2aW9yEi4KKlNFQVJDSF9SRVNVTFRfRElTUExBWV9CRUhBVklPUl9VTlNQRUNJRklFRBAAEiYKIlNFQVJDSF9SRVNVTFRfRElTUExBWV9CRUhBVklPUl9BTEwQARIqCiZTRUFSQ0hfUkVTVUxUX0RJU1BMQVlfQkVIQVZJT1JfRkFTVEVTVBACKpcBChlTZWFyY2hSZXN1bHRUaXRsZUJlaGF2aW9yEiwKKFNFQVJDSF9SRVNVTFRfVElUTEVfQkVIQVZJT1JfVU5TUEVDSUZJRUQQABIlCiFTRUFSQ0hfUkVTVUxUX1RJVExFX0JFSEFWSU9SX0xJTksQARIlCiFTRUFSQ0hfUkVTVUxUX1RJVExFX0JFSEFWSU9SX1RFWFQQAiqIAQoGU29ydEJ5EhcKE1NPUlRfQllfVU5TUEVDSUZJRUQQABIRCg1TT1JUX0JZX1RJVExFEAESEwoPU09SVF9CWV9TRUVERVJTEAISEAoMU09SVF9CWV9TSVpFEAMSFwoTU09SVF9CWV9VUExPQURFRF9BVBAEEhIKDlNPUlRfQllfU09VUkNFEAUqYAoNU29ydERpcmVjdGlvbhIeChpTT1JUX0RJUkVDVElPTl9VTlNQRUNJRklFRBAAEhYKElNPUlRfRElSRUNUSU9OX0FTQxABEhcKE1NPUlRfRElSRUNUSU9OX0RFU0MQAirKAQoLQ2F0YWxvZ1NvcnQSHAoYQ0FUQUxPR19TT1JUX1VOU1BFQ0lGSUVEEAASGwoXQ0FUQUxPR19TT1JUX1BPUFVMQVJJVFkQARIcChhDQVRBTE9HX1NPUlRfUkFUSU5HX0RFU0MQAhIbChdDQVRBTE9HX1NPUlRfUkFUSU5HX0FTQxADEiIKHkNBVEFMT0dfU09SVF9SRUxFQVNFX0RBVEVfREVTQxAEEiEKHUNBVEFMT0dfU09SVF9SRUxFQVNFX0RBVEVfQVNDEAUywwUKC0NvcmVTZXJ2aWNlEn0KC0hlYWx0aENoZWNrEhwuY2hpbGwudjQuSGVhbHRoQ2hlY2tSZXF1ZXN0GhguY2hpbGwudjQuSGVhbHRoUmVzcG9uc2UiNpJBM2IQCg4KCkFwaUtleUF1dGgSAHIfCh0KCVgtQVBJLUtleRIMQ29yZSBBUEkga2V5GAEoARKKAQoLR2V0SW5kZXhlcnMSIC5jaGlsbC52NC5Db3JlR2V0SW5kZXhlcnNSZXF1ZXN0GiEuY2hpbGwudjQuQ29yZUdldEluZGV4ZXJzUmVzcG9uc2UiNpJBM2IQCg4KCkFwaUtleUF1dGgSAHIfCh0KCVgtQVBJLUtleRIMQ29yZSBBUEkga2V5GAEoARJ3CgZTZWFyY2gSGy5jaGlsbC52NC5Db3JlU2VhcmNoUmVxdWVzdBoYLmNoaWxsLnY0LlNlYXJjaFJlc3BvbnNlIjaSQTNiEAoOCgpBcGlLZXlBdXRoEgByHwodCglYLUFQSS1LZXkSDENvcmUgQVBJIGtleRgBKAESlAEKEUdldE1vdmllc0J5U291cmNlEiIuY2hpbGwudjQuR2V0TW92aWVzQnlTb3VyY2VSZXF1ZXN0GiMuY2hpbGwudjQuR2V0TW92aWVzQnlTb3VyY2VSZXNwb25zZSI2kkEzYhAKDgoKQXBpS2V5QXV0aBIAch8KHQoJWC1BUEktS2V5EgxDb3JlIEFQSSBrZXkYASgBEpcBChJHZXRUVlNob3dzQnlTb3VyY2USIy5jaGlsbC52NC5HZXRUVlNob3dzQnlTb3VyY2VSZXF1ZXN0GiQuY2hpbGwudjQuR2V0VFZTaG93c0J5U291cmNlUmVzcG9uc2UiNpJBM2IQCg4KCkFwaUtleUF1dGgSAHIfCh0KCVgtQVBJLUtleRIMQ29yZSBBUEkga2V5GAEoATKgFAoLVXNlclNlcnZpY2USqgEKC0dldEluZGV4ZXJzEiAuY2hpbGwudjQuVXNlckdldEluZGV4ZXJzUmVxdWVzdBohLmNoaWxsLnY0LlVzZXJHZXRJbmRleGVyc1Jlc3BvbnNlIlaSQVNiEAoOCgpCZWFyZXJBdXRoEgByPwo9Cg1BdXRob3JpemF0aW9uEihVc2VyIGF1dGggdG9rZW4uIEZvcm1hdDogQmVhcmVyIDx0b2tlbj4uGAEoARKXAQoGU2VhcmNoEhsuY2hpbGwudjQuVXNlclNlYXJjaFJlcXVlc3QaGC5jaGlsbC52NC5TZWFyY2hSZXNwb25zZSJWkkFTYhAKDgoKQmVhcmVyQXV0aBIAcj8KPQoNQXV0aG9yaXphdGlvbhIoVXNlciBhdXRoIHRva2VuLiBGb3JtYXQ6IEJlYXJlciA8dG9rZW4+LhgBKAESnAEKCUdldE1vdmllcxIaLmNoaWxsLnY0LkdldE1vdmllc1JlcXVlc3QaGy5jaGlsbC52NC5HZXRNb3ZpZXNSZXNwb25zZSJWkkFTYhAKDgoKQmVhcmVyQXV0aBIAcj8KPQoNQXV0aG9yaXphdGlvbhIoVXNlciBhdXRoIHRva2VuLiBGb3JtYXQ6IEJlYXJlciA8dG9rZW4+LhgBKAESnwEKCkdldFRWU2hvd3MSGy5jaGlsbC52NC5HZXRUVlNob3dzUmVxdWVzdBocLmNoaWxsLnY0LkdldFRWU2hvd3NSZXNwb25zZSJWkkFTYhAKDgoKQmVhcmVyQXV0aBIAcj8KPQoNQXV0aG9yaXphdGlvbhIoVXNlciBhdXRoIHRva2VuLiBGb3JtYXQ6IEJlYXJlciA8dG9rZW4+LhgBKAESrgEKD0dldFRWU2hvd0RldGFpbBIgLmNoaWxsLnY0LkdldFRWU2hvd0RldGFpbFJlcXVlc3QaIS5jaGlsbC52NC5HZXRUVlNob3dEZXRhaWxSZXNwb25zZSJWkkFTYhAKDgoKQmVhcmVyQXV0aBIAcj8KPQoNQXV0aG9yaXphdGlvbhIoVXNlciBhdXRoIHRva2VuLiBGb3JtYXQ6IEJlYXJlciA8dG9rZW4+LhgBKAESrgEKD0dldFRWU2hvd1NlYXNvbhIgLmNoaWxsLnY0LkdldFRWU2hvd1NlYXNvblJlcXVlc3QaIS5jaGlsbC52NC5HZXRUVlNob3dTZWFzb25SZXNwb25zZSJWkkFTYhAKDgoKQmVhcmVyQXV0aBIAcj8KPQoNQXV0aG9yaXphdGlvbhIoVXNlciBhdXRoIHRva2VuLiBGb3JtYXQ6IEJlYXJlciA8dG9rZW4+LhgBKAESyQEKGEdldFRWU2hvd0VwaXNvZGVEb3dubG9hZBIpLmNoaWxsLnY0LkdldFRWU2hvd0VwaXNvZGVEb3dubG9hZFJlcXVlc3QaKi5jaGlsbC52NC5HZXRUVlNob3dFcGlzb2RlRG93bmxvYWRSZXNwb25zZSJWkkFTYhAKDgoKQmVhcmVyQXV0aBIAcj8KPQoNQXV0aG9yaXphdGlvbhIoVXNlciBhdXRoIHRva2VuLiBGb3JtYXQ6IEJlYXJlciA8dG9rZW4+LhgBKAESyQEKGEdldFRWU2hvd1NlYXNvbkRvd25sb2FkcxIpLmNoaWxsLnY0LkdldFRWU2hvd1NlYXNvbkRvd25sb2Fkc1JlcXVlc3QaKi5jaGlsbC52NC5HZXRUVlNob3dTZWFzb25Eb3dubG9hZHNSZXNwb25zZSJWkkFTYhAKDgoKQmVhcmVyQXV0aBIAcj8KPQoNQXV0aG9yaXphdGlvbhIoVXNlciBhdXRoIHRva2VuLiBGb3JtYXQ6IEJlYXJlciA8dG9rZW4+LhgBKAESowEKD0dldFVzZXJTZXR0aW5ncxIgLmNoaWxsLnY0LkdldFVzZXJTZXR0aW5nc1JlcXVlc3QaFi5jaGlsbC52NC5Vc2VyU2V0dGluZ3MiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEqUBChBTYXZlVXNlclNldHRpbmdzEiEuY2hpbGwudjQuU2F2ZVVzZXJTZXR0aW5nc1JlcXVlc3QaFi5jaGlsbC52NC5Vc2VyU2V0dGluZ3MiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEqIBCgtBZGRUcmFuc2ZlchIcLmNoaWxsLnY0LkFkZFRyYW5zZmVyUmVxdWVzdBodLmNoaWxsLnY0LkFkZFRyYW5zZmVyUmVzcG9uc2UiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEqIBCgtHZXRUcmFuc2ZlchIcLmNoaWxsLnY0LkdldFRyYW5zZmVyUmVxdWVzdBodLmNoaWxsLnY0LkdldFRyYW5zZmVyUmVzcG9uc2UiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBErQBChFHZXREb3dubG9hZEZvbGRlchIiLmNoaWxsLnY0LkdldERvd25sb2FkRm9sZGVyUmVxdWVzdBojLmNoaWxsLnY0LkdldERvd25sb2FkRm9sZGVyUmVzcG9uc2UiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEpwBCglHZXRGb2xkZXISGi5jaGlsbC52NC5HZXRGb2xkZXJSZXF1ZXN0GhsuY2hpbGwudjQuR2V0Rm9sZGVyUmVzcG9uc2UiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEqABCg5HZXRVc2VyUHJvZmlsZRIfLmNoaWxsLnY0LkdldFVzZXJQcm9maWxlUmVxdWVzdBoVLmNoaWxsLnY0LlVzZXJQcm9maWxlIlaSQVNiEAoOCgpCZWFyZXJBdXRoEgByPwo9Cg1BdXRob3JpemF0aW9uEihVc2VyIGF1dGggdG9rZW4uIEZvcm1hdDogQmVhcmVyIDx0b2tlbj4uGAEoAUKTAwoMY29tLmNoaWxsLnY0QghBcGlQcm90b1ABWkVnaXRodWIuY29tL2NoaWxsLWluc3RpdHV0ZS9jaGlsbC1jb250cmFjdHMvdjIvZ2VuL2dvL2NoaWxsL3Y0O2NoaWxsdjSiAgNDWFiqAghDaGlsbC5WNMoCCENoaWxsXFY04gIUQ2hpbGxcVjRcR1BCTWV0YWRhdGHqAglDaGlsbDo6VjSSQe8BEhUKEENoaWxsIEFQSSB2NCBSUEMyATQiAy92NFrQAQpaCgpBcGlLZXlBdXRoEkwIAhI7Q29yZSBBUEkga2V5LiBTZW5kIHRoZSBrZXkgaW4gWC1BUEktS2V5LiBEbyBub3QgdXNlIEJlYXJlci4aCVgtQVBJLUtleSACCnIKCkJlYXJlckF1dGgSZAgCEk9Vc2VyIGF1dGggdG9rZW4uIEZvcm1hdDogQmVhcmVyIDx0b2tlbj4uIERvIG5vdCBzZW5kIEFQSSBrZXlzIGFzIEJlYXJlciB0b2tlbnMuGg1BdXRob3JpemF0aW9uIAJiBnByb3RvMw", [file_protoc_gen_openapiv2_options_annotations]);
13
+ fileDesc("ChJjaGlsbC92NC9hcGkucHJvdG8SCGNoaWxsLnY0IikKFlJlc29sdmVQbGF5YmFja1JlcXVlc3QSDwoHZmlsZV9pZBgBIAEoAyKxAQoXUmVzb2x2ZVBsYXliYWNrUmVzcG9uc2USKAoFcmVhZHkYASABKAsyFy5jaGlsbC52NC5QbGF5YmFja1JlYWR5SAASLAoHcGVuZGluZxgCIAEoCzIZLmNoaWxsLnY0LlBsYXliYWNrUGVuZGluZ0gAEjQKC3VuYXZhaWxhYmxlGAMgASgLMh0uY2hpbGwudjQuUGxheWJhY2tVbmF2YWlsYWJsZUgAQggKBnJlc3VsdCKGAQoNUGxheWJhY2tSZWFkeRIkCgVtZWRpYRgBIAEoCzIVLmNoaWxsLnY0LlBsYXliYWNrVXJsEigKBmZvcm1hdBgCIAEoCzIYLmNoaWxsLnY0LlBsYXliYWNrRm9ybWF0EiUKCXN1YnRpdGxlcxgDIAMoCzISLmNoaWxsLnY0LlN1YnRpdGxlIjoKD1BsYXliYWNrUGVuZGluZxInCgZyZWFzb24YASABKA4yFy5jaGlsbC52NC5QZW5kaW5nUmVhc29uIkIKE1BsYXliYWNrVW5hdmFpbGFibGUSKwoGcmVhc29uGAEgASgOMhsuY2hpbGwudjQuVW5hdmFpbGFibGVSZWFzb24icAoLUGxheWJhY2tVcmwSCwoDdXJsGAEgASgJEjAKCmV4cGlyZXNfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAASGAoOZXhwaXJ5X3Vua25vd24YAyABKAhIAEIICgZleHBpcnkijgEKDlBsYXliYWNrRm9ybWF0EiYKCWNvbnRhaW5lchgBIAEoDjITLmNoaWxsLnY0LkNvbnRhaW5lchIpCgt2aWRlb19jb2RlYxgCIAEoDjIULmNoaWxsLnY0LlZpZGVvQ29kZWMSKQoLYXVkaW9fY29kZWMYAyABKA4yFC5jaGlsbC52NC5BdWRpb0NvZGVjInkKCFN1YnRpdGxlEgoKAmlkGAEgASgJEhAKCGxhbmd1YWdlGAIgASgJEigKBmZvcm1hdBgDIAEoDjIYLmNoaWxsLnY0LlN1YnRpdGxlRm9ybWF0EiUKBnNvdXJjZRgEIAEoCzIVLmNoaWxsLnY0LlBsYXliYWNrVXJsIhQKEkhlYWx0aENoZWNrUmVxdWVzdCIgCg5IZWFsdGhSZXNwb25zZRIOCgZzdGF0dXMYASABKAkiGAoWQ29yZUdldEluZGV4ZXJzUmVxdWVzdCJ/CgdJbmRleGVyEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDAoEdGFncxgDIAMoCRIsCgZzdGF0dXMYBiABKA4yFy5jaGlsbC52NC5JbmRleGVyU3RhdHVzSACIAQFCCQoHX3N0YXR1c0oECAQQBUoECAUQBlIHaGVhbHRoeSI+ChdDb3JlR2V0SW5kZXhlcnNSZXNwb25zZRIjCghpbmRleGVycxgBIAMoCzIRLmNoaWxsLnY0LkluZGV4ZXIiGAoWVXNlckdldEluZGV4ZXJzUmVxdWVzdCJCChdVc2VyR2V0SW5kZXhlcnNSZXNwb25zZRInCghpbmRleGVycxgBIAMoCzIVLmNoaWxsLnY0LlVzZXJJbmRleGVyIpQBCgtVc2VySW5kZXhlchIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg8KB2VuYWJsZWQYAyABKAgSDAoEdGFncxgEIAMoCRIsCgZzdGF0dXMYByABKA4yFy5jaGlsbC52NC5JbmRleGVyU3RhdHVzSACIAQFCCQoHX3N0YXR1c0oECAUQBkoECAYQB1IHaGVhbHRoeSIiChFDb3JlU2VhcmNoUmVxdWVzdBINCgVxdWVyeRgBIAEoCSLVBAoLUmVsZWFzZUluZm8SDQoFdGl0bGUYASABKAkSEQoEeWVhchgCIAEoBUgAiAEBEhMKBnNlYXNvbhgDIAEoBUgBiAEBEhQKB2VwaXNvZGUYBCABKAVIAogBARIYCgtlcGlzb2RlX2VuZBgFIAEoBUgDiAEBEhEKBHBhcnQYBiABKAVIBIgBARISCgpyZXNvbHV0aW9uGAogASgJEg8KB3F1YWxpdHkYCyABKAkSDgoGc291cmNlGAwgASgJEg0KBWNvZGVjGA0gASgJEgsKA2hkchgOIAEoCRINCgVhdWRpbxgPIAEoCRINCgVncm91cBgQIAEoCRIRCgljb250YWluZXIYESABKAkSEAoIbGFuZ3VhZ2UYEiABKAkSDgoGcmVnaW9uGBMgASgJEgwKBHNpemUYFCABKAkSEQoJYml0X2RlcHRoGBUgASgJEg8KB2VkaXRpb24YFiABKAkSEAoIZXh0ZW5kZWQYHiABKAgSEQoJaGFyZGNvZGVkGB8gASgIEg4KBnByb3BlchggIAEoCBIOCgZyZXBhY2sYISABKAgSEgoKcmVtYXN0ZXJlZBgiIAEoCBIQCghjb21wbGV0ZRgjIAEoCBIPCgd0aHJlZV9kGCQgASgIEgwKBGltYXgYJSABKAgSDwoHdW5yYXRlZBgmIAEoCBISCgp3aWRlc2NyZWVuGCcgASgIEg4KBmV4Y2VzcxgyIAEoCUIHCgVfeWVhckIJCgdfc2Vhc29uQgoKCF9lcGlzb2RlQg4KDF9lcGlzb2RlX2VuZEIHCgVfcGFydCKAAgoMU2VhcmNoUmVzdWx0EgoKAmlkGAEgASgJEg0KBXRpdGxlGAIgASgJEg8KB2luZGV4ZXIYAyABKAkSDAoEbGluaxgEIAEoCRIUCgdpbWRiX2lkGAUgASgJSACIAQESDQoFcGVlcnMYBiABKAMSDwoHc2VlZGVycxgHIAEoAxIMCgRzaXplGAggASgDEg4KBnNvdXJjZRgJIAEoCRITCgt1cGxvYWRlZF9hdBgKIAEoCRIwCgxyZWxlYXNlX2luZm8YCyABKAsyFS5jaGlsbC52NC5SZWxlYXNlSW5mb0gBiAEBQgoKCF9pbWRiX2lkQg8KDV9yZWxlYXNlX2luZm8idgoOU2VhcmNoUmVzcG9uc2USDQoFcXVlcnkYASABKAkSJwoHcmVzdWx0cxgCIAMoCzIWLmNoaWxsLnY0LlNlYXJjaFJlc3VsdBIsCg1pbmRleGVyX3N0YXRzGAMgAygLMhUuY2hpbGwudjQuSW5kZXhlclN0YXQiYAoLSW5kZXhlclN0YXQSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRISCgplbGFwc2VkX21zGAMgASgFEhQKDHJlc3VsdF9jb3VudBgEIAEoBRINCgVlcnJvchgFIAEoCSJKChFVc2VyU2VhcmNoUmVxdWVzdBINCgVxdWVyeRgBIAEoCRIXCgppbmRleGVyX2lkGAIgASgJSACIAQFCDQoLX2luZGV4ZXJfaWQiQgoYR2V0TW92aWVzQnlTb3VyY2VSZXF1ZXN0EiYKBnNvdXJjZRgBIAEoDjIWLmNoaWxsLnY0Lk1vdmllc1NvdXJjZSLbAgoFTW92aWUSCgoCaWQYASABKAkSDQoFdGl0bGUYAiABKAkSDAoEeWVhchgDIAEoBRImCgZzb3VyY2UYBCABKA4yFi5jaGlsbC52NC5Nb3ZpZXNTb3VyY2USFAoMdGl0bGVfcHJldHR5GAUgASgJEgwKBGxpbmsYBiABKAkSDQoFcGVlcnMYByABKAMSDwoHc2VlZGVycxgIIAEoAxIMCgRzaXplGAkgASgDEhMKC3VwbG9hZGVkX2F0GAogASgJEhIKCnBvc3Rlcl91cmwYCyABKAkSDgoGcmF0aW5nGAwgASgBEhQKDGV4dGVybmFsX3VybBgNIAEoCRIUCgxiYWNrZHJvcF91cmwYDiABKAkSEAoIb3ZlcnZpZXcYDyABKAkSDgoGZ2VucmVzGBAgAygJEhQKDHJlbGVhc2VfZGF0ZRgRIAEoCToSkkEPCg3SAQpwb3N0ZXJfdXJsImQKGUdldE1vdmllc0J5U291cmNlUmVzcG9uc2USJgoGc291cmNlGAEgASgOMhYuY2hpbGwudjQuTW92aWVzU291cmNlEh8KBm1vdmllcxgCIAMoCzIPLmNoaWxsLnY0Lk1vdmllIhIKEEdldE1vdmllc1JlcXVlc3QicgoRR2V0TW92aWVzUmVzcG9uc2USJgoGc291cmNlGAEgASgOMhYuY2hpbGwudjQuTW92aWVzU291cmNlEh8KBm1vdmllcxgCIAMoCzIPLmNoaWxsLnY0Lk1vdmllEhQKDHJzc19mZWVkX3VybBgDIAEoCSKxAgoGVFZTaG93Eg8KB2ltZGJfaWQYASABKAkSDQoFdGl0bGUYAiABKAkSDAoEeWVhchgDIAEoBRInCgZzb3VyY2UYBCABKA4yFy5jaGlsbC52NC5UVlNob3dzU291cmNlEhIKCnBvc3Rlcl91cmwYBSABKAkSDgoGcmF0aW5nGAYgASgBEhAKCG92ZXJ2aWV3GAcgASgJEhQKDGV4dGVybmFsX3VybBgIIAEoCRIUCgxzZWFzb25fY291bnQYCSABKAUSJgoGc3RhdHVzGAogASgOMhYuY2hpbGwudjQuVFZTaG93U3RhdHVzEhAKCG5ldHdvcmtzGAsgAygJEhYKDmZpcnN0X2Fpcl9kYXRlGAwgASgJOhySQRkKF9IBB2ltZGJfaWTSAQpwb3N0ZXJfdXJsIkQKGUdldFRWU2hvd3NCeVNvdXJjZVJlcXVlc3QSJwoGc291cmNlGAEgASgOMhcuY2hpbGwudjQuVFZTaG93c1NvdXJjZSJmChpHZXRUVlNob3dzQnlTb3VyY2VSZXNwb25zZRInCgZzb3VyY2UYASABKA4yFy5jaGlsbC52NC5UVlNob3dzU291cmNlEh8KBXNob3dzGAIgAygLMhAuY2hpbGwudjQuVFZTaG93IjwKEUdldFRWU2hvd3NSZXF1ZXN0EicKBnNvdXJjZRgBIAEoDjIXLmNoaWxsLnY0LlRWU2hvd3NTb3VyY2UiXgoSR2V0VFZTaG93c1Jlc3BvbnNlEicKBnNvdXJjZRgBIAEoDjIXLmNoaWxsLnY0LlRWU2hvd3NTb3VyY2USHwoFc2hvd3MYAiADKAsyEC5jaGlsbC52NC5UVlNob3cilgIKDFRWU2hvd0RldGFpbBIPCgdpbWRiX2lkGAEgASgJEg0KBXRpdGxlGAIgASgJEgwKBHllYXIYAyABKAUSEgoKcG9zdGVyX3VybBgEIAEoCRIUCgxiYWNrZHJvcF91cmwYBSABKAkSDgoGcmF0aW5nGAYgASgBEhAKCG92ZXJ2aWV3GAcgASgJEhQKDGV4dGVybmFsX3VybBgIIAEoCRIUCgxzZWFzb25fY291bnQYCSABKAUSJgoGc3RhdHVzGAogASgOMhYuY2hpbGwudjQuVFZTaG93U3RhdHVzEhAKCG5ldHdvcmtzGAsgAygJEg4KBmdlbnJlcxgMIAMoCRIWCg5maXJzdF9haXJfZGF0ZRgNIAEoCSJwCgxUVlNob3dTZWFzb24SFQoNc2Vhc29uX251bWJlchgBIAEoBRIMCgRuYW1lGAIgASgJEhUKDWVwaXNvZGVfY291bnQYAyABKAUSEAoIYWlyX2RhdGUYBCABKAkSEgoKcG9zdGVyX3VybBgFIAEoCSKkAQoNVFZTaG93RXBpc29kZRIVCg1zZWFzb25fbnVtYmVyGAEgASgFEhYKDmVwaXNvZGVfbnVtYmVyGAIgASgFEgwKBG5hbWUYAyABKAkSEAoIb3ZlcnZpZXcYBCABKAkSEAoIYWlyX2RhdGUYBSABKAkSDwoHcnVudGltZRgGIAEoBRIRCglzdGlsbF91cmwYByABKAkSDgoGcmF0aW5nGAggASgBIikKFkdldFRWU2hvd0RldGFpbFJlcXVlc3QSDwoHaW1kYl9pZBgBIAEoCSJoChdHZXRUVlNob3dEZXRhaWxSZXNwb25zZRIkCgRzaG93GAEgASgLMhYuY2hpbGwudjQuVFZTaG93RGV0YWlsEicKB3NlYXNvbnMYAiADKAsyFi5jaGlsbC52NC5UVlNob3dTZWFzb24iQAoWR2V0VFZTaG93U2Vhc29uUmVxdWVzdBIPCgdpbWRiX2lkGAEgASgJEhUKDXNlYXNvbl9udW1iZXIYAiABKAUilAEKF0dldFRWU2hvd1NlYXNvblJlc3BvbnNlEg8KB2ltZGJfaWQYASABKAkSFQoNc2Vhc29uX251bWJlchgCIAEoBRImCgZzZWFzb24YAyABKAsyFi5jaGlsbC52NC5UVlNob3dTZWFzb24SKQoIZXBpc29kZXMYBCADKAsyFy5jaGlsbC52NC5UVlNob3dFcGlzb2RlItgBCg5UVlNob3dEb3dubG9hZBINCgV0aXRsZRgBIAEoCRIMCgRsaW5rGAIgASgJEgwKBHNpemUYAyABKAMSDwoHc2VlZGVycxgEIAEoAxISCgpyZXNvbHV0aW9uGAUgASgJEg0KBWNvZGVjGAYgASgJEg8KB3F1YWxpdHkYByABKAkSDwoHaW5kZXhlchgIIAEoCRIVCg1zZWFzb25fbnVtYmVyGAkgASgFEhsKDmVwaXNvZGVfbnVtYmVyGAogASgFSACIAQFCEQoPX2VwaXNvZGVfbnVtYmVyImEKH0dldFRWU2hvd0VwaXNvZGVEb3dubG9hZFJlcXVlc3QSDwoHaW1kYl9pZBgBIAEoCRIVCg1zZWFzb25fbnVtYmVyGAIgASgFEhYKDmVwaXNvZGVfbnVtYmVyGAMgASgFInYKIEdldFRWU2hvd0VwaXNvZGVEb3dubG9hZFJlc3BvbnNlEi8KCGRvd25sb2FkGAEgASgLMhguY2hpbGwudjQuVFZTaG93RG93bmxvYWRIAIgBARIUCgxzZWFyY2hfcXVlcnkYAiABKAlCCwoJX2Rvd25sb2FkIkkKH0dldFRWU2hvd1NlYXNvbkRvd25sb2Fkc1JlcXVlc3QSDwoHaW1kYl9pZBgBIAEoCRIVCg1zZWFzb25fbnVtYmVyGAIgASgFIrwBCiBHZXRUVlNob3dTZWFzb25Eb3dubG9hZHNSZXNwb25zZRIyCgtzZWFzb25fcGFjaxgBIAEoCzIYLmNoaWxsLnY0LlRWU2hvd0Rvd25sb2FkSACIAQESNwoIZXBpc29kZXMYAiADKAsyJS5jaGlsbC52NC5UVlNob3dFcGlzb2RlRG93bmxvYWRSZXN1bHQSGwoTc2Vhc29uX3NlYXJjaF9xdWVyeRgDIAEoCUIOCgxfc2Vhc29uX3BhY2siiQEKG1RWU2hvd0VwaXNvZGVEb3dubG9hZFJlc3VsdBIWCg5lcGlzb2RlX251bWJlchgBIAEoBRIvCghkb3dubG9hZBgCIAEoCzIYLmNoaWxsLnY0LlRWU2hvd0Rvd25sb2FkSACIAQESFAoMc2VhcmNoX3F1ZXJ5GAMgASgJQgsKCV9kb3dubG9hZCIYChZHZXRVc2VyU2V0dGluZ3NSZXF1ZXN0Io0ECgxVc2VyU2V0dGluZ3MSKAoGc2VhcmNoGBMgASgLMhguY2hpbGwudjQuU2VhcmNoU2V0dGluZ3MSKgoHY2F0YWxvZxgUIAEoCzIZLmNoaWxsLnY0LkNhdGFsb2dTZXR0aW5ncxIsCghkb3dubG9hZBgVIAEoCzIaLmNoaWxsLnY0LkRvd25sb2FkU2V0dGluZ3M6I5JBIAoe0gEGc2VhcmNo0gEHY2F0YWxvZ9IBCGRvd25sb2FkSgQIARATUg1jb2RlY19maWx0ZXJzUhRkaXNhYmxlZF9pbmRleGVyX2lkc1ISZG93bmxvYWRfZm9sZGVyX2lkUhRmaWx0ZXJfbmFzdHlfcmVzdWx0c1IeZmlsdGVyX3Jlc3VsdHNfd2l0aF9ub19zZWVkZXJzUg1vdGhlcl9maWx0ZXJzUhZyZW1lbWJlcl9xdWlja19maWx0ZXJzUhJyZXNvbHV0aW9uX2ZpbHRlcnNSHnNlYXJjaF9yZXN1bHRfZGlzcGxheV9iZWhhdmlvclIcc2VhcmNoX3Jlc3VsdF90aXRsZV9iZWhhdmlvclILc2hvd19tb3ZpZXNSB3NvcnRfYnlSDnNvcnRfZGlyZWN0aW9uUhFjYXJkX2Rpc3BsYXlfdHlwZVINbW92aWVzX3NvdXJjZVINc2hvd190dl9zaG93c1IPdHZfc2hvd3Nfc291cmNlIpYECg5TZWFyY2hTZXR0aW5ncxIsCg1jb2RlY19maWx0ZXJzGAEgAygOMhUuY2hpbGwudjQuQ29kZWNGaWx0ZXISHAoUZGlzYWJsZWRfaW5kZXhlcl9pZHMYAiADKAkSHAoUZmlsdGVyX25hc3R5X3Jlc3VsdHMYAyABKAgSJgoeZmlsdGVyX3Jlc3VsdHNfd2l0aF9ub19zZWVkZXJzGAQgASgIEiwKDW90aGVyX2ZpbHRlcnMYBSADKA4yFS5jaGlsbC52NC5PdGhlckZpbHRlchIeChZyZW1lbWJlcl9xdWlja19maWx0ZXJzGAYgASgIEjYKEnJlc29sdXRpb25fZmlsdGVycxgHIAMoDjIaLmNoaWxsLnY0LlJlc29sdXRpb25GaWx0ZXISTQoec2VhcmNoX3Jlc3VsdF9kaXNwbGF5X2JlaGF2aW9yGAggASgOMiUuY2hpbGwudjQuU2VhcmNoUmVzdWx0RGlzcGxheUJlaGF2aW9yEkkKHHNlYXJjaF9yZXN1bHRfdGl0bGVfYmVoYXZpb3IYCSABKA4yIy5jaGlsbC52NC5TZWFyY2hSZXN1bHRUaXRsZUJlaGF2aW9yEiEKB3NvcnRfYnkYCiABKA4yEC5jaGlsbC52NC5Tb3J0QnkSLwoOc29ydF9kaXJlY3Rpb24YCyABKA4yFy5jaGlsbC52NC5Tb3J0RGlyZWN0aW9uIrMCCg9DYXRhbG9nU2V0dGluZ3MSLQoNbW92aWVzX3NvdXJjZRgBIAEoDjIWLmNoaWxsLnY0Lk1vdmllc1NvdXJjZRIwCg90dl9zaG93c19zb3VyY2UYAiABKA4yFy5jaGlsbC52NC5UVlNob3dzU291cmNlEjMKC21vdmllc19zb3J0GAMgASgOMhUuY2hpbGwudjQuQ2F0YWxvZ1NvcnRCAhgBSACIAQESNQoNdHZfc2hvd3Nfc29ydBgEIAEoDjIVLmNoaWxsLnY0LkNhdGFsb2dTb3J0QgIYAUgBiAEBEigKBHNvcnQYBSABKA4yFS5jaGlsbC52NC5DYXRhbG9nU29ydEgCiAEBQg4KDF9tb3ZpZXNfc29ydEIQCg5fdHZfc2hvd3Nfc29ydEIHCgVfc29ydCI4ChBEb3dubG9hZFNldHRpbmdzEhYKCWZvbGRlcl9pZBgBIAEoA0gAiAEBQgwKCl9mb2xkZXJfaWQiQwoXU2F2ZVVzZXJTZXR0aW5nc1JlcXVlc3QSKAoIc2V0dGluZ3MYASABKAsyFi5jaGlsbC52NC5Vc2VyU2V0dGluZ3MifwoNQ2F0YWxvZ09yaWdpbhIvCg1tb3ZpZXNfc291cmNlGAEgASgOMhYuY2hpbGwudjQuTW92aWVzU291cmNlSAASMgoPdHZfc2hvd3Nfc291cmNlGAIgASgOMhcuY2hpbGwudjQuVFZTaG93c1NvdXJjZUgAQgkKB2NhdGFsb2ciUgoSQWRkVHJhbnNmZXJSZXF1ZXN0EgsKA3VybBgBIAEoCRIvCg5jYXRhbG9nX29yaWdpbhgCIAEoCzIXLmNoaWxsLnY0LkNhdGFsb2dPcmlnaW4iSwoTQWRkVHJhbnNmZXJSZXNwb25zZRIOCgZzdGF0dXMYASABKAkSJAoIdHJhbnNmZXIYAiABKAsyEi5jaGlsbC52NC5UcmFuc2ZlciIgChJHZXRUcmFuc2ZlclJlcXVlc3QSCgoCaWQYASABKAMiOwoTR2V0VHJhbnNmZXJSZXNwb25zZRIkCgh0cmFuc2ZlchgBIAEoCzISLmNoaWxsLnY0LlRyYW5zZmVyIr0ECghUcmFuc2ZlchIKCgJpZBgBIAEoAxIMCgRuYW1lGAIgASgJEg4KBnN0YXR1cxgDIAEoCRIUCgxwZXJjZW50X2RvbmUYBCABKAUSFgoOc3RhdHVzX21lc3NhZ2UYBSABKAkSFQoNZXJyb3JfbWVzc2FnZRgGIAEoCRIMCgRzaXplGAcgASgDEhIKCmRvd25sb2FkZWQYCCABKAMSEAoIdXBsb2FkZWQYCSABKAMSFgoOZG93bmxvYWRfc3BlZWQYCiABKAUSFAoMdXBsb2FkX3NwZWVkGAsgASgFEhcKD3BlZXJzX2Nvbm5lY3RlZBgMIAEoBRIbChNwZWVyc19zZW5kaW5nX3RvX3VzGA0gASgFEh0KFXBlZXJzX2dldHRpbmdfZnJvbV91cxgOIAEoBRIeChZlc3RpbWF0ZWRfdGltZV9zZWNvbmRzGA8gASgDEhQKB2ZpbGVfaWQYECABKANIAIgBARIVCghmaWxlX3VybBgRIAEoCUgBiAEBEhsKDnNhdmVfcGFyZW50X2lkGBIgASgDSAKIAQESDgoGc291cmNlGBMgASgJEhcKCmNyZWF0ZWRfYXQYFCABKAlIA4gBARIYCgtmaW5pc2hlZF9hdBgVIAEoCUgEiAEBEhMKC2lzX2ZpbmlzaGVkGBYgASgIQgoKCF9maWxlX2lkQgsKCV9maWxlX3VybEIRCg9fc2F2ZV9wYXJlbnRfaWRCDQoLX2NyZWF0ZWRfYXRCDgoMX2ZpbmlzaGVkX2F0IhoKGEdldERvd25sb2FkRm9sZGVyUmVxdWVzdCI/ChlHZXREb3dubG9hZEZvbGRlclJlc3BvbnNlEiIKBmZvbGRlchgBIAEoCzISLmNoaWxsLnY0LlVzZXJGaWxlIh4KEEdldEZvbGRlclJlcXVlc3QSCgoCaWQYASABKAMiXgoIVXNlckZpbGUSCgoCaWQYASABKAMSDAoEbmFtZRgCIAEoCRIRCglmaWxlX3R5cGUYAyABKAkSEQoJaXNfc2hhcmVkGAQgASgIEhIKCmNyZWF0ZWRfYXQYBSABKAkiWgoRR2V0Rm9sZGVyUmVzcG9uc2USIgoGcGFyZW50GAEgASgLMhIuY2hpbGwudjQuVXNlckZpbGUSIQoFZmlsZXMYAiADKAsyEi5jaGlsbC52NC5Vc2VyRmlsZSIXChVHZXRVc2VyUHJvZmlsZVJlcXVlc3QiUwoLVXNlclByb2ZpbGUSDwoHdXNlcl9pZBgBIAEoCRIQCgh1c2VybmFtZRgCIAEoCRISCgphdmF0YXJfdXJsGAMgASgJEg0KBWVtYWlsGAQgASgJKk4KDVBlbmRpbmdSZWFzb24SHgoaUEVORElOR19SRUFTT05fVU5TUEVDSUZJRUQQABIdChlQRU5ESU5HX1JFQVNPTl9QUk9DRVNTSU5HEAEqrwEKEVVuYXZhaWxhYmxlUmVhc29uEiIKHlVOQVZBSUxBQkxFX1JFQVNPTl9VTlNQRUNJRklFRBAAEiAKHFVOQVZBSUxBQkxFX1JFQVNPTl9OT1RfRk9VTkQQARIpCiVVTkFWQUlMQUJMRV9SRUFTT05fVU5TVVBQT1JURURfRk9STUFUEAISKQolVU5BVkFJTEFCTEVfUkVBU09OX05PX1BMQVlBQkxFX1NPVVJDRRADKjkKCUNvbnRhaW5lchIZChVDT05UQUlORVJfVU5TUEVDSUZJRUQQABIRCg1DT05UQUlORVJfTVA0EAEqPwoKVmlkZW9Db2RlYxIbChdWSURFT19DT0RFQ19VTlNQRUNJRklFRBAAEhQKEFZJREVPX0NPREVDX0gyNjQQASo+CgpBdWRpb0NvZGVjEhsKF0FVRElPX0NPREVDX1VOU1BFQ0lGSUVEEAASEwoPQVVESU9fQ09ERUNfQUFDEAEqYwoOU3VidGl0bGVGb3JtYXQSHwobU1VCVElUTEVfRk9STUFUX1VOU1BFQ0lGSUVEEAASFwoTU1VCVElUTEVfRk9STUFUX1ZUVBABEhcKE1NVQlRJVExFX0ZPUk1BVF9TUlQQAiqBAQoNSW5kZXhlclN0YXR1cxIeChpJTkRFWEVSX1NUQVRVU19VTlNQRUNJRklFRBAAEhoKFklOREVYRVJfU1RBVFVTX0hFQUxUSFkQARIbChdJTkRFWEVSX1NUQVRVU19ERUdSQURFRBACEhcKE0lOREVYRVJfU1RBVFVTX0RPV04QAyrDAQoMTW92aWVzU291cmNlEh0KGU1PVklFU19TT1VSQ0VfVU5TUEVDSUZJRUQQABIhCh1NT1ZJRVNfU09VUkNFX0lNREJfTU9WSUVNRVRFUhABEh4KGk1PVklFU19TT1VSQ0VfSU1EQl9UT1BfMjUwEAISFQoRTU9WSUVTX1NPVVJDRV9ZVFMQAxIhCh1NT1ZJRVNfU09VUkNFX1JPVFRFTl9UT01BVE9FUxAEEhcKE01PVklFU19TT1VSQ0VfVFJBS1QQBSrrAgoNVFZTaG93c1NvdXJjZRIfChtUVl9TSE9XU19TT1VSQ0VfVU5TUEVDSUZJRUQQABIbChdUVl9TSE9XU19TT1VSQ0VfTkVURkxJWBABEhsKF1RWX1NIT1dTX1NPVVJDRV9IQk9fTUFYEAISIQodVFZfU0hPV1NfU09VUkNFX0FQUExFX1RWX1BMVVMQAxIfChtUVl9TSE9XU19TT1VSQ0VfUFJJTUVfVklERU8QBBIfChtUVl9TSE9XU19TT1VSQ0VfRElTTkVZX1BMVVMQBRIhCh1UVl9TSE9XU19TT1VSQ0VfQUxMX1BST1ZJREVSUxAGEhgKFFRWX1NIT1dTX1NPVVJDRV9IVUxVEAcSIgoeVFZfU0hPV1NfU09VUkNFX1BBUkFNT1VOVF9QTFVTEAgSHAoYVFZfU0hPV1NfU09VUkNFX0FNQ19QTFVTEAkSGwoXVFZfU0hPV1NfU09VUkNFX1BFQUNPQ0sQCirBAQoMVFZTaG93U3RhdHVzEh4KGlRWX1NIT1dfU1RBVFVTX1VOU1BFQ0lGSUVEEAASHAoYVFZfU0hPV19TVEFUVVNfUkVUVVJOSU5HEAESGAoUVFZfU0hPV19TVEFUVVNfRU5ERUQQAhIbChdUVl9TSE9XX1NUQVRVU19DQU5DRUxFRBADEiAKHFRWX1NIT1dfU1RBVFVTX0lOX1BST0RVQ1RJT04QBBIaChZUVl9TSE9XX1NUQVRVU19QTEFOTkVEEAUqiwEKEFJlc29sdXRpb25GaWx0ZXISIQodUkVTT0xVVElPTl9GSUxURVJfVU5TUEVDSUZJRUQQABIaChZSRVNPTFVUSU9OX0ZJTFRFUl83MjBQEAESGwoXUkVTT0xVVElPTl9GSUxURVJfMTA4MFAQAhIbChdSRVNPTFVUSU9OX0ZJTFRFUl8yMTYwUBADKlkKC0NvZGVjRmlsdGVyEhwKGENPREVDX0ZJTFRFUl9VTlNQRUNJRklFRBAAEhUKEUNPREVDX0ZJTFRFUl9YMjY0EAESFQoRQ09ERUNfRklMVEVSX1gyNjUQAipBCgtPdGhlckZpbHRlchIcChhPVEhFUl9GSUxURVJfVU5TUEVDSUZJRUQQABIUChBPVEhFUl9GSUxURVJfSERSEAEqoQEKG1NlYXJjaFJlc3VsdERpc3BsYXlCZWhhdmlvchIuCipTRUFSQ0hfUkVTVUxUX0RJU1BMQVlfQkVIQVZJT1JfVU5TUEVDSUZJRUQQABImCiJTRUFSQ0hfUkVTVUxUX0RJU1BMQVlfQkVIQVZJT1JfQUxMEAESKgomU0VBUkNIX1JFU1VMVF9ESVNQTEFZX0JFSEFWSU9SX0ZBU1RFU1QQAiqXAQoZU2VhcmNoUmVzdWx0VGl0bGVCZWhhdmlvchIsCihTRUFSQ0hfUkVTVUxUX1RJVExFX0JFSEFWSU9SX1VOU1BFQ0lGSUVEEAASJQohU0VBUkNIX1JFU1VMVF9USVRMRV9CRUhBVklPUl9MSU5LEAESJQohU0VBUkNIX1JFU1VMVF9USVRMRV9CRUhBVklPUl9URVhUEAIqiAEKBlNvcnRCeRIXChNTT1JUX0JZX1VOU1BFQ0lGSUVEEAASEQoNU09SVF9CWV9USVRMRRABEhMKD1NPUlRfQllfU0VFREVSUxACEhAKDFNPUlRfQllfU0laRRADEhcKE1NPUlRfQllfVVBMT0FERURfQVQQBBISCg5TT1JUX0JZX1NPVVJDRRAFKmAKDVNvcnREaXJlY3Rpb24SHgoaU09SVF9ESVJFQ1RJT05fVU5TUEVDSUZJRUQQABIWChJTT1JUX0RJUkVDVElPTl9BU0MQARIXChNTT1JUX0RJUkVDVElPTl9ERVNDEAIqygEKC0NhdGFsb2dTb3J0EhwKGENBVEFMT0dfU09SVF9VTlNQRUNJRklFRBAAEhsKF0NBVEFMT0dfU09SVF9QT1BVTEFSSVRZEAESHAoYQ0FUQUxPR19TT1JUX1JBVElOR19ERVNDEAISGwoXQ0FUQUxPR19TT1JUX1JBVElOR19BU0MQAxIiCh5DQVRBTE9HX1NPUlRfUkVMRUFTRV9EQVRFX0RFU0MQBBIhCh1DQVRBTE9HX1NPUlRfUkVMRUFTRV9EQVRFX0FTQxAFMsMFCgtDb3JlU2VydmljZRJ9CgtIZWFsdGhDaGVjaxIcLmNoaWxsLnY0LkhlYWx0aENoZWNrUmVxdWVzdBoYLmNoaWxsLnY0LkhlYWx0aFJlc3BvbnNlIjaSQTNiEAoOCgpBcGlLZXlBdXRoEgByHwodCglYLUFQSS1LZXkSDENvcmUgQVBJIGtleRgBKAESigEKC0dldEluZGV4ZXJzEiAuY2hpbGwudjQuQ29yZUdldEluZGV4ZXJzUmVxdWVzdBohLmNoaWxsLnY0LkNvcmVHZXRJbmRleGVyc1Jlc3BvbnNlIjaSQTNiEAoOCgpBcGlLZXlBdXRoEgByHwodCglYLUFQSS1LZXkSDENvcmUgQVBJIGtleRgBKAESdwoGU2VhcmNoEhsuY2hpbGwudjQuQ29yZVNlYXJjaFJlcXVlc3QaGC5jaGlsbC52NC5TZWFyY2hSZXNwb25zZSI2kkEzYhAKDgoKQXBpS2V5QXV0aBIAch8KHQoJWC1BUEktS2V5EgxDb3JlIEFQSSBrZXkYASgBEpQBChFHZXRNb3ZpZXNCeVNvdXJjZRIiLmNoaWxsLnY0LkdldE1vdmllc0J5U291cmNlUmVxdWVzdBojLmNoaWxsLnY0LkdldE1vdmllc0J5U291cmNlUmVzcG9uc2UiNpJBM2IQCg4KCkFwaUtleUF1dGgSAHIfCh0KCVgtQVBJLUtleRIMQ29yZSBBUEkga2V5GAEoARKXAQoSR2V0VFZTaG93c0J5U291cmNlEiMuY2hpbGwudjQuR2V0VFZTaG93c0J5U291cmNlUmVxdWVzdBokLmNoaWxsLnY0LkdldFRWU2hvd3NCeVNvdXJjZVJlc3BvbnNlIjaSQTNiEAoOCgpBcGlLZXlBdXRoEgByHwodCglYLUFQSS1LZXkSDENvcmUgQVBJIGtleRgBKAEy1BUKC1VzZXJTZXJ2aWNlEqoBCgtHZXRJbmRleGVycxIgLmNoaWxsLnY0LlVzZXJHZXRJbmRleGVyc1JlcXVlc3QaIS5jaGlsbC52NC5Vc2VyR2V0SW5kZXhlcnNSZXNwb25zZSJWkkFTYhAKDgoKQmVhcmVyQXV0aBIAcj8KPQoNQXV0aG9yaXphdGlvbhIoVXNlciBhdXRoIHRva2VuLiBGb3JtYXQ6IEJlYXJlciA8dG9rZW4+LhgBKAESlwEKBlNlYXJjaBIbLmNoaWxsLnY0LlVzZXJTZWFyY2hSZXF1ZXN0GhguY2hpbGwudjQuU2VhcmNoUmVzcG9uc2UiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEpwBCglHZXRNb3ZpZXMSGi5jaGlsbC52NC5HZXRNb3ZpZXNSZXF1ZXN0GhsuY2hpbGwudjQuR2V0TW92aWVzUmVzcG9uc2UiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEp8BCgpHZXRUVlNob3dzEhsuY2hpbGwudjQuR2V0VFZTaG93c1JlcXVlc3QaHC5jaGlsbC52NC5HZXRUVlNob3dzUmVzcG9uc2UiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEq4BCg9HZXRUVlNob3dEZXRhaWwSIC5jaGlsbC52NC5HZXRUVlNob3dEZXRhaWxSZXF1ZXN0GiEuY2hpbGwudjQuR2V0VFZTaG93RGV0YWlsUmVzcG9uc2UiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEq4BCg9HZXRUVlNob3dTZWFzb24SIC5jaGlsbC52NC5HZXRUVlNob3dTZWFzb25SZXF1ZXN0GiEuY2hpbGwudjQuR2V0VFZTaG93U2Vhc29uUmVzcG9uc2UiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEskBChhHZXRUVlNob3dFcGlzb2RlRG93bmxvYWQSKS5jaGlsbC52NC5HZXRUVlNob3dFcGlzb2RlRG93bmxvYWRSZXF1ZXN0GiouY2hpbGwudjQuR2V0VFZTaG93RXBpc29kZURvd25sb2FkUmVzcG9uc2UiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEskBChhHZXRUVlNob3dTZWFzb25Eb3dubG9hZHMSKS5jaGlsbC52NC5HZXRUVlNob3dTZWFzb25Eb3dubG9hZHNSZXF1ZXN0GiouY2hpbGwudjQuR2V0VFZTaG93U2Vhc29uRG93bmxvYWRzUmVzcG9uc2UiVpJBU2IQCg4KCkJlYXJlckF1dGgSAHI/Cj0KDUF1dGhvcml6YXRpb24SKFVzZXIgYXV0aCB0b2tlbi4gRm9ybWF0OiBCZWFyZXIgPHRva2VuPi4YASgBEqMBCg9HZXRVc2VyU2V0dGluZ3MSIC5jaGlsbC52NC5HZXRVc2VyU2V0dGluZ3NSZXF1ZXN0GhYuY2hpbGwudjQuVXNlclNldHRpbmdzIlaSQVNiEAoOCgpCZWFyZXJBdXRoEgByPwo9Cg1BdXRob3JpemF0aW9uEihVc2VyIGF1dGggdG9rZW4uIEZvcm1hdDogQmVhcmVyIDx0b2tlbj4uGAEoARKlAQoQU2F2ZVVzZXJTZXR0aW5ncxIhLmNoaWxsLnY0LlNhdmVVc2VyU2V0dGluZ3NSZXF1ZXN0GhYuY2hpbGwudjQuVXNlclNldHRpbmdzIlaSQVNiEAoOCgpCZWFyZXJBdXRoEgByPwo9Cg1BdXRob3JpemF0aW9uEihVc2VyIGF1dGggdG9rZW4uIEZvcm1hdDogQmVhcmVyIDx0b2tlbj4uGAEoARKiAQoLQWRkVHJhbnNmZXISHC5jaGlsbC52NC5BZGRUcmFuc2ZlclJlcXVlc3QaHS5jaGlsbC52NC5BZGRUcmFuc2ZlclJlc3BvbnNlIlaSQVNiEAoOCgpCZWFyZXJBdXRoEgByPwo9Cg1BdXRob3JpemF0aW9uEihVc2VyIGF1dGggdG9rZW4uIEZvcm1hdDogQmVhcmVyIDx0b2tlbj4uGAEoARKiAQoLR2V0VHJhbnNmZXISHC5jaGlsbC52NC5HZXRUcmFuc2ZlclJlcXVlc3QaHS5jaGlsbC52NC5HZXRUcmFuc2ZlclJlc3BvbnNlIlaSQVNiEAoOCgpCZWFyZXJBdXRoEgByPwo9Cg1BdXRob3JpemF0aW9uEihVc2VyIGF1dGggdG9rZW4uIEZvcm1hdDogQmVhcmVyIDx0b2tlbj4uGAEoARK0AQoRR2V0RG93bmxvYWRGb2xkZXISIi5jaGlsbC52NC5HZXREb3dubG9hZEZvbGRlclJlcXVlc3QaIy5jaGlsbC52NC5HZXREb3dubG9hZEZvbGRlclJlc3BvbnNlIlaSQVNiEAoOCgpCZWFyZXJBdXRoEgByPwo9Cg1BdXRob3JpemF0aW9uEihVc2VyIGF1dGggdG9rZW4uIEZvcm1hdDogQmVhcmVyIDx0b2tlbj4uGAEoARKcAQoJR2V0Rm9sZGVyEhouY2hpbGwudjQuR2V0Rm9sZGVyUmVxdWVzdBobLmNoaWxsLnY0LkdldEZvbGRlclJlc3BvbnNlIlaSQVNiEAoOCgpCZWFyZXJBdXRoEgByPwo9Cg1BdXRob3JpemF0aW9uEihVc2VyIGF1dGggdG9rZW4uIEZvcm1hdDogQmVhcmVyIDx0b2tlbj4uGAEoARKxAQoPUmVzb2x2ZVBsYXliYWNrEiAuY2hpbGwudjQuUmVzb2x2ZVBsYXliYWNrUmVxdWVzdBohLmNoaWxsLnY0LlJlc29sdmVQbGF5YmFja1Jlc3BvbnNlIlmQAgGSQVNiEAoOCgpCZWFyZXJBdXRoEgByPwo9Cg1BdXRob3JpemF0aW9uEihVc2VyIGF1dGggdG9rZW4uIEZvcm1hdDogQmVhcmVyIDx0b2tlbj4uGAEoARKgAQoOR2V0VXNlclByb2ZpbGUSHy5jaGlsbC52NC5HZXRVc2VyUHJvZmlsZVJlcXVlc3QaFS5jaGlsbC52NC5Vc2VyUHJvZmlsZSJWkkFTYhAKDgoKQmVhcmVyQXV0aBIAcj8KPQoNQXV0aG9yaXphdGlvbhIoVXNlciBhdXRoIHRva2VuLiBGb3JtYXQ6IEJlYXJlciA8dG9rZW4+LhgBKAFCkwMKDGNvbS5jaGlsbC52NEIIQXBpUHJvdG9QAVpFZ2l0aHViLmNvbS9jaGlsbC1pbnN0aXR1dGUvY2hpbGwtY29udHJhY3RzL3YyL2dlbi9nby9jaGlsbC92NDtjaGlsbHY0ogIDQ1hYqgIIQ2hpbGwuVjTKAghDaGlsbFxWNOICFENoaWxsXFY0XEdQQk1ldGFkYXRh6gIJQ2hpbGw6OlY0kkHvARIVChBDaGlsbCBBUEkgdjQgUlBDMgE0IgMvdjRa0AEKWgoKQXBpS2V5QXV0aBJMCAISO0NvcmUgQVBJIGtleS4gU2VuZCB0aGUga2V5IGluIFgtQVBJLUtleS4gRG8gbm90IHVzZSBCZWFyZXIuGglYLUFQSS1LZXkgAgpyCgpCZWFyZXJBdXRoEmQIAhJPVXNlciBhdXRoIHRva2VuLiBGb3JtYXQ6IEJlYXJlciA8dG9rZW4+LiBEbyBub3Qgc2VuZCBBUEkga2V5cyBhcyBCZWFyZXIgdG9rZW5zLhoNQXV0aG9yaXphdGlvbiACYgZwcm90bzM", [file_google_protobuf_timestamp, file_protoc_gen_openapiv2_options_annotations]);
14
+
15
+ /**
16
+ * Describes the message chill.v4.ResolvePlaybackRequest.
17
+ * Use `create(ResolvePlaybackRequestSchema)` to create a new message.
18
+ */
19
+ export const ResolvePlaybackRequestSchema = /*@__PURE__*/
20
+ messageDesc(file_chill_v4_api, 0);
21
+
22
+ /**
23
+ * Describes the message chill.v4.ResolvePlaybackResponse.
24
+ * Use `create(ResolvePlaybackResponseSchema)` to create a new message.
25
+ */
26
+ export const ResolvePlaybackResponseSchema = /*@__PURE__*/
27
+ messageDesc(file_chill_v4_api, 1);
28
+
29
+ /**
30
+ * Describes the message chill.v4.PlaybackReady.
31
+ * Use `create(PlaybackReadySchema)` to create a new message.
32
+ */
33
+ export const PlaybackReadySchema = /*@__PURE__*/
34
+ messageDesc(file_chill_v4_api, 2);
35
+
36
+ /**
37
+ * Describes the message chill.v4.PlaybackPending.
38
+ * Use `create(PlaybackPendingSchema)` to create a new message.
39
+ */
40
+ export const PlaybackPendingSchema = /*@__PURE__*/
41
+ messageDesc(file_chill_v4_api, 3);
42
+
43
+ /**
44
+ * Describes the message chill.v4.PlaybackUnavailable.
45
+ * Use `create(PlaybackUnavailableSchema)` to create a new message.
46
+ */
47
+ export const PlaybackUnavailableSchema = /*@__PURE__*/
48
+ messageDesc(file_chill_v4_api, 4);
49
+
50
+ /**
51
+ * Describes the message chill.v4.PlaybackUrl.
52
+ * Use `create(PlaybackUrlSchema)` to create a new message.
53
+ */
54
+ export const PlaybackUrlSchema = /*@__PURE__*/
55
+ messageDesc(file_chill_v4_api, 5);
56
+
57
+ /**
58
+ * Describes the message chill.v4.PlaybackFormat.
59
+ * Use `create(PlaybackFormatSchema)` to create a new message.
60
+ */
61
+ export const PlaybackFormatSchema = /*@__PURE__*/
62
+ messageDesc(file_chill_v4_api, 6);
63
+
64
+ /**
65
+ * Describes the message chill.v4.Subtitle.
66
+ * Use `create(SubtitleSchema)` to create a new message.
67
+ */
68
+ export const SubtitleSchema = /*@__PURE__*/
69
+ messageDesc(file_chill_v4_api, 7);
13
70
 
14
71
  /**
15
72
  * Describes the message chill.v4.HealthCheckRequest.
16
73
  * Use `create(HealthCheckRequestSchema)` to create a new message.
17
74
  */
18
75
  export const HealthCheckRequestSchema = /*@__PURE__*/
19
- messageDesc(file_chill_v4_api, 0);
76
+ messageDesc(file_chill_v4_api, 8);
20
77
 
21
78
  /**
22
79
  * Describes the message chill.v4.HealthResponse.
23
80
  * Use `create(HealthResponseSchema)` to create a new message.
24
81
  */
25
82
  export const HealthResponseSchema = /*@__PURE__*/
26
- messageDesc(file_chill_v4_api, 1);
83
+ messageDesc(file_chill_v4_api, 9);
27
84
 
28
85
  /**
29
86
  * Describes the message chill.v4.CoreGetIndexersRequest.
30
87
  * Use `create(CoreGetIndexersRequestSchema)` to create a new message.
31
88
  */
32
89
  export const CoreGetIndexersRequestSchema = /*@__PURE__*/
33
- messageDesc(file_chill_v4_api, 2);
90
+ messageDesc(file_chill_v4_api, 10);
34
91
 
35
92
  /**
36
93
  * Describes the message chill.v4.Indexer.
37
94
  * Use `create(IndexerSchema)` to create a new message.
38
95
  */
39
96
  export const IndexerSchema = /*@__PURE__*/
40
- messageDesc(file_chill_v4_api, 3);
97
+ messageDesc(file_chill_v4_api, 11);
41
98
 
42
99
  /**
43
100
  * Describes the message chill.v4.CoreGetIndexersResponse.
44
101
  * Use `create(CoreGetIndexersResponseSchema)` to create a new message.
45
102
  */
46
103
  export const CoreGetIndexersResponseSchema = /*@__PURE__*/
47
- messageDesc(file_chill_v4_api, 4);
104
+ messageDesc(file_chill_v4_api, 12);
48
105
 
49
106
  /**
50
107
  * Describes the message chill.v4.UserGetIndexersRequest.
51
108
  * Use `create(UserGetIndexersRequestSchema)` to create a new message.
52
109
  */
53
110
  export const UserGetIndexersRequestSchema = /*@__PURE__*/
54
- messageDesc(file_chill_v4_api, 5);
111
+ messageDesc(file_chill_v4_api, 13);
55
112
 
56
113
  /**
57
114
  * Describes the message chill.v4.UserGetIndexersResponse.
58
115
  * Use `create(UserGetIndexersResponseSchema)` to create a new message.
59
116
  */
60
117
  export const UserGetIndexersResponseSchema = /*@__PURE__*/
61
- messageDesc(file_chill_v4_api, 6);
118
+ messageDesc(file_chill_v4_api, 14);
62
119
 
63
120
  /**
64
121
  * Describes the message chill.v4.UserIndexer.
65
122
  * Use `create(UserIndexerSchema)` to create a new message.
66
123
  */
67
124
  export const UserIndexerSchema = /*@__PURE__*/
68
- messageDesc(file_chill_v4_api, 7);
125
+ messageDesc(file_chill_v4_api, 15);
69
126
 
70
127
  /**
71
128
  * Describes the message chill.v4.CoreSearchRequest.
72
129
  * Use `create(CoreSearchRequestSchema)` to create a new message.
73
130
  */
74
131
  export const CoreSearchRequestSchema = /*@__PURE__*/
75
- messageDesc(file_chill_v4_api, 8);
132
+ messageDesc(file_chill_v4_api, 16);
76
133
 
77
134
  /**
78
135
  * Describes the message chill.v4.ReleaseInfo.
79
136
  * Use `create(ReleaseInfoSchema)` to create a new message.
80
137
  */
81
138
  export const ReleaseInfoSchema = /*@__PURE__*/
82
- messageDesc(file_chill_v4_api, 9);
139
+ messageDesc(file_chill_v4_api, 17);
83
140
 
84
141
  /**
85
142
  * Describes the message chill.v4.SearchResult.
86
143
  * Use `create(SearchResultSchema)` to create a new message.
87
144
  */
88
145
  export const SearchResultSchema = /*@__PURE__*/
89
- messageDesc(file_chill_v4_api, 10);
146
+ messageDesc(file_chill_v4_api, 18);
90
147
 
91
148
  /**
92
149
  * Describes the message chill.v4.SearchResponse.
93
150
  * Use `create(SearchResponseSchema)` to create a new message.
94
151
  */
95
152
  export const SearchResponseSchema = /*@__PURE__*/
96
- messageDesc(file_chill_v4_api, 11);
153
+ messageDesc(file_chill_v4_api, 19);
97
154
 
98
155
  /**
99
156
  * Describes the message chill.v4.IndexerStat.
100
157
  * Use `create(IndexerStatSchema)` to create a new message.
101
158
  */
102
159
  export const IndexerStatSchema = /*@__PURE__*/
103
- messageDesc(file_chill_v4_api, 12);
160
+ messageDesc(file_chill_v4_api, 20);
104
161
 
105
162
  /**
106
163
  * Describes the message chill.v4.UserSearchRequest.
107
164
  * Use `create(UserSearchRequestSchema)` to create a new message.
108
165
  */
109
166
  export const UserSearchRequestSchema = /*@__PURE__*/
110
- messageDesc(file_chill_v4_api, 13);
167
+ messageDesc(file_chill_v4_api, 21);
111
168
 
112
169
  /**
113
170
  * Describes the message chill.v4.GetMoviesBySourceRequest.
114
171
  * Use `create(GetMoviesBySourceRequestSchema)` to create a new message.
115
172
  */
116
173
  export const GetMoviesBySourceRequestSchema = /*@__PURE__*/
117
- messageDesc(file_chill_v4_api, 14);
174
+ messageDesc(file_chill_v4_api, 22);
118
175
 
119
176
  /**
120
177
  * Describes the message chill.v4.Movie.
121
178
  * Use `create(MovieSchema)` to create a new message.
122
179
  */
123
180
  export const MovieSchema = /*@__PURE__*/
124
- messageDesc(file_chill_v4_api, 15);
181
+ messageDesc(file_chill_v4_api, 23);
125
182
 
126
183
  /**
127
184
  * Describes the message chill.v4.GetMoviesBySourceResponse.
128
185
  * Use `create(GetMoviesBySourceResponseSchema)` to create a new message.
129
186
  */
130
187
  export const GetMoviesBySourceResponseSchema = /*@__PURE__*/
131
- messageDesc(file_chill_v4_api, 16);
188
+ messageDesc(file_chill_v4_api, 24);
132
189
 
133
190
  /**
134
191
  * Describes the message chill.v4.GetMoviesRequest.
135
192
  * Use `create(GetMoviesRequestSchema)` to create a new message.
136
193
  */
137
194
  export const GetMoviesRequestSchema = /*@__PURE__*/
138
- messageDesc(file_chill_v4_api, 17);
195
+ messageDesc(file_chill_v4_api, 25);
139
196
 
140
197
  /**
141
198
  * Describes the message chill.v4.GetMoviesResponse.
142
199
  * Use `create(GetMoviesResponseSchema)` to create a new message.
143
200
  */
144
201
  export const GetMoviesResponseSchema = /*@__PURE__*/
145
- messageDesc(file_chill_v4_api, 18);
202
+ messageDesc(file_chill_v4_api, 26);
146
203
 
147
204
  /**
148
205
  * Describes the message chill.v4.TVShow.
149
206
  * Use `create(TVShowSchema)` to create a new message.
150
207
  */
151
208
  export const TVShowSchema = /*@__PURE__*/
152
- messageDesc(file_chill_v4_api, 19);
209
+ messageDesc(file_chill_v4_api, 27);
153
210
 
154
211
  /**
155
212
  * Describes the message chill.v4.GetTVShowsBySourceRequest.
156
213
  * Use `create(GetTVShowsBySourceRequestSchema)` to create a new message.
157
214
  */
158
215
  export const GetTVShowsBySourceRequestSchema = /*@__PURE__*/
159
- messageDesc(file_chill_v4_api, 20);
216
+ messageDesc(file_chill_v4_api, 28);
160
217
 
161
218
  /**
162
219
  * Describes the message chill.v4.GetTVShowsBySourceResponse.
163
220
  * Use `create(GetTVShowsBySourceResponseSchema)` to create a new message.
164
221
  */
165
222
  export const GetTVShowsBySourceResponseSchema = /*@__PURE__*/
166
- messageDesc(file_chill_v4_api, 21);
223
+ messageDesc(file_chill_v4_api, 29);
167
224
 
168
225
  /**
169
226
  * Describes the message chill.v4.GetTVShowsRequest.
170
227
  * Use `create(GetTVShowsRequestSchema)` to create a new message.
171
228
  */
172
229
  export const GetTVShowsRequestSchema = /*@__PURE__*/
173
- messageDesc(file_chill_v4_api, 22);
230
+ messageDesc(file_chill_v4_api, 30);
174
231
 
175
232
  /**
176
233
  * Describes the message chill.v4.GetTVShowsResponse.
177
234
  * Use `create(GetTVShowsResponseSchema)` to create a new message.
178
235
  */
179
236
  export const GetTVShowsResponseSchema = /*@__PURE__*/
180
- messageDesc(file_chill_v4_api, 23);
237
+ messageDesc(file_chill_v4_api, 31);
181
238
 
182
239
  /**
183
240
  * Describes the message chill.v4.TVShowDetail.
184
241
  * Use `create(TVShowDetailSchema)` to create a new message.
185
242
  */
186
243
  export const TVShowDetailSchema = /*@__PURE__*/
187
- messageDesc(file_chill_v4_api, 24);
244
+ messageDesc(file_chill_v4_api, 32);
188
245
 
189
246
  /**
190
247
  * Describes the message chill.v4.TVShowSeason.
191
248
  * Use `create(TVShowSeasonSchema)` to create a new message.
192
249
  */
193
250
  export const TVShowSeasonSchema = /*@__PURE__*/
194
- messageDesc(file_chill_v4_api, 25);
251
+ messageDesc(file_chill_v4_api, 33);
195
252
 
196
253
  /**
197
254
  * Describes the message chill.v4.TVShowEpisode.
198
255
  * Use `create(TVShowEpisodeSchema)` to create a new message.
199
256
  */
200
257
  export const TVShowEpisodeSchema = /*@__PURE__*/
201
- messageDesc(file_chill_v4_api, 26);
258
+ messageDesc(file_chill_v4_api, 34);
202
259
 
203
260
  /**
204
261
  * Describes the message chill.v4.GetTVShowDetailRequest.
205
262
  * Use `create(GetTVShowDetailRequestSchema)` to create a new message.
206
263
  */
207
264
  export const GetTVShowDetailRequestSchema = /*@__PURE__*/
208
- messageDesc(file_chill_v4_api, 27);
265
+ messageDesc(file_chill_v4_api, 35);
209
266
 
210
267
  /**
211
268
  * Describes the message chill.v4.GetTVShowDetailResponse.
212
269
  * Use `create(GetTVShowDetailResponseSchema)` to create a new message.
213
270
  */
214
271
  export const GetTVShowDetailResponseSchema = /*@__PURE__*/
215
- messageDesc(file_chill_v4_api, 28);
272
+ messageDesc(file_chill_v4_api, 36);
216
273
 
217
274
  /**
218
275
  * Describes the message chill.v4.GetTVShowSeasonRequest.
219
276
  * Use `create(GetTVShowSeasonRequestSchema)` to create a new message.
220
277
  */
221
278
  export const GetTVShowSeasonRequestSchema = /*@__PURE__*/
222
- messageDesc(file_chill_v4_api, 29);
279
+ messageDesc(file_chill_v4_api, 37);
223
280
 
224
281
  /**
225
282
  * Describes the message chill.v4.GetTVShowSeasonResponse.
226
283
  * Use `create(GetTVShowSeasonResponseSchema)` to create a new message.
227
284
  */
228
285
  export const GetTVShowSeasonResponseSchema = /*@__PURE__*/
229
- messageDesc(file_chill_v4_api, 30);
286
+ messageDesc(file_chill_v4_api, 38);
230
287
 
231
288
  /**
232
289
  * Describes the message chill.v4.TVShowDownload.
233
290
  * Use `create(TVShowDownloadSchema)` to create a new message.
234
291
  */
235
292
  export const TVShowDownloadSchema = /*@__PURE__*/
236
- messageDesc(file_chill_v4_api, 31);
293
+ messageDesc(file_chill_v4_api, 39);
237
294
 
238
295
  /**
239
296
  * Describes the message chill.v4.GetTVShowEpisodeDownloadRequest.
240
297
  * Use `create(GetTVShowEpisodeDownloadRequestSchema)` to create a new message.
241
298
  */
242
299
  export const GetTVShowEpisodeDownloadRequestSchema = /*@__PURE__*/
243
- messageDesc(file_chill_v4_api, 32);
300
+ messageDesc(file_chill_v4_api, 40);
244
301
 
245
302
  /**
246
303
  * Describes the message chill.v4.GetTVShowEpisodeDownloadResponse.
247
304
  * Use `create(GetTVShowEpisodeDownloadResponseSchema)` to create a new message.
248
305
  */
249
306
  export const GetTVShowEpisodeDownloadResponseSchema = /*@__PURE__*/
250
- messageDesc(file_chill_v4_api, 33);
307
+ messageDesc(file_chill_v4_api, 41);
251
308
 
252
309
  /**
253
310
  * Describes the message chill.v4.GetTVShowSeasonDownloadsRequest.
254
311
  * Use `create(GetTVShowSeasonDownloadsRequestSchema)` to create a new message.
255
312
  */
256
313
  export const GetTVShowSeasonDownloadsRequestSchema = /*@__PURE__*/
257
- messageDesc(file_chill_v4_api, 34);
314
+ messageDesc(file_chill_v4_api, 42);
258
315
 
259
316
  /**
260
317
  * Describes the message chill.v4.GetTVShowSeasonDownloadsResponse.
261
318
  * Use `create(GetTVShowSeasonDownloadsResponseSchema)` to create a new message.
262
319
  */
263
320
  export const GetTVShowSeasonDownloadsResponseSchema = /*@__PURE__*/
264
- messageDesc(file_chill_v4_api, 35);
321
+ messageDesc(file_chill_v4_api, 43);
265
322
 
266
323
  /**
267
324
  * Describes the message chill.v4.TVShowEpisodeDownloadResult.
268
325
  * Use `create(TVShowEpisodeDownloadResultSchema)` to create a new message.
269
326
  */
270
327
  export const TVShowEpisodeDownloadResultSchema = /*@__PURE__*/
271
- messageDesc(file_chill_v4_api, 36);
328
+ messageDesc(file_chill_v4_api, 44);
272
329
 
273
330
  /**
274
331
  * Describes the message chill.v4.GetUserSettingsRequest.
275
332
  * Use `create(GetUserSettingsRequestSchema)` to create a new message.
276
333
  */
277
334
  export const GetUserSettingsRequestSchema = /*@__PURE__*/
278
- messageDesc(file_chill_v4_api, 37);
335
+ messageDesc(file_chill_v4_api, 45);
279
336
 
280
337
  /**
281
338
  * Describes the message chill.v4.UserSettings.
282
339
  * Use `create(UserSettingsSchema)` to create a new message.
283
340
  */
284
341
  export const UserSettingsSchema = /*@__PURE__*/
285
- messageDesc(file_chill_v4_api, 38);
342
+ messageDesc(file_chill_v4_api, 46);
286
343
 
287
344
  /**
288
345
  * Describes the message chill.v4.SearchSettings.
289
346
  * Use `create(SearchSettingsSchema)` to create a new message.
290
347
  */
291
348
  export const SearchSettingsSchema = /*@__PURE__*/
292
- messageDesc(file_chill_v4_api, 39);
349
+ messageDesc(file_chill_v4_api, 47);
293
350
 
294
351
  /**
295
352
  * Describes the message chill.v4.CatalogSettings.
296
353
  * Use `create(CatalogSettingsSchema)` to create a new message.
297
354
  */
298
355
  export const CatalogSettingsSchema = /*@__PURE__*/
299
- messageDesc(file_chill_v4_api, 40);
356
+ messageDesc(file_chill_v4_api, 48);
300
357
 
301
358
  /**
302
359
  * Describes the message chill.v4.DownloadSettings.
303
360
  * Use `create(DownloadSettingsSchema)` to create a new message.
304
361
  */
305
362
  export const DownloadSettingsSchema = /*@__PURE__*/
306
- messageDesc(file_chill_v4_api, 41);
363
+ messageDesc(file_chill_v4_api, 49);
307
364
 
308
365
  /**
309
366
  * Describes the message chill.v4.SaveUserSettingsRequest.
310
367
  * Use `create(SaveUserSettingsRequestSchema)` to create a new message.
311
368
  */
312
369
  export const SaveUserSettingsRequestSchema = /*@__PURE__*/
313
- messageDesc(file_chill_v4_api, 42);
370
+ messageDesc(file_chill_v4_api, 50);
314
371
 
315
372
  /**
316
373
  * Describes the message chill.v4.CatalogOrigin.
317
374
  * Use `create(CatalogOriginSchema)` to create a new message.
318
375
  */
319
376
  export const CatalogOriginSchema = /*@__PURE__*/
320
- messageDesc(file_chill_v4_api, 43);
377
+ messageDesc(file_chill_v4_api, 51);
321
378
 
322
379
  /**
323
380
  * Describes the message chill.v4.AddTransferRequest.
324
381
  * Use `create(AddTransferRequestSchema)` to create a new message.
325
382
  */
326
383
  export const AddTransferRequestSchema = /*@__PURE__*/
327
- messageDesc(file_chill_v4_api, 44);
384
+ messageDesc(file_chill_v4_api, 52);
328
385
 
329
386
  /**
330
387
  * Describes the message chill.v4.AddTransferResponse.
331
388
  * Use `create(AddTransferResponseSchema)` to create a new message.
332
389
  */
333
390
  export const AddTransferResponseSchema = /*@__PURE__*/
334
- messageDesc(file_chill_v4_api, 45);
391
+ messageDesc(file_chill_v4_api, 53);
335
392
 
336
393
  /**
337
394
  * Describes the message chill.v4.GetTransferRequest.
338
395
  * Use `create(GetTransferRequestSchema)` to create a new message.
339
396
  */
340
397
  export const GetTransferRequestSchema = /*@__PURE__*/
341
- messageDesc(file_chill_v4_api, 46);
398
+ messageDesc(file_chill_v4_api, 54);
342
399
 
343
400
  /**
344
401
  * Describes the message chill.v4.GetTransferResponse.
345
402
  * Use `create(GetTransferResponseSchema)` to create a new message.
346
403
  */
347
404
  export const GetTransferResponseSchema = /*@__PURE__*/
348
- messageDesc(file_chill_v4_api, 47);
405
+ messageDesc(file_chill_v4_api, 55);
349
406
 
350
407
  /**
351
408
  * Describes the message chill.v4.Transfer.
352
409
  * Use `create(TransferSchema)` to create a new message.
353
410
  */
354
411
  export const TransferSchema = /*@__PURE__*/
355
- messageDesc(file_chill_v4_api, 48);
412
+ messageDesc(file_chill_v4_api, 56);
356
413
 
357
414
  /**
358
415
  * Describes the message chill.v4.GetDownloadFolderRequest.
359
416
  * Use `create(GetDownloadFolderRequestSchema)` to create a new message.
360
417
  */
361
418
  export const GetDownloadFolderRequestSchema = /*@__PURE__*/
362
- messageDesc(file_chill_v4_api, 49);
419
+ messageDesc(file_chill_v4_api, 57);
363
420
 
364
421
  /**
365
422
  * Describes the message chill.v4.GetDownloadFolderResponse.
366
423
  * Use `create(GetDownloadFolderResponseSchema)` to create a new message.
367
424
  */
368
425
  export const GetDownloadFolderResponseSchema = /*@__PURE__*/
369
- messageDesc(file_chill_v4_api, 50);
426
+ messageDesc(file_chill_v4_api, 58);
370
427
 
371
428
  /**
372
429
  * Describes the message chill.v4.GetFolderRequest.
373
430
  * Use `create(GetFolderRequestSchema)` to create a new message.
374
431
  */
375
432
  export const GetFolderRequestSchema = /*@__PURE__*/
376
- messageDesc(file_chill_v4_api, 51);
433
+ messageDesc(file_chill_v4_api, 59);
377
434
 
378
435
  /**
379
436
  * Describes the message chill.v4.UserFile.
380
437
  * Use `create(UserFileSchema)` to create a new message.
381
438
  */
382
439
  export const UserFileSchema = /*@__PURE__*/
383
- messageDesc(file_chill_v4_api, 52);
440
+ messageDesc(file_chill_v4_api, 60);
384
441
 
385
442
  /**
386
443
  * Describes the message chill.v4.GetFolderResponse.
387
444
  * Use `create(GetFolderResponseSchema)` to create a new message.
388
445
  */
389
446
  export const GetFolderResponseSchema = /*@__PURE__*/
390
- messageDesc(file_chill_v4_api, 53);
447
+ messageDesc(file_chill_v4_api, 61);
391
448
 
392
449
  /**
393
450
  * Describes the message chill.v4.GetUserProfileRequest.
394
451
  * Use `create(GetUserProfileRequestSchema)` to create a new message.
395
452
  */
396
453
  export const GetUserProfileRequestSchema = /*@__PURE__*/
397
- messageDesc(file_chill_v4_api, 54);
454
+ messageDesc(file_chill_v4_api, 62);
398
455
 
399
456
  /**
400
457
  * Describes the message chill.v4.UserProfile.
401
458
  * Use `create(UserProfileSchema)` to create a new message.
402
459
  */
403
460
  export const UserProfileSchema = /*@__PURE__*/
404
- messageDesc(file_chill_v4_api, 55);
461
+ messageDesc(file_chill_v4_api, 63);
462
+
463
+ /**
464
+ * Describes the enum chill.v4.PendingReason.
465
+ */
466
+ export const PendingReasonSchema = /*@__PURE__*/
467
+ enumDesc(file_chill_v4_api, 0);
468
+
469
+ /**
470
+ * @generated from enum chill.v4.PendingReason
471
+ */
472
+ export const PendingReason = /*@__PURE__*/
473
+ tsEnum(PendingReasonSchema);
474
+
475
+ /**
476
+ * Describes the enum chill.v4.UnavailableReason.
477
+ */
478
+ export const UnavailableReasonSchema = /*@__PURE__*/
479
+ enumDesc(file_chill_v4_api, 1);
480
+
481
+ /**
482
+ * @generated from enum chill.v4.UnavailableReason
483
+ */
484
+ export const UnavailableReason = /*@__PURE__*/
485
+ tsEnum(UnavailableReasonSchema);
486
+
487
+ /**
488
+ * Describes the enum chill.v4.Container.
489
+ */
490
+ export const ContainerSchema = /*@__PURE__*/
491
+ enumDesc(file_chill_v4_api, 2);
492
+
493
+ /**
494
+ * @generated from enum chill.v4.Container
495
+ */
496
+ export const Container = /*@__PURE__*/
497
+ tsEnum(ContainerSchema);
498
+
499
+ /**
500
+ * Describes the enum chill.v4.VideoCodec.
501
+ */
502
+ export const VideoCodecSchema = /*@__PURE__*/
503
+ enumDesc(file_chill_v4_api, 3);
504
+
505
+ /**
506
+ * @generated from enum chill.v4.VideoCodec
507
+ */
508
+ export const VideoCodec = /*@__PURE__*/
509
+ tsEnum(VideoCodecSchema);
510
+
511
+ /**
512
+ * Describes the enum chill.v4.AudioCodec.
513
+ */
514
+ export const AudioCodecSchema = /*@__PURE__*/
515
+ enumDesc(file_chill_v4_api, 4);
516
+
517
+ /**
518
+ * @generated from enum chill.v4.AudioCodec
519
+ */
520
+ export const AudioCodec = /*@__PURE__*/
521
+ tsEnum(AudioCodecSchema);
522
+
523
+ /**
524
+ * Describes the enum chill.v4.SubtitleFormat.
525
+ */
526
+ export const SubtitleFormatSchema = /*@__PURE__*/
527
+ enumDesc(file_chill_v4_api, 5);
528
+
529
+ /**
530
+ * @generated from enum chill.v4.SubtitleFormat
531
+ */
532
+ export const SubtitleFormat = /*@__PURE__*/
533
+ tsEnum(SubtitleFormatSchema);
405
534
 
406
535
  /**
407
536
  * Describes the enum chill.v4.IndexerStatus.
408
537
  */
409
538
  export const IndexerStatusSchema = /*@__PURE__*/
410
- enumDesc(file_chill_v4_api, 0);
539
+ enumDesc(file_chill_v4_api, 6);
411
540
 
412
541
  /**
413
542
  * @generated from enum chill.v4.IndexerStatus
@@ -419,7 +548,7 @@ export const IndexerStatus = /*@__PURE__*/
419
548
  * Describes the enum chill.v4.MoviesSource.
420
549
  */
421
550
  export const MoviesSourceSchema = /*@__PURE__*/
422
- enumDesc(file_chill_v4_api, 1);
551
+ enumDesc(file_chill_v4_api, 7);
423
552
 
424
553
  /**
425
554
  * @generated from enum chill.v4.MoviesSource
@@ -431,7 +560,7 @@ export const MoviesSource = /*@__PURE__*/
431
560
  * Describes the enum chill.v4.TVShowsSource.
432
561
  */
433
562
  export const TVShowsSourceSchema = /*@__PURE__*/
434
- enumDesc(file_chill_v4_api, 2);
563
+ enumDesc(file_chill_v4_api, 8);
435
564
 
436
565
  /**
437
566
  * @generated from enum chill.v4.TVShowsSource
@@ -443,7 +572,7 @@ export const TVShowsSource = /*@__PURE__*/
443
572
  * Describes the enum chill.v4.TVShowStatus.
444
573
  */
445
574
  export const TVShowStatusSchema = /*@__PURE__*/
446
- enumDesc(file_chill_v4_api, 3);
575
+ enumDesc(file_chill_v4_api, 9);
447
576
 
448
577
  /**
449
578
  * @generated from enum chill.v4.TVShowStatus
@@ -455,7 +584,7 @@ export const TVShowStatus = /*@__PURE__*/
455
584
  * Describes the enum chill.v4.ResolutionFilter.
456
585
  */
457
586
  export const ResolutionFilterSchema = /*@__PURE__*/
458
- enumDesc(file_chill_v4_api, 4);
587
+ enumDesc(file_chill_v4_api, 10);
459
588
 
460
589
  /**
461
590
  * @generated from enum chill.v4.ResolutionFilter
@@ -467,7 +596,7 @@ export const ResolutionFilter = /*@__PURE__*/
467
596
  * Describes the enum chill.v4.CodecFilter.
468
597
  */
469
598
  export const CodecFilterSchema = /*@__PURE__*/
470
- enumDesc(file_chill_v4_api, 5);
599
+ enumDesc(file_chill_v4_api, 11);
471
600
 
472
601
  /**
473
602
  * @generated from enum chill.v4.CodecFilter
@@ -479,7 +608,7 @@ export const CodecFilter = /*@__PURE__*/
479
608
  * Describes the enum chill.v4.OtherFilter.
480
609
  */
481
610
  export const OtherFilterSchema = /*@__PURE__*/
482
- enumDesc(file_chill_v4_api, 6);
611
+ enumDesc(file_chill_v4_api, 12);
483
612
 
484
613
  /**
485
614
  * @generated from enum chill.v4.OtherFilter
@@ -491,7 +620,7 @@ export const OtherFilter = /*@__PURE__*/
491
620
  * Describes the enum chill.v4.SearchResultDisplayBehavior.
492
621
  */
493
622
  export const SearchResultDisplayBehaviorSchema = /*@__PURE__*/
494
- enumDesc(file_chill_v4_api, 7);
623
+ enumDesc(file_chill_v4_api, 13);
495
624
 
496
625
  /**
497
626
  * @generated from enum chill.v4.SearchResultDisplayBehavior
@@ -503,7 +632,7 @@ export const SearchResultDisplayBehavior = /*@__PURE__*/
503
632
  * Describes the enum chill.v4.SearchResultTitleBehavior.
504
633
  */
505
634
  export const SearchResultTitleBehaviorSchema = /*@__PURE__*/
506
- enumDesc(file_chill_v4_api, 8);
635
+ enumDesc(file_chill_v4_api, 14);
507
636
 
508
637
  /**
509
638
  * @generated from enum chill.v4.SearchResultTitleBehavior
@@ -515,7 +644,7 @@ export const SearchResultTitleBehavior = /*@__PURE__*/
515
644
  * Describes the enum chill.v4.SortBy.
516
645
  */
517
646
  export const SortBySchema = /*@__PURE__*/
518
- enumDesc(file_chill_v4_api, 9);
647
+ enumDesc(file_chill_v4_api, 15);
519
648
 
520
649
  /**
521
650
  * @generated from enum chill.v4.SortBy
@@ -527,7 +656,7 @@ export const SortBy = /*@__PURE__*/
527
656
  * Describes the enum chill.v4.SortDirection.
528
657
  */
529
658
  export const SortDirectionSchema = /*@__PURE__*/
530
- enumDesc(file_chill_v4_api, 10);
659
+ enumDesc(file_chill_v4_api, 16);
531
660
 
532
661
  /**
533
662
  * @generated from enum chill.v4.SortDirection
@@ -539,7 +668,7 @@ export const SortDirection = /*@__PURE__*/
539
668
  * Describes the enum chill.v4.CatalogSort.
540
669
  */
541
670
  export const CatalogSortSchema = /*@__PURE__*/
542
- enumDesc(file_chill_v4_api, 11);
671
+ enumDesc(file_chill_v4_api, 17);
543
672
 
544
673
  /**
545
674
  * @generated from enum chill.v4.CatalogSort
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chill-institute/contracts",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "description": "Protobuf schemas and generated clients for chill.institute",
5
5
  "license": "MIT",
6
6
  "packageManager": "pnpm@12.3.4",
@@ -2,6 +2,7 @@ syntax = "proto3";
2
2
 
3
3
  package chill.v4;
4
4
 
5
+ import "google/protobuf/timestamp.proto";
5
6
  import "protoc-gen-openapiv2/options/annotations.proto";
6
7
 
7
8
  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {
@@ -378,6 +379,27 @@ service UserService {
378
379
  }
379
380
  };
380
381
  }
382
+ // Resolve media with the same regular user bearer as other UserService RPCs.
383
+ // Read-only: never initiate a transfer or conversion.
384
+ rpc ResolvePlayback(ResolvePlaybackRequest) returns (ResolvePlaybackResponse) {
385
+ option idempotency_level = NO_SIDE_EFFECTS;
386
+ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
387
+ security: {
388
+ security_requirement: {
389
+ key: "BearerAuth"
390
+ value: {}
391
+ }
392
+ }
393
+ parameters: {
394
+ headers: {
395
+ name: "Authorization"
396
+ description: "User auth token. Format: Bearer <token>."
397
+ type: STRING
398
+ required: true
399
+ }
400
+ }
401
+ };
402
+ }
381
403
  rpc GetUserProfile(GetUserProfileRequest) returns (UserProfile) {
382
404
  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
383
405
  security: {
@@ -398,6 +420,104 @@ service UserService {
398
420
  }
399
421
  }
400
422
 
423
+ message ResolvePlaybackRequest {
424
+ // Positive provider file ID. Check current access for the authenticated user
425
+ // before resolving any URL; never trust a previous folder listing.
426
+ int64 file_id = 1;
427
+ }
428
+
429
+ message ResolvePlaybackResponse {
430
+ // Exactly one result is required. Invalid/expired credentials return
431
+ // unauthenticated, not unavailable; transient provider failure returns
432
+ // unavailable RPC status. Calls never initiate transfers or conversion.
433
+ oneof result {
434
+ PlaybackReady ready = 1;
435
+ PlaybackPending pending = 2;
436
+ PlaybackUnavailable unavailable = 3;
437
+ }
438
+ }
439
+
440
+ message PlaybackReady {
441
+ PlaybackUrl media = 1;
442
+ // Provider format information when known; unspecified values mean unknown.
443
+ // Clients decide whether their playback surface supports the format.
444
+ PlaybackFormat format = 2;
445
+ // At most 32 tracks. Every URL is independently usable without a provider
446
+ // bearer; omit tracks that cannot meet this requirement.
447
+ repeated Subtitle subtitles = 3;
448
+ }
449
+
450
+ message PlaybackPending {
451
+ // Describes existing provider work only; callers must explicitly resolve
452
+ // again to observe a change. No background polling or conversion request.
453
+ PendingReason reason = 1;
454
+ }
455
+
456
+ enum PendingReason {
457
+ PENDING_REASON_UNSPECIFIED = 0;
458
+ PENDING_REASON_PROCESSING = 1;
459
+ }
460
+
461
+ message PlaybackUnavailable {
462
+ UnavailableReason reason = 1;
463
+ }
464
+
465
+ enum UnavailableReason {
466
+ UNAVAILABLE_REASON_UNSPECIFIED = 0;
467
+ // Missing files and files inaccessible to the user are indistinguishable.
468
+ UNAVAILABLE_REASON_NOT_FOUND = 1;
469
+ UNAVAILABLE_REASON_UNSUPPORTED_FORMAT = 2;
470
+ UNAVAILABLE_REASON_NO_PLAYABLE_SOURCE = 3;
471
+ }
472
+
473
+ message PlaybackUrl {
474
+ // Required direct HTTPS URL usable without forwarding provider credentials.
475
+ // Signed URLs are sensitive: never log or share-cache them.
476
+ string url = 1;
477
+ // Exactly one expiry state is required. Unknown must be true when selected;
478
+ // unknown expiry is not a guarantee that the URL remains valid.
479
+ oneof expiry {
480
+ google.protobuf.Timestamp expires_at = 2;
481
+ bool expiry_unknown = 3;
482
+ }
483
+ }
484
+
485
+ message PlaybackFormat {
486
+ Container container = 1;
487
+ VideoCodec video_codec = 2;
488
+ AudioCodec audio_codec = 3;
489
+ }
490
+
491
+ enum Container {
492
+ CONTAINER_UNSPECIFIED = 0;
493
+ CONTAINER_MP4 = 1;
494
+ }
495
+
496
+ enum VideoCodec {
497
+ VIDEO_CODEC_UNSPECIFIED = 0;
498
+ VIDEO_CODEC_H264 = 1;
499
+ }
500
+
501
+ enum AudioCodec {
502
+ AUDIO_CODEC_UNSPECIFIED = 0;
503
+ AUDIO_CODEC_AAC = 1;
504
+ }
505
+
506
+ message Subtitle {
507
+ // Unique within the response, without credentials or URLs.
508
+ string id = 1;
509
+ // ISO 639-2 language code, or und when unknown.
510
+ string language = 2;
511
+ SubtitleFormat format = 3;
512
+ PlaybackUrl source = 4;
513
+ }
514
+
515
+ enum SubtitleFormat {
516
+ SUBTITLE_FORMAT_UNSPECIFIED = 0;
517
+ SUBTITLE_FORMAT_VTT = 1;
518
+ SUBTITLE_FORMAT_SRT = 2;
519
+ }
520
+
401
521
  message HealthCheckRequest {}
402
522
 
403
523
  message HealthResponse {