@kusinta/iot-schema 0.2.0-beta.37 → 0.2.0-beta.38

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kusinta/iot-schema",
3
- "version": "0.2.0-beta.37",
3
+ "version": "0.2.0-beta.38",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "files": ["src"],
@@ -25,6 +25,7 @@
25
25
  "./space": "./src/kusinta/iot/space/v1/space_pb.js",
26
26
  "./access": "./src/kusinta/iot/access/v1/acl_pb.js",
27
27
  "./access/roles": "./src/kusinta/iot/access/v1/roles_pb.js",
28
+ "./account-link": "./src/kusinta/iot/accountlink/v1/account_link_pb.js",
28
29
  "./link": "./src/kusinta/iot/link/v1/link_pb.js",
29
30
  "./climate": "./src/kusinta/iot/climate/v1/climate_pb.js",
30
31
  "./heating": "./src/kusinta/iot/heating/v1/heating_pb.js",
@@ -0,0 +1,583 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/accountlink/v1/account_link.proto (package kusinta.iot.accountlink.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
+ import type { Message } from "@bufbuild/protobuf";
7
+ import type { Duration, Timestamp } from "@bufbuild/protobuf/wkt";
8
+
9
+ /**
10
+ * Describes the file kusinta/iot/accountlink/v1/account_link.proto.
11
+ */
12
+ export declare const file_kusinta_iot_accountlink_v1_account_link: GenFile;
13
+
14
+ /**
15
+ * A home's link at one service, as its residents see it: never its tokens or the account's
16
+ * name.
17
+ *
18
+ * @generated from message kusinta.iot.accountlink.v1.AccountLink
19
+ */
20
+ export declare type AccountLink = Message<"kusinta.iot.accountlink.v1.AccountLink"> & {
21
+ /**
22
+ * @generated from field: kusinta.iot.accountlink.v1.LinkedService service = 1;
23
+ */
24
+ service: LinkedService;
25
+
26
+ /**
27
+ * @generated from field: kusinta.iot.accountlink.v1.AccountLinkStatus status = 2;
28
+ */
29
+ status: AccountLinkStatus;
30
+
31
+ /**
32
+ * @generated from field: google.protobuf.Timestamp linked_since = 3;
33
+ */
34
+ linkedSince?: Timestamp | undefined;
35
+ };
36
+
37
+ /**
38
+ * Describes the message kusinta.iot.accountlink.v1.AccountLink.
39
+ * Use `create(AccountLinkSchema)` to create a new message.
40
+ */
41
+ export declare const AccountLinkSchema: GenMessage<AccountLink>;
42
+
43
+ /**
44
+ * A home's links, in reply to ListAccountLinks. A service with no link is not listed.
45
+ *
46
+ * @generated from message kusinta.iot.accountlink.v1.AccountLinks
47
+ */
48
+ export declare type AccountLinks = Message<"kusinta.iot.accountlink.v1.AccountLinks"> & {
49
+ /**
50
+ * @generated from field: repeated kusinta.iot.accountlink.v1.AccountLink links = 1;
51
+ */
52
+ links: AccountLink[];
53
+ };
54
+
55
+ /**
56
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinks.
57
+ * Use `create(AccountLinksSchema)` to create a new message.
58
+ */
59
+ export declare const AccountLinksSchema: GenMessage<AccountLinks>;
60
+
61
+ /**
62
+ * A single-use nonce for one home's link, in reply to RequestAccountLinkNonce: a compact JWS
63
+ * carrying AccountLinkNonceClaims, signed by the gateway. It passes between the gateway, the
64
+ * app and the api-server only; the service sees its hash (see the file comment). It names no
65
+ * home: the gateway records which home each jti was issued for.
66
+ *
67
+ * @generated from message kusinta.iot.accountlink.v1.AccountLinkNonce
68
+ */
69
+ export declare type AccountLinkNonce = Message<"kusinta.iot.accountlink.v1.AccountLinkNonce"> & {
70
+ /**
71
+ * @generated from field: string nonce = 1;
72
+ */
73
+ nonce: string;
74
+
75
+ /**
76
+ * As the claims' exp.
77
+ *
78
+ * @generated from field: google.protobuf.Timestamp expires_at = 2;
79
+ */
80
+ expiresAt?: Timestamp | undefined;
81
+ };
82
+
83
+ /**
84
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinkNonce.
85
+ * Use `create(AccountLinkNonceSchema)` to create a new message.
86
+ */
87
+ export declare const AccountLinkNonceSchema: GenMessage<AccountLinkNonce>;
88
+
89
+ /**
90
+ * The contract for the claims of AccountLinkNonce.nonce, shared by the gateway, which signs
91
+ * it, and the api-server, which verifies it. NOT sent on the wire, like
92
+ * webrtc.v1.AppTokenClaims: registered claims are flat JWT strings and NumericDates.
93
+ *
94
+ * Signed with the private key of the gateway's client certificate — the one it connects to
95
+ * the api-server with, a P-256 key — as ES256. The JWS header carries "x5t#S256", the
96
+ * thumbprint of that certificate, so the api-server finds it across a renewal. A verifier
97
+ * MUST refuse any other "alg".
98
+ *
99
+ * Before it calls the service, the api-server MUST verify that the gateway named by iss is
100
+ * registered and neither deleted nor wiped, that the certificate the thumbprint names is its
101
+ * current certificate — or the one it replaced, for no more than 10 minutes after the
102
+ * renewal — and the signature by it, aud, svc and exp, and that sub is the user posting the
103
+ * code. When the grant comes back, the gateway MUST verify the signature by its own key —
104
+ * its current one, or the one it replaced for no more than 10 minutes after the renewal —
105
+ * that iss is itself, aud and exp, and then accept the nonce once, by its jti, for the home
106
+ * it recorded for that jti, and only while that user is still a household admin of the
107
+ * home. Both sides allow at most 60 seconds of clock skew on exp. A gateway that restarts
108
+ * mid-link may have lost its jti record and answer REJECTED; the household links again.
109
+ *
110
+ * @generated from message kusinta.iot.accountlink.v1.AccountLinkNonceClaims
111
+ */
112
+ export declare type AccountLinkNonceClaims = Message<"kusinta.iot.accountlink.v1.AccountLinkNonceClaims"> & {
113
+ /**
114
+ * The gateway's id (identity.v1.GatewayId value).
115
+ *
116
+ * @generated from field: string iss = 1;
117
+ */
118
+ iss: string;
119
+
120
+ /**
121
+ * Always "account-link".
122
+ *
123
+ * @generated from field: string aud = 2;
124
+ */
125
+ aud: string;
126
+
127
+ /**
128
+ * The user it was issued to (identity.v1.UserId value).
129
+ *
130
+ * @generated from field: string sub = 3;
131
+ */
132
+ sub: string;
133
+
134
+ /**
135
+ * @generated from field: google.protobuf.Timestamp iat = 4;
136
+ */
137
+ iat?: Timestamp | undefined;
138
+
139
+ /**
140
+ * No more than 10 minutes after iat.
141
+ *
142
+ * @generated from field: google.protobuf.Timestamp exp = 5;
143
+ */
144
+ exp?: Timestamp | undefined;
145
+
146
+ /**
147
+ * Unique among the gateway's nonces, and not guessable.
148
+ *
149
+ * @generated from field: string jti = 6;
150
+ */
151
+ jti: string;
152
+
153
+ /**
154
+ * The service, by its claim value (see LinkedService).
155
+ *
156
+ * @generated from field: string svc = 8;
157
+ */
158
+ svc: string;
159
+ };
160
+
161
+ /**
162
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinkNonceClaims.
163
+ * Use `create(AccountLinkNonceClaimsSchema)` to create a new message.
164
+ */
165
+ export declare const AccountLinkNonceClaimsSchema: GenMessage<AccountLinkNonceClaims>;
166
+
167
+ /**
168
+ * An access token and what it allows: all a reader of the service needs, without the means
169
+ * to renew it.
170
+ *
171
+ * @generated from message kusinta.iot.accountlink.v1.AccessGrant
172
+ */
173
+ export declare type AccessGrant = Message<"kusinta.iot.accountlink.v1.AccessGrant"> & {
174
+ /**
175
+ * @generated from field: string access_token = 1;
176
+ */
177
+ accessToken: string;
178
+
179
+ /**
180
+ * @generated from field: google.protobuf.Timestamp expires_at = 2;
181
+ */
182
+ expiresAt?: Timestamp | undefined;
183
+
184
+ /**
185
+ * As granted, space-separated.
186
+ *
187
+ * @generated from field: string scope = 3;
188
+ */
189
+ scope: string;
190
+ };
191
+
192
+ /**
193
+ * Describes the message kusinta.iot.accountlink.v1.AccessGrant.
194
+ * Use `create(AccessGrantSchema)` to create a new message.
195
+ */
196
+ export declare const AccessGrantSchema: GenMessage<AccessGrant>;
197
+
198
+ /**
199
+ * A grant with its refresh token, which stays on the gateway.
200
+ *
201
+ * @generated from message kusinta.iot.accountlink.v1.TokenGrant
202
+ */
203
+ export declare type TokenGrant = Message<"kusinta.iot.accountlink.v1.TokenGrant"> & {
204
+ /**
205
+ * @generated from field: kusinta.iot.accountlink.v1.AccessGrant access = 1;
206
+ */
207
+ access?: AccessGrant | undefined;
208
+
209
+ /**
210
+ * @generated from field: string refresh_token = 2;
211
+ */
212
+ refreshToken: string;
213
+ };
214
+
215
+ /**
216
+ * Describes the message kusinta.iot.accountlink.v1.TokenGrant.
217
+ * Use `create(TokenGrantSchema)` to create a new message.
218
+ */
219
+ export declare const TokenGrantSchema: GenMessage<TokenGrant>;
220
+
221
+ /**
222
+ * A home's account linked, api-server → gateway. Answered with an AccountLinkResult carrying
223
+ * the same request_id. With no answer within 30 seconds, the api-server sends an
224
+ * AccountLinkCancelled, revokes the grant, and tells the app the link failed.
225
+ *
226
+ * @generated from message kusinta.iot.accountlink.v1.AccountLinked
227
+ */
228
+ export declare type AccountLinked = Message<"kusinta.iot.accountlink.v1.AccountLinked"> & {
229
+ /**
230
+ * Minted by the api-server, opaque, unique among its links in flight.
231
+ *
232
+ * @generated from field: string request_id = 1;
233
+ */
234
+ requestId: string;
235
+
236
+ /**
237
+ * The nonce exactly as the app passed it as the OAuth state.
238
+ *
239
+ * @generated from field: string nonce = 2;
240
+ */
241
+ nonce: string;
242
+
243
+ /**
244
+ * @generated from field: kusinta.iot.accountlink.v1.TokenGrant grant = 3;
245
+ */
246
+ grant?: TokenGrant | undefined;
247
+ };
248
+
249
+ /**
250
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinked.
251
+ * Use `create(AccountLinkedSchema)` to create a new message.
252
+ */
253
+ export declare const AccountLinkedSchema: GenMessage<AccountLinked>;
254
+
255
+ /**
256
+ * The api-server gave up waiting for an AccountLinkResult, api-server → gateway. A gateway
257
+ * that stored the grant for that request_id deletes it, and answers nothing.
258
+ *
259
+ * @generated from message kusinta.iot.accountlink.v1.AccountLinkCancelled
260
+ */
261
+ export declare type AccountLinkCancelled = Message<"kusinta.iot.accountlink.v1.AccountLinkCancelled"> & {
262
+ /**
263
+ * As AccountLinked.request_id.
264
+ *
265
+ * @generated from field: string request_id = 1;
266
+ */
267
+ requestId: string;
268
+ };
269
+
270
+ /**
271
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinkCancelled.
272
+ * Use `create(AccountLinkCancelledSchema)` to create a new message.
273
+ */
274
+ export declare const AccountLinkCancelledSchema: GenMessage<AccountLinkCancelled>;
275
+
276
+ /**
277
+ * @generated from message kusinta.iot.accountlink.v1.AccountLinkResult
278
+ */
279
+ export declare type AccountLinkResult = Message<"kusinta.iot.accountlink.v1.AccountLinkResult"> & {
280
+ /**
281
+ * As AccountLinked.request_id.
282
+ *
283
+ * @generated from field: string request_id = 1;
284
+ */
285
+ requestId: string;
286
+
287
+ /**
288
+ * @generated from field: kusinta.iot.accountlink.v1.AccountLinkOutcome outcome = 2;
289
+ */
290
+ outcome: AccountLinkOutcome;
291
+ };
292
+
293
+ /**
294
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinkResult.
295
+ * Use `create(AccountLinkResultSchema)` to create a new message.
296
+ */
297
+ export declare const AccountLinkResultSchema: GenMessage<AccountLinkResult>;
298
+
299
+ /**
300
+ * Asks the api-server to refresh a grant, gateway → api-server. Answered with a TokenRefreshed
301
+ * carrying the same request_id.
302
+ *
303
+ * The gateway refreshes only when it needs a current access token for a read — for a read
304
+ * by a connector, while a connector session reading through the link is open — and not
305
+ * before the access token is near its expiry, with a random margin, so that gateways do not
306
+ * refresh together; and it has at most one refresh of a grant in flight. A gateway with no
307
+ * answer asks again with the same request_id and refresh token, for up to 10 minutes; after
308
+ * that it sends the old token no more, and the household links again.
309
+ *
310
+ * The api-server MUST keep its answer, keyed by the requesting gateway's identity and a hash
311
+ * of the refresh token, for 10 minutes, and answer a repeated request from it without asking
312
+ * the service: a service may rotate the refresh token, and a second exchange of the old one
313
+ * would end the link. It is held in the memory of the process that answered — the one
314
+ * holding the gateway's stream — and never shared, persisted or logged; it goes at the end of
315
+ * the 10 minutes or of the process. A restart, or the stream moving to another process,
316
+ * within them loses it, and a retry then exchanges the old token again: where the service
317
+ * rotates refresh tokens the link ends and the household links again. That is accepted.
318
+ *
319
+ * @generated from message kusinta.iot.accountlink.v1.RefreshToken
320
+ */
321
+ export declare type RefreshToken = Message<"kusinta.iot.accountlink.v1.RefreshToken"> & {
322
+ /**
323
+ * Minted by the gateway, opaque, unique among its requests in flight.
324
+ *
325
+ * @generated from field: string request_id = 1;
326
+ */
327
+ requestId: string;
328
+
329
+ /**
330
+ * @generated from field: kusinta.iot.accountlink.v1.LinkedService service = 2;
331
+ */
332
+ service: LinkedService;
333
+
334
+ /**
335
+ * @generated from field: string refresh_token = 3;
336
+ */
337
+ refreshToken: string;
338
+ };
339
+
340
+ /**
341
+ * Describes the message kusinta.iot.accountlink.v1.RefreshToken.
342
+ * Use `create(RefreshTokenSchema)` to create a new message.
343
+ */
344
+ export declare const RefreshTokenSchema: GenMessage<RefreshToken>;
345
+
346
+ /**
347
+ * @generated from message kusinta.iot.accountlink.v1.TokenRefreshed
348
+ */
349
+ export declare type TokenRefreshed = Message<"kusinta.iot.accountlink.v1.TokenRefreshed"> & {
350
+ /**
351
+ * As RefreshToken.request_id.
352
+ *
353
+ * @generated from field: string request_id = 1;
354
+ */
355
+ requestId: string;
356
+
357
+ /**
358
+ * OK: grant replaces the gateway's. REJECTED: the service refused the refresh token, the
359
+ * link is gone, and the household links again. UNAVAILABLE: ask again after retry_after.
360
+ *
361
+ * @generated from field: kusinta.iot.accountlink.v1.TokenOutcome outcome = 2;
362
+ */
363
+ outcome: TokenOutcome;
364
+
365
+ /**
366
+ * OK only, and always whole: where the service issued no new refresh token, the api-server
367
+ * fills in the one it was sent.
368
+ *
369
+ * @generated from field: kusinta.iot.accountlink.v1.TokenGrant grant = 3;
370
+ */
371
+ grant?: TokenGrant | undefined;
372
+
373
+ /**
374
+ * See TokenOutcome.
375
+ *
376
+ * @generated from field: google.protobuf.Duration retry_after = 4;
377
+ */
378
+ retryAfter?: Duration | undefined;
379
+ };
380
+
381
+ /**
382
+ * Describes the message kusinta.iot.accountlink.v1.TokenRefreshed.
383
+ * Use `create(TokenRefreshedSchema)` to create a new message.
384
+ */
385
+ export declare const TokenRefreshedSchema: GenMessage<TokenRefreshed>;
386
+
387
+ /**
388
+ * Asks the api-server to revoke a grant, gateway → api-server: when a household unlinks or
389
+ * hands its home over, or a link is replaced. Answered with a TokenRevoked carrying the same
390
+ * request_id.
391
+ *
392
+ * The gateway reads no more through the grant once it asks. It keeps only the refresh token,
393
+ * and only to ask again: after retry_after on UNAVAILABLE, until OK or REJECTED, and for no
394
+ * more than 7 days. That pending revocation is stored encrypted, so it survives a restart,
395
+ * and it outlives a household handover's wipe and a gateway-wide wipe, which delete the
396
+ * grant itself: it is the only means left of ending the link at the service.
397
+ *
398
+ * @generated from message kusinta.iot.accountlink.v1.RevokeToken
399
+ */
400
+ export declare type RevokeToken = Message<"kusinta.iot.accountlink.v1.RevokeToken"> & {
401
+ /**
402
+ * Minted by the gateway, opaque, unique among its requests in flight.
403
+ *
404
+ * @generated from field: string request_id = 1;
405
+ */
406
+ requestId: string;
407
+
408
+ /**
409
+ * @generated from field: kusinta.iot.accountlink.v1.LinkedService service = 2;
410
+ */
411
+ service: LinkedService;
412
+
413
+ /**
414
+ * @generated from field: string refresh_token = 3;
415
+ */
416
+ refreshToken: string;
417
+ };
418
+
419
+ /**
420
+ * Describes the message kusinta.iot.accountlink.v1.RevokeToken.
421
+ * Use `create(RevokeTokenSchema)` to create a new message.
422
+ */
423
+ export declare const RevokeTokenSchema: GenMessage<RevokeToken>;
424
+
425
+ /**
426
+ * @generated from message kusinta.iot.accountlink.v1.TokenRevoked
427
+ */
428
+ export declare type TokenRevoked = Message<"kusinta.iot.accountlink.v1.TokenRevoked"> & {
429
+ /**
430
+ * As RevokeToken.request_id.
431
+ *
432
+ * @generated from field: string request_id = 1;
433
+ */
434
+ requestId: string;
435
+
436
+ /**
437
+ * OK: revoked. REJECTED: the service no longer knew the token, which is as good.
438
+ * UNAVAILABLE: ask again after retry_after.
439
+ *
440
+ * @generated from field: kusinta.iot.accountlink.v1.TokenOutcome outcome = 2;
441
+ */
442
+ outcome: TokenOutcome;
443
+
444
+ /**
445
+ * See TokenOutcome.
446
+ *
447
+ * @generated from field: google.protobuf.Duration retry_after = 3;
448
+ */
449
+ retryAfter?: Duration | undefined;
450
+ };
451
+
452
+ /**
453
+ * Describes the message kusinta.iot.accountlink.v1.TokenRevoked.
454
+ * Use `create(TokenRevokedSchema)` to create a new message.
455
+ */
456
+ export declare const TokenRevokedSchema: GenMessage<TokenRevoked>;
457
+
458
+ /**
459
+ * @generated from enum kusinta.iot.accountlink.v1.AccountLinkStatus
460
+ */
461
+ export enum AccountLinkStatus {
462
+ /**
463
+ * @generated from enum value: ACCOUNT_LINK_STATUS_UNSPECIFIED = 0;
464
+ */
465
+ UNSPECIFIED = 0,
466
+
467
+ /**
468
+ * @generated from enum value: ACCOUNT_LINK_STATUS_LINKED = 1;
469
+ */
470
+ LINKED = 1,
471
+
472
+ /**
473
+ * A refresh was REJECTED, or went unanswered past its retry window: the household links
474
+ * again.
475
+ *
476
+ * @generated from enum value: ACCOUNT_LINK_STATUS_NEEDS_RELINK = 2;
477
+ */
478
+ NEEDS_RELINK = 2,
479
+ }
480
+
481
+ /**
482
+ * Describes the enum kusinta.iot.accountlink.v1.AccountLinkStatus.
483
+ */
484
+ export declare const AccountLinkStatusSchema: GenEnum<AccountLinkStatus>;
485
+
486
+ /**
487
+ * The services a home's account can be linked at. Each value names the fixed string that
488
+ * stands for it in a nonce's "svc" claim, which never changes with the value's name.
489
+ *
490
+ * @generated from enum kusinta.iot.accountlink.v1.LinkedService
491
+ */
492
+ export enum LinkedService {
493
+ /**
494
+ * @generated from enum value: LINKED_SERVICE_UNSPECIFIED = 0;
495
+ */
496
+ UNSPECIFIED = 0,
497
+
498
+ /**
499
+ * NIBE's myUplink. Claim value "myuplink".
500
+ *
501
+ * @generated from enum value: LINKED_SERVICE_MYUPLINK = 1;
502
+ */
503
+ MYUPLINK = 1,
504
+ }
505
+
506
+ /**
507
+ * Describes the enum kusinta.iot.accountlink.v1.LinkedService.
508
+ */
509
+ export declare const LinkedServiceSchema: GenEnum<LinkedService>;
510
+
511
+ /**
512
+ * @generated from enum kusinta.iot.accountlink.v1.AccountLinkOutcome
513
+ */
514
+ export enum AccountLinkOutcome {
515
+ /**
516
+ * Sender did not set an outcome, or sent one this schema does not know: read as REJECTED.
517
+ *
518
+ * @generated from enum value: ACCOUNT_LINK_OUTCOME_UNSPECIFIED = 0;
519
+ */
520
+ UNSPECIFIED = 0,
521
+
522
+ /**
523
+ * Stored. A link the home already had at the same service is replaced. The gateway keeps
524
+ * the replaced grant, unused, and revokes it (RevokeToken) only once 60 seconds have passed
525
+ * since this answer with no AccountLinkCancelled for its request_id; on a cancel within
526
+ * them, it deletes the new grant and restores the replaced one.
527
+ *
528
+ * @generated from enum value: ACCOUNT_LINK_OUTCOME_LINKED = 1;
529
+ */
530
+ LINKED = 1,
531
+
532
+ /**
533
+ * The nonce failed the gateway's checks (AccountLinkNonceClaims). Nothing is stored, and
534
+ * the api-server revokes the grant.
535
+ *
536
+ * @generated from enum value: ACCOUNT_LINK_OUTCOME_REJECTED = 2;
537
+ */
538
+ REJECTED = 2,
539
+ }
540
+
541
+ /**
542
+ * Describes the enum kusinta.iot.accountlink.v1.AccountLinkOutcome.
543
+ */
544
+ export declare const AccountLinkOutcomeSchema: GenEnum<AccountLinkOutcome>;
545
+
546
+ /**
547
+ * On UNAVAILABLE the api-server sets retry_after: the service's own wait where it gave one,
548
+ * spread across the gateways asking. A gateway waits at least retry_after and at least 30
549
+ * seconds, unset reading as 30, and doubles its wait on each further UNAVAILABLE for the
550
+ * same token, up to an hour, with a random margin.
551
+ *
552
+ * @generated from enum kusinta.iot.accountlink.v1.TokenOutcome
553
+ */
554
+ export enum TokenOutcome {
555
+ /**
556
+ * Sender did not set an outcome, or sent one this schema does not know: read as
557
+ * UNAVAILABLE.
558
+ *
559
+ * @generated from enum value: TOKEN_OUTCOME_UNSPECIFIED = 0;
560
+ */
561
+ UNSPECIFIED = 0,
562
+
563
+ /**
564
+ * @generated from enum value: TOKEN_OUTCOME_OK = 1;
565
+ */
566
+ OK = 1,
567
+
568
+ /**
569
+ * @generated from enum value: TOKEN_OUTCOME_REJECTED = 2;
570
+ */
571
+ REJECTED = 2,
572
+
573
+ /**
574
+ * @generated from enum value: TOKEN_OUTCOME_UNAVAILABLE = 3;
575
+ */
576
+ UNAVAILABLE = 3,
577
+ }
578
+
579
+ /**
580
+ * Describes the enum kusinta.iot.accountlink.v1.TokenOutcome.
581
+ */
582
+ export declare const TokenOutcomeSchema: GenEnum<TokenOutcome>;
583
+
@@ -0,0 +1,160 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/accountlink/v1/account_link.proto (package kusinta.iot.accountlink.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import { enumDesc, fileDesc, messageDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
6
+ import { file_google_protobuf_duration, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
+
8
+ /**
9
+ * Describes the file kusinta/iot/accountlink/v1/account_link.proto.
10
+ */
11
+ export const file_kusinta_iot_accountlink_v1_account_link = /*@__PURE__*/
12
+ fileDesc("Ci1rdXNpbnRhL2lvdC9hY2NvdW50bGluay92MS9hY2NvdW50X2xpbmsucHJvdG8SGmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxIroBCgtBY2NvdW50TGluaxI6CgdzZXJ2aWNlGAEgASgOMikua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuTGlua2VkU2VydmljZRI9CgZzdGF0dXMYAiABKA4yLS5rdXNpbnRhLmlvdC5hY2NvdW50bGluay52MS5BY2NvdW50TGlua1N0YXR1cxIwCgxsaW5rZWRfc2luY2UYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIkYKDEFjY291bnRMaW5rcxI2CgVsaW5rcxgBIAMoCzInLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLkFjY291bnRMaW5rIlEKEEFjY291bnRMaW5rTm9uY2USDQoFbm9uY2UYASABKAkSLgoKZXhwaXJlc19hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAitwEKFkFjY291bnRMaW5rTm9uY2VDbGFpbXMSCwoDaXNzGAEgASgJEgsKA2F1ZBgCIAEoCRILCgNzdWIYAyABKAkSJwoDaWF0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBInCgNleHAYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEgsKA2p0aRgGIAEoCRILCgNzdmMYCCABKAlKBAgHEAhSBGhvbWUiYgoLQWNjZXNzR3JhbnQSFAoMYWNjZXNzX3Rva2VuGAEgASgJEi4KCmV4cGlyZXNfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg0KBXNjb3BlGAMgASgJIlwKClRva2VuR3JhbnQSNwoGYWNjZXNzGAEgASgLMicua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuQWNjZXNzR3JhbnQSFQoNcmVmcmVzaF90b2tlbhgCIAEoCSJpCg1BY2NvdW50TGlua2VkEhIKCnJlcXVlc3RfaWQYASABKAkSDQoFbm9uY2UYAiABKAkSNQoFZ3JhbnQYAyABKAsyJi5rdXNpbnRhLmlvdC5hY2NvdW50bGluay52MS5Ub2tlbkdyYW50IioKFEFjY291bnRMaW5rQ2FuY2VsbGVkEhIKCnJlcXVlc3RfaWQYASABKAkiaAoRQWNjb3VudExpbmtSZXN1bHQSEgoKcmVxdWVzdF9pZBgBIAEoCRI/CgdvdXRjb21lGAIgASgOMi4ua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuQWNjb3VudExpbmtPdXRjb21lInUKDFJlZnJlc2hUb2tlbhISCgpyZXF1ZXN0X2lkGAEgASgJEjoKB3NlcnZpY2UYAiABKA4yKS5rdXNpbnRhLmlvdC5hY2NvdW50bGluay52MS5MaW5rZWRTZXJ2aWNlEhUKDXJlZnJlc2hfdG9rZW4YAyABKAkixgEKDlRva2VuUmVmcmVzaGVkEhIKCnJlcXVlc3RfaWQYASABKAkSOQoHb3V0Y29tZRgCIAEoDjIoLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLlRva2VuT3V0Y29tZRI1CgVncmFudBgDIAEoCzImLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLlRva2VuR3JhbnQSLgoLcmV0cnlfYWZ0ZXIYBCABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb24idAoLUmV2b2tlVG9rZW4SEgoKcmVxdWVzdF9pZBgBIAEoCRI6CgdzZXJ2aWNlGAIgASgOMikua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuTGlua2VkU2VydmljZRIVCg1yZWZyZXNoX3Rva2VuGAMgASgJIo0BCgxUb2tlblJldm9rZWQSEgoKcmVxdWVzdF9pZBgBIAEoCRI5CgdvdXRjb21lGAIgASgOMigua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuVG9rZW5PdXRjb21lEi4KC3JldHJ5X2FmdGVyGAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uKn4KEUFjY291bnRMaW5rU3RhdHVzEiMKH0FDQ09VTlRfTElOS19TVEFUVVNfVU5TUEVDSUZJRUQQABIeChpBQ0NPVU5UX0xJTktfU1RBVFVTX0xJTktFRBABEiQKIEFDQ09VTlRfTElOS19TVEFUVVNfTkVFRFNfUkVMSU5LEAIqTAoNTGlua2VkU2VydmljZRIeChpMSU5LRURfU0VSVklDRV9VTlNQRUNJRklFRBAAEhsKF0xJTktFRF9TRVJWSUNFX01ZVVBMSU5LEAEqfgoSQWNjb3VudExpbmtPdXRjb21lEiQKIEFDQ09VTlRfTElOS19PVVRDT01FX1VOU1BFQ0lGSUVEEAASHwobQUNDT1VOVF9MSU5LX09VVENPTUVfTElOS0VEEAESIQodQUNDT1VOVF9MSU5LX09VVENPTUVfUkVKRUNURUQQAip+CgxUb2tlbk91dGNvbWUSHQoZVE9LRU5fT1VUQ09NRV9VTlNQRUNJRklFRBAAEhQKEFRPS0VOX09VVENPTUVfT0sQARIaChZUT0tFTl9PVVRDT01FX1JFSkVDVEVEEAISHQoZVE9LRU5fT1VUQ09NRV9VTkFWQUlMQUJMRRADQgJIAWIGcHJvdG8z", [file_google_protobuf_duration, file_google_protobuf_timestamp]);
13
+
14
+ /**
15
+ * Describes the message kusinta.iot.accountlink.v1.AccountLink.
16
+ * Use `create(AccountLinkSchema)` to create a new message.
17
+ */
18
+ export const AccountLinkSchema = /*@__PURE__*/
19
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 0);
20
+
21
+ /**
22
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinks.
23
+ * Use `create(AccountLinksSchema)` to create a new message.
24
+ */
25
+ export const AccountLinksSchema = /*@__PURE__*/
26
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 1);
27
+
28
+ /**
29
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinkNonce.
30
+ * Use `create(AccountLinkNonceSchema)` to create a new message.
31
+ */
32
+ export const AccountLinkNonceSchema = /*@__PURE__*/
33
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 2);
34
+
35
+ /**
36
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinkNonceClaims.
37
+ * Use `create(AccountLinkNonceClaimsSchema)` to create a new message.
38
+ */
39
+ export const AccountLinkNonceClaimsSchema = /*@__PURE__*/
40
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 3);
41
+
42
+ /**
43
+ * Describes the message kusinta.iot.accountlink.v1.AccessGrant.
44
+ * Use `create(AccessGrantSchema)` to create a new message.
45
+ */
46
+ export const AccessGrantSchema = /*@__PURE__*/
47
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 4);
48
+
49
+ /**
50
+ * Describes the message kusinta.iot.accountlink.v1.TokenGrant.
51
+ * Use `create(TokenGrantSchema)` to create a new message.
52
+ */
53
+ export const TokenGrantSchema = /*@__PURE__*/
54
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 5);
55
+
56
+ /**
57
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinked.
58
+ * Use `create(AccountLinkedSchema)` to create a new message.
59
+ */
60
+ export const AccountLinkedSchema = /*@__PURE__*/
61
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 6);
62
+
63
+ /**
64
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinkCancelled.
65
+ * Use `create(AccountLinkCancelledSchema)` to create a new message.
66
+ */
67
+ export const AccountLinkCancelledSchema = /*@__PURE__*/
68
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 7);
69
+
70
+ /**
71
+ * Describes the message kusinta.iot.accountlink.v1.AccountLinkResult.
72
+ * Use `create(AccountLinkResultSchema)` to create a new message.
73
+ */
74
+ export const AccountLinkResultSchema = /*@__PURE__*/
75
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 8);
76
+
77
+ /**
78
+ * Describes the message kusinta.iot.accountlink.v1.RefreshToken.
79
+ * Use `create(RefreshTokenSchema)` to create a new message.
80
+ */
81
+ export const RefreshTokenSchema = /*@__PURE__*/
82
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 9);
83
+
84
+ /**
85
+ * Describes the message kusinta.iot.accountlink.v1.TokenRefreshed.
86
+ * Use `create(TokenRefreshedSchema)` to create a new message.
87
+ */
88
+ export const TokenRefreshedSchema = /*@__PURE__*/
89
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 10);
90
+
91
+ /**
92
+ * Describes the message kusinta.iot.accountlink.v1.RevokeToken.
93
+ * Use `create(RevokeTokenSchema)` to create a new message.
94
+ */
95
+ export const RevokeTokenSchema = /*@__PURE__*/
96
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 11);
97
+
98
+ /**
99
+ * Describes the message kusinta.iot.accountlink.v1.TokenRevoked.
100
+ * Use `create(TokenRevokedSchema)` to create a new message.
101
+ */
102
+ export const TokenRevokedSchema = /*@__PURE__*/
103
+ messageDesc(file_kusinta_iot_accountlink_v1_account_link, 12);
104
+
105
+ /**
106
+ * Describes the enum kusinta.iot.accountlink.v1.AccountLinkStatus.
107
+ */
108
+ export const AccountLinkStatusSchema = /*@__PURE__*/
109
+ enumDesc(file_kusinta_iot_accountlink_v1_account_link, 0);
110
+
111
+ /**
112
+ * @generated from enum kusinta.iot.accountlink.v1.AccountLinkStatus
113
+ */
114
+ export const AccountLinkStatus = /*@__PURE__*/
115
+ tsEnum(AccountLinkStatusSchema);
116
+
117
+ /**
118
+ * Describes the enum kusinta.iot.accountlink.v1.LinkedService.
119
+ */
120
+ export const LinkedServiceSchema = /*@__PURE__*/
121
+ enumDesc(file_kusinta_iot_accountlink_v1_account_link, 1);
122
+
123
+ /**
124
+ * The services a home's account can be linked at. Each value names the fixed string that
125
+ * stands for it in a nonce's "svc" claim, which never changes with the value's name.
126
+ *
127
+ * @generated from enum kusinta.iot.accountlink.v1.LinkedService
128
+ */
129
+ export const LinkedService = /*@__PURE__*/
130
+ tsEnum(LinkedServiceSchema);
131
+
132
+ /**
133
+ * Describes the enum kusinta.iot.accountlink.v1.AccountLinkOutcome.
134
+ */
135
+ export const AccountLinkOutcomeSchema = /*@__PURE__*/
136
+ enumDesc(file_kusinta_iot_accountlink_v1_account_link, 2);
137
+
138
+ /**
139
+ * @generated from enum kusinta.iot.accountlink.v1.AccountLinkOutcome
140
+ */
141
+ export const AccountLinkOutcome = /*@__PURE__*/
142
+ tsEnum(AccountLinkOutcomeSchema);
143
+
144
+ /**
145
+ * Describes the enum kusinta.iot.accountlink.v1.TokenOutcome.
146
+ */
147
+ export const TokenOutcomeSchema = /*@__PURE__*/
148
+ enumDesc(file_kusinta_iot_accountlink_v1_account_link, 3);
149
+
150
+ /**
151
+ * On UNAVAILABLE the api-server sets retry_after: the service's own wait where it gave one,
152
+ * spread across the gateways asking. A gateway waits at least retry_after and at least 30
153
+ * seconds, unset reading as 30, and doubles its wait on each further UNAVAILABLE for the
154
+ * same token, up to an hour, with a random margin.
155
+ *
156
+ * @generated from enum kusinta.iot.accountlink.v1.TokenOutcome
157
+ */
158
+ export const TokenOutcome = /*@__PURE__*/
159
+ tsEnum(TokenOutcomeSchema);
160
+
@@ -5,6 +5,7 @@
5
5
  import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { GatewayId, UserId } from "../../identity/v1/identity_pb.js";
