@githolon/dsl 0.105.12 → 0.105.14

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.
@@ -5341,7 +5341,7 @@ function writeTypeOfScalar(type) {
5341
5341
  }
5342
5342
 
5343
5343
  // ../cloud/web-client/src/_adapter/proto/nomos/kernel/v1/kernel_pb.js
5344
- var file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEimAMKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEiwKBHRlc3QYECABKAsyHC5ub21vcy5rZXJuZWwudjEuVGVzdFJlcXVlc3RIAEILCglvcGVyYXRpb24iywMKDENhbGxSZXNwb25zZRIYChBwcm90b2NvbF92ZXJzaW9uGAEgASgNEhIKCnJlcXVlc3RfaWQYAiABKAkSKwoHZmFpbHVyZRgKIAEoCzIYLm5vbW9zLmtlcm5lbC52MS5GYWlsdXJlSAASLQoEb3BlbhgLIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5PcGVuUmVzcG9uc2VIABIvCgVvZmZlchgMIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlSAASLwoFcXVlcnkYDSABKAsyHi5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXNwb25zZUgAEjEKBm91dGJveBgOIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5PdXRib3hSZXNwb25zZUgAEi0KBHN5bmMYDyABKAsyHS5ub21vcy5rZXJuZWwudjEuU3luY1Jlc3BvbnNlSAASMwoHY3VzdG9keRgQIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVzcG9uc2VIABItCgR0ZXN0GBEgASgLMh0ubm9tb3Mua2VybmVsLnYxLlRlc3RSZXNwb25zZUgAQgkKB291dGNvbWUiVwoHRmFpbHVyZRIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSLQoHZGV0YWlscxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCI8CgxPcGVuUmVzcG9uc2USLAoGcmVzdWx0GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IsMCCg1PZmZlclJlc3BvbnNlEjIKCGFkbWl0dGVkGAEgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyQWRtaXR0ZWRIABIwCgdyZWZ1c2VkGAIgASgLMh0ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVmdXNlZEgAEjsKDWRlYWRfbGV0dGVyZWQYAyABKAsyIi5ub21vcy5rZXJuZWwudjEuT2ZmZXJEZWFkTGV0dGVyZWRIABI4CgtxdWFyYW50aW5lZBgEIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5PZmZlclF1YXJhbnRpbmVkSAASSgoVYmxvY2tlZF9vbl9kZXBlbmRlbmN5GAUgASgLMikubm9tb3Mua2VybmVsLnYxLk9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeUgAQgkKB291dGNvbWUiPQoNT2ZmZXJBZG1pdHRlZBIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QilgEKDE9mZmVyUmVmdXNlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEi8KB3JlZnVzYWwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbBIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQiegoRT2ZmZXJEZWFkTGV0dGVyZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIq4BChBPZmZlclF1YXJhbnRpbmVkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESGQoRYXV0aG9yZWRfbGF3X2hhc2gYAiABKAkSGAoQY3VycmVudF9sYXdfaGFzaBgDIAEoCRIOCgZyZWFzb24YBCABKAkSMQoLZGlhZ25vc3RpY3MYBSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIoEBChhPZmZlckJsb2NrZWRPbkRlcGVuZGVuY3kSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZkZXRhaWwYAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIoEBCg1LZXJuZWxSZWZ1c2FsEjAKBGNvZGUYASABKA4yIi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbENvZGUSDwoHbWVzc2FnZRgCIAEoCRItCgdkZXRhaWxzGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Iu8CCg1RdWVyeVJlc3BvbnNlEiwKBXZhbHVlGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWVIABJBChBhcHBsaWNhdGlvbl9qc29uGAIgASgLMiUubm9tb3Mua2VybmVsLnYxLkFwcGxpY2F0aW9uSnNvblZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEkkKGHZlcmlmeV9jaGFpbl9kaWFnbm9zdGljcxgUIAEoCzInLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkRpYWdub3N0aWNzQggKBnJlc3VsdCLnAQoTVmVyaWZ5Q2hhaW5TdGVwU3BhbhINCgVpbmRleBgBIAEoBBISCgpjb21taXRfb2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEAoIdG90YWxfdXMYBSABKAQSNgoGcGhhc2VzGAYgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxJACg5lbmdpbmVfdGltaW5ncxgHIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZyKYAgoVVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEh4KFnJ1bnRpbWVfbGF3X3JlZnJlc2hfdXMYASABKAQSEwoLbWFuaWZlc3RfdXMYAiABKAQSGQoRbGF3X3Jlc29sdXRpb25fdXMYAyABKAQSHQoVbWFuYWdlZF90cmFuc2l0aW9uX3VzGAQgASgEEhQKDHByaW5jaXBhbF91cxgFIAEoBBIUCgxldm9sdXRpb25fdXMYBiABKAQSGgoSY29sb2NhdGVkX3JlYWRzX3VzGAcgASgEEiEKGXR5cGVkX2luc3RhbGxfdmVyaWZpZXJfdXMYCCABKAQSFAoMYWRtaXNzaW9uX3VzGAkgASgEEg8KB2ZvbGRfdXMYCiABKAQi2gUKFlZlcmlmeUNoYWluRGlhZ25vc3RpY3MSLgoEd2FsaxgBIAEoDjIgLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbldhbGsSEAoIdG90YWxfdXMYAiABKAQSGwoTcmVmZXJlbmNlX2xvb2t1cF91cxgDIAEoBBIaChJyZXBvc2l0b3J5X29wZW5fdXMYBCABKAQSFQoNY2hhaW5fcmVhZF91cxgFIAEoBBIWCg5lbmdpbmVfaW5pdF91cxgGIAEoBBIYChB0aW1lbGluZV9yZWFkX3VzGAcgASgEEhgKEGxhd19oeWRyYXRpb25fdXMYCCABKAQSGwoTcmVjb3ZlcnlfcHJlc2Nhbl91cxgJIAEoBBIYChBmb2xkX2Zyb250aWVyX3VzGAogASgEEjMKBXN0ZXBzGAsgAygLMiQubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFNwYW4SQAoOZW5naW5lX3RpbWluZ3MYDCADKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSTQoVbGF3X2h5ZHJhdGlvbl90aW1pbmdzGA0gAygLMi4ubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluTGF3SHlkcmF0aW9uVGltaW5nEhkKEWxhd19jbG9zdXJlX2NvdW50GA4gASgEEh4KFmxhd19jbG9zdXJlX2NhY2hlX2hpdHMYDyABKAQSIAoYbGF3X2Nsb3N1cmVfY2FjaGVfbWlzc2VzGBAgASgEEhIKCnN0ZXBfY291bnQYESABKAQSFQoNc3RlcF90b3RhbF91cxgSIAEoBBJBChFzdGVwX3BoYXNlX3RvdGFscxgTIAEoCzImLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBQaGFzZXMSGgoSb21pdHRlZF9zdGVwX2NvdW50GBQgASgEIjoKF1ZlcmlmeUNoYWluRW5naW5lVGltaW5nEg0KBXBoYXNlGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEIkAKHVZlcmlmeUNoYWluTGF3SHlkcmF0aW9uVGltaW5nEg0KBXBoYXNlGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEIiQKFEFwcGxpY2F0aW9uSnNvblZhbHVlEgwKBHV0ZjgYASABKAwinwIKDU91dGJvdW5kT2ZmZXISCgoCaWQYASABKAkSEwoLZGVzdGluYXRpb24YAiABKAkSFAoMc2VhbGVkX29mZmVyGAMgASgMEhQKDGNvbnRlbnRfdHlwZRgEIAEoCRIYChBzb3VyY2Vfd29ya3NwYWNlGAUgASgJEhQKDGN1c3RvZHlfaGVhZBgGIAEoCRIXCg9jYXVzZWRfYnlfb2ZmZXIYByABKAkSGwoTc2NoZWR1bGVkX2F0X21pbGxpcxgIIAEoBBIaChJkZWFkbGluZV9hdF9taWxsaXMYCSABKAQSFAoMY3VzdG9keV9wYXRoGAogASgJEhMKC2N1c3RvZHlfb2lkGAsgASgJEhQKDGRlbGl2ZXJ5X3JlZhgMIAEoCSJ4Cg5PdXRib3hSZXNwb25zZRIuCgZvZmZlcnMYASADKAsyHi5ub21vcy5rZXJuZWwudjEuT3V0Ym91bmRPZmZlchIfChJuZXh0X2R1ZV9hdF9taWxsaXMYAiABKARIAIgBAUIVChNfbmV4dF9kdWVfYXRfbWlsbGlzIjwKDFN5bmNSZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiQgoPV29ya3NwYWNlVGFyZ2V0EgwKBHJlcG8YASABKAkSEQoJd29ya3NwYWNlGAIgASgJEg4KBmJyYW5jaBgDIAEoCSJOCgtPcGVuUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Eg0KBXNwYW5zGAIgASgIImEKDURpcmVjdGl2ZUNhbGwSDgoGZG9tYWluGAEgASgJEhEKCWRpcmVjdGl2ZRgCIAEoCRItCgdwYXlsb2FkGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IsACChBBdXRob3JpbmdPcHRpb25zEg0KBWFjdG9yGAEgASgJEhIKCmF1dGhfdG9rZW4YAiABKAwSFQoNYXV0aG9yX3NlY3JldBgDIAEoDBIdChB2YWxpZF9mcm9tX2Vwb2NoGAQgASgESACIAQESHwoScHJpbmNpcGFsX3ZlcmlmaWVkGAUgASgISAGIAQESCwoDcm5nGAYgAygBEhgKEGRlZmVyX3Byb2plY3Rpb24YByABKAgSDQoFc3BhbnMYCCABKAgSDwoHZHJ5X3J1bhgJIAEoCBIQCghzZXF1ZW5jZRgKIAEoBBItCgVjbG9jaxgLIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrQhMKEV92YWxpZF9mcm9tX2Vwb2NoQhUKE19wcmluY2lwYWxfdmVyaWZpZWQiSgoNQ2FwdHVyZWRDbG9jaxIXCg9waHlzaWNhbF9taWxsaXMYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIsMDChBCaXJ0aENlcnRpZmljYXRlEg0KBWNoaWxkGAEgASgJEg8KB2ZvdW5kZXIYAiABKAkSEAoIdmVyaWZpZWQYAyABKAgSEgoKcGFyZW50X2tleRgEIAEoDBIRCglwYXJlbnRfaWQYBSABKAkSDQoFZXBvY2gYBiABKAMSEQoJc2lnbmF0dXJlGAcgASgMEhkKDHZlcmlmaWVkX3ZpYRgIIAEoCUgAiAEBEhYKCWlkcF90b2tlbhgJIAEoCUgBiAEBEhsKDmNhcHR1cmVkX2Nsb2NrGAogASgDSAKIAQESIQoUYXV0aF9wcm92aWRlcl9pc3N1ZXIYCyABKAlIA4gBARIfChJhdXRoX3Byb3ZpZGVyX2p3a3MYDCABKAlIBIgBARIjChZhdXRoX3Byb3ZpZGVyX2F1ZGllbmNlGA0gASgJSAWIAQFCDwoNX3ZlcmlmaWVkX3ZpYUIMCgpfaWRwX3Rva2VuQhEKD19jYXB0dXJlZF9jbG9ja0IXChVfYXV0aF9wcm92aWRlcl9pc3N1ZXJCFQoTX2F1dGhfcHJvdmlkZXJfandrc0IZChdfYXV0aF9wcm92aWRlcl9hdWRpZW5jZSKcBAoMT2ZmZXJSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSLgoEY2FsbBgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVDYWxsSAASHAoSc2VhbGVkX2NoYW5nZV91c2RhGAcgASgMSAASNAoJYXV0aG9yaW5nGAMgASgLMiEubm9tb3Mua2VybmVsLnYxLkF1dGhvcmluZ09wdGlvbnMSEAoIbGF3X3VzZHoYBCABKAwSMwoMYXR0ZXN0YXRpb25zGAUgAygLMh0ubm9tb3Mua2VybmVsLnYxLkF0dGVzdGVkUmVhZBI9ChJjb25mbGljdF9zbmFwc2hvdHMYBiADKAsyIS5ub21vcy5rZXJuZWwudjEuQ29uZmxpY3RTbmFwc2hvdBIaChJleGVjdXRpb25fbGF3X3VzZHoYCCABKAwSIAoTY29udHJvbGxlcl9sYXdfaGFzaBgJIAEoCUgBiAEBEh0KEGNhbmRpZGF0ZV9jb21taXQYCiABKAlIAogBARI8ChFiaXJ0aF9jZXJ0aWZpY2F0ZRgLIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlQggKBmludGVudEIWChRfY29udHJvbGxlcl9sYXdfaGFzaEITChFfY2FuZGlkYXRlX2NvbW1pdCKTAQoMQXR0ZXN0ZWRSZWFkEhAKCHF1ZXJ5X2lkGAEgASgJEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBIrCgZyZXN1bHQYAyABKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZRITCgthdHRlc3RhdGlvbhgEIAEoDCJ1ChBDb25mbGljdFNuYXBzaG90EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgCIAEoCRINCgVmaWVsZBgDIAEoCRIVCg10YXJnZXRfc2NoZW1hGAQgASgJEg0KBXRva2VuGAUgASgJIuUFCgxRdWVyeVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIyCglhdXRob3JpdHkYAiABKAsyHy5ub21vcy5rZXJuZWwudjEuUXVlcnlBdXRob3JpdHkSDQoFc3BhbnMYAyABKAgSKgoEcm93cxgKIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5Sb3dzUXVlcnlIABIqCgRwYWdlGAsgASgLMhoubm9tb3Mua2VybmVsLnYxLlBhZ2VRdWVyeUgAEisKBWJ5X2lkGAwgASgLMhoubm9tb3Mua2VybmVsLnYxLkJ5SWRRdWVyeUgAEjkKDHJlc29sdmVfcmVmcxgNIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmc1F1ZXJ5SAASRQoScmVmZXJlbmNlX3ZlcnNpb25zGA4gASgLMicubm9tb3Mua2VybmVsLnYxLlJlZmVyZW5jZVZlcnNpb25zUXVlcnlIABIsCgVjb3VudBgPIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASKgoDc3VtGBAgASgLMhsubm9tb3Mua2VybmVsLnYxLlRhbGx5UXVlcnlIABIwCgdzcGF0aWFsGBEgASgLMh0ubm9tb3Mua2VybmVsLnYxLlNwYXRpYWxRdWVyeUgAEiwKBW5hbWVkGBIgASgLMhsubm9tb3Mua2VybmVsLnYxLk5hbWVkUXVlcnlIABJJChNhdXRob3JpemF0aW9uX2NoZWNrGBMgASgLMioubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25DaGVja1JlcXVlc3RIABJLChRhdXRob3JpemF0aW9uX2V4cGFuZBgUIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwYW5kUmVxdWVzdEgAQgcKBXF1ZXJ5IpIBCg5RdWVyeUF1dGhvcml0eRIXCg9wcmluY2lwYWxfY2xhaW0YASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIQCghub3dfdW5peBgDIAEoBBIVCg1hdXRob3Jfc2VjcmV0GAQgASgMEioKBGtleXMYBSADKAsyHC5ub21vcy5rZXJuZWwudjEuSW5qZWN0ZWRLZXkiOAoLSW5qZWN0ZWRLZXkSDQoFc2NvcGUYASABKAkSDQoFZXBvY2gYAiABKAQSCwoDa2V5GAMgASgMIlsKCVJvd3NRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJInkKCVBhZ2VRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSDQoFbGltaXQYAyABKA0SDQoFYWZ0ZXIYBCABKAkSEQoJcHJpbmNpcGFsGAUgASgJIkwKCUJ5SWRRdWVyeRIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSEQoJcHJpbmNpcGFsGAMgASgJIlwKCE5vbW9zUmVmEhEKCXdvcmtzcGFjZRgBIAEoCRIWCg5hZ2dyZWdhdGVfdHlwZRgCIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAyABKAkSDwoHdmVyc2lvbhgEIAEoCSJOChBSZXNvbHZlUmVmc1F1ZXJ5EicKBHJlZnMYASADKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSEQoJcHJpbmNpcGFsGAIgASgJIk4KFlJlZmVyZW5jZVZlcnNpb25zUXVlcnkSNAoEcmVmcxgBIAMoCzImLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uQ2hlY2sihAEKFVJlZmVyZW5jZVZlcnNpb25DaGVjaxIpCgZwaW5uZWQYASABKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSKQoGc2VyaWVzGAIgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhUKDWN1cnJlbnRfZmllbGQYAyABKAkiXAoKVGFsbHlRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJIl4KDFNwYXRpYWxRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJInEKCk5hbWVkUXVlcnkSMgoJb3BlcmF0aW9uGAEgASgOMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5T3BlcmF0aW9uEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCIvChNBdXRob3JpemF0aW9uT2JqZWN0EgwKBHR5cGUYASABKAkSCgoCaWQYAiABKAkiVAoUQXV0aG9yaXphdGlvblN1YmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCRIVCghyZWxhdGlvbhgDIAEoCUgAiAEBQgsKCV9yZWxhdGlvbiKcAQoYUmVsYXRpb25zaGlwVHVwbGVBZGRyZXNzEjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEAoIcmVsYXRpb24YAiABKAkSNgoHc3ViamVjdBgDIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdCKBAQoYQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5EiMKGWN1cnJlbnRfdmVyaWZpZWRfZnJvbnRpZXIYASABKAhIABIZCg9hdF9sZWFzdF9jb21taXQYAiABKAlIABIWCgxleGFjdF9jb21taXQYAyABKAlIAEINCgtyZXF1aXJlbWVudCJmCh1BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIUCgxjb25kaXRpb25faWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IvcCChlBdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0Ej4KC2NvbnNpc3RlbmN5GAQgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25zaXN0ZW5jeRI/Cgdjb250ZXh0GAUgAygLMi4ubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EiAKE2V4cGVjdGVkX21vZGVsX2hhc2gYBiABKAlIAIgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAcgASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoIu0CChpBdXRob3JpemF0aW9uRXhwYW5kUmVxdWVzdBI2CghyZXNvdXJjZRgBIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uT2JqZWN0EhIKCnBlcm1pc3Npb24YAiABKAkSPgoLY29uc2lzdGVuY3kYAyABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBCADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgFIAEoCUgAiAEBEg0KBWxpbWl0GAYgASgNEhIKBWFmdGVyGAcgASgJSAGIAQESGwoTaW5jbHVkZV9leHBsYW5hdGlvbhgIIAEoCEIWChRfZXhwZWN0ZWRfbW9kZWxfaGFzaEIICgZfYWZ0ZXIivQEKGVJlbGF0aW9uc2hpcFR1cGxlRXZpZGVuY2USOAoFdHVwbGUYASABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVsYXRpb25zaGlwVHVwbGVBZGRyZXNzEhAKCHR1cGxlX2lkGAIgASgJEhoKEmFzc2VydGlvbl9ldmVudF9pZBgDIAEoCRIgChNyZXZvY2F0aW9uX2V2ZW50X2lkGAQgASgJSACIAQFCFgoUX3Jldm9jYXRpb25fZXZlbnRfaWQi4QMKGEF1dGhvcml6YXRpb25FeHBsYW5hdGlvbhJGCglvcGVyYXRpb24YASABKA4yMy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uLk9wZXJhdGlvbhIQCghyZWxhdGlvbhgCIAEoCRIOCgZyZXN1bHQYAyABKAgSPAoIZXZpZGVuY2UYBCADKAsyKi5ub21vcy5rZXJuZWwudjEuUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI7CghjaGlsZHJlbhgFIAMoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24i3wEKCU9wZXJhdGlvbhIZChVPUEVSQVRJT05fVU5TUEVDSUZJRUQQABIUChBPUEVSQVRJT05fRElSRUNUEAESHgoaT1BFUkFUSU9OX0NPTVBVVEVEX1VTRVJTRVQQAhIeChpPUEVSQVRJT05fVFVQTEVfVE9fVVNFUlNFVBADEhMKD09QRVJBVElPTl9VTklPThAEEhoKFk9QRVJBVElPTl9JTlRFUlNFQ1RJT04QBRIXChNPUEVSQVRJT05fRVhDTFVTSU9OEAYSFwoTT1BFUkFUSU9OX0NPTkRJVElPThAHIncKGkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEiAKGGF1dGhvcml6YXRpb25fbW9kZWxfaGFzaBgBIAEoCRIhChlyZWxhdGlvbnNoaXBfc3RhdGVfY29tbWl0GAIgASgJEhQKDGNvbnRleHRfaGFzaBgDIAEoDCK+AQoaQXV0aG9yaXphdGlvbkNoZWNrUmVzcG9uc2USDwoHYWxsb3dlZBgBIAEoCBI6CgViYXNpcxgCIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxJDCgtleHBsYW5hdGlvbhgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAIgBAUIOCgxfZXhwbGFuYXRpb24igwIKG0F1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZRI3CghzdWJqZWN0cxgBIAMoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdBI6CgViYXNpcxgCIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxIRCgRuZXh0GAMgASgJSACIAQESQwoLZXhwbGFuYXRpb24YBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uSAGIAQFCBwoFX25leHRCDgoMX2V4cGxhbmF0aW9uInAKDU91dGJveFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBItCgVjbG9jaxgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrImMKC1N5bmNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEQoJZnJvbV9iYXNlGAIgASgJEg8KB3RvX2hlYWQYAyABKAkiUwoLVGVzdFJlcXVlc3QSNwoIc2V0X3Jvb3QYASABKAsyIy5ub21vcy5rZXJuZWwudjEuU2V0VGVzdFJvb3RSZXF1ZXN0SABCCwoJb3BlcmF0aW9uIigKElNldFRlc3RSb290UmVxdWVzdBISCgpwdWJsaWNfa2V5GAEgASgMIj0KDFRlc3RSZXNwb25zZRItCgZyZXN1bHQYASABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkIrYKCg5DdXN0b2R5UmVxdWVzdBI3CgpwYWNrX2RlbHRhGAogASgLMiEubm9tb3Mua2VybmVsLnYxLlBhY2tEZWx0YVJlcXVlc3RIABI3CgphcHBseV9wYWNrGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1JlcXVlc3RIABI3CgpyZXBvX3N0YXRzGAwgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1JlcXVlc3RIABI9Cg1pbnRlbnRzX2Fib3ZlGA0gASgLMiQubm9tb3Mua2VybmVsLnYxLkludGVudHNBYm92ZVJlcXVlc3RIABI/Cg5pbnNwZWN0X2NoYW5nZRgOIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVxdWVzdEgAEk4KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLC5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0SAASUAoXaW5zcGVjdF9yZWZ1c2FsX3ZlcmRpY3QYECABKAsyLS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAEjUKCXJlYWRfYmxvYhgRIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlcXVlc3RIABI5CgtyZXNvbHZlX3JlZhgSIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVxdWVzdEgAEjUKCWxpc3RfcmVmcxgTIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5MaXN0UmVmc1JlcXVlc3RIABI1Cgl3cml0ZV9yZWYYFCABKAsyIC5ub21vcy5rZXJuZWwudjEuV3JpdGVSZWZSZXF1ZXN0SAASNwoKZGVsZXRlX3JlZhgVIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5EZWxldGVSZWZSZXF1ZXN0SAASRAoRd3JpdGVfbWV0YV9jb21taXQYFiABKAsyJy5ub21vcy5rZXJuZWwudjEuV3JpdGVNZXRhQ29tbWl0UmVxdWVzdEgAEkIKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXF1ZXN0SAASRQoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlcXVlc3RIABJFChFjaGVja3BvaW50X2ltcG9ydBgZIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50SW1wb3J0UmVxdWVzdEgAEkMKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVxdWVzdEgAEjsKDHJlc3RvcmVfbWFpbhgbIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlcXVlc3RIABJOChZyZXNvbHZlX3N0YXRlX3Bvc2l0aW9uGBwgASgLMiwubm9tb3Mua2VybmVsLnYxLlJlc29sdmVTdGF0ZVBvc2l0aW9uUmVxdWVzdEgAEkcKEnJlc2lkZW50X2Zvb3RwcmludBgdIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludFJlcXVlc3RIAEILCglvcGVyYXRpb24iKAoYUmVzaWRlbnRGb290cHJpbnRSZXF1ZXN0EgwKBGRlZXAYASABKAginwIKEVJlc2lkZW50Rm9vdHByaW50EhEKCXdvcmtzcGFjZRgBIAEoCRIOCgZicmFuY2gYAiABKAkSGAoQcmVhZF9tb2RlbF9ieXRlcxgDIAEoBBIdChVyZWFkX21vZGVsX3J1c3RfYnl0ZXMYBCABKAQSGAoQZm9sZF9zdGF0ZV9ieXRlcxgFIAEoBBITCgtmb2xkX2ltYWdlcxgGIAEoDRIfChdzaGFyZWRfYXR0cmlidXRlZF9ieXRlcxgHIAEoBBISCgphZ2dyZWdhdGVzGAggASgEEjYKCmNvbXBvbmVudHMYCSADKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRDb21wb25lbnQSEgoKY29tcHV0ZV91cxgKIAEoBCJpChFSZXNpZGVudENvbXBvbmVudBI0CgRraW5kGAEgASgOMiYubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Q29tcG9uZW50S2luZBINCgVieXRlcxgCIAEoBBIPCgdjZWlsaW5nGAMgASgIIsoBChlSZXNpZGVudEZvb3RwcmludFJlc3BvbnNlEjUKCXJlc2lkZW50cxgBIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludBIcChRhbGxvY2F0b3JfbGl2ZV9ieXRlcxgCIAEoBBIYChBhdHRyaWJ1dGVkX2J5dGVzGAMgASgEEhkKEXVuYWNjb3VudGVkX2J5dGVzGAQgASgEEhUKDWFjY291bnRpbmdfdXMYBSABKAQSDAoEZGVlcBgGIAEoCCKcAQoQUGFja0RlbHRhUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKBGhlYWQYAiABKAlIAIgBARIRCgRiYXNlGAMgASgJSAGIAQESDgoGYnJhbmNoGAQgASgJEh0KEHN0YWdlZF9wYWNrX2ZpbGUYBSABKAlIAogBAUIHCgVfaGVhZEIHCgVfYmFzZUITChFfc3RhZ2VkX3BhY2tfZmlsZSJyChBBcHBseVBhY2tSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoEcGFjaxgCIAEoDEgAEhoKEHN0YWdlZF9wYWNrX2ZpbGUYBCABKAlIABIRCgRoZWFkGAMgASgJSAGIAQFCCAoGc291cmNlQgcKBV9oZWFkIiAKEFJlcG9TdGF0c1JlcXVlc3QSDAoEcmVwbxgBIAEoCSKsAQoTSW50ZW50c0Fib3ZlUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKBGhlYWQYAiABKAlIAIgBARIRCgRiYXNlGAMgASgJSAGIAQESDgoGYnJhbmNoGAQgASgJEg0KBWxpbWl0GAUgASgEEhgKEGNvbXBsZXRlX2xvZ2ljYWwYBiABKAgSFgoOY29tcGFjdF9zdG9yZWQYByABKAhCBwoFX2hlYWRCBwoFX2Jhc2UiKwoUSW5zcGVjdENoYW5nZVJlcXVlc3QSEwoLY2hhbmdlX3VzZGEYASABKAwi3wEKDlJlZnVzYWxWZXJkaWN0EhUKCG9mZmVyX2lkGAEgASgJSACIAQESEAoDb2lkGAIgASgJSAGIAQESEwoGZG9tYWluGAMgASgJSAKIAQESGQoMZGlyZWN0aXZlX2lkGAQgASgJSAOIAQESFAoHc2Vzc2lvbhgFIAEoCUgEiAEBEhEKCXBhcmtlZF9hdBgGIAEoCRIOCgZyZWFzb24YByABKAlCCwoJX29mZmVyX2lkQgYKBF9vaWRCCQoHX2RvbWFpbkIPCg1fZGlyZWN0aXZlX2lkQgoKCF9zZXNzaW9uIk8KG0VuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdBIwCgd2ZXJkaWN0GAEgASgLMh8ubm9tb3Mua2VybmVsLnYxLlJlZnVzYWxWZXJkaWN0IjQKHEluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3QSFAoMdmVyZGljdF91c2RhGAEgASgMIjoKD1JlYWRCbG9iUmVxdWVzdBIMCgRyZXBvGAEgASgJEgsKA29pZBgCIAEoCRIMCgRwYXRoGAMgASgJIjQKEVJlc29sdmVSZWZSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJcmVmZXJlbmNlGAIgASgJIi8KD0xpc3RSZWZzUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBnByZWZpeBgCIAEoCSJCCg9Xcml0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkSDgoGdGFyZ2V0GAMgASgJIjMKEERlbGV0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkiKQoITWV0YUZpbGUSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIq4BChZXcml0ZU1ldGFDb21taXRSZXF1ZXN0EgwKBHJlcG8YASABKAkSDwoHcGFyZW50cxgCIAMoCRIoCgVmaWxlcxgDIAMoCzIZLm5vbW9zLmtlcm5lbC52MS5NZXRhRmlsZRIPCgdtZXNzYWdlGAQgASgJEhQKDHRpbWVfc2Vjb25kcxgFIAEoEhIWCglyZWZlcmVuY2UYBiABKAlIAIgBAUIMCgpfcmVmZXJlbmNlImcKFUxhd0Nsb3N1cmVJbmZvUmVxdWVzdBIUCgxjbG9zdXJlX2ZpbGUYASABKAkSOAoKY2FwYWJpbGl0eRgCIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxMYXdDYXBhYmlsaXR5IocBChdDaGVja3BvaW50RXhwb3J0UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EiEKFHN0YWdlZF9mcm9udGllcl9maWxlGAIgASgJSACIAQFCFwoVX3N0YWdlZF9mcm9udGllcl9maWxlIukBChdDaGVja3BvaW50SW1wb3J0UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhIKCGZyb250aWVyGAIgASgMSAASHgoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYBiABKAlIABITCgZjdXJzb3IYAyABKAlIAYgBARIXCgpzdGF0ZV9yb290GAQgASgJSAKIAQESDQoFc3BhbnMYBSABKAhCEQoPZnJvbnRpZXJfc291cmNlQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3QiMQoWQ2FwYWNpdHlSZXNlcnZlUmVxdWVzdBIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQiaQoSUmVzdG9yZU1haW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDAoEaGVhZBgCIAEoCRITCgtkaWFnbm9zdGljcxgDIAEoCCJpChtSZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgltYWluX2hlYWQYAiABKAkSFQoNaGludGVkX2NvbW1pdBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJIsIKCg9DdXN0b2R5UmVzcG9uc2USOAoKcGFja19kZWx0YRgKIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXNwb25zZUgAEjgKCmFwcGx5X3BhY2sYCyABKAsyIi5ub21vcy5rZXJuZWwudjEuQXBwbHlQYWNrUmVzcG9uc2VIABI4CgpyZXBvX3N0YXRzGAwgASgLMiIubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1Jlc3BvbnNlSAASPgoNaW50ZW50c19hYm92ZRgNIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXNwb25zZUgAEkAKDmluc3BlY3RfY2hhbmdlGA4gASgLMiYubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDaGFuZ2VSZXNwb25zZUgAEk8KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLS5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAElEKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi4ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlSAASNgoJcmVhZF9ibG9iGBEgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRCbG9iUmVzcG9uc2VIABI6CgtyZXNvbHZlX3JlZhgSIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVzcG9uc2VIABI2CglsaXN0X3JlZnMYEyABKAsyIS5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXNwb25zZUgAEjIKCXdyaXRlX3JlZhgUIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABIzCgpkZWxldGVfcmVmGBUgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZEgAEkUKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMigubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlc3BvbnNlSAASQwoQbGF3X2Nsb3N1cmVfaW5mbxgXIAEoCzInLm5vbW9zLmtlcm5lbC52MS5MYXdDbG9zdXJlSW5mb1Jlc3BvbnNlSAASRgoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlSAASRgoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlSAASRAoQY2FwYWNpdHlfcmVzZXJ2ZRgaIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DYXBhY2l0eVJlc2VydmVSZXNwb25zZUgAEjwKDHJlc3RvcmVfbWFpbhgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlc3BvbnNlSAASTwoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlc3BvbnNlSAASSAoScmVzaWRlbnRfZm9vdHByaW50GB0gASgLMioubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2VIAEILCglvcGVyYXRpb24iMAoRUGFja0RlbHRhUmVzcG9uc2USDAoEcGFjaxgBIAEoDBINCgVieXRlcxgCIAEoBCI8ChFBcHBseVBhY2tSZXNwb25zZRIUCgxvYmplY3RfY291bnQYASABKAQSEQoJcGFja19oYXNoGAIgASgJIqcBChFSZXBvU3RhdHNSZXNwb25zZRITCgt0b3RhbF9ieXRlcxgBIAEoBBIUCgxvYmplY3RfYnl0ZXMYAiABKAQSFQoNbG9vc2Vfb2JqZWN0cxgDIAEoBBITCgtsb29zZV9ieXRlcxgEIAEoBBISCgpwYWNrX2ZpbGVzGAUgASgEEhIKCnBhY2tfYnl0ZXMYBiABKAQSEwoLaW5kZXhfYnl0ZXMYByABKAQi4gEKDEludGVudFJlY29yZBILCgNvaWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEwoLY2hhbmdlX3VzZGEYBSABKAwSLgoIc2VtYW50aWMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSSgoVdHJhbnNwb3J0X3JlcXVpcmVtZW50GAcgASgOMisubm9tb3Mua2VybmVsLnYxLkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50IkYKFEludGVudHNBYm92ZVJlc3BvbnNlEi4KB2ludGVudHMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuSW50ZW50UmVjb3JkIkIKE05vbWluYWxDYWxsSWRlbnRpdHkSEwoLZG9tYWluX3BhdGgYASABKAkSFgoOZGlyZWN0aXZlX3BhdGgYAiABKAkiiAEKGExpZmVjeWNsZUluc3RhbGxJZGVudGl0eRIfChd0YXJnZXRfY2xvc3VyZV9pZGVudGl0eRgBIAEoCRIUCgxpbnN0YWxsZWRfYnkYAiABKAkSNQoFcGhhc2UYAyABKA4yJi5ub21vcy5rZXJuZWwudjEuTGlmZWN5Y2xlSW5zdGFsbFBoYXNlIloKHVdvcmtzcGFjZVJlc2lkZW5jeVJlcXVpcmVtZW50EhEKCXdvcmtzcGFjZRgBIAEoCRITCgtzb3VyY2VfaGVhZBgCIAEoCRIRCglmb2xkX3Jvb3QYAyABKAkitAIKFUluc3BlY3RDaGFuZ2VSZXNwb25zZRIuCghzZW1hbnRpYxgBIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBIRCglpbnRlbnRfaWQYAiABKAkSMgoEY2FsbBgDIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5Ob21pbmFsQ2FsbElkZW50aXR5EhAKCGF1dGhvcmVkGAQgASgIEkQKEWxpZmVjeWNsZV9pbnN0YWxsGAUgASgLMikubm9tb3Mua2VybmVsLnYxLkxpZmVjeWNsZUluc3RhbGxJZGVudGl0eRJMChRyZXF1aXJlZF9yZXNpZGVuY2llcxgGIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VSZXNpZGVuY3lSZXF1aXJlbWVudCJMChxSZXNvbHZlU3RhdGVQb3NpdGlvblJlc3BvbnNlEhoKDXJlc29sdmVkX2hlYWQYASABKAlIAIgBAUIQCg5fcmVzb2x2ZWRfaGVhZCI0ChxFbmNvZGVSZWZ1c2FsVmVyZGljdFJlc3BvbnNlEhQKDHZlcmRpY3RfdXNkYRgBIAEoDCJRCh1JbnNwZWN0UmVmdXNhbFZlcmRpY3RSZXNwb25zZRIwCgd2ZXJkaWN0GAEgASgLMh8ubm9tb3Mua2VybmVsLnYxLlJlZnVzYWxWZXJkaWN0Ii8KEFJlYWRCbG9iUmVzcG9uc2USDQoFZm91bmQYASABKAgSDAoEYmxvYhgCIAEoDCIuChJSZXNvbHZlUmVmUmVzcG9uc2USEAoDb2lkGAEgASgJSACIAQFCBgoEX29pZCIrCglSZWZSZWNvcmQSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCSI8ChBMaXN0UmVmc1Jlc3BvbnNlEigKBHJlZnMYASADKAsyGi5ub21vcy5rZXJuZWwudjEuUmVmUmVjb3JkIg4KDEFja25vd2xlZGdlZCImChdXcml0ZU1ldGFDb21taXRSZXNwb25zZRILCgNvaWQYASABKAkigwEKFkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2USEAoIaWRlbnRpdHkYASABKAkSGQoRcm9vdF9sb2dpY2FsX3BhdGgYAiABKAkSEwoLYXNzZXRfY291bnQYAyABKAQSEgoKcHJpbV9jb3VudBgEIAEoBBITCgtkb21haW5fa2V5cxgFIAMoCSLvAgoYQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlEg0KBWVtcHR5GAEgASgIEhMKBmN1cnNvchgCIAEoCUgAiAEBEhAKCGZyb250aWVyGAMgASgMEhcKCnN0YXRlX3Jvb3QYBCABKAlIAYgBARISCgpzdGF0ZV90cmVlGAUgASgIEg4KBnBpbm5lZBgGIAEoCBIbChNyZWFkX2luZGV4X3NuYXBzaG90GAcgASgIEiMKG3JlYWRfaW5kZXhfc25hcHNob3RfcGVuZGluZxgIIAEoCBIkChdyZWFkX2luZGV4X3NxbGl0ZV9ieXRlcxgJIAEoBEgCiAEBEiUKGHJlYWRfaW5kZXhfY3VzdG9keV9ieXRlcxgKIAEoBEgDiAEBQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3RCGgoYX3JlYWRfaW5kZXhfc3FsaXRlX2J5dGVzQhsKGV9yZWFkX2luZGV4X2N1c3RvZHlfYnl0ZXMingIKGENoZWNrcG9pbnRJbXBvcnRSZXNwb25zZRIQCghyZXN0b3JlZBgBIAEoCBITCgZyZWFzb24YAiABKAlIAIgBARIXCg9mcm9udGllcl9zZWVkZWQYAyABKAgSJQodZnJvbnRpZXJfdmVyaWZpY2F0aW9uX3BlbmRpbmcYBCABKAgSFwoPYWdncmVnYXRlX2NvdW50GAUgASgEEisKBXNwYW5zGAYgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhMKBmN1cnNvchgHIAEoCUgBiAEBEhEKCXJlYWRfb25seRgIIAEoCBIXCg9sYXp5X3JlYWRfaW5kZXgYCSABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIkoKF0NhcGFjaXR5UmVzZXJ2ZVJlc3BvbnNlEhcKD2FnZ3JlZ2F0ZV9jb3VudBgBIAEoBBIWCg5yZXNlcnZlZF9ieXRlcxgCIAEoBCL5AgoQUmVzdG9yZU1haW5TcGFucxIQCgh0b3RhbF91cxgBIAEoBBIaChJsaXZlX3JlZl9sb29rdXBfdXMYAiABKAQSGAoQdGFyZ2V0X2RlY29kZV91cxgDIAEoBBIkChxjdXN0b2R5X2NvbXBsZXRlbmVzc19yZWFkX3VzGAQgASgEEhkKEXF1YXJhbnRpbmVfcmVmX3VzGAUgASgEEiUKHWNoYWluX3NpZ25hdHVyZV9sYXdfcmVwbGF5X3VzGAYgASgEEhkKEXZlcmRpY3RfZGVjb2RlX3VzGAcgASgEEiMKG3Byb21vdGVfYW5kX2NsZWFudXBfcmVmc191cxgIIAEoBBIbChNmcm9udGllcl9yZWJ1aWxkX3VzGAkgASgEEhkKEWZyb250aWVyX3N0b3JlX3VzGAogASgEEj0KDHZlcmlmaWNhdGlvbhgLIAEoCzInLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkRpYWdub3N0aWNzIqQBChNSZXN0b3JlTWFpblJlc3BvbnNlEgwKBGhlYWQYASABKAkSEAoIdmVyaWZpZWQYAiABKAgSDAoEd2FsaxgDIAEoCRIwCgVzcGFucxgEIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblNwYW5zEi0KB3ZlcmRpY3QYBSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QimwIKCk5vbW9zVmFsdWUSJQoEbnVsbBgBIAEoCzIVLm5vbW9zLmtlcm5lbC52MS5OdWxsSAASEQoHYm9vbGVhbhgCIAEoCEgAEhgKDnNpZ25lZF9pbnRlZ2VyGAMgASgSSAASGgoQdW5zaWduZWRfaW50ZWdlchgEIAEoBEgAEhgKDmZsb2F0aW5nX3BvaW50GAUgASgBSAASDgoEdGV4dBgGIAEoCUgAEg8KBWJ5dGVzGAcgASgMSAASKgoEbGlzdBgIIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5Ob21vc0xpc3RIABIuCgZvYmplY3QYCSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RIAEIGCgRraW5kIgYKBE51bGwiOAoJTm9tb3NMaXN0EisKBnZhbHVlcxgBIAMoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlIpMBCgtOb21vc1N0cnVjdBI4CgZmaWVsZHMYASADKAsyKC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QuRmllbGRzRW50cnkaSgoLRmllbGRzRW50cnkSCwoDa2V5GAEgASgJEioKBXZhbHVlGAIgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWU6AjgBKukSChFLZXJuZWxSZWZ1c2FsQ29kZRIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1VOU1BFQ0lGSUVEEAASJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9CQURfU0lHTkFUVVJFEAESJAogS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkFVVEhPUklaRUQQAhInCiNLRVJORUxfUkVGVVNBTF9DT0RFX1BPTElDWV9ESVNBQkxFRBADEioKJktFUk5FTF9SRUZVU0FMX0NPREVfVU5DRVJUSUZJRURfUE9MSUNZEAQSIwofS0VSTkVMX1JFRlVTQUxfQ09ERV9SRUZFUkVOVElBTBAFEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfUE9JTlRfU1RBVEVfVU5BVkFJTEFCTEUQBhIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX0NBUF9FWENFRURFRBAHEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0NPVU5UX1VOQVZBSUxBQkxFEAgSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9FVklERU5DRV9VTkJBQ0tFRBAJEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1JQSEFOX1JFQ0VJUFQQChI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX1JFQ0VJUFRfT05fVEVSTUlOQUxfT0JMSUdBVElPThALEiIKHktFUk5FTF9SRUZVU0FMX0NPREVfTk9UX01JTlRFRBAMEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRE9NQUlOX0xJRkVDWUNMRRANEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfVFlQRV9UQUdfTUlTTUFUQ0gQDhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1JFVElSRURfUkVBRF9TVVJGQUNFEA8SMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DUk9TU19XT1JLU1BBQ0VfREVDTElORUQQEBIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FHR1JFR0FURV9JTlZBUklBTlQQERIrCidLRVJORUxfUkVGVVNBTF9DT0RFX1dPUktTUEFDRV9JTlZBUklBTlQQEhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfQ09ORkxJQ1QQExIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1JFUVVJUkVEEBQSNAowS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9VTkRFQ0xBUkVEEBUSMQotS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9JTlZBTElEEBYSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9TVEFMRRAXEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9VTkRFQ0xBUkVEEBgSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1BSSVZBVEUQGRIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5ERUNMQVJFRBAaEjMKL0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTlRSVVNURURfS0VZEBsSNgoyS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9TT1VSQ0UQHBIsCihLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRk9SR0VEEB0SKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1NUQUxFEB4SLgoqS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX09WRVJTSVpFEB8SNwozS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX0RJU0hPTk9SRURfU09VUkNFECASNQoxS0VSTkVMX1JFRlVTQUxfQ09ERV9FUVVJVk9DQVRJT05fRVZJREVOQ0VfSU5WQUxJRBAhEjMKL0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNUQVRJT05fUkVDRUlQVF9JTlZBTElEECISKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9LRVlfUk9TVEVSX01JU01BVENIECMSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9LRVlfRVBPQ0hfTk9UX01PTk9UT05JQxAkEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfV1JJVEVfRVBPQ0hfU1RBTEUQJRItCilLRVJORUxfUkVGVVNBTF9DT0RFX0VOVkVMT1BFX1NJRF9NSVNNQVRDSBAmEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfUkVWT0tFRF9NRU1CRVJfUkVTVVJSRUNURUQQJxIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX0ZPUkdFRF9QUklOQ0lQQUwQKBIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX09XTkVEX0tFWV9BTkNIT1IQKRImCiJLRVJORUxfUkVGVVNBTF9DT0RFX09XTkVEX1JFQ09WRVJZECoSLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9TVVJGQUNFRF9CQVNJU19BSEVBRBArEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfU0lHTkVSX0VQT0NIX09VVF9PRl9XSU5ET1cQLBImCiJLRVJORUxfUkVGVVNBTF9DT0RFX0VWT0xWRV9SRUZVU0VEEC0SKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9JTlZBTElEEC4SLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9QQVJFTlRfRElEX05PVF9BVFRFU1QQLxIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0NFUlRfQ0hBSU5fQlJPS0VOEDASKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfUk9PVEVEX0FUX1JPT1QQMRIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX0RFTEVHQVRJT05fSU5WQUxJRBAyEiUKIUtFUk5FTF9SRUZVU0FMX0NPREVfUExBTl9SRUpFQ1RFRBAzKooBCg9WZXJpZnlDaGFpbldhbGsSIQodVkVSSUZZX0NIQUlOX1dBTEtfVU5TUEVDSUZJRUQQABIaChZWRVJJRllfQ0hBSU5fV0FMS19GVUxMEAESHAoYVkVSSUZZX0NIQUlOX1dBTEtfU1VGRklYEAISGgoWVkVSSUZZX0NIQUlOX1dBTEtfTUVNTxADKoUMCg5RdWVyeU9wZXJhdGlvbhIfChtRVUVSWV9PUEVSQVRJT05fVU5TUEVDSUZJRUQQABIcChhRVUVSWV9PUEVSQVRJT05fRVhUUkVNVU0QARIlCiFRVUVSWV9PUEVSQVRJT05fUEVORElOR19DT05GTElDVFMQAhIsCihRVUVSWV9PUEVSQVRJT05fUEVORElOR19DT05GTElDVF9TVU1NQVJZEAMSIAocUVVFUllfT1BFUkFUSU9OX1JFQURfUE9TVFVSRRAEEh8KG1FVRVJZX09QRVJBVElPTl9DVVJSRU5UX0xBVxAFEiMKH1FVRVJZX09QRVJBVElPTl9JTlRFUkZBQ0VfT0ZGRVIQBhInCiNRVUVSWV9PUEVSQVRJT05fUkVMQVRJT05fR0FURV9PRkZFUhAHEh0KGVFVRVJZX09QRVJBVElPTl9TQ0VORV9MQVcQCBIhCh1RVUVSWV9PUEVSQVRJT05fSU5TVEFMTEVEX0xBVxAJEhwKGFFVRVJZX09QRVJBVElPTl9ERVNDUklCRRAKEiAKHFFVRVJZX09QRVJBVElPTl9LRVJORUxfU1RBTVAQCxIjCh9RVUVSWV9PUEVSQVRJT05fREVWRUxPUEVSX1NQQU5TEAwSKQolUVVFUllfT1BFUkFUSU9OX0RFQ0xBUkVEX0NBUEFCSUxJVElFUxANEh0KGVFVRVJZX09QRVJBVElPTl9SRUFESU5FU1MQDhIkCiBRVUVSWV9PUEVSQVRJT05fUFJPSkVDVElPTl9TVEFUUxAPEiUKIVFVRVJZX09QRVJBVElPTl9NRU1PUllfRFJPUF9QUk9CRRAQEhgKFFFVRVJZX09QRVJBVElPTl9XQVJNEBESGwoXUVVFUllfT1BFUkFUSU9OX1JFRlJFU0gQEhIgChxRVUVSWV9PUEVSQVRJT05fVkVSSUZZX0NIQUlOEBMSJQohUVVFUllfT1BFUkFUSU9OX0hJU1RPUllfUFJFRkxJR0hUEBQSGQoVUVVFUllfT1BFUkFUSU9OX1JPVVRFEBUSGAoUUVVFUllfT1BFUkFUSU9OX01JTlQQFhIhCh1RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX0tFWUdFThAXEiUKIVFVRVJZX09QRVJBVElPTl9DUllQVE9fU0VBTF9GSUVMRBAYEiwKKFFVRVJZX09QRVJBVElPTl9DUllQVE9fQkxJTkRfSU5ERVhfVE9LRU4QGRIqCiZRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX09XTkVEX1NDT1BFX0tFWRAaEi8KK1FVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfREVWSUNFX1JFUVVFU1QQGxIxCi1RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX09XTkVEX1BSRVBBUkVfQVBQUk9WQUwQHBIxCi1RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX09XTkVEX1BSRVBBUkVfUkVDT1ZFUlkQHRIjCh9RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1dSQVBfS0VZEB4SJQohUVVFUllfT1BFUkFUSU9OX0NSWVBUT19VTldSQVBfS0VZEB8SIQodUVVFUllfT1BFUkFUSU9OX0FVVEhPUl9LRVlHRU4QIBIkCiBRVUVSWV9PUEVSQVRJT05fQVRURVNUQVRJT05fU0lHThAhEiAKHFFVRVJZX09QRVJBVElPTl9SRUNFSVBUX1BBVEgQIhIdChlRVUVSWV9PUEVSQVRJT05fQ0VSVF9TSUdOECMSJQohUVVFUllfT1BFUkFUSU9OX0JJUlRIX1RSVVNUX1NUQVRFECQSIQodUVVFUllfT1BFUkFUSU9OX0VSQV9DRVJUX1NJR04QJRIoCiRRVUVSWV9PUEVSQVRJT05fREVMRUdBVElPTl9DRVJUX1NJR04QJhIpCiVRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX0ZST05USUVSECcSKwonUVVFUllfT1BFUkFUSU9OX0NBTk9OSUNBTElaRV9QUk9KRUNUSU9OECgq0gIKFVJlc2lkZW50Q29tcG9uZW50S2luZBInCiNSRVNJREVOVF9DT01QT05FTlRfS0lORF9VTlNQRUNJRklFRBAAEiYKIlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0ZPTERfU1RBVEUQARItCilSRVNJREVOVF9DT01QT05FTlRfS0lORF9SRUFEX01PREVMX1NRTElURRACEi4KKlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1JFQURfTU9ERUxfSU5ERVhFUxADEi0KKVJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1NIQVJFRF9BVFRSSUJVVEVEEAQSLAooUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfV09SS1NQQUNFX0NBQ0hFUxAFEiwKKFJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0dJVF9PQkpFQ1RfQ0FDSEUQBipsChNLZXJuZWxMYXdDYXBhYmlsaXR5EiUKIUtFUk5FTF9MQVdfQ0FQQUJJTElUWV9VTlNQRUNJRklFRBAAEi4KKktFUk5FTF9MQVdfQ0FQQUJJTElUWV9TVEFHRV9aRVJPX0JPT1RTVFJBUBABKqgBChpJbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudBIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1VOU1BFQ0lGSUVEEAASLgoqSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9TRUFMRURfQ0hBTkdFEAESLAooSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9DT01NSVRfVFJFRRACKokBChVMaWZlY3ljbGVJbnN0YWxsUGhhc2USJwojTElGRUNZQ0xFX0lOU1RBTExfUEhBU0VfVU5TUEVDSUZJRUQQABIiCh5MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9BQ1RJVkUQARIjCh9MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9QRU5ESU5HEAIyWQoSTm9tb3NLZXJuZWxTZXJ2aWNlEkMKBENhbGwSHC5ub21vcy5rZXJuZWwudjEuQ2FsbFJlcXVlc3QaHS5ub21vcy5rZXJuZWwudjEuQ2FsbFJlc3BvbnNlYgZwcm90bzM");
5344
+ var file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEimAMKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEiwKBHRlc3QYECABKAsyHC5ub21vcy5rZXJuZWwudjEuVGVzdFJlcXVlc3RIAEILCglvcGVyYXRpb24iywMKDENhbGxSZXNwb25zZRIYChBwcm90b2NvbF92ZXJzaW9uGAEgASgNEhIKCnJlcXVlc3RfaWQYAiABKAkSKwoHZmFpbHVyZRgKIAEoCzIYLm5vbW9zLmtlcm5lbC52MS5GYWlsdXJlSAASLQoEb3BlbhgLIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5PcGVuUmVzcG9uc2VIABIvCgVvZmZlchgMIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlSAASLwoFcXVlcnkYDSABKAsyHi5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXNwb25zZUgAEjEKBm91dGJveBgOIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5PdXRib3hSZXNwb25zZUgAEi0KBHN5bmMYDyABKAsyHS5ub21vcy5rZXJuZWwudjEuU3luY1Jlc3BvbnNlSAASMwoHY3VzdG9keRgQIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVzcG9uc2VIABItCgR0ZXN0GBEgASgLMh0ubm9tb3Mua2VybmVsLnYxLlRlc3RSZXNwb25zZUgAQgkKB291dGNvbWUiVwoHRmFpbHVyZRIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSLQoHZGV0YWlscxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCI8CgxPcGVuUmVzcG9uc2USLAoGcmVzdWx0GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IsMCCg1PZmZlclJlc3BvbnNlEjIKCGFkbWl0dGVkGAEgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyQWRtaXR0ZWRIABIwCgdyZWZ1c2VkGAIgASgLMh0ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVmdXNlZEgAEjsKDWRlYWRfbGV0dGVyZWQYAyABKAsyIi5ub21vcy5rZXJuZWwudjEuT2ZmZXJEZWFkTGV0dGVyZWRIABI4CgtxdWFyYW50aW5lZBgEIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5PZmZlclF1YXJhbnRpbmVkSAASSgoVYmxvY2tlZF9vbl9kZXBlbmRlbmN5GAUgASgLMikubm9tb3Mua2VybmVsLnYxLk9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeUgAQgkKB291dGNvbWUiPQoNT2ZmZXJBZG1pdHRlZBIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QilgEKDE9mZmVyUmVmdXNlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEi8KB3JlZnVzYWwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbBIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQiegoRT2ZmZXJEZWFkTGV0dGVyZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIq4BChBPZmZlclF1YXJhbnRpbmVkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESGQoRYXV0aG9yZWRfbGF3X2hhc2gYAiABKAkSGAoQY3VycmVudF9sYXdfaGFzaBgDIAEoCRIOCgZyZWFzb24YBCABKAkSMQoLZGlhZ25vc3RpY3MYBSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIoEBChhPZmZlckJsb2NrZWRPbkRlcGVuZGVuY3kSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZkZXRhaWwYAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIoEBCg1LZXJuZWxSZWZ1c2FsEjAKBGNvZGUYASABKA4yIi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbENvZGUSDwoHbWVzc2FnZRgCIAEoCRItCgdkZXRhaWxzGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Iu8CCg1RdWVyeVJlc3BvbnNlEiwKBXZhbHVlGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWVIABJBChBhcHBsaWNhdGlvbl9qc29uGAIgASgLMiUubm9tb3Mua2VybmVsLnYxLkFwcGxpY2F0aW9uSnNvblZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEkkKGHZlcmlmeV9jaGFpbl9kaWFnbm9zdGljcxgUIAEoCzInLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkRpYWdub3N0aWNzQggKBnJlc3VsdCLnAQoTVmVyaWZ5Q2hhaW5TdGVwU3BhbhINCgVpbmRleBgBIAEoBBISCgpjb21taXRfb2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEAoIdG90YWxfdXMYBSABKAQSNgoGcGhhc2VzGAYgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxJACg5lbmdpbmVfdGltaW5ncxgHIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZyKYAgoVVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEh4KFnJ1bnRpbWVfbGF3X3JlZnJlc2hfdXMYASABKAQSEwoLbWFuaWZlc3RfdXMYAiABKAQSGQoRbGF3X3Jlc29sdXRpb25fdXMYAyABKAQSHQoVbWFuYWdlZF90cmFuc2l0aW9uX3VzGAQgASgEEhQKDHByaW5jaXBhbF91cxgFIAEoBBIUCgxldm9sdXRpb25fdXMYBiABKAQSGgoSY29sb2NhdGVkX3JlYWRzX3VzGAcgASgEEiEKGXR5cGVkX2luc3RhbGxfdmVyaWZpZXJfdXMYCCABKAQSFAoMYWRtaXNzaW9uX3VzGAkgASgEEg8KB2ZvbGRfdXMYCiABKAQi2gUKFlZlcmlmeUNoYWluRGlhZ25vc3RpY3MSLgoEd2FsaxgBIAEoDjIgLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbldhbGsSEAoIdG90YWxfdXMYAiABKAQSGwoTcmVmZXJlbmNlX2xvb2t1cF91cxgDIAEoBBIaChJyZXBvc2l0b3J5X29wZW5fdXMYBCABKAQSFQoNY2hhaW5fcmVhZF91cxgFIAEoBBIWCg5lbmdpbmVfaW5pdF91cxgGIAEoBBIYChB0aW1lbGluZV9yZWFkX3VzGAcgASgEEhgKEGxhd19oeWRyYXRpb25fdXMYCCABKAQSGwoTcmVjb3ZlcnlfcHJlc2Nhbl91cxgJIAEoBBIYChBmb2xkX2Zyb250aWVyX3VzGAogASgEEjMKBXN0ZXBzGAsgAygLMiQubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFNwYW4SQAoOZW5naW5lX3RpbWluZ3MYDCADKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSTQoVbGF3X2h5ZHJhdGlvbl90aW1pbmdzGA0gAygLMi4ubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluTGF3SHlkcmF0aW9uVGltaW5nEhkKEWxhd19jbG9zdXJlX2NvdW50GA4gASgEEh4KFmxhd19jbG9zdXJlX2NhY2hlX2hpdHMYDyABKAQSIAoYbGF3X2Nsb3N1cmVfY2FjaGVfbWlzc2VzGBAgASgEEhIKCnN0ZXBfY291bnQYESABKAQSFQoNc3RlcF90b3RhbF91cxgSIAEoBBJBChFzdGVwX3BoYXNlX3RvdGFscxgTIAEoCzImLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBQaGFzZXMSGgoSb21pdHRlZF9zdGVwX2NvdW50GBQgASgEIjoKF1ZlcmlmeUNoYWluRW5naW5lVGltaW5nEg0KBXBoYXNlGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEIkAKHVZlcmlmeUNoYWluTGF3SHlkcmF0aW9uVGltaW5nEg0KBXBoYXNlGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEIiQKFEFwcGxpY2F0aW9uSnNvblZhbHVlEgwKBHV0ZjgYASABKAwitgIKDU91dGJvdW5kT2ZmZXISCgoCaWQYASABKAkSEwoLZGVzdGluYXRpb24YAiABKAkSFAoMc2VhbGVkX29mZmVyGAMgASgMEhQKDGNvbnRlbnRfdHlwZRgEIAEoCRIYChBzb3VyY2Vfd29ya3NwYWNlGAUgASgJEhQKDGN1c3RvZHlfaGVhZBgGIAEoCRIXCg9jYXVzZWRfYnlfb2ZmZXIYByABKAkSGwoTc2NoZWR1bGVkX2F0X21pbGxpcxgIIAEoBBIaChJkZWFkbGluZV9hdF9taWxsaXMYCSABKAQSFAoMY3VzdG9keV9wYXRoGAogASgJEhMKC2N1c3RvZHlfb2lkGAsgASgJEhQKDGRlbGl2ZXJ5X3JlZhgMIAEoCRIVCg1vYmxpZ2F0aW9uX2lkGA0gASgJIngKDk91dGJveFJlc3BvbnNlEi4KBm9mZmVycxgBIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5PdXRib3VuZE9mZmVyEh8KEm5leHRfZHVlX2F0X21pbGxpcxgCIAEoBEgAiAEBQhUKE19uZXh0X2R1ZV9hdF9taWxsaXMiPAoMU3luY1Jlc3BvbnNlEiwKBnJlc3VsdBgBIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCJCCg9Xb3Jrc3BhY2VUYXJnZXQSDAoEcmVwbxgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkSDgoGYnJhbmNoGAMgASgJIk4KC09wZW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDQoFc3BhbnMYAiABKAgiYQoNRGlyZWN0aXZlQ2FsbBIOCgZkb21haW4YASABKAkSEQoJZGlyZWN0aXZlGAIgASgJEi0KB3BheWxvYWQYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiwAIKEEF1dGhvcmluZ09wdGlvbnMSDQoFYWN0b3IYASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIVCg1hdXRob3Jfc2VjcmV0GAMgASgMEh0KEHZhbGlkX2Zyb21fZXBvY2gYBCABKARIAIgBARIfChJwcmluY2lwYWxfdmVyaWZpZWQYBSABKAhIAYgBARILCgNybmcYBiADKAESGAoQZGVmZXJfcHJvamVjdGlvbhgHIAEoCBINCgVzcGFucxgIIAEoCBIPCgdkcnlfcnVuGAkgASgIEhAKCHNlcXVlbmNlGAogASgEEi0KBWNsb2NrGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2tCEwoRX3ZhbGlkX2Zyb21fZXBvY2hCFQoTX3ByaW5jaXBhbF92ZXJpZmllZCJKCg1DYXB0dXJlZENsb2NrEhcKD3BoeXNpY2FsX21pbGxpcxgBIAEoBBIPCgdsb2dpY2FsGAIgASgNEg8KB3JlcGxpY2EYAyABKAQiwwMKEEJpcnRoQ2VydGlmaWNhdGUSDQoFY2hpbGQYASABKAkSDwoHZm91bmRlchgCIAEoCRIQCgh2ZXJpZmllZBgDIAEoCBISCgpwYXJlbnRfa2V5GAQgASgMEhEKCXBhcmVudF9pZBgFIAEoCRINCgVlcG9jaBgGIAEoAxIRCglzaWduYXR1cmUYByABKAwSGQoMdmVyaWZpZWRfdmlhGAggASgJSACIAQESFgoJaWRwX3Rva2VuGAkgASgJSAGIAQESGwoOY2FwdHVyZWRfY2xvY2sYCiABKANIAogBARIhChRhdXRoX3Byb3ZpZGVyX2lzc3VlchgLIAEoCUgDiAEBEh8KEmF1dGhfcHJvdmlkZXJfandrcxgMIAEoCUgEiAEBEiMKFmF1dGhfcHJvdmlkZXJfYXVkaWVuY2UYDSABKAlIBYgBAUIPCg1fdmVyaWZpZWRfdmlhQgwKCl9pZHBfdG9rZW5CEQoPX2NhcHR1cmVkX2Nsb2NrQhcKFV9hdXRoX3Byb3ZpZGVyX2lzc3VlckIVChNfYXV0aF9wcm92aWRlcl9qd2tzQhkKF19hdXRoX3Byb3ZpZGVyX2F1ZGllbmNlIpwECgxPZmZlclJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIuCgRjYWxsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLkRpcmVjdGl2ZUNhbGxIABIcChJzZWFsZWRfY2hhbmdlX3VzZGEYByABKAxIABI0CglhdXRob3JpbmcYAyABKAsyIS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaW5nT3B0aW9ucxIQCghsYXdfdXNkehgEIAEoDBIzCgxhdHRlc3RhdGlvbnMYBSADKAsyHS5ub21vcy5rZXJuZWwudjEuQXR0ZXN0ZWRSZWFkEj0KEmNvbmZsaWN0X3NuYXBzaG90cxgGIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5Db25mbGljdFNuYXBzaG90EhoKEmV4ZWN1dGlvbl9sYXdfdXNkehgIIAEoDBIgChNjb250cm9sbGVyX2xhd19oYXNoGAkgASgJSAGIAQESHQoQY2FuZGlkYXRlX2NvbW1pdBgKIAEoCUgCiAEBEjwKEWJpcnRoX2NlcnRpZmljYXRlGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGVCCAoGaW50ZW50QhYKFF9jb250cm9sbGVyX2xhd19oYXNoQhMKEV9jYW5kaWRhdGVfY29tbWl0IpMBCgxBdHRlc3RlZFJlYWQSEAoIcXVlcnlfaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EisKBnJlc3VsdBgDIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlEhMKC2F0dGVzdGF0aW9uGAQgASgMInUKEENvbmZsaWN0U25hcHNob3QSFgoOYWdncmVnYXRlX3R5cGUYASABKAkSFAoMYWdncmVnYXRlX2lkGAIgASgJEg0KBWZpZWxkGAMgASgJEhUKDXRhcmdldF9zY2hlbWEYBCABKAkSDQoFdG9rZW4YBSABKAki5QUKDFF1ZXJ5UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EjIKCWF1dGhvcml0eRgCIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5RdWVyeUF1dGhvcml0eRINCgVzcGFucxgDIAEoCBIqCgRyb3dzGAogASgLMhoubm9tb3Mua2VybmVsLnYxLlJvd3NRdWVyeUgAEioKBHBhZ2UYCyABKAsyGi5ub21vcy5rZXJuZWwudjEuUGFnZVF1ZXJ5SAASKwoFYnlfaWQYDCABKAsyGi5ub21vcy5rZXJuZWwudjEuQnlJZFF1ZXJ5SAASOQoMcmVzb2x2ZV9yZWZzGA0gASgLMiEubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZzUXVlcnlIABJFChJyZWZlcmVuY2VfdmVyc2lvbnMYDiABKAsyJy5ub21vcy5rZXJuZWwudjEuUmVmZXJlbmNlVmVyc2lvbnNRdWVyeUgAEiwKBWNvdW50GA8gASgLMhsubm9tb3Mua2VybmVsLnYxLlRhbGx5UXVlcnlIABIqCgNzdW0YECABKAsyGy5ub21vcy5rZXJuZWwudjEuVGFsbHlRdWVyeUgAEjAKB3NwYXRpYWwYESABKAsyHS5ub21vcy5rZXJuZWwudjEuU3BhdGlhbFF1ZXJ5SAASLAoFbmFtZWQYEiABKAsyGy5ub21vcy5rZXJuZWwudjEuTmFtZWRRdWVyeUgAEkkKE2F1dGhvcml6YXRpb25fY2hlY2sYEyABKAsyKi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNoZWNrUmVxdWVzdEgAEksKFGF1dGhvcml6YXRpb25fZXhwYW5kGBQgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0SABCBwoFcXVlcnkikgEKDlF1ZXJ5QXV0aG9yaXR5EhcKD3ByaW5jaXBhbF9jbGFpbRgBIAEoCRISCgphdXRoX3Rva2VuGAIgASgMEhAKCG5vd191bml4GAMgASgEEhUKDWF1dGhvcl9zZWNyZXQYBCABKAwSKgoEa2V5cxgFIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5JbmplY3RlZEtleSI4CgtJbmplY3RlZEtleRINCgVzY29wZRgBIAEoCRINCgVlcG9jaBgCIAEoBBILCgNrZXkYAyABKAwiWwoJUm93c1F1ZXJ5EgoKAmlkGAEgASgJEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBIRCglwcmluY2lwYWwYAyABKAkieQoJUGFnZVF1ZXJ5EgoKAmlkGAEgASgJEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBINCgVsaW1pdBgDIAEoDRINCgVhZnRlchgEIAEoCRIRCglwcmluY2lwYWwYBSABKAkiTAoJQnlJZFF1ZXJ5EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgCIAEoCRIRCglwcmluY2lwYWwYAyABKAkiXAoITm9tb3NSZWYSEQoJd29ya3NwYWNlGAEgASgJEhYKDmFnZ3JlZ2F0ZV90eXBlGAIgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgDIAEoCRIPCgd2ZXJzaW9uGAQgASgJIk4KEFJlc29sdmVSZWZzUXVlcnkSJwoEcmVmcxgBIAMoCzIZLm5vbW9zLmtlcm5lbC52MS5Ob21vc1JlZhIRCglwcmluY2lwYWwYAiABKAkiTgoWUmVmZXJlbmNlVmVyc2lvbnNRdWVyeRI0CgRyZWZzGAEgAygLMiYubm9tb3Mua2VybmVsLnYxLlJlZmVyZW5jZVZlcnNpb25DaGVjayKEAQoVUmVmZXJlbmNlVmVyc2lvbkNoZWNrEikKBnBpbm5lZBgBIAEoCzIZLm5vbW9zLmtlcm5lbC52MS5Ob21vc1JlZhIpCgZzZXJpZXMYAiABKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSFQoNY3VycmVudF9maWVsZBgDIAEoCSJcCgpUYWxseVF1ZXJ5EgoKAmlkGAEgASgJEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBIRCglwcmluY2lwYWwYAyABKAkiXgoMU3BhdGlhbFF1ZXJ5EgoKAmlkGAEgASgJEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBIRCglwcmluY2lwYWwYAyABKAkicQoKTmFtZWRRdWVyeRIyCglvcGVyYXRpb24YASABKA4yHy5ub21vcy5rZXJuZWwudjEuUXVlcnlPcGVyYXRpb24SLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Ii8KE0F1dGhvcml6YXRpb25PYmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSJUChRBdXRob3JpemF0aW9uU3ViamVjdBIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJEhUKCHJlbGF0aW9uGAMgASgJSACIAQFCCwoJX3JlbGF0aW9uIpwBChhSZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBIQCghyZWxhdGlvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0IoEBChhBdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSIwoZY3VycmVudF92ZXJpZmllZF9mcm9udGllchgBIAEoCEgAEhkKD2F0X2xlYXN0X2NvbW1pdBgCIAEoCUgAEhYKDGV4YWN0X2NvbW1pdBgDIAEoCUgAQg0KC3JlcXVpcmVtZW50ImYKHUF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EhQKDGNvbmRpdGlvbl9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3Qi9wIKGUF1dGhvcml6YXRpb25DaGVja1JlcXVlc3QSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBISCgpwZXJtaXNzaW9uGAIgASgJEjYKB3N1YmplY3QYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QSPgoLY29uc2lzdGVuY3kYBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBSADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgGIAEoCUgAiAEBEhsKE2luY2x1ZGVfZXhwbGFuYXRpb24YByABKAhCFgoUX2V4cGVjdGVkX21vZGVsX2hhc2gi7QIKGkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI+Cgtjb25zaXN0ZW5jeRgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSPwoHY29udGV4dBgEIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIgChNleHBlY3RlZF9tb2RlbF9oYXNoGAUgASgJSACIAQESDQoFbGltaXQYBiABKA0SEgoFYWZ0ZXIYByABKAlIAYgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAggASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoQggKBl9hZnRlciK9AQoZUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI4CgV0dXBsZRgBIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSEAoIdHVwbGVfaWQYAiABKAkSGgoSYXNzZXJ0aW9uX2V2ZW50X2lkGAMgASgJEiAKE3Jldm9jYXRpb25fZXZlbnRfaWQYBCABKAlIAIgBAUIWChRfcmV2b2NhdGlvbl9ldmVudF9pZCLhAwoYQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uEkYKCW9wZXJhdGlvbhgBIAEoDjIzLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24uT3BlcmF0aW9uEhAKCHJlbGF0aW9uGAIgASgJEg4KBnJlc3VsdBgDIAEoCBI8CghldmlkZW5jZRgEIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUV2aWRlbmNlEjsKCGNoaWxkcmVuGAUgAygLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbiLfAQoJT3BlcmF0aW9uEhkKFU9QRVJBVElPTl9VTlNQRUNJRklFRBAAEhQKEE9QRVJBVElPTl9ESVJFQ1QQARIeChpPUEVSQVRJT05fQ09NUFVURURfVVNFUlNFVBACEh4KGk9QRVJBVElPTl9UVVBMRV9UT19VU0VSU0VUEAMSEwoPT1BFUkFUSU9OX1VOSU9OEAQSGgoWT1BFUkFUSU9OX0lOVEVSU0VDVElPThAFEhcKE09QRVJBVElPTl9FWENMVVNJT04QBhIXChNPUEVSQVRJT05fQ09ORElUSU9OEAcidwoaQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSIAoYYXV0aG9yaXphdGlvbl9tb2RlbF9oYXNoGAEgASgJEiEKGXJlbGF0aW9uc2hpcF9zdGF0ZV9jb21taXQYAiABKAkSFAoMY29udGV4dF9oYXNoGAMgASgMIr4BChpBdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZRIPCgdhbGxvd2VkGAEgASgIEjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEkMKC2V4cGxhbmF0aW9uGAMgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbkgAiAEBQg4KDF9leHBsYW5hdGlvbiKDAgobQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlEjcKCHN1YmplY3RzGAEgAygLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0EjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEhEKBG5leHQYAyABKAlIAIgBARJDCgtleHBsYW5hdGlvbhgEIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAYgBAUIHCgVfbmV4dEIOCgxfZXhwbGFuYXRpb24icAoNT3V0Ym94UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei0KBWNsb2NrGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2siYwoLU3luY1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIRCglmcm9tX2Jhc2UYAiABKAkSDwoHdG9faGVhZBgDIAEoCSJTCgtUZXN0UmVxdWVzdBI3CghzZXRfcm9vdBgBIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5TZXRUZXN0Um9vdFJlcXVlc3RIAEILCglvcGVyYXRpb24iKAoSU2V0VGVzdFJvb3RSZXF1ZXN0EhIKCnB1YmxpY19rZXkYASABKAwiPQoMVGVzdFJlc3BvbnNlEi0KBnJlc3VsdBgBIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWQitgoKDkN1c3RvZHlSZXF1ZXN0EjcKCnBhY2tfZGVsdGEYCiABKAsyIS5ub21vcy5rZXJuZWwudjEuUGFja0RlbHRhUmVxdWVzdEgAEjcKCmFwcGx5X3BhY2sYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuQXBwbHlQYWNrUmVxdWVzdEgAEjcKCnJlcG9fc3RhdHMYDCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVwb1N0YXRzUmVxdWVzdEgAEj0KDWludGVudHNfYWJvdmUYDSABKAsyJC5ub21vcy5rZXJuZWwudjEuSW50ZW50c0Fib3ZlUmVxdWVzdEgAEj8KDmluc3BlY3RfY2hhbmdlGA4gASgLMiUubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDaGFuZ2VSZXF1ZXN0SAASTgoWZW5jb2RlX3JlZnVzYWxfdmVyZGljdBgPIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5FbmNvZGVSZWZ1c2FsVmVyZGljdFJlcXVlc3RIABJQChdpbnNwZWN0X3JlZnVzYWxfdmVyZGljdBgQIAEoCzItLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0UmVmdXNhbFZlcmRpY3RSZXF1ZXN0SAASNQoJcmVhZF9ibG9iGBEgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRCbG9iUmVxdWVzdEgAEjkKC3Jlc29sdmVfcmVmGBIgASgLMiIubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZSZXF1ZXN0SAASNQoJbGlzdF9yZWZzGBMgASgLMiAubm9tb3Mua2VybmVsLnYxLkxpc3RSZWZzUmVxdWVzdEgAEjUKCXdyaXRlX3JlZhgUIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xcml0ZVJlZlJlcXVlc3RIABI3CgpkZWxldGVfcmVmGBUgASgLMiEubm9tb3Mua2VybmVsLnYxLkRlbGV0ZVJlZlJlcXVlc3RIABJEChF3cml0ZV9tZXRhX2NvbW1pdBgWIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xcml0ZU1ldGFDb21taXRSZXF1ZXN0SAASQgoQbGF3X2Nsb3N1cmVfaW5mbxgXIAEoCzImLm5vbW9zLmtlcm5lbC52MS5MYXdDbG9zdXJlSW5mb1JlcXVlc3RIABJFChFjaGVja3BvaW50X2V4cG9ydBgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50RXhwb3J0UmVxdWVzdEgAEkUKEWNoZWNrcG9pbnRfaW1wb3J0GBkgASgLMigubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0SAASQwoQY2FwYWNpdHlfcmVzZXJ2ZRgaIAEoCzInLm5vbW9zLmtlcm5lbC52MS5DYXBhY2l0eVJlc2VydmVSZXF1ZXN0SAASOwoMcmVzdG9yZV9tYWluGBsgASgLMiMubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluUmVxdWVzdEgAEk4KFnJlc29sdmVfc3RhdGVfcG9zaXRpb24YHCABKAsyLC5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXF1ZXN0SAASRwoScmVzaWRlbnRfZm9vdHByaW50GB0gASgLMikubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50UmVxdWVzdEgAQgsKCW9wZXJhdGlvbiIoChhSZXNpZGVudEZvb3RwcmludFJlcXVlc3QSDAoEZGVlcBgBIAEoCCKfAgoRUmVzaWRlbnRGb290cHJpbnQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIYChByZWFkX21vZGVsX2J5dGVzGAMgASgEEh0KFXJlYWRfbW9kZWxfcnVzdF9ieXRlcxgEIAEoBBIYChBmb2xkX3N0YXRlX2J5dGVzGAUgASgEEhMKC2ZvbGRfaW1hZ2VzGAYgASgNEh8KF3NoYXJlZF9hdHRyaWJ1dGVkX2J5dGVzGAcgASgEEhIKCmFnZ3JlZ2F0ZXMYCCABKAQSNgoKY29tcG9uZW50cxgJIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudENvbXBvbmVudBISCgpjb21wdXRlX3VzGAogASgEImkKEVJlc2lkZW50Q29tcG9uZW50EjQKBGtpbmQYASABKA4yJi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRDb21wb25lbnRLaW5kEg0KBWJ5dGVzGAIgASgEEg8KB2NlaWxpbmcYAyABKAgiygEKGVJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2USNQoJcmVzaWRlbnRzGAEgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50EhwKFGFsbG9jYXRvcl9saXZlX2J5dGVzGAIgASgEEhgKEGF0dHJpYnV0ZWRfYnl0ZXMYAyABKAQSGQoRdW5hY2NvdW50ZWRfYnl0ZXMYBCABKAQSFQoNYWNjb3VudGluZ191cxgFIAEoBBIMCgRkZWVwGAYgASgIIpwBChBQYWNrRGVsdGFSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSHQoQc3RhZ2VkX3BhY2tfZmlsZRgFIAEoCUgCiAEBQgcKBV9oZWFkQgcKBV9iYXNlQhMKEV9zdGFnZWRfcGFja19maWxlInIKEEFwcGx5UGFja1JlcXVlc3QSDAoEcmVwbxgBIAEoCRIOCgRwYWNrGAIgASgMSAASGgoQc3RhZ2VkX3BhY2tfZmlsZRgEIAEoCUgAEhEKBGhlYWQYAyABKAlIAYgBAUIICgZzb3VyY2VCBwoFX2hlYWQiIAoQUmVwb1N0YXRzUmVxdWVzdBIMCgRyZXBvGAEgASgJIqwBChNJbnRlbnRzQWJvdmVSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSDQoFbGltaXQYBSABKAQSGAoQY29tcGxldGVfbG9naWNhbBgGIAEoCBIWCg5jb21wYWN0X3N0b3JlZBgHIAEoCEIHCgVfaGVhZEIHCgVfYmFzZSIrChRJbnNwZWN0Q2hhbmdlUmVxdWVzdBITCgtjaGFuZ2VfdXNkYRgBIAEoDCLfAQoOUmVmdXNhbFZlcmRpY3QSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIQCgNvaWQYAiABKAlIAYgBARITCgZkb21haW4YAyABKAlIAogBARIZCgxkaXJlY3RpdmVfaWQYBCABKAlIA4gBARIUCgdzZXNzaW9uGAUgASgJSASIAQESEQoJcGFya2VkX2F0GAYgASgJEg4KBnJlYXNvbhgHIAEoCUILCglfb2ZmZXJfaWRCBgoEX29pZEIJCgdfZG9tYWluQg8KDV9kaXJlY3RpdmVfaWRCCgoIX3Nlc3Npb24iTwobRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0EjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QiNAocSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdBIUCgx2ZXJkaWN0X3VzZGEYASABKAwiOgoPUmVhZEJsb2JSZXF1ZXN0EgwKBHJlcG8YASABKAkSCwoDb2lkGAIgASgJEgwKBHBhdGgYAyABKAkiNAoRUmVzb2x2ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkiLwoPTGlzdFJlZnNSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoGcHJlZml4GAIgASgJIkIKD1dyaXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCRIOCgZ0YXJnZXQYAyABKAkiMwoQRGVsZXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCSIpCghNZXRhRmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwirgEKFldyaXRlTWV0YUNvbW1pdFJlcXVlc3QSDAoEcmVwbxgBIAEoCRIPCgdwYXJlbnRzGAIgAygJEigKBWZpbGVzGAMgAygLMhkubm9tb3Mua2VybmVsLnYxLk1ldGFGaWxlEg8KB21lc3NhZ2UYBCABKAkSFAoMdGltZV9zZWNvbmRzGAUgASgSEhYKCXJlZmVyZW5jZRgGIAEoCUgAiAEBQgwKCl9yZWZlcmVuY2UiZwoVTGF3Q2xvc3VyZUluZm9SZXF1ZXN0EhQKDGNsb3N1cmVfZmlsZRgBIAEoCRI4CgpjYXBhYmlsaXR5GAIgASgOMiQubm9tb3Mua2VybmVsLnYxLktlcm5lbExhd0NhcGFiaWxpdHkihwEKF0NoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSIQoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYAiABKAlIAIgBAUIXChVfc3RhZ2VkX2Zyb250aWVyX2ZpbGUi6QEKF0NoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoIZnJvbnRpZXIYAiABKAxIABIeChRzdGFnZWRfZnJvbnRpZXJfZmlsZRgGIAEoCUgAEhMKBmN1cnNvchgDIAEoCUgBiAEBEhcKCnN0YXRlX3Jvb3QYBCABKAlIAogBARINCgVzcGFucxgFIAEoCEIRCg9mcm9udGllcl9zb3VyY2VCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdCIxChZDYXBhY2l0eVJlc2VydmVSZXF1ZXN0EhcKD2FnZ3JlZ2F0ZV9jb3VudBgBIAEoBCJpChJSZXN0b3JlTWFpblJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIMCgRoZWFkGAIgASgJEhMKC2RpYWdub3N0aWNzGAMgASgIImkKG1Jlc29sdmVTdGF0ZVBvc2l0aW9uUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCW1haW5faGVhZBgCIAEoCRIVCg1oaW50ZWRfY29tbWl0GAMgASgJEhIKCnN0YXRlX3Jvb3QYBCABKAkiwgoKD0N1c3RvZHlSZXNwb25zZRI4CgpwYWNrX2RlbHRhGAogASgLMiIubm9tb3Mua2VybmVsLnYxLlBhY2tEZWx0YVJlc3BvbnNlSAASOAoKYXBwbHlfcGFjaxgLIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5BcHBseVBhY2tSZXNwb25zZUgAEjgKCnJlcG9fc3RhdHMYDCABKAsyIi5ub21vcy5rZXJuZWwudjEuUmVwb1N0YXRzUmVzcG9uc2VIABI+Cg1pbnRlbnRzX2Fib3ZlGA0gASgLMiUubm9tb3Mua2VybmVsLnYxLkludGVudHNBYm92ZVJlc3BvbnNlSAASQAoOaW5zcGVjdF9jaGFuZ2UYDiABKAsyJi5ub21vcy5rZXJuZWwudjEuSW5zcGVjdENoYW5nZVJlc3BvbnNlSAASTwoWZW5jb2RlX3JlZnVzYWxfdmVyZGljdBgPIAEoCzItLm5vbW9zLmtlcm5lbC52MS5FbmNvZGVSZWZ1c2FsVmVyZGljdFJlc3BvbnNlSAASUQoXaW5zcGVjdF9yZWZ1c2FsX3ZlcmRpY3QYECABKAsyLi5ub21vcy5rZXJuZWwudjEuSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2VIABI2CglyZWFkX2Jsb2IYESABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVhZEJsb2JSZXNwb25zZUgAEjoKC3Jlc29sdmVfcmVmGBIgASgLMiMubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZSZXNwb25zZUgAEjYKCWxpc3RfcmVmcxgTIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5MaXN0UmVmc1Jlc3BvbnNlSAASMgoJd3JpdGVfcmVmGBQgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZEgAEjMKCmRlbGV0ZV9yZWYYFSABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkSAASRQoRd3JpdGVfbWV0YV9jb21taXQYFiABKAsyKC5ub21vcy5rZXJuZWwudjEuV3JpdGVNZXRhQ29tbWl0UmVzcG9uc2VIABJDChBsYXdfY2xvc3VyZV9pbmZvGBcgASgLMicubm9tb3Mua2VybmVsLnYxLkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2VIABJGChFjaGVja3BvaW50X2V4cG9ydBgYIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50RXhwb3J0UmVzcG9uc2VIABJGChFjaGVja3BvaW50X2ltcG9ydBgZIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50SW1wb3J0UmVzcG9uc2VIABJEChBjYXBhY2l0eV9yZXNlcnZlGBogASgLMigubm9tb3Mua2VybmVsLnYxLkNhcGFjaXR5UmVzZXJ2ZVJlc3BvbnNlSAASPAoMcmVzdG9yZV9tYWluGBsgASgLMiQubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluUmVzcG9uc2VIABJPChZyZXNvbHZlX3N0YXRlX3Bvc2l0aW9uGBwgASgLMi0ubm9tb3Mua2VybmVsLnYxLlJlc29sdmVTdGF0ZVBvc2l0aW9uUmVzcG9uc2VIABJIChJyZXNpZGVudF9mb290cHJpbnQYHSABKAsyKi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnRSZXNwb25zZUgAQgsKCW9wZXJhdGlvbiIwChFQYWNrRGVsdGFSZXNwb25zZRIMCgRwYWNrGAEgASgMEg0KBWJ5dGVzGAIgASgEIjwKEUFwcGx5UGFja1Jlc3BvbnNlEhQKDG9iamVjdF9jb3VudBgBIAEoBBIRCglwYWNrX2hhc2gYAiABKAkipwEKEVJlcG9TdGF0c1Jlc3BvbnNlEhMKC3RvdGFsX2J5dGVzGAEgASgEEhQKDG9iamVjdF9ieXRlcxgCIAEoBBIVCg1sb29zZV9vYmplY3RzGAMgASgEEhMKC2xvb3NlX2J5dGVzGAQgASgEEhIKCnBhY2tfZmlsZXMYBSABKAQSEgoKcGFja19ieXRlcxgGIAEoBBITCgtpbmRleF9ieXRlcxgHIAEoBCLiAQoMSW50ZW50UmVjb3JkEgsKA29pZBgBIAEoCRIRCglpbnRlbnRfaWQYAiABKAkSDgoGZG9tYWluGAMgASgJEhEKCWRpcmVjdGl2ZRgEIAEoCRITCgtjaGFuZ2VfdXNkYRgFIAEoDBIuCghzZW1hbnRpYxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBJKChV0cmFuc3BvcnRfcmVxdWlyZW1lbnQYByABKA4yKy5ub21vcy5rZXJuZWwudjEuSW50ZW50VHJhbnNwb3J0UmVxdWlyZW1lbnQiRgoUSW50ZW50c0Fib3ZlUmVzcG9uc2USLgoHaW50ZW50cxgBIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRSZWNvcmQiQgoTTm9taW5hbENhbGxJZGVudGl0eRITCgtkb21haW5fcGF0aBgBIAEoCRIWCg5kaXJlY3RpdmVfcGF0aBgCIAEoCSKIAQoYTGlmZWN5Y2xlSW5zdGFsbElkZW50aXR5Eh8KF3RhcmdldF9jbG9zdXJlX2lkZW50aXR5GAEgASgJEhQKDGluc3RhbGxlZF9ieRgCIAEoCRI1CgVwaGFzZRgDIAEoDjImLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsUGhhc2UiWgodV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQSEQoJd29ya3NwYWNlGAEgASgJEhMKC3NvdXJjZV9oZWFkGAIgASgJEhEKCWZvbGRfcm9vdBgDIAEoCSK0AgoVSW5zcGVjdENoYW5nZVJlc3BvbnNlEi4KCHNlbWFudGljGAEgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCWludGVudF9pZBgCIAEoCRIyCgRjYWxsGAMgASgLMiQubm9tb3Mua2VybmVsLnYxLk5vbWluYWxDYWxsSWRlbnRpdHkSEAoIYXV0aG9yZWQYBCABKAgSRAoRbGlmZWN5Y2xlX2luc3RhbGwYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuTGlmZWN5Y2xlSW5zdGFsbElkZW50aXR5EkwKFHJlcXVpcmVkX3Jlc2lkZW5jaWVzGAYgAygLMi4ubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVJlc2lkZW5jeVJlcXVpcmVtZW50IkwKHFJlc29sdmVTdGF0ZVBvc2l0aW9uUmVzcG9uc2USGgoNcmVzb2x2ZWRfaGVhZBgBIAEoCUgAiAEBQhAKDl9yZXNvbHZlZF9oZWFkIjQKHEVuY29kZVJlZnVzYWxWZXJkaWN0UmVzcG9uc2USFAoMdmVyZGljdF91c2RhGAEgASgMIlEKHUluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlEjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QiLwoQUmVhZEJsb2JSZXNwb25zZRINCgVmb3VuZBgBIAEoCBIMCgRibG9iGAIgASgMIi4KElJlc29sdmVSZWZSZXNwb25zZRIQCgNvaWQYASABKAlIAIgBAUIGCgRfb2lkIisKCVJlZlJlY29yZBIRCglyZWZlcmVuY2UYASABKAkSCwoDb2lkGAIgASgJIjwKEExpc3RSZWZzUmVzcG9uc2USKAoEcmVmcxgBIAMoCzIaLm5vbW9zLmtlcm5lbC52MS5SZWZSZWNvcmQiDgoMQWNrbm93bGVkZ2VkIiYKF1dyaXRlTWV0YUNvbW1pdFJlc3BvbnNlEgsKA29pZBgBIAEoCSKDAQoWTGF3Q2xvc3VyZUluZm9SZXNwb25zZRIQCghpZGVudGl0eRgBIAEoCRIZChFyb290X2xvZ2ljYWxfcGF0aBgCIAEoCRITCgthc3NldF9jb3VudBgDIAEoBBISCgpwcmltX2NvdW50GAQgASgEEhMKC2RvbWFpbl9rZXlzGAUgAygJIu8CChhDaGVja3BvaW50RXhwb3J0UmVzcG9uc2USDQoFZW1wdHkYASABKAgSEwoGY3Vyc29yGAIgASgJSACIAQESEAoIZnJvbnRpZXIYAyABKAwSFwoKc3RhdGVfcm9vdBgEIAEoCUgBiAEBEhIKCnN0YXRlX3RyZWUYBSABKAgSDgoGcGlubmVkGAYgASgIEhsKE3JlYWRfaW5kZXhfc25hcHNob3QYByABKAgSIwobcmVhZF9pbmRleF9zbmFwc2hvdF9wZW5kaW5nGAggASgIEiQKF3JlYWRfaW5kZXhfc3FsaXRlX2J5dGVzGAkgASgESAKIAQESJQoYcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzGAogASgESAOIAQFCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIaChhfcmVhZF9pbmRleF9zcWxpdGVfYnl0ZXNCGwoZX3JlYWRfaW5kZXhfY3VzdG9keV9ieXRlcyKeAgoYQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlEhAKCHJlc3RvcmVkGAEgASgIEhMKBnJlYXNvbhgCIAEoCUgAiAEBEhcKD2Zyb250aWVyX3NlZWRlZBgDIAEoCBIlCh1mcm9udGllcl92ZXJpZmljYXRpb25fcGVuZGluZxgEIAEoCBIXCg9hZ2dyZWdhdGVfY291bnQYBSABKAQSKwoFc3BhbnMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEwoGY3Vyc29yGAcgASgJSAGIAQESEQoJcmVhZF9vbmx5GAggASgIEhcKD2xhenlfcmVhZF9pbmRleBgJIAEoCEIJCgdfcmVhc29uQgkKB19jdXJzb3IiSgoXQ2FwYWNpdHlSZXNlcnZlUmVzcG9uc2USFwoPYWdncmVnYXRlX2NvdW50GAEgASgEEhYKDnJlc2VydmVkX2J5dGVzGAIgASgEIvkCChBSZXN0b3JlTWFpblNwYW5zEhAKCHRvdGFsX3VzGAEgASgEEhoKEmxpdmVfcmVmX2xvb2t1cF91cxgCIAEoBBIYChB0YXJnZXRfZGVjb2RlX3VzGAMgASgEEiQKHGN1c3RvZHlfY29tcGxldGVuZXNzX3JlYWRfdXMYBCABKAQSGQoRcXVhcmFudGluZV9yZWZfdXMYBSABKAQSJQodY2hhaW5fc2lnbmF0dXJlX2xhd19yZXBsYXlfdXMYBiABKAQSGQoRdmVyZGljdF9kZWNvZGVfdXMYByABKAQSIwobcHJvbW90ZV9hbmRfY2xlYW51cF9yZWZzX3VzGAggASgEEhsKE2Zyb250aWVyX3JlYnVpbGRfdXMYCSABKAQSGQoRZnJvbnRpZXJfc3RvcmVfdXMYCiABKAQSPQoMdmVyaWZpY2F0aW9uGAsgASgLMicubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRGlhZ25vc3RpY3MipAEKE1Jlc3RvcmVNYWluUmVzcG9uc2USDAoEaGVhZBgBIAEoCRIQCgh2ZXJpZmllZBgCIAEoCBIMCgR3YWxrGAMgASgJEjAKBXNwYW5zGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluU3BhbnMSLQoHdmVyZGljdBgFIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCKbAgoKTm9tb3NWYWx1ZRIlCgRudWxsGAEgASgLMhUubm9tb3Mua2VybmVsLnYxLk51bGxIABIRCgdib29sZWFuGAIgASgISAASGAoOc2lnbmVkX2ludGVnZXIYAyABKBJIABIaChB1bnNpZ25lZF9pbnRlZ2VyGAQgASgESAASGAoOZmxvYXRpbmdfcG9pbnQYBSABKAFIABIOCgR0ZXh0GAYgASgJSAASDwoFYnl0ZXMYByABKAxIABIqCgRsaXN0GAggASgLMhoubm9tb3Mua2VybmVsLnYxLk5vbW9zTGlzdEgAEi4KBm9iamVjdBgJIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEgAQgYKBGtpbmQiBgoETnVsbCI4CglOb21vc0xpc3QSKwoGdmFsdWVzGAEgAygLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWUikwEKC05vbW9zU3RydWN0EjgKBmZpZWxkcxgBIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdC5GaWVsZHNFbnRyeRpKCgtGaWVsZHNFbnRyeRILCgNrZXkYASABKAkSKgoFdmFsdWUYAiABKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZToCOAEq6RIKEUtlcm5lbFJlZnVzYWxDb2RlEiMKH0tFUk5FTF9SRUZVU0FMX0NPREVfVU5TUEVDSUZJRUQQABIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX0JBRF9TSUdOQVRVUkUQARIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX1VOQVVUSE9SSVpFRBACEicKI0tFUk5FTF9SRUZVU0FMX0NPREVfUE9MSUNZX0RJU0FCTEVEEAMSKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkNFUlRJRklFRF9QT0xJQ1kQBBIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1JFRkVSRU5USUFMEAUSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9QT0lOVF9TVEFURV9VTkFWQUlMQUJMRRAGEiQKIEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0VYQ0VFREVEEAcSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBfQ09VTlRfVU5BVkFJTEFCTEUQCBIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0VWSURFTkNFX1VOQkFDS0VEEAkSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9PUlBIQU5fUkVDRUlQVBAKEjYKMktFUk5FTF9SRUZVU0FMX0NPREVfUkVDRUlQVF9PTl9URVJNSU5BTF9PQkxJR0FUSU9OEAsSIgoeS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfTUlOVEVEEAwSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9ET01BSU5fTElGRUNZQ0xFEA0SKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9UWVBFX1RBR19NSVNNQVRDSBAOEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfUkVUSVJFRF9SRUFEX1NVUkZBQ0UQDxIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0NST1NTX1dPUktTUEFDRV9ERUNMSU5FRBAQEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQUdHUkVHQVRFX0lOVkFSSUFOVBAREisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfV09SS1NQQUNFX0lOVkFSSUFOVBASEi4KKktFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9DT05GTElDVBATEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfUkVRVUlSRUQQFBI0CjBLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1VOREVDTEFSRUQQFRIxCi1LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX0lOVkFMSUQQFhIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1NUQUxFEBcSMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1VOREVDTEFSRUQQGBItCilLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfUFJJVkFURRAZEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTkRFQ0xBUkVEEBoSMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9LRVkQGxI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5UUlVTVEVEX1NPVVJDRRAcEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9GT1JHRUQQHRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfU1RBTEUQHhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfT1ZFUlNJWkUQHxI3CjNLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRElTSE9OT1JFRF9TT1VSQ0UQIBI1CjFLRVJORUxfUkVGVVNBTF9DT0RFX0VRVUlWT0NBVElPTl9FVklERU5DRV9JTlZBTElEECESMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9SRUNFSVBUX0lOVkFMSUQQIhIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9ST1NURVJfTUlTTUFUQ0gQIxIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9FUE9DSF9OT1RfTU9OT1RPTklDECQSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9XUklURV9FUE9DSF9TVEFMRRAlEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfRU5WRUxPUEVfU0lEX01JU01BVENIECYSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9SRVZPS0VEX01FTUJFUl9SRVNVUlJFQ1RFRBAnEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRk9SR0VEX1BSSU5DSVBBTBAoEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfS0VZX0FOQ0hPUhApEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfUkVDT1ZFUlkQKhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1NVUkZBQ0VEX0JBU0lTX0FIRUFEECsSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9TSUdORVJfRVBPQ0hfT1VUX09GX1dJTkRPVxAsEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfRVZPTFZFX1JFRlVTRUQQLRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEFUSU9OX0lOVkFMSUQQLhItCilLRVJORUxfUkVGVVNBTF9DT0RFX1BBUkVOVF9ESURfTk9UX0FUVEVTVBAvEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfQ0VSVF9DSEFJTl9CUk9LRU4QMBIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX05PVF9ST09URURfQVRfUk9PVBAxEioKJktFUk5FTF9SRUZVU0FMX0NPREVfREVMRUdBVElPTl9JTlZBTElEEDISJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9QTEFOX1JFSkVDVEVEEDMqigEKD1ZlcmlmeUNoYWluV2FsaxIhCh1WRVJJRllfQ0hBSU5fV0FMS19VTlNQRUNJRklFRBAAEhoKFlZFUklGWV9DSEFJTl9XQUxLX0ZVTEwQARIcChhWRVJJRllfQ0hBSU5fV0FMS19TVUZGSVgQAhIaChZWRVJJRllfQ0hBSU5fV0FMS19NRU1PEAMqhQwKDlF1ZXJ5T3BlcmF0aW9uEh8KG1FVRVJZX09QRVJBVElPTl9VTlNQRUNJRklFRBAAEhwKGFFVRVJZX09QRVJBVElPTl9FWFRSRU1VTRABEiUKIVFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUUxACEiwKKFFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUX1NVTU1BUlkQAxIgChxRVUVSWV9PUEVSQVRJT05fUkVBRF9QT1NUVVJFEAQSHwobUVVFUllfT1BFUkFUSU9OX0NVUlJFTlRfTEFXEAUSIwofUVVFUllfT1BFUkFUSU9OX0lOVEVSRkFDRV9PRkZFUhAGEicKI1FVRVJZX09QRVJBVElPTl9SRUxBVElPTl9HQVRFX09GRkVSEAcSHQoZUVVFUllfT1BFUkFUSU9OX1NDRU5FX0xBVxAIEiEKHVFVRVJZX09QRVJBVElPTl9JTlNUQUxMRURfTEFXEAkSHAoYUVVFUllfT1BFUkFUSU9OX0RFU0NSSUJFEAoSIAocUVVFUllfT1BFUkFUSU9OX0tFUk5FTF9TVEFNUBALEiMKH1FVRVJZX09QRVJBVElPTl9ERVZFTE9QRVJfU1BBTlMQDBIpCiVRVUVSWV9PUEVSQVRJT05fREVDTEFSRURfQ0FQQUJJTElUSUVTEA0SHQoZUVVFUllfT1BFUkFUSU9OX1JFQURJTkVTUxAOEiQKIFFVRVJZX09QRVJBVElPTl9QUk9KRUNUSU9OX1NUQVRTEA8SJQohUVVFUllfT1BFUkFUSU9OX01FTU9SWV9EUk9QX1BST0JFEBASGAoUUVVFUllfT1BFUkFUSU9OX1dBUk0QERIbChdRVUVSWV9PUEVSQVRJT05fUkVGUkVTSBASEiAKHFFVRVJZX09QRVJBVElPTl9WRVJJRllfQ0hBSU4QExIlCiFRVUVSWV9PUEVSQVRJT05fSElTVE9SWV9QUkVGTElHSFQQFBIZChVRVUVSWV9PUEVSQVRJT05fUk9VVEUQFRIYChRRVUVSWV9PUEVSQVRJT05fTUlOVBAWEiEKHVFVRVJZX09QRVJBVElPTl9DUllQVE9fS0VZR0VOEBcSJQohUVVFUllfT1BFUkFUSU9OX0NSWVBUT19TRUFMX0ZJRUxEEBgSLAooUVVFUllfT1BFUkFUSU9OX0NSWVBUT19CTElORF9JTkRFWF9UT0tFThAZEioKJlFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfU0NPUEVfS0VZEBoSLworUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9ERVZJQ0VfUkVRVUVTVBAbEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9BUFBST1ZBTBAcEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9SRUNPVkVSWRAdEiMKH1FVRVJZX09QRVJBVElPTl9DUllQVE9fV1JBUF9LRVkQHhIlCiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1VOV1JBUF9LRVkQHxIhCh1RVUVSWV9PUEVSQVRJT05fQVVUSE9SX0tFWUdFThAgEiQKIFFVRVJZX09QRVJBVElPTl9BVFRFU1RBVElPTl9TSUdOECESIAocUVVFUllfT1BFUkFUSU9OX1JFQ0VJUFRfUEFUSBAiEh0KGVFVRVJZX09QRVJBVElPTl9DRVJUX1NJR04QIxIlCiFRVUVSWV9PUEVSQVRJT05fQklSVEhfVFJVU1RfU1RBVEUQJBIhCh1RVUVSWV9PUEVSQVRJT05fRVJBX0NFUlRfU0lHThAlEigKJFFVRVJZX09QRVJBVElPTl9ERUxFR0FUSU9OX0NFUlRfU0lHThAmEikKJVFVRVJZX09QRVJBVElPTl9DQU5PTklDQUxJWkVfRlJPTlRJRVIQJxIrCidRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX1BST0pFQ1RJT04QKCrSAgoVUmVzaWRlbnRDb21wb25lbnRLaW5kEicKI1JFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1VOU1BFQ0lGSUVEEAASJgoiUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfRk9MRF9TVEFURRABEi0KKVJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1JFQURfTU9ERUxfU1FMSVRFEAISLgoqUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfUkVBRF9NT0RFTF9JTkRFWEVTEAMSLQopUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfU0hBUkVEX0FUVFJJQlVURUQQBBIsCihSRVNJREVOVF9DT01QT05FTlRfS0lORF9XT1JLU1BBQ0VfQ0FDSEVTEAUSLAooUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfR0lUX09CSkVDVF9DQUNIRRAGKmwKE0tlcm5lbExhd0NhcGFiaWxpdHkSJQohS0VSTkVMX0xBV19DQVBBQklMSVRZX1VOU1BFQ0lGSUVEEAASLgoqS0VSTkVMX0xBV19DQVBBQklMSVRZX1NUQUdFX1pFUk9fQk9PVFNUUkFQEAEqqAEKGkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50EiwKKElOVEVOVF9UUkFOU1BPUlRfUkVRVUlSRU1FTlRfVU5TUEVDSUZJRUQQABIuCipJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1NFQUxFRF9DSEFOR0UQARIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX0NPTU1JVF9UUkVFEAIqiQEKFUxpZmVjeWNsZUluc3RhbGxQaGFzZRInCiNMSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9VTlNQRUNJRklFRBAAEiIKHkxJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX0FDVElWRRABEiMKH0xJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX1BFTkRJTkcQAjJZChJOb21vc0tlcm5lbFNlcnZpY2USQwoEQ2FsbBIcLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVxdWVzdBodLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVzcG9uc2ViBnByb3RvMw");
5345
5345
  var CallRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 0);
