towns-agent 7.1.0 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -7174,16 +7174,15 @@ var require_ieee754 = __commonJS({
7174
7174
  var import_picocolors13 = require("picocolors");
7175
7175
 
7176
7176
  // src/modules/init.ts
7177
- var fs2 = __toESM(require("fs"));
7178
- var path2 = __toESM(require("path"));
7177
+ var fs3 = __toESM(require("fs"));
7178
+ var path3 = __toESM(require("path"));
7179
7179
  var import_prompts2 = __toESM(require("prompts"));
7180
7180
  var import_picocolors2 = require("picocolors");
7181
7181
  var jsonc = __toESM(require("jsonc-parser"));
7182
7182
 
7183
7183
  // src/modules/utils.ts
7184
- var fs = __toESM(require("fs"));
7185
- var os = __toESM(require("os"));
7186
- var path = __toESM(require("path"));
7184
+ var fs2 = __toESM(require("fs"));
7185
+ var path2 = __toESM(require("path"));
7187
7186
  var import_cross_spawn = __toESM(require("cross-spawn"));
7188
7187
  var import_prompts = __toESM(require("prompts"));
7189
7188
  var import_picocolors = __toESM(require("picocolors"));
@@ -7564,7 +7563,7 @@ var import_wkt3 = require("@bufbuild/protobuf/wkt");
7564
7563
  // ../proto/dist/gen/payloads_pb.js
7565
7564
  var import_codegenv2 = require("@bufbuild/protobuf/codegenv2");
7566
7565
  var import_wkt = require("@bufbuild/protobuf/wkt");
7567
- var file_payloads = /* @__PURE__ */ (0, import_codegenv2.fileDesc)("Cg5wYXlsb2Fkcy5wcm90bxIFcml2ZXIilCQKDkNoYW5uZWxNZXNzYWdlEioKBHBvc3QYASABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0SAASMgoIcmVhY3Rpb24YAiABKAsyHi5yaXZlci5DaGFubmVsTWVzc2FnZS5SZWFjdGlvbkgAEioKBGVkaXQYAyABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5FZGl0SAASNAoJcmVkYWN0aW9uGAQgASgLMh8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUmVkYWN0aW9uSAAaMgoIUmVhY3Rpb24SFAoMcmVmX2V2ZW50X2lkGAEgASgJEhAKCHJlYWN0aW9uGAIgASgJGkYKBEVkaXQSFAoMcmVmX2V2ZW50X2lkGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0GkEKCVJlZGFjdGlvbhIUCgxyZWZfZXZlbnRfaWQYASABKAkSEwoGcmVhc29uGAIgASgJSACIAQFCCQoHX3JlYXNvbhr1IAoEUG9zdBIWCgl0aHJlYWRfaWQYASABKAlIAYgBARIbCg50aHJlYWRfcHJldmlldxgCIAEoCUgCiAEBEhUKCHJlcGx5X2lkGAMgASgJSAOIAQESGgoNcmVwbHlfcHJldmlldxgEIAEoCUgEiAEBEjcKBHRleHQYZSABKAsyJy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVGV4dEgAEjkKBWltYWdlGGYgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASMwoCZ20YZyABKAsyJS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuR01IABI0ChFjb252ZXJzYXRpb25fc2VlZBhoIAEoCzIXLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRIABJFChpjb252ZXJzYXRpb25fc2VlZF9yZXNwb25zZRhpIAEoCzIfLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRSZXNwb25zZUgAGqwBCgdNZW50aW9uEg8KB3VzZXJfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEiwKCmF0X2NoYW5uZWwYZCABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABI5CgdhdF9yb2xlGGUgASgLMiYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Sb2xlTWVudGlvbkgAQhEKD21lbnRpb25CZWhhdmlvchoeCgtSb2xlTWVudGlvbhIPCgdyb2xlX2lkGAEgASgFGtIDCgpBdHRhY2htZW50EjkKBWltYWdlGGUgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASKwoMY2h1bmtlZE1lZGlhGGcgASgLMhMucml2ZXIuQ2h1bmtlZE1lZGlhSAASTQoPZW1iZWRkZWRNZXNzYWdlGGggASgLMjIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkVtYmVkZGVkTWVzc2FnZUgAEkUKC3VuZnVybGVkVXJsGGkgASgLMi4ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlVuZnVybGVkVVJMSAASOwoGdGlja2VyGGogASgLMikucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlRpY2tlckgAEj0KB21pbmlhcHAYayABKAsyKi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuTWluaWFwcEgAEj8KCGluZm9DYXJkGGwgASgLMisucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkSABCCQoHY29udGVudBrvFwoHQ29udGVudBqGAQoEVGV4dBIMCgRib2R5GAEgASgJEjQKCG1lbnRpb25zGAIgAygLMiIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5NZW50aW9uEjoKC2F0dGFjaG1lbnRzGAMgAygLMiUucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5BdHRhY2htZW50GqkCCgVJbWFnZRINCgV0aXRsZRgBIAEoCRI7CgRpbmZvGAIgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm8SRQoJdGh1bWJuYWlsGAMgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm9IAIgBARp/CgRJbmZvEgsKA3VybBgBIAEoCRIQCghtaW1ldHlwZRgCIAEoCRIRCgRzaXplGAMgASgFSACIAQESEgoFd2lkdGgYBCABKAVIAYgBARITCgZoZWlnaHQYBSABKAVIAogBAUIHCgVfc2l6ZUIICgZfd2lkdGhCCQoHX2hlaWdodEIMCgpfdGh1bWJuYWlsGjQKAkdNEhAKCHR5cGVfdXJsGAEgASgJEhIKBXZhbHVlGAIgASgMSACIAQFCCAoGX3ZhbHVlGr0ECg9FbWJlZGRlZE1lc3NhZ2USCwoDdXJsGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0EkUKBGluZm8YAyABKAsyNy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuRW1iZWRkZWRNZXNzYWdlLkluZm8SUQoKc3RhdGljSW5mbxgEIAEoCzI9LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5FbWJlZGRlZE1lc3NhZ2UuU3RhdGljSW5mbxqJAQoESW5mbxIOCgZ1c2VySWQYASABKAkSGAoQY3JlYXRlZEF0RXBvY2hNcxgCIAEoAxIPCgdzcGFjZUlkGAMgASgJEhEKCWNoYW5uZWxJZBgEIAEoCRIRCgltZXNzYWdlSWQYBSABKAkSFAoHcmVwbHlJZBgGIAEoCUgAiAEBQgoKCF9yZXBseUlkGswBCgpTdGF0aWNJbmZvEhUKCHVzZXJOYW1lGAEgASgJSACIAQESGAoLZGlzcGxheU5hbWUYAiABKAlIAYgBARIYCgtjaGFubmVsTmFtZRgDIAEoCUgCiAEBEhYKCXNwYWNlTmFtZRgEIAEoCUgDiAEBEhQKB2Vuc05hbWUYBSABKAlIBIgBAUILCglfdXNlck5hbWVCDgoMX2Rpc3BsYXlOYW1lQg4KDF9jaGFubmVsTmFtZUIMCgpfc3BhY2VOYW1lQgoKCF9lbnNOYW1lGscBCgtVbmZ1cmxlZFVSTBILCgN1cmwYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDQoFdGl0bGUYAyABKAkSSAoFaW1hZ2UYBCABKAsyNC5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVW5mdXJsZWRVUkwuSW1hZ2VIAIgBARozCgVJbWFnZRIOCgZoZWlnaHQYASABKAUSDQoFd2lkdGgYAiABKAUSCwoDdXJsGAMgASgJQggKBl9pbWFnZRorCgZUaWNrZXISDwoHYWRkcmVzcxgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRoWCgdNaW5pYXBwEgsKA3VybBgBIAEoCRqpDQoISW5mb0NhcmQSQAoFdGl0bGUYASABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWwSQQoGZmllbGRzGAIgAygLMjEucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkZpZWxkGuYDCgVMYWJlbBJJCgRpY29uGAEgASgOMjYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkljb25IAIgBARIMCgR0ZXh0GAIgASgJEksKBWJhZGdlGAMgASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlSAGIAQEayAEKBUJhZGdlEgwKBHRleHQYASABKAkSVQoHdmFyaWFudBgCIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQEiTgoHVmFyaWFudBIXChNWQVJJQU5UX1VOU1BFQ0lGSUVEEAASFAoQVkFSSUFOVF9QT1NJVElWRRABEhQKEFZBUklBTlRfTkVHQVRJVkUQAkIKCghfdmFyaWFudCJZCgRJY29uEhQKEElDT05fVU5TUEVDSUZJRUQQABIOCgpJQ09OX0NIRUNLEAESCgoGSUNPTl9YEAISEAoMSUNPTl9XQVJOSU5HEAMSDQoJSUNPTl9JTkZPEARCBwoFX2ljb25CCAoGX2JhZGdlGpwDCgVGaWVsZBISCgVsYWJlbBgBIAEoCUgBiAEBEkEKBHRleHQYCiABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWxIABJDCgR1c2VyGAsgASgLMjMucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLlVzZXJSZWZIABJICgV0b2tlbhgMIAEoCzI3LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5Ub2tlbkFtb3VudEgAEksKCGNvbnRyYWN0GA0gASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkNvbnRyYWN0UmVmSAASTQoLbWFya2V0X2l0ZW0YDiABKAsyNi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTWFya2V0SXRlbUgAQgcKBXZhbHVlQggKBl9sYWJlbBoaCgdVc2VyUmVmEg8KB3VzZXJfaWQYASABKAwaQAoLVG9rZW5BbW91bnQSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRIOCgZhbW91bnQYAyABKAkaMAoLQ29udHJhY3RSZWYSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRr/AwoKTWFya2V0SXRlbRIMCgRuYW1lGAEgASgJEg0KBXByaWNlGAIgASgJEhUKCGljb25fdXJsGAMgASgJSACIAQESFQoIc3VidGl0bGUYBCABKAlIAYgBARITCgZjaGFuZ2UYBSABKAlIAogBARIXCgpjaGFuZ2VfcGN0GAYgASgJSAOIAQESVwoJZGlyZWN0aW9uGAcgASgOMj8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlLlZhcmlhbnRIBIgBARJQCghvdXRjb21lcxgIIAMoCzI+LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5NYXJrZXRJdGVtLk91dGNvbWUaigEKB091dGNvbWUSDQoFbGFiZWwYASABKAkSDQoFdmFsdWUYAiABKAkSVQoHdmFyaWFudBgDIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQFCCgoIX3ZhcmlhbnRCCwoJX2ljb25fdXJsQgsKCV9zdWJ0aXRsZUIJCgdfY2hhbmdlQg0KC19jaGFuZ2VfcGN0QgwKCl9kaXJlY3Rpb25CCQoHY29udGVudEIMCgpfdGhyZWFkX2lkQhEKD190aHJlYWRfcHJldmlld0ILCglfcmVwbHlfaWRCEAoOX3JlcGx5X3ByZXZpZXdCCQoHcGF5bG9hZCJUCh5TcGVjaWFsaXN0Q2FwYWJpbGl0eUludm9jYXRpb24SEAoIYWdlbnRfaWQYASABKAwSDAoEbmFtZRgCIAEoCRISCgpwYXJhbWV0ZXJzGAMgASgJIjUKEkFnZW50UHJvcG9zYWxFcnJvchIQCghhZ2VudF9pZBgBIAEoDBINCgVlcnJvchgCIAEoCSKMAgoIUHJvcG9zYWwSCgoCaWQYASABKAkSFwoPdGFyZ2V0X2FnZW50X2lkGAIgASgMEhkKEXRhcmdldF9hZ2VudF9uYW1lGAMgASgJEhcKD2NhcGFiaWxpdHlfbmFtZRgEIAEoCRISCgpwYXJhbWV0ZXJzGAUgASgJEhMKC2V4cGxhbmF0aW9uGAYgASgJEhIKCmNvbmZpZGVuY2UYByABKAISFQoNZXhwaXJlc19hdF9tcxgIIAEoAxIQCgh3YXJuaW5ncxgJIAMoCRIdChBleHBlY3RlZF9vdXRjb21lGAogASgJSACIAQESDQoFdGl0bGUYCyABKAlCEwoRX2V4cGVjdGVkX291dGNvbWUipwEKFkFnZW50UHJvcG9zYWxzUmVzcG9uc2USIgoJcHJvcG9zYWxzGAEgAygLMg8ucml2ZXIuUHJvcG9zYWwSKQoGZXJyb3JzGAIgAygLMhkucml2ZXIuQWdlbnRQcm9wb3NhbEVycm9yEhcKD3Jlc3BvbmRlZF9hdF9tcxgDIAEoAxIlCgZzdGF0dXMYBCABKA4yFS5yaXZlci5Qcm9wb3NhbFN0YXR1cyK5BgoQQ29udmVyc2F0aW9uU2VlZBIKCgJpZBgBIAEoCRIVCg1jcmVhdGVkX2F0X21zGAIgASgDEhsKE3Byb3Bvc2FsX3RpbWVvdXRfbXMYAyABKAMSHAoUY29uY2llcmdlX3RpbWVvdXRfbXMYBCABKAMSDQoFcXVlcnkYBSABKAkSFAoHY29udGV4dBgGIAEoCUgAiAEBEhkKDGV4dGVybmFsX3JlZhgHIAEoCUgBiAEBEhQKDGNvbmNpZXJnZV9pZBgIIAEoDBITCgZzb3VyY2UYCSABKAlIAogBARI6CgtpbnZvY2F0aW9ucxgKIAMoCzIlLnJpdmVyLlNwZWNpYWxpc3RDYXBhYmlsaXR5SW52b2NhdGlvbhIhChlpbnZvY2F0aW9uc191cGRhdGVkX2F0X21zGAsgASgDEkkKEnByb3Bvc2Fsc19ieV9hZ2VudBgMIAMoCzItLnJpdmVyLkNvbnZlcnNhdGlvblNlZWQuUHJvcG9zYWxzQnlBZ2VudEVudHJ5EhUKDXJlc3BvbnNlX3RleHQYDSABKAkSHQoVc2VsZWN0ZWRfcHJvcG9zYWxfaWRzGA4gAygJEhwKFGNsYXJpZnlpbmdfcXVlc3Rpb25zGA8gAygJEiEKGWNvbmNpZXJnZV9yZXNwb25kZWRfYXRfbXMYECABKAMSFgoOc3RhdHVzX3VwZGF0ZXMYESADKAkSIgoJcHJvcG9zYWxzGBIgAygLMg8ucml2ZXIuUHJvcG9zYWwSGgoNdXNlcl90aW1lem9uZRgTIAEoCUgDiAEBEh4KFmNvbmNpZXJnZV9mYWlsZWRfYXRfbXMYFCABKAMaVgoVUHJvcG9zYWxzQnlBZ2VudEVudHJ5EgsKA2tleRgBIAEoCRIsCgV2YWx1ZRgCIAEoCzIdLnJpdmVyLkFnZW50UHJvcG9zYWxzUmVzcG9uc2U6AjgBQgoKCF9jb250ZXh0Qg8KDV9leHRlcm5hbF9yZWZCCQoHX3NvdXJjZUIQCg5fdXNlcl90aW1lem9uZVIUYWRkaXRpb25hbF9wcm9wb3NhbHNSD3Byb3Bvc2FsX2Vycm9yc1IKY3JlYXRlZF9hdCKyAQoYQ29udmVyc2F0aW9uU2VlZFJlc3BvbnNlEg8KB3NlZWRfaWQYASABKAkSKgoEc2VlZBgCIAEoCzIXLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRIAYgBARIsChFzZWxlY3RlZF9wcm9wb3NhbBhkIAEoCzIPLnJpdmVyLlByb3Bvc2FsSAASFgoMdXNlcl9tZXNzYWdlGGUgASgJSABCCgoIcmVzcG9uc2VCBwoFX3NlZWQiYwoRQ2hhbm5lbFByb3BlcnRpZXMSDAoEbmFtZRgBIAEoCRINCgV0b3BpYxgCIAEoCRInCgVpbWFnZRgDIAEoCzITLnJpdmVyLkNodW5rZWRNZWRpYUgAiAEBQggKBl9pbWFnZSJoChZVc2VyTWV0YWRhdGFQcm9wZXJ0aWVzEhUKCHVzZXJuYW1lGAEgASgJSACIAQESGQoMZGlzcGxheV9uYW1lGAIgASgJSAGIAQFCCwoJX3VzZXJuYW1lQg8KDV9kaXNwbGF5X25hbWUiiAMKEEZ1bGx5UmVhZE1hcmtlcnMSNQoHbWFya2VycxgBIAMoCzIkLnJpdmVyLkZ1bGx5UmVhZE1hcmtlcnMuTWFya2Vyc0VudHJ5GusBCgdDb250ZW50EhIKCmNoYW5uZWxfaWQYASABKAkSHQoQdGhyZWFkX3BhcmVudF9pZBgCIAEoCUgAiAEBEhAKCGV2ZW50X2lkGAMgASgJEhEKCWV2ZW50X251bRgEIAEoAxIbChNiZWdpbl91bnJlYWRfd2luZG93GAUgASgDEhkKEWVuZF91bnJlYWRfd2luZG93GAYgASgDEhEKCWlzX3VucmVhZBgHIAEoCBIWCg5tYXJrZWRSZWFkQXRUcxgIIAEoAxIQCghtZW50aW9ucxgJIAEoBUITChFfdGhyZWFkX3BhcmVudF9pZBpPCgxNYXJrZXJzRW50cnkSCwoDa2V5GAEgASgJEi4KBXZhbHVlGAIgASgLMh8ucml2ZXIuRnVsbHlSZWFkTWFya2Vycy5Db250ZW50OgI4ASIbCgtTZXNzaW9uS2V5cxIMCgRrZXlzGAEgAygJInoKFUh5YnJpZEdyb3VwU2Vzc2lvbktleRISCgpzZXNzaW9uX2lkGAEgASgMEhEKCXN0cmVhbV9pZBgCIAEoDBILCgNrZXkYAyABKAwSFQoNbWluaWJsb2NrX251bRgEIAEoAxIWCg5taW5pYmxvY2tfaGFzaBgFIAEoDCJtCglNZWRpYUluZm8SEAoIbWltZXR5cGUYASABKAkSEQoJc2l6ZUJ5dGVzGAIgASgDEhMKC3dpZHRoUGl4ZWxzGAMgASgFEhQKDGhlaWdodFBpeGVscxgEIAEoBRIQCghmaWxlbmFtZRgFIAEoCSJACg1FbWJlZGRlZE1lZGlhEh4KBGluZm8YASABKAsyEC5yaXZlci5NZWRpYUluZm8SDwoHY29udGVudBgCIAEoDCLOAQoMQ2h1bmtlZE1lZGlhEh4KBGluZm8YASABKAsyEC5yaXZlci5NZWRpYUluZm8SEAoIc3RyZWFtSWQYAiABKAkSJwoJdGh1bWJuYWlsGAMgASgLMhQucml2ZXIuRW1iZWRkZWRNZWRpYRIsCgZhZXNnY20YZSABKAsyGi5yaXZlci5DaHVua2VkTWVkaWEuQUVTR0NNSAAaJwoGQUVTR0NNEgoKAml2GAEgASgMEhEKCXNlY3JldEtleRgCIAEoDEIMCgplbmNyeXB0aW9uIlAKB1VzZXJCaW8SCwoDYmlvGAEgASgJEiAKE3VwZGF0ZWRfYXRfZXBvY2hfbXMYAiABKARIAIgBAUIWChRfdXBkYXRlZF9hdF9lcG9jaF9tcyJaCgtCZWFyZXJUb2tlbhIcChRkZWxlZ2F0ZV9wcml2YXRlX2tleRgBIAEoCRIUCgxkZWxlZ2F0ZV9zaWcYAiABKAwSFwoPZXhwaXJ5X2Vwb2NoX21zGAMgASgDIq4DCg5FeHBvcnRlZERldmljZRIRCglwaWNrbGVLZXkYASABKAkSFgoOcGlja2xlZEFjY291bnQYAiABKAkSPAoQb3V0Ym91bmRTZXNzaW9ucxgDIAMoCzIiLnJpdmVyLkV4cG9ydGVkRGV2aWNlLkdyb3VwU2Vzc2lvbhI7Cg9pbmJvdW5kU2Vzc2lvbnMYBCADKAsyIi5yaXZlci5FeHBvcnRlZERldmljZS5Hcm91cFNlc3Npb24SRQoTaHlicmlkR3JvdXBTZXNzaW9ucxgFIAMoCzIoLnJpdmVyLkV4cG9ydGVkRGV2aWNlLkh5YnJpZEdyb3VwU2Vzc2lvbhpGCgxHcm91cFNlc3Npb24SEgoKc2Vzc2lvbl9pZBgBIAEoCRIRCglzdHJlYW1faWQYAiABKAkSDwoHc2Vzc2lvbhgDIAEoCRpnChJIeWJyaWRHcm91cFNlc3Npb24SEgoKc2Vzc2lvbl9pZBgBIAEoCRIRCglzdHJlYW1faWQYAiABKAkSEwoLc2Vzc2lvbl9rZXkYAyABKAwSFQoNbWluaWJsb2NrX251bRgEIAEoAyKhAQoOQXBwUHJpdmF0ZURhdGESEwoLcHJpdmF0ZV9rZXkYASABKAkSMAoRZW5jcnlwdGlvbl9kZXZpY2UYAiABKAsyFS5yaXZlci5FeHBvcnRlZERldmljZRILCgNlbnYYAyABKAkSEwoLYXBwX2FkZHJlc3MYBCABKAwSFwoKand0X3NlY3JldBgFIAEoDEgAiAEBQg0KC19qd3Rfc2VjcmV0KrMBChZDb252ZXJzYXRpb25TZWVkU3RhdHVzEigKJENPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19VTlNQRUNJRklFRBAAEiYKIkNPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19OT1RfUkVBRFkQARIiCh5DT05WRVJTQVRJT05fU0VFRF9TVEFUVVNfUkVBRFkQAhIjCh9DT05WRVJTQVRJT05fU0VFRF9TVEFUVVNfRkFJTEVEEAMqqAEKDlByb3Bvc2FsU3RhdHVzEh8KG1BST1BPU0FMX1NUQVRVU19VTlNQRUNJRklFRBAAEhsKF1BST1BPU0FMX1NUQVRVU19QRU5ESU5HEAESHQoZUFJPUE9TQUxfU1RBVFVTX0ZVTEZJTExFRBACEhoKFlBST1BPU0FMX1NUQVRVU19GQUlMRUQQAxIdChlQUk9QT1NBTF9TVEFUVVNfVElNRURfT1VUEARCNFoyZ2l0aHViLmNvbS90b3ducy1wcm90b2NvbC90b3ducy9jb3JlL25vZGUvcHJvdG9jb2xiBnByb3RvMw", [import_wkt.file_google_protobuf_empty]);
7566
+ var file_payloads = /* @__PURE__ */ (0, import_codegenv2.fileDesc)("Cg5wYXlsb2Fkcy5wcm90bxIFcml2ZXIilCQKDkNoYW5uZWxNZXNzYWdlEioKBHBvc3QYASABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0SAASMgoIcmVhY3Rpb24YAiABKAsyHi5yaXZlci5DaGFubmVsTWVzc2FnZS5SZWFjdGlvbkgAEioKBGVkaXQYAyABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5FZGl0SAASNAoJcmVkYWN0aW9uGAQgASgLMh8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUmVkYWN0aW9uSAAaMgoIUmVhY3Rpb24SFAoMcmVmX2V2ZW50X2lkGAEgASgJEhAKCHJlYWN0aW9uGAIgASgJGkYKBEVkaXQSFAoMcmVmX2V2ZW50X2lkGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0GkEKCVJlZGFjdGlvbhIUCgxyZWZfZXZlbnRfaWQYASABKAkSEwoGcmVhc29uGAIgASgJSACIAQFCCQoHX3JlYXNvbhr1IAoEUG9zdBIWCgl0aHJlYWRfaWQYASABKAlIAYgBARIbCg50aHJlYWRfcHJldmlldxgCIAEoCUgCiAEBEhUKCHJlcGx5X2lkGAMgASgJSAOIAQESGgoNcmVwbHlfcHJldmlldxgEIAEoCUgEiAEBEjcKBHRleHQYZSABKAsyJy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVGV4dEgAEjkKBWltYWdlGGYgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASMwoCZ20YZyABKAsyJS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuR01IABI0ChFjb252ZXJzYXRpb25fc2VlZBhoIAEoCzIXLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRIABJFChpjb252ZXJzYXRpb25fc2VlZF9yZXNwb25zZRhpIAEoCzIfLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRSZXNwb25zZUgAGqwBCgdNZW50aW9uEg8KB3VzZXJfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEiwKCmF0X2NoYW5uZWwYZCABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABI5CgdhdF9yb2xlGGUgASgLMiYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Sb2xlTWVudGlvbkgAQhEKD21lbnRpb25CZWhhdmlvchoeCgtSb2xlTWVudGlvbhIPCgdyb2xlX2lkGAEgASgFGtIDCgpBdHRhY2htZW50EjkKBWltYWdlGGUgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASKwoMY2h1bmtlZE1lZGlhGGcgASgLMhMucml2ZXIuQ2h1bmtlZE1lZGlhSAASTQoPZW1iZWRkZWRNZXNzYWdlGGggASgLMjIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkVtYmVkZGVkTWVzc2FnZUgAEkUKC3VuZnVybGVkVXJsGGkgASgLMi4ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlVuZnVybGVkVVJMSAASOwoGdGlja2VyGGogASgLMikucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlRpY2tlckgAEj0KB21pbmlhcHAYayABKAsyKi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuTWluaWFwcEgAEj8KCGluZm9DYXJkGGwgASgLMisucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkSABCCQoHY29udGVudBrvFwoHQ29udGVudBqGAQoEVGV4dBIMCgRib2R5GAEgASgJEjQKCG1lbnRpb25zGAIgAygLMiIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5NZW50aW9uEjoKC2F0dGFjaG1lbnRzGAMgAygLMiUucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5BdHRhY2htZW50GqkCCgVJbWFnZRINCgV0aXRsZRgBIAEoCRI7CgRpbmZvGAIgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm8SRQoJdGh1bWJuYWlsGAMgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm9IAIgBARp/CgRJbmZvEgsKA3VybBgBIAEoCRIQCghtaW1ldHlwZRgCIAEoCRIRCgRzaXplGAMgASgFSACIAQESEgoFd2lkdGgYBCABKAVIAYgBARITCgZoZWlnaHQYBSABKAVIAogBAUIHCgVfc2l6ZUIICgZfd2lkdGhCCQoHX2hlaWdodEIMCgpfdGh1bWJuYWlsGjQKAkdNEhAKCHR5cGVfdXJsGAEgASgJEhIKBXZhbHVlGAIgASgMSACIAQFCCAoGX3ZhbHVlGr0ECg9FbWJlZGRlZE1lc3NhZ2USCwoDdXJsGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0EkUKBGluZm8YAyABKAsyNy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuRW1iZWRkZWRNZXNzYWdlLkluZm8SUQoKc3RhdGljSW5mbxgEIAEoCzI9LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5FbWJlZGRlZE1lc3NhZ2UuU3RhdGljSW5mbxqJAQoESW5mbxIOCgZ1c2VySWQYASABKAkSGAoQY3JlYXRlZEF0RXBvY2hNcxgCIAEoAxIPCgdzcGFjZUlkGAMgASgJEhEKCWNoYW5uZWxJZBgEIAEoCRIRCgltZXNzYWdlSWQYBSABKAkSFAoHcmVwbHlJZBgGIAEoCUgAiAEBQgoKCF9yZXBseUlkGswBCgpTdGF0aWNJbmZvEhUKCHVzZXJOYW1lGAEgASgJSACIAQESGAoLZGlzcGxheU5hbWUYAiABKAlIAYgBARIYCgtjaGFubmVsTmFtZRgDIAEoCUgCiAEBEhYKCXNwYWNlTmFtZRgEIAEoCUgDiAEBEhQKB2Vuc05hbWUYBSABKAlIBIgBAUILCglfdXNlck5hbWVCDgoMX2Rpc3BsYXlOYW1lQg4KDF9jaGFubmVsTmFtZUIMCgpfc3BhY2VOYW1lQgoKCF9lbnNOYW1lGscBCgtVbmZ1cmxlZFVSTBILCgN1cmwYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDQoFdGl0bGUYAyABKAkSSAoFaW1hZ2UYBCABKAsyNC5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVW5mdXJsZWRVUkwuSW1hZ2VIAIgBARozCgVJbWFnZRIOCgZoZWlnaHQYASABKAUSDQoFd2lkdGgYAiABKAUSCwoDdXJsGAMgASgJQggKBl9pbWFnZRorCgZUaWNrZXISDwoHYWRkcmVzcxgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRoWCgdNaW5pYXBwEgsKA3VybBgBIAEoCRqpDQoISW5mb0NhcmQSQAoFdGl0bGUYASABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWwSQQoGZmllbGRzGAIgAygLMjEucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkZpZWxkGuYDCgVMYWJlbBJJCgRpY29uGAEgASgOMjYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkljb25IAIgBARIMCgR0ZXh0GAIgASgJEksKBWJhZGdlGAMgASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlSAGIAQEayAEKBUJhZGdlEgwKBHRleHQYASABKAkSVQoHdmFyaWFudBgCIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQEiTgoHVmFyaWFudBIXChNWQVJJQU5UX1VOU1BFQ0lGSUVEEAASFAoQVkFSSUFOVF9QT1NJVElWRRABEhQKEFZBUklBTlRfTkVHQVRJVkUQAkIKCghfdmFyaWFudCJZCgRJY29uEhQKEElDT05fVU5TUEVDSUZJRUQQABIOCgpJQ09OX0NIRUNLEAESCgoGSUNPTl9YEAISEAoMSUNPTl9XQVJOSU5HEAMSDQoJSUNPTl9JTkZPEARCBwoFX2ljb25CCAoGX2JhZGdlGpwDCgVGaWVsZBISCgVsYWJlbBgBIAEoCUgBiAEBEkEKBHRleHQYCiABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWxIABJDCgR1c2VyGAsgASgLMjMucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLlVzZXJSZWZIABJICgV0b2tlbhgMIAEoCzI3LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5Ub2tlbkFtb3VudEgAEksKCGNvbnRyYWN0GA0gASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkNvbnRyYWN0UmVmSAASTQoLbWFya2V0X2l0ZW0YDiABKAsyNi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTWFya2V0SXRlbUgAQgcKBXZhbHVlQggKBl9sYWJlbBoaCgdVc2VyUmVmEg8KB3VzZXJfaWQYASABKAwaQAoLVG9rZW5BbW91bnQSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRIOCgZhbW91bnQYAyABKAkaMAoLQ29udHJhY3RSZWYSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRr/AwoKTWFya2V0SXRlbRIMCgRuYW1lGAEgASgJEg0KBXByaWNlGAIgASgJEhUKCGljb25fdXJsGAMgASgJSACIAQESFQoIc3VidGl0bGUYBCABKAlIAYgBARITCgZjaGFuZ2UYBSABKAlIAogBARIXCgpjaGFuZ2VfcGN0GAYgASgJSAOIAQESVwoJZGlyZWN0aW9uGAcgASgOMj8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlLlZhcmlhbnRIBIgBARJQCghvdXRjb21lcxgIIAMoCzI+LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5NYXJrZXRJdGVtLk91dGNvbWUaigEKB091dGNvbWUSDQoFbGFiZWwYASABKAkSDQoFdmFsdWUYAiABKAkSVQoHdmFyaWFudBgDIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQFCCgoIX3ZhcmlhbnRCCwoJX2ljb25fdXJsQgsKCV9zdWJ0aXRsZUIJCgdfY2hhbmdlQg0KC19jaGFuZ2VfcGN0QgwKCl9kaXJlY3Rpb25CCQoHY29udGVudEIMCgpfdGhyZWFkX2lkQhEKD190aHJlYWRfcHJldmlld0ILCglfcmVwbHlfaWRCEAoOX3JlcGx5X3ByZXZpZXdCCQoHcGF5bG9hZCJUCh5TcGVjaWFsaXN0Q2FwYWJpbGl0eUludm9jYXRpb24SEAoIYWdlbnRfaWQYASABKAwSDAoEbmFtZRgCIAEoCRISCgpwYXJhbWV0ZXJzGAMgASgJIjUKEkFnZW50UHJvcG9zYWxFcnJvchIQCghhZ2VudF9pZBgBIAEoDBINCgVlcnJvchgCIAEoCSLuAgoIUHJvcG9zYWwSCgoCaWQYASABKAkSFwoPdGFyZ2V0X2FnZW50X2lkGAIgASgMEhkKEXRhcmdldF9hZ2VudF9uYW1lGAMgASgJEhcKD2NhcGFiaWxpdHlfbmFtZRgEIAEoCRISCgpwYXJhbWV0ZXJzGAUgASgJEhMKC2V4cGxhbmF0aW9uGAYgASgJEhIKCmNvbmZpZGVuY2UYByABKAISFQoNZXhwaXJlc19hdF9tcxgIIAEoAxIQCgh3YXJuaW5ncxgJIAMoCRIdChBleHBlY3RlZF9vdXRjb21lGAogASgJSACIAQESDQoFdGl0bGUYCyABKAkSLwoIbWV0YWRhdGEYDCADKAsyHS5yaXZlci5Qcm9wb3NhbC5NZXRhZGF0YUVudHJ5Gi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUITChFfZXhwZWN0ZWRfb3V0Y29tZSKnAQoWQWdlbnRQcm9wb3NhbHNSZXNwb25zZRIiCglwcm9wb3NhbHMYASADKAsyDy5yaXZlci5Qcm9wb3NhbBIpCgZlcnJvcnMYAiADKAsyGS5yaXZlci5BZ2VudFByb3Bvc2FsRXJyb3ISFwoPcmVzcG9uZGVkX2F0X21zGAMgASgDEiUKBnN0YXR1cxgEIAEoDjIVLnJpdmVyLlByb3Bvc2FsU3RhdHVzIrkGChBDb252ZXJzYXRpb25TZWVkEgoKAmlkGAEgASgJEhUKDWNyZWF0ZWRfYXRfbXMYAiABKAMSGwoTcHJvcG9zYWxfdGltZW91dF9tcxgDIAEoAxIcChRjb25jaWVyZ2VfdGltZW91dF9tcxgEIAEoAxINCgVxdWVyeRgFIAEoCRIUCgdjb250ZXh0GAYgASgJSACIAQESGQoMZXh0ZXJuYWxfcmVmGAcgASgJSAGIAQESFAoMY29uY2llcmdlX2lkGAggASgMEhMKBnNvdXJjZRgJIAEoCUgCiAEBEjoKC2ludm9jYXRpb25zGAogAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEiEKGWludm9jYXRpb25zX3VwZGF0ZWRfYXRfbXMYCyABKAMSSQoScHJvcG9zYWxzX2J5X2FnZW50GAwgAygLMi0ucml2ZXIuQ29udmVyc2F0aW9uU2VlZC5Qcm9wb3NhbHNCeUFnZW50RW50cnkSFQoNcmVzcG9uc2VfdGV4dBgNIAEoCRIdChVzZWxlY3RlZF9wcm9wb3NhbF9pZHMYDiADKAkSHAoUY2xhcmlmeWluZ19xdWVzdGlvbnMYDyADKAkSIQoZY29uY2llcmdlX3Jlc3BvbmRlZF9hdF9tcxgQIAEoAxIWCg5zdGF0dXNfdXBkYXRlcxgRIAMoCRIiCglwcm9wb3NhbHMYEiADKAsyDy5yaXZlci5Qcm9wb3NhbBIaCg11c2VyX3RpbWV6b25lGBMgASgJSAOIAQESHgoWY29uY2llcmdlX2ZhaWxlZF9hdF9tcxgUIAEoAxpWChVQcm9wb3NhbHNCeUFnZW50RW50cnkSCwoDa2V5GAEgASgJEiwKBXZhbHVlGAIgASgLMh0ucml2ZXIuQWdlbnRQcm9wb3NhbHNSZXNwb25zZToCOAFCCgoIX2NvbnRleHRCDwoNX2V4dGVybmFsX3JlZkIJCgdfc291cmNlQhAKDl91c2VyX3RpbWV6b25lUhRhZGRpdGlvbmFsX3Byb3Bvc2Fsc1IPcHJvcG9zYWxfZXJyb3JzUgpjcmVhdGVkX2F0IrIBChhDb252ZXJzYXRpb25TZWVkUmVzcG9uc2USDwoHc2VlZF9pZBgBIAEoCRIqCgRzZWVkGAIgASgLMhcucml2ZXIuQ29udmVyc2F0aW9uU2VlZEgBiAEBEiwKEXNlbGVjdGVkX3Byb3Bvc2FsGGQgASgLMg8ucml2ZXIuUHJvcG9zYWxIABIWCgx1c2VyX21lc3NhZ2UYZSABKAlIAEIKCghyZXNwb25zZUIHCgVfc2VlZCJjChFDaGFubmVsUHJvcGVydGllcxIMCgRuYW1lGAEgASgJEg0KBXRvcGljGAIgASgJEicKBWltYWdlGAMgASgLMhMucml2ZXIuQ2h1bmtlZE1lZGlhSACIAQFCCAoGX2ltYWdlImgKFlVzZXJNZXRhZGF0YVByb3BlcnRpZXMSFQoIdXNlcm5hbWUYASABKAlIAIgBARIZCgxkaXNwbGF5X25hbWUYAiABKAlIAYgBAUILCglfdXNlcm5hbWVCDwoNX2Rpc3BsYXlfbmFtZSKIAwoQRnVsbHlSZWFkTWFya2VycxI1CgdtYXJrZXJzGAEgAygLMiQucml2ZXIuRnVsbHlSZWFkTWFya2Vycy5NYXJrZXJzRW50cnka6wEKB0NvbnRlbnQSEgoKY2hhbm5lbF9pZBgBIAEoCRIdChB0aHJlYWRfcGFyZW50X2lkGAIgASgJSACIAQESEAoIZXZlbnRfaWQYAyABKAkSEQoJZXZlbnRfbnVtGAQgASgDEhsKE2JlZ2luX3VucmVhZF93aW5kb3cYBSABKAMSGQoRZW5kX3VucmVhZF93aW5kb3cYBiABKAMSEQoJaXNfdW5yZWFkGAcgASgIEhYKDm1hcmtlZFJlYWRBdFRzGAggASgDEhAKCG1lbnRpb25zGAkgASgFQhMKEV90aHJlYWRfcGFyZW50X2lkGk8KDE1hcmtlcnNFbnRyeRILCgNrZXkYASABKAkSLgoFdmFsdWUYAiABKAsyHy5yaXZlci5GdWxseVJlYWRNYXJrZXJzLkNvbnRlbnQ6AjgBIhsKC1Nlc3Npb25LZXlzEgwKBGtleXMYASADKAkiegoVSHlicmlkR3JvdXBTZXNzaW9uS2V5EhIKCnNlc3Npb25faWQYASABKAwSEQoJc3RyZWFtX2lkGAIgASgMEgsKA2tleRgDIAEoDBIVCg1taW5pYmxvY2tfbnVtGAQgASgDEhYKDm1pbmlibG9ja19oYXNoGAUgASgMIm0KCU1lZGlhSW5mbxIQCghtaW1ldHlwZRgBIAEoCRIRCglzaXplQnl0ZXMYAiABKAMSEwoLd2lkdGhQaXhlbHMYAyABKAUSFAoMaGVpZ2h0UGl4ZWxzGAQgASgFEhAKCGZpbGVuYW1lGAUgASgJIkAKDUVtYmVkZGVkTWVkaWESHgoEaW5mbxgBIAEoCzIQLnJpdmVyLk1lZGlhSW5mbxIPCgdjb250ZW50GAIgASgMIs4BCgxDaHVua2VkTWVkaWESHgoEaW5mbxgBIAEoCzIQLnJpdmVyLk1lZGlhSW5mbxIQCghzdHJlYW1JZBgCIAEoCRInCgl0aHVtYm5haWwYAyABKAsyFC5yaXZlci5FbWJlZGRlZE1lZGlhEiwKBmFlc2djbRhlIAEoCzIaLnJpdmVyLkNodW5rZWRNZWRpYS5BRVNHQ01IABonCgZBRVNHQ00SCgoCaXYYASABKAwSEQoJc2VjcmV0S2V5GAIgASgMQgwKCmVuY3J5cHRpb24iUAoHVXNlckJpbxILCgNiaW8YASABKAkSIAoTdXBkYXRlZF9hdF9lcG9jaF9tcxgCIAEoBEgAiAEBQhYKFF91cGRhdGVkX2F0X2Vwb2NoX21zIloKC0JlYXJlclRva2VuEhwKFGRlbGVnYXRlX3ByaXZhdGVfa2V5GAEgASgJEhQKDGRlbGVnYXRlX3NpZxgCIAEoDBIXCg9leHBpcnlfZXBvY2hfbXMYAyABKAMirgMKDkV4cG9ydGVkRGV2aWNlEhEKCXBpY2tsZUtleRgBIAEoCRIWCg5waWNrbGVkQWNjb3VudBgCIAEoCRI8ChBvdXRib3VuZFNlc3Npb25zGAMgAygLMiIucml2ZXIuRXhwb3J0ZWREZXZpY2UuR3JvdXBTZXNzaW9uEjsKD2luYm91bmRTZXNzaW9ucxgEIAMoCzIiLnJpdmVyLkV4cG9ydGVkRGV2aWNlLkdyb3VwU2Vzc2lvbhJFChNoeWJyaWRHcm91cFNlc3Npb25zGAUgAygLMigucml2ZXIuRXhwb3J0ZWREZXZpY2UuSHlicmlkR3JvdXBTZXNzaW9uGkYKDEdyb3VwU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhEKCXN0cmVhbV9pZBgCIAEoCRIPCgdzZXNzaW9uGAMgASgJGmcKEkh5YnJpZEdyb3VwU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhEKCXN0cmVhbV9pZBgCIAEoCRITCgtzZXNzaW9uX2tleRgDIAEoDBIVCg1taW5pYmxvY2tfbnVtGAQgASgDIqEBCg5BcHBQcml2YXRlRGF0YRITCgtwcml2YXRlX2tleRgBIAEoCRIwChFlbmNyeXB0aW9uX2RldmljZRgCIAEoCzIVLnJpdmVyLkV4cG9ydGVkRGV2aWNlEgsKA2VudhgDIAEoCRITCgthcHBfYWRkcmVzcxgEIAEoDBIXCgpqd3Rfc2VjcmV0GAUgASgMSACIAQFCDQoLX2p3dF9zZWNyZXQqswEKFkNvbnZlcnNhdGlvblNlZWRTdGF0dXMSKAokQ09OVkVSU0FUSU9OX1NFRURfU1RBVFVTX1VOU1BFQ0lGSUVEEAASJgoiQ09OVkVSU0FUSU9OX1NFRURfU1RBVFVTX05PVF9SRUFEWRABEiIKHkNPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19SRUFEWRACEiMKH0NPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19GQUlMRUQQAyqoAQoOUHJvcG9zYWxTdGF0dXMSHwobUFJPUE9TQUxfU1RBVFVTX1VOU1BFQ0lGSUVEEAASGwoXUFJPUE9TQUxfU1RBVFVTX1BFTkRJTkcQARIdChlQUk9QT1NBTF9TVEFUVVNfRlVMRklMTEVEEAISGgoWUFJPUE9TQUxfU1RBVFVTX0ZBSUxFRBADEh0KGVBST1BPU0FMX1NUQVRVU19USU1FRF9PVVQQBEI0WjJnaXRodWIuY29tL3Rvd25zLXByb3RvY29sL3Rvd25zL2NvcmUvbm9kZS9wcm90b2NvbGIGcHJvdG8z", [import_wkt.file_google_protobuf_empty]);
7568
7567
  var ChannelMessageSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 0);
7569
7568
  var ChannelMessage_Post_Content_InfoCard_Label_Badge_Variant;
7570
7569
  (function(ChannelMessage_Post_Content_InfoCard_Label_Badge_Variant2) {
@@ -7609,7 +7608,7 @@ var ProposalStatus;
7609
7608
  // ../proto/dist/gen/protocol_pb.js
7610
7609
  var import_codegenv22 = require("@bufbuild/protobuf/codegenv2");
7611
7610
  var import_wkt2 = require("@bufbuild/protobuf/wkt");
7612
- var file_protocol = /* @__PURE__ */ (0, import_codegenv22.fileDesc)("Cg5wcm90b2NvbC5wcm90bxIFcml2ZXIiXgoJTWluaWJsb2NrEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEh8KBmhlYWRlchgCIAEoCzIPLnJpdmVyLkVudmVsb3BlEg8KB3BhcnRpYWwYAyABKAgiOgoIRW52ZWxvcGUSDAoEaGFzaBgBIAEoDBIRCglzaWduYXR1cmUYAiABKAwSDQoFZXZlbnQYAyABKAwi1wYKC1N0cmVhbUV2ZW50EhcKD2NyZWF0b3JfYWRkcmVzcxgBIAEoDBIUCgxkZWxlZ2F0ZV9zaWcYAiABKAwSDAoEc2FsdBgDIAEoDBIgChNwcmV2X21pbmlibG9ja19oYXNoGAQgASgMSAGIAQESGwoTY3JlYXRlZF9hdF9lcG9jaF9tcxgFIAEoAxIgChhkZWxlZ2F0ZV9leHBpcnlfZXBvY2hfbXMYBiABKAMSGQoEdGFncxgHIAEoCzILLnJpdmVyLlRhZ3MSHwoScHJldl9taW5pYmxvY2tfbnVtGAggASgDSAKIAQESEQoJZXBoZW1lcmFsGAkgASgIEhsKE2NyZWF0ZWRfYXRfdGltZXpvbmUYCiABKAkSMgoQbWluaWJsb2NrX2hlYWRlchhkIAEoCzIWLnJpdmVyLk1pbmlibG9ja0hlYWRlckgAEi4KDm1lbWJlcl9wYXlsb2FkGGUgASgLMhQucml2ZXIuTWVtYmVyUGF5bG9hZEgAEioKDHVzZXJfcGF5bG9hZBhoIAEoCzISLnJpdmVyLlVzZXJQYXlsb2FkSAASOwoVdXNlcl9zZXR0aW5nc19wYXlsb2FkGGkgASgLMhoucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZEgAEjsKFXVzZXJfbWV0YWRhdGFfcGF5bG9hZBhqIAEoCzIaLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWRIABI1ChJ1c2VyX2luYm94X3BheWxvYWQYayABKAsyFy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkSAASLAoNbWVkaWFfcGF5bG9hZBhsIAEoCzITLnJpdmVyLk1lZGlhUGF5bG9hZEgAEjcKE2dkbV9jaGFubmVsX3BheWxvYWQYbiABKAsyGC5yaXZlci5HZG1DaGFubmVsUGF5bG9hZEgAQgkKB3BheWxvYWRCFgoUX3ByZXZfbWluaWJsb2NrX2hhc2hCFQoTX3ByZXZfbWluaWJsb2NrX251bUoECGYQZ0oECGcQaEoECG0QbkoECG8QcFINc3BhY2VfcGF5bG9hZFIPY2hhbm5lbF9wYXlsb2FkUhJkbV9jaGFubmVsX3BheWxvYWRSEG1ldGFkYXRhX3BheWxvYWQizwIKD01pbmlibG9ja0hlYWRlchIVCg1taW5pYmxvY2tfbnVtGAEgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYAiABKAwSLQoJdGltZXN0YW1wGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIUCgxldmVudF9oYXNoZXMYBCADKAwSGAoQZXZlbnRfbnVtX29mZnNldBgGIAEoAxIjChtwcmV2X3NuYXBzaG90X21pbmlibG9ja19udW0YByABKAMSGgoNc25hcHNob3RfaGFzaBgIIAEoDEgBiAEBEh0KFXJlamVjdGVkX2V2ZW50X2hhc2hlcxgJIAMoDBImCgRub25lGGQgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABCCQoHY29udGVudEIQCg5fc25hcHNob3RfaGFzaEoECAUQBiLcFAoNTWVtYmVyUGF5bG9hZBI1CgptZW1iZXJzaGlwGAEgASgLMh8ucml2ZXIuTWVtYmVyUGF5bG9hZC5NZW1iZXJzaGlwSAASQAoQa2V5X3NvbGljaXRhdGlvbhgCIAEoCzIkLnJpdmVyLk1lbWJlclBheWxvYWQuS2V5U29saWNpdGF0aW9uSAASPgoPa2V5X2Z1bGZpbGxtZW50GAMgASgLMiMucml2ZXIuTWVtYmVyUGF5bG9hZC5LZXlGdWxmaWxsbWVudEgAEicKA3BpbhgIIAEoCzIYLnJpdmVyLk1lbWJlclBheWxvYWQuUGluSAASKwoFdW5waW4YCSABKAsyGi5yaXZlci5NZW1iZXJQYXlsb2FkLlVucGluSAASWQodbWVtYmVyX2Jsb2NrY2hhaW5fdHJhbnNhY3Rpb24YCyABKAsyMC5yaXZlci5NZW1iZXJQYXlsb2FkLk1lbWJlckJsb2NrY2hhaW5UcmFuc2FjdGlvbkgAEkgKFGVuY3J5cHRpb25fYWxnb3JpdGhtGAwgASgLMigucml2ZXIuTWVtYmVyUGF5bG9hZC5FbmNyeXB0aW9uQWxnb3JpdGhtSAASPQoPc2V0X2FwcF9hZGRyZXNzGA0gASgLMiIucml2ZXIuTWVtYmVyUGF5bG9hZC5TZXRBcHBBZGRyZXNzSAASQQoRdW5zZXRfYXBwX2FkZHJlc3MYDiABKAsyJC5yaXZlci5NZW1iZXJQYXlsb2FkLlVuc2V0QXBwQWRkcmVzc0gAGvcICghTbmFwc2hvdBI0CgZqb2luZWQYASADKAsyJC5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlchItCgRwaW5zGAIgAygLMh8ucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwcGVkUGluEkYKFGVuY3J5cHRpb25fYWxnb3JpdGhtGAQgASgLMigucml2ZXIuTWVtYmVyUGF5bG9hZC5FbmNyeXB0aW9uQWxnb3JpdGhtEjUKBHRpcHMYBSADKAsyJy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNFbnRyeRJACgp0aXBzX2NvdW50GAYgAygLMiwucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5UaXBzQ291bnRFbnRyeRrfBQoGTWVtYmVyEhQKDHVzZXJfYWRkcmVzcxgBIAEoDBIVCg1taW5pYmxvY2tfbnVtGAIgASgDEhEKCWV2ZW50X251bRgDIAEoAxI7Cg1zb2xpY2l0YXRpb25zGAQgAygLMiQucml2ZXIuTWVtYmVyUGF5bG9hZC5LZXlTb2xpY2l0YXRpb24SRQoJdGlwc19zZW50GAkgAygLMjIucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1NlbnRFbnRyeRJNCg10aXBzX3JlY2VpdmVkGAogAygLMjYucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1JlY2VpdmVkRW50cnkSUAoPdGlwc19zZW50X2NvdW50GAsgAygLMjcucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1NlbnRDb3VudEVudHJ5ElgKE3RpcHNfcmVjZWl2ZWRfY291bnQYDCADKAsyOy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlci5UaXBzUmVjZWl2ZWRDb3VudEVudHJ5EhgKC2FwcF9hZGRyZXNzGA0gASgMSACIAQEaLwoNVGlwc1NlbnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBGjMKEVRpcHNSZWNlaXZlZEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaNAoSVGlwc1NlbnRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaOAoWVGlwc1JlY2VpdmVkQ291bnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBQg4KDF9hcHBfYWRkcmVzc0oECAUQBkoECAYQB0oECAcQCEoECAgQCRorCglUaXBzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARowCg5UaXBzQ291bnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBSgQIAxAEGoMCCgpNZW1iZXJzaGlwEh8KAm9wGAEgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEhQKDHVzZXJfYWRkcmVzcxgCIAEoDBIZChFpbml0aWF0b3JfYWRkcmVzcxgDIAEoDBInCgZyZWFzb24YBSABKA4yFy5yaXZlci5NZW1iZXJzaGlwUmVhc29uEhgKC2FwcF9hZGRyZXNzGAYgASgMSACIAQESNwoOaW52aXRlX3BheWxvYWQYByABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkSAGIAQFCDgoMX2FwcF9hZGRyZXNzQhEKD19pbnZpdGVfcGF5bG9hZEoECAQQBRpnCg9LZXlTb2xpY2l0YXRpb24SEgoKZGV2aWNlX2tleRgBIAEoCRIUCgxmYWxsYmFja19rZXkYAiABKAkSFQoNaXNfbmV3X2RldmljZRgDIAEoCBITCgtzZXNzaW9uX2lkcxgEIAMoCRpPCg5LZXlGdWxmaWxsbWVudBIUCgx1c2VyX2FkZHJlc3MYASABKAwSEgoKZGV2aWNlX2tleRgCIAEoCRITCgtzZXNzaW9uX2lkcxgDIAMoCRpMCgpTbmFwcGVkUGluEhcKD2NyZWF0b3JfYWRkcmVzcxgBIAEoDBIlCgNwaW4YAiABKAsyGC5yaXZlci5NZW1iZXJQYXlsb2FkLlBpbho6CgNQaW4SEAoIZXZlbnRfaWQYASABKAwSIQoFZXZlbnQYAiABKAsyEi5yaXZlci5TdHJlYW1FdmVudBoZCgVVbnBpbhIQCghldmVudF9pZBgBIAEoDBo7ChNFbmNyeXB0aW9uQWxnb3JpdGhtEhYKCWFsZ29yaXRobRgBIAEoCUgAiAEBQgwKCl9hbGdvcml0aG0aawobTWVtYmVyQmxvY2tjaGFpblRyYW5zYWN0aW9uEjEKC3RyYW5zYWN0aW9uGAEgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uEhkKEWZyb21fdXNlcl9hZGRyZXNzGAIgASgMGjoKDVNldEFwcEFkZHJlc3MSFAoMdXNlcl9hZGRyZXNzGAEgASgMEhMKC2FwcF9hZGRyZXNzGAIgASgMGicKD1Vuc2V0QXBwQWRkcmVzcxIUCgx1c2VyX2FkZHJlc3MYASABKAxCCQoHY29udGVudEoECAQQBUoECAUQBkoECAYQB0oECAcQCEoECAoQCyLwBAoRR2RtQ2hhbm5lbFBheWxvYWQSNwoJaW5jZXB0aW9uGAEgASgLMiIucml2ZXIuR2RtQ2hhbm5lbFBheWxvYWQuSW5jZXB0aW9uSAASJwoHbWVzc2FnZRgCIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGFIABIyChJjaGFubmVsX3Byb3BlcnRpZXMYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASJgoGY3VzdG9tGAQgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueUgAEiUKCXJlZGFjdGlvbhgFIAEoCzIQLnJpdmVyLlJlZGFjdGlvbkgAEjgKE2ludGVyYWN0aW9uX3JlcXVlc3QYBiABKAsyGS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RIABI6ChRpbnRlcmFjdGlvbl9yZXNwb25zZRgHIAEoCzIaLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VIABp6CghTbmFwc2hvdBI1CglpbmNlcHRpb24YASABKAsyIi5yaXZlci5HZG1DaGFubmVsUGF5bG9hZC5JbmNlcHRpb24SNwoSY2hhbm5lbF9wcm9wZXJ0aWVzGAIgASgLMhsucml2ZXIuV3JhcHBlZEVuY3J5cHRlZERhdGEaeQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIwChJjaGFubmVsX3Byb3BlcnRpZXMYAiABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhEicKCHNldHRpbmdzGAMgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3NCCQoHY29udGVudCKFDQoLVXNlclBheWxvYWQSMQoJaW5jZXB0aW9uGAEgASgLMhwucml2ZXIuVXNlclBheWxvYWQuSW5jZXB0aW9uSAASPAoPdXNlcl9tZW1iZXJzaGlwGAIgASgLMiEucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBIABJJChZ1c2VyX21lbWJlcnNoaXBfYWN0aW9uGAMgASgLMicucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBBY3Rpb25IABI+ChZibG9ja2NoYWluX3RyYW5zYWN0aW9uGAQgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uSAASWwofcmVjZWl2ZWRfYmxvY2tjaGFpbl90cmFuc2FjdGlvbhgFIAEoCzIwLnJpdmVyLlVzZXJQYXlsb2FkLlJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uSAAa5wQKCFNuYXBzaG90Ei8KCWluY2VwdGlvbhgBIAEoCzIcLnJpdmVyLlVzZXJQYXlsb2FkLkluY2VwdGlvbhI2CgttZW1iZXJzaGlwcxgCIAMoCzIhLnJpdmVyLlVzZXJQYXlsb2FkLlVzZXJNZW1iZXJzaGlwEjwKCXRpcHNfc2VudBgDIAMoCzIpLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50RW50cnkSRAoNdGlwc19yZWNlaXZlZBgEIAMoCzItLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNSZWNlaXZlZEVudHJ5EkcKD3RpcHNfc2VudF9jb3VudBgFIAMoCzIuLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50Q291bnRFbnRyeRJPChN0aXBzX3JlY2VpdmVkX2NvdW50GAYgAygLMjIucml2ZXIuVXNlclBheWxvYWQuU25hcHNob3QuVGlwc1JlY2VpdmVkQ291bnRFbnRyeRovCg1UaXBzU2VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaMwoRVGlwc1JlY2VpdmVkRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo0ChJUaXBzU2VudENvdW50RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo4ChZUaXBzUmVjZWl2ZWRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEapwEKCUluY2VwdGlvbhIRCglzdHJlYW1faWQYASABKAwSJwoIc2V0dGluZ3MYAiABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIYCgthcHBfYWRkcmVzcxgDIAEoDEgAiAEBEh4KEWFwcF9vd25lcl9hZGRyZXNzGAQgASgMSAGIAQFCDgoMX2FwcF9hZGRyZXNzQhQKEl9hcHBfb3duZXJfYWRkcmVzcxrxAQoOVXNlck1lbWJlcnNoaXASEQoJc3RyZWFtX2lkGAEgASgMEh8KAm9wGAIgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEhQKB2ludml0ZXIYAyABKAxIAIgBARIsCgZyZWFzb24YBSABKA4yFy5yaXZlci5NZW1iZXJzaGlwUmVhc29uSAGIAQESNwoOaW52aXRlX3BheWxvYWQYBiABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkSAKIAQFCCgoIX2ludml0ZXJCCQoHX3JlYXNvbkIRCg9faW52aXRlX3BheWxvYWRKBAgEEAUamgEKFFVzZXJNZW1iZXJzaGlwQWN0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIPCgd1c2VyX2lkGAIgASgMEh8KAm9wGAMgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEiwKBnJlYXNvbhgFIAEoDjIXLnJpdmVyLk1lbWJlcnNoaXBSZWFzb25IAIgBAUIJCgdfcmVhc29uSgQIBBAFGm0KHVJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uEjEKC3RyYW5zYWN0aW9uGAEgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uEhkKEWZyb21fdXNlcl9hZGRyZXNzGAIgASgMQgkKB2NvbnRlbnQi2gcKEFVzZXJJbmJveFBheWxvYWQSNgoJaW5jZXB0aW9uGAEgASgLMiEucml2ZXIuVXNlckluYm94UGF5bG9hZC5JbmNlcHRpb25IABIqCgNhY2sYAiABKAsyGy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkFja0gAElQKGWdyb3VwX2VuY3J5cHRpb25fc2Vzc2lvbnMYAyABKAsyLy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkdyb3VwRW5jcnlwdGlvblNlc3Npb25zSAAargIKCFNuYXBzaG90EjQKCWluY2VwdGlvbhgBIAEoCzIhLnJpdmVyLlVzZXJJbmJveFBheWxvYWQuSW5jZXB0aW9uEksKDmRldmljZV9zdW1tYXJ5GAIgAygLMjMucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5RW50cnkaOQoNRGV2aWNlU3VtbWFyeRITCgtsb3dlcl9ib3VuZBgBIAEoAxITCgt1cHBlcl9ib3VuZBgCIAEoAxpkChJEZXZpY2VTdW1tYXJ5RW50cnkSCwoDa2V5GAEgASgJEj0KBXZhbHVlGAIgASgLMi4ucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5OgI4ARqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGvMBChdHcm91cEVuY3J5cHRpb25TZXNzaW9ucxIRCglzdHJlYW1faWQYASABKAwSEgoKc2VuZGVyX2tleRgCIAEoCRITCgtzZXNzaW9uX2lkcxgDIAMoCRJVCgtjaXBoZXJ0ZXh0cxgEIAMoCzJALnJpdmVyLlVzZXJJbmJveFBheWxvYWQuR3JvdXBFbmNyeXB0aW9uU2Vzc2lvbnMuQ2lwaGVydGV4dHNFbnRyeRIRCglhbGdvcml0aG0YBSABKAkaMgoQQ2lwaGVydGV4dHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGjAKA0FjaxISCgpkZXZpY2Vfa2V5GAEgASgJEhUKDW1pbmlibG9ja19udW0YAiABKANCCQoHY29udGVudCLBBwoTVXNlclNldHRpbmdzUGF5bG9hZBI5CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbkgAEkkKEmZ1bGx5X3JlYWRfbWFya2VycxgCIAEoCzIrLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuRnVsbHlSZWFkTWFya2Vyc0gAEjoKCnVzZXJfYmxvY2sYAyABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLlVzZXJCbG9ja0gAGuwCCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbhJHChJmdWxseV9yZWFkX21hcmtlcnMYAiADKAsyKy5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkZ1bGx5UmVhZE1hcmtlcnMSSAoQdXNlcl9ibG9ja3NfbGlzdBgDIAMoCzIuLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2NrcxqTAQoKVXNlckJsb2NrcxIPCgd1c2VyX2lkGAEgASgMEkQKBmJsb2NrcxgCIAMoCzI0LnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2Nrcy5CbG9jaxouCgVCbG9jaxISCgppc19ibG9ja2VkGAEgASgIEhEKCWV2ZW50X251bRgCIAEoAxqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGh0KDU1hcmtlckNvbnRlbnQSDAoEZGF0YRgBIAEoCRpgChBGdWxseVJlYWRNYXJrZXJzEhEKCXN0cmVhbV9pZBgBIAEoDBI5Cgdjb250ZW50GAIgASgLMigucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5NYXJrZXJDb250ZW50GkMKCVVzZXJCbG9jaxIPCgd1c2VyX2lkGAEgASgMEhIKCmlzX2Jsb2NrZWQYAiABKAgSEQoJZXZlbnRfbnVtGAMgASgDQgkKB2NvbnRlbnQizgUKE1VzZXJNZXRhZGF0YVBheWxvYWQSOQoJaW5jZXB0aW9uGAEgASgLMiQucml2ZXIuVXNlck1ldGFkYXRhUGF5bG9hZC5JbmNlcHRpb25IABJIChFlbmNyeXB0aW9uX2RldmljZRgCIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZUgAEi0KDXByb2ZpbGVfaW1hZ2UYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASIwoDYmlvGAQgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YUgAGuoBCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkluY2VwdGlvbhJHChJlbmNyeXB0aW9uX2RldmljZXMYAiADKAsyKy5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkVuY3J5cHRpb25EZXZpY2USMgoNcHJvZmlsZV9pbWFnZRgDIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhEigKA2JpbxgEIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhGqcBCglJbmNlcHRpb24SEQoJc3RyZWFtX2lkGAEgASgMEicKCHNldHRpbmdzGAIgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3MSGAoLYXBwX2FkZHJlc3MYAyABKAxIAIgBARIeChFhcHBfb3duZXJfYWRkcmVzcxgEIAEoDEgBiAEBQg4KDF9hcHBfYWRkcmVzc0IUChJfYXBwX293bmVyX2FkZHJlc3MaPAoQRW5jcnlwdGlvbkRldmljZRISCgpkZXZpY2Vfa2V5GAEgASgJEhQKDGZhbGxiYWNrX2tleRgCIAEoCUIJCgdjb250ZW50IoQECgxNZWRpYVBheWxvYWQSMgoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbkgAEioKBWNodW5rGAIgASgLMhkucml2ZXIuTWVkaWFQYXlsb2FkLkNodW5rSAAaPAoIU25hcHNob3QSMAoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbhqGAgoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIXCgpjaGFubmVsX2lkGAIgASgMSACIAQESEwoLY2h1bmtfY291bnQYAyABKAUSJwoIc2V0dGluZ3MYBCABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIVCghzcGFjZV9pZBgFIAEoDEgBiAEBEhQKB3VzZXJfaWQYBiABKAxIAogBARIhChRwZXJfY2h1bmtfZW5jcnlwdGlvbhgHIAEoCEgDiAEBQg0KC19jaGFubmVsX2lkQgsKCV9zcGFjZV9pZEIKCghfdXNlcl9pZEIXChVfcGVyX2NodW5rX2VuY3J5cHRpb24aQgoFQ2h1bmsSDAoEZGF0YRgBIAEoDBITCgtjaHVua19pbmRleBgCIAEoBRIPCgJpdhgDIAEoDEgAiAEBQgUKA19pdkIJCgdjb250ZW50IrcECghTbmFwc2hvdBIuCgdtZW1iZXJzGAEgASgLMh0ucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdBIYChBzbmFwc2hvdF92ZXJzaW9uGAIgASgFEjMKDHVzZXJfY29udGVudBhnIAEoCzIbLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90SAASRAoVdXNlcl9zZXR0aW5nc19jb250ZW50GGggASgLMiMucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5TbmFwc2hvdEgAEkQKFXVzZXJfbWV0YWRhdGFfY29udGVudBhpIAEoCzIjLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuU25hcHNob3RIABI1Cg1tZWRpYV9jb250ZW50GGogASgLMhwucml2ZXIuTWVkaWFQYXlsb2FkLlNuYXBzaG90SAASQAoTZ2RtX2NoYW5uZWxfY29udGVudBhsIAEoCzIhLnJpdmVyLkdkbUNoYW5uZWxQYXlsb2FkLlNuYXBzaG90SAASPgoSdXNlcl9pbmJveF9jb250ZW50GG0gASgLMiAucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdEgAQgkKB2NvbnRlbnRKBAhlEGZKBAhmEGdKBAhrEGxKBAhuEG9SDXNwYWNlX2NvbnRlbnRSD2NoYW5uZWxfY29udGVudFISZG1fY2hhbm5lbF9jb250ZW50UhBtZXRhZGF0YV9jb250ZW50IrcHChVCbG9ja2NoYWluVHJhbnNhY3Rpb24SNAoHcmVjZWlwdBgBIAEoCzIjLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQSQQoOc29sYW5hX3JlY2VpcHQYAiABKAsyKS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Ei8KA3RpcBhlIAEoCzIgLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXBIABJECg50b2tlbl90cmFuc2ZlchhmIAEoCzIqLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5Ub2tlblRyYW5zZmVySAASQAoMc3BhY2VfcmV2aWV3GGcgASgLMigucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3SAAa7QEKA1RpcBI1CgVldmVudBgBIAEoCzImLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXAuRXZlbnQSFQoNdG9Vc2VyQWRkcmVzcxgCIAEoDBqXAQoFRXZlbnQSFQoIdG9rZW5faWQYASABKARIAIgBARIQCghjdXJyZW5jeRgCIAEoDBIOCgZzZW5kZXIYAyABKAwSEAoIcmVjZWl2ZXIYBCABKAwSDgoGYW1vdW50GAUgASgEEhIKCm1lc3NhZ2VfaWQYBiABKAwSEgoKY2hhbm5lbF9pZBgHIAEoDEILCglfdG9rZW5faWQaeAoNVG9rZW5UcmFuc2ZlchIPCgdhZGRyZXNzGAEgASgMEg4KBmFtb3VudBgCIAEoCRIOCgZzZW5kZXIYAyABKAwSEgoKbWVzc2FnZV9pZBgEIAEoDBISCgpjaGFubmVsX2lkGAUgASgMEg4KBmlzX2J1eRgGIAEoCBr2AQoLU3BhY2VSZXZpZXcSFQoNc3BhY2VfYWRkcmVzcxgBIAEoDBI/CgZhY3Rpb24YAiABKA4yLy5yaXZlci5CbG9ja2NoYWluVHJhbnNhY3Rpb24uU3BhY2VSZXZpZXcuQWN0aW9uEj0KBWV2ZW50GAMgASgLMi4ucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3LkV2ZW50GiUKBUV2ZW50EgwKBHVzZXIYASABKAwSDgoGcmF0aW5nGAIgASgFIikKBkFjdGlvbhIHCgNBZGQQABIKCgZVcGRhdGUQARIKCgZEZWxldGUQAkIJCgdjb250ZW50IucBChxCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EhAKCGNoYWluX2lkGAEgASgEEhgKEHRyYW5zYWN0aW9uX2hhc2gYAiABKAwSFAoMYmxvY2tfbnVtYmVyGAMgASgEEgoKAnRvGAQgASgMEgwKBGZyb20YBSABKAwSNQoEbG9ncxgGIAMoCzInLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQuTG9nGjQKA0xvZxIPCgdhZGRyZXNzGAEgASgMEg4KBnRvcGljcxgCIAMoDBIMCgRkYXRhGAMgASgMItcECiJTb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EgwKBHNsb3QYASABKAQSSgoLdHJhbnNhY3Rpb24YAiABKAsyNS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0LlRyYW5zYWN0aW9uEjwKBG1ldGEYAyABKAsyLi5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEaIQoLVHJhbnNhY3Rpb24SEgoKc2lnbmF0dXJlcxgBIAMoCRr1AgoETWV0YRJXChJwcmVfdG9rZW5fYmFsYW5jZXMYASADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlElgKE3Bvc3RfdG9rZW5fYmFsYW5jZXMYAiADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlGrkBCgxUb2tlbkJhbGFuY2USDAoEbWludBgBIAEoCRINCgVvd25lchgCIAEoCRJZCgZhbW91bnQYAyABKAsySS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlLlVJVG9rZW5BbW91bnQaMQoNVUlUb2tlbkFtb3VudBIOCgZhbW91bnQYASABKAkSEAoIZGVjaW1hbHMYAiABKA0iPgoIRXZlbnRSZWYSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGhhc2gYAiABKAwSEQoJc2lnbmF0dXJlGAMgASgMIkoKDlN0cmVhbVNldHRpbmdzEiIKGmRpc2FibGVfbWluaWJsb2NrX2NyZWF0aW9uGAEgASgIEhQKDGxpZ2h0X3N0cmVhbRgCIAEoCCLQAgoNRW5jcnlwdGVkRGF0YRISCgpjaXBoZXJ0ZXh0GAEgASgJEhEKCWFsZ29yaXRobRgCIAEoCRISCgpzZW5kZXJfa2V5GAMgASgJEhIKCnNlc3Npb25faWQYBCABKAkSFQoIY2hlY2tzdW0YBSABKAlIAIgBARIZCgxyZWZfZXZlbnRfaWQYBiABKAlIAYgBARIYChBjaXBoZXJ0ZXh0X2J5dGVzGAggASgMEhAKCGl2X2J5dGVzGAkgASgMEhgKEHNlc3Npb25faWRfYnl0ZXMYCiABKAwSLAoHdmVyc2lvbhgLIAEoDjIbLnJpdmVyLkVuY3J5cHRlZERhdGFWZXJzaW9uEhcKCmRldmljZV9rZXkYDCABKAlIAogBAUILCglfY2hlY2tzdW1CDwoNX3JlZl9ldmVudF9pZEINCgtfZGV2aWNlX2tleUoECAcQCCJhChRXcmFwcGVkRW5jcnlwdGVkRGF0YRIiCgRkYXRhGAEgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIRCglldmVudF9udW0YAiABKAMSEgoKZXZlbnRfaGFzaBgDIAEoDCJuCgpTeW5jQ29va2llEhQKDG5vZGVfYWRkcmVzcxgBIAEoDBIRCglzdHJlYW1faWQYAiABKAwSFAoMbWluaXBvb2xfZ2VuGAMgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYBSABKAxKBAgEEAUiXQoOQ3JlYXRpb25Db29raWUSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW1pbmlibG9ja19udW0YAyABKAMSGwoTcHJldl9taW5pYmxvY2tfaGFzaBgEIAEoDEoECAIQAyLwAQoPU3RyZWFtQW5kQ29va2llEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEisKEG5leHRfc3luY19jb29raWUYAiABKAsyES5yaXZlci5TeW5jQ29va2llEiQKCm1pbmlibG9ja3MYAyADKAsyEC5yaXZlci5NaW5pYmxvY2sSEgoKc3luY19yZXNldBgEIAEoCBImCghzbmFwc2hvdBgFIAEoCzIPLnJpdmVyLkVudmVsb3BlSACIAQESIAoYc25hcHNob3RfbWluaWJsb2NrX2luZGV4GAYgASgDQgsKCV9zbmFwc2hvdCIrCghNaW5pcG9vbBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZSKjAgoEVGFncxI/ChhtZXNzYWdlX2ludGVyYWN0aW9uX3R5cGUYASABKA4yHS5yaXZlci5NZXNzYWdlSW50ZXJhY3Rpb25UeXBlEjQKE2dyb3VwX21lbnRpb25fdHlwZXMYAiADKA4yFy5yaXZlci5Hcm91cE1lbnRpb25UeXBlEiAKGG1lbnRpb25lZF91c2VyX2FkZHJlc3NlcxgDIAMoDBIkChxwYXJ0aWNpcGF0aW5nX3VzZXJfYWRkcmVzc2VzGAQgAygMEhYKCXRocmVhZF9pZBgFIAEoDEgAiAEBEh8KEmFwcF9jbGllbnRfYWRkcmVzcxgGIAEoDEgBiAEBQgwKCl90aHJlYWRfaWRCFQoTX2FwcF9jbGllbnRfYWRkcmVzcyIcCgtJbmZvUmVxdWVzdBINCgVkZWJ1ZxgBIAMoCSJhCgxJbmZvUmVzcG9uc2USEAoIZ3JhZmZpdGkYASABKAkSLgoKc3RhcnRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHdmVyc2lvbhgDIAEoCSI+ChJHZXRTdHJlYW1FeFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW9taXRfc25hcHNob3QYAiABKAgingEKE0dldFN0cmVhbUV4UmVzcG9uc2USJQoJbWluaWJsb2NrGAEgASgLMhAucml2ZXIuTWluaWJsb2NrSAASIwoIbWluaXBvb2wYAiABKAsyDy5yaXZlci5NaW5pcG9vbEgAEiYKCHNuYXBzaG90GAMgASgLMg8ucml2ZXIuRW52ZWxvcGVIAYgBAUIGCgRkYXRhQgsKCV9zbmFwc2hvdCK2AQoTQ3JlYXRlU3RyZWFtUmVxdWVzdBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZRIRCglzdHJlYW1faWQYAiABKAwSOgoIbWV0YWRhdGEYAyADKAsyKC5yaXZlci5DcmVhdGVTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBImcKFENyZWF0ZVN0cmVhbVJlc3BvbnNlEiYKBnN0cmVhbRgBIAEoCzIWLnJpdmVyLlN0cmVhbUFuZENvb2tpZRInCg5kZXJpdmVkX2V2ZW50cxgCIAMoCzIPLnJpdmVyLkV2ZW50UmVmIsABChhDcmVhdGVNZWRpYVN0cmVhbVJlcXVlc3QSHwoGZXZlbnRzGAEgAygLMg8ucml2ZXIuRW52ZWxvcGUSEQoJc3RyZWFtX2lkGAIgASgMEj8KCG1ldGFkYXRhGAMgAygLMi0ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBIlAKGUNyZWF0ZU1lZGlhU3RyZWFtUmVzcG9uc2USMwoUbmV4dF9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSKHAQoQR2V0U3RyZWFtUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSEAoIb3B0aW9uYWwYAiABKAgSJgoLc3luY19jb29raWUYAyABKAsyES5yaXZlci5TeW5jQ29va2llEiYKHm51bWJlcl9vZl9wcmVjZWRpbmdfbWluaWJsb2NrcxgEIAEoAyI7ChFHZXRTdHJlYW1SZXNwb25zZRImCgZzdHJlYW0YASABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUiLwoLRXZlbnRGaWx0ZXISDwoHcGF5bG9hZBgBIAEoCRIPCgdjb250ZW50GAIgASgJIp0BChRHZXRNaW5pYmxvY2tzUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSFgoOZnJvbV9pbmNsdXNpdmUYAiABKAMSFAoMdG9fZXhjbHVzaXZlGAMgASgDEhYKDm9taXRfc25hcHNob3RzGAQgASgIEiwKEGV4Y2x1c2lvbl9maWx0ZXIYBSADKAsyEi5yaXZlci5FdmVudEZpbHRlciKRAgoVR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEiQKCm1pbmlibG9ja3MYASADKAsyEC5yaXZlci5NaW5pYmxvY2sSEAoIdGVybWludXMYAiABKAgSFgoOZnJvbV9pbmNsdXNpdmUYAyABKAMSDQoFbGltaXQYBCABKAMSFgoOb21pdF9zbmFwc2hvdHMYBSABKAgSPgoJc25hcHNob3RzGAYgAygLMisucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlLlNuYXBzaG90c0VudHJ5GkEKDlNuYXBzaG90c0VudHJ5EgsKA2tleRgBIAEoAxIeCgV2YWx1ZRgCIAEoCzIPLnJpdmVyLkVudmVsb3BlOgI4ASIwChtHZXRMYXN0TWluaWJsb2NrSGFzaFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMIosBChxHZXRMYXN0TWluaWJsb2NrSGFzaFJlc3BvbnNlEgwKBGhhc2gYASABKAwSFQoNbWluaWJsb2NrX251bRgCIAEoAxJGChRlbmNyeXB0aW9uX2FsZ29yaXRobRgDIAEoCzIoLnJpdmVyLk1lbWJlclBheWxvYWQuRW5jcnlwdGlvbkFsZ29yaXRobSJKCg9BZGRFdmVudFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEh4KBWV2ZW50GAIgASgLMg8ucml2ZXIuRW52ZWxvcGVKBAgDEAQiPQoQQWRkRXZlbnRSZXNwb25zZRIjCgpuZXdfZXZlbnRzGAIgAygLMg8ucml2ZXIuRXZlbnRSZWZKBAgBEAIidAoUQWRkTWVkaWFFdmVudFJlcXVlc3QSHgoFZXZlbnQYASABKAsyDy5yaXZlci5FbnZlbG9wZRIuCg9jcmVhdGlvbl9jb29raWUYAiABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZRIMCgRsYXN0GAMgASgIIkcKFUFkZE1lZGlhRXZlbnRSZXNwb25zZRIuCg9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSI5ChJTeW5jU3RyZWFtc1JlcXVlc3QSIwoIc3luY19wb3MYASADKAsyES5yaXZlci5TeW5jQ29va2llIq4BChNTeW5jU3RyZWFtc1Jlc3BvbnNlEg8KB3N5bmNfaWQYASABKAkSHgoHc3luY19vcBgCIAEoDjINLnJpdmVyLlN5bmNPcBImCgZzdHJlYW0YAyABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUSEgoKcG9uZ19ub25jZRgEIAEoCRIRCglzdHJlYW1faWQYBSABKAwSFwoPdGFyZ2V0X3N5bmNfaWRzGAYgAygJIuIBChFNb2RpZnlTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJEiYKC2FkZF9zdHJlYW1zGAIgAygLMhEucml2ZXIuU3luY0Nvb2tpZRIWCg5yZW1vdmVfc3RyZWFtcxgDIAMoDBI7ChBiYWNrZmlsbF9zdHJlYW1zGAQgASgLMiEucml2ZXIuTW9kaWZ5U3luY1JlcXVlc3QuQmFja2ZpbGwaPwoIQmFja2ZpbGwSIgoHc3RyZWFtcxgBIAMoCzIRLnJpdmVyLlN5bmNDb29raWUSDwoHc3luY19pZBgCIAEoCSJcChJTeW5jU3RyZWFtT3BTdGF0dXMSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGNvZGUYAiABKAUSDwoHbWVzc2FnZRgDIAEoCRIUCgxub2RlX2FkZHJlc3MYBCABKAwimAEKEk1vZGlmeVN5bmNSZXNwb25zZRInCgRhZGRzGAEgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEisKCHJlbW92YWxzGAIgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEiwKCWJhY2tmaWxscxgDIAMoCzIZLnJpdmVyLlN5bmNTdHJlYW1PcFN0YXR1cyIkChFDYW5jZWxTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJIhQKEkNhbmNlbFN5bmNSZXNwb25zZSIxCg9QaW5nU3luY1JlcXVlc3QSDwoHc3luY19pZBgBIAEoCRINCgVub25jZRgCIAEoCSISChBQaW5nU3luY1Jlc3BvbnNlIh0KCVJlZGFjdGlvbhIQCghldmVudF9pZBgBIAEoDCLyFwoZSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZBJGChFlbmNyeXB0aW9uX2RldmljZRgBIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZRI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEjUKBGZvcm0YZiABKAsyJS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLkZvcm1IABJDCgt0cmFuc2FjdGlvbhhnIAEoCzIsLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb25IABJACgphZGRfbWVtYmVyGGggASgLMioucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5BZGRNZW1iZXJIABJICg5wcmVwYXJlZF9jYWxscxhpIAEoCzIuLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxsc0gAEjcKBWJhdGNoGGogASgLMiYucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5CYXRjaEgAGu8DCglTaWduYXR1cmUSCgoCaWQYASABKAkSDAoEZGF0YRgCIAEoCRIQCghjaGFpbl9pZBgDIAEoCRIaCg1zaWduZXJfd2FsbGV0GAQgASgJSACIAQESRgoEdHlwZRgFIAEoDjI4LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuU2lnbmF0dXJlLlNpZ25hdHVyZVR5cGUSEgoFdGl0bGUYBiABKAlIAYgBARIVCghzdWJ0aXRsZRgHIAEoCUgCiAEBEmEKFHNpZ25hdHVyZV92YWxpZGF0aW9uGAggASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5TaWduYXR1cmUuU2lnbmF0dXJlVmFsaWRhdGlvbkgDiAEBIjIKDVNpZ25hdHVyZVR5cGUSEQoNUEVSU09OQUxfU0lHThAAEg4KClRZUEVEX0RBVEEQASJOChNTaWduYXR1cmVWYWxpZGF0aW9uEg8KC1VOU1BFQ0lGSUVEEAASDwoLRUlQNzEyX09OTFkQARIVChFFSVA3MTJfT1JfRUlQMTI3MRACQhAKDl9zaWduZXJfd2FsbGV0QggKBl90aXRsZUILCglfc3VidGl0bGVCFwoVX3NpZ25hdHVyZV92YWxpZGF0aW9uGpYDCgRGb3JtEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARJDCgpjb21wb25lbnRzGAQgAygLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5Gb3JtLkNvbXBvbmVudBr6AQoJQ29tcG9uZW50EgoKAmlkGAEgASgJEkgKBmJ1dHRvbhhlIAEoCzI2LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASTwoKdGV4dF9pbnB1dBhmIAEoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuVGV4dElucHV0SAAaFwoGQnV0dG9uEg0KBWxhYmVsGAEgASgJGiAKCVRleHRJbnB1dBITCgtwbGFjZWhvbGRlchgBIAEoCUILCgljb21wb25lbnRCCAoGX3RpdGxlQgsKCV9zdWJ0aXRsZRr/AgoLVHJhbnNhY3Rpb24SCgoCaWQYASABKAkSEgoFdGl0bGUYAiABKAlIAYgBARIVCghzdWJ0aXRsZRgDIAEoCUgCiAEBEkQKA2V2bRhlIAEoCzI1LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb24uRVZNQmF0Y2hIABo1CgpFVk1Db250ZW50EgoKAnRvGAEgASgJEg0KBXZhbHVlGAIgASgJEgwKBGRhdGEYAyABKAkamQEKCEVWTUJhdGNoEhAKCGNoYWluX2lkGAEgASgJEhoKDXNpZ25lcl93YWxsZXQYAiABKAlIAIgBARJNCgx0cmFuc2FjdGlvbnMYAyADKAsyNy5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlRyYW5zYWN0aW9uLkVWTUNvbnRlbnRCEAoOX3NpZ25lcl93YWxsZXRCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlGkoKCUFkZE1lbWJlchIKCgJpZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgMEhQKB21lc3NhZ2UYAyABKAlIAIgBAUIKCghfbWVzc2FnZRrzBgoNUHJlcGFyZWRDYWxscxIKCgJpZBgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRISCgp0eXBlZF9kYXRhGAMgASgJEg8KB2NvbnRleHQYBCABKAkSEgoFdGl0bGUYBSABKAlIAIgBARIVCghzdWJ0aXRsZRgGIAEoCUgBiAEBElMKDmF1dGhvcml6ZV9rZXlzGAcgAygLMjsucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLkF1dGhvcml6ZUtleRrmAwoKUGVybWlzc2lvbhJMCgR0eXBlGAEgASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uVHlwZRJOCgRjYWxsGAIgASgLMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uQ2FsbEgAElAKBXNwZW5kGAMgASgLMj8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uU3BlbmRIABpCCgRDYWxsEg8KAnRvGAEgASgJSACIAQESFQoIc2VsZWN0b3IYAiABKAlIAYgBAUIFCgNfdG9CCwoJX3NlbGVjdG9yGmMKBVNwZW5kEhIKBXRva2VuGAEgASgJSACIAQESEgoFbGltaXQYAiABKAlIAYgBARITCgZwZXJpb2QYAyABKAlIAogBAUIICgZfdG9rZW5CCAoGX2xpbWl0QgkKB19wZXJpb2QiMQoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASCAoEQ0FMTBABEgkKBVNQRU5EEAJCDAoKcGVybWlzc2lvbhqeAQoMQXV0aG9yaXplS2V5Eg4KBmV4cGlyeRgBIAEoCRIMCgR0eXBlGAIgASgJEgwKBHJvbGUYAyABKAkSEgoKcHVibGljX2tleRgEIAEoCRJOCgtwZXJtaXNzaW9ucxgFIAMoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxscy5QZXJtaXNzaW9uQggKBl90aXRsZUILCglfc3VidGl0bGUasAIKBUJhdGNoEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARI6CgVzdGVwcxgEIAMoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuQmF0Y2guU3RlcBqcAQoEU3RlcBI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEkgKDnByZXBhcmVkX2NhbGxzGGkgASgLMi4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzSABCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlQgkKB2NvbnRlbnQilAEKEkludGVyYWN0aW9uUmVxdWVzdBIWCglyZWNpcGllbnQYASABKAxIAIgBARIsCg5lbmNyeXB0ZWRfZGF0YRgDIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGESFgoJdGhyZWFkX2lkGAQgASgMSAGIAQFCDAoKX3JlY2lwaWVudEIMCgpfdGhyZWFkX2lkSgQIAhADInwKE0ludGVyYWN0aW9uUmVzcG9uc2USEQoJcmVjaXBpZW50GAEgASgMEiwKDmVuY3J5cHRlZF9kYXRhGAIgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIWCgl0aHJlYWRfaWQYAyABKAxIAIgBAUIMCgpfdGhyZWFkX2lkIugKChpJbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZBIMCgRzYWx0GAEgASgMEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEjYKBGZvcm0YZiABKAsyJi5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5Gb3JtSAASRAoLdHJhbnNhY3Rpb24YZyABKAsyLS5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5UcmFuc2FjdGlvbkgAEkEKCmFkZF9tZW1iZXIYaCABKAsyKy5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5BZGRNZW1iZXJIABJJCg5wcmVwYXJlZF9jYWxscxhpIAEoCzIvLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlByZXBhcmVkQ2FsbHNIABI4CgViYXRjaBhqIAEoCzInLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoSAAaMgoJU2lnbmF0dXJlEhIKCnJlcXVlc3RfaWQYASABKAkSEQoJc2lnbmF0dXJlGAIgASgJGsoCCgRGb3JtEhIKCnJlcXVlc3RfaWQYASABKAkSRAoKY29tcG9uZW50cxgCIAMoCzIwLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50GucBCglDb21wb25lbnQSCgoCaWQYASABKAkSSQoGYnV0dG9uGGUgASgLMjcucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASUAoKdGV4dF9pbnB1dBhmIAEoCzI6LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50LlRleHRJbnB1dEgAGggKBkJ1dHRvbhoaCglUZXh0SW5wdXQSDQoFdmFsdWUYASABKAlCCwoJY29tcG9uZW50GjIKC1RyYW5zYWN0aW9uEhIKCnJlcXVlc3RfaWQYASABKAkSDwoHdHhfaGFzaBgCIAEoCRoxCglBZGRNZW1iZXISEgoKcmVxdWVzdF9pZBgBIAEoCRIQCghhY2NlcHRlZBgCIAEoCBq0AQoNUHJlcGFyZWRDYWxscxISCgpyZXF1ZXN0X2lkGAEgASgJEhEKCXNpZ25hdHVyZRgCIAEoCRIeChFwYXltZW50X3NpZ25hdHVyZRgDIAEoCUgAiAEBEhQKB2NvbnRleHQYBCABKAlIAYgBARIWCglidW5kbGVfaWQYBSABKAlIAogBAUIUChJfcGF5bWVudF9zaWduYXR1cmVCCgoIX2NvbnRleHRCDAoKX2J1bmRsZV9pZBqJAgoFQmF0Y2gSEgoKcmVxdWVzdF9pZBgBIAEoCRJDCgVzdGVwcxgCIAMoCzI0LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoLlN0ZXBSZXNwb25zZRqmAQoMU3RlcFJlc3BvbnNlEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEkkKDnByZXBhcmVkX2NhbGxzGGkgASgLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuUHJlcGFyZWRDYWxsc0gAQgkKB2NvbnRlbnRCCQoHY29udGVudCKLAQoTSW52aXRlU2lnbmVkUGF5bG9hZBIPCgd1c2VyX2lkGAEgASgMEhEKCXN0cmVhbV9pZBgCIAEoDBIUCgx0aW1lc3RhbXBfbXMYAyABKAMSDAoEc2FsdBgEIAEoDBIRCglzaWduYXR1cmUYBSABKAwSGQoRc2lnbmVyX3B1YmxpY19rZXkYBiABKAwqawoGU3luY09wEhQKEFNZTkNfVU5TUEVDSUZJRUQQABIMCghTWU5DX05FVxABEg4KClNZTkNfQ0xPU0UQAhIPCgtTWU5DX1VQREFURRADEg0KCVNZTkNfUE9ORxAEEg0KCVNZTkNfRE9XThAFKkwKDE1lbWJlcnNoaXBPcBISCg5TT19VTlNQRUNJRklFRBAAEg0KCVNPX0lOVklURRABEgsKB1NPX0pPSU4QAhIMCghTT19MRUFWRRADKkQKEE1lbWJlcnNoaXBSZWFzb24SCwoHTVJfTk9ORRAAEhMKD01SX05PVF9FTlRJVExFRBABEg4KCk1SX0VYUElSRUQQAipPCglDaGFubmVsT3ASEgoOQ09fVU5TUEVDSUZJRUQQABIOCgpDT19DUkVBVEVEEAESDgoKQ09fREVMRVRFRBACEg4KCkNPX1VQREFURUQQBCrtAgoWTWVzc2FnZUludGVyYWN0aW9uVHlwZRIoCiRNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVQTFkQARIlCiFNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVBQ1RJT04QAhIhCh1NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUE9TVBADEiEKHU1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9FRElUEAQSJgoiTUVTU0FHRV9JTlRFUkFDVElPTl9UWVBFX1JFREFDVElPThAFEiAKHE1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9USVAQBhIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVFJBREUQBxIqCiZNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfU0xBU0hfQ09NTUFORBAIKlkKEEdyb3VwTWVudGlvblR5cGUSIgoeR1JPVVBfTUVOVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASIQodR1JPVVBfTUVOVElPTl9UWVBFX0FUX0NIQU5ORUwQASpSChRFbmNyeXB0ZWREYXRhVmVyc2lvbhIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzAQABIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzEQASr1DAoDRXJyEhMKD0VSUl9VTlNQRUNJRklFRBAAEgwKCENBTkNFTEVEEAESCwoHVU5LTk9XThACEhQKEElOVkFMSURfQVJHVU1FTlQQAxIVChFERUFETElORV9FWENFRURFRBAEEg0KCU5PVF9GT1VORBAFEhIKDkFMUkVBRFlfRVhJU1RTEAYSFQoRUEVSTUlTU0lPTl9ERU5JRUQQBxIWChJSRVNPVVJDRV9FWEhBVVNURUQQCBIXChNGQUlMRURfUFJFQ09ORElUSU9OEAkSCwoHQUJPUlRFRBAKEhAKDE9VVF9PRl9SQU5HRRALEhEKDVVOSU1QTEVNRU5URUQQDBIMCghJTlRFUk5BTBANEg8KC1VOQVZBSUxBQkxFEA4SDQoJREFUQV9MT1NTEA8SEwoPVU5BVVRIRU5USUNBVEVEEBASDwoLREVCVUdfRVJST1IQERIRCg1CQURfU1RSRUFNX0lEEBISHgoaQkFEX1NUUkVBTV9DUkVBVElPTl9QQVJBTVMQExIZChVJTlRFUk5BTF9FUlJPUl9TV0lUQ0gQFBIQCgxCQURfRVZFTlRfSUQQFRIXChNCQURfRVZFTlRfU0lHTkFUVVJFEBYSEwoPQkFEX0hBU0hfRk9STUFUEBcSGwoXQkFEX1BSRVZfTUlOSUJMT0NLX0hBU0gQGBIWChJOT19FVkVOVF9TUEVDSUZJRUQQGRINCglCQURfRVZFTlQQGhISCg5VU0VSX0NBTlRfUE9TVBAbEhUKEVNUUkVBTV9CQURfSEFTSEVTEBwSEAoMU1RSRUFNX0VNUFRZEB0SFAoQU1RSRUFNX0JBRF9FVkVOVBAeEhQKEEJBRF9ERUxFR0FURV9TSUcQHxISCg5CQURfUFVCTElDX0tFWRAgEg8KC0JBRF9QQVlMT0FEECESEgoOQkFEX0hFWF9TVFJJTkcQIhISCg5CQURfRVZFTlRfSEFTSBAjEhMKD0JBRF9TWU5DX0NPT0tJRRAkEhMKD0RVUExJQ0FURV9FVkVOVBAlEg0KCUJBRF9CTE9DSxAmEh0KGVNUUkVBTV9OT19JTkNFUFRJT05fRVZFTlQQJxIUChBCQURfQkxPQ0tfTlVNQkVSECgSFQoRQkFEX01JTklQT09MX1NMT1QQKRIXChNCQURfQ1JFQVRPUl9BRERSRVNTECoSEgoOU1RBTEVfREVMRUdBVEUQKxIhCh1CQURfTElOS19XQUxMRVRfQkFEX1NJR05BVFVSRRAsEhMKD0JBRF9ST09UX0tFWV9JRBAtEhAKDFVOS05PV05fTk9ERRAuEhgKFERCX09QRVJBVElPTl9GQUlMVVJFEC8SHgoaTUlOSUJMT0NLU19TVE9SQUdFX0ZBSUxVUkUQMBIPCgtCQURfQUREUkVTUxAxEg8KC0JVRkZFUl9GVUxMEDISDgoKQkFEX0NPTkZJRxAzEhAKDEJBRF9DT05UUkFDVBA0EhIKDkNBTk5PVF9DT05ORUNUEDUSHQoZQ0FOTk9UX0dFVF9MSU5LRURfV0FMTEVUUxA2Eh0KGUNBTk5PVF9DSEVDS19FTlRJVExFTUVOVFMQNxIYChRDQU5OT1RfQ0FMTF9DT05UUkFDVBA4EhIKDlNQQUNFX0RJU0FCTEVEEDkSFAoQQ0hBTk5FTF9ESVNBQkxFRBA6EhUKEVdST05HX1NUUkVBTV9UWVBFEDsSGwoXTUlOSVBPT0xfTUlTU0lOR19FVkVOVFMQPBIeChpTVFJFQU1fTEFTVF9CTE9DS19NSVNNQVRDSBA9EhwKGERPV05TVFJFQU1fTkVUV09SS19FUlJPUhA+EhUKEU1JTklCTE9DS19UT09fTkVXED8SFQoRTUlOSUJMT0NLX1RPT19PTEQQQBIRCg1RVU9SVU1fRkFJTEVEEEESFwoTQ0FOTk9UX0NBTExfV0VCSE9PSxBCEh4KGk1BTEZPUk1FRF9XRUJIT09LX1JFU1BPTlNFEEMSGQoVQkFEX0VOQ1JZUFRJT05fREVWSUNFEEQSIgoeU1RSRUFNX1JFQ09OQ0lMSUFUSU9OX1JFUVVJUkVEEEUSHQoZU1lOQ19TRVNTSU9OX1JVTk5FUl9FTVBUWRBGEiQKIFNZTkNfU0VTU0lPTl9SVU5ORVJfVU5BU1NJR05BQkxFEEcSGAoUTUlOSUJMT0NLU19OT1RfRk9VTkQQSDKqBwoNU3RyZWFtU2VydmljZRIvCgRJbmZvEhIucml2ZXIuSW5mb1JlcXVlc3QaEy5yaXZlci5JbmZvUmVzcG9uc2USRwoMQ3JlYXRlU3RyZWFtEhoucml2ZXIuQ3JlYXRlU3RyZWFtUmVxdWVzdBobLnJpdmVyLkNyZWF0ZVN0cmVhbVJlc3BvbnNlElYKEUNyZWF0ZU1lZGlhU3RyZWFtEh8ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0GiAucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXNwb25zZRI+CglHZXRTdHJlYW0SFy5yaXZlci5HZXRTdHJlYW1SZXF1ZXN0Ghgucml2ZXIuR2V0U3RyZWFtUmVzcG9uc2USRgoLR2V0U3RyZWFtRXgSGS5yaXZlci5HZXRTdHJlYW1FeFJlcXVlc3QaGi5yaXZlci5HZXRTdHJlYW1FeFJlc3BvbnNlMAESSgoNR2V0TWluaWJsb2NrcxIbLnJpdmVyLkdldE1pbmlibG9ja3NSZXF1ZXN0Ghwucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEl8KFEdldExhc3RNaW5pYmxvY2tIYXNoEiIucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXF1ZXN0GiMucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXNwb25zZRI7CghBZGRFdmVudBIWLnJpdmVyLkFkZEV2ZW50UmVxdWVzdBoXLnJpdmVyLkFkZEV2ZW50UmVzcG9uc2USSgoNQWRkTWVkaWFFdmVudBIbLnJpdmVyLkFkZE1lZGlhRXZlbnRSZXF1ZXN0Ghwucml2ZXIuQWRkTWVkaWFFdmVudFJlc3BvbnNlEkYKC1N5bmNTdHJlYW1zEhkucml2ZXIuU3luY1N0cmVhbXNSZXF1ZXN0Ghoucml2ZXIuU3luY1N0cmVhbXNSZXNwb25zZTABEkEKCk1vZGlmeVN5bmMSGC5yaXZlci5Nb2RpZnlTeW5jUmVxdWVzdBoZLnJpdmVyLk1vZGlmeVN5bmNSZXNwb25zZRJBCgpDYW5jZWxTeW5jEhgucml2ZXIuQ2FuY2VsU3luY1JlcXVlc3QaGS5yaXZlci5DYW5jZWxTeW5jUmVzcG9uc2USOwoIUGluZ1N5bmMSFi5yaXZlci5QaW5nU3luY1JlcXVlc3QaFy5yaXZlci5QaW5nU3luY1Jlc3BvbnNlQjRaMmdpdGh1Yi5jb20vdG93bnMtcHJvdG9jb2wvdG93bnMvY29yZS9ub2RlL3Byb3RvY29sYgZwcm90bzM", [import_wkt2.file_google_protobuf_any, import_wkt2.file_google_protobuf_empty, import_wkt2.file_google_protobuf_timestamp]);
7611
+ var file_protocol = /* @__PURE__ */ (0, import_codegenv22.fileDesc)("Cg5wcm90b2NvbC5wcm90bxIFcml2ZXIiXgoJTWluaWJsb2NrEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEh8KBmhlYWRlchgCIAEoCzIPLnJpdmVyLkVudmVsb3BlEg8KB3BhcnRpYWwYAyABKAgiOgoIRW52ZWxvcGUSDAoEaGFzaBgBIAEoDBIRCglzaWduYXR1cmUYAiABKAwSDQoFZXZlbnQYAyABKAwi1wYKC1N0cmVhbUV2ZW50EhcKD2NyZWF0b3JfYWRkcmVzcxgBIAEoDBIUCgxkZWxlZ2F0ZV9zaWcYAiABKAwSDAoEc2FsdBgDIAEoDBIgChNwcmV2X21pbmlibG9ja19oYXNoGAQgASgMSAGIAQESGwoTY3JlYXRlZF9hdF9lcG9jaF9tcxgFIAEoAxIgChhkZWxlZ2F0ZV9leHBpcnlfZXBvY2hfbXMYBiABKAMSGQoEdGFncxgHIAEoCzILLnJpdmVyLlRhZ3MSHwoScHJldl9taW5pYmxvY2tfbnVtGAggASgDSAKIAQESEQoJZXBoZW1lcmFsGAkgASgIEhsKE2NyZWF0ZWRfYXRfdGltZXpvbmUYCiABKAkSMgoQbWluaWJsb2NrX2hlYWRlchhkIAEoCzIWLnJpdmVyLk1pbmlibG9ja0hlYWRlckgAEi4KDm1lbWJlcl9wYXlsb2FkGGUgASgLMhQucml2ZXIuTWVtYmVyUGF5bG9hZEgAEioKDHVzZXJfcGF5bG9hZBhoIAEoCzISLnJpdmVyLlVzZXJQYXlsb2FkSAASOwoVdXNlcl9zZXR0aW5nc19wYXlsb2FkGGkgASgLMhoucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZEgAEjsKFXVzZXJfbWV0YWRhdGFfcGF5bG9hZBhqIAEoCzIaLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWRIABI1ChJ1c2VyX2luYm94X3BheWxvYWQYayABKAsyFy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkSAASLAoNbWVkaWFfcGF5bG9hZBhsIAEoCzITLnJpdmVyLk1lZGlhUGF5bG9hZEgAEjcKE2dkbV9jaGFubmVsX3BheWxvYWQYbiABKAsyGC5yaXZlci5HZG1DaGFubmVsUGF5bG9hZEgAQgkKB3BheWxvYWRCFgoUX3ByZXZfbWluaWJsb2NrX2hhc2hCFQoTX3ByZXZfbWluaWJsb2NrX251bUoECGYQZ0oECGcQaEoECG0QbkoECG8QcFINc3BhY2VfcGF5bG9hZFIPY2hhbm5lbF9wYXlsb2FkUhJkbV9jaGFubmVsX3BheWxvYWRSEG1ldGFkYXRhX3BheWxvYWQizwIKD01pbmlibG9ja0hlYWRlchIVCg1taW5pYmxvY2tfbnVtGAEgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYAiABKAwSLQoJdGltZXN0YW1wGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIUCgxldmVudF9oYXNoZXMYBCADKAwSGAoQZXZlbnRfbnVtX29mZnNldBgGIAEoAxIjChtwcmV2X3NuYXBzaG90X21pbmlibG9ja19udW0YByABKAMSGgoNc25hcHNob3RfaGFzaBgIIAEoDEgBiAEBEh0KFXJlamVjdGVkX2V2ZW50X2hhc2hlcxgJIAMoDBImCgRub25lGGQgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABCCQoHY29udGVudEIQCg5fc25hcHNob3RfaGFzaEoECAUQBiLcFAoNTWVtYmVyUGF5bG9hZBI1CgptZW1iZXJzaGlwGAEgASgLMh8ucml2ZXIuTWVtYmVyUGF5bG9hZC5NZW1iZXJzaGlwSAASQAoQa2V5X3NvbGljaXRhdGlvbhgCIAEoCzIkLnJpdmVyLk1lbWJlclBheWxvYWQuS2V5U29saWNpdGF0aW9uSAASPgoPa2V5X2Z1bGZpbGxtZW50GAMgASgLMiMucml2ZXIuTWVtYmVyUGF5bG9hZC5LZXlGdWxmaWxsbWVudEgAEicKA3BpbhgIIAEoCzIYLnJpdmVyLk1lbWJlclBheWxvYWQuUGluSAASKwoFdW5waW4YCSABKAsyGi5yaXZlci5NZW1iZXJQYXlsb2FkLlVucGluSAASWQodbWVtYmVyX2Jsb2NrY2hhaW5fdHJhbnNhY3Rpb24YCyABKAsyMC5yaXZlci5NZW1iZXJQYXlsb2FkLk1lbWJlckJsb2NrY2hhaW5UcmFuc2FjdGlvbkgAEkgKFGVuY3J5cHRpb25fYWxnb3JpdGhtGAwgASgLMigucml2ZXIuTWVtYmVyUGF5bG9hZC5FbmNyeXB0aW9uQWxnb3JpdGhtSAASPQoPc2V0X2FwcF9hZGRyZXNzGA0gASgLMiIucml2ZXIuTWVtYmVyUGF5bG9hZC5TZXRBcHBBZGRyZXNzSAASQQoRdW5zZXRfYXBwX2FkZHJlc3MYDiABKAsyJC5yaXZlci5NZW1iZXJQYXlsb2FkLlVuc2V0QXBwQWRkcmVzc0gAGvcICghTbmFwc2hvdBI0CgZqb2luZWQYASADKAsyJC5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlchItCgRwaW5zGAIgAygLMh8ucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwcGVkUGluEkYKFGVuY3J5cHRpb25fYWxnb3JpdGhtGAQgASgLMigucml2ZXIuTWVtYmVyUGF5bG9hZC5FbmNyeXB0aW9uQWxnb3JpdGhtEjUKBHRpcHMYBSADKAsyJy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNFbnRyeRJACgp0aXBzX2NvdW50GAYgAygLMiwucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5UaXBzQ291bnRFbnRyeRrfBQoGTWVtYmVyEhQKDHVzZXJfYWRkcmVzcxgBIAEoDBIVCg1taW5pYmxvY2tfbnVtGAIgASgDEhEKCWV2ZW50X251bRgDIAEoAxI7Cg1zb2xpY2l0YXRpb25zGAQgAygLMiQucml2ZXIuTWVtYmVyUGF5bG9hZC5LZXlTb2xpY2l0YXRpb24SRQoJdGlwc19zZW50GAkgAygLMjIucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1NlbnRFbnRyeRJNCg10aXBzX3JlY2VpdmVkGAogAygLMjYucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1JlY2VpdmVkRW50cnkSUAoPdGlwc19zZW50X2NvdW50GAsgAygLMjcucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1NlbnRDb3VudEVudHJ5ElgKE3RpcHNfcmVjZWl2ZWRfY291bnQYDCADKAsyOy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlci5UaXBzUmVjZWl2ZWRDb3VudEVudHJ5EhgKC2FwcF9hZGRyZXNzGA0gASgMSACIAQEaLwoNVGlwc1NlbnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBGjMKEVRpcHNSZWNlaXZlZEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaNAoSVGlwc1NlbnRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaOAoWVGlwc1JlY2VpdmVkQ291bnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBQg4KDF9hcHBfYWRkcmVzc0oECAUQBkoECAYQB0oECAcQCEoECAgQCRorCglUaXBzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARowCg5UaXBzQ291bnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBSgQIAxAEGoMCCgpNZW1iZXJzaGlwEh8KAm9wGAEgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEhQKDHVzZXJfYWRkcmVzcxgCIAEoDBIZChFpbml0aWF0b3JfYWRkcmVzcxgDIAEoDBInCgZyZWFzb24YBSABKA4yFy5yaXZlci5NZW1iZXJzaGlwUmVhc29uEhgKC2FwcF9hZGRyZXNzGAYgASgMSACIAQESNwoOaW52aXRlX3BheWxvYWQYByABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkSAGIAQFCDgoMX2FwcF9hZGRyZXNzQhEKD19pbnZpdGVfcGF5bG9hZEoECAQQBRpnCg9LZXlTb2xpY2l0YXRpb24SEgoKZGV2aWNlX2tleRgBIAEoCRIUCgxmYWxsYmFja19rZXkYAiABKAkSFQoNaXNfbmV3X2RldmljZRgDIAEoCBITCgtzZXNzaW9uX2lkcxgEIAMoCRpPCg5LZXlGdWxmaWxsbWVudBIUCgx1c2VyX2FkZHJlc3MYASABKAwSEgoKZGV2aWNlX2tleRgCIAEoCRITCgtzZXNzaW9uX2lkcxgDIAMoCRpMCgpTbmFwcGVkUGluEhcKD2NyZWF0b3JfYWRkcmVzcxgBIAEoDBIlCgNwaW4YAiABKAsyGC5yaXZlci5NZW1iZXJQYXlsb2FkLlBpbho6CgNQaW4SEAoIZXZlbnRfaWQYASABKAwSIQoFZXZlbnQYAiABKAsyEi5yaXZlci5TdHJlYW1FdmVudBoZCgVVbnBpbhIQCghldmVudF9pZBgBIAEoDBo7ChNFbmNyeXB0aW9uQWxnb3JpdGhtEhYKCWFsZ29yaXRobRgBIAEoCUgAiAEBQgwKCl9hbGdvcml0aG0aawobTWVtYmVyQmxvY2tjaGFpblRyYW5zYWN0aW9uEjEKC3RyYW5zYWN0aW9uGAEgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uEhkKEWZyb21fdXNlcl9hZGRyZXNzGAIgASgMGjoKDVNldEFwcEFkZHJlc3MSFAoMdXNlcl9hZGRyZXNzGAEgASgMEhMKC2FwcF9hZGRyZXNzGAIgASgMGicKD1Vuc2V0QXBwQWRkcmVzcxIUCgx1c2VyX2FkZHJlc3MYASABKAxCCQoHY29udGVudEoECAQQBUoECAUQBkoECAYQB0oECAcQCEoECAoQCyLwBAoRR2RtQ2hhbm5lbFBheWxvYWQSNwoJaW5jZXB0aW9uGAEgASgLMiIucml2ZXIuR2RtQ2hhbm5lbFBheWxvYWQuSW5jZXB0aW9uSAASJwoHbWVzc2FnZRgCIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGFIABIyChJjaGFubmVsX3Byb3BlcnRpZXMYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASJgoGY3VzdG9tGAQgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueUgAEiUKCXJlZGFjdGlvbhgFIAEoCzIQLnJpdmVyLlJlZGFjdGlvbkgAEjgKE2ludGVyYWN0aW9uX3JlcXVlc3QYBiABKAsyGS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RIABI6ChRpbnRlcmFjdGlvbl9yZXNwb25zZRgHIAEoCzIaLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VIABp6CghTbmFwc2hvdBI1CglpbmNlcHRpb24YASABKAsyIi5yaXZlci5HZG1DaGFubmVsUGF5bG9hZC5JbmNlcHRpb24SNwoSY2hhbm5lbF9wcm9wZXJ0aWVzGAIgASgLMhsucml2ZXIuV3JhcHBlZEVuY3J5cHRlZERhdGEaeQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIwChJjaGFubmVsX3Byb3BlcnRpZXMYAiABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhEicKCHNldHRpbmdzGAMgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3NCCQoHY29udGVudCKFDQoLVXNlclBheWxvYWQSMQoJaW5jZXB0aW9uGAEgASgLMhwucml2ZXIuVXNlclBheWxvYWQuSW5jZXB0aW9uSAASPAoPdXNlcl9tZW1iZXJzaGlwGAIgASgLMiEucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBIABJJChZ1c2VyX21lbWJlcnNoaXBfYWN0aW9uGAMgASgLMicucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBBY3Rpb25IABI+ChZibG9ja2NoYWluX3RyYW5zYWN0aW9uGAQgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uSAASWwofcmVjZWl2ZWRfYmxvY2tjaGFpbl90cmFuc2FjdGlvbhgFIAEoCzIwLnJpdmVyLlVzZXJQYXlsb2FkLlJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uSAAa5wQKCFNuYXBzaG90Ei8KCWluY2VwdGlvbhgBIAEoCzIcLnJpdmVyLlVzZXJQYXlsb2FkLkluY2VwdGlvbhI2CgttZW1iZXJzaGlwcxgCIAMoCzIhLnJpdmVyLlVzZXJQYXlsb2FkLlVzZXJNZW1iZXJzaGlwEjwKCXRpcHNfc2VudBgDIAMoCzIpLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50RW50cnkSRAoNdGlwc19yZWNlaXZlZBgEIAMoCzItLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNSZWNlaXZlZEVudHJ5EkcKD3RpcHNfc2VudF9jb3VudBgFIAMoCzIuLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50Q291bnRFbnRyeRJPChN0aXBzX3JlY2VpdmVkX2NvdW50GAYgAygLMjIucml2ZXIuVXNlclBheWxvYWQuU25hcHNob3QuVGlwc1JlY2VpdmVkQ291bnRFbnRyeRovCg1UaXBzU2VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaMwoRVGlwc1JlY2VpdmVkRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo0ChJUaXBzU2VudENvdW50RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo4ChZUaXBzUmVjZWl2ZWRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEapwEKCUluY2VwdGlvbhIRCglzdHJlYW1faWQYASABKAwSJwoIc2V0dGluZ3MYAiABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIYCgthcHBfYWRkcmVzcxgDIAEoDEgAiAEBEh4KEWFwcF9vd25lcl9hZGRyZXNzGAQgASgMSAGIAQFCDgoMX2FwcF9hZGRyZXNzQhQKEl9hcHBfb3duZXJfYWRkcmVzcxrxAQoOVXNlck1lbWJlcnNoaXASEQoJc3RyZWFtX2lkGAEgASgMEh8KAm9wGAIgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEhQKB2ludml0ZXIYAyABKAxIAIgBARIsCgZyZWFzb24YBSABKA4yFy5yaXZlci5NZW1iZXJzaGlwUmVhc29uSAGIAQESNwoOaW52aXRlX3BheWxvYWQYBiABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkSAKIAQFCCgoIX2ludml0ZXJCCQoHX3JlYXNvbkIRCg9faW52aXRlX3BheWxvYWRKBAgEEAUamgEKFFVzZXJNZW1iZXJzaGlwQWN0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIPCgd1c2VyX2lkGAIgASgMEh8KAm9wGAMgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEiwKBnJlYXNvbhgFIAEoDjIXLnJpdmVyLk1lbWJlcnNoaXBSZWFzb25IAIgBAUIJCgdfcmVhc29uSgQIBBAFGm0KHVJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uEjEKC3RyYW5zYWN0aW9uGAEgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uEhkKEWZyb21fdXNlcl9hZGRyZXNzGAIgASgMQgkKB2NvbnRlbnQi2gcKEFVzZXJJbmJveFBheWxvYWQSNgoJaW5jZXB0aW9uGAEgASgLMiEucml2ZXIuVXNlckluYm94UGF5bG9hZC5JbmNlcHRpb25IABIqCgNhY2sYAiABKAsyGy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkFja0gAElQKGWdyb3VwX2VuY3J5cHRpb25fc2Vzc2lvbnMYAyABKAsyLy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkdyb3VwRW5jcnlwdGlvblNlc3Npb25zSAAargIKCFNuYXBzaG90EjQKCWluY2VwdGlvbhgBIAEoCzIhLnJpdmVyLlVzZXJJbmJveFBheWxvYWQuSW5jZXB0aW9uEksKDmRldmljZV9zdW1tYXJ5GAIgAygLMjMucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5RW50cnkaOQoNRGV2aWNlU3VtbWFyeRITCgtsb3dlcl9ib3VuZBgBIAEoAxITCgt1cHBlcl9ib3VuZBgCIAEoAxpkChJEZXZpY2VTdW1tYXJ5RW50cnkSCwoDa2V5GAEgASgJEj0KBXZhbHVlGAIgASgLMi4ucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5OgI4ARqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGvMBChdHcm91cEVuY3J5cHRpb25TZXNzaW9ucxIRCglzdHJlYW1faWQYASABKAwSEgoKc2VuZGVyX2tleRgCIAEoCRITCgtzZXNzaW9uX2lkcxgDIAMoCRJVCgtjaXBoZXJ0ZXh0cxgEIAMoCzJALnJpdmVyLlVzZXJJbmJveFBheWxvYWQuR3JvdXBFbmNyeXB0aW9uU2Vzc2lvbnMuQ2lwaGVydGV4dHNFbnRyeRIRCglhbGdvcml0aG0YBSABKAkaMgoQQ2lwaGVydGV4dHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGjAKA0FjaxISCgpkZXZpY2Vfa2V5GAEgASgJEhUKDW1pbmlibG9ja19udW0YAiABKANCCQoHY29udGVudCLBBwoTVXNlclNldHRpbmdzUGF5bG9hZBI5CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbkgAEkkKEmZ1bGx5X3JlYWRfbWFya2VycxgCIAEoCzIrLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuRnVsbHlSZWFkTWFya2Vyc0gAEjoKCnVzZXJfYmxvY2sYAyABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLlVzZXJCbG9ja0gAGuwCCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbhJHChJmdWxseV9yZWFkX21hcmtlcnMYAiADKAsyKy5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkZ1bGx5UmVhZE1hcmtlcnMSSAoQdXNlcl9ibG9ja3NfbGlzdBgDIAMoCzIuLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2NrcxqTAQoKVXNlckJsb2NrcxIPCgd1c2VyX2lkGAEgASgMEkQKBmJsb2NrcxgCIAMoCzI0LnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2Nrcy5CbG9jaxouCgVCbG9jaxISCgppc19ibG9ja2VkGAEgASgIEhEKCWV2ZW50X251bRgCIAEoAxqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGh0KDU1hcmtlckNvbnRlbnQSDAoEZGF0YRgBIAEoCRpgChBGdWxseVJlYWRNYXJrZXJzEhEKCXN0cmVhbV9pZBgBIAEoDBI5Cgdjb250ZW50GAIgASgLMigucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5NYXJrZXJDb250ZW50GkMKCVVzZXJCbG9jaxIPCgd1c2VyX2lkGAEgASgMEhIKCmlzX2Jsb2NrZWQYAiABKAgSEQoJZXZlbnRfbnVtGAMgASgDQgkKB2NvbnRlbnQizgUKE1VzZXJNZXRhZGF0YVBheWxvYWQSOQoJaW5jZXB0aW9uGAEgASgLMiQucml2ZXIuVXNlck1ldGFkYXRhUGF5bG9hZC5JbmNlcHRpb25IABJIChFlbmNyeXB0aW9uX2RldmljZRgCIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZUgAEi0KDXByb2ZpbGVfaW1hZ2UYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASIwoDYmlvGAQgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YUgAGuoBCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkluY2VwdGlvbhJHChJlbmNyeXB0aW9uX2RldmljZXMYAiADKAsyKy5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkVuY3J5cHRpb25EZXZpY2USMgoNcHJvZmlsZV9pbWFnZRgDIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhEigKA2JpbxgEIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhGqcBCglJbmNlcHRpb24SEQoJc3RyZWFtX2lkGAEgASgMEicKCHNldHRpbmdzGAIgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3MSGAoLYXBwX2FkZHJlc3MYAyABKAxIAIgBARIeChFhcHBfb3duZXJfYWRkcmVzcxgEIAEoDEgBiAEBQg4KDF9hcHBfYWRkcmVzc0IUChJfYXBwX293bmVyX2FkZHJlc3MaPAoQRW5jcnlwdGlvbkRldmljZRISCgpkZXZpY2Vfa2V5GAEgASgJEhQKDGZhbGxiYWNrX2tleRgCIAEoCUIJCgdjb250ZW50IoQECgxNZWRpYVBheWxvYWQSMgoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbkgAEioKBWNodW5rGAIgASgLMhkucml2ZXIuTWVkaWFQYXlsb2FkLkNodW5rSAAaPAoIU25hcHNob3QSMAoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbhqGAgoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIXCgpjaGFubmVsX2lkGAIgASgMSACIAQESEwoLY2h1bmtfY291bnQYAyABKAUSJwoIc2V0dGluZ3MYBCABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIVCghzcGFjZV9pZBgFIAEoDEgBiAEBEhQKB3VzZXJfaWQYBiABKAxIAogBARIhChRwZXJfY2h1bmtfZW5jcnlwdGlvbhgHIAEoCEgDiAEBQg0KC19jaGFubmVsX2lkQgsKCV9zcGFjZV9pZEIKCghfdXNlcl9pZEIXChVfcGVyX2NodW5rX2VuY3J5cHRpb24aQgoFQ2h1bmsSDAoEZGF0YRgBIAEoDBITCgtjaHVua19pbmRleBgCIAEoBRIPCgJpdhgDIAEoDEgAiAEBQgUKA19pdkIJCgdjb250ZW50IrcECghTbmFwc2hvdBIuCgdtZW1iZXJzGAEgASgLMh0ucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdBIYChBzbmFwc2hvdF92ZXJzaW9uGAIgASgFEjMKDHVzZXJfY29udGVudBhnIAEoCzIbLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90SAASRAoVdXNlcl9zZXR0aW5nc19jb250ZW50GGggASgLMiMucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5TbmFwc2hvdEgAEkQKFXVzZXJfbWV0YWRhdGFfY29udGVudBhpIAEoCzIjLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuU25hcHNob3RIABI1Cg1tZWRpYV9jb250ZW50GGogASgLMhwucml2ZXIuTWVkaWFQYXlsb2FkLlNuYXBzaG90SAASQAoTZ2RtX2NoYW5uZWxfY29udGVudBhsIAEoCzIhLnJpdmVyLkdkbUNoYW5uZWxQYXlsb2FkLlNuYXBzaG90SAASPgoSdXNlcl9pbmJveF9jb250ZW50GG0gASgLMiAucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdEgAQgkKB2NvbnRlbnRKBAhlEGZKBAhmEGdKBAhrEGxKBAhuEG9SDXNwYWNlX2NvbnRlbnRSD2NoYW5uZWxfY29udGVudFISZG1fY2hhbm5lbF9jb250ZW50UhBtZXRhZGF0YV9jb250ZW50IrcHChVCbG9ja2NoYWluVHJhbnNhY3Rpb24SNAoHcmVjZWlwdBgBIAEoCzIjLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQSQQoOc29sYW5hX3JlY2VpcHQYAiABKAsyKS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Ei8KA3RpcBhlIAEoCzIgLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXBIABJECg50b2tlbl90cmFuc2ZlchhmIAEoCzIqLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5Ub2tlblRyYW5zZmVySAASQAoMc3BhY2VfcmV2aWV3GGcgASgLMigucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3SAAa7QEKA1RpcBI1CgVldmVudBgBIAEoCzImLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXAuRXZlbnQSFQoNdG9Vc2VyQWRkcmVzcxgCIAEoDBqXAQoFRXZlbnQSFQoIdG9rZW5faWQYASABKARIAIgBARIQCghjdXJyZW5jeRgCIAEoDBIOCgZzZW5kZXIYAyABKAwSEAoIcmVjZWl2ZXIYBCABKAwSDgoGYW1vdW50GAUgASgEEhIKCm1lc3NhZ2VfaWQYBiABKAwSEgoKY2hhbm5lbF9pZBgHIAEoDEILCglfdG9rZW5faWQaeAoNVG9rZW5UcmFuc2ZlchIPCgdhZGRyZXNzGAEgASgMEg4KBmFtb3VudBgCIAEoCRIOCgZzZW5kZXIYAyABKAwSEgoKbWVzc2FnZV9pZBgEIAEoDBISCgpjaGFubmVsX2lkGAUgASgMEg4KBmlzX2J1eRgGIAEoCBr2AQoLU3BhY2VSZXZpZXcSFQoNc3BhY2VfYWRkcmVzcxgBIAEoDBI/CgZhY3Rpb24YAiABKA4yLy5yaXZlci5CbG9ja2NoYWluVHJhbnNhY3Rpb24uU3BhY2VSZXZpZXcuQWN0aW9uEj0KBWV2ZW50GAMgASgLMi4ucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3LkV2ZW50GiUKBUV2ZW50EgwKBHVzZXIYASABKAwSDgoGcmF0aW5nGAIgASgFIikKBkFjdGlvbhIHCgNBZGQQABIKCgZVcGRhdGUQARIKCgZEZWxldGUQAkIJCgdjb250ZW50IucBChxCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EhAKCGNoYWluX2lkGAEgASgEEhgKEHRyYW5zYWN0aW9uX2hhc2gYAiABKAwSFAoMYmxvY2tfbnVtYmVyGAMgASgEEgoKAnRvGAQgASgMEgwKBGZyb20YBSABKAwSNQoEbG9ncxgGIAMoCzInLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQuTG9nGjQKA0xvZxIPCgdhZGRyZXNzGAEgASgMEg4KBnRvcGljcxgCIAMoDBIMCgRkYXRhGAMgASgMItcECiJTb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EgwKBHNsb3QYASABKAQSSgoLdHJhbnNhY3Rpb24YAiABKAsyNS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0LlRyYW5zYWN0aW9uEjwKBG1ldGEYAyABKAsyLi5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEaIQoLVHJhbnNhY3Rpb24SEgoKc2lnbmF0dXJlcxgBIAMoCRr1AgoETWV0YRJXChJwcmVfdG9rZW5fYmFsYW5jZXMYASADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlElgKE3Bvc3RfdG9rZW5fYmFsYW5jZXMYAiADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlGrkBCgxUb2tlbkJhbGFuY2USDAoEbWludBgBIAEoCRINCgVvd25lchgCIAEoCRJZCgZhbW91bnQYAyABKAsySS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlLlVJVG9rZW5BbW91bnQaMQoNVUlUb2tlbkFtb3VudBIOCgZhbW91bnQYASABKAkSEAoIZGVjaW1hbHMYAiABKA0iPgoIRXZlbnRSZWYSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGhhc2gYAiABKAwSEQoJc2lnbmF0dXJlGAMgASgMIkoKDlN0cmVhbVNldHRpbmdzEiIKGmRpc2FibGVfbWluaWJsb2NrX2NyZWF0aW9uGAEgASgIEhQKDGxpZ2h0X3N0cmVhbRgCIAEoCCLQAgoNRW5jcnlwdGVkRGF0YRISCgpjaXBoZXJ0ZXh0GAEgASgJEhEKCWFsZ29yaXRobRgCIAEoCRISCgpzZW5kZXJfa2V5GAMgASgJEhIKCnNlc3Npb25faWQYBCABKAkSFQoIY2hlY2tzdW0YBSABKAlIAIgBARIZCgxyZWZfZXZlbnRfaWQYBiABKAlIAYgBARIYChBjaXBoZXJ0ZXh0X2J5dGVzGAggASgMEhAKCGl2X2J5dGVzGAkgASgMEhgKEHNlc3Npb25faWRfYnl0ZXMYCiABKAwSLAoHdmVyc2lvbhgLIAEoDjIbLnJpdmVyLkVuY3J5cHRlZERhdGFWZXJzaW9uEhcKCmRldmljZV9rZXkYDCABKAlIAogBAUILCglfY2hlY2tzdW1CDwoNX3JlZl9ldmVudF9pZEINCgtfZGV2aWNlX2tleUoECAcQCCJhChRXcmFwcGVkRW5jcnlwdGVkRGF0YRIiCgRkYXRhGAEgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIRCglldmVudF9udW0YAiABKAMSEgoKZXZlbnRfaGFzaBgDIAEoDCJuCgpTeW5jQ29va2llEhQKDG5vZGVfYWRkcmVzcxgBIAEoDBIRCglzdHJlYW1faWQYAiABKAwSFAoMbWluaXBvb2xfZ2VuGAMgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYBSABKAxKBAgEEAUiXQoOQ3JlYXRpb25Db29raWUSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW1pbmlibG9ja19udW0YAyABKAMSGwoTcHJldl9taW5pYmxvY2tfaGFzaBgEIAEoDEoECAIQAyLwAQoPU3RyZWFtQW5kQ29va2llEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEisKEG5leHRfc3luY19jb29raWUYAiABKAsyES5yaXZlci5TeW5jQ29va2llEiQKCm1pbmlibG9ja3MYAyADKAsyEC5yaXZlci5NaW5pYmxvY2sSEgoKc3luY19yZXNldBgEIAEoCBImCghzbmFwc2hvdBgFIAEoCzIPLnJpdmVyLkVudmVsb3BlSACIAQESIAoYc25hcHNob3RfbWluaWJsb2NrX2luZGV4GAYgASgDQgsKCV9zbmFwc2hvdCIrCghNaW5pcG9vbBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZSKjAgoEVGFncxI/ChhtZXNzYWdlX2ludGVyYWN0aW9uX3R5cGUYASABKA4yHS5yaXZlci5NZXNzYWdlSW50ZXJhY3Rpb25UeXBlEjQKE2dyb3VwX21lbnRpb25fdHlwZXMYAiADKA4yFy5yaXZlci5Hcm91cE1lbnRpb25UeXBlEiAKGG1lbnRpb25lZF91c2VyX2FkZHJlc3NlcxgDIAMoDBIkChxwYXJ0aWNpcGF0aW5nX3VzZXJfYWRkcmVzc2VzGAQgAygMEhYKCXRocmVhZF9pZBgFIAEoDEgAiAEBEh8KEmFwcF9jbGllbnRfYWRkcmVzcxgGIAEoDEgBiAEBQgwKCl90aHJlYWRfaWRCFQoTX2FwcF9jbGllbnRfYWRkcmVzcyIcCgtJbmZvUmVxdWVzdBINCgVkZWJ1ZxgBIAMoCSJhCgxJbmZvUmVzcG9uc2USEAoIZ3JhZmZpdGkYASABKAkSLgoKc3RhcnRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHdmVyc2lvbhgDIAEoCSI+ChJHZXRTdHJlYW1FeFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW9taXRfc25hcHNob3QYAiABKAgingEKE0dldFN0cmVhbUV4UmVzcG9uc2USJQoJbWluaWJsb2NrGAEgASgLMhAucml2ZXIuTWluaWJsb2NrSAASIwoIbWluaXBvb2wYAiABKAsyDy5yaXZlci5NaW5pcG9vbEgAEiYKCHNuYXBzaG90GAMgASgLMg8ucml2ZXIuRW52ZWxvcGVIAYgBAUIGCgRkYXRhQgsKCV9zbmFwc2hvdCK2AQoTQ3JlYXRlU3RyZWFtUmVxdWVzdBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZRIRCglzdHJlYW1faWQYAiABKAwSOgoIbWV0YWRhdGEYAyADKAsyKC5yaXZlci5DcmVhdGVTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBImcKFENyZWF0ZVN0cmVhbVJlc3BvbnNlEiYKBnN0cmVhbRgBIAEoCzIWLnJpdmVyLlN0cmVhbUFuZENvb2tpZRInCg5kZXJpdmVkX2V2ZW50cxgCIAMoCzIPLnJpdmVyLkV2ZW50UmVmIsABChhDcmVhdGVNZWRpYVN0cmVhbVJlcXVlc3QSHwoGZXZlbnRzGAEgAygLMg8ucml2ZXIuRW52ZWxvcGUSEQoJc3RyZWFtX2lkGAIgASgMEj8KCG1ldGFkYXRhGAMgAygLMi0ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBIlAKGUNyZWF0ZU1lZGlhU3RyZWFtUmVzcG9uc2USMwoUbmV4dF9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSKHAQoQR2V0U3RyZWFtUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSEAoIb3B0aW9uYWwYAiABKAgSJgoLc3luY19jb29raWUYAyABKAsyES5yaXZlci5TeW5jQ29va2llEiYKHm51bWJlcl9vZl9wcmVjZWRpbmdfbWluaWJsb2NrcxgEIAEoAyI7ChFHZXRTdHJlYW1SZXNwb25zZRImCgZzdHJlYW0YASABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUiLwoLRXZlbnRGaWx0ZXISDwoHcGF5bG9hZBgBIAEoCRIPCgdjb250ZW50GAIgASgJIp0BChRHZXRNaW5pYmxvY2tzUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSFgoOZnJvbV9pbmNsdXNpdmUYAiABKAMSFAoMdG9fZXhjbHVzaXZlGAMgASgDEhYKDm9taXRfc25hcHNob3RzGAQgASgIEiwKEGV4Y2x1c2lvbl9maWx0ZXIYBSADKAsyEi5yaXZlci5FdmVudEZpbHRlciKRAgoVR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEiQKCm1pbmlibG9ja3MYASADKAsyEC5yaXZlci5NaW5pYmxvY2sSEAoIdGVybWludXMYAiABKAgSFgoOZnJvbV9pbmNsdXNpdmUYAyABKAMSDQoFbGltaXQYBCABKAMSFgoOb21pdF9zbmFwc2hvdHMYBSABKAgSPgoJc25hcHNob3RzGAYgAygLMisucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlLlNuYXBzaG90c0VudHJ5GkEKDlNuYXBzaG90c0VudHJ5EgsKA2tleRgBIAEoAxIeCgV2YWx1ZRgCIAEoCzIPLnJpdmVyLkVudmVsb3BlOgI4ASIwChtHZXRMYXN0TWluaWJsb2NrSGFzaFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMIosBChxHZXRMYXN0TWluaWJsb2NrSGFzaFJlc3BvbnNlEgwKBGhhc2gYASABKAwSFQoNbWluaWJsb2NrX251bRgCIAEoAxJGChRlbmNyeXB0aW9uX2FsZ29yaXRobRgDIAEoCzIoLnJpdmVyLk1lbWJlclBheWxvYWQuRW5jcnlwdGlvbkFsZ29yaXRobSJKCg9BZGRFdmVudFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEh4KBWV2ZW50GAIgASgLMg8ucml2ZXIuRW52ZWxvcGVKBAgDEAQiPQoQQWRkRXZlbnRSZXNwb25zZRIjCgpuZXdfZXZlbnRzGAIgAygLMg8ucml2ZXIuRXZlbnRSZWZKBAgBEAIidAoUQWRkTWVkaWFFdmVudFJlcXVlc3QSHgoFZXZlbnQYASABKAsyDy5yaXZlci5FbnZlbG9wZRIuCg9jcmVhdGlvbl9jb29raWUYAiABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZRIMCgRsYXN0GAMgASgIIkcKFUFkZE1lZGlhRXZlbnRSZXNwb25zZRIuCg9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSI5ChJTeW5jU3RyZWFtc1JlcXVlc3QSIwoIc3luY19wb3MYASADKAsyES5yaXZlci5TeW5jQ29va2llIq4BChNTeW5jU3RyZWFtc1Jlc3BvbnNlEg8KB3N5bmNfaWQYASABKAkSHgoHc3luY19vcBgCIAEoDjINLnJpdmVyLlN5bmNPcBImCgZzdHJlYW0YAyABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUSEgoKcG9uZ19ub25jZRgEIAEoCRIRCglzdHJlYW1faWQYBSABKAwSFwoPdGFyZ2V0X3N5bmNfaWRzGAYgAygJIuIBChFNb2RpZnlTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJEiYKC2FkZF9zdHJlYW1zGAIgAygLMhEucml2ZXIuU3luY0Nvb2tpZRIWCg5yZW1vdmVfc3RyZWFtcxgDIAMoDBI7ChBiYWNrZmlsbF9zdHJlYW1zGAQgASgLMiEucml2ZXIuTW9kaWZ5U3luY1JlcXVlc3QuQmFja2ZpbGwaPwoIQmFja2ZpbGwSIgoHc3RyZWFtcxgBIAMoCzIRLnJpdmVyLlN5bmNDb29raWUSDwoHc3luY19pZBgCIAEoCSJcChJTeW5jU3RyZWFtT3BTdGF0dXMSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGNvZGUYAiABKAUSDwoHbWVzc2FnZRgDIAEoCRIUCgxub2RlX2FkZHJlc3MYBCABKAwimAEKEk1vZGlmeVN5bmNSZXNwb25zZRInCgRhZGRzGAEgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEisKCHJlbW92YWxzGAIgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEiwKCWJhY2tmaWxscxgDIAMoCzIZLnJpdmVyLlN5bmNTdHJlYW1PcFN0YXR1cyIkChFDYW5jZWxTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJIhQKEkNhbmNlbFN5bmNSZXNwb25zZSIxCg9QaW5nU3luY1JlcXVlc3QSDwoHc3luY19pZBgBIAEoCRINCgVub25jZRgCIAEoCSISChBQaW5nU3luY1Jlc3BvbnNlIh0KCVJlZGFjdGlvbhIQCghldmVudF9pZBgBIAEoDCLyFwoZSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZBJGChFlbmNyeXB0aW9uX2RldmljZRgBIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZRI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEjUKBGZvcm0YZiABKAsyJS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLkZvcm1IABJDCgt0cmFuc2FjdGlvbhhnIAEoCzIsLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb25IABJACgphZGRfbWVtYmVyGGggASgLMioucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5BZGRNZW1iZXJIABJICg5wcmVwYXJlZF9jYWxscxhpIAEoCzIuLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxsc0gAEjcKBWJhdGNoGGogASgLMiYucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5CYXRjaEgAGu8DCglTaWduYXR1cmUSCgoCaWQYASABKAkSDAoEZGF0YRgCIAEoCRIQCghjaGFpbl9pZBgDIAEoCRIaCg1zaWduZXJfd2FsbGV0GAQgASgJSACIAQESRgoEdHlwZRgFIAEoDjI4LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuU2lnbmF0dXJlLlNpZ25hdHVyZVR5cGUSEgoFdGl0bGUYBiABKAlIAYgBARIVCghzdWJ0aXRsZRgHIAEoCUgCiAEBEmEKFHNpZ25hdHVyZV92YWxpZGF0aW9uGAggASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5TaWduYXR1cmUuU2lnbmF0dXJlVmFsaWRhdGlvbkgDiAEBIjIKDVNpZ25hdHVyZVR5cGUSEQoNUEVSU09OQUxfU0lHThAAEg4KClRZUEVEX0RBVEEQASJOChNTaWduYXR1cmVWYWxpZGF0aW9uEg8KC1VOU1BFQ0lGSUVEEAASDwoLRUlQNzEyX09OTFkQARIVChFFSVA3MTJfT1JfRUlQMTI3MRACQhAKDl9zaWduZXJfd2FsbGV0QggKBl90aXRsZUILCglfc3VidGl0bGVCFwoVX3NpZ25hdHVyZV92YWxpZGF0aW9uGpYDCgRGb3JtEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARJDCgpjb21wb25lbnRzGAQgAygLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5Gb3JtLkNvbXBvbmVudBr6AQoJQ29tcG9uZW50EgoKAmlkGAEgASgJEkgKBmJ1dHRvbhhlIAEoCzI2LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASTwoKdGV4dF9pbnB1dBhmIAEoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuVGV4dElucHV0SAAaFwoGQnV0dG9uEg0KBWxhYmVsGAEgASgJGiAKCVRleHRJbnB1dBITCgtwbGFjZWhvbGRlchgBIAEoCUILCgljb21wb25lbnRCCAoGX3RpdGxlQgsKCV9zdWJ0aXRsZRr/AgoLVHJhbnNhY3Rpb24SCgoCaWQYASABKAkSEgoFdGl0bGUYAiABKAlIAYgBARIVCghzdWJ0aXRsZRgDIAEoCUgCiAEBEkQKA2V2bRhlIAEoCzI1LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb24uRVZNQmF0Y2hIABo1CgpFVk1Db250ZW50EgoKAnRvGAEgASgJEg0KBXZhbHVlGAIgASgJEgwKBGRhdGEYAyABKAkamQEKCEVWTUJhdGNoEhAKCGNoYWluX2lkGAEgASgJEhoKDXNpZ25lcl93YWxsZXQYAiABKAlIAIgBARJNCgx0cmFuc2FjdGlvbnMYAyADKAsyNy5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlRyYW5zYWN0aW9uLkVWTUNvbnRlbnRCEAoOX3NpZ25lcl93YWxsZXRCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlGkoKCUFkZE1lbWJlchIKCgJpZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgMEhQKB21lc3NhZ2UYAyABKAlIAIgBAUIKCghfbWVzc2FnZRrzBgoNUHJlcGFyZWRDYWxscxIKCgJpZBgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRISCgp0eXBlZF9kYXRhGAMgASgJEg8KB2NvbnRleHQYBCABKAkSEgoFdGl0bGUYBSABKAlIAIgBARIVCghzdWJ0aXRsZRgGIAEoCUgBiAEBElMKDmF1dGhvcml6ZV9rZXlzGAcgAygLMjsucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLkF1dGhvcml6ZUtleRrmAwoKUGVybWlzc2lvbhJMCgR0eXBlGAEgASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uVHlwZRJOCgRjYWxsGAIgASgLMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uQ2FsbEgAElAKBXNwZW5kGAMgASgLMj8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uU3BlbmRIABpCCgRDYWxsEg8KAnRvGAEgASgJSACIAQESFQoIc2VsZWN0b3IYAiABKAlIAYgBAUIFCgNfdG9CCwoJX3NlbGVjdG9yGmMKBVNwZW5kEhIKBXRva2VuGAEgASgJSACIAQESEgoFbGltaXQYAiABKAlIAYgBARITCgZwZXJpb2QYAyABKAlIAogBAUIICgZfdG9rZW5CCAoGX2xpbWl0QgkKB19wZXJpb2QiMQoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASCAoEQ0FMTBABEgkKBVNQRU5EEAJCDAoKcGVybWlzc2lvbhqeAQoMQXV0aG9yaXplS2V5Eg4KBmV4cGlyeRgBIAEoCRIMCgR0eXBlGAIgASgJEgwKBHJvbGUYAyABKAkSEgoKcHVibGljX2tleRgEIAEoCRJOCgtwZXJtaXNzaW9ucxgFIAMoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxscy5QZXJtaXNzaW9uQggKBl90aXRsZUILCglfc3VidGl0bGUasAIKBUJhdGNoEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARI6CgVzdGVwcxgEIAMoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuQmF0Y2guU3RlcBqcAQoEU3RlcBI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEkgKDnByZXBhcmVkX2NhbGxzGGkgASgLMi4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzSABCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlQgkKB2NvbnRlbnQilAEKEkludGVyYWN0aW9uUmVxdWVzdBIWCglyZWNpcGllbnQYASABKAxIAIgBARIsCg5lbmNyeXB0ZWRfZGF0YRgDIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGESFgoJdGhyZWFkX2lkGAQgASgMSAGIAQFCDAoKX3JlY2lwaWVudEIMCgpfdGhyZWFkX2lkSgQIAhADInwKE0ludGVyYWN0aW9uUmVzcG9uc2USEQoJcmVjaXBpZW50GAEgASgMEiwKDmVuY3J5cHRlZF9kYXRhGAIgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIWCgl0aHJlYWRfaWQYAyABKAxIAIgBAUIMCgpfdGhyZWFkX2lkIugKChpJbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZBIMCgRzYWx0GAEgASgMEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEjYKBGZvcm0YZiABKAsyJi5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5Gb3JtSAASRAoLdHJhbnNhY3Rpb24YZyABKAsyLS5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5UcmFuc2FjdGlvbkgAEkEKCmFkZF9tZW1iZXIYaCABKAsyKy5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5BZGRNZW1iZXJIABJJCg5wcmVwYXJlZF9jYWxscxhpIAEoCzIvLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlByZXBhcmVkQ2FsbHNIABI4CgViYXRjaBhqIAEoCzInLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoSAAaMgoJU2lnbmF0dXJlEhIKCnJlcXVlc3RfaWQYASABKAkSEQoJc2lnbmF0dXJlGAIgASgJGsoCCgRGb3JtEhIKCnJlcXVlc3RfaWQYASABKAkSRAoKY29tcG9uZW50cxgCIAMoCzIwLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50GucBCglDb21wb25lbnQSCgoCaWQYASABKAkSSQoGYnV0dG9uGGUgASgLMjcucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASUAoKdGV4dF9pbnB1dBhmIAEoCzI6LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50LlRleHRJbnB1dEgAGggKBkJ1dHRvbhoaCglUZXh0SW5wdXQSDQoFdmFsdWUYASABKAlCCwoJY29tcG9uZW50GjIKC1RyYW5zYWN0aW9uEhIKCnJlcXVlc3RfaWQYASABKAkSDwoHdHhfaGFzaBgCIAEoCRoxCglBZGRNZW1iZXISEgoKcmVxdWVzdF9pZBgBIAEoCRIQCghhY2NlcHRlZBgCIAEoCBq0AQoNUHJlcGFyZWRDYWxscxISCgpyZXF1ZXN0X2lkGAEgASgJEhEKCXNpZ25hdHVyZRgCIAEoCRIeChFwYXltZW50X3NpZ25hdHVyZRgDIAEoCUgAiAEBEhQKB2NvbnRleHQYBCABKAlIAYgBARIWCglidW5kbGVfaWQYBSABKAlIAogBAUIUChJfcGF5bWVudF9zaWduYXR1cmVCCgoIX2NvbnRleHRCDAoKX2J1bmRsZV9pZBqJAgoFQmF0Y2gSEgoKcmVxdWVzdF9pZBgBIAEoCRJDCgVzdGVwcxgCIAMoCzI0LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoLlN0ZXBSZXNwb25zZRqmAQoMU3RlcFJlc3BvbnNlEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEkkKDnByZXBhcmVkX2NhbGxzGGkgASgLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuUHJlcGFyZWRDYWxsc0gAQgkKB2NvbnRlbnRCCQoHY29udGVudCKLAQoTSW52aXRlU2lnbmVkUGF5bG9hZBIPCgd1c2VyX2lkGAEgASgMEhEKCXN0cmVhbV9pZBgCIAEoDBIUCgx0aW1lc3RhbXBfbXMYAyABKAMSDAoEc2FsdBgEIAEoDBIRCglzaWduYXR1cmUYBSABKAwSGQoRc2lnbmVyX3B1YmxpY19rZXkYBiABKAwqawoGU3luY09wEhQKEFNZTkNfVU5TUEVDSUZJRUQQABIMCghTWU5DX05FVxABEg4KClNZTkNfQ0xPU0UQAhIPCgtTWU5DX1VQREFURRADEg0KCVNZTkNfUE9ORxAEEg0KCVNZTkNfRE9XThAFKkwKDE1lbWJlcnNoaXBPcBISCg5TT19VTlNQRUNJRklFRBAAEg0KCVNPX0lOVklURRABEgsKB1NPX0pPSU4QAhIMCghTT19MRUFWRRADKoUBChBNZW1iZXJzaGlwUmVhc29uEgsKB01SX05PTkUQABITCg9NUl9OT1RfRU5USVRMRUQQARIOCgpNUl9FWFBJUkVEEAISIQodTVJfQ09OVEFDVF9KT0lOX0VYSVNUSU5HX1VTRVIQAxIcChhNUl9DT05UQUNUX0pPSU5fTkVXX1VTRVIQBCpPCglDaGFubmVsT3ASEgoOQ09fVU5TUEVDSUZJRUQQABIOCgpDT19DUkVBVEVEEAESDgoKQ09fREVMRVRFRBACEg4KCkNPX1VQREFURUQQBCrtAgoWTWVzc2FnZUludGVyYWN0aW9uVHlwZRIoCiRNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVQTFkQARIlCiFNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVBQ1RJT04QAhIhCh1NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUE9TVBADEiEKHU1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9FRElUEAQSJgoiTUVTU0FHRV9JTlRFUkFDVElPTl9UWVBFX1JFREFDVElPThAFEiAKHE1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9USVAQBhIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVFJBREUQBxIqCiZNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfU0xBU0hfQ09NTUFORBAIKlkKEEdyb3VwTWVudGlvblR5cGUSIgoeR1JPVVBfTUVOVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASIQodR1JPVVBfTUVOVElPTl9UWVBFX0FUX0NIQU5ORUwQASpSChRFbmNyeXB0ZWREYXRhVmVyc2lvbhIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzAQABIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzEQASr1DAoDRXJyEhMKD0VSUl9VTlNQRUNJRklFRBAAEgwKCENBTkNFTEVEEAESCwoHVU5LTk9XThACEhQKEElOVkFMSURfQVJHVU1FTlQQAxIVChFERUFETElORV9FWENFRURFRBAEEg0KCU5PVF9GT1VORBAFEhIKDkFMUkVBRFlfRVhJU1RTEAYSFQoRUEVSTUlTU0lPTl9ERU5JRUQQBxIWChJSRVNPVVJDRV9FWEhBVVNURUQQCBIXChNGQUlMRURfUFJFQ09ORElUSU9OEAkSCwoHQUJPUlRFRBAKEhAKDE9VVF9PRl9SQU5HRRALEhEKDVVOSU1QTEVNRU5URUQQDBIMCghJTlRFUk5BTBANEg8KC1VOQVZBSUxBQkxFEA4SDQoJREFUQV9MT1NTEA8SEwoPVU5BVVRIRU5USUNBVEVEEBASDwoLREVCVUdfRVJST1IQERIRCg1CQURfU1RSRUFNX0lEEBISHgoaQkFEX1NUUkVBTV9DUkVBVElPTl9QQVJBTVMQExIZChVJTlRFUk5BTF9FUlJPUl9TV0lUQ0gQFBIQCgxCQURfRVZFTlRfSUQQFRIXChNCQURfRVZFTlRfU0lHTkFUVVJFEBYSEwoPQkFEX0hBU0hfRk9STUFUEBcSGwoXQkFEX1BSRVZfTUlOSUJMT0NLX0hBU0gQGBIWChJOT19FVkVOVF9TUEVDSUZJRUQQGRINCglCQURfRVZFTlQQGhISCg5VU0VSX0NBTlRfUE9TVBAbEhUKEVNUUkVBTV9CQURfSEFTSEVTEBwSEAoMU1RSRUFNX0VNUFRZEB0SFAoQU1RSRUFNX0JBRF9FVkVOVBAeEhQKEEJBRF9ERUxFR0FURV9TSUcQHxISCg5CQURfUFVCTElDX0tFWRAgEg8KC0JBRF9QQVlMT0FEECESEgoOQkFEX0hFWF9TVFJJTkcQIhISCg5CQURfRVZFTlRfSEFTSBAjEhMKD0JBRF9TWU5DX0NPT0tJRRAkEhMKD0RVUExJQ0FURV9FVkVOVBAlEg0KCUJBRF9CTE9DSxAmEh0KGVNUUkVBTV9OT19JTkNFUFRJT05fRVZFTlQQJxIUChBCQURfQkxPQ0tfTlVNQkVSECgSFQoRQkFEX01JTklQT09MX1NMT1QQKRIXChNCQURfQ1JFQVRPUl9BRERSRVNTECoSEgoOU1RBTEVfREVMRUdBVEUQKxIhCh1CQURfTElOS19XQUxMRVRfQkFEX1NJR05BVFVSRRAsEhMKD0JBRF9ST09UX0tFWV9JRBAtEhAKDFVOS05PV05fTk9ERRAuEhgKFERCX09QRVJBVElPTl9GQUlMVVJFEC8SHgoaTUlOSUJMT0NLU19TVE9SQUdFX0ZBSUxVUkUQMBIPCgtCQURfQUREUkVTUxAxEg8KC0JVRkZFUl9GVUxMEDISDgoKQkFEX0NPTkZJRxAzEhAKDEJBRF9DT05UUkFDVBA0EhIKDkNBTk5PVF9DT05ORUNUEDUSHQoZQ0FOTk9UX0dFVF9MSU5LRURfV0FMTEVUUxA2Eh0KGUNBTk5PVF9DSEVDS19FTlRJVExFTUVOVFMQNxIYChRDQU5OT1RfQ0FMTF9DT05UUkFDVBA4EhIKDlNQQUNFX0RJU0FCTEVEEDkSFAoQQ0hBTk5FTF9ESVNBQkxFRBA6EhUKEVdST05HX1NUUkVBTV9UWVBFEDsSGwoXTUlOSVBPT0xfTUlTU0lOR19FVkVOVFMQPBIeChpTVFJFQU1fTEFTVF9CTE9DS19NSVNNQVRDSBA9EhwKGERPV05TVFJFQU1fTkVUV09SS19FUlJPUhA+EhUKEU1JTklCTE9DS19UT09fTkVXED8SFQoRTUlOSUJMT0NLX1RPT19PTEQQQBIRCg1RVU9SVU1fRkFJTEVEEEESFwoTQ0FOTk9UX0NBTExfV0VCSE9PSxBCEh4KGk1BTEZPUk1FRF9XRUJIT09LX1JFU1BPTlNFEEMSGQoVQkFEX0VOQ1JZUFRJT05fREVWSUNFEEQSIgoeU1RSRUFNX1JFQ09OQ0lMSUFUSU9OX1JFUVVJUkVEEEUSHQoZU1lOQ19TRVNTSU9OX1JVTk5FUl9FTVBUWRBGEiQKIFNZTkNfU0VTU0lPTl9SVU5ORVJfVU5BU1NJR05BQkxFEEcSGAoUTUlOSUJMT0NLU19OT1RfRk9VTkQQSDKqBwoNU3RyZWFtU2VydmljZRIvCgRJbmZvEhIucml2ZXIuSW5mb1JlcXVlc3QaEy5yaXZlci5JbmZvUmVzcG9uc2USRwoMQ3JlYXRlU3RyZWFtEhoucml2ZXIuQ3JlYXRlU3RyZWFtUmVxdWVzdBobLnJpdmVyLkNyZWF0ZVN0cmVhbVJlc3BvbnNlElYKEUNyZWF0ZU1lZGlhU3RyZWFtEh8ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0GiAucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXNwb25zZRI+CglHZXRTdHJlYW0SFy5yaXZlci5HZXRTdHJlYW1SZXF1ZXN0Ghgucml2ZXIuR2V0U3RyZWFtUmVzcG9uc2USRgoLR2V0U3RyZWFtRXgSGS5yaXZlci5HZXRTdHJlYW1FeFJlcXVlc3QaGi5yaXZlci5HZXRTdHJlYW1FeFJlc3BvbnNlMAESSgoNR2V0TWluaWJsb2NrcxIbLnJpdmVyLkdldE1pbmlibG9ja3NSZXF1ZXN0Ghwucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEl8KFEdldExhc3RNaW5pYmxvY2tIYXNoEiIucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXF1ZXN0GiMucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXNwb25zZRI7CghBZGRFdmVudBIWLnJpdmVyLkFkZEV2ZW50UmVxdWVzdBoXLnJpdmVyLkFkZEV2ZW50UmVzcG9uc2USSgoNQWRkTWVkaWFFdmVudBIbLnJpdmVyLkFkZE1lZGlhRXZlbnRSZXF1ZXN0Ghwucml2ZXIuQWRkTWVkaWFFdmVudFJlc3BvbnNlEkYKC1N5bmNTdHJlYW1zEhkucml2ZXIuU3luY1N0cmVhbXNSZXF1ZXN0Ghoucml2ZXIuU3luY1N0cmVhbXNSZXNwb25zZTABEkEKCk1vZGlmeVN5bmMSGC5yaXZlci5Nb2RpZnlTeW5jUmVxdWVzdBoZLnJpdmVyLk1vZGlmeVN5bmNSZXNwb25zZRJBCgpDYW5jZWxTeW5jEhgucml2ZXIuQ2FuY2VsU3luY1JlcXVlc3QaGS5yaXZlci5DYW5jZWxTeW5jUmVzcG9uc2USOwoIUGluZ1N5bmMSFi5yaXZlci5QaW5nU3luY1JlcXVlc3QaFy5yaXZlci5QaW5nU3luY1Jlc3BvbnNlQjRaMmdpdGh1Yi5jb20vdG93bnMtcHJvdG9jb2wvdG93bnMvY29yZS9ub2RlL3Byb3RvY29sYgZwcm90bzM", [import_wkt2.file_google_protobuf_any, import_wkt2.file_google_protobuf_empty, import_wkt2.file_google_protobuf_timestamp]);
7613
7612
  var EnvelopeSchema = /* @__PURE__ */ (0, import_codegenv22.messageDesc)(file_protocol, 1);
7614
7613
  var StreamEventSchema = /* @__PURE__ */ (0, import_codegenv22.messageDesc)(file_protocol, 2);
7615
7614
  var UserSettingsPayload_Snapshot_UserBlocksSchema = /* @__PURE__ */ (0, import_codegenv22.messageDesc)(file_protocol, 8, 0, 0);
@@ -7668,6 +7667,8 @@ var MembershipReason;
7668
7667
  MembershipReason2[MembershipReason2["MR_NONE"] = 0] = "MR_NONE";
7669
7668
  MembershipReason2[MembershipReason2["MR_NOT_ENTITLED"] = 1] = "MR_NOT_ENTITLED";
7670
7669
  MembershipReason2[MembershipReason2["MR_EXPIRED"] = 2] = "MR_EXPIRED";
7670
+ MembershipReason2[MembershipReason2["MR_CONTACT_JOIN_EXISTING_USER"] = 3] = "MR_CONTACT_JOIN_EXISTING_USER";
7671
+ MembershipReason2[MembershipReason2["MR_CONTACT_JOIN_NEW_USER"] = 4] = "MR_CONTACT_JOIN_NEW_USER";
7671
7672
  })(MembershipReason || (MembershipReason = {}));
7672
7673
  var ChannelOp;
7673
7674
  (function(ChannelOp2) {
@@ -7777,7 +7778,7 @@ var Err;
7777
7778
  var StreamService = /* @__PURE__ */ (0, import_codegenv22.serviceDesc)(file_protocol, 0);
7778
7779
 
7779
7780
  // ../proto/dist/gen/apps_pb.js
7780
- var file_apps = /* @__PURE__ */ (0, import_codegenv23.fileDesc)("CgphcHBzLnByb3RvEgVyaXZlciKFAQoLQXBwU2V0dGluZ3MSMwoPZm9yd2FyZF9zZXR0aW5nGAEgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZRIUCgh0cmFkYWJsZRgCIAEoCEICGAESKwoOc3VwcG9ydGVkX2FwaXMYAyADKA4yEy5yaXZlci5TdXBwb3J0ZWRBcGkigwEKD1JlZ2lzdGVyUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSFAoMYXBwX293bmVyX2lkGAIgASgMEiQKCHNldHRpbmdzGAMgASgLMhIucml2ZXIuQXBwU2V0dGluZ3MSJAoIbWV0YWRhdGEYBCABKAsyEi5yaXZlci5BcHBNZXRhZGF0YSIvChBSZWdpc3RlclJlc3BvbnNlEhsKE2hzMjU2X3NoYXJlZF9zZWNyZXQYASABKAwiPQoWUmVnaXN0ZXJXZWJob29rUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSEwoLd2ViaG9va191cmwYAiABKAkiGQoXUmVnaXN0ZXJXZWJob29rUmVzcG9uc2UiTQoVU2V0QXBwU2V0dGluZ3NSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIkCghzZXR0aW5ncxgCIAEoCzISLnJpdmVyLkFwcFNldHRpbmdzIhgKFlNldEFwcFNldHRpbmdzUmVzcG9uc2UiugEKGFVwZGF0ZUFwcFNldHRpbmdzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSOAoPZm9yd2FyZF9zZXR0aW5nGAIgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZUgAiAEBEisKDnN1cHBvcnRlZF9hcGlzGAMgAygOMhMucml2ZXIuU3VwcG9ydGVkQXBpEhMKC3VwZGF0ZV9tYXNrGAQgAygJQhIKEF9mb3J3YXJkX3NldHRpbmciGwoZVXBkYXRlQXBwU2V0dGluZ3NSZXNwb25zZSInChVHZXRBcHBTZXR0aW5nc1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMImgKFkdldEFwcFNldHRpbmdzUmVzcG9uc2USJAoIc2V0dGluZ3MYASABKAsyEi5yaXZlci5BcHBTZXR0aW5ncxIYCgt3ZWJob29rX3VybBgCIAEoCUgAiAEBQg4KDF93ZWJob29rX3VybCIlChNSb3RhdGVTZWNyZXRSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCIzChRSb3RhdGVTZWNyZXRSZXNwb25zZRIbChNoczI1Nl9zaGFyZWRfc2VjcmV0GAEgASgMIiIKEEdldFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIowBChFHZXRTdGF0dXNSZXNwb25zZRIVCg1pc19yZWdpc3RlcmVkGAEgASgIEhYKDnZhbGlkX3Jlc3BvbnNlGAIgASgIEjgKBnN0YXR1cxgDIAEoCzIoLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5TdGF0dXNSZXNwb25zZRIOCgZhY3RpdmUYBCABKAgiXAoRR2V0U2Vzc2lvblJlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhQKCnNlc3Npb25faWQYAiABKAlIABITCglzdHJlYW1faWQYAyABKAxIAEIMCgppZGVudGlmaWVyIkgKEkdldFNlc3Npb25SZXNwb25zZRIyChlncm91cF9lbmNyeXB0aW9uX3Nlc3Npb25zGAEgASgLMg8ucml2ZXIuRW52ZWxvcGUiugIKDEV2ZW50UGF5bG9hZBIwCghtZXNzYWdlcxgBIAEoCzIcLnJpdmVyLkV2ZW50UGF5bG9hZC5NZXNzYWdlc0gAEjcKDHNvbGljaXRhdGlvbhgCIAEoCzIfLnJpdmVyLkV2ZW50UGF5bG9hZC5Tb2xpY2l0S2V5c0gAGn0KCE1lc3NhZ2VzEhEKCXN0cmVhbV9pZBgBIAEoDBIhCghtZXNzYWdlcxgCIAMoCzIPLnJpdmVyLkVudmVsb3BlEjsKImdyb3VwX2VuY3J5cHRpb25fc2Vzc2lvbnNfbWVzc2FnZXMYAyADKAsyDy5yaXZlci5FbnZlbG9wZRo1CgtTb2xpY2l0S2V5cxIRCglzdHJlYW1faWQYASABKAwSEwoLc2Vzc2lvbl9pZHMYAiADKAlCCQoHcGF5bG9hZCI0Cg1FdmVudHNQYXlsb2FkEiMKBmV2ZW50cxgBIAMoCzITLnJpdmVyLkV2ZW50UGF5bG9hZCKmCAoRQXBwU2VydmljZVJlcXVlc3QSLAoKaW5pdGlhbGl6ZRhlIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEigKBnN0YXR1cxhmIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEiYKBmV2ZW50cxhnIAEoCzIULnJpdmVyLkV2ZW50c1BheWxvYWRIABIsCglwb3NpdGlvbnMYaCABKAsyFy5yaXZlci5Qb3NpdGlvbnNSZXF1ZXN0SAASPgoJcHJvcG9zYWxzGGkgASgLMikucml2ZXIuQXBwU2VydmljZVJlcXVlc3QuUHJvcG9zYWxzUmVxdWVzdEgAEkYKEWNvbmNpZXJnZV9yZXF1ZXN0GGogASgLMikucml2ZXIuQXBwU2VydmljZVJlcXVlc3QuQ29uY2llcmdlUmVxdWVzdEgAGvQCChBQcm9wb3NhbHNSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhIKCnVzZXJfcXVlcnkYAiABKAkSFAoHY29udGV4dBgDIAEoCUgAiAEBEjoKC2ludm9jYXRpb25zGAQgAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEhcKCnRpbWVvdXRfbXMYBSABKAVIAYgBARIaCg11c2VyX3RpbWV6b25lGAYgASgJSAKIAQESSQoIbWV0YWRhdGEYByADKAsyNy5yaXZlci5BcHBTZXJ2aWNlUmVxdWVzdC5Qcm9wb3NhbHNSZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgoKCF9jb250ZXh0Qg0KC190aW1lb3V0X21zQhAKDl91c2VyX3RpbWV6b25lGtgCChBDb25jaWVyZ2VSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhIKCnVzZXJfcXVlcnkYAiABKAkSFAoHY29udGV4dBgDIAEoCUgAiAEBEhkKDGV4dGVybmFsX3JlZhgEIAEoCUgBiAEBEiAKE3Byb3Bvc2FsX3RpbWVvdXRfbXMYBSABKANIAogBARIhChRjb25jaWVyZ2VfdGltZW91dF9tcxgGIAEoA0gDiAEBEhoKDXVzZXJfdGltZXpvbmUYByABKAlIBIgBARIUCgd1c2VyX2lkGAggASgMSAWIAQFCCgoIX2NvbnRleHRCDwoNX2V4dGVybmFsX3JlZkIWChRfcHJvcG9zYWxfdGltZW91dF9tc0IXChVfY29uY2llcmdlX3RpbWVvdXRfbXNCEAoOX3VzZXJfdGltZXpvbmVCCgoIX3VzZXJfaWRCCQoHcGF5bG9hZCKPBQoSQXBwU2VydmljZVJlc3BvbnNlEkIKCmluaXRpYWxpemUYZSABKAsyLC5yaXZlci5BcHBTZXJ2aWNlUmVzcG9uc2UuSW5pdGlhbGl6ZVJlc3BvbnNlSAASOgoGc3RhdHVzGGYgASgLMigucml2ZXIuQXBwU2VydmljZVJlc3BvbnNlLlN0YXR1c1Jlc3BvbnNlSAASLQoJcG9zaXRpb25zGGcgASgLMhgucml2ZXIuUG9zaXRpb25zUmVzcG9uc2VIABJACglwcm9wb3NhbHMYaCABKAsyKy5yaXZlci5BcHBTZXJ2aWNlUmVzcG9uc2UuUHJvcG9zYWxzUmVzcG9uc2VIABJJChJjb25jaWVyZ2VfcmVzcG9uc2UYaSABKAsyKy5yaXZlci5BcHBTZXJ2aWNlUmVzcG9uc2UuQ29uY2llcmdlUmVzcG9uc2VIABpcChJJbml0aWFsaXplUmVzcG9uc2USRgoRZW5jcnlwdGlvbl9kZXZpY2UYASABKAsyKy5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkVuY3J5cHRpb25EZXZpY2UahQEKDlN0YXR1c1Jlc3BvbnNlEhkKEWZyYW1ld29ya192ZXJzaW9uGAEgASgFEhIKCmRldmljZV9rZXkYAiABKAkSFAoMZmFsbGJhY2tfa2V5GAMgASgJEhsKDmNsaWVudF92ZXJzaW9uGAQgASgJSACIAQFCEQoPX2NsaWVudF92ZXJzaW9uGiUKEVByb3Bvc2Fsc1Jlc3BvbnNlEhAKCGFjY2VwdGVkGAEgASgIGiUKEUNvbmNpZXJnZVJlc3BvbnNlEhAKCGFjY2VwdGVkGAEgASgIQgkKB3BheWxvYWQi8AEKCFBvc2l0aW9uEg0KBWxhYmVsGAEgASgJEhgKC2Rlc2NyaXB0aW9uGAIgASgJSACIAQESDgoGc3ltYm9sGAMgASgJEiEKBHR5cGUYBCABKA4yEy5yaXZlci5Qb3NpdGlvblR5cGUSEwoLYmFsYW5jZV91c2QYBSABKAkSDwoHcG5sX3VzZBgGIAEoCRIVCghjaGFpbl9pZBgHIAEoBEgBiAEBEhsKDm5hdGl2ZV9iYWxhbmNlGAggASgJSAKIAQFCDgoMX2Rlc2NyaXB0aW9uQgsKCV9jaGFpbl9pZEIRCg9fbmF0aXZlX2JhbGFuY2UiIwoQUG9zaXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgMInsKEVBvc2l0aW9uc1Jlc3BvbnNlEhEKCXN1cHBvcnRlZBgBIAEoCBISCgVlcnJvchgCIAEoCUgAiAEBEiIKCXBvc2l0aW9ucxgDIAMoCzIPLnJpdmVyLlBvc2l0aW9uEhEKCXRpbWVzdGFtcBgEIAEoA0IICgZfZXJyb3IiMQoMU2xhc2hDb21tYW5kEgwKBG5hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkiOwoRQ2FwYWJpbGl0eUV4YW1wbGUSEgoKdXNlcl9xdWVyeRgBIAEoCRISCgpwYXJhbWV0ZXJzGAIgASgJInEKCkNhcGFiaWxpdHkSDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRIUCgxpbnB1dF9zY2hlbWEYAyABKAkSKgoIZXhhbXBsZXMYBCADKAsyGC5yaXZlci5DYXBhYmlsaXR5RXhhbXBsZSKPAQoSQ2FwYWJpbGl0eU1hbmlmZXN0EhAKCGFnZW50X2lkGAEgASgMEhIKCmFnZW50X25hbWUYAiABKAkSGQoRYWdlbnRfZGVzY3JpcHRpb24YAyABKAkSJwoMY2FwYWJpbGl0aWVzGAQgAygLMhEucml2ZXIuQ2FwYWJpbGl0eRIPCgd2ZXJzaW9uGAUgASgJIoACCgtBcHBNZXRhZGF0YRIQCgh1c2VybmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRIRCglpbWFnZV91cmwYAyABKAkSGQoMZXh0ZXJuYWxfdXJsGAQgASgJSACIAQESKwoOc2xhc2hfY29tbWFuZHMYBiADKAsyEy5yaXZlci5TbGFzaENvbW1hbmQSFAoMZGlzcGxheV9uYW1lGAcgASgJEg0KBW1vdHRvGAggASgJEicKDGNhcGFiaWxpdGllcxgJIAMoCzIRLnJpdmVyLkNhcGFiaWxpdHlCDwoNX2V4dGVybmFsX3VybEoECAUQBlIKYXZhdGFyX3VybCLlAgoRQXBwTWV0YWRhdGFVcGRhdGUSFQoIdXNlcm5hbWUYASABKAlIAIgBARIYCgtkZXNjcmlwdGlvbhgCIAEoCUgBiAEBEhYKCWltYWdlX3VybBgDIAEoCUgCiAEBEhkKDGV4dGVybmFsX3VybBgEIAEoCUgDiAEBEisKDnNsYXNoX2NvbW1hbmRzGAYgAygLMhMucml2ZXIuU2xhc2hDb21tYW5kEhkKDGRpc3BsYXlfbmFtZRgHIAEoCUgEiAEBEhIKBW1vdHRvGAggASgJSAWIAQESJwoMY2FwYWJpbGl0aWVzGAkgAygLMhEucml2ZXIuQ2FwYWJpbGl0eUILCglfdXNlcm5hbWVCDgoMX2Rlc2NyaXB0aW9uQgwKCl9pbWFnZV91cmxCDwoNX2V4dGVybmFsX3VybEIPCg1fZGlzcGxheV9uYW1lQggKBl9tb3R0b0oECAUQBlIKYXZhdGFyX3VybCJrChhVcGRhdGVBcHBNZXRhZGF0YVJlcXVlc3QSDgoGYXBwX2lkGAEgASgMEioKCG1ldGFkYXRhGAIgASgLMhgucml2ZXIuQXBwTWV0YWRhdGFVcGRhdGUSEwoLdXBkYXRlX21hc2sYAyADKAkiGwoZVXBkYXRlQXBwTWV0YWRhdGFSZXNwb25zZSInChVHZXRBcHBNZXRhZGF0YVJlcXVlc3QSDgoGYXBwX2lkGAEgASgMIj4KFkdldEFwcE1ldGFkYXRhUmVzcG9uc2USJAoIbWV0YWRhdGEYASABKAsyEi5yaXZlci5BcHBNZXRhZGF0YSIqChZWYWxpZGF0ZUJvdE5hbWVSZXF1ZXN0EhAKCHVzZXJuYW1lGAEgASgJIkYKF1ZhbGlkYXRlQm90TmFtZVJlc3BvbnNlEhQKDGlzX2F2YWlsYWJsZRgBIAEoCBIVCg1lcnJvcl9tZXNzYWdlGAIgASgJIjsKGVNldEFwcEFjdGl2ZVN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEg4KBmFjdGl2ZRgCIAEoCCIcChpTZXRBcHBBY3RpdmVTdGF0dXNSZXNwb25zZSI/ChtTZXRBcHBQcm9tb3RlZFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhAKCHByb21vdGVkGAIgASgIIh4KHFNldEFwcFByb21vdGVkU3RhdHVzUmVzcG9uc2UiPwobU2V0QXBwVmVyaWZpZWRTdGF0dXNSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIQCgh2ZXJpZmllZBgCIAEoCCIeChxTZXRBcHBWZXJpZmllZFN0YXR1c1Jlc3BvbnNlIjwKElNldFVzZXJOYW1lUmVxdWVzdBIQCgh1c2VybmFtZRgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkiFQoTU2V0VXNlck5hbWVSZXNwb25zZSIpChRHZXRFbnRpdHlOYW1lUmVxdWVzdBIRCgllbnRpdHlfaWQYASABKAwiVAoVR2V0RW50aXR5TmFtZVJlc3BvbnNlEhAKCHVzZXJuYW1lGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCRITCgtlbnRpdHlfdHlwZRgDIAEoBSIwChpHZXRCYXRjaEVudGl0eU5hbWVzUmVxdWVzdBISCgplbnRpdHlfaWRzGAEgAygMImAKDkVudGl0eU5hbWVJbmZvEhEKCWVudGl0eV9pZBgBIAEoDBIQCgh1c2VybmFtZRgCIAEoCRIUCgxkaXNwbGF5X25hbWUYAyABKAkSEwoLZW50aXR5X3R5cGUYBCABKAUiRgobR2V0QmF0Y2hFbnRpdHlOYW1lc1Jlc3BvbnNlEicKCGVudGl0aWVzGAEgAygLMhUucml2ZXIuRW50aXR5TmFtZUluZm8ieQoYU2VhcmNoRW50aXR5TmFtZXNSZXF1ZXN0EhQKDHNlYXJjaF9xdWVyeRgBIAEoCRINCgVsaW1pdBgCIAEoBRIYCgtlbnRpdHlfdHlwZRgDIAEoBUgAiAEBEg4KBm9mZnNldBgEIAEoBUIOCgxfZW50aXR5X3R5cGUiRAoZU2VhcmNoRW50aXR5TmFtZXNSZXNwb25zZRInCghlbnRpdGllcxgBIAMoCzIVLnJpdmVyLkVudGl0eU5hbWVJbmZvIkIKF0ludml0ZUVuY3J5cHRpb25TZXNzaW9uEhIKCnNlc3Npb25faWQYASABKAkSEwoLc2Vzc2lvbl9rZXkYAiABKAkibgoUSW52aXRlRW5jcnlwdGlvbkRhdGESEQoJc3RyZWFtX2lkGAEgASgMEhEKCWFsZ29yaXRobRgCIAEoCRIwCghzZXNzaW9ucxgDIAMoCzIeLnJpdmVyLkludml0ZUVuY3J5cHRpb25TZXNzaW9uIrsBChdDcmVhdGVJbnZpdGVMaW5rUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSOwoWaW52aXRlX2VuY3J5cHRpb25fZGF0YRgCIAEoCzIbLnJpdmVyLkludml0ZUVuY3J5cHRpb25EYXRhEjkKEmNoYW5uZWxfcHJvcGVydGllcxgDIAEoCzIYLnJpdmVyLkNoYW5uZWxQcm9wZXJ0aWVzSACIAQFCFQoTX2NoYW5uZWxfcHJvcGVydGllcyIvChhDcmVhdGVJbnZpdGVMaW5rUmVzcG9uc2USEwoLaW52aXRlX2NvZGUYASABKAkiLAoXUmV2b2tlSW52aXRlTGlua1JlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMIhoKGFJldm9rZUludml0ZUxpbmtSZXNwb25zZSIuChdSZWRlZW1JbnZpdGVMaW5rUmVxdWVzdBITCgtpbnZpdGVfY29kZRgBIAEoCSLdAQoYUmVkZWVtSW52aXRlTGlua1Jlc3BvbnNlEjIKDnNpZ25lZF9wYXlsb2FkGAEgASgLMhoucml2ZXIuSW52aXRlU2lnbmVkUGF5bG9hZBI7ChZpbnZpdGVfZW5jcnlwdGlvbl9kYXRhGAIgASgLMhsucml2ZXIuSW52aXRlRW5jcnlwdGlvbkRhdGESOQoSY2hhbm5lbF9wcm9wZXJ0aWVzGAMgASgLMhgucml2ZXIuQ2hhbm5lbFByb3BlcnRpZXNIAIgBAUIVChNfY2hhbm5lbF9wcm9wZXJ0aWVzIikKFEdldEludml0ZUxpbmtSZXF1ZXN0EhEKCXN0cmVhbV9pZBgBIAEoDCJ7ChVHZXRJbnZpdGVMaW5rUmVzcG9uc2USGAoLaW52aXRlX2NvZGUYASABKAlIAIgBARIgChNjcmVhdGVkX2F0X2Vwb2NoX21zGAIgASgDSAGIAQFCDgoMX2ludml0ZV9jb2RlQhYKFF9jcmVhdGVkX2F0X2Vwb2NoX21zIjgKD0FwcEluc3RhbGxTdGF0cxIOCgZhcHBfaWQYASABKAwSFQoNaW5zdGFsbF9jb3VudBgCIAEoBSKNAQoJQXBwUmV2aWV3EgoKAmlkGAEgASgJEg4KBmFwcF9pZBgCIAEoDBIYChByZXZpZXdlcl9hZGRyZXNzGAMgASgMEg4KBnJhdGluZxgEIAEoBRIPCgdjb21tZW50GAUgASgJEhUKDWNyZWF0ZWRfYXRfbXMYBiABKAMSEgoKaXNfcmV2b2tlZBgHIAEoCCJpChBBcHBSZXZpZXdTdW1tYXJ5Eg4KBmFwcF9pZBgBIAEoDBIVCg10b3RhbF9yZXZpZXdzGAIgASgFEhYKDmFjdGl2ZV9yZXZpZXdzGAMgASgFEhYKDmF2ZXJhZ2VfcmF0aW5nGAQgASgCIu8BCgtBcHBJbmZvRnVsbBIOCgZhcHBfaWQYASABKAwSDQoFb3duZXIYAiABKAwSJAoIbWV0YWRhdGEYAyABKAsyEi5yaXZlci5BcHBNZXRhZGF0YRItCg1pbnN0YWxsX3N0YXRzGAQgASgLMhYucml2ZXIuQXBwSW5zdGFsbFN0YXRzEi8KDnJldmlld19zdW1tYXJ5GAUgASgLMhcucml2ZXIuQXBwUmV2aWV3U3VtbWFyeRIRCglpc19hY3RpdmUYBiABKAgSEwoLaXNfcHJvbW90ZWQYByABKAgSEwoLaXNfdmVyaWZpZWQYCCABKAgi5gEKGUxpc3RSZWdpc3RlcmVkQXBwc1JlcXVlc3QSDQoFbGltaXQYASABKAUSDgoGb2Zmc2V0GAIgASgFEhMKC2FjdGl2ZV9vbmx5GAMgASgIEhoKDW93bmVyX2FkZHJlc3MYBCABKAxIAIgBARIWCglzdHJlYW1faWQYBSABKAxIAYgBARIVCg1wcm9tb3RlZF9vbmx5GAYgASgIEhkKDHNlYXJjaF9xdWVyeRgHIAEoCUgCiAEBQhAKDl9vd25lcl9hZGRyZXNzQgwKCl9zdHJlYW1faWRCDwoNX3NlYXJjaF9xdWVyeSJTChpMaXN0UmVnaXN0ZXJlZEFwcHNSZXNwb25zZRIgCgRhcHBzGAEgAygLMhIucml2ZXIuQXBwSW5mb0Z1bGwSEwoLdG90YWxfY291bnQYAiABKAUiKAoVR2V0QnVsa0FwcERhdGFSZXF1ZXN0Eg8KB2FwcF9pZHMYASADKAwiOgoWR2V0QnVsa0FwcERhdGFSZXNwb25zZRIgCgRhcHBzGAEgAygLMhIucml2ZXIuQXBwSW5mb0Z1bGwiKwoZR2V0QXBwSW5zdGFsbFN0YXRzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwiQwoaR2V0QXBwSW5zdGFsbFN0YXRzUmVzcG9uc2USJQoFc3RhdHMYASABKAsyFi5yaXZlci5BcHBJbnN0YWxsU3RhdHMiMAodR2V0QnVsa0FwcEluc3RhbGxTdGF0c1JlcXVlc3QSDwoHYXBwX2lkcxgBIAMoDCJHCh5HZXRCdWxrQXBwSW5zdGFsbFN0YXRzUmVzcG9uc2USJQoFc3RhdHMYASADKAsyFi5yaXZlci5BcHBJbnN0YWxsU3RhdHMiSQoWU3VibWl0QXBwUmV2aWV3UmVxdWVzdBIOCgZhcHBfaWQYASABKAwSDgoGcmF0aW5nGAIgASgFEg8KB2NvbW1lbnQYAyABKAkiLAoXU3VibWl0QXBwUmV2aWV3UmVzcG9uc2USEQoJcmV2aWV3X2lkGAEgASgJIkUKFEdldEFwcFJldmlld3NSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBINCgVsaW1pdBgCIAEoBRIOCgZvZmZzZXQYAyABKAUiTwoVR2V0QXBwUmV2aWV3c1Jlc3BvbnNlEiEKB3Jldmlld3MYASADKAsyEC5yaXZlci5BcHBSZXZpZXcSEwoLdG90YWxfY291bnQYAiABKAUiKAoWUmV2b2tlQXBwUmV2aWV3UmVxdWVzdBIOCgZhcHBfaWQYASABKAwiGQoXUmV2b2tlQXBwUmV2aWV3UmVzcG9uc2UiLAoaR2V0QXBwUmV2aWV3U3VtbWFyeVJlcXVlc3QSDgoGYXBwX2lkGAEgASgMIkcKG0dldEFwcFJldmlld1N1bW1hcnlSZXNwb25zZRIoCgdzdW1tYXJ5GAEgASgLMhcucml2ZXIuQXBwUmV2aWV3U3VtbWFyeSIzCiBHZXRCdWxrQXBwUmV2aWV3U3VtbWFyaWVzUmVxdWVzdBIPCgdhcHBfaWRzGAEgAygMIk8KIUdldEJ1bGtBcHBSZXZpZXdTdW1tYXJpZXNSZXNwb25zZRIqCglzdW1tYXJpZXMYASADKAsyFy5yaXZlci5BcHBSZXZpZXdTdW1tYXJ5IigKFkdldEFwcFBvc2l0aW9uc1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIlYKF0dldEFwcFBvc2l0aW9uc1Jlc3BvbnNlEg4KBmFwcF9pZBgBIAEoDBIrCglwb3NpdGlvbnMYAiABKAsyGC5yaXZlci5Qb3NpdGlvbnNSZXNwb25zZSIuChtHZXRCYXRjaEFwcFBvc2l0aW9uc1JlcXVlc3QSDwoHYXBwX2lkcxgBIAMoDCJJChxHZXRCYXRjaEFwcFBvc2l0aW9uc1Jlc3BvbnNlEikKB2VudHJpZXMYASADKAsyGC5yaXZlci5BcHBQb3NpdGlvbnNFbnRyeSJuChFBcHBQb3NpdGlvbnNFbnRyeRIOCgZhcHBfaWQYASABKAwSKwoJcG9zaXRpb25zGAIgASgLMhgucml2ZXIuUG9zaXRpb25zUmVzcG9uc2USEgoFZXJyb3IYAyABKAlIAIgBAUIICgZfZXJyb3IiNAofR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzUmVxdWVzdBIRCglhZ2VudF9pZHMYASADKAwiUAogR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzUmVzcG9uc2USLAoJbWFuaWZlc3RzGAEgAygLMhkucml2ZXIuQ2FwYWJpbGl0eU1hbmlmZXN0IsECChxHZXRCdWxrQWdlbnRQcm9wb3NhbHNSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEjcKCHJlcXVlc3RzGAIgAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEhcKCnRpbWVvdXRfbXMYAyABKAVIAIgBARIaCg11c2VyX3RpbWV6b25lGAQgASgJSAGIAQESQwoIbWV0YWRhdGEYBSADKAsyMS5yaXZlci5HZXRCdWxrQWdlbnRQcm9wb3NhbHNSZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQg0KC190aW1lb3V0X21zQhAKDl91c2VyX3RpbWV6b25lIjEKHUdldEJ1bGtBZ2VudFByb3Bvc2Fsc1Jlc3BvbnNlEhAKCGFjY2VwdGVkGAEgASgIIqABChVRdWVyeUNvbmNpZXJnZVJlcXVlc3QSDQoFcXVlcnkYASABKAkSEwoGc291cmNlGAIgASgJSACIAQESGQoMZXh0ZXJuYWxfcmVmGAMgASgJSAGIAQESGgoNdXNlcl90aW1lem9uZRgEIAEoCUgCiAEBQgkKB19zb3VyY2VCDwoNX2V4dGVybmFsX3JlZkIQCg5fdXNlcl90aW1lem9uZSI2ChZRdWVyeUNvbmNpZXJnZVJlc3BvbnNlEhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJIi0KGkdldENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0Eg8KB3NlZWRfaWQYASABKAkiowEKG0dldENvbnZlcnNhdGlvblNlZWRSZXNwb25zZRIlCgRzZWVkGAEgASgLMhcucml2ZXIuQ29udmVyc2F0aW9uU2VlZBItCgZzdGF0dXMYAiABKA4yHS5yaXZlci5Db252ZXJzYXRpb25TZWVkU3RhdHVzEi4KD3Byb3Bvc2FsX3N0YXR1cxgDIAEoDjIVLnJpdmVyLlByb3Bvc2FsU3RhdHVzIooBChtTdWJtaXRBZ2VudFByb3Bvc2Fsc1JlcXVlc3QSHAoUY29udmVyc2F0aW9uX3NlZWRfaWQYASABKAkSIgoJcHJvcG9zYWxzGAIgAygLMg8ucml2ZXIuUHJvcG9zYWwSKQoGZXJyb3JzGAMgAygLMhkucml2ZXIuQWdlbnRQcm9wb3NhbEVycm9yIh4KHFN1Ym1pdEFnZW50UHJvcG9zYWxzUmVzcG9uc2UivwEKHUZpbmlzaENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhUKDXJlc3BvbnNlX3RleHQYAiABKAkSHQoVc2VsZWN0ZWRfcHJvcG9zYWxfaWRzGAMgAygJEhwKFGNsYXJpZnlpbmdfcXVlc3Rpb25zGAQgAygJEiwKBnN0YXR1cxgFIAEoDjIcLnJpdmVyLkNvbmNpZXJnZUZpbmlzaFN0YXR1cyJHCh5GaW5pc2hDb252ZXJzYXRpb25TZWVkUmVzcG9uc2USJQoEc2VlZBgBIAEoCzIXLnJpdmVyLkNvbnZlcnNhdGlvblNlZWQiKAoWR2V0RW50aXRsZW1lbnRzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwipgEKF0dldEVudGl0bGVtZW50c1Jlc3BvbnNlEhgKEGNhbl9zZXRfcHJvbW90ZWQYASABKAgSGAoQY2FuX3NldF92ZXJpZmllZBgCIAEoCBIWCg5jYW5fc2V0X2FjdGl2ZRgDIAEoCBIbChNjYW5fdXBkYXRlX21ldGFkYXRhGAQgASgIEhAKCGlzX293bmVyGAUgASgIEhAKCGlzX2FkbWluGAYgASgIKqkBChNGb3J3YXJkU2V0dGluZ1ZhbHVlEh8KG0ZPUldBUkRfU0VUVElOR19VTlNQRUNJRklFRBAAEiAKHEZPUldBUkRfU0VUVElOR19BTExfTUVTU0FHRVMQARIuCipGT1JXQVJEX1NFVFRJTkdfTUVOVElPTlNfUkVQTElFU19SRUFDVElPTlMQAhIfChtGT1JXQVJEX1NFVFRJTkdfTk9fTUVTU0FHRVMQAypKCgxTdXBwb3J0ZWRBcGkSHQoZU1VQUE9SVEVEX0FQSV9VTlNQRUNJRklFRBAAEhsKF1NVUFBPUlRFRF9BUElfUE9TSVRJT05TEAEqaAoMUG9zaXRpb25UeXBlEh0KGVBPU0lUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIbChdQT1NJVElPTl9UWVBFX1BFUlBFVFVBTBABEhwKGFBPU0lUSU9OX1RZUEVfUFJFRElDVElPThACKooBChVDb25jaWVyZ2VGaW5pc2hTdGF0dXMSJwojQ09OQ0lFUkdFX0ZJTklTSF9TVEFUVVNfVU5TUEVDSUZJRUQQABIjCh9DT05DSUVSR0VfRklOSVNIX1NUQVRVU19TVUNDRVNTEAESIwofQ09OQ0lFUkdFX0ZJTklTSF9TVEFUVVNfRkFJTFVSRRACMoMbChJBcHBSZWdpc3RyeVNlcnZpY2USOwoIUmVnaXN0ZXISFi5yaXZlci5SZWdpc3RlclJlcXVlc3QaFy5yaXZlci5SZWdpc3RlclJlc3BvbnNlElAKD1JlZ2lzdGVyV2ViaG9vaxIdLnJpdmVyLlJlZ2lzdGVyV2ViaG9va1JlcXVlc3QaHi5yaXZlci5SZWdpc3RlcldlYmhvb2tSZXNwb25zZRI+CglHZXRTdGF0dXMSFy5yaXZlci5HZXRTdGF0dXNSZXF1ZXN0Ghgucml2ZXIuR2V0U3RhdHVzUmVzcG9uc2USTQoOU2V0QXBwU2V0dGluZ3MSHC5yaXZlci5TZXRBcHBTZXR0aW5nc1JlcXVlc3QaHS5yaXZlci5TZXRBcHBTZXR0aW5nc1Jlc3BvbnNlElYKEVVwZGF0ZUFwcFNldHRpbmdzEh8ucml2ZXIuVXBkYXRlQXBwU2V0dGluZ3NSZXF1ZXN0GiAucml2ZXIuVXBkYXRlQXBwU2V0dGluZ3NSZXNwb25zZRJNCg5HZXRBcHBTZXR0aW5ncxIcLnJpdmVyLkdldEFwcFNldHRpbmdzUmVxdWVzdBodLnJpdmVyLkdldEFwcFNldHRpbmdzUmVzcG9uc2USVgoRVXBkYXRlQXBwTWV0YWRhdGESHy5yaXZlci5VcGRhdGVBcHBNZXRhZGF0YVJlcXVlc3QaIC5yaXZlci5VcGRhdGVBcHBNZXRhZGF0YVJlc3BvbnNlEk0KDkdldEFwcE1ldGFkYXRhEhwucml2ZXIuR2V0QXBwTWV0YWRhdGFSZXF1ZXN0Gh0ucml2ZXIuR2V0QXBwTWV0YWRhdGFSZXNwb25zZRJHCgxSb3RhdGVTZWNyZXQSGi5yaXZlci5Sb3RhdGVTZWNyZXRSZXF1ZXN0Ghsucml2ZXIuUm90YXRlU2VjcmV0UmVzcG9uc2USQQoKR2V0U2Vzc2lvbhIYLnJpdmVyLkdldFNlc3Npb25SZXF1ZXN0Ghkucml2ZXIuR2V0U2Vzc2lvblJlc3BvbnNlElAKD1ZhbGlkYXRlQm90TmFtZRIdLnJpdmVyLlZhbGlkYXRlQm90TmFtZVJlcXVlc3QaHi5yaXZlci5WYWxpZGF0ZUJvdE5hbWVSZXNwb25zZRJZChJTZXRBcHBBY3RpdmVTdGF0dXMSIC5yaXZlci5TZXRBcHBBY3RpdmVTdGF0dXNSZXF1ZXN0GiEucml2ZXIuU2V0QXBwQWN0aXZlU3RhdHVzUmVzcG9uc2USXwoUU2V0QXBwUHJvbW90ZWRTdGF0dXMSIi5yaXZlci5TZXRBcHBQcm9tb3RlZFN0YXR1c1JlcXVlc3QaIy5yaXZlci5TZXRBcHBQcm9tb3RlZFN0YXR1c1Jlc3BvbnNlEl8KFFNldEFwcFZlcmlmaWVkU3RhdHVzEiIucml2ZXIuU2V0QXBwVmVyaWZpZWRTdGF0dXNSZXF1ZXN0GiMucml2ZXIuU2V0QXBwVmVyaWZpZWRTdGF0dXNSZXNwb25zZRJQCg9HZXRFbnRpdGxlbWVudHMSHS5yaXZlci5HZXRFbnRpdGxlbWVudHNSZXF1ZXN0Gh4ucml2ZXIuR2V0RW50aXRsZW1lbnRzUmVzcG9uc2USRAoLU2V0VXNlck5hbWUSGS5yaXZlci5TZXRVc2VyTmFtZVJlcXVlc3QaGi5yaXZlci5TZXRVc2VyTmFtZVJlc3BvbnNlEkoKDUdldEVudGl0eU5hbWUSGy5yaXZlci5HZXRFbnRpdHlOYW1lUmVxdWVzdBocLnJpdmVyLkdldEVudGl0eU5hbWVSZXNwb25zZRJcChNHZXRCYXRjaEVudGl0eU5hbWVzEiEucml2ZXIuR2V0QmF0Y2hFbnRpdHlOYW1lc1JlcXVlc3QaIi5yaXZlci5HZXRCYXRjaEVudGl0eU5hbWVzUmVzcG9uc2USVgoRU2VhcmNoRW50aXR5TmFtZXMSHy5yaXZlci5TZWFyY2hFbnRpdHlOYW1lc1JlcXVlc3QaIC5yaXZlci5TZWFyY2hFbnRpdHlOYW1lc1Jlc3BvbnNlElMKEENyZWF0ZUludml0ZUxpbmsSHi5yaXZlci5DcmVhdGVJbnZpdGVMaW5rUmVxdWVzdBofLnJpdmVyLkNyZWF0ZUludml0ZUxpbmtSZXNwb25zZRJTChBSZXZva2VJbnZpdGVMaW5rEh4ucml2ZXIuUmV2b2tlSW52aXRlTGlua1JlcXVlc3QaHy5yaXZlci5SZXZva2VJbnZpdGVMaW5rUmVzcG9uc2USUwoQUmVkZWVtSW52aXRlTGluaxIeLnJpdmVyLlJlZGVlbUludml0ZUxpbmtSZXF1ZXN0Gh8ucml2ZXIuUmVkZWVtSW52aXRlTGlua1Jlc3BvbnNlEkoKDUdldEludml0ZUxpbmsSGy5yaXZlci5HZXRJbnZpdGVMaW5rUmVxdWVzdBocLnJpdmVyLkdldEludml0ZUxpbmtSZXNwb25zZRJZChJMaXN0UmVnaXN0ZXJlZEFwcHMSIC5yaXZlci5MaXN0UmVnaXN0ZXJlZEFwcHNSZXF1ZXN0GiEucml2ZXIuTGlzdFJlZ2lzdGVyZWRBcHBzUmVzcG9uc2USTQoOR2V0QnVsa0FwcERhdGESHC5yaXZlci5HZXRCdWxrQXBwRGF0YVJlcXVlc3QaHS5yaXZlci5HZXRCdWxrQXBwRGF0YVJlc3BvbnNlElkKEkdldEFwcEluc3RhbGxTdGF0cxIgLnJpdmVyLkdldEFwcEluc3RhbGxTdGF0c1JlcXVlc3QaIS5yaXZlci5HZXRBcHBJbnN0YWxsU3RhdHNSZXNwb25zZRJlChZHZXRCdWxrQXBwSW5zdGFsbFN0YXRzEiQucml2ZXIuR2V0QnVsa0FwcEluc3RhbGxTdGF0c1JlcXVlc3QaJS5yaXZlci5HZXRCdWxrQXBwSW5zdGFsbFN0YXRzUmVzcG9uc2USUAoPU3VibWl0QXBwUmV2aWV3Eh0ucml2ZXIuU3VibWl0QXBwUmV2aWV3UmVxdWVzdBoeLnJpdmVyLlN1Ym1pdEFwcFJldmlld1Jlc3BvbnNlEkoKDUdldEFwcFJldmlld3MSGy5yaXZlci5HZXRBcHBSZXZpZXdzUmVxdWVzdBocLnJpdmVyLkdldEFwcFJldmlld3NSZXNwb25zZRJQCg9SZXZva2VBcHBSZXZpZXcSHS5yaXZlci5SZXZva2VBcHBSZXZpZXdSZXF1ZXN0Gh4ucml2ZXIuUmV2b2tlQXBwUmV2aWV3UmVzcG9uc2USXAoTR2V0QXBwUmV2aWV3U3VtbWFyeRIhLnJpdmVyLkdldEFwcFJldmlld1N1bW1hcnlSZXF1ZXN0GiIucml2ZXIuR2V0QXBwUmV2aWV3U3VtbWFyeVJlc3BvbnNlEm4KGUdldEJ1bGtBcHBSZXZpZXdTdW1tYXJpZXMSJy5yaXZlci5HZXRCdWxrQXBwUmV2aWV3U3VtbWFyaWVzUmVxdWVzdBooLnJpdmVyLkdldEJ1bGtBcHBSZXZpZXdTdW1tYXJpZXNSZXNwb25zZRJQCg9HZXRBcHBQb3NpdGlvbnMSHS5yaXZlci5HZXRBcHBQb3NpdGlvbnNSZXF1ZXN0Gh4ucml2ZXIuR2V0QXBwUG9zaXRpb25zUmVzcG9uc2USXwoUR2V0QmF0Y2hBcHBQb3NpdGlvbnMSIi5yaXZlci5HZXRCYXRjaEFwcFBvc2l0aW9uc1JlcXVlc3QaIy5yaXZlci5HZXRCYXRjaEFwcFBvc2l0aW9uc1Jlc3BvbnNlEmsKGEdldEJ1bGtBZ2VudENhcGFiaWxpdGllcxImLnJpdmVyLkdldEJ1bGtBZ2VudENhcGFiaWxpdGllc1JlcXVlc3QaJy5yaXZlci5HZXRCdWxrQWdlbnRDYXBhYmlsaXRpZXNSZXNwb25zZRJiChVHZXRCdWxrQWdlbnRQcm9wb3NhbHMSIy5yaXZlci5HZXRCdWxrQWdlbnRQcm9wb3NhbHNSZXF1ZXN0GiQucml2ZXIuR2V0QnVsa0FnZW50UHJvcG9zYWxzUmVzcG9uc2USTQoOUXVlcnlDb25jaWVyZ2USHC5yaXZlci5RdWVyeUNvbmNpZXJnZVJlcXVlc3QaHS5yaXZlci5RdWVyeUNvbmNpZXJnZVJlc3BvbnNlElwKE0dldENvbnZlcnNhdGlvblNlZWQSIS5yaXZlci5HZXRDb252ZXJzYXRpb25TZWVkUmVxdWVzdBoiLnJpdmVyLkdldENvbnZlcnNhdGlvblNlZWRSZXNwb25zZRJfChRTdWJtaXRBZ2VudFByb3Bvc2FscxIiLnJpdmVyLlN1Ym1pdEFnZW50UHJvcG9zYWxzUmVxdWVzdBojLnJpdmVyLlN1Ym1pdEFnZW50UHJvcG9zYWxzUmVzcG9uc2USZQoWRmluaXNoQ29udmVyc2F0aW9uU2VlZBIkLnJpdmVyLkZpbmlzaENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0GiUucml2ZXIuRmluaXNoQ29udmVyc2F0aW9uU2VlZFJlc3BvbnNlQjRaMmdpdGh1Yi5jb20vdG93bnMtcHJvdG9jb2wvdG93bnMvY29yZS9ub2RlL3Byb3RvY29sYgZwcm90bzM", [import_wkt3.file_google_protobuf_empty, file_payloads, file_protocol]);
7781
+ var file_apps = /* @__PURE__ */ (0, import_codegenv23.fileDesc)("CgphcHBzLnByb3RvEgVyaXZlciKFAQoLQXBwU2V0dGluZ3MSMwoPZm9yd2FyZF9zZXR0aW5nGAEgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZRIUCgh0cmFkYWJsZRgCIAEoCEICGAESKwoOc3VwcG9ydGVkX2FwaXMYAyADKA4yEy5yaXZlci5TdXBwb3J0ZWRBcGkigwEKD1JlZ2lzdGVyUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSFAoMYXBwX293bmVyX2lkGAIgASgMEiQKCHNldHRpbmdzGAMgASgLMhIucml2ZXIuQXBwU2V0dGluZ3MSJAoIbWV0YWRhdGEYBCABKAsyEi5yaXZlci5BcHBNZXRhZGF0YSIvChBSZWdpc3RlclJlc3BvbnNlEhsKE2hzMjU2X3NoYXJlZF9zZWNyZXQYASABKAwiPQoWUmVnaXN0ZXJXZWJob29rUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSEwoLd2ViaG9va191cmwYAiABKAkiGQoXUmVnaXN0ZXJXZWJob29rUmVzcG9uc2UiTQoVU2V0QXBwU2V0dGluZ3NSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIkCghzZXR0aW5ncxgCIAEoCzISLnJpdmVyLkFwcFNldHRpbmdzIhgKFlNldEFwcFNldHRpbmdzUmVzcG9uc2UiugEKGFVwZGF0ZUFwcFNldHRpbmdzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSOAoPZm9yd2FyZF9zZXR0aW5nGAIgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZUgAiAEBEisKDnN1cHBvcnRlZF9hcGlzGAMgAygOMhMucml2ZXIuU3VwcG9ydGVkQXBpEhMKC3VwZGF0ZV9tYXNrGAQgAygJQhIKEF9mb3J3YXJkX3NldHRpbmciGwoZVXBkYXRlQXBwU2V0dGluZ3NSZXNwb25zZSInChVHZXRBcHBTZXR0aW5nc1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMImgKFkdldEFwcFNldHRpbmdzUmVzcG9uc2USJAoIc2V0dGluZ3MYASABKAsyEi5yaXZlci5BcHBTZXR0aW5ncxIYCgt3ZWJob29rX3VybBgCIAEoCUgAiAEBQg4KDF93ZWJob29rX3VybCIlChNSb3RhdGVTZWNyZXRSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCIzChRSb3RhdGVTZWNyZXRSZXNwb25zZRIbChNoczI1Nl9zaGFyZWRfc2VjcmV0GAEgASgMIiIKEEdldFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIowBChFHZXRTdGF0dXNSZXNwb25zZRIVCg1pc19yZWdpc3RlcmVkGAEgASgIEhYKDnZhbGlkX3Jlc3BvbnNlGAIgASgIEjgKBnN0YXR1cxgDIAEoCzIoLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5TdGF0dXNSZXNwb25zZRIOCgZhY3RpdmUYBCABKAgiXAoRR2V0U2Vzc2lvblJlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhQKCnNlc3Npb25faWQYAiABKAlIABITCglzdHJlYW1faWQYAyABKAxIAEIMCgppZGVudGlmaWVyIkgKEkdldFNlc3Npb25SZXNwb25zZRIyChlncm91cF9lbmNyeXB0aW9uX3Nlc3Npb25zGAEgASgLMg8ucml2ZXIuRW52ZWxvcGUi8AEKCFBvc2l0aW9uEg0KBWxhYmVsGAEgASgJEhgKC2Rlc2NyaXB0aW9uGAIgASgJSACIAQESDgoGc3ltYm9sGAMgASgJEiEKBHR5cGUYBCABKA4yEy5yaXZlci5Qb3NpdGlvblR5cGUSEwoLYmFsYW5jZV91c2QYBSABKAkSDwoHcG5sX3VzZBgGIAEoCRIVCghjaGFpbl9pZBgHIAEoBEgBiAEBEhsKDm5hdGl2ZV9iYWxhbmNlGAggASgJSAKIAQFCDgoMX2Rlc2NyaXB0aW9uQgsKCV9jaGFpbl9pZEIRCg9fbmF0aXZlX2JhbGFuY2UiIwoQUG9zaXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgMInsKEVBvc2l0aW9uc1Jlc3BvbnNlEhEKCXN1cHBvcnRlZBgBIAEoCBISCgVlcnJvchgCIAEoCUgAiAEBEiIKCXBvc2l0aW9ucxgDIAMoCzIPLnJpdmVyLlBvc2l0aW9uEhEKCXRpbWVzdGFtcBgEIAEoA0IICgZfZXJyb3IiMQoMU2xhc2hDb21tYW5kEgwKBG5hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkiOwoRQ2FwYWJpbGl0eUV4YW1wbGUSEgoKdXNlcl9xdWVyeRgBIAEoCRISCgpwYXJhbWV0ZXJzGAIgASgJInEKCkNhcGFiaWxpdHkSDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRIUCgxpbnB1dF9zY2hlbWEYAyABKAkSKgoIZXhhbXBsZXMYBCADKAsyGC5yaXZlci5DYXBhYmlsaXR5RXhhbXBsZSKPAQoSQ2FwYWJpbGl0eU1hbmlmZXN0EhAKCGFnZW50X2lkGAEgASgMEhIKCmFnZW50X25hbWUYAiABKAkSGQoRYWdlbnRfZGVzY3JpcHRpb24YAyABKAkSJwoMY2FwYWJpbGl0aWVzGAQgAygLMhEucml2ZXIuQ2FwYWJpbGl0eRIPCgd2ZXJzaW9uGAUgASgJIoACCgtBcHBNZXRhZGF0YRIQCgh1c2VybmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRIRCglpbWFnZV91cmwYAyABKAkSGQoMZXh0ZXJuYWxfdXJsGAQgASgJSACIAQESKwoOc2xhc2hfY29tbWFuZHMYBiADKAsyEy5yaXZlci5TbGFzaENvbW1hbmQSFAoMZGlzcGxheV9uYW1lGAcgASgJEg0KBW1vdHRvGAggASgJEicKDGNhcGFiaWxpdGllcxgJIAMoCzIRLnJpdmVyLkNhcGFiaWxpdHlCDwoNX2V4dGVybmFsX3VybEoECAUQBlIKYXZhdGFyX3VybCLlAgoRQXBwTWV0YWRhdGFVcGRhdGUSFQoIdXNlcm5hbWUYASABKAlIAIgBARIYCgtkZXNjcmlwdGlvbhgCIAEoCUgBiAEBEhYKCWltYWdlX3VybBgDIAEoCUgCiAEBEhkKDGV4dGVybmFsX3VybBgEIAEoCUgDiAEBEisKDnNsYXNoX2NvbW1hbmRzGAYgAygLMhMucml2ZXIuU2xhc2hDb21tYW5kEhkKDGRpc3BsYXlfbmFtZRgHIAEoCUgEiAEBEhIKBW1vdHRvGAggASgJSAWIAQESJwoMY2FwYWJpbGl0aWVzGAkgAygLMhEucml2ZXIuQ2FwYWJpbGl0eUILCglfdXNlcm5hbWVCDgoMX2Rlc2NyaXB0aW9uQgwKCl9pbWFnZV91cmxCDwoNX2V4dGVybmFsX3VybEIPCg1fZGlzcGxheV9uYW1lQggKBl9tb3R0b0oECAUQBlIKYXZhdGFyX3VybCJrChhVcGRhdGVBcHBNZXRhZGF0YVJlcXVlc3QSDgoGYXBwX2lkGAEgASgMEioKCG1ldGFkYXRhGAIgASgLMhgucml2ZXIuQXBwTWV0YWRhdGFVcGRhdGUSEwoLdXBkYXRlX21hc2sYAyADKAkiGwoZVXBkYXRlQXBwTWV0YWRhdGFSZXNwb25zZSInChVHZXRBcHBNZXRhZGF0YVJlcXVlc3QSDgoGYXBwX2lkGAEgASgMIj4KFkdldEFwcE1ldGFkYXRhUmVzcG9uc2USJAoIbWV0YWRhdGEYASABKAsyEi5yaXZlci5BcHBNZXRhZGF0YSIqChZWYWxpZGF0ZUJvdE5hbWVSZXF1ZXN0EhAKCHVzZXJuYW1lGAEgASgJIkYKF1ZhbGlkYXRlQm90TmFtZVJlc3BvbnNlEhQKDGlzX2F2YWlsYWJsZRgBIAEoCBIVCg1lcnJvcl9tZXNzYWdlGAIgASgJIjsKGVNldEFwcEFjdGl2ZVN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEg4KBmFjdGl2ZRgCIAEoCCIcChpTZXRBcHBBY3RpdmVTdGF0dXNSZXNwb25zZSI/ChtTZXRBcHBQcm9tb3RlZFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhAKCHByb21vdGVkGAIgASgIIh4KHFNldEFwcFByb21vdGVkU3RhdHVzUmVzcG9uc2UiPwobU2V0QXBwVmVyaWZpZWRTdGF0dXNSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIQCgh2ZXJpZmllZBgCIAEoCCIeChxTZXRBcHBWZXJpZmllZFN0YXR1c1Jlc3BvbnNlIjwKElNldFVzZXJOYW1lUmVxdWVzdBIQCgh1c2VybmFtZRgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkiFQoTU2V0VXNlck5hbWVSZXNwb25zZSIpChRHZXRFbnRpdHlOYW1lUmVxdWVzdBIRCgllbnRpdHlfaWQYASABKAwiVAoVR2V0RW50aXR5TmFtZVJlc3BvbnNlEhAKCHVzZXJuYW1lGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCRITCgtlbnRpdHlfdHlwZRgDIAEoBSIwChpHZXRCYXRjaEVudGl0eU5hbWVzUmVxdWVzdBISCgplbnRpdHlfaWRzGAEgAygMImAKDkVudGl0eU5hbWVJbmZvEhEKCWVudGl0eV9pZBgBIAEoDBIQCgh1c2VybmFtZRgCIAEoCRIUCgxkaXNwbGF5X25hbWUYAyABKAkSEwoLZW50aXR5X3R5cGUYBCABKAUiRgobR2V0QmF0Y2hFbnRpdHlOYW1lc1Jlc3BvbnNlEicKCGVudGl0aWVzGAEgAygLMhUucml2ZXIuRW50aXR5TmFtZUluZm8ieQoYU2VhcmNoRW50aXR5TmFtZXNSZXF1ZXN0EhQKDHNlYXJjaF9xdWVyeRgBIAEoCRINCgVsaW1pdBgCIAEoBRIYCgtlbnRpdHlfdHlwZRgDIAEoBUgAiAEBEg4KBm9mZnNldBgEIAEoBUIOCgxfZW50aXR5X3R5cGUiRAoZU2VhcmNoRW50aXR5TmFtZXNSZXNwb25zZRInCghlbnRpdGllcxgBIAMoCzIVLnJpdmVyLkVudGl0eU5hbWVJbmZvIkIKF0ludml0ZUVuY3J5cHRpb25TZXNzaW9uEhIKCnNlc3Npb25faWQYASABKAkSEwoLc2Vzc2lvbl9rZXkYAiABKAkibgoUSW52aXRlRW5jcnlwdGlvbkRhdGESEQoJc3RyZWFtX2lkGAEgASgMEhEKCWFsZ29yaXRobRgCIAEoCRIwCghzZXNzaW9ucxgDIAMoCzIeLnJpdmVyLkludml0ZUVuY3J5cHRpb25TZXNzaW9uIrsBChdDcmVhdGVJbnZpdGVMaW5rUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSOwoWaW52aXRlX2VuY3J5cHRpb25fZGF0YRgCIAEoCzIbLnJpdmVyLkludml0ZUVuY3J5cHRpb25EYXRhEjkKEmNoYW5uZWxfcHJvcGVydGllcxgDIAEoCzIYLnJpdmVyLkNoYW5uZWxQcm9wZXJ0aWVzSACIAQFCFQoTX2NoYW5uZWxfcHJvcGVydGllcyIvChhDcmVhdGVJbnZpdGVMaW5rUmVzcG9uc2USEwoLaW52aXRlX2NvZGUYASABKAkiLAoXUmV2b2tlSW52aXRlTGlua1JlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMIhoKGFJldm9rZUludml0ZUxpbmtSZXNwb25zZSIuChdSZWRlZW1JbnZpdGVMaW5rUmVxdWVzdBITCgtpbnZpdGVfY29kZRgBIAEoCSLdAQoYUmVkZWVtSW52aXRlTGlua1Jlc3BvbnNlEjIKDnNpZ25lZF9wYXlsb2FkGAEgASgLMhoucml2ZXIuSW52aXRlU2lnbmVkUGF5bG9hZBI7ChZpbnZpdGVfZW5jcnlwdGlvbl9kYXRhGAIgASgLMhsucml2ZXIuSW52aXRlRW5jcnlwdGlvbkRhdGESOQoSY2hhbm5lbF9wcm9wZXJ0aWVzGAMgASgLMhgucml2ZXIuQ2hhbm5lbFByb3BlcnRpZXNIAIgBAUIVChNfY2hhbm5lbF9wcm9wZXJ0aWVzIikKFEdldEludml0ZUxpbmtSZXF1ZXN0EhEKCXN0cmVhbV9pZBgBIAEoDCJ7ChVHZXRJbnZpdGVMaW5rUmVzcG9uc2USGAoLaW52aXRlX2NvZGUYASABKAlIAIgBARIgChNjcmVhdGVkX2F0X2Vwb2NoX21zGAIgASgDSAGIAQFCDgoMX2ludml0ZV9jb2RlQhYKFF9jcmVhdGVkX2F0X2Vwb2NoX21zIjgKD0FwcEluc3RhbGxTdGF0cxIOCgZhcHBfaWQYASABKAwSFQoNaW5zdGFsbF9jb3VudBgCIAEoBSKNAQoJQXBwUmV2aWV3EgoKAmlkGAEgASgJEg4KBmFwcF9pZBgCIAEoDBIYChByZXZpZXdlcl9hZGRyZXNzGAMgASgMEg4KBnJhdGluZxgEIAEoBRIPCgdjb21tZW50GAUgASgJEhUKDWNyZWF0ZWRfYXRfbXMYBiABKAMSEgoKaXNfcmV2b2tlZBgHIAEoCCJpChBBcHBSZXZpZXdTdW1tYXJ5Eg4KBmFwcF9pZBgBIAEoDBIVCg10b3RhbF9yZXZpZXdzGAIgASgFEhYKDmFjdGl2ZV9yZXZpZXdzGAMgASgFEhYKDmF2ZXJhZ2VfcmF0aW5nGAQgASgCIpwCCgtBcHBJbmZvRnVsbBIOCgZhcHBfaWQYASABKAwSDQoFb3duZXIYAiABKAwSJAoIbWV0YWRhdGEYAyABKAsyEi5yaXZlci5BcHBNZXRhZGF0YRItCg1pbnN0YWxsX3N0YXRzGAQgASgLMhYucml2ZXIuQXBwSW5zdGFsbFN0YXRzEi8KDnJldmlld19zdW1tYXJ5GAUgASgLMhcucml2ZXIuQXBwUmV2aWV3U3VtbWFyeRIRCglpc19hY3RpdmUYBiABKAgSEwoLaXNfcHJvbW90ZWQYByABKAgSEwoLaXNfdmVyaWZpZWQYCCABKAgSKwoOc3VwcG9ydGVkX2FwaXMYCSADKA4yEy5yaXZlci5TdXBwb3J0ZWRBcGki5gEKGUxpc3RSZWdpc3RlcmVkQXBwc1JlcXVlc3QSDQoFbGltaXQYASABKAUSDgoGb2Zmc2V0GAIgASgFEhMKC2FjdGl2ZV9vbmx5GAMgASgIEhoKDW93bmVyX2FkZHJlc3MYBCABKAxIAIgBARIWCglzdHJlYW1faWQYBSABKAxIAYgBARIVCg1wcm9tb3RlZF9vbmx5GAYgASgIEhkKDHNlYXJjaF9xdWVyeRgHIAEoCUgCiAEBQhAKDl9vd25lcl9hZGRyZXNzQgwKCl9zdHJlYW1faWRCDwoNX3NlYXJjaF9xdWVyeSJTChpMaXN0UmVnaXN0ZXJlZEFwcHNSZXNwb25zZRIgCgRhcHBzGAEgAygLMhIucml2ZXIuQXBwSW5mb0Z1bGwSEwoLdG90YWxfY291bnQYAiABKAUiKAoVR2V0QnVsa0FwcERhdGFSZXF1ZXN0Eg8KB2FwcF9pZHMYASADKAwiOgoWR2V0QnVsa0FwcERhdGFSZXNwb25zZRIgCgRhcHBzGAEgAygLMhIucml2ZXIuQXBwSW5mb0Z1bGwiKwoZR2V0QXBwSW5zdGFsbFN0YXRzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwiQwoaR2V0QXBwSW5zdGFsbFN0YXRzUmVzcG9uc2USJQoFc3RhdHMYASABKAsyFi5yaXZlci5BcHBJbnN0YWxsU3RhdHMiMAodR2V0QnVsa0FwcEluc3RhbGxTdGF0c1JlcXVlc3QSDwoHYXBwX2lkcxgBIAMoDCJHCh5HZXRCdWxrQXBwSW5zdGFsbFN0YXRzUmVzcG9uc2USJQoFc3RhdHMYASADKAsyFi5yaXZlci5BcHBJbnN0YWxsU3RhdHMiSQoWU3VibWl0QXBwUmV2aWV3UmVxdWVzdBIOCgZhcHBfaWQYASABKAwSDgoGcmF0aW5nGAIgASgFEg8KB2NvbW1lbnQYAyABKAkiLAoXU3VibWl0QXBwUmV2aWV3UmVzcG9uc2USEQoJcmV2aWV3X2lkGAEgASgJIkUKFEdldEFwcFJldmlld3NSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBINCgVsaW1pdBgCIAEoBRIOCgZvZmZzZXQYAyABKAUiTwoVR2V0QXBwUmV2aWV3c1Jlc3BvbnNlEiEKB3Jldmlld3MYASADKAsyEC5yaXZlci5BcHBSZXZpZXcSEwoLdG90YWxfY291bnQYAiABKAUiKAoWUmV2b2tlQXBwUmV2aWV3UmVxdWVzdBIOCgZhcHBfaWQYASABKAwiGQoXUmV2b2tlQXBwUmV2aWV3UmVzcG9uc2UiLAoaR2V0QXBwUmV2aWV3U3VtbWFyeVJlcXVlc3QSDgoGYXBwX2lkGAEgASgMIkcKG0dldEFwcFJldmlld1N1bW1hcnlSZXNwb25zZRIoCgdzdW1tYXJ5GAEgASgLMhcucml2ZXIuQXBwUmV2aWV3U3VtbWFyeSIzCiBHZXRCdWxrQXBwUmV2aWV3U3VtbWFyaWVzUmVxdWVzdBIPCgdhcHBfaWRzGAEgAygMIk8KIUdldEJ1bGtBcHBSZXZpZXdTdW1tYXJpZXNSZXNwb25zZRIqCglzdW1tYXJpZXMYASADKAsyFy5yaXZlci5BcHBSZXZpZXdTdW1tYXJ5IigKFkdldEFwcFBvc2l0aW9uc1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIlYKF0dldEFwcFBvc2l0aW9uc1Jlc3BvbnNlEg4KBmFwcF9pZBgBIAEoDBIrCglwb3NpdGlvbnMYAiABKAsyGC5yaXZlci5Qb3NpdGlvbnNSZXNwb25zZSIuChtHZXRCYXRjaEFwcFBvc2l0aW9uc1JlcXVlc3QSDwoHYXBwX2lkcxgBIAMoDCJJChxHZXRCYXRjaEFwcFBvc2l0aW9uc1Jlc3BvbnNlEikKB2VudHJpZXMYASADKAsyGC5yaXZlci5BcHBQb3NpdGlvbnNFbnRyeSJuChFBcHBQb3NpdGlvbnNFbnRyeRIOCgZhcHBfaWQYASABKAwSKwoJcG9zaXRpb25zGAIgASgLMhgucml2ZXIuUG9zaXRpb25zUmVzcG9uc2USEgoFZXJyb3IYAyABKAlIAIgBAUIICgZfZXJyb3IiOgoVR2V0QmF0Y2hBcHBQbmxSZXF1ZXN0Eg8KB2FwcF9pZHMYASADKAwSEAoIdXNlcl9pZHMYAiADKAwiQQoWR2V0QmF0Y2hBcHBQbmxSZXNwb25zZRInCgV1c2VycxgBIAMoCzIYLnJpdmVyLlVzZXJBZ2dyZWdhdGVkUG5sIs0BChFVc2VyQWdncmVnYXRlZFBubBIPCgd1c2VyX2lkGAEgASgMEhoKEnRvdGFsX3JlYWxpemVkX3BubBgCIAEoCRIcChR0b3RhbF91bnJlYWxpemVkX3BubBgDIAEoCRIRCgl0b3RhbF9wbmwYBCABKAkSGwoTdG90YWxfYWNjb3VudF92YWx1ZRgFIAEoCRIUCgx0b3RhbF92b2x1bWUYBiABKAkSJwoLYXBwX2VudHJpZXMYByADKAsyEi5yaXZlci5BcHBQbmxFbnRyeSK7AQoLQXBwUG5sRW50cnkSDgoGYXBwX2lkGAEgASgMEhYKDndhbGxldF9hZGRyZXNzGAIgASgJEhQKDHJlYWxpemVkX3BubBgDIAEoCRIWCg51bnJlYWxpemVkX3BubBgEIAEoCRIRCgl0b3RhbF9wbmwYBSABKAkSFQoNYWNjb3VudF92YWx1ZRgGIAEoCRIOCgZ2b2x1bWUYByABKAkSEgoFZXJyb3IYCCABKAlIAIgBAUIICgZfZXJyb3IiNAofR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzUmVxdWVzdBIRCglhZ2VudF9pZHMYASADKAwiUAogR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzUmVzcG9uc2USLAoJbWFuaWZlc3RzGAEgAygLMhkucml2ZXIuQ2FwYWJpbGl0eU1hbmlmZXN0IsECChxHZXRCdWxrQWdlbnRQcm9wb3NhbHNSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEjcKCHJlcXVlc3RzGAIgAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEhcKCnRpbWVvdXRfbXMYAyABKAVIAIgBARIaCg11c2VyX3RpbWV6b25lGAQgASgJSAGIAQESQwoIbWV0YWRhdGEYBSADKAsyMS5yaXZlci5HZXRCdWxrQWdlbnRQcm9wb3NhbHNSZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQg0KC190aW1lb3V0X21zQhAKDl91c2VyX3RpbWV6b25lIjEKHUdldEJ1bGtBZ2VudFByb3Bvc2Fsc1Jlc3BvbnNlEhAKCGFjY2VwdGVkGAEgASgIIqABChVRdWVyeUNvbmNpZXJnZVJlcXVlc3QSDQoFcXVlcnkYASABKAkSEwoGc291cmNlGAIgASgJSACIAQESGQoMZXh0ZXJuYWxfcmVmGAMgASgJSAGIAQESGgoNdXNlcl90aW1lem9uZRgEIAEoCUgCiAEBQgkKB19zb3VyY2VCDwoNX2V4dGVybmFsX3JlZkIQCg5fdXNlcl90aW1lem9uZSI2ChZRdWVyeUNvbmNpZXJnZVJlc3BvbnNlEhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJIi0KGkdldENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0Eg8KB3NlZWRfaWQYASABKAkiowEKG0dldENvbnZlcnNhdGlvblNlZWRSZXNwb25zZRIlCgRzZWVkGAEgASgLMhcucml2ZXIuQ29udmVyc2F0aW9uU2VlZBItCgZzdGF0dXMYAiABKA4yHS5yaXZlci5Db252ZXJzYXRpb25TZWVkU3RhdHVzEi4KD3Byb3Bvc2FsX3N0YXR1cxgDIAEoDjIVLnJpdmVyLlByb3Bvc2FsU3RhdHVzIooBChtTdWJtaXRBZ2VudFByb3Bvc2Fsc1JlcXVlc3QSHAoUY29udmVyc2F0aW9uX3NlZWRfaWQYASABKAkSIgoJcHJvcG9zYWxzGAIgAygLMg8ucml2ZXIuUHJvcG9zYWwSKQoGZXJyb3JzGAMgAygLMhkucml2ZXIuQWdlbnRQcm9wb3NhbEVycm9yIh4KHFN1Ym1pdEFnZW50UHJvcG9zYWxzUmVzcG9uc2UivwEKHUZpbmlzaENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhUKDXJlc3BvbnNlX3RleHQYAiABKAkSHQoVc2VsZWN0ZWRfcHJvcG9zYWxfaWRzGAMgAygJEhwKFGNsYXJpZnlpbmdfcXVlc3Rpb25zGAQgAygJEiwKBnN0YXR1cxgFIAEoDjIcLnJpdmVyLkNvbmNpZXJnZUZpbmlzaFN0YXR1cyJHCh5GaW5pc2hDb252ZXJzYXRpb25TZWVkUmVzcG9uc2USJQoEc2VlZBgBIAEoCzIXLnJpdmVyLkNvbnZlcnNhdGlvblNlZWQiKAoWR2V0RW50aXRsZW1lbnRzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwipgEKF0dldEVudGl0bGVtZW50c1Jlc3BvbnNlEhgKEGNhbl9zZXRfcHJvbW90ZWQYASABKAgSGAoQY2FuX3NldF92ZXJpZmllZBgCIAEoCBIWCg5jYW5fc2V0X2FjdGl2ZRgDIAEoCBIbChNjYW5fdXBkYXRlX21ldGFkYXRhGAQgASgIEhAKCGlzX293bmVyGAUgASgIEhAKCGlzX2FkbWluGAYgASgIIroCCgxFdmVudFBheWxvYWQSMAoIbWVzc2FnZXMYASABKAsyHC5yaXZlci5FdmVudFBheWxvYWQuTWVzc2FnZXNIABI3Cgxzb2xpY2l0YXRpb24YAiABKAsyHy5yaXZlci5FdmVudFBheWxvYWQuU29saWNpdEtleXNIABp9CghNZXNzYWdlcxIRCglzdHJlYW1faWQYASABKAwSIQoIbWVzc2FnZXMYAiADKAsyDy5yaXZlci5FbnZlbG9wZRI7CiJncm91cF9lbmNyeXB0aW9uX3Nlc3Npb25zX21lc3NhZ2VzGAMgAygLMg8ucml2ZXIuRW52ZWxvcGUaNQoLU29saWNpdEtleXMSEQoJc3RyZWFtX2lkGAEgASgMEhMKC3Nlc3Npb25faWRzGAIgAygJQgkKB3BheWxvYWQiNAoNRXZlbnRzUGF5bG9hZBIjCgZldmVudHMYASADKAsyEy5yaXZlci5FdmVudFBheWxvYWQipggKEUFwcFNlcnZpY2VSZXF1ZXN0EiwKCmluaXRpYWxpemUYZSABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABIoCgZzdGF0dXMYZiABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABImCgZldmVudHMYZyABKAsyFC5yaXZlci5FdmVudHNQYXlsb2FkSAASLAoJcG9zaXRpb25zGGggASgLMhcucml2ZXIuUG9zaXRpb25zUmVxdWVzdEgAEj4KCXByb3Bvc2FscxhpIAEoCzIpLnJpdmVyLkFwcFNlcnZpY2VSZXF1ZXN0LlByb3Bvc2Fsc1JlcXVlc3RIABJGChFjb25jaWVyZ2VfcmVxdWVzdBhqIAEoCzIpLnJpdmVyLkFwcFNlcnZpY2VSZXF1ZXN0LkNvbmNpZXJnZVJlcXVlc3RIABr0AgoQUHJvcG9zYWxzUmVxdWVzdBIcChRjb252ZXJzYXRpb25fc2VlZF9pZBgBIAEoCRISCgp1c2VyX3F1ZXJ5GAIgASgJEhQKB2NvbnRleHQYAyABKAlIAIgBARI6CgtpbnZvY2F0aW9ucxgEIAMoCzIlLnJpdmVyLlNwZWNpYWxpc3RDYXBhYmlsaXR5SW52b2NhdGlvbhIXCgp0aW1lb3V0X21zGAUgASgFSAGIAQESGgoNdXNlcl90aW1lem9uZRgGIAEoCUgCiAEBEkkKCG1ldGFkYXRhGAcgAygLMjcucml2ZXIuQXBwU2VydmljZVJlcXVlc3QuUHJvcG9zYWxzUmVxdWVzdC5NZXRhZGF0YUVudHJ5Gi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIKCghfY29udGV4dEINCgtfdGltZW91dF9tc0IQCg5fdXNlcl90aW1lem9uZRrYAgoQQ29uY2llcmdlUmVxdWVzdBIcChRjb252ZXJzYXRpb25fc2VlZF9pZBgBIAEoCRISCgp1c2VyX3F1ZXJ5GAIgASgJEhQKB2NvbnRleHQYAyABKAlIAIgBARIZCgxleHRlcm5hbF9yZWYYBCABKAlIAYgBARIgChNwcm9wb3NhbF90aW1lb3V0X21zGAUgASgDSAKIAQESIQoUY29uY2llcmdlX3RpbWVvdXRfbXMYBiABKANIA4gBARIaCg11c2VyX3RpbWV6b25lGAcgASgJSASIAQESFAoHdXNlcl9pZBgIIAEoDEgFiAEBQgoKCF9jb250ZXh0Qg8KDV9leHRlcm5hbF9yZWZCFgoUX3Byb3Bvc2FsX3RpbWVvdXRfbXNCFwoVX2NvbmNpZXJnZV90aW1lb3V0X21zQhAKDl91c2VyX3RpbWV6b25lQgoKCF91c2VyX2lkQgkKB3BheWxvYWQijwUKEkFwcFNlcnZpY2VSZXNwb25zZRJCCgppbml0aWFsaXplGGUgASgLMiwucml2ZXIuQXBwU2VydmljZVJlc3BvbnNlLkluaXRpYWxpemVSZXNwb25zZUgAEjoKBnN0YXR1cxhmIAEoCzIoLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5TdGF0dXNSZXNwb25zZUgAEi0KCXBvc2l0aW9ucxhnIAEoCzIYLnJpdmVyLlBvc2l0aW9uc1Jlc3BvbnNlSAASQAoJcHJvcG9zYWxzGGggASgLMisucml2ZXIuQXBwU2VydmljZVJlc3BvbnNlLlByb3Bvc2Fsc1Jlc3BvbnNlSAASSQoSY29uY2llcmdlX3Jlc3BvbnNlGGkgASgLMisucml2ZXIuQXBwU2VydmljZVJlc3BvbnNlLkNvbmNpZXJnZVJlc3BvbnNlSAAaXAoSSW5pdGlhbGl6ZVJlc3BvbnNlEkYKEWVuY3J5cHRpb25fZGV2aWNlGAEgASgLMisucml2ZXIuVXNlck1ldGFkYXRhUGF5bG9hZC5FbmNyeXB0aW9uRGV2aWNlGoUBCg5TdGF0dXNSZXNwb25zZRIZChFmcmFtZXdvcmtfdmVyc2lvbhgBIAEoBRISCgpkZXZpY2Vfa2V5GAIgASgJEhQKDGZhbGxiYWNrX2tleRgDIAEoCRIbCg5jbGllbnRfdmVyc2lvbhgEIAEoCUgAiAEBQhEKD19jbGllbnRfdmVyc2lvbholChFQcm9wb3NhbHNSZXNwb25zZRIQCghhY2NlcHRlZBgBIAEoCBolChFDb25jaWVyZ2VSZXNwb25zZRIQCghhY2NlcHRlZBgBIAEoCEIJCgdwYXlsb2FkKqkBChNGb3J3YXJkU2V0dGluZ1ZhbHVlEh8KG0ZPUldBUkRfU0VUVElOR19VTlNQRUNJRklFRBAAEiAKHEZPUldBUkRfU0VUVElOR19BTExfTUVTU0FHRVMQARIuCipGT1JXQVJEX1NFVFRJTkdfTUVOVElPTlNfUkVQTElFU19SRUFDVElPTlMQAhIfChtGT1JXQVJEX1NFVFRJTkdfTk9fTUVTU0FHRVMQAyphCgxTdXBwb3J0ZWRBcGkSHQoZU1VQUE9SVEVEX0FQSV9VTlNQRUNJRklFRBAAEhsKF1NVUFBPUlRFRF9BUElfUE9TSVRJT05TEAESFQoRU1VQUE9SVEVEX0FQSV9QTkwQAipoCgxQb3NpdGlvblR5cGUSHQoZUE9TSVRJT05fVFlQRV9VTlNQRUNJRklFRBAAEhsKF1BPU0lUSU9OX1RZUEVfUEVSUEVUVUFMEAESHAoYUE9TSVRJT05fVFlQRV9QUkVESUNUSU9OEAIqigEKFUNvbmNpZXJnZUZpbmlzaFN0YXR1cxInCiNDT05DSUVSR0VfRklOSVNIX1NUQVRVU19VTlNQRUNJRklFRBAAEiMKH0NPTkNJRVJHRV9GSU5JU0hfU1RBVFVTX1NVQ0NFU1MQARIjCh9DT05DSUVSR0VfRklOSVNIX1NUQVRVU19GQUlMVVJFEAIy0hsKEkFwcFJlZ2lzdHJ5U2VydmljZRI7CghSZWdpc3RlchIWLnJpdmVyLlJlZ2lzdGVyUmVxdWVzdBoXLnJpdmVyLlJlZ2lzdGVyUmVzcG9uc2USUAoPUmVnaXN0ZXJXZWJob29rEh0ucml2ZXIuUmVnaXN0ZXJXZWJob29rUmVxdWVzdBoeLnJpdmVyLlJlZ2lzdGVyV2ViaG9va1Jlc3BvbnNlEj4KCUdldFN0YXR1cxIXLnJpdmVyLkdldFN0YXR1c1JlcXVlc3QaGC5yaXZlci5HZXRTdGF0dXNSZXNwb25zZRJNCg5TZXRBcHBTZXR0aW5ncxIcLnJpdmVyLlNldEFwcFNldHRpbmdzUmVxdWVzdBodLnJpdmVyLlNldEFwcFNldHRpbmdzUmVzcG9uc2USVgoRVXBkYXRlQXBwU2V0dGluZ3MSHy5yaXZlci5VcGRhdGVBcHBTZXR0aW5nc1JlcXVlc3QaIC5yaXZlci5VcGRhdGVBcHBTZXR0aW5nc1Jlc3BvbnNlEk0KDkdldEFwcFNldHRpbmdzEhwucml2ZXIuR2V0QXBwU2V0dGluZ3NSZXF1ZXN0Gh0ucml2ZXIuR2V0QXBwU2V0dGluZ3NSZXNwb25zZRJWChFVcGRhdGVBcHBNZXRhZGF0YRIfLnJpdmVyLlVwZGF0ZUFwcE1ldGFkYXRhUmVxdWVzdBogLnJpdmVyLlVwZGF0ZUFwcE1ldGFkYXRhUmVzcG9uc2USTQoOR2V0QXBwTWV0YWRhdGESHC5yaXZlci5HZXRBcHBNZXRhZGF0YVJlcXVlc3QaHS5yaXZlci5HZXRBcHBNZXRhZGF0YVJlc3BvbnNlEkcKDFJvdGF0ZVNlY3JldBIaLnJpdmVyLlJvdGF0ZVNlY3JldFJlcXVlc3QaGy5yaXZlci5Sb3RhdGVTZWNyZXRSZXNwb25zZRJBCgpHZXRTZXNzaW9uEhgucml2ZXIuR2V0U2Vzc2lvblJlcXVlc3QaGS5yaXZlci5HZXRTZXNzaW9uUmVzcG9uc2USUAoPVmFsaWRhdGVCb3ROYW1lEh0ucml2ZXIuVmFsaWRhdGVCb3ROYW1lUmVxdWVzdBoeLnJpdmVyLlZhbGlkYXRlQm90TmFtZVJlc3BvbnNlElkKElNldEFwcEFjdGl2ZVN0YXR1cxIgLnJpdmVyLlNldEFwcEFjdGl2ZVN0YXR1c1JlcXVlc3QaIS5yaXZlci5TZXRBcHBBY3RpdmVTdGF0dXNSZXNwb25zZRJfChRTZXRBcHBQcm9tb3RlZFN0YXR1cxIiLnJpdmVyLlNldEFwcFByb21vdGVkU3RhdHVzUmVxdWVzdBojLnJpdmVyLlNldEFwcFByb21vdGVkU3RhdHVzUmVzcG9uc2USXwoUU2V0QXBwVmVyaWZpZWRTdGF0dXMSIi5yaXZlci5TZXRBcHBWZXJpZmllZFN0YXR1c1JlcXVlc3QaIy5yaXZlci5TZXRBcHBWZXJpZmllZFN0YXR1c1Jlc3BvbnNlElAKD0dldEVudGl0bGVtZW50cxIdLnJpdmVyLkdldEVudGl0bGVtZW50c1JlcXVlc3QaHi5yaXZlci5HZXRFbnRpdGxlbWVudHNSZXNwb25zZRJECgtTZXRVc2VyTmFtZRIZLnJpdmVyLlNldFVzZXJOYW1lUmVxdWVzdBoaLnJpdmVyLlNldFVzZXJOYW1lUmVzcG9uc2USSgoNR2V0RW50aXR5TmFtZRIbLnJpdmVyLkdldEVudGl0eU5hbWVSZXF1ZXN0Ghwucml2ZXIuR2V0RW50aXR5TmFtZVJlc3BvbnNlElwKE0dldEJhdGNoRW50aXR5TmFtZXMSIS5yaXZlci5HZXRCYXRjaEVudGl0eU5hbWVzUmVxdWVzdBoiLnJpdmVyLkdldEJhdGNoRW50aXR5TmFtZXNSZXNwb25zZRJWChFTZWFyY2hFbnRpdHlOYW1lcxIfLnJpdmVyLlNlYXJjaEVudGl0eU5hbWVzUmVxdWVzdBogLnJpdmVyLlNlYXJjaEVudGl0eU5hbWVzUmVzcG9uc2USUwoQQ3JlYXRlSW52aXRlTGluaxIeLnJpdmVyLkNyZWF0ZUludml0ZUxpbmtSZXF1ZXN0Gh8ucml2ZXIuQ3JlYXRlSW52aXRlTGlua1Jlc3BvbnNlElMKEFJldm9rZUludml0ZUxpbmsSHi5yaXZlci5SZXZva2VJbnZpdGVMaW5rUmVxdWVzdBofLnJpdmVyLlJldm9rZUludml0ZUxpbmtSZXNwb25zZRJTChBSZWRlZW1JbnZpdGVMaW5rEh4ucml2ZXIuUmVkZWVtSW52aXRlTGlua1JlcXVlc3QaHy5yaXZlci5SZWRlZW1JbnZpdGVMaW5rUmVzcG9uc2USSgoNR2V0SW52aXRlTGluaxIbLnJpdmVyLkdldEludml0ZUxpbmtSZXF1ZXN0Ghwucml2ZXIuR2V0SW52aXRlTGlua1Jlc3BvbnNlElkKEkxpc3RSZWdpc3RlcmVkQXBwcxIgLnJpdmVyLkxpc3RSZWdpc3RlcmVkQXBwc1JlcXVlc3QaIS5yaXZlci5MaXN0UmVnaXN0ZXJlZEFwcHNSZXNwb25zZRJNCg5HZXRCdWxrQXBwRGF0YRIcLnJpdmVyLkdldEJ1bGtBcHBEYXRhUmVxdWVzdBodLnJpdmVyLkdldEJ1bGtBcHBEYXRhUmVzcG9uc2USWQoSR2V0QXBwSW5zdGFsbFN0YXRzEiAucml2ZXIuR2V0QXBwSW5zdGFsbFN0YXRzUmVxdWVzdBohLnJpdmVyLkdldEFwcEluc3RhbGxTdGF0c1Jlc3BvbnNlEmUKFkdldEJ1bGtBcHBJbnN0YWxsU3RhdHMSJC5yaXZlci5HZXRCdWxrQXBwSW5zdGFsbFN0YXRzUmVxdWVzdBolLnJpdmVyLkdldEJ1bGtBcHBJbnN0YWxsU3RhdHNSZXNwb25zZRJQCg9TdWJtaXRBcHBSZXZpZXcSHS5yaXZlci5TdWJtaXRBcHBSZXZpZXdSZXF1ZXN0Gh4ucml2ZXIuU3VibWl0QXBwUmV2aWV3UmVzcG9uc2USSgoNR2V0QXBwUmV2aWV3cxIbLnJpdmVyLkdldEFwcFJldmlld3NSZXF1ZXN0Ghwucml2ZXIuR2V0QXBwUmV2aWV3c1Jlc3BvbnNlElAKD1Jldm9rZUFwcFJldmlldxIdLnJpdmVyLlJldm9rZUFwcFJldmlld1JlcXVlc3QaHi5yaXZlci5SZXZva2VBcHBSZXZpZXdSZXNwb25zZRJcChNHZXRBcHBSZXZpZXdTdW1tYXJ5EiEucml2ZXIuR2V0QXBwUmV2aWV3U3VtbWFyeVJlcXVlc3QaIi5yaXZlci5HZXRBcHBSZXZpZXdTdW1tYXJ5UmVzcG9uc2USbgoZR2V0QnVsa0FwcFJldmlld1N1bW1hcmllcxInLnJpdmVyLkdldEJ1bGtBcHBSZXZpZXdTdW1tYXJpZXNSZXF1ZXN0Gigucml2ZXIuR2V0QnVsa0FwcFJldmlld1N1bW1hcmllc1Jlc3BvbnNlElAKD0dldEFwcFBvc2l0aW9ucxIdLnJpdmVyLkdldEFwcFBvc2l0aW9uc1JlcXVlc3QaHi5yaXZlci5HZXRBcHBQb3NpdGlvbnNSZXNwb25zZRJfChRHZXRCYXRjaEFwcFBvc2l0aW9ucxIiLnJpdmVyLkdldEJhdGNoQXBwUG9zaXRpb25zUmVxdWVzdBojLnJpdmVyLkdldEJhdGNoQXBwUG9zaXRpb25zUmVzcG9uc2USTQoOR2V0QmF0Y2hBcHBQbmwSHC5yaXZlci5HZXRCYXRjaEFwcFBubFJlcXVlc3QaHS5yaXZlci5HZXRCYXRjaEFwcFBubFJlc3BvbnNlEmsKGEdldEJ1bGtBZ2VudENhcGFiaWxpdGllcxImLnJpdmVyLkdldEJ1bGtBZ2VudENhcGFiaWxpdGllc1JlcXVlc3QaJy5yaXZlci5HZXRCdWxrQWdlbnRDYXBhYmlsaXRpZXNSZXNwb25zZRJiChVHZXRCdWxrQWdlbnRQcm9wb3NhbHMSIy5yaXZlci5HZXRCdWxrQWdlbnRQcm9wb3NhbHNSZXF1ZXN0GiQucml2ZXIuR2V0QnVsa0FnZW50UHJvcG9zYWxzUmVzcG9uc2USTQoOUXVlcnlDb25jaWVyZ2USHC5yaXZlci5RdWVyeUNvbmNpZXJnZVJlcXVlc3QaHS5yaXZlci5RdWVyeUNvbmNpZXJnZVJlc3BvbnNlElwKE0dldENvbnZlcnNhdGlvblNlZWQSIS5yaXZlci5HZXRDb252ZXJzYXRpb25TZWVkUmVxdWVzdBoiLnJpdmVyLkdldENvbnZlcnNhdGlvblNlZWRSZXNwb25zZRJfChRTdWJtaXRBZ2VudFByb3Bvc2FscxIiLnJpdmVyLlN1Ym1pdEFnZW50UHJvcG9zYWxzUmVxdWVzdBojLnJpdmVyLlN1Ym1pdEFnZW50UHJvcG9zYWxzUmVzcG9uc2USZQoWRmluaXNoQ29udmVyc2F0aW9uU2VlZBIkLnJpdmVyLkZpbmlzaENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0GiUucml2ZXIuRmluaXNoQ29udmVyc2F0aW9uU2VlZFJlc3BvbnNlQjRaMmdpdGh1Yi5jb20vdG93bnMtcHJvdG9jb2wvdG93bnMvY29yZS9ub2RlL3Byb3RvY29sYgZwcm90bzM", [import_wkt3.file_google_protobuf_empty, file_payloads, file_protocol]);
7781
7782
  var ForwardSettingValue;
7782
7783
  (function(ForwardSettingValue2) {
7783
7784
  ForwardSettingValue2[ForwardSettingValue2["FORWARD_SETTING_UNSPECIFIED"] = 0] = "FORWARD_SETTING_UNSPECIFIED";
@@ -7789,6 +7790,7 @@ var SupportedApi;
7789
7790
  (function(SupportedApi2) {
7790
7791
  SupportedApi2[SupportedApi2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
7791
7792
  SupportedApi2[SupportedApi2["POSITIONS"] = 1] = "POSITIONS";
7793
+ SupportedApi2[SupportedApi2["PNL"] = 2] = "PNL";
7792
7794
  })(SupportedApi || (SupportedApi = {}));
7793
7795
  var PositionType;
7794
7796
  (function(PositionType2) {
@@ -7812,18 +7814,21 @@ var StartAuthenticationResponseSchema = /* @__PURE__ */ (0, import_codegenv24.me
7812
7814
  var FinishAuthenticationResponseSchema = /* @__PURE__ */ (0, import_codegenv24.messageDesc)(file_auth, 3);
7813
7815
  var AuthenticationService = /* @__PURE__ */ (0, import_codegenv24.serviceDesc)(file_auth, 0);
7814
7816
 
7815
- // ../proto/dist/gen/internal_pb.js
7817
+ // ../proto/dist/gen/contacts_pb.js
7816
7818
  var import_codegenv25 = require("@bufbuild/protobuf/codegenv2");
7817
- var file_internal = /* @__PURE__ */ (0, import_codegenv25.fileDesc)("Cg5pbnRlcm5hbC5wcm90bxIFcml2ZXIicwoOUGVyc2lzdGVkRXZlbnQSIQoFZXZlbnQYASABKAsyEi5yaXZlci5TdHJlYW1FdmVudBIMCgRoYXNoGAIgASgMEhcKD2NyZWF0b3JfdXNlcl9pZBgEIAEoCRIRCglzaWduYXR1cmUYBSABKAxKBAgDEAQicQoSUGVyc2lzdGVkTWluaWJsb2NrEgwKBGhhc2gYASABKAwSJgoGaGVhZGVyGAIgASgLMhYucml2ZXIuTWluaWJsb2NrSGVhZGVyEiUKBmV2ZW50cxgDIAMoCzIVLnJpdmVyLlBlcnNpc3RlZEV2ZW50Iq8BChVQZXJzaXN0ZWRTeW5jZWRTdHJlYW0SJgoLc3luY19jb29raWUYASABKAsyES5yaXZlci5TeW5jQ29va2llEiMKG2xhc3Rfc25hcHNob3RfbWluaWJsb2NrX251bRgCIAEoBBIaChJsYXN0X21pbmlibG9ja19udW0YAyABKAQSLQoObWluaXBvb2xFdmVudHMYBCADKAsyFS5yaXZlci5QZXJzaXN0ZWRFdmVudGIGcHJvdG8z", [file_protocol]);
7818
- var PersistedEventSchema = /* @__PURE__ */ (0, import_codegenv25.messageDesc)(file_internal, 0);
7819
- var PersistedMiniblockSchema = /* @__PURE__ */ (0, import_codegenv25.messageDesc)(file_internal, 1);
7820
- var PersistedSyncedStreamSchema = /* @__PURE__ */ (0, import_codegenv25.messageDesc)(file_internal, 2);
7821
7819
 
7822
- // ../proto/dist/gen/notifications_pb.js
7820
+ // ../proto/dist/gen/internal_pb.js
7823
7821
  var import_codegenv26 = require("@bufbuild/protobuf/codegenv2");
7824
- var file_notifications = /* @__PURE__ */ (0, import_codegenv26.fileDesc)("ChNub3RpZmljYXRpb25zLnByb3RvEgVyaXZlciIUChJHZXRTZXR0aW5nc1JlcXVlc3Qi3QIKE0dldFNldHRpbmdzUmVzcG9uc2USDwoHdXNlcl9pZBgBIAEoDBIxCgpnZG1fZ2xvYmFsGAQgASgOMh0ucml2ZXIuR2RtQ2hhbm5lbFNldHRpbmdWYWx1ZRIuCgxnZG1fY2hhbm5lbHMYBiADKAsyGC5yaXZlci5HZG1DaGFubmVsU2V0dGluZxI7ChF3ZWJfc3Vic2NyaXB0aW9ucxgHIAMoCzIgLnJpdmVyLldlYlB1c2hTdWJzY3JpcHRpb25PYmplY3QSMQoRYXBuX3N1YnNjcmlwdGlvbnMYCCADKAsyFi5yaXZlci5BUE5TdWJzY3JpcHRpb24SMQoRZmNtX3N1YnNjcmlwdGlvbnMYCSADKAsyFi5yaXZlci5GQ01TdWJzY3JpcHRpb25KBAgCEANKBAgDEARKBAgFEAZSBXNwYWNlUglkbV9nbG9iYWxSC2RtX2NoYW5uZWxzIqkBChJTZXRTZXR0aW5nc1JlcXVlc3QSMQoKZ2RtX2dsb2JhbBgDIAEoDjIdLnJpdmVyLkdkbUNoYW5uZWxTZXR0aW5nVmFsdWUSLgoMZ2RtX2NoYW5uZWxzGAQgAygLMhgucml2ZXIuR2RtQ2hhbm5lbFNldHRpbmdKBAgBEAJKBAgCEANKBAgFEAZSCWRtX2dsb2JhbFILZG1fY2hhbm5lbHNSBnNwYWNlcyIVChNTZXRTZXR0aW5nc1Jlc3BvbnNlIl0KF1NldERtR2RtU2V0dGluZ3NSZXF1ZXN0EjEKCmdkbV9nbG9iYWwYAiABKA4yHS5yaXZlci5HZG1DaGFubmVsU2V0dGluZ1ZhbHVlSgQIARACUglkbV9nbG9iYWwiGgoYU2V0RG1HZG1TZXR0aW5nc1Jlc3BvbnNlIlUKEUdkbUNoYW5uZWxTZXR0aW5nEhIKCmNoYW5uZWxfaWQYASABKAwSLAoFdmFsdWUYAiABKA4yHS5yaXZlci5HZG1DaGFubmVsU2V0dGluZ1ZhbHVlImMKG1NldEdkbUNoYW5uZWxTZXR0aW5nUmVxdWVzdBIWCg5nZG1fY2hhbm5lbF9pZBgBIAEoDBIsCgV2YWx1ZRgCIAEoDjIdLnJpdmVyLkdkbUNoYW5uZWxTZXR0aW5nVmFsdWUiHgocU2V0R2RtQ2hhbm5lbFNldHRpbmdSZXNwb25zZSI9Ch1XZWJQdXNoU3Vic2NyaXB0aW9uT2JqZWN0S2V5cxIOCgZwMjU2ZGgYASABKAkSDAoEYXV0aBgCIAEoCSJhChlXZWJQdXNoU3Vic2NyaXB0aW9uT2JqZWN0EhAKCGVuZHBvaW50GAEgASgJEjIKBGtleXMYAiABKAsyJC5yaXZlci5XZWJQdXNoU3Vic2NyaXB0aW9uT2JqZWN0S2V5cyJeChdTdWJzY3JpYmVXZWJQdXNoUmVxdWVzdBI2CgxzdWJzY3JpcHRpb24YASABKAsyIC5yaXZlci5XZWJQdXNoU3Vic2NyaXB0aW9uT2JqZWN0EgsKA2FwcBgCIAEoCSIaChhTdWJzY3JpYmVXZWJQdXNoUmVzcG9uc2UiXgoZVW5zdWJzY3JpYmVXZWJQdXNoUmVxdWVzdBI2CgxzdWJzY3JpcHRpb24YASABKAsyIC5yaXZlci5XZWJQdXNoU3Vic2NyaXB0aW9uT2JqZWN0SgQIAhADUgNhcHAiHAoaVW5zdWJzY3JpYmVXZWJQdXNoUmVzcG9uc2UimgEKE1N1YnNjcmliZUFQTlJlcXVlc3QSFAoMZGV2aWNlX3Rva2VuGAEgASgMEioKC2Vudmlyb25tZW50GAIgASgOMhUucml2ZXIuQVBORW52aXJvbm1lbnQSNAoMcHVzaF92ZXJzaW9uGAMgASgOMh4ucml2ZXIuTm90aWZpY2F0aW9uUHVzaFZlcnNpb24SCwoDYXBwGAQgASgJIlMKD0FQTlN1YnNjcmlwdGlvbhIUCgxkZXZpY2VfdG9rZW4YASABKAwSKgoLZW52aXJvbm1lbnQYAiABKA4yFS5yaXZlci5BUE5FbnZpcm9ubWVudCIWChRTdWJzY3JpYmVBUE5SZXNwb25zZSI4ChVVbnN1YnNjcmliZUFQTlJlcXVlc3QSFAoMZGV2aWNlX3Rva2VuGAEgASgMSgQIAhADUgNhcHAiGAoWVW5zdWJzY3JpYmVBUE5SZXNwb25zZSI+ChNTdWJzY3JpYmVGQ01SZXF1ZXN0EhoKEnJlZ2lzdHJhdGlvbl90b2tlbhgBIAEoCRILCgNhcHAYAiABKAkiFgoUU3Vic2NyaWJlRkNNUmVzcG9uc2UiMwoVVW5zdWJzY3JpYmVGQ01SZXF1ZXN0EhoKEnJlZ2lzdHJhdGlvbl90b2tlbhgBIAEoCSIYChZVbnN1YnNjcmliZUZDTVJlc3BvbnNlIi0KD0ZDTVN1YnNjcmlwdGlvbhIaChJyZWdpc3RyYXRpb25fdG9rZW4YASABKAkqnwEKFkdkbUNoYW5uZWxTZXR0aW5nVmFsdWUSEwoPR0RNX1VOU1BFQ0lGSUVEEAASEwoPR0RNX01FU1NBR0VTX05PEAESHAoYR0RNX01FU1NBR0VTX05PX0FORF9NVVRFEAISJwojR0RNX09OTFlfTUVOVElPTlNfUkVQTElFU19SRUFDVElPTlMQAxIUChBHRE1fTUVTU0FHRVNfQUxMEAQqbgoOQVBORW52aXJvbm1lbnQSHwobQVBOX0VOVklST05NRU5UX1VOU1BFQ0lGSUVEEAASHgoaQVBOX0VOVklST05NRU5UX1BST0RVQ1RJT04QARIbChdBUE5fRU5WSVJPTk1FTlRfU0FOREJPWBACKoYBChdOb3RpZmljYXRpb25QdXNoVmVyc2lvbhIpCiVOT1RJRklDQVRJT05fUFVTSF9WRVJTSU9OX1VOU1BFQ0lGSUVEEAASHwobTk9USUZJQ0FUSU9OX1BVU0hfVkVSU0lPTl8xEAESHwobTk9USUZJQ0FUSU9OX1BVU0hfVkVSU0lPTl8yEAIytwYKE05vdGlmaWNhdGlvblNlcnZpY2USRAoLR2V0U2V0dGluZ3MSGS5yaXZlci5HZXRTZXR0aW5nc1JlcXVlc3QaGi5yaXZlci5HZXRTZXR0aW5nc1Jlc3BvbnNlElMKEFNldERtR2RtU2V0dGluZ3MSHi5yaXZlci5TZXREbUdkbVNldHRpbmdzUmVxdWVzdBofLnJpdmVyLlNldERtR2RtU2V0dGluZ3NSZXNwb25zZRJECgtTZXRTZXR0aW5ncxIZLnJpdmVyLlNldFNldHRpbmdzUmVxdWVzdBoaLnJpdmVyLlNldFNldHRpbmdzUmVzcG9uc2USXwoUU2V0R2RtQ2hhbm5lbFNldHRpbmcSIi5yaXZlci5TZXRHZG1DaGFubmVsU2V0dGluZ1JlcXVlc3QaIy5yaXZlci5TZXRHZG1DaGFubmVsU2V0dGluZ1Jlc3BvbnNlElMKEFN1YnNjcmliZVdlYlB1c2gSHi5yaXZlci5TdWJzY3JpYmVXZWJQdXNoUmVxdWVzdBofLnJpdmVyLlN1YnNjcmliZVdlYlB1c2hSZXNwb25zZRJZChJVbnN1YnNjcmliZVdlYlB1c2gSIC5yaXZlci5VbnN1YnNjcmliZVdlYlB1c2hSZXF1ZXN0GiEucml2ZXIuVW5zdWJzY3JpYmVXZWJQdXNoUmVzcG9uc2USRwoMU3Vic2NyaWJlQVBOEhoucml2ZXIuU3Vic2NyaWJlQVBOUmVxdWVzdBobLnJpdmVyLlN1YnNjcmliZUFQTlJlc3BvbnNlEk0KDlVuc3Vic2NyaWJlQVBOEhwucml2ZXIuVW5zdWJzY3JpYmVBUE5SZXF1ZXN0Gh0ucml2ZXIuVW5zdWJzY3JpYmVBUE5SZXNwb25zZRJHCgxTdWJzY3JpYmVGQ00SGi5yaXZlci5TdWJzY3JpYmVGQ01SZXF1ZXN0Ghsucml2ZXIuU3Vic2NyaWJlRkNNUmVzcG9uc2USTQoOVW5zdWJzY3JpYmVGQ00SHC5yaXZlci5VbnN1YnNjcmliZUZDTVJlcXVlc3QaHS5yaXZlci5VbnN1YnNjcmliZUZDTVJlc3BvbnNlQjRaMmdpdGh1Yi5jb20vdG93bnMtcHJvdG9jb2wvdG93bnMvY29yZS9ub2RlL3Byb3RvY29sYgZwcm90bzM");
7825
- var GetSettingsResponseSchema = /* @__PURE__ */ (0, import_codegenv26.messageDesc)(file_notifications, 1);
7826
- var GdmChannelSettingSchema = /* @__PURE__ */ (0, import_codegenv26.messageDesc)(file_notifications, 6);
7822
+ var file_internal = /* @__PURE__ */ (0, import_codegenv26.fileDesc)("Cg5pbnRlcm5hbC5wcm90bxIFcml2ZXIicwoOUGVyc2lzdGVkRXZlbnQSIQoFZXZlbnQYASABKAsyEi5yaXZlci5TdHJlYW1FdmVudBIMCgRoYXNoGAIgASgMEhcKD2NyZWF0b3JfdXNlcl9pZBgEIAEoCRIRCglzaWduYXR1cmUYBSABKAxKBAgDEAQicQoSUGVyc2lzdGVkTWluaWJsb2NrEgwKBGhhc2gYASABKAwSJgoGaGVhZGVyGAIgASgLMhYucml2ZXIuTWluaWJsb2NrSGVhZGVyEiUKBmV2ZW50cxgDIAMoCzIVLnJpdmVyLlBlcnNpc3RlZEV2ZW50Iq8BChVQZXJzaXN0ZWRTeW5jZWRTdHJlYW0SJgoLc3luY19jb29raWUYASABKAsyES5yaXZlci5TeW5jQ29va2llEiMKG2xhc3Rfc25hcHNob3RfbWluaWJsb2NrX251bRgCIAEoBBIaChJsYXN0X21pbmlibG9ja19udW0YAyABKAQSLQoObWluaXBvb2xFdmVudHMYBCADKAsyFS5yaXZlci5QZXJzaXN0ZWRFdmVudGIGcHJvdG8z", [file_protocol]);
7823
+ var PersistedEventSchema = /* @__PURE__ */ (0, import_codegenv26.messageDesc)(file_internal, 0);
7824
+ var PersistedMiniblockSchema = /* @__PURE__ */ (0, import_codegenv26.messageDesc)(file_internal, 1);
7825
+ var PersistedSyncedStreamSchema = /* @__PURE__ */ (0, import_codegenv26.messageDesc)(file_internal, 2);
7826
+
7827
+ // ../proto/dist/gen/notifications_pb.js
7828
+ var import_codegenv27 = require("@bufbuild/protobuf/codegenv2");
7829
+ var file_notifications = /* @__PURE__ */ (0, import_codegenv27.fileDesc)("ChNub3RpZmljYXRpb25zLnByb3RvEgVyaXZlciIUChJHZXRTZXR0aW5nc1JlcXVlc3Qi3QIKE0dldFNldHRpbmdzUmVzcG9uc2USDwoHdXNlcl9pZBgBIAEoDBIxCgpnZG1fZ2xvYmFsGAQgASgOMh0ucml2ZXIuR2RtQ2hhbm5lbFNldHRpbmdWYWx1ZRIuCgxnZG1fY2hhbm5lbHMYBiADKAsyGC5yaXZlci5HZG1DaGFubmVsU2V0dGluZxI7ChF3ZWJfc3Vic2NyaXB0aW9ucxgHIAMoCzIgLnJpdmVyLldlYlB1c2hTdWJzY3JpcHRpb25PYmplY3QSMQoRYXBuX3N1YnNjcmlwdGlvbnMYCCADKAsyFi5yaXZlci5BUE5TdWJzY3JpcHRpb24SMQoRZmNtX3N1YnNjcmlwdGlvbnMYCSADKAsyFi5yaXZlci5GQ01TdWJzY3JpcHRpb25KBAgCEANKBAgDEARKBAgFEAZSBXNwYWNlUglkbV9nbG9iYWxSC2RtX2NoYW5uZWxzIqkBChJTZXRTZXR0aW5nc1JlcXVlc3QSMQoKZ2RtX2dsb2JhbBgDIAEoDjIdLnJpdmVyLkdkbUNoYW5uZWxTZXR0aW5nVmFsdWUSLgoMZ2RtX2NoYW5uZWxzGAQgAygLMhgucml2ZXIuR2RtQ2hhbm5lbFNldHRpbmdKBAgBEAJKBAgCEANKBAgFEAZSCWRtX2dsb2JhbFILZG1fY2hhbm5lbHNSBnNwYWNlcyIVChNTZXRTZXR0aW5nc1Jlc3BvbnNlIl0KF1NldERtR2RtU2V0dGluZ3NSZXF1ZXN0EjEKCmdkbV9nbG9iYWwYAiABKA4yHS5yaXZlci5HZG1DaGFubmVsU2V0dGluZ1ZhbHVlSgQIARACUglkbV9nbG9iYWwiGgoYU2V0RG1HZG1TZXR0aW5nc1Jlc3BvbnNlIlUKEUdkbUNoYW5uZWxTZXR0aW5nEhIKCmNoYW5uZWxfaWQYASABKAwSLAoFdmFsdWUYAiABKA4yHS5yaXZlci5HZG1DaGFubmVsU2V0dGluZ1ZhbHVlImMKG1NldEdkbUNoYW5uZWxTZXR0aW5nUmVxdWVzdBIWCg5nZG1fY2hhbm5lbF9pZBgBIAEoDBIsCgV2YWx1ZRgCIAEoDjIdLnJpdmVyLkdkbUNoYW5uZWxTZXR0aW5nVmFsdWUiHgocU2V0R2RtQ2hhbm5lbFNldHRpbmdSZXNwb25zZSI9Ch1XZWJQdXNoU3Vic2NyaXB0aW9uT2JqZWN0S2V5cxIOCgZwMjU2ZGgYASABKAkSDAoEYXV0aBgCIAEoCSJhChlXZWJQdXNoU3Vic2NyaXB0aW9uT2JqZWN0EhAKCGVuZHBvaW50GAEgASgJEjIKBGtleXMYAiABKAsyJC5yaXZlci5XZWJQdXNoU3Vic2NyaXB0aW9uT2JqZWN0S2V5cyJeChdTdWJzY3JpYmVXZWJQdXNoUmVxdWVzdBI2CgxzdWJzY3JpcHRpb24YASABKAsyIC5yaXZlci5XZWJQdXNoU3Vic2NyaXB0aW9uT2JqZWN0EgsKA2FwcBgCIAEoCSIaChhTdWJzY3JpYmVXZWJQdXNoUmVzcG9uc2UiXgoZVW5zdWJzY3JpYmVXZWJQdXNoUmVxdWVzdBI2CgxzdWJzY3JpcHRpb24YASABKAsyIC5yaXZlci5XZWJQdXNoU3Vic2NyaXB0aW9uT2JqZWN0SgQIAhADUgNhcHAiHAoaVW5zdWJzY3JpYmVXZWJQdXNoUmVzcG9uc2UimgEKE1N1YnNjcmliZUFQTlJlcXVlc3QSFAoMZGV2aWNlX3Rva2VuGAEgASgMEioKC2Vudmlyb25tZW50GAIgASgOMhUucml2ZXIuQVBORW52aXJvbm1lbnQSNAoMcHVzaF92ZXJzaW9uGAMgASgOMh4ucml2ZXIuTm90aWZpY2F0aW9uUHVzaFZlcnNpb24SCwoDYXBwGAQgASgJIlMKD0FQTlN1YnNjcmlwdGlvbhIUCgxkZXZpY2VfdG9rZW4YASABKAwSKgoLZW52aXJvbm1lbnQYAiABKA4yFS5yaXZlci5BUE5FbnZpcm9ubWVudCIWChRTdWJzY3JpYmVBUE5SZXNwb25zZSI4ChVVbnN1YnNjcmliZUFQTlJlcXVlc3QSFAoMZGV2aWNlX3Rva2VuGAEgASgMSgQIAhADUgNhcHAiGAoWVW5zdWJzY3JpYmVBUE5SZXNwb25zZSI+ChNTdWJzY3JpYmVGQ01SZXF1ZXN0EhoKEnJlZ2lzdHJhdGlvbl90b2tlbhgBIAEoCRILCgNhcHAYAiABKAkiFgoUU3Vic2NyaWJlRkNNUmVzcG9uc2UiMwoVVW5zdWJzY3JpYmVGQ01SZXF1ZXN0EhoKEnJlZ2lzdHJhdGlvbl90b2tlbhgBIAEoCSIYChZVbnN1YnNjcmliZUZDTVJlc3BvbnNlIi0KD0ZDTVN1YnNjcmlwdGlvbhIaChJyZWdpc3RyYXRpb25fdG9rZW4YASABKAkqnwEKFkdkbUNoYW5uZWxTZXR0aW5nVmFsdWUSEwoPR0RNX1VOU1BFQ0lGSUVEEAASEwoPR0RNX01FU1NBR0VTX05PEAESHAoYR0RNX01FU1NBR0VTX05PX0FORF9NVVRFEAISJwojR0RNX09OTFlfTUVOVElPTlNfUkVQTElFU19SRUFDVElPTlMQAxIUChBHRE1fTUVTU0FHRVNfQUxMEAQqbgoOQVBORW52aXJvbm1lbnQSHwobQVBOX0VOVklST05NRU5UX1VOU1BFQ0lGSUVEEAASHgoaQVBOX0VOVklST05NRU5UX1BST0RVQ1RJT04QARIbChdBUE5fRU5WSVJPTk1FTlRfU0FOREJPWBACKoYBChdOb3RpZmljYXRpb25QdXNoVmVyc2lvbhIpCiVOT1RJRklDQVRJT05fUFVTSF9WRVJTSU9OX1VOU1BFQ0lGSUVEEAASHwobTk9USUZJQ0FUSU9OX1BVU0hfVkVSU0lPTl8xEAESHwobTk9USUZJQ0FUSU9OX1BVU0hfVkVSU0lPTl8yEAIytwYKE05vdGlmaWNhdGlvblNlcnZpY2USRAoLR2V0U2V0dGluZ3MSGS5yaXZlci5HZXRTZXR0aW5nc1JlcXVlc3QaGi5yaXZlci5HZXRTZXR0aW5nc1Jlc3BvbnNlElMKEFNldERtR2RtU2V0dGluZ3MSHi5yaXZlci5TZXREbUdkbVNldHRpbmdzUmVxdWVzdBofLnJpdmVyLlNldERtR2RtU2V0dGluZ3NSZXNwb25zZRJECgtTZXRTZXR0aW5ncxIZLnJpdmVyLlNldFNldHRpbmdzUmVxdWVzdBoaLnJpdmVyLlNldFNldHRpbmdzUmVzcG9uc2USXwoUU2V0R2RtQ2hhbm5lbFNldHRpbmcSIi5yaXZlci5TZXRHZG1DaGFubmVsU2V0dGluZ1JlcXVlc3QaIy5yaXZlci5TZXRHZG1DaGFubmVsU2V0dGluZ1Jlc3BvbnNlElMKEFN1YnNjcmliZVdlYlB1c2gSHi5yaXZlci5TdWJzY3JpYmVXZWJQdXNoUmVxdWVzdBofLnJpdmVyLlN1YnNjcmliZVdlYlB1c2hSZXNwb25zZRJZChJVbnN1YnNjcmliZVdlYlB1c2gSIC5yaXZlci5VbnN1YnNjcmliZVdlYlB1c2hSZXF1ZXN0GiEucml2ZXIuVW5zdWJzY3JpYmVXZWJQdXNoUmVzcG9uc2USRwoMU3Vic2NyaWJlQVBOEhoucml2ZXIuU3Vic2NyaWJlQVBOUmVxdWVzdBobLnJpdmVyLlN1YnNjcmliZUFQTlJlc3BvbnNlEk0KDlVuc3Vic2NyaWJlQVBOEhwucml2ZXIuVW5zdWJzY3JpYmVBUE5SZXF1ZXN0Gh0ucml2ZXIuVW5zdWJzY3JpYmVBUE5SZXNwb25zZRJHCgxTdWJzY3JpYmVGQ00SGi5yaXZlci5TdWJzY3JpYmVGQ01SZXF1ZXN0Ghsucml2ZXIuU3Vic2NyaWJlRkNNUmVzcG9uc2USTQoOVW5zdWJzY3JpYmVGQ00SHC5yaXZlci5VbnN1YnNjcmliZUZDTVJlcXVlc3QaHS5yaXZlci5VbnN1YnNjcmliZUZDTVJlc3BvbnNlQjRaMmdpdGh1Yi5jb20vdG93bnMtcHJvdG9jb2wvdG93bnMvY29yZS9ub2RlL3Byb3RvY29sYgZwcm90bzM");
7830
+ var GetSettingsResponseSchema = /* @__PURE__ */ (0, import_codegenv27.messageDesc)(file_notifications, 1);
7831
+ var GdmChannelSettingSchema = /* @__PURE__ */ (0, import_codegenv27.messageDesc)(file_notifications, 6);
7827
7832
  var GdmChannelSettingValue;
7828
7833
  (function(GdmChannelSettingValue2) {
7829
7834
  GdmChannelSettingValue2[GdmChannelSettingValue2["GDM_UNSPECIFIED"] = 0] = "GDM_UNSPECIFIED";
@@ -7844,7 +7849,7 @@ var NotificationPushVersion;
7844
7849
  NotificationPushVersion2[NotificationPushVersion2["NOTIFICATION_PUSH_VERSION_1"] = 1] = "NOTIFICATION_PUSH_VERSION_1";
7845
7850
  NotificationPushVersion2[NotificationPushVersion2["NOTIFICATION_PUSH_VERSION_2"] = 2] = "NOTIFICATION_PUSH_VERSION_2";
7846
7851
  })(NotificationPushVersion || (NotificationPushVersion = {}));
7847
- var NotificationService = /* @__PURE__ */ (0, import_codegenv26.serviceDesc)(file_notifications, 0);
7852
+ var NotificationService = /* @__PURE__ */ (0, import_codegenv27.serviceDesc)(file_notifications, 0);
7848
7853
 
7849
7854
  // ../utils/dist/binary.js
7850
7855
  var import_wire = require("@bufbuild/protobuf/wire");
@@ -13404,19 +13409,20 @@ function createHttp2ConnectTransport(options) {
13404
13409
  });
13405
13410
  }
13406
13411
 
13407
- // ../sdk/dist/makeAuthenticationRpcClient.js
13408
- var logInfo = dlog("csb:auto-rpc:info");
13412
+ // ../sdk/dist/makeAppRegistryRpcClient.js
13413
+ var logInfo = dlog("csb:rpc:info");
13409
13414
  var nextRpcClientNum = 0;
13410
- function makeAuthenticationRpcClient(dest, opts) {
13415
+ function makeAppRegistryRpcClient(dest, sessionToken, opts) {
13411
13416
  const transportId = nextRpcClientNum++;
13412
13417
  const retryParams = opts?.retryParams ?? DEFAULT_RETRY_PARAMS;
13413
13418
  const url = randomUrlSelector(dest);
13414
- logInfo("makeAuthenticationRpcClient: Connecting to url=", url, " allUrls=", dest, " transportId =", transportId);
13419
+ logInfo("makeAppRegistryRpcClient: Connecting to url=", url, " allUrls=", dest, " transportId =", transportId);
13415
13420
  const options = {
13416
13421
  baseUrl: url,
13417
13422
  interceptors: [
13418
13423
  ...opts?.interceptors ?? [],
13419
- loggingInterceptor(transportId, "AuthenticationService"),
13424
+ setHeaderInterceptor({ Authorization: sessionToken }),
13425
+ loggingInterceptor(transportId, "AppRegistryService"),
13420
13426
  retryInterceptor(retryParams)
13421
13427
  ],
13422
13428
  defaultTimeoutMs: void 0
@@ -13425,7 +13431,7 @@ function makeAuthenticationRpcClient(dest, opts) {
13425
13431
  if (getEnvVar("RIVER_DEBUG_TRANSPORT") !== "true") {
13426
13432
  options.useBinaryFormat = true;
13427
13433
  } else {
13428
- logInfo("makeAuthenticationRpcClient: running in debug mode, using JSON format");
13434
+ logInfo("makeAppRegistryRpcClient: running in debug mode, using JSON format");
13429
13435
  options.useBinaryFormat = false;
13430
13436
  options.jsonOptions = {
13431
13437
  alwaysEmitImplicit: true,
@@ -13433,7 +13439,7 @@ function makeAuthenticationRpcClient(dest, opts) {
13433
13439
  };
13434
13440
  }
13435
13441
  const transport = createHttp2ConnectTransport(options);
13436
- const client = createClient(AuthenticationService, transport);
13442
+ const client = createClient(AppRegistryService, transport);
13437
13443
  client.url = url;
13438
13444
  return client;
13439
13445
  }
@@ -13460,6 +13466,40 @@ function assert(condition, message) {
13460
13466
  }
13461
13467
  }
13462
13468
 
13469
+ // ../sdk/dist/makeAuthenticationRpcClient.js
13470
+ var logInfo2 = dlog("csb:auto-rpc:info");
13471
+ var nextRpcClientNum2 = 0;
13472
+ function makeAuthenticationRpcClient(dest, opts) {
13473
+ const transportId = nextRpcClientNum2++;
13474
+ const retryParams = opts?.retryParams ?? DEFAULT_RETRY_PARAMS;
13475
+ const url = randomUrlSelector(dest);
13476
+ logInfo2("makeAuthenticationRpcClient: Connecting to url=", url, " allUrls=", dest, " transportId =", transportId);
13477
+ const options = {
13478
+ baseUrl: url,
13479
+ interceptors: [
13480
+ ...opts?.interceptors ?? [],
13481
+ loggingInterceptor(transportId, "AuthenticationService"),
13482
+ retryInterceptor(retryParams)
13483
+ ],
13484
+ defaultTimeoutMs: void 0
13485
+ // default timeout is undefined, we add a timeout in the retryInterceptor
13486
+ };
13487
+ if (getEnvVar("RIVER_DEBUG_TRANSPORT") !== "true") {
13488
+ options.useBinaryFormat = true;
13489
+ } else {
13490
+ logInfo2("makeAuthenticationRpcClient: running in debug mode, using JSON format");
13491
+ options.useBinaryFormat = false;
13492
+ options.jsonOptions = {
13493
+ alwaysEmitImplicit: true,
13494
+ useProtoFieldName: true
13495
+ };
13496
+ }
13497
+ const transport = createHttp2ConnectTransport(options);
13498
+ const client = createClient(AuthenticationService, transport);
13499
+ client.url = url;
13500
+ return client;
13501
+ }
13502
+
13463
13503
  // ../../node_modules/.bun/@noble+curves@1.9.7/node_modules/@noble/curves/esm/utils.js
13464
13504
  var _0n7 = /* @__PURE__ */ BigInt(0);
13465
13505
  var _1n7 = /* @__PURE__ */ BigInt(1);
@@ -16264,81 +16304,133 @@ function hexToNumber3(hex) {
16264
16304
  return BigInt(hex === "" ? "0" : `0x${hex}`);
16265
16305
  }
16266
16306
 
16267
- // ../sdk/dist/makeAppRegistryRpcClient.js
16268
- var logInfo2 = dlog("csb:rpc:info");
16269
- var nextRpcClientNum2 = 0;
16270
- function makeAppRegistryRpcClient(dest, sessionToken, opts) {
16271
- const transportId = nextRpcClientNum2++;
16272
- const retryParams = opts?.retryParams ?? DEFAULT_RETRY_PARAMS;
16273
- const url = randomUrlSelector(dest);
16274
- logInfo2("makeAppRegistryRpcClient: Connecting to url=", url, " allUrls=", dest, " transportId =", transportId);
16275
- const options = {
16276
- baseUrl: url,
16277
- interceptors: [
16278
- ...opts?.interceptors ?? [],
16279
- setHeaderInterceptor({ Authorization: sessionToken }),
16280
- loggingInterceptor(transportId, "AppRegistryService"),
16281
- retryInterceptor(retryParams)
16282
- ],
16283
- defaultTimeoutMs: void 0
16284
- // default timeout is undefined, we add a timeout in the retryInterceptor
16307
+ // ../sdk/dist/authenticatedServiceUtils.js
16308
+ async function authenticateCommon({ userId, serviceUrl, opts, getSignature, extraFinishAuthParams, makeRpcClient }) {
16309
+ const authenticationRpcClient = makeAuthenticationRpcClient(serviceUrl, opts);
16310
+ const startResponse = await authenticationRpcClient.startAuthentication({ userId });
16311
+ check(startResponse.challenge.length >= 16, "challenge must be 16 bytes");
16312
+ check(isDefined(startResponse.expiration), "expiration must be defined");
16313
+ const hash = meganodeAuthHash(userId, startResponse.expiration.seconds, startResponse.challenge);
16314
+ const signature = await getSignature(hash);
16315
+ const finishResponse = await authenticationRpcClient.finishAuthentication({
16316
+ userId,
16317
+ challenge: startResponse.challenge,
16318
+ signature,
16319
+ ...extraFinishAuthParams
16320
+ });
16321
+ return {
16322
+ startResponse,
16323
+ finishResponse,
16324
+ rpcClient: makeRpcClient(serviceUrl, finishResponse.sessionToken, opts)
16325
+ };
16326
+ }
16327
+ async function authenticateWithSignerContext({ signerContext, serviceUrl, opts, makeRpcClient }) {
16328
+ return authenticateCommon({
16329
+ userId: signerContext.creatorAddress,
16330
+ serviceUrl,
16331
+ opts,
16332
+ getSignature: async (hashSrc) => {
16333
+ const hash = hashPersonalMessage(hashSrc);
16334
+ return await riverSign(hash, signerContext.signerPrivateKey());
16335
+ },
16336
+ extraFinishAuthParams: {
16337
+ delegateSig: signerContext.delegateSig,
16338
+ delegateExpiryEpochMs: signerContext.delegateExpiryEpochMs
16339
+ },
16340
+ makeRpcClient
16341
+ });
16342
+ }
16343
+ async function authenticateWithSigner({ userId, signer, serviceUrl, opts, makeRpcClient }) {
16344
+ const userIdBytes = typeof userId === "string" ? bin_fromHexString(userId) : userId;
16345
+ return authenticateCommon({
16346
+ userId: userIdBytes,
16347
+ serviceUrl,
16348
+ opts,
16349
+ getSignature: async (hash) => {
16350
+ const sigHex = await signer.signMessage(hash);
16351
+ return bin_fromHexString(sigHex);
16352
+ },
16353
+ extraFinishAuthParams: {},
16354
+ makeRpcClient
16355
+ });
16356
+ }
16357
+ function createReauthenticatingClientFactory({ authenticate }) {
16358
+ let currentClient;
16359
+ let reAuthPromise;
16360
+ let proxy;
16361
+ const reAuthenticate = async () => {
16362
+ if (!reAuthPromise) {
16363
+ reAuthPromise = authenticate().then((client) => {
16364
+ currentClient = client;
16365
+ }).finally(() => {
16366
+ reAuthPromise = void 0;
16367
+ });
16368
+ }
16369
+ return reAuthPromise;
16370
+ };
16371
+ return async () => {
16372
+ if (!currentClient) {
16373
+ await reAuthenticate();
16374
+ }
16375
+ if (!proxy) {
16376
+ proxy = new Proxy({}, {
16377
+ get(_target, prop) {
16378
+ const client = currentClient;
16379
+ const value = client[prop];
16380
+ if (typeof value !== "function") {
16381
+ return value;
16382
+ }
16383
+ return async (...args) => {
16384
+ try {
16385
+ return await value.apply(client, args);
16386
+ } catch (err) {
16387
+ if (errorContains(err, Err.UNAUTHENTICATED)) {
16388
+ await reAuthenticate();
16389
+ const newClient = currentClient;
16390
+ const newValue = newClient[prop];
16391
+ if (typeof newValue !== "function") {
16392
+ return newValue;
16393
+ }
16394
+ return await newValue.apply(newClient, args);
16395
+ }
16396
+ throw err;
16397
+ }
16398
+ };
16399
+ }
16400
+ });
16401
+ }
16402
+ return proxy;
16285
16403
  };
16286
- if (getEnvVar("RIVER_DEBUG_TRANSPORT") !== "true") {
16287
- options.useBinaryFormat = true;
16288
- } else {
16289
- logInfo2("makeAppRegistryRpcClient: running in debug mode, using JSON format");
16290
- options.useBinaryFormat = false;
16291
- options.jsonOptions = {
16292
- alwaysEmitImplicit: true,
16293
- useProtoFieldName: true
16294
- };
16295
- }
16296
- const transport = createHttp2ConnectTransport(options);
16297
- const client = createClient(AppRegistryService, transport);
16298
- client.url = url;
16299
- return client;
16300
16404
  }
16301
16405
 
16302
16406
  // ../sdk/dist/appRegistryService.js
16303
16407
  var AppRegistryService2 = class {
16304
- static async _authenticateCommon(userId, serviceUrl, opts, getSignature, extraFinishAuthParams) {
16305
- const authenticationRpcClient = makeAuthenticationRpcClient(serviceUrl, opts);
16306
- const startResponse = await authenticationRpcClient.startAuthentication({ userId });
16307
- check(startResponse.challenge.length >= 16, "challenge must be 16 bytes");
16308
- check(isDefined(startResponse.expiration), "expiration must be defined");
16309
- const hash = meganodeAuthHash(userId, startResponse.expiration.seconds, startResponse.challenge);
16310
- const signature = await getSignature(hash);
16311
- const finishResponse = await authenticationRpcClient.finishAuthentication({
16312
- userId,
16313
- challenge: startResponse.challenge,
16314
- signature,
16315
- ...extraFinishAuthParams
16408
+ static async authenticate(signerContext, serviceUrl, opts) {
16409
+ const { startResponse, finishResponse, rpcClient: appRegistryRpcClient } = await authenticateWithSignerContext({
16410
+ signerContext,
16411
+ serviceUrl,
16412
+ opts,
16413
+ makeRpcClient: makeAppRegistryRpcClient
16316
16414
  });
16317
- const appRegistryRpcClient = makeAppRegistryRpcClient(serviceUrl, finishResponse.sessionToken, opts);
16318
16415
  return {
16319
16416
  startResponse,
16320
16417
  finishResponse,
16321
16418
  appRegistryRpcClient
16322
16419
  };
16323
16420
  }
16324
- static async authenticate(signerContext, serviceUrl, opts) {
16325
- const userId = signerContext.creatorAddress;
16326
- return this._authenticateCommon(userId, serviceUrl, opts, async (hashSrc) => {
16327
- const hash = hashPersonalMessage(hashSrc);
16328
- return await riverSign(hash, signerContext.signerPrivateKey());
16329
- }, {
16330
- delegateSig: signerContext.delegateSig,
16331
- delegateExpiryEpochMs: signerContext.delegateExpiryEpochMs
16332
- });
16333
- }
16334
16421
  static async authenticateWithSigner(userId, signer, serviceUrl, opts) {
16335
- if (typeof userId === "string") {
16336
- userId = bin_fromHexString(userId);
16337
- }
16338
- return this._authenticateCommon(userId, serviceUrl, opts, async (hash) => {
16339
- const sigHex = await signer.signMessage(hash);
16340
- return bin_fromHexString(sigHex);
16341
- }, {});
16422
+ const { startResponse, finishResponse, rpcClient: appRegistryRpcClient } = await authenticateWithSigner({
16423
+ userId,
16424
+ signer,
16425
+ serviceUrl,
16426
+ opts,
16427
+ makeRpcClient: makeAppRegistryRpcClient
16428
+ });
16429
+ return {
16430
+ startResponse,
16431
+ finishResponse,
16432
+ appRegistryRpcClient
16433
+ };
16342
16434
  }
16343
16435
  /**
16344
16436
  * Creates a lazy, self-healing app registry client that automatically
@@ -16346,47 +16438,12 @@ var AppRegistryService2 = class {
16346
16438
  * Concurrent re-auth attempts are coalesced into a single authentication call.
16347
16439
  */
16348
16440
  static createClient(signerContext, serviceUrl, opts) {
16349
- let currentClient;
16350
- let reAuthPromise;
16351
- let proxy;
16352
- const reAuthenticate = async () => {
16353
- if (!reAuthPromise) {
16354
- reAuthPromise = this.authenticate(signerContext, serviceUrl, opts).then((result) => {
16355
- currentClient = result.appRegistryRpcClient;
16356
- }).finally(() => {
16357
- reAuthPromise = void 0;
16358
- });
16441
+ return createReauthenticatingClientFactory({
16442
+ authenticate: async () => {
16443
+ const { appRegistryRpcClient } = await this.authenticate(signerContext, serviceUrl, opts);
16444
+ return appRegistryRpcClient;
16359
16445
  }
16360
- return reAuthPromise;
16361
- };
16362
- return async () => {
16363
- if (!currentClient) {
16364
- await reAuthenticate();
16365
- }
16366
- if (!proxy) {
16367
- proxy = new Proxy({}, {
16368
- get(_target, prop) {
16369
- const client = currentClient;
16370
- const value = client[prop];
16371
- if (typeof value !== "function")
16372
- return value;
16373
- return async (...args) => {
16374
- try {
16375
- return await value.apply(client, args);
16376
- } catch (err) {
16377
- if (errorContains(err, Err.UNAUTHENTICATED)) {
16378
- await reAuthenticate();
16379
- const newClient = currentClient;
16380
- return await newClient[prop].apply(newClient, args);
16381
- }
16382
- throw err;
16383
- }
16384
- };
16385
- }
16386
- });
16387
- }
16388
- return proxy;
16389
- };
16446
+ });
16390
16447
  }
16391
16448
  };
16392
16449
 
@@ -19231,7 +19288,7 @@ var isURL = (payload) => payload instanceof URL;
19231
19288
 
19232
19289
  // ../../node_modules/.bun/superjson@2.2.6/node_modules/superjson/dist/pathstringifier.js
19233
19290
  var escapeKey = (key) => key.replace(/\\/g, "\\\\").replace(/\./g, "\\.");
19234
- var stringifyPath = (path5) => path5.map(String).map(escapeKey).join(".");
19291
+ var stringifyPath = (path6) => path6.map(String).map(escapeKey).join(".");
19235
19292
  var parsePath = (string, legacyPaths) => {
19236
19293
  const result = [];
19237
19294
  let segment = "";
@@ -19478,26 +19535,26 @@ var getNthKey = (value, n) => {
19478
19535
  }
19479
19536
  return keys2.next().value;
19480
19537
  };
19481
- function validatePath(path5) {
19482
- if (includes(path5, "__proto__")) {
19538
+ function validatePath(path6) {
19539
+ if (includes(path6, "__proto__")) {
19483
19540
  throw new Error("__proto__ is not allowed as a property");
19484
19541
  }
19485
- if (includes(path5, "prototype")) {
19542
+ if (includes(path6, "prototype")) {
19486
19543
  throw new Error("prototype is not allowed as a property");
19487
19544
  }
19488
- if (includes(path5, "constructor")) {
19545
+ if (includes(path6, "constructor")) {
19489
19546
  throw new Error("constructor is not allowed as a property");
19490
19547
  }
19491
19548
  }
19492
- var getDeep = (object, path5) => {
19493
- validatePath(path5);
19494
- for (let i2 = 0; i2 < path5.length; i2++) {
19495
- const key = path5[i2];
19549
+ var getDeep = (object, path6) => {
19550
+ validatePath(path6);
19551
+ for (let i2 = 0; i2 < path6.length; i2++) {
19552
+ const key = path6[i2];
19496
19553
  if (isSet2(object)) {
19497
19554
  object = getNthKey(object, +key);
19498
19555
  } else if (isMap2(object)) {
19499
19556
  const row = +key;
19500
- const type = +path5[++i2] === 0 ? "key" : "value";
19557
+ const type = +path6[++i2] === 0 ? "key" : "value";
19501
19558
  const keyOfRow = getNthKey(object, row);
19502
19559
  switch (type) {
19503
19560
  case "key":
@@ -19513,14 +19570,14 @@ var getDeep = (object, path5) => {
19513
19570
  }
19514
19571
  return object;
19515
19572
  };
19516
- var setDeep = (object, path5, mapper) => {
19517
- validatePath(path5);
19518
- if (path5.length === 0) {
19573
+ var setDeep = (object, path6, mapper) => {
19574
+ validatePath(path6);
19575
+ if (path6.length === 0) {
19519
19576
  return mapper(object);
19520
19577
  }
19521
19578
  let parent = object;
19522
- for (let i2 = 0; i2 < path5.length - 1; i2++) {
19523
- const key = path5[i2];
19579
+ for (let i2 = 0; i2 < path6.length - 1; i2++) {
19580
+ const key = path6[i2];
19524
19581
  if (isArray2(parent)) {
19525
19582
  const index = +key;
19526
19583
  parent = parent[index];
@@ -19530,12 +19587,12 @@ var setDeep = (object, path5, mapper) => {
19530
19587
  const row = +key;
19531
19588
  parent = getNthKey(parent, row);
19532
19589
  } else if (isMap2(parent)) {
19533
- const isEnd = i2 === path5.length - 2;
19590
+ const isEnd = i2 === path6.length - 2;
19534
19591
  if (isEnd) {
19535
19592
  break;
19536
19593
  }
19537
19594
  const row = +key;
19538
- const type = +path5[++i2] === 0 ? "key" : "value";
19595
+ const type = +path6[++i2] === 0 ? "key" : "value";
19539
19596
  const keyOfRow = getNthKey(parent, row);
19540
19597
  switch (type) {
19541
19598
  case "key":
@@ -19547,7 +19604,7 @@ var setDeep = (object, path5, mapper) => {
19547
19604
  }
19548
19605
  }
19549
19606
  }
19550
- const lastKey = path5[path5.length - 1];
19607
+ const lastKey = path6[path6.length - 1];
19551
19608
  if (isArray2(parent)) {
19552
19609
  parent[+lastKey] = mapper(parent[+lastKey]);
19553
19610
  } else if (isPlainObject(parent)) {
@@ -19562,7 +19619,7 @@ var setDeep = (object, path5, mapper) => {
19562
19619
  }
19563
19620
  }
19564
19621
  if (isMap2(parent)) {
19565
- const row = +path5[path5.length - 2];
19622
+ const row = +path6[path6.length - 2];
19566
19623
  const keyToRow = getNthKey(parent, row);
19567
19624
  const type = +lastKey === 0 ? "key" : "value";
19568
19625
  switch (type) {
@@ -19609,16 +19666,16 @@ function traverse(tree, walker2, version2, origin = []) {
19609
19666
  walker2(nodeValue, origin);
19610
19667
  }
19611
19668
  function applyValueAnnotations(plain, annotations, version2, superJson) {
19612
- traverse(annotations, (type, path5) => {
19613
- plain = setDeep(plain, path5, (v) => untransformValue(v, type, superJson));
19669
+ traverse(annotations, (type, path6) => {
19670
+ plain = setDeep(plain, path6, (v) => untransformValue(v, type, superJson));
19614
19671
  }, version2);
19615
19672
  return plain;
19616
19673
  }
19617
19674
  function applyReferentialEqualityAnnotations(plain, annotations, version2) {
19618
19675
  const legacyPaths = enableLegacyPaths(version2);
19619
- function apply(identicalPaths, path5) {
19620
- const object = getDeep(plain, parsePath(path5, legacyPaths));
19621
- identicalPaths.map((path6) => parsePath(path6, legacyPaths)).forEach((identicalObjectPath) => {
19676
+ function apply(identicalPaths, path6) {
19677
+ const object = getDeep(plain, parsePath(path6, legacyPaths));
19678
+ identicalPaths.map((path7) => parsePath(path7, legacyPaths)).forEach((identicalObjectPath) => {
19622
19679
  plain = setDeep(plain, identicalObjectPath, () => object);
19623
19680
  });
19624
19681
  }
@@ -19636,12 +19693,12 @@ function applyReferentialEqualityAnnotations(plain, annotations, version2) {
19636
19693
  return plain;
19637
19694
  }
19638
19695
  var isDeep = (object, superJson) => isPlainObject(object) || isArray2(object) || isMap2(object) || isSet2(object) || isError(object) || isInstanceOfRegisteredClass(object, superJson);
19639
- function addIdentity(object, path5, identities) {
19696
+ function addIdentity(object, path6, identities) {
19640
19697
  const existingSet = identities.get(object);
19641
19698
  if (existingSet) {
19642
- existingSet.push(path5);
19699
+ existingSet.push(path6);
19643
19700
  } else {
19644
- identities.set(object, [path5]);
19701
+ identities.set(object, [path6]);
19645
19702
  }
19646
19703
  }
19647
19704
  function generateReferentialEqualityAnnotations(identitites, dedupe) {
@@ -19652,7 +19709,7 @@ function generateReferentialEqualityAnnotations(identitites, dedupe) {
19652
19709
  return;
19653
19710
  }
19654
19711
  if (!dedupe) {
19655
- paths = paths.map((path5) => path5.map(String)).sort((a, b) => a.length - b.length);
19712
+ paths = paths.map((path6) => path6.map(String)).sort((a, b) => a.length - b.length);
19656
19713
  }
19657
19714
  const [representativePath, ...identicalPaths] = paths;
19658
19715
  if (representativePath.length === 0) {
@@ -19671,10 +19728,10 @@ function generateReferentialEqualityAnnotations(identitites, dedupe) {
19671
19728
  return isEmptyObject(result) ? void 0 : result;
19672
19729
  }
19673
19730
  }
19674
- var walker = (object, identities, superJson, dedupe, path5 = [], objectsInThisPath = [], seenObjects = /* @__PURE__ */ new Map()) => {
19731
+ var walker = (object, identities, superJson, dedupe, path6 = [], objectsInThisPath = [], seenObjects = /* @__PURE__ */ new Map()) => {
19675
19732
  const primitive = isPrimitive(object);
19676
19733
  if (!primitive) {
19677
- addIdentity(object, path5, identities);
19734
+ addIdentity(object, path6, identities);
19678
19735
  const seen = seenObjects.get(object);
19679
19736
  if (seen) {
19680
19737
  return dedupe ? {
@@ -19708,7 +19765,7 @@ var walker = (object, identities, superJson, dedupe, path5 = [], objectsInThisPa
19708
19765
  if (index === "__proto__" || index === "constructor" || index === "prototype") {
19709
19766
  throw new Error(`Detected property ${index}. This is a prototype pollution risk, please remove it from your object.`);
19710
19767
  }
19711
- const recursiveResult = walker(value, identities, superJson, dedupe, [...path5, index], [...objectsInThisPath, object], seenObjects);
19768
+ const recursiveResult = walker(value, identities, superJson, dedupe, [...path6, index], [...objectsInThisPath, object], seenObjects);
19712
19769
  transformedValue[index] = recursiveResult.transformedValue;
19713
19770
  if (isArray2(recursiveResult.annotations)) {
19714
19771
  innerAnnotations[escapeKey(index)] = recursiveResult.annotations;
@@ -20343,10 +20400,11 @@ function getSpaceReviewEventDataBin(binLogs, from) {
20343
20400
  var TownsService;
20344
20401
  (function(TownsService2) {
20345
20402
  TownsService2[TownsService2["Notifications"] = 0] = "Notifications";
20346
- TownsService2[TownsService2["AppRegistry"] = 1] = "AppRegistry";
20347
- TownsService2[TownsService2["StreamMetadata"] = 2] = "StreamMetadata";
20348
- TownsService2[TownsService2["Node"] = 3] = "Node";
20349
- TownsService2[TownsService2["Relayer"] = 4] = "Relayer";
20403
+ TownsService2[TownsService2["Contacts"] = 1] = "Contacts";
20404
+ TownsService2[TownsService2["AppRegistry"] = 2] = "AppRegistry";
20405
+ TownsService2[TownsService2["StreamMetadata"] = 3] = "StreamMetadata";
20406
+ TownsService2[TownsService2["Node"] = 4] = "Node";
20407
+ TownsService2[TownsService2["Relayer"] = 5] = "Relayer";
20350
20408
  })(TownsService || (TownsService = {}));
20351
20409
  var envKey2 = {
20352
20410
  BASE_SEPOLIA_RPC_URL: ["BASE_SEPOLIA_RPC_URL", "BASE_CHAIN_RPC_URL"],
@@ -20354,6 +20412,7 @@ var envKey2 = {
20354
20412
  RIVER_DEVNET_RPC_URL: ["RIVER_DEVNET_RPC_URL", "RIVER_CHAIN_RPC_URL"],
20355
20413
  RIVER_MAINNET_RPC_URL: ["RIVER_MAINNET_RPC_URL", "RIVER_CHAIN_RPC_URL"],
20356
20414
  NOTIFICATION_SERVICE_URL: ["NOTIFICATION_SERVICE_URL"],
20415
+ CONTACTS_SERVICE_URL: ["CONTACTS_SERVICE_URL"],
20357
20416
  STREAM_METADATA_URL: ["STREAM_METADATA_URL"],
20358
20417
  APP_REGISTRY_URL: ["APP_REGISTRY_URL"],
20359
20418
  RELAYER_URL: ["RELAYER_URL"]
@@ -20438,6 +20497,33 @@ function townsEnv(opts) {
20438
20497
  throw new Error(`No notification service url for environmentId ${environmentId}`);
20439
20498
  }
20440
20499
  };
20500
+ const getContactsServiceUrl = (inEnvironmentId) => {
20501
+ const environmentId = inEnvironmentId ?? getEnvironmentId();
20502
+ if (environmentId === web3.riverEnv) {
20503
+ const url = safeEnv(envKey2.CONTACTS_SERVICE_URL, opts);
20504
+ if (url) {
20505
+ return url;
20506
+ }
20507
+ }
20508
+ switch (environmentId) {
20509
+ case "local_dev":
20510
+ return "https://localhost:5170";
20511
+ case "alpha":
20512
+ return "https://river1.nodes.alpha.towns.com/";
20513
+ case "beta":
20514
+ return "https://river1.nodes.beta.towns.com/";
20515
+ case "delta":
20516
+ return "https://river1.nodes.delta.towns.com/";
20517
+ case "omega":
20518
+ return "https://river1.nodes.omega.towns.com/";
20519
+ case "stage":
20520
+ return "https://chat1.nodes.staging.towns.com";
20521
+ case "prod":
20522
+ return "https://chat1.nodes.prod.towns.com";
20523
+ default:
20524
+ throw new Error(`No contacts service url for environmentId ${environmentId}`);
20525
+ }
20526
+ };
20441
20527
  const getStreamMetadataUrl = (inEnvironmentId) => {
20442
20528
  const environmentId = inEnvironmentId ?? getEnvironmentId();
20443
20529
  if (environmentId === web3.riverEnv) {
@@ -20525,9 +20611,9 @@ function townsEnv(opts) {
20525
20611
  case "local_dev":
20526
20612
  return "http://127.0.0.1:8787";
20527
20613
  case "stage":
20528
- return "https://relayer-worker-stage.johnhntlabs.workers.dev";
20614
+ return "https://relayer-worker-stage.towns.com/";
20529
20615
  case "prod":
20530
- return "https://relayer-worker-prod.johnhntlabs.workers.dev";
20616
+ return "https://relayer-worker.towns.com/";
20531
20617
  default:
20532
20618
  throw new Error(`No relayer url for environmentId ${environmentId}`);
20533
20619
  }
@@ -20556,6 +20642,7 @@ function townsEnv(opts) {
20556
20642
  river: makeRiverChainConfig(environmentId),
20557
20643
  services: {
20558
20644
  notifications: { url: getNotificationServiceUrl(environmentId) },
20645
+ contacts: { url: getContactsServiceUrl(environmentId) },
20559
20646
  appRegistry: { url: getAppRegistryUrl(environmentId) },
20560
20647
  streamMetadata: { url: getStreamMetadataUrl(environmentId) },
20561
20648
  node: { url: getNodeUrl(environmentId) },
@@ -20583,6 +20670,7 @@ function townsEnv(opts) {
20583
20670
  makeBaseChainConfig,
20584
20671
  makeRiverChainConfig,
20585
20672
  getNotificationServiceUrl,
20673
+ getContactsServiceUrl,
20586
20674
  getAppRegistryUrl,
20587
20675
  getStreamMetadataUrl,
20588
20676
  getNodeUrl,
@@ -26471,44 +26559,32 @@ function makeNotificationRpcClient(dest, sessionToken, opts) {
26471
26559
 
26472
26560
  // ../sdk/dist/notificationService.js
26473
26561
  var NotificationService2 = class {
26474
- static async _authenticateCommon(userId, serviceUrl, opts, getSignature, extraFinishAuthParams) {
26475
- const authenticationRpcClient = makeAuthenticationRpcClient(serviceUrl, opts);
26476
- const startResponse = await authenticationRpcClient.startAuthentication({ userId });
26477
- check(startResponse.challenge.length >= 16, "challenge must be 16 bytes");
26478
- check(isDefined(startResponse.expiration), "expiration must be defined");
26479
- const hash = meganodeAuthHash(userId, startResponse.expiration.seconds, startResponse.challenge);
26480
- const signature = await getSignature(hash);
26481
- const finishResponse = await authenticationRpcClient.finishAuthentication({
26482
- userId,
26483
- challenge: startResponse.challenge,
26484
- signature,
26485
- ...extraFinishAuthParams
26562
+ static async authenticate(signerContext, serviceUrl, opts) {
26563
+ const { startResponse, finishResponse, rpcClient: notificationRpcClient } = await authenticateWithSignerContext({
26564
+ signerContext,
26565
+ serviceUrl,
26566
+ opts,
26567
+ makeRpcClient: makeNotificationRpcClient
26486
26568
  });
26487
- const notificationRpcClient = makeNotificationRpcClient(serviceUrl, finishResponse.sessionToken, opts);
26488
26569
  return {
26489
26570
  startResponse,
26490
26571
  finishResponse,
26491
26572
  notificationRpcClient
26492
26573
  };
26493
26574
  }
26494
- static async authenticate(signerContext, serviceUrl, opts) {
26495
- const userId = signerContext.creatorAddress;
26496
- return this._authenticateCommon(userId, serviceUrl, opts, async (hashSrc) => {
26497
- const hash = hashPersonalMessage(hashSrc);
26498
- return await riverSign(hash, signerContext.signerPrivateKey());
26499
- }, {
26500
- delegateSig: signerContext.delegateSig,
26501
- delegateExpiryEpochMs: signerContext.delegateExpiryEpochMs
26502
- });
26503
- }
26504
26575
  static async authenticateWithSigner(userId, signer, serviceUrl, opts) {
26505
- if (typeof userId === "string") {
26506
- userId = bin_fromHexString(userId);
26507
- }
26508
- return this._authenticateCommon(userId, serviceUrl, opts, async (hash) => {
26509
- const sigHex = await signer.signMessage(hash);
26510
- return bin_fromHexString(sigHex);
26511
- }, {});
26576
+ const { startResponse, finishResponse, rpcClient: notificationRpcClient } = await authenticateWithSigner({
26577
+ userId,
26578
+ signer,
26579
+ serviceUrl,
26580
+ opts,
26581
+ makeRpcClient: makeNotificationRpcClient
26582
+ });
26583
+ return {
26584
+ startResponse,
26585
+ finishResponse,
26586
+ notificationRpcClient
26587
+ };
26512
26588
  }
26513
26589
  };
26514
26590
 
@@ -28958,6 +29034,8 @@ var SyncedStreamsExtension = class {
28958
29034
  this.checkStartTicking();
28959
29035
  }
28960
29036
  async stop() {
29037
+ this.started = false;
29038
+ this.startSyncRequested = false;
28961
29039
  await this.stopTicking();
28962
29040
  }
28963
29041
  checkStartTicking() {
@@ -28984,7 +29062,9 @@ var SyncedStreamsExtension = class {
28984
29062
  this.inProgressTick = this.tick();
28985
29063
  this.inProgressTick.catch((e) => this.logError("ProcessTick Error", e)).finally(() => {
28986
29064
  this.timeoutId = void 0;
28987
- setTimeout(() => this.checkStartTicking(), 0);
29065
+ if (this.started) {
29066
+ setTimeout(() => this.checkStartTicking(), 0);
29067
+ }
28988
29068
  });
28989
29069
  }, 0);
28990
29070
  }
@@ -31228,6 +31308,9 @@ function ensureNoHexPrefix(value) {
31228
31308
  return value.startsWith("0x") ? value.slice(2) : value;
31229
31309
  }
31230
31310
 
31311
+ // ../sdk/dist/makeContactsRpcClient.js
31312
+ var logInfo5 = dlog("csb:rpc:info");
31313
+
31231
31314
  // ../sdk/dist/createApp.js
31232
31315
  var import_accounts3 = require("viem/accounts");
31233
31316
  var import_viem6 = require("viem");
@@ -31422,11 +31505,105 @@ var LocalhostWeb3Provider = class extends import_ethers8.ethers.providers.JsonRp
31422
31505
  // ../sdk/dist/unauthenticatedClient.js
31423
31506
  var import_debug3 = __toESM(require_src(), 1);
31424
31507
 
31425
- // src/modules/utils.ts
31508
+ // src/auth.ts
31509
+ var fs = __toESM(require("fs"));
31510
+ var os = __toESM(require("os"));
31511
+ var path = __toESM(require("path"));
31426
31512
  var import_protobuf22 = require("@bufbuild/protobuf");
31513
+ var AUTH_URLS = {
31514
+ local_dev: "http://localhost:3000/cli/auth",
31515
+ stage: "https://rodeo.staging.towns.com/cli/auth",
31516
+ prod: "https://rodeo.towns.com/cli/auth"
31517
+ };
31518
+ var AUTH_CONFIG_DIR = process.env.XDG_CONFIG_HOME && process.env.XDG_CONFIG_HOME.trim() ? path.join(process.env.XDG_CONFIG_HOME, "towns-agent") : path.join(os.homedir(), ".config", "towns-agent");
31519
+ var AUTH_CONFIG_FILE = path.join(AUTH_CONFIG_DIR, "auth.json");
31520
+ function asStringRecord(value) {
31521
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
31522
+ return void 0;
31523
+ }
31524
+ const record = {};
31525
+ for (const [key, nestedValue] of Object.entries(value)) {
31526
+ if (typeof nestedValue === "string") {
31527
+ record[key] = nestedValue;
31528
+ }
31529
+ }
31530
+ return record;
31531
+ }
31532
+ function readStoredAuth() {
31533
+ try {
31534
+ if (!fs.existsSync(AUTH_CONFIG_FILE)) {
31535
+ return {};
31536
+ }
31537
+ const raw = fs.readFileSync(AUTH_CONFIG_FILE, "utf-8");
31538
+ const parsed = JSON.parse(raw);
31539
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
31540
+ return {};
31541
+ }
31542
+ const bearerTokensByEnv = asStringRecord(
31543
+ parsed.bearerTokensByEnv
31544
+ );
31545
+ return bearerTokensByEnv ? { bearerTokensByEnv } : {};
31546
+ } catch {
31547
+ return {};
31548
+ }
31549
+ }
31550
+ function writeStoredAuth(auth) {
31551
+ fs.mkdirSync(AUTH_CONFIG_DIR, { recursive: true, mode: 448 });
31552
+ try {
31553
+ fs.chmodSync(AUTH_CONFIG_DIR, 448);
31554
+ } catch {
31555
+ }
31556
+ fs.writeFileSync(AUTH_CONFIG_FILE, `${JSON.stringify(auth, null, 2)}
31557
+ `, { mode: 384 });
31558
+ try {
31559
+ fs.chmodSync(AUTH_CONFIG_FILE, 384);
31560
+ } catch {
31561
+ }
31562
+ }
31563
+ function getAuthScope() {
31564
+ return process.env.RIVER_ENV?.trim() || "prod";
31565
+ }
31566
+ function getSavedBearerToken(scope) {
31567
+ return readStoredAuth().bearerTokensByEnv?.[scope];
31568
+ }
31569
+ function saveBearerToken(scope, token) {
31570
+ const stored = readStoredAuth();
31571
+ const bearerTokensByEnv = {
31572
+ ...stored.bearerTokensByEnv ?? {},
31573
+ [scope]: token
31574
+ };
31575
+ writeStoredAuth({ bearerTokensByEnv });
31576
+ }
31577
+ function clearSavedAuth() {
31578
+ try {
31579
+ if (fs.existsSync(AUTH_CONFIG_FILE)) {
31580
+ fs.unlinkSync(AUTH_CONFIG_FILE);
31581
+ }
31582
+ } catch {
31583
+ }
31584
+ }
31585
+ function getAuthConfigFile() {
31586
+ return AUTH_CONFIG_FILE;
31587
+ }
31588
+ function checkTokenExpiry(tokenHex) {
31589
+ try {
31590
+ const bytes = bin_fromHexString(tokenHex);
31591
+ const bearerToken = (0, import_protobuf22.fromBinary)(BearerTokenSchema, bytes);
31592
+ const expiryMs = Number(bearerToken.expiryEpochMs);
31593
+ if (expiryMs === 0) {
31594
+ return { valid: true, expiryMs: 0 };
31595
+ }
31596
+ if (expiryMs > Date.now()) {
31597
+ return { valid: true, expiryMs };
31598
+ }
31599
+ return { valid: false, expiryMs, reason: "expired" };
31600
+ } catch {
31601
+ return { valid: false, expiryMs: 0, reason: "malformed" };
31602
+ }
31603
+ }
31427
31604
 
31428
31605
  // package.json
31429
- var version = "7.1.0";
31606
+ var version = "7.2.0";
31430
31607
 
31431
31608
  // src/modules/utils.ts
31432
31609
  var getPackageManager = () => {
@@ -31493,32 +31670,32 @@ function runCommand(command, args, opts = { cwd: void 0, silent: false }) {
31493
31670
  });
31494
31671
  }
31495
31672
  function getTemplatesDir() {
31496
- const fromDist = path.resolve(__dirname, "..", "templates");
31497
- if (fs.existsSync(fromDist)) return fromDist;
31498
- const fromSrc = path.resolve(__dirname, "..", "..", "templates");
31499
- if (fs.existsSync(fromSrc)) return fromSrc;
31673
+ const fromDist = path2.resolve(__dirname, "..", "templates");
31674
+ if (fs2.existsSync(fromDist)) return fromDist;
31675
+ const fromSrc = path2.resolve(__dirname, "..", "..", "templates");
31676
+ if (fs2.existsSync(fromSrc)) return fromSrc;
31500
31677
  throw new Error("Templates directory not found");
31501
31678
  }
31502
31679
  function copyTemplate(templateName, targetDir) {
31503
31680
  console.log(import_picocolors.default.blue("Copying template..."));
31504
31681
  const templatesDir = getTemplatesDir();
31505
- const sourceDir = path.join(templatesDir, templateName);
31506
- if (!fs.existsSync(sourceDir)) {
31682
+ const sourceDir = path2.join(templatesDir, templateName);
31683
+ if (!fs2.existsSync(sourceDir)) {
31507
31684
  console.error(import_picocolors.default.red(`Template "${templateName}" not found at ${sourceDir}`));
31508
31685
  return false;
31509
31686
  }
31510
- fs.mkdirSync(targetDir, { recursive: true });
31511
- fs.cpSync(sourceDir, targetDir, {
31687
+ fs2.mkdirSync(targetDir, { recursive: true });
31688
+ fs2.cpSync(sourceDir, targetDir, {
31512
31689
  recursive: true,
31513
31690
  filter: (source) => {
31514
- const basename3 = path.basename(source);
31691
+ const basename3 = path2.basename(source);
31515
31692
  return basename3 !== "node_modules" && basename3 !== "dist";
31516
31693
  }
31517
31694
  });
31518
- const gitignoreSrc = path.join(targetDir, "_gitignore");
31519
- const gitignoreDest = path.join(targetDir, ".gitignore");
31520
- if (fs.existsSync(gitignoreSrc)) {
31521
- fs.renameSync(gitignoreSrc, gitignoreDest);
31695
+ const gitignoreSrc = path2.join(targetDir, "_gitignore");
31696
+ const gitignoreDest = path2.join(targetDir, ".gitignore");
31697
+ if (fs2.existsSync(gitignoreSrc)) {
31698
+ fs2.renameSync(gitignoreSrc, gitignoreDest);
31522
31699
  }
31523
31700
  console.log(import_picocolors.default.green("\u2713"), "Template copied successfully!");
31524
31701
  return true;
@@ -31526,12 +31703,12 @@ function copyTemplate(templateName, targetDir) {
31526
31703
  function copyAgentsMd(projectDir) {
31527
31704
  try {
31528
31705
  const templatesDir = getTemplatesDir();
31529
- const sourceFile = path.join(templatesDir, "quickstart", "AGENTS.md");
31530
- if (!fs.existsSync(sourceFile)) {
31706
+ const sourceFile = path2.join(templatesDir, "quickstart", "AGENTS.md");
31707
+ if (!fs2.existsSync(sourceFile)) {
31531
31708
  return false;
31532
31709
  }
31533
- const destFile = path.join(projectDir, "AGENTS.md");
31534
- fs.copyFileSync(sourceFile, destFile);
31710
+ const destFile = path2.join(projectDir, "AGENTS.md");
31711
+ fs2.copyFileSync(sourceFile, destFile);
31535
31712
  return true;
31536
31713
  } catch {
31537
31714
  return false;
@@ -31539,16 +31716,16 @@ function copyAgentsMd(projectDir) {
31539
31716
  }
31540
31717
  function applyReplacements(targetDir, replacements) {
31541
31718
  function processDirectory(dir) {
31542
- const entries = fs.readdirSync(dir, { withFileTypes: true });
31719
+ const entries = fs2.readdirSync(dir, { withFileTypes: true });
31543
31720
  for (const entry of entries) {
31544
- const fullPath = path.join(dir, entry.name);
31721
+ const fullPath = path2.join(dir, entry.name);
31545
31722
  if (entry.isDirectory()) {
31546
31723
  if (entry.name === "node_modules" || entry.name === "dist") {
31547
31724
  continue;
31548
31725
  }
31549
31726
  processDirectory(fullPath);
31550
31727
  } else {
31551
- let content = fs.readFileSync(fullPath, "utf-8");
31728
+ let content = fs2.readFileSync(fullPath, "utf-8");
31552
31729
  let modified = false;
31553
31730
  if (entry.name === "package.json" || entry.name.endsWith(".ts") || entry.name.endsWith(".js")) {
31554
31731
  for (const [search, replace] of replacements) {
@@ -31559,7 +31736,7 @@ function applyReplacements(targetDir, replacements) {
31559
31736
  }
31560
31737
  }
31561
31738
  if (modified) {
31562
- fs.writeFileSync(fullPath, content);
31739
+ fs2.writeFileSync(fullPath, content);
31563
31740
  }
31564
31741
  }
31565
31742
  }
@@ -31609,8 +31786,8 @@ async function installTownsSkills(projectDir) {
31609
31786
  { stdio: "pipe" }
31610
31787
  );
31611
31788
  if (cloneResult.status !== 0) {
31612
- if (fs.existsSync(tempDir)) {
31613
- fs.rmSync(tempDir, { recursive: true, force: true });
31789
+ if (fs2.existsSync(tempDir)) {
31790
+ fs2.rmSync(tempDir, { recursive: true, force: true });
31614
31791
  }
31615
31792
  return false;
31616
31793
  }
@@ -31619,7 +31796,7 @@ async function installTownsSkills(projectDir) {
31619
31796
  cwd: tempDir
31620
31797
  });
31621
31798
  if (sparseResult.status !== 0) {
31622
- fs.rmSync(tempDir, { recursive: true, force: true });
31799
+ fs2.rmSync(tempDir, { recursive: true, force: true });
31623
31800
  return false;
31624
31801
  }
31625
31802
  const checkoutResult = import_cross_spawn.default.sync("git", ["checkout"], {
@@ -31627,37 +31804,37 @@ async function installTownsSkills(projectDir) {
31627
31804
  cwd: tempDir
31628
31805
  });
31629
31806
  if (checkoutResult.status !== 0) {
31630
- fs.rmSync(tempDir, { recursive: true, force: true });
31807
+ fs2.rmSync(tempDir, { recursive: true, force: true });
31631
31808
  return false;
31632
31809
  }
31633
- const sourceSkillsDir = path.join(tempDir, "skills");
31634
- if (!fs.existsSync(sourceSkillsDir)) {
31635
- fs.rmSync(tempDir, { recursive: true, force: true });
31810
+ const sourceSkillsDir = path2.join(tempDir, "skills");
31811
+ if (!fs2.existsSync(sourceSkillsDir)) {
31812
+ fs2.rmSync(tempDir, { recursive: true, force: true });
31636
31813
  return false;
31637
31814
  }
31638
- const skillDirs = fs.readdirSync(sourceSkillsDir, { withFileTypes: true });
31815
+ const skillDirs = fs2.readdirSync(sourceSkillsDir, { withFileTypes: true });
31639
31816
  for (const skillFolder of AGENTS_SKILL_FOLDERS) {
31640
- const targetDir = path.join(projectDir, skillFolder);
31641
- if (!fs.existsSync(targetDir)) {
31642
- fs.mkdirSync(targetDir, { recursive: true });
31817
+ const targetDir = path2.join(projectDir, skillFolder);
31818
+ if (!fs2.existsSync(targetDir)) {
31819
+ fs2.mkdirSync(targetDir, { recursive: true });
31643
31820
  }
31644
31821
  for (const skillDir of skillDirs) {
31645
31822
  if (skillDir.isDirectory()) {
31646
- const sourcePath = path.join(sourceSkillsDir, skillDir.name);
31647
- const destPath = path.join(targetDir, skillDir.name);
31648
- fs.cpSync(sourcePath, destPath, { recursive: true });
31823
+ const sourcePath = path2.join(sourceSkillsDir, skillDir.name);
31824
+ const destPath = path2.join(targetDir, skillDir.name);
31825
+ fs2.cpSync(sourcePath, destPath, { recursive: true });
31649
31826
  }
31650
31827
  }
31651
31828
  }
31652
- fs.rmSync(tempDir, { recursive: true, force: true });
31829
+ fs2.rmSync(tempDir, { recursive: true, force: true });
31653
31830
  return true;
31654
31831
  } catch (error) {
31655
31832
  console.error(
31656
31833
  import_picocolors.default.red("Error installing skills:"),
31657
31834
  error instanceof Error ? error.message : error
31658
31835
  );
31659
- if (fs.existsSync(tempDir)) {
31660
- fs.rmSync(tempDir, { recursive: true, force: true });
31836
+ if (fs2.existsSync(tempDir)) {
31837
+ fs2.rmSync(tempDir, { recursive: true, force: true });
31661
31838
  }
31662
31839
  return false;
31663
31840
  }
@@ -31697,76 +31874,6 @@ function resolveRiverEnv() {
31697
31874
  const parsed = parseDotenv();
31698
31875
  return parsed?.RIVER_ENV ?? envFromAppPrivateData(parsed)?.env;
31699
31876
  }
31700
- var AUTH_CONFIG_DIR = process.env.XDG_CONFIG_HOME && process.env.XDG_CONFIG_HOME.trim() ? path.join(process.env.XDG_CONFIG_HOME, "towns-agent") : path.join(os.homedir(), ".config", "towns-agent");
31701
- var AUTH_CONFIG_FILE = path.join(AUTH_CONFIG_DIR, "auth.json");
31702
- function asStringRecord(value) {
31703
- if (!value || typeof value !== "object" || Array.isArray(value)) {
31704
- return void 0;
31705
- }
31706
- const record = {};
31707
- for (const [key, nestedValue] of Object.entries(value)) {
31708
- if (typeof nestedValue === "string") {
31709
- record[key] = nestedValue;
31710
- }
31711
- }
31712
- return record;
31713
- }
31714
- function readStoredAuth() {
31715
- try {
31716
- if (!fs.existsSync(AUTH_CONFIG_FILE)) {
31717
- return {};
31718
- }
31719
- const raw = fs.readFileSync(AUTH_CONFIG_FILE, "utf-8");
31720
- const parsed = JSON.parse(raw);
31721
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
31722
- return {};
31723
- }
31724
- const bearerTokensByEnv = asStringRecord(
31725
- parsed.bearerTokensByEnv
31726
- );
31727
- return bearerTokensByEnv ? { bearerTokensByEnv } : {};
31728
- } catch {
31729
- return {};
31730
- }
31731
- }
31732
- function writeStoredAuth(auth) {
31733
- fs.mkdirSync(AUTH_CONFIG_DIR, { recursive: true, mode: 448 });
31734
- try {
31735
- fs.chmodSync(AUTH_CONFIG_DIR, 448);
31736
- } catch {
31737
- }
31738
- fs.writeFileSync(AUTH_CONFIG_FILE, `${JSON.stringify(auth, null, 2)}
31739
- `, { mode: 384 });
31740
- try {
31741
- fs.chmodSync(AUTH_CONFIG_FILE, 384);
31742
- } catch {
31743
- }
31744
- }
31745
- function getAuthScope() {
31746
- return process.env.RIVER_ENV?.trim() || "prod";
31747
- }
31748
- function getSavedBearerToken(scope) {
31749
- return readStoredAuth().bearerTokensByEnv?.[scope];
31750
- }
31751
- function saveBearerToken(scope, token) {
31752
- const stored = readStoredAuth();
31753
- const bearerTokensByEnv = {
31754
- ...stored.bearerTokensByEnv ?? {},
31755
- [scope]: token
31756
- };
31757
- writeStoredAuth({ bearerTokensByEnv });
31758
- }
31759
- function clearSavedAuth() {
31760
- try {
31761
- if (fs.existsSync(AUTH_CONFIG_FILE)) {
31762
- fs.unlinkSync(AUTH_CONFIG_FILE);
31763
- }
31764
- } catch {
31765
- }
31766
- }
31767
- function getAuthConfigFile() {
31768
- return AUTH_CONFIG_FILE;
31769
- }
31770
31877
  function isRecord(value) {
31771
31878
  return value !== null && typeof value === "object" && !Array.isArray(value);
31772
31879
  }
@@ -31811,7 +31918,7 @@ async function promptAuth() {
31811
31918
  const { save } = await (0, import_prompts.default)({
31812
31919
  type: "confirm",
31813
31920
  name: "save",
31814
- message: `Save bearer token for ${authScope} to ${AUTH_CONFIG_FILE}?`,
31921
+ message: `Save bearer token for ${authScope} to ${getAuthConfigFile()}?`,
31815
31922
  initial: true
31816
31923
  });
31817
31924
  if (save) {
@@ -31878,22 +31985,6 @@ async function executeWithAuthRetry(initialAuth, operation) {
31878
31985
  return { result, auth: currentAuth };
31879
31986
  }
31880
31987
  }
31881
- function checkTokenExpiry(tokenHex) {
31882
- try {
31883
- const bytes = bin_fromHexString(tokenHex);
31884
- const bearerToken = (0, import_protobuf22.fromBinary)(BearerTokenSchema, bytes);
31885
- const expiryMs = Number(bearerToken.expiryEpochMs);
31886
- if (expiryMs === 0) {
31887
- return { valid: true, expiryMs: 0 };
31888
- }
31889
- if (expiryMs > Date.now()) {
31890
- return { valid: true, expiryMs };
31891
- }
31892
- return { valid: false, expiryMs, reason: "expired" };
31893
- } catch {
31894
- return { valid: false, expiryMs: 0, reason: "malformed" };
31895
- }
31896
- }
31897
31988
 
31898
31989
  // src/modules/init.ts
31899
31990
  var TEMPLATES = {
@@ -31916,8 +32007,8 @@ async function init(argv) {
31916
32007
  console.log((0, import_picocolors2.yellow)("Available templates:"), Object.keys(TEMPLATES).join(", "));
31917
32008
  process.exit(1);
31918
32009
  }
31919
- const targetDir = path2.resolve(process.cwd(), projectName);
31920
- if (fs2.existsSync(targetDir)) {
32010
+ const targetDir = path3.resolve(process.cwd(), projectName);
32011
+ if (fs3.existsSync(targetDir)) {
31921
32012
  const { overwrite } = await (0, import_prompts2.default)({
31922
32013
  type: "confirm",
31923
32014
  name: "overwrite",
@@ -31928,7 +32019,7 @@ async function init(argv) {
31928
32019
  console.log((0, import_picocolors2.yellow)("Operation cancelled"));
31929
32020
  process.exit(0);
31930
32021
  }
31931
- fs2.rmSync(targetDir, { recursive: true, force: true });
32022
+ fs3.rmSync(targetDir, { recursive: true, force: true });
31932
32023
  }
31933
32024
  console.log((0, import_picocolors2.cyan)(`Creating a new Towns Protocol agent in ${targetDir}`));
31934
32025
  if (template !== "quickstart") {
@@ -31948,9 +32039,9 @@ async function init(argv) {
31948
32039
  ["workspace:\\*", `^${latestVersion}`]
31949
32040
  ]);
31950
32041
  applyReplacements(targetDir, replacements);
31951
- const packageJsonPath = path2.join(targetDir, "package.json");
31952
- if (fs2.existsSync(packageJsonPath)) {
31953
- const content = fs2.readFileSync(packageJsonPath, "utf-8");
32042
+ const packageJsonPath = path3.join(targetDir, "package.json");
32043
+ if (fs3.existsSync(packageJsonPath)) {
32044
+ const content = fs3.readFileSync(packageJsonPath, "utf-8");
31954
32045
  const edits = [
31955
32046
  jsonc.modify(content, ["name"], projectName, {}),
31956
32047
  jsonc.modify(content, ["version"], "0.0.1", {})
@@ -31959,7 +32050,7 @@ async function init(argv) {
31959
32050
  const parsed = jsonc.parse(modifiedContent);
31960
32051
  delete parsed.private;
31961
32052
  modifiedContent = JSON.stringify(parsed, null, 2);
31962
- fs2.writeFileSync(packageJsonPath, modifiedContent);
32053
+ fs3.writeFileSync(packageJsonPath, modifiedContent);
31963
32054
  }
31964
32055
  console.log((0, import_picocolors2.cyan)("Installing Towns Agent Skills..."));
31965
32056
  try {
@@ -32654,6 +32745,22 @@ async function t(R, $, Y, Z) {
32654
32745
  return new Request(T, { headers: C });
32655
32746
  }
32656
32747
 
32748
+ // ../relayer-client/dist/httpAuth.js
32749
+ function getHttpAuthOptions(config) {
32750
+ const hasSigner = Boolean(config.authSigner);
32751
+ const hasToken = typeof config.authToken === "string" && config.authToken.trim().length > 0;
32752
+ const hasProvider = typeof config.authTokenProvider === "function";
32753
+ if (!hasSigner && !hasToken && !hasProvider) {
32754
+ return void 0;
32755
+ }
32756
+ return {
32757
+ signer: config.authSigner,
32758
+ signOptions: config.authSignOptions,
32759
+ authToken: config.authToken,
32760
+ authTokenProvider: config.authTokenProvider
32761
+ };
32762
+ }
32763
+
32657
32764
  // ../relayer-client/dist/transport.js
32658
32765
  var JsonRpcClientError = class extends Error {
32659
32766
  code;
@@ -32666,18 +32773,40 @@ var JsonRpcClientError = class extends Error {
32666
32773
  }
32667
32774
  };
32668
32775
  async function postJson(relayerUrl, body, options) {
32776
+ const authToken = await resolveBearerToken(options);
32777
+ const headers = new Headers({ "Content-Type": "application/json" });
32778
+ if (authToken) {
32779
+ headers.set("Authorization", `Bearer ${authToken}`);
32780
+ }
32669
32781
  const request = new Request(relayerUrl, {
32670
32782
  method: "POST",
32671
- headers: { "Content-Type": "application/json" },
32783
+ headers,
32672
32784
  body
32673
32785
  });
32674
32786
  const httpAuth = options?.httpAuth;
32675
- if (!httpAuth) {
32787
+ if (!httpAuth?.signer) {
32676
32788
  return fetch(request);
32677
32789
  }
32678
32790
  const signedRequest = await t(request, httpAuth.signer, httpAuth.signOptions);
32679
32791
  return fetch(signedRequest);
32680
32792
  }
32793
+ async function resolveBearerToken(options) {
32794
+ const provider = options?.httpAuth?.authTokenProvider;
32795
+ if (provider) {
32796
+ try {
32797
+ const resolved = await provider();
32798
+ const trimmed = resolved?.trim();
32799
+ return trimmed && trimmed.length > 0 ? trimmed : null;
32800
+ } catch (error) {
32801
+ throw new JsonRpcClientError(-32e3, "Failed to resolve auth token", {
32802
+ stage: "authTokenProvider",
32803
+ cause: error instanceof Error ? error.message : String(error)
32804
+ });
32805
+ }
32806
+ }
32807
+ const token = options?.httpAuth?.authToken?.trim();
32808
+ return token && token.length > 0 ? token : null;
32809
+ }
32681
32810
  function createJsonRpcTransport(relayerUrl, options) {
32682
32811
  let requestId = 0;
32683
32812
  return {
@@ -32728,24 +32857,16 @@ function createJsonRpcTransport(relayerUrl, options) {
32728
32857
  }
32729
32858
  };
32730
32859
  }
32731
-
32732
- // ../relayer-client/dist/httpAuth.js
32733
- function getHttpAuthOptions(config) {
32734
- if (!config.authSigner) {
32735
- return void 0;
32736
- }
32737
- return {
32738
- signer: config.authSigner,
32739
- signOptions: config.authSignOptions
32740
- };
32860
+ function createRelayerTransport(client) {
32861
+ return createJsonRpcTransport(client.relayerConfig.relayerUrl, {
32862
+ httpAuth: getHttpAuthOptions(client.relayerConfig)
32863
+ });
32741
32864
  }
32742
32865
 
32743
32866
  // ../relayer-client/dist/actions/checkHealth.js
32744
32867
  async function checkHealth(client) {
32745
32868
  try {
32746
- const transport = createJsonRpcTransport(client.relayerConfig.relayerUrl, {
32747
- httpAuth: getHttpAuthOptions(client.relayerConfig)
32748
- });
32869
+ const transport = createRelayerTransport(client);
32749
32870
  await transport.request("wallet_health");
32750
32871
  return {
32751
32872
  status: "ok",
@@ -32774,9 +32895,7 @@ async function checkHealth(client) {
32774
32895
  // ../relayer-client/dist/actions/getCapabilities.js
32775
32896
  async function getCapabilities(client, params) {
32776
32897
  try {
32777
- const transport = createJsonRpcTransport(client.relayerConfig.relayerUrl, {
32778
- httpAuth: getHttpAuthOptions(client.relayerConfig)
32779
- });
32898
+ const transport = createRelayerTransport(client);
32780
32899
  const rpcParams = params?.chainIds && params.chainIds.length > 0 ? {
32781
32900
  ...params,
32782
32901
  chains: params.chainIds.map((id) => `0x${id.toString(16)}`)
@@ -32842,9 +32961,7 @@ var getNonceAbi = [
32842
32961
  }
32843
32962
  ];
32844
32963
  async function prepareCalls(client, params) {
32845
- const transport = createJsonRpcTransport(client.relayerConfig.relayerUrl, {
32846
- httpAuth: getHttpAuthOptions(client.relayerConfig)
32847
- });
32964
+ const transport = createRelayerTransport(client);
32848
32965
  const chainId = params.chainId ?? client.relayerConfig.chainId ?? client.chain?.id ?? 1;
32849
32966
  let resolvedNonce = params.nonce;
32850
32967
  if (resolvedNonce === void 0 && params.noncePolicy !== "draft") {
@@ -32922,9 +33039,7 @@ async function prepareCalls(client, params) {
32922
33039
 
32923
33040
  // ../relayer-client/dist/actions/sendPreparedCalls.js
32924
33041
  async function sendPreparedCalls(client, params) {
32925
- const transport = createJsonRpcTransport(client.relayerConfig.relayerUrl, {
32926
- httpAuth: getHttpAuthOptions(client.relayerConfig)
32927
- });
33042
+ const transport = createRelayerTransport(client);
32928
33043
  const rpcParams = {
32929
33044
  context: params.context,
32930
33045
  signature: params.signature
@@ -32957,9 +33072,7 @@ function statusCodeToString(code) {
32957
33072
  }
32958
33073
  async function getCallsStatus(client, params) {
32959
33074
  try {
32960
- const transport = createJsonRpcTransport(client.relayerConfig.relayerUrl, {
32961
- httpAuth: getHttpAuthOptions(client.relayerConfig)
32962
- });
33075
+ const transport = createRelayerTransport(client);
32963
33076
  const chainId = params.chainId ?? client.relayerConfig.chainId ?? client.chain?.id;
32964
33077
  const rpcParams = chainId !== void 0 ? {
32965
33078
  id: params.id,
@@ -32989,6 +33102,33 @@ async function getCallsStatus(client, params) {
32989
33102
  }
32990
33103
  }
32991
33104
 
33105
+ // ../relayer-client/dist/actions/getCallsHistory.js
33106
+ async function getCallsHistory(client, params) {
33107
+ try {
33108
+ const transport = createRelayerTransport(client);
33109
+ const rpcParams = { address: params.address };
33110
+ if (params.chainIds && params.chainIds.length > 0) {
33111
+ rpcParams.chainIds = params.chainIds.map((id) => `0x${id.toString(16)}`);
33112
+ }
33113
+ if (params.limit !== void 0)
33114
+ rpcParams.limit = params.limit;
33115
+ if (params.offset !== void 0)
33116
+ rpcParams.offset = params.offset;
33117
+ const result = await transport.request("wallet_getCallsHistory", rpcParams);
33118
+ const items = result.items.map((item) => ({
33119
+ id: item.id,
33120
+ chainId: Number.parseInt(item.chain_id, 16),
33121
+ createdAt: item.created_at
33122
+ }));
33123
+ return { success: true, items, total: result.total };
33124
+ } catch (error) {
33125
+ return {
33126
+ success: false,
33127
+ error: error instanceof Error ? error.message : "Unknown error"
33128
+ };
33129
+ }
33130
+ }
33131
+
32992
33132
  // ../relayer-client/dist/actions/upgradeAccount.js
32993
33133
  var import_accounts5 = require("viem/accounts");
32994
33134
  var DELEGATION_CODE_PREFIX = "0xef0100";
@@ -33050,9 +33190,7 @@ async function upgradeAccount(client, params) {
33050
33190
  } else {
33051
33191
  throw new Error("Must provide either signerKey or walletClient");
33052
33192
  }
33053
- const transport = createJsonRpcTransport(client.relayerConfig.relayerUrl, {
33054
- httpAuth: getHttpAuthOptions(client.relayerConfig)
33055
- });
33193
+ const transport = createRelayerTransport(client);
33056
33194
  const chainId = params.chainId ?? client.relayerConfig.chainId ?? client.chain?.id;
33057
33195
  const prepared = await transport.request("wallet_prepareUpgradeAccount", {
33058
33196
  address: params.accountAddress,
@@ -33120,9 +33258,7 @@ async function upgradeAccount(client, params) {
33120
33258
 
33121
33259
  // ../relayer-client/dist/actions/getKeys.js
33122
33260
  async function getKeys2(client, params) {
33123
- const transport = createJsonRpcTransport(client.relayerConfig.relayerUrl, {
33124
- httpAuth: getHttpAuthOptions(client.relayerConfig)
33125
- });
33261
+ const transport = createRelayerTransport(client);
33126
33262
  const rpcParams = {
33127
33263
  address: params.address
33128
33264
  };
@@ -33135,9 +33271,7 @@ async function getKeys2(client, params) {
33135
33271
 
33136
33272
  // ../relayer-client/dist/actions/verifySignature.js
33137
33273
  async function verifySignature(client, params) {
33138
- const transport = createJsonRpcTransport(client.relayerConfig.relayerUrl, {
33139
- httpAuth: getHttpAuthOptions(client.relayerConfig)
33140
- });
33274
+ const transport = createRelayerTransport(client);
33141
33275
  const chainId = params.chainId ?? client.relayerConfig.chainId ?? client.chain?.id ?? 1;
33142
33276
  const hexChainId = `0x${chainId.toString(16)}`;
33143
33277
  const result = await transport.request("wallet_verifySignature", {
@@ -33168,6 +33302,7 @@ function relayerActions(config) {
33168
33302
  prepareCalls: (params) => prepareCalls(relayerClient, params),
33169
33303
  sendPreparedCalls: (params) => sendPreparedCalls(relayerClient, params),
33170
33304
  getCallsStatus: (params) => getCallsStatus(relayerClient, params),
33305
+ getCallsHistory: (params) => getCallsHistory(relayerClient, params),
33171
33306
  upgradeAccount: (params) => upgradeAccount(relayerClient, params),
33172
33307
  getKeys: (params) => getKeys2(relayerClient, params),
33173
33308
  verifySignature: (params) => verifySignature(relayerClient, params)
@@ -33447,8 +33582,8 @@ function getAddressesWithFallback(context, chainId, opts) {
33447
33582
  }
33448
33583
 
33449
33584
  // src/modules/image.ts
33450
- var fs4 = __toESM(require("fs"));
33451
- var path4 = __toESM(require("path"));
33585
+ var fs5 = __toESM(require("fs"));
33586
+ var path5 = __toESM(require("path"));
33452
33587
  var import_protobuf23 = require("@bufbuild/protobuf");
33453
33588
  var import_image_size = __toESM(require("image-size"));
33454
33589
 
@@ -35845,18 +35980,18 @@ var supportedMimeTypes = new Set(mimeTypes);
35845
35980
  // src/modules/image.ts
35846
35981
  var CHUNK_SIZE = 12e5;
35847
35982
  async function uploadProfileImage(imagePath, ownerSignerContext, botUserId, townsConfig) {
35848
- const resolvedPath = path4.resolve(imagePath);
35849
- if (!fs4.existsSync(resolvedPath)) {
35983
+ const resolvedPath = path5.resolve(imagePath);
35984
+ if (!fs5.existsSync(resolvedPath)) {
35850
35985
  throw new Error(`Image file not found: ${resolvedPath}`);
35851
35986
  }
35852
- const data = new Uint8Array(fs4.readFileSync(resolvedPath));
35987
+ const data = new Uint8Array(fs5.readFileSync(resolvedPath));
35853
35988
  const fileType = await fileTypeFromBuffer(data);
35854
35989
  if (!fileType || !fileType.mime.startsWith("image/") || fileType.mime === "image/svg+xml") {
35855
35990
  const detected = fileType?.mime ?? "unknown";
35856
35991
  throw new Error(`Unsupported image format: ${detected}`);
35857
35992
  }
35858
35993
  const mimeType = fileType.mime;
35859
- const filename = path4.basename(resolvedPath);
35994
+ const filename = path5.basename(resolvedPath);
35860
35995
  const dimensions = (0, import_image_size.default)(data);
35861
35996
  const width = dimensions.width || 0;
35862
35997
  const height = dimensions.height || 0;
@@ -36692,98 +36827,38 @@ async function admin(argv) {
36692
36827
  console.error((0, import_picocolors10.red)(`App not found: ${appAddress}`));
36693
36828
  process.exit(1);
36694
36829
  }
36695
- printState(
36696
- "Current app state",
36697
- appAddress,
36698
- current.isPromoted,
36699
- current.isVerified,
36700
- current.metadata
36701
- );
36702
- const promotedSelection = await promptPromotedAction(current.isPromoted);
36703
- if (promotedSelection === void 0) {
36704
- process.exit(1);
36705
- }
36706
- const verifiedSelection = await promptVerifiedAction(current.isVerified);
36707
- if (verifiedSelection === void 0) {
36708
- process.exit(1);
36709
- }
36710
- let promotedUpdated = false;
36711
- let verifiedUpdated = false;
36830
+ printState("Current app state", appAddress, current.metadata);
36712
36831
  const metadataPatch = await promptMetadataPatch(current.metadata);
36713
36832
  if (metadataPatch === void 0) {
36714
36833
  process.exit(1);
36715
36834
  }
36716
36835
  let metadataUpdated = false;
36717
- const promotedValue = promotedSelection === "keep" ? void 0 : promotedSelection;
36718
- const verifiedValue = verifiedSelection === "keep" ? void 0 : verifiedSelection;
36719
- const shouldUpdatePromoted = promotedValue !== void 0;
36720
- const shouldUpdateVerified = verifiedValue !== void 0;
36721
36836
  const shouldUpdateMetadata = Object.keys(metadataPatch).length > 0;
36722
- if (shouldUpdatePromoted || shouldUpdateVerified || shouldUpdateMetadata) {
36837
+ if (shouldUpdateMetadata) {
36723
36838
  const { result: operationResult } = await executeWithAuthRetry(auth, async (activeAuth) => {
36724
36839
  const signerContext = await makeSignerContextFromAuth(activeAuth);
36725
36840
  const { appRegistryRpcClient } = await AppRegistryService2.authenticate(
36726
36841
  signerContext,
36727
36842
  appRegistryUrl
36728
36843
  );
36729
- let didUpdatePromoted = false;
36730
- let updatedPromotedValue;
36731
- if (promotedValue !== void 0) {
36732
- await appRegistryRpcClient.setAppPromotedStatus({
36733
- appId,
36734
- promoted: promotedValue
36735
- });
36736
- didUpdatePromoted = true;
36737
- updatedPromotedValue = promotedValue;
36738
- }
36739
- let didUpdateVerified = false;
36740
- let updatedVerifiedValue;
36741
- if (verifiedValue !== void 0) {
36742
- await appRegistryRpcClient.setAppVerifiedStatus({
36743
- appId,
36744
- verified: verifiedValue
36745
- });
36746
- didUpdateVerified = true;
36747
- updatedVerifiedValue = verifiedValue;
36748
- }
36749
36844
  let didUpdateMetadata = false;
36750
36845
  let updatedMask = [];
36751
- if (shouldUpdateMetadata) {
36752
- const { updateMask, metadata: metadataUpdate } = buildMetadataUpdatePayload(metadataPatch);
36753
- if (updateMask.length > 0) {
36754
- await appRegistryRpcClient.updateAppMetadata({
36755
- appId,
36756
- updateMask,
36757
- metadata: metadataUpdate
36758
- });
36759
- didUpdateMetadata = true;
36760
- updatedMask = updateMask;
36761
- }
36846
+ const { updateMask, metadata: metadataUpdate } = buildMetadataUpdatePayload(metadataPatch);
36847
+ if (updateMask.length > 0) {
36848
+ await appRegistryRpcClient.updateAppMetadata({
36849
+ appId,
36850
+ updateMask,
36851
+ metadata: metadataUpdate
36852
+ });
36853
+ didUpdateMetadata = true;
36854
+ updatedMask = updateMask;
36762
36855
  }
36763
36856
  return {
36764
- didUpdatePromoted,
36765
- didUpdateVerified,
36766
36857
  didUpdateMetadata,
36767
- updatedMask,
36768
- updatedPromotedValue,
36769
- updatedVerifiedValue
36858
+ updatedMask
36770
36859
  };
36771
36860
  });
36772
- promotedUpdated = operationResult.didUpdatePromoted;
36773
- verifiedUpdated = operationResult.didUpdateVerified;
36774
36861
  metadataUpdated = operationResult.didUpdateMetadata;
36775
- if (promotedUpdated) {
36776
- console.log(
36777
- (0, import_picocolors10.green)("\u2713"),
36778
- `Set promoted status to ${operationResult.updatedPromotedValue ? "true" : "false"}`
36779
- );
36780
- }
36781
- if (verifiedUpdated) {
36782
- console.log(
36783
- (0, import_picocolors10.green)("\u2713"),
36784
- `Set verified status to ${operationResult.updatedVerifiedValue ? "true" : "false"}`
36785
- );
36786
- }
36787
36862
  if (metadataUpdated) {
36788
36863
  console.log(
36789
36864
  (0, import_picocolors10.green)("\u2713"),
@@ -36791,19 +36866,13 @@ async function admin(argv) {
36791
36866
  );
36792
36867
  }
36793
36868
  }
36794
- if (!promotedUpdated && !verifiedUpdated && !metadataUpdated) {
36869
+ if (!metadataUpdated) {
36795
36870
  console.log((0, import_picocolors10.yellow)("No changes applied."));
36796
36871
  process.exit(0);
36797
36872
  }
36798
36873
  const updated = await fetchCurrentState(publicClient, appId);
36799
36874
  if (updated) {
36800
- printState(
36801
- "Updated app state",
36802
- appAddress,
36803
- updated.isPromoted,
36804
- updated.isVerified,
36805
- updated.metadata
36806
- );
36875
+ printState("Updated app state", appAddress, updated.metadata);
36807
36876
  }
36808
36877
  process.exit(0);
36809
36878
  }
@@ -36831,8 +36900,6 @@ async function fetchCurrentState(publicClient, appId) {
36831
36900
  }
36832
36901
  const metadata2 = app.metadata;
36833
36902
  return {
36834
- isPromoted: app.isPromoted,
36835
- isVerified: app.isVerified,
36836
36903
  metadata: {
36837
36904
  username: metadata2?.username ?? "",
36838
36905
  displayName: metadata2?.displayName ?? "",
@@ -36843,52 +36910,16 @@ async function fetchCurrentState(publicClient, appId) {
36843
36910
  }
36844
36911
  };
36845
36912
  }
36846
- function printState(title, appAddress, isPromoted, isVerified, metadata2) {
36913
+ function printState(title, appAddress, metadata2) {
36847
36914
  console.log();
36848
36915
  console.log((0, import_picocolors10.green)(title));
36849
36916
  console.log(` ${(0, import_picocolors10.dim)("App address".padEnd(14))} ${appAddress}`);
36850
- console.log(` ${(0, import_picocolors10.dim)("Promoted".padEnd(14))} ${isPromoted ? (0, import_picocolors10.green)("true") : (0, import_picocolors10.yellow)("false")}`);
36851
- console.log(` ${(0, import_picocolors10.dim)("Verified".padEnd(14))} ${isVerified ? (0, import_picocolors10.green)("true") : (0, import_picocolors10.yellow)("false")}`);
36852
36917
  for (const field of FIELD_DEFS2) {
36853
36918
  const value = metadata2[field.flag] ?? "";
36854
36919
  console.log(` ${(0, import_picocolors10.dim)(field.prompt.padEnd(14))} ${value || (0, import_picocolors10.dim)("\u2014")}`);
36855
36920
  }
36856
36921
  console.log();
36857
36922
  }
36858
- async function promptPromotedAction(currentPromoted) {
36859
- const { value } = await (0, import_prompts6.default)({
36860
- type: "select",
36861
- name: "value",
36862
- message: "Promoted status update",
36863
- choices: [
36864
- {
36865
- title: `Keep current (${currentPromoted ? "true" : "false"})`,
36866
- value: "keep"
36867
- },
36868
- { title: "Set promoted = true", value: true },
36869
- { title: "Set promoted = false", value: false }
36870
- ],
36871
- initial: 0
36872
- });
36873
- return value;
36874
- }
36875
- async function promptVerifiedAction(currentVerified) {
36876
- const { value } = await (0, import_prompts6.default)({
36877
- type: "select",
36878
- name: "value",
36879
- message: "Verified status update",
36880
- choices: [
36881
- {
36882
- title: `Keep current (${currentVerified ? "true" : "false"})`,
36883
- value: "keep"
36884
- },
36885
- { title: "Set verified = true", value: true },
36886
- { title: "Set verified = false", value: false }
36887
- ],
36888
- initial: 0
36889
- });
36890
- return value;
36891
- }
36892
36923
  async function promptMetadataPatch(current) {
36893
36924
  const { mode } = await (0, import_prompts6.default)({
36894
36925
  type: "select",
@@ -37067,11 +37098,6 @@ function stripWrappingQuotes(value) {
37067
37098
  // src/modules/login.ts
37068
37099
  var import_prompts7 = __toESM(require("prompts"));
37069
37100
  var import_picocolors11 = require("picocolors");
37070
- var AUTH_URLS = {
37071
- local_dev: "http://localhost:3000/cli/auth",
37072
- stage: "https://rodeo.staging.towns.com/cli/auth",
37073
- prod: "https://rodeo.towns.com/cli/auth"
37074
- };
37075
37101
  async function login(argv) {
37076
37102
  if (argv.env) {
37077
37103
  process.env.RIVER_ENV = argv.env;
@@ -37416,7 +37442,7 @@ ${(0, import_picocolors13.yellow)("Commands:")}
37416
37442
  ${(0, import_picocolors13.green)("setup")} [appAddress] Register webhook and notification settings
37417
37443
  ${(0, import_picocolors13.green)("setup view")} [appAddress] View current webhook URL and notification settings
37418
37444
  ${(0, import_picocolors13.green)("metadata")} <view|update> [appAddress] View or update app metadata
37419
- ${(0, import_picocolors13.green)("admin")} [appAddress] Admin flow for app promoted/verified status and metadata
37445
+ ${(0, import_picocolors13.green)("admin")} [appAddress] Admin flow for app metadata updates
37420
37446
  ${(0, import_picocolors13.green)("rotate-secret")} [appAddress] Rotate JWT secret and output new JWT_SECRET
37421
37447
  ${(0, import_picocolors13.green)("update")} Update @towns-labs dependencies and skills
37422
37448
  ${(0, import_picocolors13.green)("install-skill")} Install Towns Agent Skills to current project