8
+ import type { AccountLinkCancelled, AccountLinked, AccountLinkResult, RefreshToken, RevokeToken, TokenRefreshed, TokenRevoked } from "../../accountlink/v1/account_link_pb.js";
8
9
  import type { ConnectorKind } from "../../common/v1/types_pb.js";
9
10
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
10
11
 
@@ -177,7 +178,7 @@ export declare const UserHandshakeAckSchema: GenMessage<UserHandshakeAck>;
177
178
  export declare type GatewayConnectRequest = Message<"kusinta.iot.signaling.v1.GatewayConnectRequest"> & {
178
179
  /**
179
180
  * On redeem_invite_result, the user who redeemed (RedeemInvite). Unset on an
180
- * acknowledgement, which is to no user.
181
+ * acknowledgement and on the accountlink.v1 arms, which are to no user.
181
182
  *
182
183
  * @generated from field: kusinta.iot.identity.v1.UserId target_user_id = 1;
183
184
  */
@@ -186,7 +187,8 @@ export declare type GatewayConnectRequest = Message<"kusinta.iot.signaling.v1.Ga
186
187
  /**
187
188
  * The session of target_user_id this message answers. See the contract above.
188
189
  * Ignored on a heartbeat, which carries no routing target at all, and on
189
- * redeem_invite_result and the acknowledgements, which belong to no session.
190
+ * redeem_invite_result, the acknowledgements and the accountlink.v1 arms, which
191
+ * belong to no session.
190
192
  *
191
193
  * @generated from field: string session_id = 5;
192
194
  */
@@ -237,6 +239,24 @@ export declare type GatewayConnectRequest = Message<"kusinta.iot.signaling.v1.Ga
237
239
  */
238
240
  value: GatewayWiped;
239
241
  case: "wiped";
242
+ } | {
243
+ /**
244
+ * @generated from field: kusinta.iot.accountlink.v1.AccountLinkResult account_link_result = 10;
245
+ */
246
+ value: AccountLinkResult;
247
+ case: "accountLinkResult";
248
+ } | {
249
+ /**
250
+ * @generated from field: kusinta.iot.accountlink.v1.RefreshToken refresh_token = 11;
251
+ */
252
+ value: RefreshToken;
253
+ case: "refreshToken";
254
+ } | {
255
+ /**
256
+ * @generated from field: kusinta.iot.accountlink.v1.RevokeToken revoke_token = 12;
257
+ */
258
+ value: RevokeToken;
259
+ case: "revokeToken";
240
260
  } | { case: undefined; value?: undefined };