5346
5346
  var CallResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 1);
5347
5347
  var WorkspaceTargetSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 21);
@@ -6698,7 +6698,7 @@ function prepareManagedPromotion(report, candidateHash, domain, opts = {}) {
6698
6698
  domainHash: candidateHash,
6699
6699
  ...opts.replaces ? { replaces: opts.replaces } : {},
6700
6700
  retireReplaced: opts.retireReplaced ?? false,
6701
- ...opts.dispositions ? { dispositions: opts.dispositions } : {},
6701
+ ...report.dispositions ? { dispositions: report.dispositions } : {},
6702
6702
  preflight
6703
6703
  }
6704
6704
  };
@@ -6714,7 +6714,6 @@ function prepareManagedRestoration(report, currentHash, priorHash, domain, opts
6714
6714
  }
6715
6715
  const acceptanceReason = opts.acceptanceReason?.trim();
6716
6716
  const prepared = prepareManagedPromotion(report, priorHash, domain, {
6717
- dispositions: report.dispositions,
6718
6717
  ...acceptanceReason ? { acceptanceReason } : {}
6719
6718
  });
6720
6719
  if (!prepared.ok) {
@@ -7204,7 +7203,14 @@ function createGovernanceOffers(ctx) {
7204
7203
  rows = JSON.parse(call("query", { queryBytes: qBytes2({ kind: "query", queryId: "relationTuplesByObject", paramsJson: JSON.stringify({ object }) }) })) || [];
7205
7204
  } else {
7206
7205
  const headers = authToken ? { Authorization: `Bearer ${authToken}`, "x-nomos-auth": authToken } : authHeaders;
7207
- const r = await _fetch(`${base}/v2/workspaces/${parent}/relationTuplesByObject?object=${encodeURIComponent(object)}`, { headers });
7206
+ const route = await resolveFrameworkRoute({
7207
+ parent,
7208
+ operationId: "relationTuplesByObject",
7209
+ method: "get",
7210
+ token: authToken,
7211
+ principal: p
7212
+ });
7213
+ const r = await _fetch(`${base}/v2/workspaces/${parent}${route.path}?object=${encodeURIComponent(object)}`, { headers });
7208
7214
  const text2 = await r.text();
7209
7215
  let body;
7210
7216
  try {
@@ -7258,7 +7264,14 @@ function createGovernanceOffers(ctx) {
7258
7264
  rows = JSON.parse(call("query", { queryBytes: qBytes2({ kind: "query", queryId: "relationTuplesByObject", paramsJson: JSON.stringify({ object }) }) })) || [];
7259
7265
  } else {
7260
7266
  const headers = authToken ? { Authorization: `Bearer ${authToken}`, "x-nomos-auth": authToken } : authHeaders;
7261
- const r = await _fetch(`${base}/v2/workspaces/${ws}/relationTuplesByObject?object=${encodeURIComponent(object)}`, { headers });
7267
+ const route = await resolveFrameworkRoute({
7268
+ parent: ws,
7269
+ operationId: "relationTuplesByObject",
7270
+ method: "get",
7271
+ token: authToken,
7272
+ principal: subj
7273
+ });
7274
+ const r = await _fetch(`${base}/v2/workspaces/${ws}${route.path}?object=${encodeURIComponent(object)}`, { headers });
7262
7275
  const text2 = await r.text();
7263
7276
  let body;
7264
7277
  try {
@@ -9265,7 +9278,7 @@ ${String(commit).toLowerCase()}`;
9265
9278
  domain,
9266
9279
  candidateHash,
9267
9280
  atHash,
9268
- ...opts.dispositions ? { dispositions: opts.dispositions } : {}
9281
+ ackBy: connectionPrincipal
9269
9282
  })
9270
9283
  }));
9271
9284
  });
@@ -9278,8 +9291,7 @@ ${String(commit).toLowerCase()}`;
9278
9291
  }
9279
9292
  const prepared = prepareManagedPromotion(report, candidateHash, domain, {
9280
9293
  ...currentHash && currentHash !== candidateHash ? { replaces: currentHash } : {},
9281
- ...opts.because !== void 0 ? { acceptanceReason: opts.because } : {},
9282
- ...opts.dispositions ? { dispositions: opts.dispositions } : {}
9294
+ ...opts.because !== void 0 ? { acceptanceReason: opts.because } : {}
9283
9295
  });
9284
9296
  if (!prepared.ok) return prepared;
9285
9297
  try {
@@ -13492,16 +13504,34 @@ function applicationError(message, code, cause) {
13492
13504
  if (cause !== void 0) error.cause = cause;
13493
13505
  return error;
13494
13506
  }
13495
- async function ensureGeneratedModelCurrent(application) {
13507
+ async function ensureGeneratedModelCurrent(application, approveModel) {
13496
13508
  if (application.model?.adopt === void 0) {
13497
13509
  throw applicationError(
13498
13510
  "This generated application has no model lifecycle surface and cannot prove its plans are current.",
13499
13511
  "nomos.application.model_lifecycle_missing"
13500
13512
  );
13501
13513
  }
13502
- const adoption = await application.model.adopt();
13514
+ let adoption = await application.model.adopt();
13515
+ if (adoption.status === "needs-staging" && adoption.stage !== void 0) {
13516
+ adoption = await adoption.stage();
13517
+ }
13503
13518
  if (adoption.status === "adopted") return;
13504
13519
  if (adoption.status === "needs-decision") {
13520
+ if (approveModel !== void 0 && adoption.accept !== void 0) {
13521
+ const approval = await approveModel({
13522
+ summary: adoption.summary,
13523
+ review: adoption.review
13524
+ });
13525
+ const because = approval.because.trim();
13526
+ if (!because) {
13527
+ throw applicationError(
13528
+ "Model approval must state the business reason for the change.",
13529
+ "nomos.application.model_decision_reason_missing"
13530
+ );
13531
+ }
13532
+ adoption = await adoption.accept(because);
13533
+ if (adoption.status === "adopted") return;
13534
+ }
13505
13535
  throw applicationError(
13506
13536
  "This application model changes prior business outcomes and needs an attributed migration decision before the app can write.",
13507
13537
  "nomos.application.model_decision_required",
@@ -13624,7 +13654,7 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
13624
13654
  ...environment?.NOMOS_TEST_K_ROOT_PUBLIC ? { __testKRootPublic: environment.NOMOS_TEST_K_ROOT_PUBLIC } : {}
13625
13655
  });
13626
13656
  const applicationObject = measureOpenSync("bind generated business API", () => bind(holon2, user));
13627
- await ensureGeneratedModelCurrent(applicationObject);
13657
+ await ensureGeneratedModelCurrent(applicationObject, options.approveModel);
13628
13658
  await measureOpen("prepare generated entry commands", () => prepareGeneratedEntryCommands(holon2, options.readyCommands, options.onPerformance));
13629
13659
  const stop = holon2.autoSync({
13630
13660
  onResult: (result) => {
@@ -13871,7 +13901,6 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
13871
13901
  parent: application,
13872
13902
  principal,
13873
13903
  subject,
13874
- lawHash: options.lawHash,
13875
13904
  device: { secret, public: publicKey },
13876
13905
  authToken,
13877
13906
  idToken: authToken,
@@ -13882,9 +13911,13 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
13882
13911
  const verdict = birth.verify;
13883
13912
  if (verdict !== void 0 && verdict.valid !== true) throw new Error(`the born application failed replay verification: ${String(verdict.error ?? "unknown")}`);
13884
13913
  } else if (!hadDurableSecret) {
13885
- await measureOpen("enrol application device with its parent", () => authorityHolon.ensureParentSignerEnrollment({
13886
- parent: application,
13887
- principal,
13914
+ await measureOpen("enrol application device in its private custody", () => authorityHolon.ensureParentSignerEnrollment({
13915
+ // The write gate that this device will use is the receiving-group workspace itself.
13916
+ // The application root authorises/births that home; it is not a substitute signer index.
13917
+ parent: receivingGroup,
13918
+ // The author gate speaks canonical Nomos principals. A provider subject is deliberately
13919
+ // opaque and may contain its own namespace separators; never enrol that raw value as the actor.
13920
+ principal: subject,
13888
13921
  publicKey,
13889
13922
  authorSecret: secret,
13890
13923
  authToken,
@@ -13904,8 +13937,8 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
13904
13937
  if (verified.valid !== true) throw new Error(`the private authority context failed replay verification: ${String(verified.error ?? "unknown")}`);
13905
13938
  await measureOpen("save application bootstrap progress", () => store.saveText(journalState, "verified"));
13906
13939
  try {
13907
- await measureOpen("confirm parent signer enrolment", () => authorityHolon.ensureParentSignerEnrollment({
13908
- parent: application,
13940
+ await measureOpen("confirm private-custody signer enrolment", () => authorityHolon.ensureParentSignerEnrollment({
13941
+ parent: receivingGroup,
13909
13942
  principal: subject,
13910
13943
  authorSecret: secret,
13911
13944
  authToken,
@@ -13930,7 +13963,7 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
13930
13963
  } catch {
13931
13964
  }
13932
13965
  const applicationObject = measureOpenSync("bind generated business API", () => bind(holon, user));
13933
- await measureOpen("confirm generated model is current", () => ensureGeneratedModelCurrent(applicationObject));
13966
+ await measureOpen("confirm generated model is current", () => ensureGeneratedModelCurrent(applicationObject, options.approveModel));
13934
13967
  await measureOpen("prepare generated entry commands", () => prepareGeneratedEntryCommands(holon, options.readyCommands, options.onPerformance));
13935
13968
  phase = "current";
13936
13969
  autoSync = holon.autoSync({
@@ -27,6 +27,7 @@ import { createHash } from "node:crypto";
27
27
  import { z } from "zod";
28
28
 
29
29
  import type { AggregateHandle } from "./aggregate.js";
30
+ import type { Field } from "./fields.js";
30
31
  import type { Directive } from "./directive.js";
31
32
  import type { DomainModule, PermissionVocabulary, DartImport } from "./codegen_dart.js";
32
33
  import type { AnyCount } from "./count.js";
@@ -83,6 +84,11 @@ import {
83
84
  applyConflictPolicyResolvers,
84
85
  conflictPoliciesOf,
85
86
  } from "./conflicts.js";
87
+ import {
88
+ applyFieldEvolutionsToAggregates,
89
+ fieldEvolutionsOf,
90
+ retirementsOf,
91
+ } from "./evolution.js";
86
92
  import {
87
93
  expandBusinessBirthExports,
88
94
  isBusinessBirthDirective,
@@ -200,6 +206,8 @@ export interface DomainModuleSpec {
200
206
  export function composeDomainModule(spec: DomainModuleSpec): DomainModule {
201
207
  const domain = spec.domain ?? spec.name;
202
208
  const conflictPolicies = conflictPoliciesOf(spec.modules, domain);
209
+ const fieldEvolutions = fieldEvolutionsOf(spec.modules);
210
+ const retirements = retirementsOf(spec.modules, domain);
203
211
  const applicationLanguage = applicationLanguageOf(spec.modules, domain);
204
212
  let merged: Mod = {};
205
213
  for (const m of spec.modules) merged = { ...merged, ...m };
@@ -520,11 +528,34 @@ export function composeDomainModule(spec: DomainModuleSpec): DomainModule {
520
528
  directives.push(dir);
521
529
  autoDeclaredEnsures.push(ty);
522
530
  }
523
- const aggregates = applyConflictPoliciesToAggregates(
524
- [...byId.values()],
525
- conflictPolicies,
531
+ const aggregates = applyFieldEvolutionsToAggregates(
532
+ applyConflictPoliciesToAggregates(
533
+ [...byId.values()],
534
+ conflictPolicies,
535
+ domain,
536
+ ),
537
+ fieldEvolutions,
526
538
  domain,
527
539
  );
540
+ const currentAggregates = new Map(aggregates.map((aggregate) => [aggregate.id, aggregate]));
541
+ for (const retired of retirements) {
542
+ const current = currentAggregates.get(retired.aggregate);
543
+ if (retired.kind === "aggregate" && current !== undefined) {
544
+ throw new Error(
545
+ `domain '${domain}' declares '${retired.aggregate}' both current and retired`,
546
+ );
547
+ }
548
+ if (
549
+ retired.kind === "field" &&
550
+ current !== undefined &&
551
+ retired.field !== undefined &&
552
+ (current.fields as Record<string, Field>)[retired.field] !== undefined
553
+ ) {
554
+ throw new Error(
555
+ `domain '${domain}' declares '${retired.aggregate}.${retired.field}' both current and retired`,
556
+ );
557
+ }
558
+ }
528
559
  const directiveIds = new Set(directives.map((d) => d.id));
529
560
  for (const task of declaredCapabilities) {
530
561
  for (const directive of [task.obligation, task.complete, task.fail, task.block, task.deadLetter]) {
@@ -855,6 +886,9 @@ export function composeDomainModule(spec: DomainModuleSpec): DomainModule {
855
886
  // hash-bearing manifest; payload-field tracing also drives generated typed references.
856
887
  // Omit-when-empty because ordinary domains need no resolver metadata.
857
888
  ...(surfacedResolvers.length > 0 ? { surfacedResolvers } : {}),
889
+ // Explicit authored tombstones are law. The compiler identity registry may remember
890
+ // every disappearance, but only these declarations permit an activation to retire it.
891
+ ...(retirements.length > 0 ? { retirements } : {}),
858
892
  ...(queries.length > 0 ? { queries } : {}),
859
893
  ...(counts.length > 0 ? { counts } : {}),
860
894
  ...(spatials.length > 0 ? { spatials } : {}),
@@ -17,6 +17,8 @@ import { pathToFileURL } from "node:url";
17
17
  import { composeDomainModule, type Mod } from "./build_package.js";
18
18
  import type { DomainModule } from "./codegen_dart.js";
19
19
  import { bindEnumTypeExports } from "./enum_type.js";
20
+ import { discoverEvolutionModulePaths, isEvolutionModulePath } from "./evolution_files.js";
21
+ import { assertEvolutionModuleExports } from "./evolution.js";
20
22
  import { checkDomainModules, formatFindings, hasRefusal, type Finding } from "./law_check.js";
21
23
  import { LawSourceMap } from "./law_source_map.js";
22
24
  import {
@@ -105,9 +107,18 @@ export async function loadComposedModulesWithSources(
105
107
  const files: string[] = [];
106
108
  for (const rel of d.modules) {
107
109
  const abs = path.resolve(cfgDir, rel);
110
+ if (isEvolutionModulePath(abs)) {
111
+ fail(
112
+ `domain '${d.key}': ${rel} is an evolution concern; move it under ` +
113
+ `evolutions/${d.key}/ and remove it from feature modules so it cannot enter QuickJS`,
114
+ );
115
+ }
108
116
  if (!existsSync(abs)) fail(`domain '${d.key}': module not found: ${abs}`);
109
117
  files.push(abs);
110
118
  }
119
+ for (const abs of discoverEvolutionModulePaths(cfgDir, d.key)) {
120
+ if (!files.includes(abs)) files.push(abs);
121
+ }
111
122
  try {
112
123
  assertPublicPackageImports(files);
113
124
  } catch (error) {
@@ -116,6 +127,7 @@ export async function loadComposedModulesWithSources(
116
127
  for (const abs of files) {
117
128
  // Cache-bust so a re-import (the LSP re-check after an edit) re-evaluates the edited module.
118
129
  const mod = (await import(`${pathToFileURL(abs).href}?t=${Date.now()}`)) as Mod;
130
+ if (isEvolutionModulePath(abs)) assertEvolutionModuleExports(mod, abs);
119
131
  bindEnumTypeExports(mod, abs);
120
132
  mods.push(mod);
121
133
  }
@@ -201,7 +213,6 @@ async function main(): Promise<void> {
201
213
  const findings: Finding[] = [...dependencyFindings, ...checkDomainModules(modules)];
202
214
 
203
215
  // ── EVOLVE PREVIEW (--against): diff the current build against a prior law + pre-fire the gate. ──
204
- let evolveDispositions: Record<string, unknown> | undefined;
205
216
  if (againstIdx >= 0 || againstArg !== undefined) {
206
217
  if (againstArg === undefined || againstArg.startsWith("--")) {
207
218
  fail(`--against needs a path: --against <${NOMOS_IDENTITY_FILENAME} | package dir>`);
@@ -218,7 +229,6 @@ async function main(): Promise<void> {
218
229
  const current = currentEvolveLaw(modules, lock);
219
230
  const diff = evolveDiff(prior.law, current);
220
231
  findings.push(...diff.findings);
221
- if (Object.keys(diff.dispositions).length > 0) evolveDispositions = diff.dispositions;
222
232
  if (!asJson) console.log(`githolon check: evolve preview against ${prior.source}`);
223
233
  }
224
234
 
@@ -255,14 +265,6 @@ async function main(): Promise<void> {
255
265
  }
256
266
  if (findings.length === 0) console.log(" all clear — no static twin flagged anything");
257
267
 
258
- // The consolidated, pasteable dispositions the destructive evolves demand (per domain).
259
- if (evolveDispositions !== undefined) {
260
- console.log(
261
- "\ngitholon check: to admit the destructive evolve, include `dispositions` in the installation offer:",
262
- );
263
- console.log(JSON.stringify(evolveDispositions, null, 2));
264
- }
265
-
266
268
  process.exit(hasRefusal(findings) ? 1 : 0);
267
269
  }
268
270
 
@@ -2742,14 +2742,14 @@ export function generateDartActivityRegistry(entries: readonly PackageActivityEn
2742
2742
  ` final String summary;`,
2743
2743
  ` final NomosModelReview review;`,
2744
2744
  ` final Future<NomosModelAdoption> Function()? _stage;`,
2745
- ` final Future<NomosModelAdoption> Function(String, {Map<String, Object?>? dispositions})? _accept;`,
2745
+ ` final Future<NomosModelAdoption> Function(String)? _accept;`,
2746
2746
  ` const NomosModelAdoption.adopted({required this.summary, required this.review})`,
2747
2747
  ` : status = NomosModelAdoptionStatus.adopted, _stage = null, _accept = null;`,
2748
2748
  ` const NomosModelAdoption.blocked({required this.summary, required this.review})`,
2749
2749
  ` : status = NomosModelAdoptionStatus.blocked, _stage = null, _accept = null;`,
2750
2750
  ` NomosModelAdoption.needsStaging({required this.summary, required this.review, required Future<NomosModelAdoption> Function() stage})`,
2751
2751
  ` : status = NomosModelAdoptionStatus.needsStaging, _stage = stage, _accept = null;`,
2752
- ` NomosModelAdoption.needsDecision({required this.summary, required this.review, required Future<NomosModelAdoption> Function(String, {Map<String, Object?>? dispositions}) accept})`,
2752
+ ` NomosModelAdoption.needsDecision({required this.summary, required this.review, required Future<NomosModelAdoption> Function(String) accept})`,
2753
2753
  ` : status = NomosModelAdoptionStatus.needsDecision, _stage = null, _accept = accept;`,
2754
2754
  ` Future<NomosModelAdoption> stage() {`,
2755
2755
  ` final stageCandidate = _stage;`,
@@ -2758,14 +2758,14 @@ export function generateDartActivityRegistry(entries: readonly PackageActivityEn
2758
2758
  ` }`,
2759
2759
  ` return stageCandidate();`,
2760
2760
  ` }`,
2761
- ` Future<NomosModelAdoption> accept(String because, {Map<String, Object?>? dispositions}) {`,
2761
+ ` Future<NomosModelAdoption> accept(String because) {`,
2762
2762
  ` final reason = because.trim();`,
2763
2763
  ` final acceptDecision = _accept;`,
2764
2764
  ` if (status != NomosModelAdoptionStatus.needsDecision || acceptDecision == null) {`,
2765
2765
  ` throw StateError('This model change is not waiting for a business decision.');`,
2766
2766
  ` }`,
2767
2767
  ` if (reason.isEmpty) throw ArgumentError('accept(reason) needs the business reason for changing prior outcomes');`,
2768
- ` return acceptDecision(reason, dispositions: dispositions);`,
2768
+ ` return acceptDecision(reason);`,
2769
2769
  ` }`,
2770
2770
  `}`,
2771
2771
  ``,
@@ -4788,6 +4788,9 @@ export interface DomainModule {
4788
4788
  * Absent when the domain declares no Surfaced field (byte-identical — the era rule).
4789
4789
  */
4790
4790
  surfacedResolvers?: import("./surfaced_lint.js").SurfacedResolverBinding[];
4791
+ /** Explicit tombstones authored in separate evolution files. These compile into
4792
+ * candidate USDA and are never exposed through generated tenant clients. */
4793
+ retirements?: import("./evolution.js").Retirement[];
4791
4794
  /**
4792
4795
  * STABLE-ID CONTINUITY (#58 — names are labels, identity is minted). When present
4793
4796
  * (attached by `nomos-compile` from the PRIOR build's identity manifests), the
@@ -1673,11 +1673,11 @@ export function generateDartBridgeClient(
1673
1673
  ` sameOutcome: projection?['equal'] as bool?, differences: differences);`,
1674
1674
  ` }`,
1675
1675
  ``,
1676
- ` Future<NomosModelAdoption> _adoptGeneratedModel([String? because, Map<String, Object?>? dispositions]) async {`,
1676
+ ` Future<NomosModelAdoption> _adoptGeneratedModel([String? because]) async {`,
1677
1677
  ` final raw = await bridge.nomosFrameworkAdoptGeneratedModel(`,
1678
1678
  ` domain: ${dartStr(
1679
1679
  domain
1680
- )}, candidateHash: domainHash, because: because, dispositions: dispositions);`,
1680
+ )}, candidateHash: domainHash, because: because);`,
1681
1681
  ` final reportRaw = raw['report'];`,
1682
1682
  ` final report = reportRaw is Map ? reportRaw.cast<String, Object?>() : null;`,
1683
1683
  ` final review = _nomosModelReview(report);`,
@@ -1703,20 +1703,9 @@ export function generateDartBridgeClient(
1703
1703
  ` if (stage == 'acceptance') {`,
1704
1704
  ` return NomosModelAdoption.needsDecision(`,
1705
1705
  ` summary: 'This model would change prior business outcomes. Review the differences and record why that is intended.',`,
1706
- ` review: review, accept: (reason, {dispositions}) => _adoptGeneratedModel(reason, dispositions));`,
1706
+ ` review: review, accept: (reason) => _adoptGeneratedModel(reason));`,
1707
1707
  ` }`,
1708
1708
  ` final evolve = (report?['evolve'] as Map?)?.cast<String, Object?>();`,
1709
- ` // A field/aggregate the candidate genuinely removed is a #58 disposition decision, not a`,
1710
- ` // dead end: retry with the SAME accept/dispositions seam so the tenant's own policy can`,
1711
- ` // supply dispositions.retired. Every prior stage (promoted/staging-required/acceptance) is`,
1712
- ` // already handled above; 'identity' (needs sign-in) is the one remaining stage this must NOT`,
1713
- ` // paper over, so it is the sole exclusion rather than requiring an exact 'preflight' match or`,
1714
- ` // exact boolean report fields, which may not round-trip identically across every bridge.`,
1715
- ` if (stage != 'identity') {`,
1716
- ` return NomosModelAdoption.needsDecision(`,
1717
- ` summary: 'This model cannot yet interpret every existing value without a declared disposition. Review the differences and record why that is intended.',`,
1718
- ` review: review, accept: (reason, {dispositions}) => _adoptGeneratedModel(reason, dispositions));`,
1719
- ` }`,
1720
1709
  ` final rawError = raw['error']?.toString().trim();`,
1721
1710
  ` final summary = rawError != null && rawError.isNotEmpty`,
1722
1711
  ` ? rawError`,
@@ -2436,8 +2425,8 @@ export function generateDartBridgeClient(
2436
2425
  ` : null,`,
2437
2426
  ]),
2438
2427
  ` accept: adoption.status == NomosModelAdoptionStatus.needsDecision`,
2439
- ` ? (reason, {dispositions}) async {`,
2440
- ` final accepted = await adoption.accept(reason, dispositions: dispositions);`,
2428
+ ` ? (reason) async {`,
2429
+ ` final accepted = await adoption.accept(reason);`,
2441
2430
  ` // A retry that still isn't adopted (a transient business-outcome/history race,`,
2442
2431
  ` // e.g. concurrent writes landing between the bare preflight and this accept) must`,
2443
2432
  ` // NOT be swallowed as a terminal StateError: re-throw the SAME typed exception so`,
@@ -2573,6 +2573,43 @@ function isStandaloneProofSafe(mod: DomainModule, directive: Directive<unknown>
2573
2573
  !(mod.workspaceInvariants ?? []).some((invariant) => invariant.on === directive!.id);
2574
2574
  }
2575
2575
 
2576
+ /**
2577
+ * A reference producer is allowed to carry one very specific kind of invariant which an ordinary
2578
+ * standalone journey is not: a generated `requiresExisting` guard over one of its own REQUIRED
2579
+ * `NomosRef<T>` payload fields. The recursive reference-seed graph creates those parents first, so
2580
+ * this is not weakening or guessing policy; it is recognising the nominal dependency the schema
2581
+ * already declared.
2582
+ *
2583
+ * Everything else remains fail-closed. In particular, create-once (`absent`) guards, arbitrary
2584
+ * `.where(...)` predicates, optional references and hand-authored workspace invariants are not
2585
+ * treated as satisfiable merely because the directive happens to create an aggregate.
2586
+ */
2587
+ function isReferencePrerequisiteCreateSafe(
2588
+ mod: DomainModule,
2589
+ directive: Directive<unknown> | undefined,
2590
+ ): boolean {
2591
+ if (directive === undefined || !isStandaloneCreate(directive)) return false;
2592
+ const invariants = (mod.workspaceInvariants ?? []).filter(
2593
+ (invariant) => invariant.on === directive.id,
2594
+ );
2595
+ if (invariants.length === 0) return true;
2596
+
2597
+ const preconditions = directive.preconditions ?? [];
2598
+ if (preconditions.length !== invariants.length) return false;
2599
+ const references = aggregateReferenceFields(directive.payloadSchema as z.ZodTypeAny);
2600
+ const optionalReferences = new Set(
2601
+ optionalAggregateReferenceFields(directive.payloadSchema as z.ZodTypeAny),
2602
+ );
2603
+
2604
+ return invariants.every((invariant) =>
2605
+ (invariant as { __nomosGenerated?: unknown }).__nomosGenerated === "directive-precondition"
2606
+ ) && preconditions.every((precondition) => {
2607
+ if (precondition.kind !== "exists" || precondition.idPayloadPath?.length !== 1) return false;
2608
+ const field = precondition.idPayloadPath[0]!;
2609
+ return !optionalReferences.has(field) && references[field] === precondition.aggregateId;
2610
+ });
2611
+ }
2612
+
2576
2613
  /** Prefer the strictest business create, then the one which demonstrates the richest typed relationship
2577
2614
  * journey. A capped aggregate is the stronger canonical proof: it exercises a workspace invariant and,
2578
2615
  * when the same action is also an authority seed, preserves isolation between standalone and bootstrap
@@ -2607,7 +2644,7 @@ interface ProofReferenceSeed {
2607
2644
  * forbidden: if an action needs `NomosRef<A>`, the generated journey first runs an ungated create for A,
2608
2645
  * retains the returned reference, and only then invokes the action. Cycles and missing creators fail compile
2609
2646
  * with the business types named instead of leaking a stringly proof. */
2610
- function discoverProofReferenceSeeds(mod: DomainModule, target: Directive<unknown>): ProofReferenceSeed[] {
2647
+ export function discoverProofReferenceSeeds(mod: DomainModule, target: Directive<unknown>): ProofReferenceSeed[] {
2611
2648
  const domain = mod.domain ?? mod.name;
2612
2649
  const directives = mod.directives as Directive<unknown>[];
2613
2650
  const aggregates = mod.aggregates as AggregateHandle[];
@@ -2622,7 +2659,8 @@ function discoverProofReferenceSeeds(mod: DomainModule, target: Directive<unknow
2622
2659
  }
2623
2660
  visiting.add(aggregateId);
2624
2661
  const directive = directives.find((candidate) =>
2625
- candidate !== target && candidate.aggregateId === aggregateId && isStandaloneProofSafe(mod, candidate));
2662
+ candidate !== target && candidate.aggregateId === aggregateId &&
2663
+ isReferencePrerequisiteCreateSafe(mod, candidate));
2626
2664
  const aggregate = aggregates.find((candidate) => candidate.id === aggregateId);
2627
2665
  if (directive === undefined || aggregate === undefined) {
2628
2666
  throw new Error(