241
261
  };
242
262
 
@@ -256,7 +276,7 @@ export declare type GatewayConnectResponse = Message<"kusinta.iot.signaling.v1.G
256
276
  * On redeem_invite, the user redeeming: the sub of the token the api-server
257
277
  * verified, and never a value the user supplied. Unset on what concerns the
258
278
  * gateway itself (stream_opened, vouched_administrators, transfer_outcome,
259
- * gateway_deleted), which is from no user.
279
+ * gateway_deleted) and on the accountlink.v1 arms, which are from no user.
260
280
  *
261
281
  * @generated from field: kusinta.iot.identity.v1.UserId from_user_id = 1;
262
282
  */
@@ -265,8 +285,8 @@ export declare type GatewayConnectResponse = Message<"kusinta.iot.signaling.v1.G
265
285
  /**
266
286
  * The session of from_user_id this message originates from — the value the
267
287
  * gateway must echo on the GatewayConnectRequest that answers it. See the
268
- * contract above. Unset on redeem_invite and on what concerns the gateway
269
- * itself, which belong to no session.
288
+ * contract above. Unset on redeem_invite, on what concerns the gateway itself
289
+ * and on the accountlink.v1 arms, which belong to no session.
270
290
  *
271
291
  * @generated from field: string session_id = 4;
272
292
  */
@@ -317,6 +337,30 @@ export declare type GatewayConnectResponse = Message<"kusinta.iot.signaling.v1.G
317
337
  */
318
338
  value: GatewayDeleted;
319
339
  case: "gatewayDeleted";
340
+ } | {
341
+ /**
342
+ * @generated from field: kusinta.iot.accountlink.v1.AccountLinked account_linked = 10;
343
+ */
344
+ value: AccountLinked;
345
+ case: "accountLinked";
346
+ } | {
347
+ /**
348
+ * @generated from field: kusinta.iot.accountlink.v1.TokenRefreshed token_refreshed = 11;
349
+ */
350
+ value: TokenRefreshed;
351
+ case: "tokenRefreshed";
352
+ } | {
353
+ /**
354
+ * @generated from field: kusinta.iot.accountlink.v1.TokenRevoked token_revoked = 12;
355
+ */
356
+ value: TokenRevoked;
357
+ case: "tokenRevoked";
358
+ } | {
359
+ /**
360
+ * @generated from field: kusinta.iot.accountlink.v1.AccountLinkCancelled account_link_cancelled = 13;
361
+ */
362
+ value: AccountLinkCancelled;
363
+ case: "accountLinkCancelled";
320
364
  } | { case: undefined; value?: undefined };
321
365
  };
322
366
 
@@ -328,8 +372,7 @@ export declare const GatewayConnectResponseSchema: GenMessage<GatewayConnectResp
328
372
 
329
373
  /**
330
374
  * A person redeeming an invite (webrtc.v1 CreateInvite), api-server → gateway.
331
- * The one request on this stream that the gateway answers, with a
332
- * RedeemInviteResult carrying the same request_id.
375
+ * Answered with a RedeemInviteResult carrying the same request_id.
333
376
  *
334
377
  * The api-server sends it only to the gateway whose invite routes hold the
335
378
  * secret's hash (reporting.v1.ReportInviteRoutesRequest), and only for a user
@@ -4,6 +4,7 @@
4
4
 
5
5
  import { enumDesc, fileDesc, messageDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
+ import { file_kusinta_iot_accountlink_v1_account_link } from "../../accountlink/v1/account_link_pb.js";
7
8
  import { file_kusinta_iot_common_v1_types } from "../../common/v1/types_pb.js";
8
9
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
9
10
 
@@ -11,7 +12,7 @@ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identit
11
12
  * Describes the file kusinta/iot/signaling/v1/signaling.proto.
12
13
  */
13
14
  export const file_kusinta_iot_signaling_v1_signaling = /*@__PURE__*/
14
- fileDesc("CihrdXNpbnRhL2lvdC9zaWduYWxpbmcvdjEvc2lnbmFsaW5nLnByb3RvEhhrdXNpbnRhLmlvdC5zaWduYWxpbmcudjEiFwoIU2RwT2ZmZXISCwoDc2RwGAEgASgJIhgKCVNkcEFuc3dlchILCgNzZHAYASABKAkiSwoMSWNlQ2FuZGlkYXRlEhEKCWNhbmRpZGF0ZRgBIAEoCRIPCgdzZHBfbWlkGAIgASgJEhcKD3NkcF9tbGluZV9pbmRleBgDIAEoBSILCglIZWFydEJlYXQiTgoNVXNlckhhbmRzaGFrZRI9ChF0YXJnZXRfZ2F0ZXdheV9pZBgBIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZCJTChBVc2VySGFuZHNoYWtlQWNrEhAKCGFjY2VwdGVkGAEgASgIEg4KBnJlYXNvbhgCIAEoCRIdChVoZWFydGJlYXRfaW50ZXJ2YWxfbXMYAyABKA0i4AQKFUdhdGV3YXlDb25uZWN0UmVxdWVzdBI3Cg50YXJnZXRfdXNlcl9pZBgBIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBISCgpzZXNzaW9uX2lkGAUgASgJEjUKBmFuc3dlchgCIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBBbnN3ZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAEjgKCWhlYXJ0YmVhdBgEIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5IZWFydEJlYXRIABJMChRyZWRlZW1faW52aXRlX3Jlc3VsdBgGIAEoCzIsLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5SZWRlZW1JbnZpdGVSZXN1bHRIABJgCh52b3VjaGVkX2FkbWluaXN0cmF0b3JzX2FwcGxpZWQYByABKAsyNi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVm91Y2hlZEFkbWluaXN0cmF0b3JzQXBwbGllZEgAElQKGHRyYW5zZmVyX291dGNvbWVfYXBwbGllZBgIIAEoCzIwLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5UcmFuc2Zlck91dGNvbWVBcHBsaWVkSAASNwoFd2lwZWQYCSABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuR2F0ZXdheVdpcGVkSABCCQoHcGF5bG9hZCLMBAoWR2F0ZXdheUNvbm5lY3RSZXNwb25zZRI1Cgxmcm9tX3VzZXJfaWQYASABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSEgoKc2Vzc2lvbl9pZBgEIAEoCRIzCgVvZmZlchgCIAEoCzIiLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBPZmZlckgAEj8KDWljZV9jYW5kaWRhdGUYAyABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuSWNlQ2FuZGlkYXRlSAASPwoNcmVkZWVtX2ludml0ZRgFIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5SZWRlZW1JbnZpdGVIABJRChZ2b3VjaGVkX2FkbWluaXN0cmF0b3JzGAYgASgLMi8ua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlZvdWNoZWRBZG1pbmlzdHJhdG9yc0gAEkUKEHRyYW5zZmVyX291dGNvbWUYByABKAsyKS5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVHJhbnNmZXJPdXRjb21lSAASRgoNc3RyZWFtX29wZW5lZBgIIAEoCzItLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5HYXRld2F5U3RyZWFtT3BlbmVkSAASQwoPZ2F0ZXdheV9kZWxldGVkGAkgASgLMigua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkdhdGV3YXlEZWxldGVkSABCCQoHcGF5bG9hZCJ7CgxSZWRlZW1JbnZpdGUSEgoKcmVxdWVzdF9pZBgBIAEoCRIPCgV0b2tlbhgCIAEoCUgAEg4KBGNvZGUYAyABKAlIABIUCgxkaXNwbGF5X25hbWUYBCABKAkSFgoOdmVyaWZpZWRfZW1haWwYBSABKAlCCAoGc2VjcmV0ImIKElJlZGVlbUludml0ZVJlc3VsdBISCgpyZXF1ZXN0X2lkGAEgASgJEjgKB291dGNvbWUYAiABKA4yJy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuUmVkZWVtT3V0Y29tZSIuChNHYXRld2F5U3RyZWFtT3BlbmVkEhcKD293bmVyc2hpcF9lcG9jaBgBIAEoCSJdCg5HYXRld2F5RGVsZXRlZBIXCg9vd25lcnNoaXBfZXBvY2gYASABKAkSMgoFc2NvcGUYAiABKA4yIy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuV2lwZVNjb3BlIp4BCgxHYXRld2F5V2lwZWQSFwoPb3duZXJzaGlwX2Vwb2NoGAEgASgJEjIKBXNjb3BlGAIgASgOMiMua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLldpcGVTY29wZRJBCgtsZWZ0X2JlaGluZBgDIAMoCzIsLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5QYWlyaW5nc0xlZnRCZWhpbmQiXgoSUGFpcmluZ3NMZWZ0QmVoaW5kEjIKBGtpbmQYASABKA4yJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQ29ubmVjdG9yS2luZBIUCgxkaXNwbGF5X25hbWUYAiABKAkiqwEKFVZvdWNoZWRBZG1pbmlzdHJhdG9ycxIPCgd2ZXJzaW9uGAEgASgEEjcKDmFkbWluaXN0cmF0b3JzGAIgAygLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEhkKEW9yZ2FuaXNhdGlvbl9uYW1lGAMgASgJEi0KCWlzc3VlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLwocVm91Y2hlZEFkbWluaXN0cmF0b3JzQXBwbGllZBIPCgd2ZXJzaW9uGAEgASgEIqsBCg9UcmFuc2Zlck91dGNvbWUSEwoLdHJhbnNmZXJfaWQYASABKAkSRwoOYWRtaW5pc3RyYXRvcnMYAiABKAsyLy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVm91Y2hlZEFkbWluaXN0cmF0b3JzEjoKCG91dGdvaW5nGAMgAygLMigua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLk91dGdvaW5nQ2hvaWNlIrMBCg5PdXRnb2luZ0Nob2ljZRIwCgd1c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEj0KBmNob2ljZRgCIAEoDjItLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5PdXRnb2luZ1N0YWZmQ2hvaWNlEjAKDGFjY2Vzc191bnRpbBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLQoWVHJhbnNmZXJPdXRjb21lQXBwbGllZBITCgt0cmFuc2Zlcl9pZBgBIAEoCSLnAQoSVXNlckNvbm5lY3RSZXF1ZXN0EhIKCnNlc3Npb25faWQYBCABKAkSPAoJaGFuZHNoYWtlGAEgASgLMicua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJIYW5kc2hha2VIABIzCgVvZmZlchgCIAEoCzIiLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBPZmZlckgAEj8KDWljZV9jYW5kaWRhdGUYAyABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuSWNlQ2FuZGlkYXRlSABCCQoHcGF5bG9hZCKrAgoTVXNlckNvbm5lY3RSZXNwb25zZRISCgpzZXNzaW9uX2lkGAQgASgJEkMKDWhhbmRzaGFrZV9hY2sYASABKAsyKi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVXNlckhhbmRzaGFrZUFja0gAEjUKBmFuc3dlchgCIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBBbnN3ZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAEjgKCWhlYXJ0YmVhdBgFIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5IZWFydEJlYXRIAEIJCgdwYXlsb2FkIm8KEVVzZXJMaXN0ZW5SZXF1ZXN0EjoKCWhhbmRzaGFrZRgBIAEoCzInLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5Vc2VySGFuZHNoYWtlEhIKCnNlc3Npb25faWQYBCABKAlKBAgCEANKBAgDEAQiVQoSVXNlckxpc3RlblJlc3BvbnNlEj8KCHJlc3BvbnNlGAEgASgLMi0ua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJDb25uZWN0UmVzcG9uc2UitwEKD1VzZXJTZW5kUmVxdWVzdBISCgpzZXNzaW9uX2lkGAQgASgJEjMKBW9mZmVyGAIgASgLMiIua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlNkcE9mZmVySAASPwoNaWNlX2NhbmRpZGF0ZRgDIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5JY2VDYW5kaWRhdGVIAEIJCgdwYXlsb2FkSgQIARACUgloYW5kc2hha2UiEgoQVXNlclNlbmRSZXNwb25zZSqtAQoNUmVkZWVtT3V0Y29tZRIeChpSRURFRU1fT1VUQ09NRV9VTlNQRUNJRklFRBAAEhkKFVJFREVFTV9PVVRDT01FX0pPSU5FRBABEiMKH1JFREVFTV9PVVRDT01FX1BFTkRJTkdfQVBQUk9WQUwQAhIaChZSRURFRU1fT1VUQ09NRV9JTlZBTElEEAMSIAocUkVERUVNX09VVENPTUVfV1JPTkdfQUNDT1VOVBAEKmgKCVdpcGVTY29wZRIaChZXSVBFX1NDT1BFX1VOU1BFQ0lGSUVEEAASIQodV0lQRV9TQ09QRV9QRU9QTEVfQU5EX0hJU1RPUlkQARIcChhXSVBFX1NDT1BFX0ZBQ1RPUllfUkVTRVQQAiqLAQoTT3V0Z29pbmdTdGFmZkNob2ljZRIlCiFPVVRHT0lOR19TVEFGRl9DSE9JQ0VfVU5TUEVDSUZJRUQQABIfChtPVVRHT0lOR19TVEFGRl9DSE9JQ0VfTEVBVkUQARIsCihPVVRHT0lOR19TVEFGRl9DSE9JQ0VfU1RBWV9BU19URUNITklDSUFOEAJCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity]);
15
+ fileDesc("CihrdXNpbnRhL2lvdC9zaWduYWxpbmcvdjEvc2lnbmFsaW5nLnByb3RvEhhrdXNpbnRhLmlvdC5zaWduYWxpbmcudjEiFwoIU2RwT2ZmZXISCwoDc2RwGAEgASgJIhgKCVNkcEFuc3dlchILCgNzZHAYASABKAkiSwoMSWNlQ2FuZGlkYXRlEhEKCWNhbmRpZGF0ZRgBIAEoCRIPCgdzZHBfbWlkGAIgASgJEhcKD3NkcF9tbGluZV9pbmRleBgDIAEoBSILCglIZWFydEJlYXQiTgoNVXNlckhhbmRzaGFrZRI9ChF0YXJnZXRfZ2F0ZXdheV9pZBgBIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZCJTChBVc2VySGFuZHNoYWtlQWNrEhAKCGFjY2VwdGVkGAEgASgIEg4KBnJlYXNvbhgCIAEoCRIdChVoZWFydGJlYXRfaW50ZXJ2YWxfbXMYAyABKA0isgYKFUdhdGV3YXlDb25uZWN0UmVxdWVzdBI3Cg50YXJnZXRfdXNlcl9pZBgBIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBISCgpzZXNzaW9uX2lkGAUgASgJEjUKBmFuc3dlchgCIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBBbnN3ZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAEjgKCWhlYXJ0YmVhdBgEIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5IZWFydEJlYXRIABJMChRyZWRlZW1faW52aXRlX3Jlc3VsdBgGIAEoCzIsLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5SZWRlZW1JbnZpdGVSZXN1bHRIABJgCh52b3VjaGVkX2FkbWluaXN0cmF0b3JzX2FwcGxpZWQYByABKAsyNi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVm91Y2hlZEFkbWluaXN0cmF0b3JzQXBwbGllZEgAElQKGHRyYW5zZmVyX291dGNvbWVfYXBwbGllZBgIIAEoCzIwLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5UcmFuc2Zlck91dGNvbWVBcHBsaWVkSAASNwoFd2lwZWQYCSABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuR2F0ZXdheVdpcGVkSAASTAoTYWNjb3VudF9saW5rX3Jlc3VsdBgKIAEoCzItLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLkFjY291bnRMaW5rUmVzdWx0SAASQQoNcmVmcmVzaF90b2tlbhgLIAEoCzIoLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLlJlZnJlc2hUb2tlbkgAEj8KDHJldm9rZV90b2tlbhgMIAEoCzInLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLlJldm9rZVRva2VuSABCCQoHcGF5bG9hZCLvBgoWR2F0ZXdheUNvbm5lY3RSZXNwb25zZRI1Cgxmcm9tX3VzZXJfaWQYASABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSEgoKc2Vzc2lvbl9pZBgEIAEoCRIzCgVvZmZlchgCIAEoCzIiLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBPZmZlckgAEj8KDWljZV9jYW5kaWRhdGUYAyABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuSWNlQ2FuZGlkYXRlSAASPwoNcmVkZWVtX2ludml0ZRgFIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5SZWRlZW1JbnZpdGVIABJRChZ2b3VjaGVkX2FkbWluaXN0cmF0b3JzGAYgASgLMi8ua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlZvdWNoZWRBZG1pbmlzdHJhdG9yc0gAEkUKEHRyYW5zZmVyX291dGNvbWUYByABKAsyKS5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVHJhbnNmZXJPdXRjb21lSAASRgoNc3RyZWFtX29wZW5lZBgIIAEoCzItLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5HYXRld2F5U3RyZWFtT3BlbmVkSAASQwoPZ2F0ZXdheV9kZWxldGVkGAkgASgLMigua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkdhdGV3YXlEZWxldGVkSAASQwoOYWNjb3VudF9saW5rZWQYCiABKAsyKS5rdXNpbnRhLmlvdC5hY2NvdW50bGluay52MS5BY2NvdW50TGlua2VkSAASRQoPdG9rZW5fcmVmcmVzaGVkGAsgASgLMioua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuVG9rZW5SZWZyZXNoZWRIABJBCg10b2tlbl9yZXZva2VkGAwgASgLMigua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuVG9rZW5SZXZva2VkSAASUgoWYWNjb3VudF9saW5rX2NhbmNlbGxlZBgNIAEoCzIwLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLkFjY291bnRMaW5rQ2FuY2VsbGVkSABCCQoHcGF5bG9hZCJ7CgxSZWRlZW1JbnZpdGUSEgoKcmVxdWVzdF9pZBgBIAEoCRIPCgV0b2tlbhgCIAEoCUgAEg4KBGNvZGUYAyABKAlIABIUCgxkaXNwbGF5X25hbWUYBCABKAkSFgoOdmVyaWZpZWRfZW1haWwYBSABKAlCCAoGc2VjcmV0ImIKElJlZGVlbUludml0ZVJlc3VsdBISCgpyZXF1ZXN0X2lkGAEgASgJEjgKB291dGNvbWUYAiABKA4yJy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuUmVkZWVtT3V0Y29tZSIuChNHYXRld2F5U3RyZWFtT3BlbmVkEhcKD293bmVyc2hpcF9lcG9jaBgBIAEoCSJdCg5HYXRld2F5RGVsZXRlZBIXCg9vd25lcnNoaXBfZXBvY2gYASABKAkSMgoFc2NvcGUYAiABKA4yIy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuV2lwZVNjb3BlIp4BCgxHYXRld2F5V2lwZWQSFwoPb3duZXJzaGlwX2Vwb2NoGAEgASgJEjIKBXNjb3BlGAIgASgOMiMua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLldpcGVTY29wZRJBCgtsZWZ0X2JlaGluZBgDIAMoCzIsLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5QYWlyaW5nc0xlZnRCZWhpbmQiXgoSUGFpcmluZ3NMZWZ0QmVoaW5kEjIKBGtpbmQYASABKA4yJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQ29ubmVjdG9yS2luZBIUCgxkaXNwbGF5X25hbWUYAiABKAkiqwEKFVZvdWNoZWRBZG1pbmlzdHJhdG9ycxIPCgd2ZXJzaW9uGAEgASgEEjcKDmFkbWluaXN0cmF0b3JzGAIgAygLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEhkKEW9yZ2FuaXNhdGlvbl9uYW1lGAMgASgJEi0KCWlzc3VlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLwocVm91Y2hlZEFkbWluaXN0cmF0b3JzQXBwbGllZBIPCgd2ZXJzaW9uGAEgASgEIqsBCg9UcmFuc2Zlck91dGNvbWUSEwoLdHJhbnNmZXJfaWQYASABKAkSRwoOYWRtaW5pc3RyYXRvcnMYAiABKAsyLy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVm91Y2hlZEFkbWluaXN0cmF0b3JzEjoKCG91dGdvaW5nGAMgAygLMigua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLk91dGdvaW5nQ2hvaWNlIrMBCg5PdXRnb2luZ0Nob2ljZRIwCgd1c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEj0KBmNob2ljZRgCIAEoDjItLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5PdXRnb2luZ1N0YWZmQ2hvaWNlEjAKDGFjY2Vzc191bnRpbBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLQoWVHJhbnNmZXJPdXRjb21lQXBwbGllZBITCgt0cmFuc2Zlcl9pZBgBIAEoCSLnAQoSVXNlckNvbm5lY3RSZXF1ZXN0EhIKCnNlc3Npb25faWQYBCABKAkSPAoJaGFuZHNoYWtlGAEgASgLMicua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJIYW5kc2hha2VIABIzCgVvZmZlchgCIAEoCzIiLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBPZmZlckgAEj8KDWljZV9jYW5kaWRhdGUYAyABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuSWNlQ2FuZGlkYXRlSABCCQoHcGF5bG9hZCKrAgoTVXNlckNvbm5lY3RSZXNwb25zZRISCgpzZXNzaW9uX2lkGAQgASgJEkMKDWhhbmRzaGFrZV9hY2sYASABKAsyKi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVXNlckhhbmRzaGFrZUFja0gAEjUKBmFuc3dlchgCIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBBbnN3ZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAEjgKCWhlYXJ0YmVhdBgFIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5IZWFydEJlYXRIAEIJCgdwYXlsb2FkIm8KEVVzZXJMaXN0ZW5SZXF1ZXN0EjoKCWhhbmRzaGFrZRgBIAEoCzInLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5Vc2VySGFuZHNoYWtlEhIKCnNlc3Npb25faWQYBCABKAlKBAgCEANKBAgDEAQiVQoSVXNlckxpc3RlblJlc3BvbnNlEj8KCHJlc3BvbnNlGAEgASgLMi0ua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJDb25uZWN0UmVzcG9uc2UitwEKD1VzZXJTZW5kUmVxdWVzdBISCgpzZXNzaW9uX2lkGAQgASgJEjMKBW9mZmVyGAIgASgLMiIua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlNkcE9mZmVySAASPwoNaWNlX2NhbmRpZGF0ZRgDIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5JY2VDYW5kaWRhdGVIAEIJCgdwYXlsb2FkSgQIARACUgloYW5kc2hha2UiEgoQVXNlclNlbmRSZXNwb25zZSqtAQoNUmVkZWVtT3V0Y29tZRIeChpSRURFRU1fT1VUQ09NRV9VTlNQRUNJRklFRBAAEhkKFVJFREVFTV9PVVRDT01FX0pPSU5FRBABEiMKH1JFREVFTV9PVVRDT01FX1BFTkRJTkdfQVBQUk9WQUwQAhIaChZSRURFRU1fT1VUQ09NRV9JTlZBTElEEAMSIAocUkVERUVNX09VVENPTUVfV1JPTkdfQUNDT1VOVBAEKmgKCVdpcGVTY29wZRIaChZXSVBFX1NDT1BFX1VOU1BFQ0lGSUVEEAASIQodV0lQRV9TQ09QRV9QRU9QTEVfQU5EX0hJU1RPUlkQARIcChhXSVBFX1NDT1BFX0ZBQ1RPUllfUkVTRVQQAiqLAQoTT3V0Z29pbmdTdGFmZkNob2ljZRIlCiFPVVRHT0lOR19TVEFGRl9DSE9JQ0VfVU5TUEVDSUZJRUQQABIfChtPVVRHT0lOR19TVEFGRl9DSE9JQ0VfTEVBVkUQARIsCihPVVRHT0lOR19TVEFGRl9DSE9JQ0VfU1RBWV9BU19URUNITklDSUFOEAJCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_accountlink_v1_account_link, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity]);
15
16
 
16
17
  /**
17
18
  * Describes the message kusinta.iot.signaling.v1.SdpOffer.
@@ -13,6 +13,7 @@ import type { ApartmentClimateSummary, ClimateMode, RoomClimate, RoomClimateList
13
13
  import type { IssuedInvite, SpaceInvites } from "./invite_pb.js";
14
14
  import type { GatewayMembers, PromotionRequests } from "./members_pb.js";
15
15
  import type { HeatingLayout, HeatingRecord } from "../../heating/v1/heating_pb.js";
16
+ import type { AccountLinkNonce, AccountLinks } from "../../accountlink/v1/account_link_pb.js";
16
17
  import type { PairingErrorDetail, PairingWindow } from "../../common/v1/pairing_pb.js";
17
18
  import type { BackendHealth, ConnectorKind, DeviceOwnershipType } from "../../common/v1/types_pb.js";
18
19
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
@@ -412,6 +413,22 @@ export declare type ManagementResult = Message<"kusinta.iot.webrtc.v1.Management
412
413
  */
413
414
  value: HeatingRecord;
414
415
  case: "heatingRecord";
416
+ } | {
417
+ /**
418
+ * request_account_link_nonce
419
+ *
420
+ * @generated from field: kusinta.iot.accountlink.v1.AccountLinkNonce account_link_nonce = 17;
421
+ */
422
+ value: AccountLinkNonce;
423
+ case: "accountLinkNonce";
424
+ } | {
425
+ /**
426
+ * list_account_links
427
+ *
428
+ * @generated from field: kusinta.iot.accountlink.v1.AccountLinks account_links = 18;
429
+ */
430
+ value: AccountLinks;
431
+ case: "accountLinks";
415
432
  } | { case: undefined; value?: undefined };
416
433
  };
417
434
 
@@ -5,6 +5,7 @@
5
5
  import { enumDesc, fileDesc, messageDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
7
  import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
8
+ import { file_kusinta_iot_accountlink_v1_account_link } from "../../accountlink/v1/account_link_pb.js";
8
9
  import { file_kusinta_iot_climate_v1_climate } from "../../climate/v1/climate_pb.js";
9
10
  import { file_kusinta_iot_common_v1_pairing } from "../../common/v1/pairing_pb.js";
10
11
  import { file_kusinta_iot_common_v1_types } from "../../common/v1/types_pb.js";
@@ -24,7 +25,7 @@ import { file_kusinta_iot_webrtc_v1_permission_push } from "./permission_push_pb
24
25
  * Describes the file kusinta/iot/webrtc/v1/envelope.proto.
25
26
  */
26
27
  export const file_kusinta_iot_webrtc_v1_envelope = /*@__PURE__*/
27
- fileDesc("CiRrdXNpbnRhL2lvdC93ZWJydGMvdjEvZW52ZWxvcGUucHJvdG8SFWt1c2ludGEuaW90LndlYnJ0Yy52MSIGCgRQaW5nIgYKBFBvbmciIwoRSGFuZHNoYWtlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlwKDEFwcEhhbmRzaGFrZRILCgNqd3QYASABKAkSPwoUc3Vic2NyaWJlX2RldmljZV9pZHMYAiADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJJChBTdWJzY3JpYmVEZXZpY2VzEjUKCmRldmljZV9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJLChJVbnN1YnNjcmliZURldmljZXMSNQoKZGV2aWNlX2lkcxgBIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIpMBChNSZWZ1c2VkU3Vic2NyaXB0aW9uEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjUKBGNvZGUYAiABKA4yJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yQ29kZRIPCgdtZXNzYWdlGAMgASgJIpoBCg9TdWJzY3JpcHRpb25BY2sSEwoLaW5fcmVwbHlfdG8YASABKAkSNQoKc3Vic2NyaWJlZBgCIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjsKB3JlZnVzZWQYAyADKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVmdXNlZFN1YnNjcmlwdGlvbiLRAQoTUHJvcGVydHlSZWFkUmVxdWVzdBI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCgZ0YXJnZXQYByABKAsyIy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuQXR0cmlidXRlUmVmSgQIAhAHUg5hdHRyaWJ1dGVfbmFtZVIOY2x1c3Rlcl9pZF9oZXhSCmNsdXN0ZXJfaWRSC2VuZHBvaW50X2lkUhB2ZW5kb3JfZXh0ZW5zaW9uIswBCgxHYXRld2F5RXJyb3ISNQoEY29kZRgBIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5RXJyb3JDb2RlEg8KB21lc3NhZ2UYAiABKAkSQwoIbWV0YWRhdGEYAyADKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIt0HChBNYW5hZ2VtZW50UmVzdWx0EhMKC2luX3JlcGx5X3RvGAEgASgJEjQKBWVycm9yGAIgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkdhdGV3YXlFcnJvckgAEiwKBXNwYWNlGAMgASgLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2VIABI2CgpzcGFjZV90cmVlGAQgASgLMiAua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlVHJlZUgAEjMKA2FjaxgFIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50QWNrSAASNAoFbGlua3MYBiABKAsyIy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmtMaXN0SAASQAoNcm9vbV9jbGltYXRlcxgHIAEoCzInLmt1c2ludGEuaW90LmNsaW1hdGUudjEuUm9vbUNsaW1hdGVMaXN0SAASOwoMcm9vbV9oaXN0b3J5GAggASgLMiMua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tSGlzdG9yeUgAEkYKEnByaXZhY3lfZGlzY2xvc3VyZRgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcml2YWN5RGlzY2xvc3VyZUgAElQKGWFwYXJ0bWVudF9jbGltYXRlX3N1bW1hcnkYCiABKAsyLy5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5SAASPAoNaXNzdWVkX2ludml0ZRgLIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Jc3N1ZWRJbnZpdGVIABI8Cg1zcGFjZV9pbnZpdGVzGAwgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlSW52aXRlc0gAEkAKD2dhdGV3YXlfbWVtYmVycxgNIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5TWVtYmVyc0gAEkYKEnByb21vdGlvbl9yZXF1ZXN0cxgOIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm9tb3Rpb25SZXF1ZXN0c0gAEj8KDmhlYXRpbmdfbGF5b3V0GA8gASgLMiUua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0aW5nTGF5b3V0SAASPwoOaGVhdGluZ19yZWNvcmQYECABKAsyJS5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkhlYXRpbmdSZWNvcmRIAEIICgZyZXN1bHQi+wEKDFN0YXJ0UGFpcmluZxI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZBI0CgZ3aW5kb3cYAiABKAsyJC5rdXNpbnRhLmlvdC5jb21tb24udjEuUGFpcmluZ1dpbmRvdxI6ChBpbml0aWFsX3NwYWNlX2lkGAMgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI9Cglvd25lcnNoaXAYBCABKA4yKi5rdXNpbnRhLmlvdC5jb21tb24udjEuRGV2aWNlT3duZXJzaGlwVHlwZSKPAQoOUGFpcmluZ1N0YXJ0ZWQSEwoLaW5fcmVwbHlfdG8YASABKAkSLgoKZXhwaXJlc19hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASOAoFZXJyb3IYAyABKAsyKS5rdXNpbnRhLmlvdC5jb21tb24udjEuUGFpcmluZ0Vycm9yRGV0YWlsIpcBCg9QYWlyaW5nRmluaXNoZWQSEwoLaW5fcmVwbHlfdG8YASABKAkSNQoKZGV2aWNlX2lkcxgCIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjgKBWVycm9yGAMgASgLMikua3VzaW50YS5pb3QuY29tbW9uLnYxLlBhaXJpbmdFcnJvckRldGFpbCJNCgtMaW5rQ2hhbmdlZBItCgRsaW5rGAEgASgLMh8ua3VzaW50YS5pb3QubGluay52MS5EZXZpY2VMaW5rEg8KB3JlbW92ZWQYAiABKAgiiAMKE0Nvbm5lY3RvckRlc2NyaXB0b3ISOgoMY29ubmVjdG9yX2lkGAEgASgLMiQua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuQ29ubmVjdG9ySWQSFAoMZGlzcGxheV9uYW1lGAIgASgJEiEKGXN1cHBvcnRlZF9kZXZpY2VfdHlwZV9pZHMYAyADKA0SGAoQc3VwcG9ydHNfcGFpcmluZxgEIAEoCBIdChVzdXBwb3J0c19wcm92aXNpb25pbmcYBSABKAgSFQoNYnJva2Vyc19saW5rcxgGIAEoCBIyCgRraW5kGAcgASgOMiQua3VzaW50YS5pb3QuY29tbW9uLnYxLkNvbm5lY3RvcktpbmQSEwoLZGVzY3JpcHRpb24YCCABKAkSPAoOYmFja2VuZF9oZWFsdGgYCSABKAsyJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQmFja2VuZEhlYWx0aBIlCh1zdXBwb3J0c19iYWNrZW5kX3JlaW5pdGlhbGl6ZRgKIAEoCCJVChNDb25uZWN0b3JzQW5ub3VuY2VkEj4KCmNvbm5lY3RvcnMYASADKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29ubmVjdG9yRGVzY3JpcHRvciJHChJSb29tQ2xpbWF0ZUNoYW5nZWQSMQoEcm9vbRgBIAEoCzIjLmt1c2ludGEuaW90LmNsaW1hdGUudjEuUm9vbUNsaW1hdGUiVgoSQ2xpbWF0ZU1vZGVDaGFuZ2VkEjEKBG1vZGUYASABKAsyIy5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkNsaW1hdGVNb2RlEg0KBWVuZGVkGAIgASgIIo4MCg5HYXRld2F5TWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkQKDnN0YXRlX3NuYXBzaG90GAMgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZVN0YXRlU25hcHNob3RIABJACg9wcm9wZXJ0eV9yZXBvcnQYBCABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvcGVydHlSZXBvcnRIABJIChFwZXJtaXNzaW9uX3VwZGF0ZRgFIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXZlUGVybWlzc2lvblVwZGF0ZUgAEj4KDmNvbW1hbmRfcmVzdWx0GAYgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLkNvbW1hbmRSZXN1bHRIABIrCgRwb25nGAggASgLMhsua3VzaW50YS5pb3Qud2VicnRjLnYxLlBvbmdIABJGChJoYW5kc2hha2VfcmVqZWN0ZWQYCSABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuSGFuZHNoYWtlUmVqZWN0ZWRIABI0CgVlcnJvchgKIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5RXJyb3JIABJCChBzdWJzY3JpcHRpb25fYWNrGAsgASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlN1YnNjcmlwdGlvbkFja0gAEjoKDGRldmljZV9hZGRlZBgMIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VBZGRlZEgAEj4KDmRldmljZV9yZW1vdmVkGA0gASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZVJlbW92ZWRIABJEChFtYW5hZ2VtZW50X3Jlc3VsdBgOIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50UmVzdWx0SAASQAoNZGV2aWNlX2V2ZW50cxgQIAEoCzInLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2VFdmVudEJhdGNoSAASQAoPcGFpcmluZ19zdGFydGVkGBEgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLlBhaXJpbmdTdGFydGVkSAASQgoQcGFpcmluZ19maW5pc2hlZBgSIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QYWlyaW5nRmluaXNoZWRIABI6CgxsaW5rX2NoYW5nZWQYEyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlua0NoYW5nZWRIABJKChRjb25uZWN0b3JzX2Fubm91bmNlZBgUIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25uZWN0b3JzQW5ub3VuY2VkSAASSQoUcm9vbV9jbGltYXRlX2NoYW5nZWQYFSABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbUNsaW1hdGVDaGFuZ2VkSAASSQoUY2xpbWF0ZV9tb2RlX2NoYW5nZWQYFiABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ2xpbWF0ZU1vZGVDaGFuZ2VkSAASTQoWc2VydmljZV9zdGF0dXNfY2hhbmdlZBgXIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXJ2aWNlU3RhdHVzQ2hhbmdlZEgAEjwKDXNwYWNlX2ludml0ZXMYGCABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuU3BhY2VJbnZpdGVzSAASRgoScHJvbW90aW9uX3JlcXVlc3RzGBkgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLlByb21vdGlvblJlcXVlc3RzSABCCQoHcGF5bG9hZEoECA8QEEoECAcQCFIWYXR0cmlidXRlX3dyaXRlX3Jlc3VsdFIOcHJvcGVydHlfZXZlbnQigwUKCkFwcE1lc3NhZ2USEgoKbWVzc2FnZV9pZBgBIAEoCRIrCgdzZW50X2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI4CgloYW5kc2hha2UYAyABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXBwSGFuZHNoYWtlSAASNwoHY29tbWFuZBgEIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VDb21tYW5kSAASQgoMcmVhZF9yZXF1ZXN0GAUgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLlByb3BlcnR5UmVhZFJlcXVlc3RIABIrCgRwaW5nGAYgASgLMhsua3VzaW50YS5pb3Qud2VicnRjLnYxLlBpbmdIABI8CglzdWJzY3JpYmUYByABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuU3Vic2NyaWJlRGV2aWNlc0gAEkAKC3Vuc3Vic2NyaWJlGAggASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLlVuc3Vic2NyaWJlRGV2aWNlc0gAEj4KCm1hbmFnZW1lbnQYCSABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuTWFuYWdlbWVudFJlcXVlc3RIABJHCg9hdHRyaWJ1dGVfd3JpdGUYCiABKAsyLC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXR0cmlidXRlV3JpdGVSZXF1ZXN0SAASPAoNc3RhcnRfcGFpcmluZxgLIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TdGFydFBhaXJpbmdIAEIJCgdwYXlsb2FkKqICChBHYXRld2F5RXJyb3JDb2RlEiIKHkdBVEVXQVlfRVJST1JfQ09ERV9VTlNQRUNJRklFRBAAEiMKH0dBVEVXQVlfRVJST1JfQ09ERV9OT1RfRU5USVRMRUQQARImCiJHQVRFV0FZX0VSUk9SX0NPREVfSU5WQUxJRF9SRVFVRVNUEAISIgoeR0FURVdBWV9FUlJPUl9DT0RFX1VOQVZBSUxBQkxFEAMSHwobR0FURVdBWV9FUlJPUl9DT0RFX0lOVEVSTkFMEAQSLAooR0FURVdBWV9FUlJPUl9DT0RFX1NFU1NJT05fTElNSVRfUkVBQ0hFRBAFEioKJkdBVEVXQVlfRVJST1JfQ09ERV9GQUlMRURfUFJFQ09ORElUSU9OEAZCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_pairing, file_kusinta_iot_common_v1_types, file_kusinta_iot_device_v1_device_event, file_kusinta_iot_heating_v1_heating, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_webrtc_v1_command, file_kusinta_iot_webrtc_v1_device_state, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_management, file_kusinta_iot_webrtc_v1_members, file_kusinta_iot_webrtc_v1_permission_push]);
28
+ fileDesc("CiRrdXNpbnRhL2lvdC93ZWJydGMvdjEvZW52ZWxvcGUucHJvdG8SFWt1c2ludGEuaW90LndlYnJ0Yy52MSIGCgRQaW5nIgYKBFBvbmciIwoRSGFuZHNoYWtlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlwKDEFwcEhhbmRzaGFrZRILCgNqd3QYASABKAkSPwoUc3Vic2NyaWJlX2RldmljZV9pZHMYAiADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJJChBTdWJzY3JpYmVEZXZpY2VzEjUKCmRldmljZV9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJLChJVbnN1YnNjcmliZURldmljZXMSNQoKZGV2aWNlX2lkcxgBIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIpMBChNSZWZ1c2VkU3Vic2NyaXB0aW9uEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjUKBGNvZGUYAiABKA4yJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yQ29kZRIPCgdtZXNzYWdlGAMgASgJIpoBCg9TdWJzY3JpcHRpb25BY2sSEwoLaW5fcmVwbHlfdG8YASABKAkSNQoKc3Vic2NyaWJlZBgCIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjsKB3JlZnVzZWQYAyADKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVmdXNlZFN1YnNjcmlwdGlvbiLRAQoTUHJvcGVydHlSZWFkUmVxdWVzdBI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCgZ0YXJnZXQYByABKAsyIy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuQXR0cmlidXRlUmVmSgQIAhAHUg5hdHRyaWJ1dGVfbmFtZVIOY2x1c3Rlcl9pZF9oZXhSCmNsdXN0ZXJfaWRSC2VuZHBvaW50X2lkUhB2ZW5kb3JfZXh0ZW5zaW9uIswBCgxHYXRld2F5RXJyb3ISNQoEY29kZRgBIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5RXJyb3JDb2RlEg8KB21lc3NhZ2UYAiABKAkSQwoIbWV0YWRhdGEYAyADKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIuwIChBNYW5hZ2VtZW50UmVzdWx0EhMKC2luX3JlcGx5X3RvGAEgASgJEjQKBWVycm9yGAIgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkdhdGV3YXlFcnJvckgAEiwKBXNwYWNlGAMgASgLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2VIABI2CgpzcGFjZV90cmVlGAQgASgLMiAua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlVHJlZUgAEjMKA2FjaxgFIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50QWNrSAASNAoFbGlua3MYBiABKAsyIy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmtMaXN0SAASQAoNcm9vbV9jbGltYXRlcxgHIAEoCzInLmt1c2ludGEuaW90LmNsaW1hdGUudjEuUm9vbUNsaW1hdGVMaXN0SAASOwoMcm9vbV9oaXN0b3J5GAggASgLMiMua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tSGlzdG9yeUgAEkYKEnByaXZhY3lfZGlzY2xvc3VyZRgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcml2YWN5RGlzY2xvc3VyZUgAElQKGWFwYXJ0bWVudF9jbGltYXRlX3N1bW1hcnkYCiABKAsyLy5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5SAASPAoNaXNzdWVkX2ludml0ZRgLIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Jc3N1ZWRJbnZpdGVIABI8Cg1zcGFjZV9pbnZpdGVzGAwgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlSW52aXRlc0gAEkAKD2dhdGV3YXlfbWVtYmVycxgNIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5TWVtYmVyc0gAEkYKEnByb21vdGlvbl9yZXF1ZXN0cxgOIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm9tb3Rpb25SZXF1ZXN0c0gAEj8KDmhlYXRpbmdfbGF5b3V0GA8gASgLMiUua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0aW5nTGF5b3V0SAASPwoOaGVhdGluZ19yZWNvcmQYECABKAsyJS5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkhlYXRpbmdSZWNvcmRIABJKChJhY2NvdW50X2xpbmtfbm9uY2UYESABKAsyLC5rdXNpbnRhLmlvdC5hY2NvdW50bGluay52MS5BY2NvdW50TGlua05vbmNlSAASQQoNYWNjb3VudF9saW5rcxgSIAEoCzIoLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLkFjY291bnRMaW5rc0gAQggKBnJlc3VsdCL7AQoMU3RhcnRQYWlyaW5nEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEjQKBndpbmRvdxgCIAEoCzIkLmt1c2ludGEuaW90LmNvbW1vbi52MS5QYWlyaW5nV2luZG93EjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEj0KCW93bmVyc2hpcBgEIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlIo8BCg5QYWlyaW5nU3RhcnRlZBITCgtpbl9yZXBseV90bxgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI4CgVlcnJvchgDIAEoCzIpLmt1c2ludGEuaW90LmNvbW1vbi52MS5QYWlyaW5nRXJyb3JEZXRhaWwilwEKD1BhaXJpbmdGaW5pc2hlZBITCgtpbl9yZXBseV90bxgBIAEoCRI1CgpkZXZpY2VfaWRzGAIgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSOAoFZXJyb3IYAyABKAsyKS5rdXNpbnRhLmlvdC5jb21tb24udjEuUGFpcmluZ0Vycm9yRGV0YWlsIk0KC0xpbmtDaGFuZ2VkEi0KBGxpbmsYASABKAsyHy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmsSDwoHcmVtb3ZlZBgCIAEoCCKIAwoTQ29ubmVjdG9yRGVzY3JpcHRvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZBIUCgxkaXNwbGF5X25hbWUYAiABKAkSIQoZc3VwcG9ydGVkX2RldmljZV90eXBlX2lkcxgDIAMoDRIYChBzdXBwb3J0c19wYWlyaW5nGAQgASgIEh0KFXN1cHBvcnRzX3Byb3Zpc2lvbmluZxgFIAEoCBIVCg1icm9rZXJzX2xpbmtzGAYgASgIEjIKBGtpbmQYByABKA4yJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQ29ubmVjdG9yS2luZBITCgtkZXNjcmlwdGlvbhgIIAEoCRI8Cg5iYWNrZW5kX2hlYWx0aBgJIAEoCzIkLmt1c2ludGEuaW90LmNvbW1vbi52MS5CYWNrZW5kSGVhbHRoEiUKHXN1cHBvcnRzX2JhY2tlbmRfcmVpbml0aWFsaXplGAogASgIIlUKE0Nvbm5lY3RvcnNBbm5vdW5jZWQSPgoKY29ubmVjdG9ycxgBIAMoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25uZWN0b3JEZXNjcmlwdG9yIkcKElJvb21DbGltYXRlQ2hhbmdlZBIxCgRyb29tGAEgASgLMiMua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tQ2xpbWF0ZSJWChJDbGltYXRlTW9kZUNoYW5nZWQSMQoEbW9kZRgBIAEoCzIjLmt1c2ludGEuaW90LmNsaW1hdGUudjEuQ2xpbWF0ZU1vZGUSDQoFZW5kZWQYAiABKAgijgwKDkdhdGV3YXlNZXNzYWdlEhIKCm1lc3NhZ2VfaWQYASABKAkSKwoHc2VudF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASRAoOc3RhdGVfc25hcHNob3QYAyABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlU3RhdGVTbmFwc2hvdEgAEkAKD3Byb3BlcnR5X3JlcG9ydBgEIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm9wZXJ0eVJlcG9ydEgAEkgKEXBlcm1pc3Npb25fdXBkYXRlGAUgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpdmVQZXJtaXNzaW9uVXBkYXRlSAASPgoOY29tbWFuZF9yZXN1bHQYBiABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29tbWFuZFJlc3VsdEgAEisKBHBvbmcYCCABKAsyGy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUG9uZ0gAEkYKEmhhbmRzaGFrZV9yZWplY3RlZBgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5IYW5kc2hha2VSZWplY3RlZEgAEjQKBWVycm9yGAogASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkdhdGV3YXlFcnJvckgAEkIKEHN1YnNjcmlwdGlvbl9hY2sYCyABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuU3Vic2NyaXB0aW9uQWNrSAASOgoMZGV2aWNlX2FkZGVkGAwgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZUFkZGVkSAASPgoOZGV2aWNlX3JlbW92ZWQYDSABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlUmVtb3ZlZEgAEkQKEW1hbmFnZW1lbnRfcmVzdWx0GA4gASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLk1hbmFnZW1lbnRSZXN1bHRIABJACg1kZXZpY2VfZXZlbnRzGBAgASgLMicua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZUV2ZW50QmF0Y2hIABJACg9wYWlyaW5nX3N0YXJ0ZWQYESABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGFpcmluZ1N0YXJ0ZWRIABJCChBwYWlyaW5nX2ZpbmlzaGVkGBIgASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlBhaXJpbmdGaW5pc2hlZEgAEjoKDGxpbmtfY2hhbmdlZBgTIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaW5rQ2hhbmdlZEgAEkoKFGNvbm5lY3RvcnNfYW5ub3VuY2VkGBQgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLkNvbm5lY3RvcnNBbm5vdW5jZWRIABJJChRyb29tX2NsaW1hdGVfY2hhbmdlZBgVIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tQ2xpbWF0ZUNoYW5nZWRIABJJChRjbGltYXRlX21vZGVfY2hhbmdlZBgWIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DbGltYXRlTW9kZUNoYW5nZWRIABJNChZzZXJ2aWNlX3N0YXR1c19jaGFuZ2VkGBcgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VTdGF0dXNDaGFuZ2VkSAASPAoNc3BhY2VfaW52aXRlcxgYIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TcGFjZUludml0ZXNIABJGChJwcm9tb3Rpb25fcmVxdWVzdHMYGSABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvbW90aW9uUmVxdWVzdHNIAEIJCgdwYXlsb2FkSgQIDxAQSgQIBxAIUhZhdHRyaWJ1dGVfd3JpdGVfcmVzdWx0Ug5wcm9wZXJ0eV9ldmVudCKDBQoKQXBwTWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjgKCWhhbmRzaGFrZRgDIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BcHBIYW5kc2hha2VIABI3Cgdjb21tYW5kGAQgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZUNvbW1hbmRIABJCCgxyZWFkX3JlcXVlc3QYBSABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvcGVydHlSZWFkUmVxdWVzdEgAEisKBHBpbmcYBiABKAsyGy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGluZ0gAEjwKCXN1YnNjcmliZRgHIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TdWJzY3JpYmVEZXZpY2VzSAASQAoLdW5zdWJzY3JpYmUYCCABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuVW5zdWJzY3JpYmVEZXZpY2VzSAASPgoKbWFuYWdlbWVudBgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50UmVxdWVzdEgAEkcKD2F0dHJpYnV0ZV93cml0ZRgKIAEoCzIsLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BdHRyaWJ1dGVXcml0ZVJlcXVlc3RIABI8Cg1zdGFydF9wYWlyaW5nGAsgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlN0YXJ0UGFpcmluZ0gAQgkKB3BheWxvYWQqogIKEEdhdGV3YXlFcnJvckNvZGUSIgoeR0FURVdBWV9FUlJPUl9DT0RFX1VOU1BFQ0lGSUVEEAASIwofR0FURVdBWV9FUlJPUl9DT0RFX05PVF9FTlRJVExFRBABEiYKIkdBVEVXQVlfRVJST1JfQ09ERV9JTlZBTElEX1JFUVVFU1QQAhIiCh5HQVRFV0FZX0VSUk9SX0NPREVfVU5BVkFJTEFCTEUQAxIfChtHQVRFV0FZX0VSUk9SX0NPREVfSU5URVJOQUwQBBIsCihHQVRFV0FZX0VSUk9SX0NPREVfU0VTU0lPTl9MSU1JVF9SRUFDSEVEEAUSKgomR0FURVdBWV9FUlJPUl9DT0RFX0ZBSUxFRF9QUkVDT05ESVRJT04QBkICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_accountlink_v1_account_link, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_pairing, file_kusinta_iot_common_v1_types, file_kusinta_iot_device_v1_device_event, file_kusinta_iot_heating_v1_heating, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_webrtc_v1_command, file_kusinta_iot_webrtc_v1_device_state, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_management, file_kusinta_iot_webrtc_v1_members, file_kusinta_iot_webrtc_v1_permission_push]);
28
29
 
29
30
  /**
30
31
  * Describes the message kusinta.iot.webrtc.v1.Ping.
@@ -14,6 +14,7 @@ import type { ClimateModeKind, ClimateSummaryPeriod } from "../../climate/v1/cli
14
14
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
15
15
  import type { ServiceSignal } from "../../access/v1/acl_pb.js";
16
16
  import type { ComfortLoad, ComfortWindow, FloorZone, HeatingCircuit, HeatingPlant } from "../../heating/v1/heating_pb.js";
17
+ import type { LinkedService } from "../../accountlink/v1/account_link_pb.js";
17
18
  import type { ApproveJoinRequest, CreateInvite, DenyJoinRequest, ListSpaceInvites, MarkInviteEmailSent, ResendInvite, RevokeInvite } from "./invite_pb.js";
18
19
  import type { AnswerPromotion, ListGatewayMembers, ListPromotionRequests, RemoveFromGateway, RequestPromotion, SetAccessUntil, SetMemberRole, SetOwnerOrganisation } from "./members_pb.js";
19
20
 
@@ -1387,6 +1388,77 @@ export declare type SetComfortWindows = Message<"kusinta.iot.webrtc.v1.SetComfor
1387
1388
  */
1388
1389
  export declare const SetComfortWindowsSchema: GenMessage<SetComfortWindows>;
1389
1390
 
1391
+ /**
1392
+ * Asks for a nonce to link one home's account at a third-party service
1393
+ * (accountlink.v1.AccountLinkNonce). Only a household admin of the home — the resident
1394
+ * relation that governs a home's own settings — is issued one; anyone else is refused as
1395
+ * NOT_ENTITLED, as is a home the caller cannot reach. A service this gateway does not
1396
+ * support is refused as INVALID_REQUEST.
1397
+ *
1398
+ * @generated from message kusinta.iot.webrtc.v1.RequestAccountLinkNonce
1399
+ */
1400
+ export declare type RequestAccountLinkNonce = Message<"kusinta.iot.webrtc.v1.RequestAccountLinkNonce"> & {
1401
+ /**
1402
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 1;
1403
+ */
1404
+ homeId?: SpaceId | undefined;
1405
+
1406
+ /**
1407
+ * @generated from field: kusinta.iot.accountlink.v1.LinkedService service = 2;
1408
+ */
1409
+ service: LinkedService;
1410
+ };
1411
+
1412
+ /**
1413
+ * Describes the message kusinta.iot.webrtc.v1.RequestAccountLinkNonce.
1414
+ * Use `create(RequestAccountLinkNonceSchema)` to create a new message.
1415
+ */
1416
+ export declare const RequestAccountLinkNonceSchema: GenMessage<RequestAccountLinkNonce>;
1417
+
1418
+ /**
1419
+ * Lists a home's linked accounts and their status, answered with an AccountLinks. Given to
1420
+ * the home's residents; anyone else is refused as NOT_ENTITLED.
1421
+ *
1422
+ * @generated from message kusinta.iot.webrtc.v1.ListAccountLinks
1423
+ */
1424
+ export declare type ListAccountLinks = Message<"kusinta.iot.webrtc.v1.ListAccountLinks"> & {
1425
+ /**
1426
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 1;
1427
+ */
1428
+ homeId?: SpaceId | undefined;
1429
+ };
1430
+
1431
+ /**
1432
+ * Describes the message kusinta.iot.webrtc.v1.ListAccountLinks.
1433
+ * Use `create(ListAccountLinksSchema)` to create a new message.
1434
+ */
1435
+ export declare const ListAccountLinksSchema: GenMessage<ListAccountLinks>;
1436
+
1437
+ /**
1438
+ * Unlinks a home's account at one service: the gateway reads no more through it and revokes
1439
+ * it (accountlink.v1.RevokeToken). A household admin of the home only; anyone else is refused
1440
+ * as NOT_ENTITLED. A service with no link is acked all the same. Acked.
1441
+ *
1442
+ * @generated from message kusinta.iot.webrtc.v1.UnlinkAccount
1443
+ */
1444
+ export declare type UnlinkAccount = Message<"kusinta.iot.webrtc.v1.UnlinkAccount"> & {
1445
+ /**
1446
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 1;
1447
+ */
1448
+ homeId?: SpaceId | undefined;
1449
+
1450
+ /**
1451
+ * @generated from field: kusinta.iot.accountlink.v1.LinkedService service = 2;
1452
+ */
1453
+ service: LinkedService;
1454
+ };
1455
+
1456
+ /**
1457
+ * Describes the message kusinta.iot.webrtc.v1.UnlinkAccount.
1458
+ * Use `create(UnlinkAccountSchema)` to create a new message.
1459
+ */
1460
+ export declare const UnlinkAccountSchema: GenMessage<UnlinkAccount>;
1461
+
1390
1462
  /**
1391
1463
  * @generated from message kusinta.iot.webrtc.v1.ManagementRequest
1392
1464
  */
@@ -1675,6 +1747,24 @@ export declare type ManagementRequest = Message<"kusinta.iot.webrtc.v1.Managemen
1675
1747
  */
1676
1748
  value: SetComfortWindows;
1677
1749
  case: "setComfortWindows";
1750
+ } | {
1751
+ /**
1752
+ * @generated from field: kusinta.iot.webrtc.v1.RequestAccountLinkNonce request_account_link_nonce = 46;
1753
+ */
1754
+ value: RequestAccountLinkNonce;
1755
+ case: "requestAccountLinkNonce";
1756
+ } | {
1757
+ /**
1758
+ * @generated from field: kusinta.iot.webrtc.v1.ListAccountLinks list_account_links = 47;
1759
+ */
1760
+ value: ListAccountLinks;
1761
+ case: "listAccountLinks";
1762
+ } | {
1763
+ /**
1764
+ * @generated from field: kusinta.iot.webrtc.v1.UnlinkAccount unlink_account = 48;
1765
+ */
1766
+ value: UnlinkAccount;
1767
+ case: "unlinkAccount";
1678
1768
  } | { case: undefined; value?: undefined };
1679
1769
  };
1680
1770
 
@@ -6,6 +6,7 @@ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
7
  import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
8
8
  import { file_kusinta_iot_access_v1_roles } from "../../access/v1/roles_pb.js";
9
+ import { file_kusinta_iot_accountlink_v1_account_link } from "../../accountlink/v1/account_link_pb.js";
9
10
  import { file_kusinta_iot_climate_v1_climate } from "../../climate/v1/climate_pb.js";
10
11
  import { file_kusinta_iot_common_v1_types } from "../../common/v1/types_pb.js";
11
12
  import { file_kusinta_iot_heating_v1_heating } from "../../heating/v1/heating_pb.js";
@@ -20,7 +21,7 @@ import { file_kusinta_iot_webrtc_v1_members } from "./members_pb.js";
20
21
  * Describes the file kusinta/iot/webrtc/v1/management.proto.
21
22
  */
22
23
  export const file_kusinta_iot_webrtc_v1_management = /*@__PURE__*/
23
- fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxItYBCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSFgoJdGltZV96b25lGAYgASgJSACIAQFCDAoKX3RpbWVfem9uZSL1AgoLVXBkYXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjkKCnNwYWNlX3R5cGUYAiABKA4yIC5rdXNpbnRhLmlvdC5jb21tb24udjEuU3BhY2VUeXBlSAGIAQESEQoEbmFtZRgDIAEoCUgCiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAOIAQESEgoFZmxvb3IYBSABKAVIBIgBARI7Cg9wYXJlbnRfc3BhY2VfaWQYBiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkSAASEAoGZGV0YWNoGAcgASgISAASFgoJdGltZV96b25lGAggASgJSAWIAQFCDwoNcGFyZW50X2NoYW5nZUINCgtfc3BhY2VfdHlwZUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX2Zsb29yQgwKCl90aW1lX3pvbmUiUgoLRGVsZXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg8KB2Nhc2NhZGUYAiABKAgivAEKEUFzc2lnblVzZXJUb1NwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjsKCHJlbGF0aW9uGAQgASgOMikua3VzaW50YS5pb3QuYWNjZXNzLnYxLk1lbWJlcnNoaXBSZWxhdGlvbkoECAMQBCJ7ChNSZW1vdmVVc2VyRnJvbVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkIn4KElBsYWNlRGV2aWNlSW5TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQigQEKFVJlbW92ZURldmljZUZyb21TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi2AEKC0NsYWltRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KCW93bmVyc2hpcBgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhgKEHBvc3Nlc3Npb25fcHJvb2YYBCABKAkiRQoNUmVsZWFzZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCKjAQoPUHJvdmlzaW9uRGV2aWNlEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEkUKB2xvcmF3YW4YAiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IubG9yYXdhbi52MS5Mb3Jhd2FuUHJvdmlzaW9uaW5nSABCDQoLY3JlZGVudGlhbHMiRQoKTGlzdFNwYWNlcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCI4CglTcGFjZVRyZWUSKwoGc3BhY2VzGAEgAygLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2UiDwoNTWFuYWdlbWVudEFjayKRAgoQQ3JlYXRlRGV2aWNlTGluaxIxCgZzZW5kZXIYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAMgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24SKwoEbW9kZRgEIAEoDjIdLmt1c2ludGEuaW90LmxpbmsudjEuTGlua01vZGUSMwoIc2V0dGluZ3MYBSABKAsyIS5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtTZXR0aW5ncyIjChBSZW1vdmVEZXZpY2VMaW5rEg8KB2xpbmtfaWQYASABKAkiWAoQVXBkYXRlRGV2aWNlTGluaxIPCgdsaW5rX2lkGAEgASgJEjMKCHNldHRpbmdzGAIgASgLMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rU2V0dGluZ3MiRwoPTGlzdERldmljZUxpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkInwKDVNldFJvb21UYXJnZXQSMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgCIAEoEUgAiAEBQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzIkQKC1Jvb21TZW5zb3JzEjUKCnNlbnNvcl9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJ0CgpSb29tTGltaXRzEh0KEG1pbl9jZW50aWRlZ3JlZXMYASABKBFIAIgBARIdChBtYXhfY2VudGlkZWdyZWVzGAIgASgRSAGIAQFCEwoRX21pbl9jZW50aWRlZ3JlZXNCEwoRX21heF9jZW50aWRlZ3JlZXMi7QEKFENvbmZpZ3VyZVJvb21DbGltYXRlEjEKB3Jvb21faWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjEKBmxpbWl0cxgCIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tTGltaXRzEjMKB3NlbnNvcnMYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbVNlbnNvcnMSIQoUbG9ja19kZXZpY2VfY29udHJvbHMYBCABKAhIAIgBAUIXChVfbG9ja19kZXZpY2VfY29udHJvbHMikwIKDlNldENsaW1hdGVNb2RlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI1CgRraW5kGAIgASgOMicua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlTW9kZUtpbmQSIQoUc2V0YmFja19jZW50aWRlZ3JlZXMYAyABKBFIAIgBARItCglzdGFydHNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhcKFV9zZXRiYWNrX2NlbnRpZGVncmVlcyJLChBMaXN0Um9vbUNsaW1hdGVzEjcKDXJvb3Rfc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIp8BCg5HZXRSb29tSGlzdG9yeRIxCgdyb29tX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBItCglmcm9tX3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIpgCChFQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoPc2VydmljZV9wYXJ0aWVzGAUgAygLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VQYXJ0eRJMChZjbGltYXRlX3N1bW1hcnlfcGVyaW9kGAQgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBIfChdvd25lcl9vcmdhbmlzYXRpb25fbmFtZRgGIAEoCRIWCg5uYW1lc193aXRoaGVsZBgHIAEoCEoECAIQA0oECAMQBCJ/CgxTZXJ2aWNlUGFydHkSKQoEcm9sZRgBIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjUKB3NpZ25hbHMYAiADKA4yJC5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuU2VydmljZVNpZ25hbBINCgVuYW1lcxgDIAMoCSJKChRHZXRQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi7gEKGkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5EjYKDGFwYXJ0bWVudF9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoGcGVyaW9kGAIgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBItCglmcm9tX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKElJlY29ubmVjdENvbm5lY3RvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZCJGCgtMaXN0SGVhdGluZxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCJGCg9QdXRIZWF0aW5nUGxhbnQSMwoFcGxhbnQYASABKAsyJC5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkhlYXRpbmdQbGFudCJMChFQdXRIZWF0aW5nQ2lyY3VpdBI3CgdjaXJjdWl0GAEgASgLMiYua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0aW5nQ2lyY3VpdCI/CgxQdXRGbG9vclpvbmUSLwoEem9uZRgBIAEoCzIhLmt1c2ludGEuaW90LmhlYXRpbmcudjEuRmxvb3Jab25lIksKDlB1dENvbWZvcnRMb2FkEjkKDGNvbWZvcnRfbG9hZBgBIAEoCzIjLmt1c2ludGEuaW90LmhlYXRpbmcudjEuQ29tZm9ydExvYWQiMwoTUmVtb3ZlSGVhdGluZ1JlY29yZBIKCgJpZBgBIAEoCRIQCghyZXZpc2lvbhgCIAEoBCKYAQoRU2V0Q29tZm9ydFdpbmRvd3MSFwoPY29tZm9ydF9sb2FkX2lkGAEgASgJEjYKB3dpbmRvd3MYAiADKAsyJS5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkNvbWZvcnRXaW5kb3cSHQoQd2luZG93c19yZXZpc2lvbhgDIAEoBEgAiAEBQhMKEV93aW5kb3dzX3JldmlzaW9uIvUYChFNYW5hZ2VtZW50UmVxdWVzdBI6CgxjcmVhdGVfc3BhY2UYASABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ3JlYXRlU3BhY2VIABI6Cgx1cGRhdGVfc3BhY2UYAiABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuVXBkYXRlU3BhY2VIABI6CgxkZWxldGVfc3BhY2UYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGVsZXRlU3BhY2VIABJIChRhc3NpZ25fdXNlcl90b19zcGFjZRgEIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Bc3NpZ25Vc2VyVG9TcGFjZUgAEkwKFnJlbW92ZV91c2VyX2Zyb21fc3BhY2UYBSABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlVXNlckZyb21TcGFjZUgAEkoKFXBsYWNlX2RldmljZV9pbl9zcGFjZRgGIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QbGFjZURldmljZUluU3BhY2VIABJQChhyZW1vdmVfZGV2aWNlX2Zyb21fc3BhY2UYByABKAsyLC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRGV2aWNlRnJvbVNwYWNlSAASOgoMY2xhaW1fZGV2aWNlGAggASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkNsYWltRGV2aWNlSAASPgoOcmVsZWFzZV9kZXZpY2UYCSABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVsZWFzZURldmljZUgAEjgKC2xpc3Rfc3BhY2VzGAogASgLMiEua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RTcGFjZXNIABJFChJjcmVhdGVfZGV2aWNlX2xpbmsYCyABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ3JlYXRlRGV2aWNlTGlua0gAEkUKEnJlbW92ZV9kZXZpY2VfbGluaxgMIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVEZXZpY2VMaW5rSAASQwoRbGlzdF9kZXZpY2VfbGlua3MYDSABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdERldmljZUxpbmtzSAASRQoSdXBkYXRlX2RldmljZV9saW5rGA4gASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLlVwZGF0ZURldmljZUxpbmtIABJCChBwcm92aXNpb25fZGV2aWNlGA8gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlByb3Zpc2lvbkRldmljZUgAEj8KD3NldF9yb29tX3RhcmdldBgQIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRSb29tVGFyZ2V0SAASTQoWY29uZmlndXJlX3Jvb21fY2xpbWF0ZRgRIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25maWd1cmVSb29tQ2xpbWF0ZUgAEkEKEHNldF9jbGltYXRlX21vZGUYEiABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0Q2xpbWF0ZU1vZGVIABJFChJsaXN0X3Jvb21fY2xpbWF0ZXMYEyABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdFJvb21DbGltYXRlc0gAEkEKEGdldF9yb29tX2hpc3RvcnkYFCABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2V0Um9vbUhpc3RvcnlIABJNChZnZXRfcHJpdmFjeV9kaXNjbG9zdXJlGBUgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldFByaXZhY3lEaXNjbG9zdXJlSAASWgodZ2V0X2FwYXJ0bWVudF9jbGltYXRlX3N1bW1hcnkYFiABKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2V0QXBhcnRtZW50Q2xpbWF0ZVN1bW1hcnlIABJIChNyZWNvbm5lY3RfY29ubmVjdG9yGBcgASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlY29ubmVjdENvbm5lY3RvckgAEjwKDWNyZWF0ZV9pbnZpdGUYGCABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ3JlYXRlSW52aXRlSAASPAoNcmVzZW5kX2ludml0ZRgZIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZXNlbmRJbnZpdGVIABI8Cg1yZXZva2VfaW52aXRlGBogASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlJldm9rZUludml0ZUgAEkwKFm1hcmtfaW52aXRlX2VtYWlsX3NlbnQYGyABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTWFya0ludml0ZUVtYWlsU2VudEgAEkUKEmxpc3Rfc3BhY2VfaW52aXRlcxgcIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0U3BhY2VJbnZpdGVzSAASSQoUYXBwcm92ZV9qb2luX3JlcXVlc3QYHSABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXBwcm92ZUpvaW5SZXF1ZXN0SAASQwoRZGVueV9qb2luX3JlcXVlc3QYHiABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGVueUpvaW5SZXF1ZXN0SAASSQoUbGlzdF9nYXRld2F5X21lbWJlcnMYHyABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdEdhdGV3YXlNZW1iZXJzSAASPwoPc2V0X21lbWJlcl9yb2xlGCAgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldE1lbWJlclJvbGVIABJHChNyZW1vdmVfZnJvbV9nYXRld2F5GCEgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZUZyb21HYXRld2F5SAASQQoQc2V0X2FjY2Vzc191bnRpbBgiIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRBY2Nlc3NVbnRpbEgAElEKFnNldF9vd25lcl9vcmdhbmlzYXRpb24YIyABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0T3duZXJPcmdhbmlzYXRpb25CAhgBSAASRAoRcmVxdWVzdF9wcm9tb3Rpb24YJCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVxdWVzdFByb21vdGlvbkgAEkIKEGFuc3dlcl9wcm9tb3Rpb24YJSABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQW5zd2VyUHJvbW90aW9uSAASTwoXbGlzdF9wcm9tb3Rpb25fcmVxdWVzdHMYJiABKAsyLC5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdFByb21vdGlvblJlcXVlc3RzSAASOgoMbGlzdF9oZWF0aW5nGCcgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RIZWF0aW5nSAASQwoRcHV0X2hlYXRpbmdfcGxhbnQYKCABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHV0SGVhdGluZ1BsYW50SAASRwoTcHV0X2hlYXRpbmdfY2lyY3VpdBgpIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QdXRIZWF0aW5nQ2lyY3VpdEgAEj0KDnB1dF9mbG9vcl96b25lGCogASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlB1dEZsb29yWm9uZUgAEkEKEHB1dF9jb21mb3J0X2xvYWQYKyABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHV0Q29tZm9ydExvYWRIABJLChVyZW1vdmVfaGVhdGluZ19yZWNvcmQYLCABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlSGVhdGluZ1JlY29yZEgAEkcKE3NldF9jb21mb3J0X3dpbmRvd3MYLSABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0Q29tZm9ydFdpbmRvd3NIAEIJCgdyZXF1ZXN0QgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_access_v1_roles, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_types, file_kusinta_iot_heating_v1_heating, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_vendor_lorawan_v1_lorawan, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_members]);
24
+ fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxItYBCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSFgoJdGltZV96b25lGAYgASgJSACIAQFCDAoKX3RpbWVfem9uZSL1AgoLVXBkYXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjkKCnNwYWNlX3R5cGUYAiABKA4yIC5rdXNpbnRhLmlvdC5jb21tb24udjEuU3BhY2VUeXBlSAGIAQESEQoEbmFtZRgDIAEoCUgCiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAOIAQESEgoFZmxvb3IYBSABKAVIBIgBARI7Cg9wYXJlbnRfc3BhY2VfaWQYBiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkSAASEAoGZGV0YWNoGAcgASgISAASFgoJdGltZV96b25lGAggASgJSAWIAQFCDwoNcGFyZW50X2NoYW5nZUINCgtfc3BhY2VfdHlwZUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX2Zsb29yQgwKCl90aW1lX3pvbmUiUgoLRGVsZXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg8KB2Nhc2NhZGUYAiABKAgivAEKEUFzc2lnblVzZXJUb1NwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjsKCHJlbGF0aW9uGAQgASgOMikua3VzaW50YS5pb3QuYWNjZXNzLnYxLk1lbWJlcnNoaXBSZWxhdGlvbkoECAMQBCJ7ChNSZW1vdmVVc2VyRnJvbVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkIn4KElBsYWNlRGV2aWNlSW5TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQigQEKFVJlbW92ZURldmljZUZyb21TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi2AEKC0NsYWltRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KCW93bmVyc2hpcBgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhgKEHBvc3Nlc3Npb25fcHJvb2YYBCABKAkiRQoNUmVsZWFzZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCKjAQoPUHJvdmlzaW9uRGV2aWNlEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEkUKB2xvcmF3YW4YAiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IubG9yYXdhbi52MS5Mb3Jhd2FuUHJvdmlzaW9uaW5nSABCDQoLY3JlZGVudGlhbHMiRQoKTGlzdFNwYWNlcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCI4CglTcGFjZVRyZWUSKwoGc3BhY2VzGAEgAygLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2UiDwoNTWFuYWdlbWVudEFjayKRAgoQQ3JlYXRlRGV2aWNlTGluaxIxCgZzZW5kZXIYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAMgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24SKwoEbW9kZRgEIAEoDjIdLmt1c2ludGEuaW90LmxpbmsudjEuTGlua01vZGUSMwoIc2V0dGluZ3MYBSABKAsyIS5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtTZXR0aW5ncyIjChBSZW1vdmVEZXZpY2VMaW5rEg8KB2xpbmtfaWQYASABKAkiWAoQVXBkYXRlRGV2aWNlTGluaxIPCgdsaW5rX2lkGAEgASgJEjMKCHNldHRpbmdzGAIgASgLMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rU2V0dGluZ3MiRwoPTGlzdERldmljZUxpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkInwKDVNldFJvb21UYXJnZXQSMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgCIAEoEUgAiAEBQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzIkQKC1Jvb21TZW5zb3JzEjUKCnNlbnNvcl9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJ0CgpSb29tTGltaXRzEh0KEG1pbl9jZW50aWRlZ3JlZXMYASABKBFIAIgBARIdChBtYXhfY2VudGlkZWdyZWVzGAIgASgRSAGIAQFCEwoRX21pbl9jZW50aWRlZ3JlZXNCEwoRX21heF9jZW50aWRlZ3JlZXMi7QEKFENvbmZpZ3VyZVJvb21DbGltYXRlEjEKB3Jvb21faWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjEKBmxpbWl0cxgCIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tTGltaXRzEjMKB3NlbnNvcnMYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbVNlbnNvcnMSIQoUbG9ja19kZXZpY2VfY29udHJvbHMYBCABKAhIAIgBAUIXChVfbG9ja19kZXZpY2VfY29udHJvbHMikwIKDlNldENsaW1hdGVNb2RlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI1CgRraW5kGAIgASgOMicua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlTW9kZUtpbmQSIQoUc2V0YmFja19jZW50aWRlZ3JlZXMYAyABKBFIAIgBARItCglzdGFydHNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhcKFV9zZXRiYWNrX2NlbnRpZGVncmVlcyJLChBMaXN0Um9vbUNsaW1hdGVzEjcKDXJvb3Rfc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIp8BCg5HZXRSb29tSGlzdG9yeRIxCgdyb29tX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBItCglmcm9tX3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIpgCChFQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoPc2VydmljZV9wYXJ0aWVzGAUgAygLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VQYXJ0eRJMChZjbGltYXRlX3N1bW1hcnlfcGVyaW9kGAQgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBIfChdvd25lcl9vcmdhbmlzYXRpb25fbmFtZRgGIAEoCRIWCg5uYW1lc193aXRoaGVsZBgHIAEoCEoECAIQA0oECAMQBCJ/CgxTZXJ2aWNlUGFydHkSKQoEcm9sZRgBIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjUKB3NpZ25hbHMYAiADKA4yJC5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuU2VydmljZVNpZ25hbBINCgVuYW1lcxgDIAMoCSJKChRHZXRQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi7gEKGkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5EjYKDGFwYXJ0bWVudF9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoGcGVyaW9kGAIgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBItCglmcm9tX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKElJlY29ubmVjdENvbm5lY3RvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZCJGCgtMaXN0SGVhdGluZxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCJGCg9QdXRIZWF0aW5nUGxhbnQSMwoFcGxhbnQYASABKAsyJC5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkhlYXRpbmdQbGFudCJMChFQdXRIZWF0aW5nQ2lyY3VpdBI3CgdjaXJjdWl0GAEgASgLMiYua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0aW5nQ2lyY3VpdCI/CgxQdXRGbG9vclpvbmUSLwoEem9uZRgBIAEoCzIhLmt1c2ludGEuaW90LmhlYXRpbmcudjEuRmxvb3Jab25lIksKDlB1dENvbWZvcnRMb2FkEjkKDGNvbWZvcnRfbG9hZBgBIAEoCzIjLmt1c2ludGEuaW90LmhlYXRpbmcudjEuQ29tZm9ydExvYWQiMwoTUmVtb3ZlSGVhdGluZ1JlY29yZBIKCgJpZBgBIAEoCRIQCghyZXZpc2lvbhgCIAEoBCKYAQoRU2V0Q29tZm9ydFdpbmRvd3MSFwoPY29tZm9ydF9sb2FkX2lkGAEgASgJEjYKB3dpbmRvd3MYAiADKAsyJS5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkNvbWZvcnRXaW5kb3cSHQoQd2luZG93c19yZXZpc2lvbhgDIAEoBEgAiAEBQhMKEV93aW5kb3dzX3JldmlzaW9uIogBChdSZXF1ZXN0QWNjb3VudExpbmtOb25jZRIxCgdob21lX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI6CgdzZXJ2aWNlGAIgASgOMikua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuTGlua2VkU2VydmljZSJFChBMaXN0QWNjb3VudExpbmtzEjEKB2hvbWVfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIn4KDVVubGlua0FjY291bnQSMQoHaG9tZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSOgoHc2VydmljZRgCIAEoDjIpLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLkxpbmtlZFNlcnZpY2Ui0hoKEU1hbmFnZW1lbnRSZXF1ZXN0EjoKDGNyZWF0ZV9zcGFjZRgBIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DcmVhdGVTcGFjZUgAEjoKDHVwZGF0ZV9zcGFjZRgCIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5VcGRhdGVTcGFjZUgAEjoKDGRlbGV0ZV9zcGFjZRgDIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZWxldGVTcGFjZUgAEkgKFGFzc2lnbl91c2VyX3RvX3NwYWNlGAQgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLkFzc2lnblVzZXJUb1NwYWNlSAASTAoWcmVtb3ZlX3VzZXJfZnJvbV9zcGFjZRgFIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVVc2VyRnJvbVNwYWNlSAASSgoVcGxhY2VfZGV2aWNlX2luX3NwYWNlGAYgASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLlBsYWNlRGV2aWNlSW5TcGFjZUgAElAKGHJlbW92ZV9kZXZpY2VfZnJvbV9zcGFjZRgHIAEoCzIsLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVEZXZpY2VGcm9tU3BhY2VIABI6CgxjbGFpbV9kZXZpY2UYCCABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ2xhaW1EZXZpY2VIABI+Cg5yZWxlYXNlX2RldmljZRgJIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZWxlYXNlRGV2aWNlSAASOAoLbGlzdF9zcGFjZXMYCiABKAsyIS5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdFNwYWNlc0gAEkUKEmNyZWF0ZV9kZXZpY2VfbGluaxgLIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DcmVhdGVEZXZpY2VMaW5rSAASRQoScmVtb3ZlX2RldmljZV9saW5rGAwgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZURldmljZUxpbmtIABJDChFsaXN0X2RldmljZV9saW5rcxgNIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0RGV2aWNlTGlua3NIABJFChJ1cGRhdGVfZGV2aWNlX2xpbmsYDiABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuVXBkYXRlRGV2aWNlTGlua0gAEkIKEHByb3Zpc2lvbl9kZXZpY2UYDyABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvdmlzaW9uRGV2aWNlSAASPwoPc2V0X3Jvb21fdGFyZ2V0GBAgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldFJvb21UYXJnZXRIABJNChZjb25maWd1cmVfcm9vbV9jbGltYXRlGBEgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLkNvbmZpZ3VyZVJvb21DbGltYXRlSAASQQoQc2V0X2NsaW1hdGVfbW9kZRgSIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRDbGltYXRlTW9kZUgAEkUKEmxpc3Rfcm9vbV9jbGltYXRlcxgTIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0Um9vbUNsaW1hdGVzSAASQQoQZ2V0X3Jvb21faGlzdG9yeRgUIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HZXRSb29tSGlzdG9yeUgAEk0KFmdldF9wcml2YWN5X2Rpc2Nsb3N1cmUYFSABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2V0UHJpdmFjeURpc2Nsb3N1cmVIABJaCh1nZXRfYXBhcnRtZW50X2NsaW1hdGVfc3VtbWFyeRgWIAEoCzIxLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HZXRBcGFydG1lbnRDbGltYXRlU3VtbWFyeUgAEkgKE3JlY29ubmVjdF9jb25uZWN0b3IYFyABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVjb25uZWN0Q29ubmVjdG9ySAASPAoNY3JlYXRlX2ludml0ZRgYIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DcmVhdGVJbnZpdGVIABI8Cg1yZXNlbmRfaW52aXRlGBkgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlc2VuZEludml0ZUgAEjwKDXJldm9rZV9pbnZpdGUYGiABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmV2b2tlSW52aXRlSAASTAoWbWFya19pbnZpdGVfZW1haWxfc2VudBgbIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYXJrSW52aXRlRW1haWxTZW50SAASRQoSbGlzdF9zcGFjZV9pbnZpdGVzGBwgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RTcGFjZUludml0ZXNIABJJChRhcHByb3ZlX2pvaW5fcmVxdWVzdBgdIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BcHByb3ZlSm9pblJlcXVlc3RIABJDChFkZW55X2pvaW5fcmVxdWVzdBgeIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZW55Sm9pblJlcXVlc3RIABJJChRsaXN0X2dhdGV3YXlfbWVtYmVycxgfIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0R2F0ZXdheU1lbWJlcnNIABI/Cg9zZXRfbWVtYmVyX3JvbGUYICABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0TWVtYmVyUm9sZUgAEkcKE3JlbW92ZV9mcm9tX2dhdGV3YXkYISABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRnJvbUdhdGV3YXlIABJBChBzZXRfYWNjZXNzX3VudGlsGCIgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldEFjY2Vzc1VudGlsSAASUQoWc2V0X293bmVyX29yZ2FuaXNhdGlvbhgjIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRPd25lck9yZ2FuaXNhdGlvbkICGAFIABJEChFyZXF1ZXN0X3Byb21vdGlvbhgkIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZXF1ZXN0UHJvbW90aW9uSAASQgoQYW5zd2VyX3Byb21vdGlvbhglIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BbnN3ZXJQcm9tb3Rpb25IABJPChdsaXN0X3Byb21vdGlvbl9yZXF1ZXN0cxgmIAEoCzIsLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0UHJvbW90aW9uUmVxdWVzdHNIABI6CgxsaXN0X2hlYXRpbmcYJyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdEhlYXRpbmdIABJDChFwdXRfaGVhdGluZ19wbGFudBgoIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QdXRIZWF0aW5nUGxhbnRIABJHChNwdXRfaGVhdGluZ19jaXJjdWl0GCkgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLlB1dEhlYXRpbmdDaXJjdWl0SAASPQoOcHV0X2Zsb29yX3pvbmUYKiABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHV0Rmxvb3Jab25lSAASQQoQcHV0X2NvbWZvcnRfbG9hZBgrIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QdXRDb21mb3J0TG9hZEgAEksKFXJlbW92ZV9oZWF0aW5nX3JlY29yZBgsIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVIZWF0aW5nUmVjb3JkSAASRwoTc2V0X2NvbWZvcnRfd2luZG93cxgtIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRDb21mb3J0V2luZG93c0gAElQKGnJlcXVlc3RfYWNjb3VudF9saW5rX25vbmNlGC4gASgLMi4ua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlcXVlc3RBY2NvdW50TGlua05vbmNlSAASRQoSbGlzdF9hY2NvdW50X2xpbmtzGC8gASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RBY2NvdW50TGlua3NIABI+Cg51bmxpbmtfYWNjb3VudBgwIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5VbmxpbmtBY2NvdW50SABCCQoHcmVxdWVzdEICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_access_v1_roles, file_kusinta_iot_accountlink_v1_account_link, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_types, file_kusinta_iot_heating_v1_heating, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_vendor_lorawan_v1_lorawan, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_members]);
24
25
 
25
26
  /**
26
27
  * Describes the message kusinta.iot.webrtc.v1.CreateSpace.
@@ -274,10 +275,31 @@ export const RemoveHeatingRecordSchema = /*@__PURE__*/
274
275
  export const SetComfortWindowsSchema = /*@__PURE__*/
275
276
  messageDesc(file_kusinta_iot_webrtc_v1_management, 35);
276
277
 
278
+ /**
279
+ * Describes the message kusinta.iot.webrtc.v1.RequestAccountLinkNonce.
280
+ * Use `create(RequestAccountLinkNonceSchema)` to create a new message.
281
+ */
282
+ export const RequestAccountLinkNonceSchema = /*@__PURE__*/
283
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 36);
284
+
285
+ /**
286
+ * Describes the message kusinta.iot.webrtc.v1.ListAccountLinks.
287
+ * Use `create(ListAccountLinksSchema)` to create a new message.
288
+ */
289
+ export const ListAccountLinksSchema = /*@__PURE__*/
290
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 37);
291
+
292
+ /**
293
+ * Describes the message kusinta.iot.webrtc.v1.UnlinkAccount.
294
+ * Use `create(UnlinkAccountSchema)` to create a new message.
295
+ */
296
+ export const UnlinkAccountSchema = /*@__PURE__*/
297
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 38);
298
+
277
299
  /**
278
300
  * Describes the message kusinta.iot.webrtc.v1.ManagementRequest.
279
301
  * Use `create(ManagementRequestSchema)` to create a new message.
280
302
  */
281
303
  export const ManagementRequestSchema = /*@__PURE__*/
282
- messageDesc(file_kusinta_iot_webrtc_v1_management, 36);
304
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 39);
283
305