@evomap/evolver 1.89.4 → 1.89.5

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.
Files changed (105) hide show
  1. package/CONTRIBUTING.md +19 -0
  2. package/README.md +536 -86
  3. package/assets/cover.png +0 -0
  4. package/index.js +87 -7
  5. package/package.json +17 -6
  6. package/scripts/a2a_export.js +63 -0
  7. package/scripts/a2a_ingest.js +79 -0
  8. package/scripts/a2a_promote.js +118 -0
  9. package/scripts/analyze_by_skill.js +121 -0
  10. package/scripts/build_binaries.js +479 -0
  11. package/scripts/check-changelog.js +166 -0
  12. package/scripts/extract_log.js +85 -0
  13. package/scripts/generate_history.js +75 -0
  14. package/scripts/gep_append_event.js +96 -0
  15. package/scripts/gep_personality_report.js +234 -0
  16. package/scripts/human_report.js +147 -0
  17. package/scripts/recall-verify-report.js +234 -0
  18. package/scripts/recover_loop.js +61 -0
  19. package/scripts/refresh_stars_badge.js +168 -0
  20. package/scripts/seed-merchants.js +91 -0
  21. package/scripts/suggest_version.js +89 -0
  22. package/scripts/validate-modules.js +38 -0
  23. package/scripts/validate-suite.js +78 -0
  24. package/skills/index.json +14 -0
  25. package/src/adapters/scripts/_runtimePaths.js +1 -0
  26. package/src/adapters/scripts/evolver-session-end.js +1 -0
  27. package/src/adapters/scripts/evolver-session-start.js +1 -0
  28. package/src/evolve/guards.js +1 -721
  29. package/src/evolve/pipeline/collect.js +1 -1283
  30. package/src/evolve/pipeline/dispatch.js +1 -421
  31. package/src/evolve/pipeline/enrich.js +1 -440
  32. package/src/evolve/pipeline/hub.js +1 -319
  33. package/src/evolve/pipeline/select.js +1 -274
  34. package/src/evolve/pipeline/signals.js +1 -206
  35. package/src/evolve/utils.js +1 -264
  36. package/src/evolve.js +1 -350
  37. package/src/gep/a2aProtocol.js +1 -4455
  38. package/src/gep/antiAbuseTelemetry.js +1 -233
  39. package/src/gep/autoDistillConv.js +1 -205
  40. package/src/gep/autoDistillLlm.js +1 -315
  41. package/src/gep/candidateEval.js +1 -92
  42. package/src/gep/candidates.js +1 -198
  43. package/src/gep/contentHash.js +1 -30
  44. package/src/gep/conversationSniffer.js +1 -266
  45. package/src/gep/crypto.js +1 -89
  46. package/src/gep/curriculum.js +1 -163
  47. package/src/gep/deviceId.js +1 -218
  48. package/src/gep/envFingerprint.js +1 -118
  49. package/src/gep/epigenetics.js +1 -31
  50. package/src/gep/execBridge.js +1 -711
  51. package/src/gep/explore.js +1 -289
  52. package/src/gep/hash.js +1 -15
  53. package/src/gep/hubFetch.js +1 -359
  54. package/src/gep/hubReview.js +1 -207
  55. package/src/gep/hubSearch.js +1 -526
  56. package/src/gep/hubVerify.js +1 -306
  57. package/src/gep/idleScheduler.js +6 -1
  58. package/src/gep/learningSignals.js +1 -89
  59. package/src/gep/memoryGraph.js +1 -1374
  60. package/src/gep/memoryGraphAdapter.js +1 -203
  61. package/src/gep/mutation.js +1 -203
  62. package/src/gep/narrativeMemory.js +1 -108
  63. package/src/gep/openPRRegistry.js +1 -205
  64. package/src/gep/personality.js +1 -423
  65. package/src/gep/policyCheck.js +1 -599
  66. package/src/gep/prompt.js +1 -836
  67. package/src/gep/recallInject.js +1 -409
  68. package/src/gep/recallVerifier.js +1 -318
  69. package/src/gep/reflection.js +1 -177
  70. package/src/gep/selector.js +1 -602
  71. package/src/gep/skillDistiller.js +1 -1294
  72. package/src/gep/solidify.js +1 -1699
  73. package/src/gep/strategy.js +1 -136
  74. package/src/gep/tokenSavings.js +1 -88
  75. package/src/gep/workspaceKeychain.js +1 -174
  76. package/src/ops/lifecycle.js +17 -4
  77. package/src/proxy/extensions/traceControl.js +1 -99
  78. package/src/proxy/index.js +206 -1
  79. package/src/proxy/inject.js +1 -52
  80. package/src/proxy/lifecycle/manager.js +12 -0
  81. package/src/proxy/mailbox/store.js +29 -6
  82. package/src/proxy/router/responses_route.js +157 -0
  83. package/src/proxy/server/http.js +13 -4
  84. package/src/proxy/server/routes.js +11 -1
  85. package/src/proxy/sync/engine.js +7 -1
  86. package/src/proxy/sync/outbound.js +32 -4
  87. package/src/proxy/trace/extractor.js +1 -646
  88. package/src/proxy/trace/usage.js +1 -105
  89. package/.cursor/BUGBOT.md +0 -182
  90. package/.env.example +0 -68
  91. package/.git-commit-guard-token +0 -1
  92. package/.github/CODEOWNERS +0 -63
  93. package/.github/ISSUE_TEMPLATE/good_first_issue.md +0 -23
  94. package/.github/pull_request_template.md +0 -45
  95. package/.github/workflows/test.yml +0 -75
  96. package/CHANGELOG.md +0 -1237
  97. package/README.public.md +0 -569
  98. package/SECURITY.md +0 -108
  99. package/assets/gep/events.jsonl +0 -3
  100. package/examples/atp-consumer-quickstart.md +0 -100
  101. package/examples/hello-world.md +0 -38
  102. package/proxy-package.json +0 -39
  103. package/public.manifest.json +0 -143
  104. /package/assets/gep/{genes.json → genes.seed.json} +0 -0
  105. /package/{bundled-skills → skills}/_meta/SKILL.md +0 -0
@@ -1,99 +1 @@
1
- 'use strict';
2
-
3
- const crypto = require('crypto');
4
-
5
- function canonicalTraceConfigPayload(payload = {}) {
6
- const clean = {};
7
- for (const key of Object.keys(payload).sort()) {
8
- if (key === 'signature' || key === 'trace_config_signature' || key === 'signature_algorithm') continue;
9
- if (key === 'hub_public_key') continue;
10
- const value = payload[key];
11
- if (value !== undefined) clean[key] = value;
12
- }
13
- return JSON.stringify(clean);
14
- }
15
-
16
- function verifyTraceConfigSignature(payload = {}, env = process.env) {
17
- const publicKey = String(
18
- env.EVOMAP_TRACE_CONFIG_SIGNING_PUBLIC_KEY
19
- || env.EVOMAP_PROXY_TRACE_CONFIG_SIGNING_PUBLIC_KEY
20
- || ''
21
- ).trim();
22
- const signature = String(payload.signature || payload.trace_config_signature || '').trim();
23
- if (!publicKey || !signature) return false;
24
- try {
25
- return crypto.verify(
26
- 'sha256',
27
- Buffer.from(canonicalTraceConfigPayload(payload), 'utf8'),
28
- publicKey,
29
- Buffer.from(signature, 'base64')
30
- );
31
- } catch {
32
- return false;
33
- }
34
- }
35
-
36
- class TraceControl {
37
- constructor({ store, logger } = {}) {
38
- this.store = store;
39
- this.logger = logger || console;
40
- }
41
-
42
- process(message) {
43
- const payload = message && message.payload ? message.payload : message;
44
- const enabled = payload && (
45
- payload.enabled ??
46
- payload.trace_collection_enabled ??
47
- payload.proxy_trace_collection_enabled
48
- );
49
- if (typeof enabled !== 'boolean') {
50
- this.logger.warn?.('[trace-control] ignoring config without boolean enabled');
51
- return { ack: true, applied: false };
52
- }
53
- let profileEnabled = payload.profile_analysis_enabled ?? payload.trace_profile_analysis_enabled;
54
- const signed = verifyTraceConfigSignature(payload);
55
- const unsafeEnable = enabled === true;
56
- const unsafeProfile = profileEnabled === true;
57
- const hasRuntimeHubKey = typeof payload.hub_public_key === 'string' && payload.hub_public_key.trim();
58
- if (!signed && unsafeEnable) {
59
- this.logger.warn?.('[trace-control] rejected unsigned trace config that could enable collection/profile analysis');
60
- return { ack: true, applied: false };
61
- }
62
- if (!signed && unsafeProfile) {
63
- this.logger.warn?.('[trace-control] ignored unsigned profile analysis enable while applying trace disable');
64
- profileEnabled = false;
65
- }
66
- this.store.setState('trace_collection_enabled', enabled ? 'true' : 'false');
67
- if (typeof profileEnabled === 'boolean') {
68
- this.store.setState('trace_profile_analysis_enabled', profileEnabled ? 'true' : 'false');
69
- }
70
- if (hasRuntimeHubKey) {
71
- this.logger.warn?.('[trace-control] ignored runtime hub_public_key; use pinned EVOMAP_PROXY_TRACE_HUB_PUBLIC_KEY');
72
- }
73
- this.store.setState('trace_collection_updated_at', new Date().toISOString());
74
- this.logger.log?.('[trace-control] trace collection ' + (enabled ? 'enabled' : 'disabled'));
75
- return { ack: true, applied: true };
76
- }
77
-
78
- pollAndApply() {
79
- const messages = [
80
- ...this.store.poll({ type: 'trace_collection_config', limit: 50 }),
81
- ...this.store.poll({ type: 'proxy_trace_config', limit: 50 }),
82
- ];
83
- let applied = 0;
84
- for (const msg of messages) {
85
- const result = this.process(msg);
86
- const ack = result === true || (result && result.ack === true);
87
- const didApply = result === true || (result && result.applied === true);
88
- if (ack) {
89
- this.store.ack(msg.id);
90
- }
91
- if (didApply) {
92
- applied++;
93
- }
94
- }
95
- return applied;
96
- }
97
- }
98
-
99
- module.exports = { TraceControl, canonicalTraceConfigPayload, verifyTraceConfigSignature };
1
+ const _0x1ccff6=_0xd2dc;(function(_0x75076,_0x460ce3){const _0x4eb6d0=_0xd2dc,_0x1cf0d8=_0x75076();while(!![]){try{const _0x449ac5=-parseInt(_0x4eb6d0(0x11d,'\x32\x4d\x42\x2a'))/(0x13bf+0x2644+-0x3a02)*(-parseInt(_0x4eb6d0(0x203,'\x39\x21\x39\x57'))/(-0x15ab+-0x1fe0+0x358d*0x1))+-parseInt(_0x4eb6d0(0x217,'\x41\x2a\x66\x4c'))/(0x3d*0x1d+-0x1*-0x859+0xf3f*-0x1)*(parseInt(_0x4eb6d0(0x18a,'\x71\x42\x21\x72'))/(0x1*-0x24ad+0xd72+0xb*0x21d))+parseInt(_0x4eb6d0(0x160,'\x50\x51\x31\x72'))/(0x1b02*0x1+0x53*-0x13+-0x14d4)+-parseInt(_0x4eb6d0(0x153,'\x43\x72\x25\x54'))/(-0x4*-0x100+0x1*-0x15fd+0x1203)+parseInt(_0x4eb6d0(0x12c,'\x4e\x4b\x53\x21'))/(-0x179*0x1+0x1*-0x1bbc+0x1d3c)*(parseInt(_0x4eb6d0(0x1d3,'\x4b\x6b\x54\x70'))/(0x2*0x11d7+0xb5a*0x1+-0x2*0x1780))+-parseInt(_0x4eb6d0(0x208,'\x6b\x57\x56\x44'))/(0x1*-0x1bc9+0x244+0x198e)+-parseInt(_0x4eb6d0(0x1cf,'\x40\x76\x26\x35'))/(-0x1*0x519+-0x18*-0x164+-0x1c3d)*(-parseInt(_0x4eb6d0(0x1c4,'\x43\x72\x25\x54'))/(-0x1be6+-0x2*-0x4d9+-0x9*-0x207));if(_0x449ac5===_0x460ce3)break;else _0x1cf0d8['push'](_0x1cf0d8['shift']());}catch(_0xc8736e){_0x1cf0d8['push'](_0x1cf0d8['shift']());}}}(_0x25cb,0xe9070+0x61ceb+0x4523*-0x29));const _0x46122a=(function(){const _0xb9dcb3=_0xd2dc,_0x18df5a={};_0x18df5a[_0xb9dcb3(0x162,'\x5d\x71\x59\x79')]=function(_0x22bf41,_0x18e10a){return _0x22bf41===_0x18e10a;},_0x18df5a[_0xb9dcb3(0x20a,'\x6c\x6e\x31\x43')]=_0xb9dcb3(0x10a,'\x2a\x25\x58\x78'),_0x18df5a[_0xb9dcb3(0x106,'\x5d\x71\x59\x79')]='\x28\x28\x28\x2e\x2b\x29\x2b\x29'+_0xb9dcb3(0x21a,'\x4d\x23\x48\x79');const _0x2d181a=_0x18df5a;let _0x2b444f=!![];return function(_0x4a2878,_0x21e53c){const _0x584380=_0xb9dcb3,_0x2757c1={};_0x2757c1[_0x584380(0x101,'\x33\x75\x61\x47')]=_0x2d181a[_0x584380(0x1e5,'\x4e\x4b\x53\x21')];const _0x14761c=_0x2757c1,_0x2f7c44=_0x2b444f?function(){const _0x370e58=_0x584380;if(_0x21e53c){if(_0x2d181a['\x68\x4e\x57\x63\x4b'](_0x2d181a[_0x370e58(0x103,'\x39\x21\x39\x57')],_0x370e58(0x222,'\x6b\x57\x56\x44'))){const _0xa194d8=_0x21e53c[_0x370e58(0x190,'\x50\x51\x31\x72')](_0x4a2878,arguments);return _0x21e53c=null,_0xa194d8;}else return _0x342da4[_0x370e58(0x1df,'\x6c\x6e\x31\x43')]()[_0x370e58(0x17f,'\x75\x25\x21\x5a')](_0x14761c[_0x370e58(0x1b9,'\x6e\x54\x6d\x29')])['\x74\x6f\x53\x74\x72\x69\x6e\x67']()[_0x370e58(0x1f5,'\x56\x33\x54\x55')+_0x370e58(0x151,'\x39\x21\x39\x57')](_0x12a1fb)[_0x370e58(0x183,'\x43\x42\x6f\x59')](_0x14761c[_0x370e58(0x16f,'\x35\x21\x4c\x36')]);}}:function(){};return _0x2b444f=![],_0x2f7c44;};}()),_0x4650e4=_0x46122a(this,function(){const _0x17f0a5=_0xd2dc,_0x33b4f8={};_0x33b4f8[_0x17f0a5(0x168,'\x4c\x4c\x6f\x67')]=_0x17f0a5(0x1ce,'\x56\x33\x54\x55')+_0x17f0a5(0x187,'\x56\x33\x54\x55');const _0x18ce6d=_0x33b4f8;return _0x4650e4[_0x17f0a5(0x1d5,'\x43\x42\x6f\x59')]()[_0x17f0a5(0x180,'\x4c\x4c\x6f\x67')]('\x28\x28\x28\x2e\x2b\x29\x2b\x29'+_0x17f0a5(0x1c3,'\x77\x34\x31\x78'))[_0x17f0a5(0x1cd,'\x4e\x4b\x53\x21')]()[_0x17f0a5(0x1a7,'\x35\x6b\x44\x6c')+_0x17f0a5(0x157,'\x62\x39\x4c\x26')](_0x4650e4)[_0x17f0a5(0x10f,'\x56\x26\x61\x55')](_0x18ce6d[_0x17f0a5(0x175,'\x6b\x57\x56\x44')]);});_0x4650e4();'use strict';function _0xd2dc(_0x2145a0,_0x460fa5){_0x2145a0=_0x2145a0-(0x16f0+0xc*0x2ce+-0x379c);const _0x41d0b5=_0x25cb();let _0x59eed4=_0x41d0b5[_0x2145a0];if(_0xd2dc['\x5a\x57\x4d\x52\x4c\x4b']===undefined){var _0x42f373=function(_0x8d6f38){const _0x2a8e0e='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';let _0x3f89ca='',_0x4b74f6='',_0x29f97e=_0x3f89ca+_0x42f373,_0x16d14e=(''+function(){return-0x1c46+0xd83+0xec3;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(0x1*-0x23ce+-0x83*-0x47+-0x86);for(let _0x10a20b=-0x4*0x548+0x12fb*0x1+-0x3*-0xb7,_0x2182db,_0x271de8,_0x3c2685=-0x4*0x124+-0x24f*-0x9+-0x1037;_0x271de8=_0x8d6f38['\x63\x68\x61\x72\x41\x74'](_0x3c2685++);~_0x271de8&&(_0x2182db=_0x10a20b%(0x24e*0x1+-0x953*-0x1+0x1*-0xb9d)?_0x2182db*(0x11*0x47+0x1*-0x2624+0x21ad*0x1)+_0x271de8:_0x271de8,_0x10a20b++%(-0x1*0x1ba7+-0x46f+0x201a))?_0x3f89ca+=_0x16d14e||_0x29f97e['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3c2685+(-0x131*-0x13+0x6e6+-0x9*0x347))-(0xd2c*0x2+0x25e3+-0x4031)!==-0x2*-0x335+-0xfd3*0x2+0x193c?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](-0x35*-0x37+0x927*0x1+-0x138b&_0x2182db>>(-(0x2513+0x1d22+-0x9*0x75b)*_0x10a20b&-0x14cd+-0x10b5+0x2588)):_0x10a20b:0x1321+0x2*0x461+-0x289*0xb){_0x271de8=_0x2a8e0e['\x69\x6e\x64\x65\x78\x4f\x66'](_0x271de8);}for(let _0x1bdfd5=0x41*0x1d+0x644+-0xda1,_0x474e65=_0x3f89ca['\x6c\x65\x6e\x67\x74\x68'];_0x1bdfd5<_0x474e65;_0x1bdfd5++){_0x4b74f6+='\x25'+('\x30\x30'+_0x3f89ca['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x1bdfd5)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x23fb+0x1be1+-0x3fcc))['\x73\x6c\x69\x63\x65'](-(-0x1ad8+0x1fd5*-0x1+-0xb5*-0x53));}return decodeURIComponent(_0x4b74f6);};const _0x11189e=function(_0x5c10c1,_0x520e14){let _0x3389b1=[],_0x534fe5=-0x1d74+0x932*0x2+0xb10,_0x3a7758,_0x1989d2='';_0x5c10c1=_0x42f373(_0x5c10c1);let _0x1219b2;for(_0x1219b2=0x1b7e+0xe32+-0x170*0x1d;_0x1219b2<0x547+0x4d*-0x4f+0x137c;_0x1219b2++){_0x3389b1[_0x1219b2]=_0x1219b2;}for(_0x1219b2=0x231+-0x1941+-0x4*-0x5c4;_0x1219b2<-0xc09+-0x14a9+0x13*0x1c6;_0x1219b2++){_0x534fe5=(_0x534fe5+_0x3389b1[_0x1219b2]+_0x520e14['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x1219b2%_0x520e14['\x6c\x65\x6e\x67\x74\x68']))%(-0x1*-0x1fe5+0x1bd2+-0x3ab7),_0x3a7758=_0x3389b1[_0x1219b2],_0x3389b1[_0x1219b2]=_0x3389b1[_0x534fe5],_0x3389b1[_0x534fe5]=_0x3a7758;}_0x1219b2=0x2181+0x23d4+0x4555*-0x1,_0x534fe5=-0xd12*-0x2+-0x2a+-0x3b6*0x7;for(let _0x639705=-0x7a*-0x3a+-0x1d66+0xf*0x1e;_0x639705<_0x5c10c1['\x6c\x65\x6e\x67\x74\x68'];_0x639705++){_0x1219b2=(_0x1219b2+(-0x1bd*0xb+-0x5da+0x18fa))%(-0x1d37+-0x1*-0x2a5+-0x1*-0x1b92),_0x534fe5=(_0x534fe5+_0x3389b1[_0x1219b2])%(-0x2388+-0x45f*-0x5+0x11*0xdd),_0x3a7758=_0x3389b1[_0x1219b2],_0x3389b1[_0x1219b2]=_0x3389b1[_0x534fe5],_0x3389b1[_0x534fe5]=_0x3a7758,_0x1989d2+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x5c10c1['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x639705)^_0x3389b1[(_0x3389b1[_0x1219b2]+_0x3389b1[_0x534fe5])%(-0x12d3*0x2+-0x349*-0x1+0x235d*0x1)]);}return _0x1989d2;};_0xd2dc['\x66\x65\x47\x76\x76\x45']=_0x11189e,_0xd2dc['\x51\x6c\x6f\x41\x6d\x63']={},_0xd2dc['\x5a\x57\x4d\x52\x4c\x4b']=!![];}const _0x3ab039=_0x41d0b5[-0x233a+0xf63+-0x3*-0x69d],_0x3aada6=_0x2145a0+_0x3ab039,_0x2769c7=_0xd2dc['\x51\x6c\x6f\x41\x6d\x63'][_0x3aada6];if(!_0x2769c7){if(_0xd2dc['\x55\x54\x68\x45\x72\x79']===undefined){const _0x5bad97=function(_0x4c0cb9){this['\x48\x44\x79\x6b\x5a\x71']=_0x4c0cb9,this['\x5a\x56\x57\x6a\x4c\x4d']=[0x17c1*0x1+-0xe*0x24d+-0x2*-0x43b,-0x81d+0x252d+-0x1f0*0xf,0x2*0xb35+-0x1*-0x1335+-0x299f],this['\x70\x73\x48\x45\x74\x44']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x58\x57\x65\x61\x41\x55']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x50\x69\x41\x49\x55\x7a']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x5bad97['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x4f\x6e\x58\x4f\x56\x74']=function(){const _0x50b47b=new RegExp(this['\x58\x57\x65\x61\x41\x55']+this['\x50\x69\x41\x49\x55\x7a']),_0x49ad98=_0x50b47b['\x74\x65\x73\x74'](this['\x70\x73\x48\x45\x74\x44']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x5a\x56\x57\x6a\x4c\x4d'][-0x5ce*-0x2+-0x868*0x3+0xd9d]:--this['\x5a\x56\x57\x6a\x4c\x4d'][-0x20e5+-0x1122+-0x9*-0x58f];return this['\x63\x47\x6d\x74\x63\x41'](_0x49ad98);},_0x5bad97['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x63\x47\x6d\x74\x63\x41']=function(_0x1954b9){if(!Boolean(~_0x1954b9))return _0x1954b9;return this['\x45\x44\x73\x44\x73\x6b'](this['\x48\x44\x79\x6b\x5a\x71']);},_0x5bad97['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x45\x44\x73\x44\x73\x6b']=function(_0x124574){for(let _0x4cdeea=-0x1f3b+-0x770+0x26ab*0x1,_0xf80574=this['\x5a\x56\x57\x6a\x4c\x4d']['\x6c\x65\x6e\x67\x74\x68'];_0x4cdeea<_0xf80574;_0x4cdeea++){this['\x5a\x56\x57\x6a\x4c\x4d']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0xf80574=this['\x5a\x56\x57\x6a\x4c\x4d']['\x6c\x65\x6e\x67\x74\x68'];}return _0x124574(this['\x5a\x56\x57\x6a\x4c\x4d'][-0x123+-0x1584+0x16a7*0x1]);},(''+function(){return-0x3*0x781+0x1*0x13de+0x2a5;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0x55d*-0x5+-0x1*-0x142b+0x1*0x6a7)&&new _0x5bad97(_0xd2dc)['\x4f\x6e\x58\x4f\x56\x74'](),_0xd2dc['\x55\x54\x68\x45\x72\x79']=!![];}_0x59eed4=_0xd2dc['\x66\x65\x47\x76\x76\x45'](_0x59eed4,_0x460fa5),_0xd2dc['\x51\x6c\x6f\x41\x6d\x63'][_0x3aada6]=_0x59eed4;}else _0x59eed4=_0x2769c7;return _0x59eed4;}const _0x19882c=require(_0x1ccff6(0x19e,'\x56\x26\x61\x55'));function _0x4a9d6c(_0x1d56a6={}){const _0x2ccb00=_0x1ccff6,_0x1bec3f={};_0x1bec3f[_0x2ccb00(0x18d,'\x70\x39\x41\x52')]=_0x2ccb00(0x109,'\x4d\x23\x48\x79'),_0x1bec3f[_0x2ccb00(0x1ac,'\x63\x5b\x58\x6f')]='\x43\x56\x46\x6d\x67',_0x1bec3f[_0x2ccb00(0x205,'\x43\x72\x25\x54')]=function(_0x26e53c,_0x3a3143){return _0x26e53c===_0x3a3143;},_0x1bec3f[_0x2ccb00(0x15f,'\x25\x43\x5d\x39')]='\x73\x69\x67\x6e\x61\x74\x75\x72'+'\x65',_0x1bec3f[_0x2ccb00(0x213,'\x25\x43\x5d\x39')]=_0x2ccb00(0x11b,'\x42\x26\x4b\x2a')+_0x2ccb00(0x140,'\x4b\x6b\x54\x70')+_0x2ccb00(0x20e,'\x40\x63\x32\x47'),_0x1bec3f[_0x2ccb00(0x178,'\x62\x39\x4c\x26')]=_0x2ccb00(0x169,'\x43\x67\x32\x42')+_0x2ccb00(0x1d6,'\x62\x39\x4c\x26')+_0x2ccb00(0x1b6,'\x33\x75\x61\x47'),_0x1bec3f[_0x2ccb00(0x144,'\x5d\x29\x57\x6a')]=function(_0x7c70d7,_0x5b7b1b){return _0x7c70d7===_0x5b7b1b;},_0x1bec3f[_0x2ccb00(0x197,'\x53\x52\x24\x32')]=_0x2ccb00(0x118,'\x66\x61\x6d\x55')+'\x69\x63\x5f\x6b\x65\x79',_0x1bec3f[_0x2ccb00(0x1ab,'\x35\x6b\x44\x6c')]=function(_0x1d007b,_0x1227b){return _0x1d007b!==_0x1227b;};const _0x4d1532=_0x1bec3f,_0x1e860e={};for(const _0xcda0b3 of Object['\x6b\x65\x79\x73'](_0x1d56a6)[_0x2ccb00(0x186,'\x35\x6b\x44\x6c')]()){if(_0x4d1532[_0x2ccb00(0x11c,'\x52\x5b\x4f\x33')]===_0x4d1532[_0x2ccb00(0x148,'\x77\x34\x31\x78')])_0x4a984++;else{if(_0x4d1532[_0x2ccb00(0x114,'\x2a\x61\x55\x34')](_0xcda0b3,_0x4d1532[_0x2ccb00(0x12a,'\x43\x42\x6f\x59')])||_0xcda0b3===_0x4d1532[_0x2ccb00(0x192,'\x53\x52\x24\x32')]||_0xcda0b3===_0x4d1532[_0x2ccb00(0x1fa,'\x6b\x57\x56\x44')])continue;if(_0x4d1532[_0x2ccb00(0x17b,'\x63\x5b\x58\x6f')](_0xcda0b3,_0x4d1532[_0x2ccb00(0x122,'\x54\x6b\x4c\x66')]))continue;const _0x273166=_0x1d56a6[_0xcda0b3];if(_0x4d1532[_0x2ccb00(0x10d,'\x46\x33\x79\x26')](_0x273166,undefined))_0x1e860e[_0xcda0b3]=_0x273166;}}return JSON[_0x2ccb00(0x1a0,'\x56\x26\x61\x55')+'\x79'](_0x1e860e);}function _0x39e2fb(_0x51c6ab={},_0x292698=process.env){const _0x3b9ee1=_0x1ccff6,_0x309ee0={'\x6f\x6d\x5a\x58\x53':_0x3b9ee1(0x129,'\x4e\x4b\x53\x21')+_0x3b9ee1(0x21d,'\x35\x21\x4c\x36')+_0x3b9ee1(0x147,'\x5d\x29\x57\x6a'),'\x4a\x62\x41\x4a\x58':_0x3b9ee1(0x10b,'\x52\x5b\x4f\x33')+_0x3b9ee1(0x1f4,'\x63\x5b\x58\x6f')+'\x69\x67','\x56\x47\x78\x6e\x6c':function(_0x10a32e,_0x5b964a){return _0x10a32e===_0x5b964a;},'\x48\x4a\x68\x4a\x57':function(_0x4d41b6,_0x410d96){return _0x4d41b6(_0x410d96);},'\x41\x4a\x77\x6d\x43':function(_0xf15a3e,_0x1995e1){return _0xf15a3e(_0x1995e1);},'\x79\x73\x64\x50\x65':function(_0x46c1be,_0x390814){return _0x46c1be||_0x390814;},'\x43\x74\x46\x53\x6d':_0x3b9ee1(0x223,'\x49\x76\x75\x56'),'\x54\x46\x70\x42\x6d':_0x3b9ee1(0x207,'\x71\x6c\x54\x73'),'\x66\x4d\x6e\x4d\x47':_0x3b9ee1(0x204,'\x66\x61\x6d\x55'),'\x6c\x66\x56\x71\x68':function(_0x6280b1,_0x439977){return _0x6280b1(_0x439977);},'\x66\x63\x61\x6d\x64':'\x62\x61\x73\x65\x36\x34'},_0x41808e=_0x309ee0['\x48\x4a\x68\x4a\x57'](String,_0x292698[_0x3b9ee1(0x195,'\x71\x57\x63\x45')+_0x3b9ee1(0x1db,'\x2a\x4e\x6d\x39')+_0x3b9ee1(0x1c7,'\x53\x52\x24\x32')+_0x3b9ee1(0x1ea,'\x4e\x72\x56\x4f')+_0x3b9ee1(0x1fc,'\x40\x76\x26\x35')]||_0x292698[_0x3b9ee1(0x16b,'\x66\x68\x7a\x39')+_0x3b9ee1(0x161,'\x75\x25\x21\x5a')+_0x3b9ee1(0x1b3,'\x62\x39\x4c\x26')+_0x3b9ee1(0x14d,'\x33\x75\x61\x47')+_0x3b9ee1(0x158,'\x40\x63\x32\x47')+_0x3b9ee1(0x20b,'\x4d\x23\x48\x79')]||'')[_0x3b9ee1(0x202,'\x71\x6c\x54\x73')](),_0x6c2946=_0x309ee0[_0x3b9ee1(0x132,'\x77\x34\x31\x78')](String,_0x51c6ab[_0x3b9ee1(0x11e,'\x62\x32\x5e\x72')+'\x65']||_0x51c6ab['\x74\x72\x61\x63\x65\x5f\x63\x6f'+'\x6e\x66\x69\x67\x5f\x73\x69\x67'+'\x6e\x61\x74\x75\x72\x65']||'')[_0x3b9ee1(0x133,'\x43\x42\x6f\x59')]();if(_0x309ee0[_0x3b9ee1(0x116,'\x53\x52\x24\x32')](!_0x41808e,!_0x6c2946))return![];try{if(_0x309ee0[_0x3b9ee1(0x1ef,'\x57\x79\x25\x59')]===_0x309ee0[_0x3b9ee1(0x17a,'\x70\x32\x71\x57')]){const _0x2be522={};_0x2be522[_0x3b9ee1(0x1c1,'\x4b\x6b\x54\x70')]=_0x309ee0[_0x3b9ee1(0x1a9,'\x42\x26\x4b\x2a')],_0x2be522[_0x3b9ee1(0x11a,'\x71\x42\x21\x72')]=0x32;const _0xa3bd86={};_0xa3bd86[_0x3b9ee1(0x179,'\x71\x57\x63\x45')]=_0x309ee0[_0x3b9ee1(0x14b,'\x42\x26\x4b\x2a')],_0xa3bd86[_0x3b9ee1(0x1a1,'\x56\x33\x54\x55')]=0x32;const _0x4223f3=[...this[_0x3b9ee1(0x164,'\x50\x51\x31\x72')][_0x3b9ee1(0x134,'\x4e\x72\x56\x4f')](_0x2be522),...this['\x73\x74\x6f\x72\x65'][_0x3b9ee1(0x1ae,'\x2a\x61\x55\x34')](_0xa3bd86)];let _0x44fd24=0x72f+0x37a+0x1*-0xaa9;for(const _0x2c4e5e of _0x4223f3){const _0x45cade=this[_0x3b9ee1(0x19d,'\x70\x32\x71\x57')](_0x2c4e5e),_0x5584ec=_0x309ee0[_0x3b9ee1(0x220,'\x51\x30\x38\x4b')](_0x45cade,!![])||_0x45cade&&_0x309ee0[_0x3b9ee1(0x196,'\x35\x21\x4c\x36')](_0x45cade[_0x3b9ee1(0x1e4,'\x42\x26\x4b\x2a')],!![]),_0x54f28c=_0x309ee0[_0x3b9ee1(0x218,'\x57\x79\x25\x59')](_0x45cade,!![])||_0x45cade&&_0x309ee0[_0x3b9ee1(0x12f,'\x41\x2a\x66\x4c')](_0x45cade[_0x3b9ee1(0x13d,'\x35\x21\x4c\x36')],!![]);_0x5584ec&&this[_0x3b9ee1(0x1a5,'\x70\x39\x41\x52')][_0x3b9ee1(0x1de,'\x4d\x23\x48\x79')](_0x2c4e5e['\x69\x64']),_0x54f28c&&_0x44fd24++;}return _0x44fd24;}else return _0x19882c['\x76\x65\x72\x69\x66\x79'](_0x309ee0[_0x3b9ee1(0x1a8,'\x4e\x72\x56\x4f')],Buffer[_0x3b9ee1(0x1c2,'\x4d\x23\x48\x79')](_0x309ee0[_0x3b9ee1(0x170,'\x32\x4d\x42\x2a')](_0x4a9d6c,_0x51c6ab),_0x3b9ee1(0x1b0,'\x33\x75\x61\x47')),_0x41808e,Buffer[_0x3b9ee1(0x19b,'\x51\x30\x38\x4b')](_0x6c2946,_0x309ee0[_0x3b9ee1(0x159,'\x49\x76\x75\x56')]));}catch{return![];}}class _0x11f4b1{constructor({store:_0x594d8c,logger:_0x134205}={}){const _0x17b004=_0x1ccff6,_0x587219={};_0x587219[_0x17b004(0x163,'\x63\x5b\x58\x6f')]=function(_0x56d9c9,_0x54b5fe){return _0x56d9c9||_0x54b5fe;};const _0x46104f=_0x587219;this['\x73\x74\x6f\x72\x65']=_0x594d8c,this[_0x17b004(0x1fd,'\x43\x42\x6f\x59')]=_0x46104f[_0x17b004(0x173,'\x50\x51\x31\x72')](_0x134205,console);}[_0x1ccff6(0x1b5,'\x71\x42\x21\x72')](_0x39445b){const _0x555159=_0x1ccff6,_0x1eb54b={'\x7a\x68\x59\x43\x6a':_0x555159(0x1bf,'\x57\x79\x25\x59'),'\x68\x45\x46\x42\x53':function(_0x3b9c14,_0x20d1bb){return _0x3b9c14(_0x20d1bb);},'\x58\x6f\x6e\x75\x41':_0x555159(0x1ca,'\x5d\x29\x57\x6a'),'\x64\x68\x4a\x6a\x6d':_0x555159(0x1e2,'\x2a\x25\x58\x78'),'\x44\x4a\x45\x68\x73':function(_0x46ab84,_0x43d85e){return _0x46ab84!==_0x43d85e;},'\x67\x44\x57\x42\x7a':_0x555159(0x184,'\x51\x30\x38\x4b'),'\x77\x79\x59\x4a\x55':function(_0x3c97c3,_0x1e2566){return _0x3c97c3===_0x1e2566;},'\x78\x4a\x43\x76\x45':function(_0x15e776,_0x4423be){return _0x15e776===_0x4423be;},'\x67\x64\x77\x51\x41':function(_0x2ad586,_0x1fc6f1){return _0x2ad586===_0x1fc6f1;},'\x65\x75\x4b\x58\x47':function(_0x1c02ba,_0x28cd8e){return _0x1c02ba&&_0x28cd8e;},'\x79\x53\x49\x68\x77':function(_0x446248,_0x2d1a06){return _0x446248&&_0x2d1a06;},'\x69\x68\x67\x72\x65':_0x555159(0x155,'\x40\x63\x32\x47')+'\x6f\x6e\x74\x72\x6f\x6c\x5d\x20'+_0x555159(0x1d7,'\x4e\x72\x56\x4f')+_0x555159(0x141,'\x70\x32\x71\x57')+_0x555159(0x176,'\x70\x32\x71\x57')+_0x555159(0x1bd,'\x25\x43\x5d\x39')+_0x555159(0x212,'\x71\x42\x21\x72')+_0x555159(0x16d,'\x39\x21\x39\x57')+_0x555159(0x124,'\x5d\x71\x59\x79')+_0x555159(0x211,'\x2a\x61\x55\x34')+_0x555159(0x1e8,'\x71\x57\x63\x45'),'\x46\x79\x58\x4f\x6a':_0x555159(0x1b8,'\x52\x5b\x4f\x33')+_0x555159(0xfc,'\x25\x43\x5d\x39')+_0x555159(0x219,'\x6b\x57\x56\x44'),'\x5a\x59\x61\x77\x47':_0x555159(0x13c,'\x5d\x29\x57\x6a'),'\x50\x59\x56\x6c\x65':'\x66\x61\x6c\x73\x65','\x41\x4d\x4b\x75\x55':function(_0x48ec32,_0x4d14ee){return _0x48ec32===_0x4d14ee;},'\x7a\x43\x5a\x46\x4f':_0x555159(0x167,'\x51\x30\x38\x4b'),'\x67\x6f\x5a\x74\x47':_0x555159(0x142,'\x77\x34\x31\x78')+'\x6c\x6c\x65\x63\x74\x69\x6f\x6e'+_0x555159(0x10e,'\x6b\x57\x56\x44')+_0x555159(0x15c,'\x43\x72\x25\x54'),'\x65\x5a\x6b\x43\x45':function(_0x4813eb,_0x28aa1d){return _0x4813eb+_0x28aa1d;},'\x62\x47\x65\x4d\x52':_0x555159(0x1ec,'\x53\x52\x24\x32')+_0x555159(0x10c,'\x2a\x61\x55\x34')+_0x555159(0x165,'\x4c\x4c\x6f\x67')+_0x555159(0x1cb,'\x39\x21\x39\x57')+'\x20','\x79\x66\x50\x75\x65':_0x555159(0x135,'\x46\x33\x79\x26'),'\x59\x66\x53\x42\x56':_0x555159(0x1cc,'\x50\x51\x31\x72')},_0x3b9a6e=_0x39445b&&_0x39445b[_0x555159(0x11f,'\x6c\x6e\x31\x43')]?_0x39445b[_0x555159(0x174,'\x2a\x4e\x6d\x39')]:_0x39445b,_0x271851=_0x3b9a6e&&(_0x3b9a6e[_0x555159(0x139,'\x32\x4d\x42\x2a')]??_0x3b9a6e['\x74\x72\x61\x63\x65\x5f\x63\x6f'+_0x555159(0x21c,'\x6c\x6e\x31\x43')+_0x555159(0x1b1,'\x63\x5b\x58\x6f')]??_0x3b9a6e[_0x555159(0x136,'\x4b\x6b\x54\x70')+_0x555159(0x16a,'\x43\x42\x6f\x59')+_0x555159(0x1f2,'\x2a\x4e\x6d\x39')+_0x555159(0x17e,'\x71\x57\x63\x45')]);if(typeof _0x271851!==_0x555159(0x1ad,'\x63\x5b\x58\x6f')){if(_0x1eb54b[_0x555159(0x1e0,'\x63\x5b\x58\x6f')](_0x1eb54b[_0x555159(0x1d1,'\x40\x63\x32\x47')],_0x1eb54b[_0x555159(0x105,'\x57\x79\x25\x59')]))return _0x1cc8c3[_0x555159(0x1f9,'\x4b\x6b\x54\x70')](YOZIIQ['\x7a\x68\x59\x43\x6a'],_0x1abb84[_0x555159(0x18b,'\x42\x26\x4b\x2a')](YOZIIQ['\x68\x45\x46\x42\x53'](_0x4b5171,_0x381c44),YOZIIQ[_0x555159(0x1c0,'\x4e\x4b\x53\x21')]),_0x4df7a4,_0xcbc566[_0x555159(0x1c8,'\x35\x6b\x44\x6c')](_0x22e0b3,YOZIIQ[_0x555159(0x177,'\x67\x51\x42\x34')]));else{this[_0x555159(0xfd,'\x40\x76\x26\x35')][_0x555159(0x120,'\x49\x76\x75\x56')]?.(_0x555159(0x155,'\x40\x63\x32\x47')+_0x555159(0x10c,'\x2a\x61\x55\x34')+_0x555159(0x1d4,'\x50\x51\x31\x72')+'\x20\x63\x6f\x6e\x66\x69\x67\x20'+_0x555159(0x15a,'\x4b\x6b\x54\x70')+_0x555159(0x201,'\x56\x33\x54\x55')+_0x555159(0x19c,'\x2a\x4e\x6d\x39'));const _0x43f613={};return _0x43f613[_0x555159(0x18f,'\x57\x79\x25\x59')]=!![],_0x43f613['\x61\x70\x70\x6c\x69\x65\x64']=![],_0x43f613;}}let _0x107bf5=_0x3b9a6e[_0x555159(0x14a,'\x66\x61\x6d\x55')+'\x61\x6e\x61\x6c\x79\x73\x69\x73'+_0x555159(0x199,'\x55\x6e\x51\x4b')]??_0x3b9a6e[_0x555159(0x117,'\x40\x76\x26\x35')+'\x6f\x66\x69\x6c\x65\x5f\x61\x6e'+_0x555159(0x15b,'\x75\x25\x21\x5a')+'\x6e\x61\x62\x6c\x65\x64'];const _0x5ca619=_0x1eb54b[_0x555159(0x1d0,'\x46\x33\x79\x26')](_0x39e2fb,_0x3b9a6e),_0x8b9c81=_0x1eb54b[_0x555159(0xfe,'\x5d\x71\x59\x79')](_0x271851,!![]),_0x256fa8=_0x1eb54b[_0x555159(0x1e1,'\x71\x42\x21\x72')](_0x107bf5,!![]),_0x5a9327=_0x1eb54b[_0x555159(0x1a2,'\x25\x43\x5d\x39')](typeof _0x3b9a6e[_0x555159(0x1bb,'\x46\x33\x79\x26')+_0x555159(0x1c9,'\x4e\x4b\x53\x21')],_0x555159(0x18e,'\x56\x33\x54\x55'))&&_0x3b9a6e[_0x555159(0x1af,'\x70\x32\x71\x57')+_0x555159(0x15d,'\x62\x39\x4c\x26')][_0x555159(0x14f,'\x53\x52\x24\x32')]();if(_0x1eb54b[_0x555159(0x225,'\x25\x43\x5d\x39')](!_0x5ca619,_0x8b9c81)){this['\x6c\x6f\x67\x67\x65\x72'][_0x555159(0x21e,'\x66\x61\x6d\x55')]?.(_0x555159(0x125,'\x33\x75\x61\x47')+_0x555159(0x189,'\x71\x57\x63\x45')+_0x555159(0x224,'\x66\x61\x6d\x55')+_0x555159(0x150,'\x56\x33\x54\x55')+_0x555159(0x111,'\x55\x6e\x51\x4b')+_0x555159(0x1aa,'\x42\x26\x4b\x2a')+_0x555159(0x194,'\x53\x52\x24\x32')+_0x555159(0x1f7,'\x25\x43\x5d\x39')+_0x555159(0x191,'\x35\x6b\x44\x6c')+_0x555159(0x1eb,'\x49\x76\x75\x56')+_0x555159(0x104,'\x43\x42\x6f\x59')+_0x555159(0x221,'\x70\x32\x71\x57'));const _0x4dfc3b={};return _0x4dfc3b[_0x555159(0x20d,'\x67\x51\x42\x34')]=!![],_0x4dfc3b[_0x555159(0x17c,'\x2a\x61\x55\x34')]=![],_0x4dfc3b;}_0x1eb54b[_0x555159(0x12b,'\x2a\x25\x58\x78')](!_0x5ca619,_0x256fa8)&&(this[_0x555159(0x14e,'\x33\x75\x61\x47')][_0x555159(0x126,'\x4b\x6b\x54\x70')]?.(_0x1eb54b[_0x555159(0x193,'\x4e\x72\x56\x4f')]),_0x107bf5=![]);this[_0x555159(0x143,'\x4d\x23\x48\x79')][_0x555159(0x1da,'\x32\x4d\x42\x2a')](_0x1eb54b[_0x555159(0x21b,'\x39\x21\x39\x57')],_0x271851?_0x1eb54b[_0x555159(0x127,'\x4e\x4b\x53\x21')]:_0x1eb54b[_0x555159(0x166,'\x43\x42\x6f\x59')]);_0x1eb54b[_0x555159(0x121,'\x71\x42\x21\x72')](typeof _0x107bf5,_0x1eb54b['\x7a\x43\x5a\x46\x4f'])&&this[_0x555159(0x131,'\x51\x30\x38\x4b')]['\x73\x65\x74\x53\x74\x61\x74\x65'](_0x555159(0x1c5,'\x50\x51\x31\x72')+_0x555159(0x1dc,'\x40\x63\x32\x47')+_0x555159(0x1f0,'\x4b\x6b\x54\x70')+_0x555159(0x1c6,'\x32\x4d\x42\x2a'),_0x107bf5?'\x74\x72\x75\x65':_0x1eb54b[_0x555159(0x110,'\x32\x4d\x42\x2a')]);_0x5a9327&&this[_0x555159(0x156,'\x40\x63\x32\x47')][_0x555159(0x1dd,'\x2a\x4e\x6d\x39')]?.(_0x555159(0x1bc,'\x6e\x54\x6d\x29')+_0x555159(0x1e6,'\x5d\x29\x57\x6a')+_0x555159(0x12e,'\x66\x68\x7a\x39')+_0x555159(0x216,'\x53\x52\x24\x32')+_0x555159(0x1be,'\x4c\x4c\x6f\x67')+_0x555159(0x215,'\x57\x79\x25\x59')+_0x555159(0x113,'\x49\x76\x75\x56')+_0x555159(0x1fb,'\x49\x76\x75\x56')+_0x555159(0x1d8,'\x32\x4d\x42\x2a')+_0x555159(0x149,'\x75\x25\x21\x5a')+_0x555159(0x130,'\x5d\x71\x59\x79')+'\x5f\x4b\x45\x59');this[_0x555159(0x171,'\x41\x2a\x66\x4c')][_0x555159(0x1a4,'\x4e\x72\x56\x4f')](_0x1eb54b[_0x555159(0x17d,'\x2a\x25\x58\x78')],new Date()[_0x555159(0x16c,'\x62\x32\x5e\x72')+_0x555159(0x1b4,'\x71\x42\x21\x72')]()),this[_0x555159(0x210,'\x52\x5b\x4f\x33')][_0x555159(0x1b2,'\x71\x57\x63\x45')]?.(_0x1eb54b[_0x555159(0x20f,'\x77\x34\x31\x78')](_0x1eb54b[_0x555159(0x188,'\x39\x21\x39\x57')],_0x271851?_0x1eb54b[_0x555159(0x1a6,'\x2a\x4e\x6d\x39')]:_0x1eb54b[_0x555159(0x1ed,'\x6b\x57\x56\x44')]));const _0x1d0be7={};return _0x1d0be7[_0x555159(0x100,'\x71\x42\x21\x72')]=!![],_0x1d0be7[_0x555159(0x1d2,'\x71\x6c\x54\x73')]=!![],_0x1d0be7;}[_0x1ccff6(0x1e3,'\x42\x26\x4b\x2a')+_0x1ccff6(0x138,'\x5d\x71\x59\x79')](){const _0x21e870=_0x1ccff6,_0x10c909={};_0x10c909['\x56\x6d\x4b\x76\x61']=_0x21e870(0x154,'\x40\x76\x26\x35')+_0x21e870(0x214,'\x2a\x61\x55\x34')+_0x21e870(0x123,'\x62\x39\x4c\x26'),_0x10c909[_0x21e870(0x112,'\x52\x5b\x4f\x33')]=function(_0x7d880,_0x3a5b47){return _0x7d880===_0x3a5b47;},_0x10c909[_0x21e870(0x226,'\x2a\x61\x55\x34')]=function(_0x584124,_0x219fca){return _0x584124===_0x219fca;},_0x10c909[_0x21e870(0x16e,'\x6b\x57\x56\x44')]=_0x21e870(0xff,'\x51\x30\x38\x4b');const _0x167694=_0x10c909,_0x1f01bb={};_0x1f01bb['\x74\x79\x70\x65']=_0x167694[_0x21e870(0x13b,'\x4e\x4b\x53\x21')],_0x1f01bb[_0x21e870(0x209,'\x6c\x6e\x31\x43')]=0x32;const _0x596946={};_0x596946[_0x21e870(0x1f1,'\x63\x5b\x58\x6f')]=_0x21e870(0x1ff,'\x43\x42\x6f\x59')+_0x21e870(0x107,'\x5d\x29\x57\x6a')+'\x69\x67',_0x596946[_0x21e870(0x1ee,'\x39\x21\x39\x57')]=0x32;const _0x1c4820=[...this[_0x21e870(0x1e7,'\x4c\x4c\x6f\x67')][_0x21e870(0x119,'\x39\x21\x39\x57')](_0x1f01bb),...this[_0x21e870(0x146,'\x4e\x72\x56\x4f')][_0x21e870(0x1b7,'\x4b\x6b\x54\x70')](_0x596946)];let _0x3896cd=0x1*-0x197f+-0xa*0x1+-0x1989*-0x1;for(const _0x4167a of _0x1c4820){const _0x314fc9=this[_0x21e870(0x1d9,'\x52\x5b\x4f\x33')](_0x4167a),_0x4895d6=_0x167694[_0x21e870(0x137,'\x71\x57\x63\x45')](_0x314fc9,!![])||_0x314fc9&&_0x314fc9[_0x21e870(0x108,'\x46\x33\x79\x26')]===!![],_0x161a6a=_0x167694[_0x21e870(0x1fe,'\x52\x5b\x4f\x33')](_0x314fc9,!![])||_0x314fc9&&_0x314fc9[_0x21e870(0x13e,'\x33\x75\x61\x47')]===!![];_0x4895d6&&this[_0x21e870(0x128,'\x2a\x4e\x6d\x39')][_0x21e870(0x1f6,'\x62\x32\x5e\x72')](_0x4167a['\x69\x64']);if(_0x161a6a){if(_0x167694[_0x21e870(0x1ba,'\x2a\x61\x55\x34')](_0x21e870(0x19f,'\x6c\x6e\x31\x43'),_0x167694[_0x21e870(0x185,'\x42\x26\x4b\x2a')]))_0x3896cd++;else{this['\x6c\x6f\x67\x67\x65\x72'][_0x21e870(0x21f,'\x56\x26\x61\x55')]?.(_0x21e870(0x1a3,'\x40\x76\x26\x35')+'\x6f\x6e\x74\x72\x6f\x6c\x5d\x20'+'\x69\x67\x6e\x6f\x72\x69\x6e\x67'+_0x21e870(0x182,'\x51\x30\x38\x4b')+_0x21e870(0x181,'\x77\x34\x31\x78')+'\x62\x6f\x6f\x6c\x65\x61\x6e\x20'+_0x21e870(0x206,'\x4c\x4c\x6f\x67'));const _0x1442d5={};return _0x1442d5['\x61\x63\x6b']=!![],_0x1442d5[_0x21e870(0x19a,'\x6c\x6e\x31\x43')]=![],_0x1442d5;}}}return _0x3896cd;}}const _0x3505a6={};_0x3505a6[_0x1ccff6(0x115,'\x40\x63\x32\x47')+'\x74\x72\x6f\x6c']=_0x11f4b1,_0x3505a6[_0x1ccff6(0x200,'\x62\x39\x4c\x26')+_0x1ccff6(0x18c,'\x56\x26\x61\x55')+_0x1ccff6(0x20c,'\x35\x21\x4c\x36')+_0x1ccff6(0x172,'\x71\x6c\x54\x73')]=_0x4a9d6c,_0x3505a6[_0x1ccff6(0x152,'\x40\x63\x32\x47')+'\x61\x63\x65\x43\x6f\x6e\x66\x69'+_0x1ccff6(0x15e,'\x43\x42\x6f\x59')+'\x72\x65']=_0x39e2fb,module[_0x1ccff6(0x1f3,'\x2a\x25\x58\x78')]=_0x3505a6;function _0x25cb(){const _0x192338=['\x57\x4f\x76\x68\x57\x34\x70\x64\x53\x6d\x6b\x5a\x57\x4f\x56\x64\x51\x43\x6f\x43','\x69\x6d\x6b\x7a\x68\x53\x6b\x64\x57\x51\x71','\x57\x50\x75\x78\x41\x38\x6f\x37\x7a\x71','\x73\x53\x6b\x63\x65\x57\x46\x64\x56\x57','\x6a\x77\x78\x63\x4c\x38\x6b\x33\x57\x4f\x43','\x57\x4f\x6d\x56\x79\x47','\x57\x37\x52\x64\x53\x4e\x35\x54\x62\x61','\x69\x5a\x64\x64\x55\x78\x6d\x48\x6f\x53\x6b\x33','\x62\x38\x6b\x62\x61\x6d\x6b\x79\x57\x51\x30','\x77\x53\x6f\x33\x46\x43\x6b\x71\x57\x51\x66\x66\x77\x6d\x6b\x4e','\x6a\x43\x6b\x70\x43\x4b\x79\x5a','\x57\x36\x79\x76\x57\x51\x4a\x64\x56\x43\x6b\x5a','\x57\x35\x4f\x58\x63\x38\x6f\x61','\x6c\x53\x6f\x62\x46\x38\x6b\x39\x57\x51\x4f','\x57\x52\x68\x63\x4b\x32\x68\x64\x56\x43\x6f\x4a','\x43\x43\x6f\x48\x72\x32\x65\x64\x57\x4f\x42\x63\x50\x47','\x57\x4f\x62\x45\x57\x4f\x7a\x58\x57\x52\x4f','\x57\x34\x61\x50\x67\x43\x6f\x6a\x71\x75\x57','\x57\x37\x75\x72\x6d\x38\x6b\x33\x57\x37\x68\x64\x4a\x47','\x41\x4d\x53\x71\x57\x35\x78\x64\x55\x6d\x6b\x44','\x46\x6d\x6b\x38\x68\x75\x42\x63\x47\x43\x6f\x6f\x77\x53\x6f\x35','\x6a\x43\x6b\x38\x57\x50\x6c\x64\x52\x6d\x6b\x79\x65\x58\x78\x64\x4a\x47','\x57\x4f\x4e\x64\x54\x4c\x46\x64\x47\x6d\x6f\x75\x57\x4f\x47','\x43\x53\x6b\x54\x57\x50\x64\x64\x50\x53\x6b\x6b','\x57\x34\x68\x63\x53\x53\x6f\x42\x57\x52\x53\x4b','\x65\x6d\x6f\x69\x68\x48\x69','\x7a\x59\x68\x63\x4e\x53\x6b\x4c','\x57\x34\x44\x33\x57\x34\x37\x64\x4c\x6d\x6b\x6e','\x57\x34\x65\x4d\x64\x38\x6f\x78\x73\x30\x71\x2f\x57\x4f\x38','\x57\x36\x43\x77\x74\x53\x6f\x6f\x57\x35\x68\x64\x4f\x4a\x79\x4c\x73\x74\x7a\x55\x57\x34\x65','\x57\x37\x42\x63\x54\x38\x6f\x6f\x57\x4f\x65','\x69\x38\x6b\x68\x46\x5a\x65\x52\x43\x74\x54\x44','\x57\x52\x31\x79\x6a\x38\x6b\x58\x71\x57','\x70\x33\x5a\x64\x48\x38\x6f\x4f\x57\x34\x52\x63\x4e\x47','\x65\x74\x48\x61','\x57\x37\x4a\x64\x50\x66\x54\x31\x6f\x61','\x71\x38\x6f\x65\x61\x57\x50\x52\x73\x38\x6b\x31\x57\x34\x69','\x70\x53\x6b\x62\x57\x37\x71\x56\x77\x71','\x57\x52\x4b\x51\x57\x36\x70\x63\x51\x73\x34','\x70\x6d\x6b\x65\x57\x35\x48\x46\x41\x78\x4a\x63\x51\x72\x43','\x57\x36\x53\x45\x6e\x6d\x6f\x4f\x7a\x78\x47\x39\x57\x37\x53','\x57\x52\x79\x33\x75\x43\x6f\x58\x71\x61','\x68\x43\x6b\x69\x57\x34\x79\x52\x79\x71','\x41\x4b\x6a\x37\x57\x35\x78\x64\x52\x47\x56\x64\x49\x62\x47','\x57\x35\x50\x42\x78\x53\x6b\x76\x63\x43\x6f\x64\x57\x34\x78\x64\x4b\x71','\x6b\x43\x6f\x70\x76\x6d\x6b\x38\x42\x33\x46\x63\x4f\x47','\x79\x38\x6b\x54\x57\x50\x6c\x64\x52\x57','\x6e\x4a\x2f\x64\x4f\x78\x30\x49\x70\x53\x6b\x33','\x63\x53\x6f\x31\x79\x6d\x6b\x43\x57\x51\x6a\x46\x72\x57','\x6c\x6d\x6b\x48\x44\x63\x61\x38\x45\x57','\x6f\x6d\x6f\x44\x7a\x43\x6b\x46\x76\x61','\x70\x6d\x6b\x4e\x46\x5a\x4b\x4d\x43\x58\x66\x75','\x69\x67\x68\x64\x4d\x6d\x6f\x4f\x57\x35\x61','\x6d\x4a\x4f\x2b\x57\x34\x57\x47','\x63\x43\x6f\x69\x68\x43\x6f\x75\x76\x73\x33\x64\x4c\x43\x6f\x78','\x57\x51\x6d\x4e\x57\x37\x64\x63\x49\x64\x2f\x63\x51\x53\x6f\x36\x74\x47','\x57\x50\x31\x7a\x61\x53\x6b\x62\x76\x71','\x6b\x4a\x46\x64\x4b\x67\x4f\x52','\x61\x6d\x6f\x69\x61\x48\x76\x5a\x78\x6d\x6b\x4a\x57\x35\x75','\x57\x52\x79\x70\x57\x36\x52\x63\x4c\x47\x57','\x57\x37\x2f\x63\x51\x6d\x6f\x37\x57\x52\x71\x4d','\x57\x37\x70\x63\x51\x53\x6f\x70\x57\x4f\x4f\x43\x67\x58\x42\x63\x48\x47','\x6b\x43\x6f\x72\x61\x57\x50\x57','\x57\x4f\x46\x63\x53\x4d\x42\x64\x4e\x38\x6f\x30','\x57\x52\x33\x63\x4c\x4d\x56\x64\x54\x43\x6f\x4e\x70\x67\x75','\x79\x6d\x6f\x2b\x77\x32\x65','\x65\x53\x6f\x59\x42\x43\x6b\x47\x57\x52\x44\x7a\x76\x53\x6b\x55','\x62\x38\x6f\x35\x71\x6d\x6b\x5a','\x57\x4f\x64\x63\x4e\x67\x52\x64\x55\x6d\x6f\x47\x6d\x77\x35\x45','\x57\x34\x69\x4e\x68\x61','\x57\x37\x75\x35\x57\x4f\x68\x64\x4e\x38\x6b\x78\x57\x34\x7a\x66\x6f\x57','\x57\x52\x50\x62\x67\x57','\x57\x51\x6e\x44\x65\x38\x6b\x79\x57\x4f\x46\x63\x50\x5a\x79','\x62\x53\x6f\x4c\x73\x57','\x70\x53\x6f\x37\x57\x52\x6d\x7a','\x74\x62\x44\x39\x57\x52\x74\x63\x52\x38\x6f\x76\x6c\x53\x6b\x33','\x44\x78\x70\x63\x56\x4e\x46\x64\x49\x61','\x43\x53\x6f\x2b\x42\x4c\x57\x56','\x57\x51\x44\x65\x57\x35\x44\x47\x63\x48\x6c\x63\x4f\x48\x69','\x77\x32\x64\x63\x4a\x4e\x6c\x64\x4f\x53\x6f\x62\x68\x38\x6b\x4c','\x44\x74\x38\x4e\x57\x37\x57\x6e\x44\x43\x6f\x71\x57\x4f\x61','\x43\x78\x53\x74\x57\x37\x4a\x64\x51\x38\x6b\x61\x68\x77\x43','\x61\x5a\x6e\x6b\x66\x49\x46\x63\x4e\x57','\x6d\x6d\x6b\x36\x6e\x38\x6b\x70\x41\x47','\x6f\x53\x6f\x54\x57\x51\x38\x71','\x57\x50\x4c\x64\x57\x36\x5a\x63\x4f\x47','\x69\x6d\x6f\x38\x71\x47\x4f','\x57\x37\x35\x56\x43\x38\x6b\x39\x57\x52\x75\x44\x57\x35\x72\x37','\x57\x36\x33\x64\x50\x4b\x50\x36\x6a\x6d\x6f\x54\x61\x43\x6b\x58','\x73\x6d\x6b\x66\x6a\x58\x52\x64\x53\x53\x6f\x45','\x65\x53\x6b\x53\x57\x36\x53\x47\x77\x76\x37\x63\x4d\x5a\x75','\x62\x43\x6f\x76\x61\x57\x53','\x61\x43\x6b\x32\x62\x53\x6b\x72\x74\x53\x6b\x6f','\x6d\x6d\x6f\x47\x72\x53\x6b\x73','\x57\x34\x4c\x43\x57\x34\x37\x64\x55\x53\x6b\x52\x57\x4f\x46\x63\x50\x53\x6f\x74','\x57\x37\x33\x64\x56\x76\x48\x34\x69\x38\x6f\x45\x66\x6d\x6b\x4e','\x68\x6d\x6b\x36\x63\x53\x6b\x6f\x77\x43\x6b\x45\x7a\x4d\x34','\x7a\x63\x64\x63\x4e\x43\x6b\x56\x57\x4f\x2f\x64\x4b\x6d\x6f\x6c\x72\x71','\x79\x6d\x6b\x6d\x78\x6d\x6b\x64\x61\x33\x4e\x64\x49\x38\x6b\x65\x57\x34\x57\x65\x57\x37\x4e\x63\x55\x6d\x6f\x47\x70\x57','\x57\x51\x44\x30\x57\x37\x6e\x39\x6b\x71','\x70\x4a\x7a\x61\x57\x37\x6c\x64\x4b\x71','\x57\x4f\x30\x2b\x44\x4c\x4e\x64\x52\x38\x6b\x55\x67\x47','\x44\x53\x6f\x42\x57\x50\x53\x33\x57\x37\x4a\x64\x55\x57\x47','\x57\x37\x64\x64\x53\x30\x76\x32\x6d\x38\x6f\x42\x68\x38\x6b\x4b','\x57\x4f\x37\x64\x56\x67\x78\x64\x48\x53\x6f\x66\x57\x4f\x4e\x63\x54\x6d\x6b\x46','\x57\x35\x6d\x4a\x57\x52\x2f\x64\x53\x6d\x6b\x2f\x57\x36\x44\x58\x67\x57','\x57\x52\x4b\x4c\x57\x36\x52\x63\x54\x64\x4e\x63\x52\x53\x6f\x51\x63\x57','\x44\x53\x6b\x37\x66\x73\x74\x64\x4d\x6d\x6f\x49\x63\x30\x30','\x73\x62\x44\x5a\x57\x52\x74\x63\x52\x38\x6f\x35\x70\x47','\x76\x43\x6b\x62\x6d\x73\x78\x64\x4f\x38\x6f\x42\x6a\x4e\x43','\x61\x72\x64\x64\x47\x31\x4f\x72\x67\x6d\x6b\x43\x69\x47','\x6e\x48\x72\x2b\x57\x35\x5a\x64\x4a\x47\x46\x64\x4d\x62\x53','\x6a\x64\x64\x64\x53\x4e\x65','\x57\x50\x35\x73\x57\x36\x47','\x70\x6d\x6f\x71\x44\x38\x6b\x4b\x44\x68\x56\x63\x51\x6d\x6f\x6e','\x57\x50\x56\x63\x53\x30\x68\x64\x53\x43\x6f\x58','\x57\x51\x54\x4c\x70\x38\x6b\x6e\x57\x51\x43','\x57\x4f\x76\x71\x57\x51\x39\x47\x57\x34\x56\x63\x4e\x71','\x57\x36\x64\x63\x51\x53\x6f\x6e\x57\x4f\x61\x30\x65\x4c\x6c\x63\x53\x57','\x57\x37\x68\x63\x50\x53\x6f\x6b','\x6b\x43\x6b\x59\x66\x53\x6b\x33\x7a\x61','\x6b\x53\x6f\x36\x76\x6d\x6f\x79\x46\x6d\x6f\x35\x66\x72\x47','\x41\x4e\x4f\x45\x57\x35\x78\x64\x56\x47','\x57\x35\x30\x50\x67\x43\x6f\x6a\x71\x71','\x57\x35\x47\x2f\x42\x43\x6f\x44\x46\x76\x37\x64\x55\x61','\x57\x50\x4b\x6d\x57\x34\x70\x63\x48\x62\x56\x63\x4e\x53\x6f\x6d\x7a\x57','\x6f\x57\x66\x77\x57\x37\x74\x64\x49\x53\x6f\x4d\x57\x34\x76\x4b','\x64\x38\x6b\x72\x57\x35\x34\x45\x41\x78\x6c\x64\x53\x72\x47','\x6b\x6d\x6b\x69\x6e\x38\x6b\x77\x57\x51\x6d','\x57\x34\x4c\x7a\x57\x34\x42\x64\x53\x6d\x6b\x52','\x6d\x59\x39\x54\x44\x33\x38','\x6c\x38\x6f\x34\x57\x51\x79\x67\x57\x34\x64\x64\x47\x72\x79\x35','\x57\x51\x56\x63\x47\x68\x74\x64\x56\x61','\x6e\x4a\x6c\x64\x54\x68\x79\x48\x6e\x43\x6b\x6d\x63\x71','\x57\x4f\x6a\x6a\x57\x51\x58\x51\x57\x4f\x2f\x64\x4e\x76\x69','\x57\x52\x37\x63\x4d\x4d\x68\x64\x48\x53\x6f\x48\x6d\x4d\x76\x43','\x6c\x32\x46\x64\x4d\x38\x6f\x59\x57\x35\x64\x63\x49\x38\x6b\x76\x64\x57','\x6e\x43\x6f\x64\x6c\x71','\x6d\x78\x34\x53\x57\x37\x6d\x61\x42\x53\x6f\x70\x57\x4f\x57','\x69\x43\x6b\x47\x46\x77\x57\x64\x57\x51\x42\x63\x4f\x61\x38','\x6f\x6d\x6f\x58\x57\x51\x30\x43\x57\x34\x2f\x64\x49\x57','\x69\x43\x6b\x68\x65\x53\x6b\x31\x57\x50\x34','\x6e\x57\x4f\x79\x57\x50\x37\x64\x52\x6d\x6f\x42\x57\x36\x44\x64','\x67\x38\x6f\x2f\x6d\x6d\x6f\x2b\x43\x58\x65','\x57\x50\x42\x64\x56\x66\x68\x64\x4c\x43\x6f\x73\x57\x50\x69','\x73\x49\x48\x35\x57\x51\x78\x63\x47\x71','\x57\x4f\x52\x64\x4f\x76\x4e\x64\x49\x53\x6f\x6f\x57\x52\x2f\x63\x52\x53\x6b\x6b','\x57\x35\x75\x44\x57\x52\x64\x64\x53\x38\x6b\x32\x57\x36\x66\x47\x65\x57','\x6c\x4d\x46\x64\x4d\x53\x6f\x54\x57\x34\x68\x63\x4d\x6d\x6b\x6f\x74\x61','\x57\x50\x47\x38\x42\x31\x47','\x57\x50\x71\x61\x57\x50\x33\x63\x51\x43\x6f\x55\x57\x35\x37\x63\x4e\x43\x6f\x4f\x57\x36\x6c\x63\x4a\x53\x6f\x4e\x6e\x71','\x44\x33\x38\x67\x69\x38\x6b\x2f\x57\x34\x69','\x57\x50\x38\x50\x77\x6d\x6b\x32\x57\x51\x38','\x46\x67\x61\x71\x57\x34\x78\x64\x54\x38\x6b\x71\x67\x57','\x57\x4f\x75\x6b\x42\x75\x46\x64\x4c\x61','\x71\x6d\x6f\x46\x76\x6d\x6f\x49\x57\x34\x64\x63\x4d\x43\x6f\x5a\x57\x51\x61\x36\x57\x36\x64\x63\x53\x5a\x4e\x64\x56\x38\x6b\x6e','\x6a\x6d\x6f\x77\x73\x43\x6b\x35\x43\x47','\x67\x53\x6f\x6e\x44\x6d\x6b\x31\x76\x71','\x57\x51\x62\x36\x57\x34\x42\x63\x4c\x47','\x57\x4f\x34\x77\x71\x6d\x6f\x34\x46\x68\x42\x64\x47\x6d\x6b\x52','\x69\x6d\x6b\x65\x75\x57','\x6e\x58\x6e\x4a\x57\x34\x78\x64\x4d\x74\x30','\x42\x53\x6b\x70\x61\x4d\x33\x63\x51\x57','\x76\x61\x50\x37\x57\x52\x64\x63\x52\x38\x6f\x34','\x7a\x6d\x6f\x4a\x76\x4d\x34\x70\x57\x34\x70\x63\x50\x48\x65','\x57\x51\x61\x70\x67\x43\x6b\x76\x57\x4f\x70\x63\x54\x49\x4b\x72','\x70\x5a\x4f\x72\x57\x34\x30\x59','\x46\x6d\x6f\x39\x75\x4d\x34\x45\x57\x4f\x52\x63\x52\x72\x79','\x67\x74\x48\x30\x74\x33\x46\x64\x4b\x67\x56\x64\x52\x71','\x6a\x53\x6b\x71\x57\x34\x69\x6c\x79\x33\x52\x63\x55\x76\x53','\x7a\x73\x68\x63\x4c\x6d\x6b\x47\x57\x51\x46\x63\x4b\x72\x72\x6f','\x6a\x48\x58\x74\x73\x4e\x34','\x6c\x53\x6b\x6c\x63\x53\x6b\x31\x57\x50\x46\x64\x47\x6d\x6b\x49\x57\x37\x65','\x57\x35\x71\x79\x57\x51\x4a\x64\x51\x57','\x57\x36\x6e\x6a\x57\x37\x70\x64\x4c\x53\x6b\x31','\x6a\x6d\x6f\x74\x71\x43\x6b\x5a\x43\x4e\x56\x63\x51\x43\x6f\x65','\x57\x4f\x57\x43\x74\x6d\x6f\x38\x77\x68\x37\x64\x4c\x53\x6b\x50','\x43\x33\x79\x76\x46\x57','\x6f\x6d\x6b\x59\x46\x5a\x34','\x75\x38\x6b\x79\x57\x4f\x78\x64\x52\x6d\x6b\x73','\x61\x38\x6f\x30\x7a\x53\x6b\x6d','\x66\x38\x6b\x51\x69\x43\x6b\x42\x57\x50\x57','\x61\x73\x72\x61\x57\x52\x4e\x64\x51\x47','\x44\x4e\x69\x6e\x44\x6d\x6f\x50\x57\x4f\x64\x63\x56\x43\x6b\x6e','\x6d\x63\x53\x63\x57\x34\x75\x4d','\x79\x53\x6f\x43\x75\x4e\x38\x48','\x6f\x74\x69\x53\x57\x37\x34\x76\x7a\x43\x6f\x6d\x57\x4f\x43','\x70\x53\x6f\x74\x63\x6d\x6f\x73\x75\x5a\x4f','\x66\x43\x6b\x45\x57\x52\x6e\x2b\x41\x47','\x44\x43\x6b\x39\x57\x52\x5a\x64\x4a\x43\x6b\x53','\x57\x52\x6a\x6d\x66\x57','\x62\x38\x6f\x51\x7a\x6d\x6f\x56\x57\x4f\x47','\x7a\x43\x6b\x72\x44\x4e\x42\x64\x4b\x73\x52\x64\x4c\x62\x46\x64\x52\x76\x6d\x30\x70\x4a\x43','\x57\x37\x44\x63\x57\x37\x56\x64\x56\x6d\x6b\x6d','\x57\x50\x70\x64\x56\x31\x70\x63\x4b\x53\x6f\x77\x57\x4f\x37\x63\x55\x38\x6b\x75','\x66\x58\x39\x38\x7a\x4d\x47','\x69\x38\x6b\x61\x57\x51\x76\x35\x43\x61','\x6a\x6d\x6f\x33\x72\x43\x6f\x31\x43\x6d\x6f\x36\x6a\x4c\x34','\x57\x51\x35\x73\x57\x35\x34','\x57\x50\x44\x62\x57\x36\x52\x63\x51\x53\x6b\x57','\x57\x4f\x66\x31\x57\x50\x4c\x6b\x57\x50\x71','\x73\x62\x44\x5a\x57\x51\x2f\x63\x53\x38\x6f\x76\x6f\x43\x6b\x51','\x46\x38\x6f\x2f\x71\x33\x38\x66\x57\x4f\x2f\x63\x4e\x31\x47','\x57\x4f\x76\x68\x57\x35\x50\x74\x64\x71','\x6c\x53\x6b\x42\x66\x6d\x6b\x57\x57\x50\x74\x64\x4d\x6d\x6b\x49\x57\x37\x65','\x70\x6d\x6b\x32\x42\x63\x69\x52\x46\x61','\x44\x53\x6b\x39\x65\x58\x52\x64\x53\x47','\x57\x36\x65\x45\x72\x6d\x6b\x67\x63\x53\x6f\x6d\x57\x34\x78\x63\x4c\x71','\x77\x47\x50\x66\x57\x4f\x42\x63\x4a\x57','\x6a\x58\x31\x44\x57\x37\x56\x64\x49\x53\x6f\x39\x57\x34\x72\x53','\x71\x6d\x6f\x4d\x76\x4d\x43\x7a','\x64\x71\x62\x32\x57\x35\x70\x64\x4a\x48\x56\x64\x4c\x48\x53','\x6c\x43\x6b\x77\x57\x34\x47\x56\x42\x57','\x6a\x53\x6f\x6f\x64\x53\x6f\x77\x75\x58\x46\x63\x49\x6d\x6f\x67','\x42\x67\x69\x66\x74\x53\x6f\x36\x57\x4f\x68\x63\x55\x53\x6b\x66','\x57\x35\x76\x46\x57\x34\x46\x64\x54\x71','\x57\x52\x39\x67\x65\x43\x6b\x73\x57\x50\x79','\x57\x36\x74\x63\x54\x38\x6f\x61\x57\x4f\x38\x71\x69\x31\x78\x63\x4e\x71','\x41\x58\x62\x77\x57\x50\x78\x63\x55\x71','\x66\x6d\x6f\x76\x70\x71\x78\x64\x55\x53\x6f\x4f\x6b\x33\x38','\x6a\x38\x6f\x6a\x69\x73\x33\x63\x47\x32\x52\x63\x4d\x63\x71','\x6f\x6d\x6f\x45\x78\x43\x6b\x38\x41\x78\x70\x63\x4f\x47','\x6a\x71\x39\x6b\x57\x52\x75','\x57\x50\x6a\x49\x6e\x38\x6b\x6f\x57\x52\x43','\x79\x6d\x6f\x79\x6a\x6d\x6b\x4d\x57\x36\x4f','\x57\x36\x4b\x46\x57\x52\x68\x64\x53\x53\x6b\x2b\x57\x36\x66\x4b','\x65\x53\x6b\x78\x57\x4f\x7a\x6e\x76\x53\x6b\x57\x57\x34\x62\x59','\x6b\x43\x6f\x35\x76\x6d\x6f\x51\x57\x51\x6c\x64\x48\x58\x71\x5a','\x6f\x43\x6f\x31\x57\x51\x30\x42','\x6d\x53\x6b\x6d\x6f\x6d\x6b\x6e\x42\x61','\x69\x63\x78\x64\x52\x32\x30\x52','\x68\x6d\x6b\x4e\x6f\x6d\x6b\x7a\x74\x53\x6b\x4f\x41\x32\x79','\x57\x4f\x52\x64\x4e\x4d\x2f\x64\x4f\x43\x6f\x30','\x57\x50\x35\x49\x57\x50\x76\x54\x57\x4f\x4f','\x77\x43\x6f\x4b\x41\x43\x6f\x70\x67\x6d\x6f\x64\x6d\x75\x48\x56\x57\x52\x35\x6c\x57\x36\x4a\x63\x4c\x61','\x63\x53\x6f\x65\x57\x51\x52\x63\x4f\x38\x6f\x77\x7a\x38\x6b\x57\x74\x71','\x70\x6d\x6b\x76\x57\x34\x70\x64\x4d\x65\x76\x6c\x63\x72\x71','\x61\x66\x42\x63\x47\x6d\x6b\x52\x57\x4f\x34','\x69\x6d\x6b\x34\x57\x52\x50\x48\x46\x43\x6b\x73\x57\x36\x34\x72','\x44\x53\x6b\x52\x57\x50\x6c\x64\x53\x6d\x6b\x42','\x73\x53\x6b\x46\x68\x4b\x70\x63\x52\x71','\x57\x4f\x37\x64\x4f\x76\x2f\x64\x4e\x57','\x57\x51\x61\x54\x57\x36\x4a\x63\x54\x57','\x57\x51\x50\x46\x57\x35\x72\x44\x66\x47\x6c\x63\x50\x61','\x70\x53\x6f\x4d\x57\x52\x61\x6e\x57\x35\x64\x64\x52\x74\x30\x55','\x57\x34\x57\x4e\x69\x53\x6f\x30\x79\x71','\x65\x53\x6b\x78\x57\x4f\x7a\x6e','\x71\x38\x6b\x6b\x6a\x62\x74\x64\x55\x38\x6f\x46\x6e\x47','\x6f\x43\x6f\x4c\x77\x48\x4a\x64\x4d\x38\x6b\x6b\x68\x43\x6f\x50\x57\x37\x56\x64\x4e\x6d\x6f\x6f\x75\x68\x50\x4d','\x70\x53\x6b\x34\x65\x53\x6b\x6d\x73\x47','\x6d\x43\x6f\x4d\x76\x43\x6f\x70','\x57\x4f\x65\x61\x77\x43\x6f\x5a\x72\x78\x6c\x64\x4e\x71','\x65\x38\x6f\x39\x76\x53\x6f\x4e\x57\x51\x4a\x64\x48\x31\x30','\x76\x38\x6b\x45\x78\x4c\x6d\x30\x67\x6d\x6b\x4c\x57\x36\x43\x77\x65\x38\x6f\x71\x70\x71','\x69\x6d\x6f\x59\x57\x52\x79\x73\x57\x37\x42\x64\x47\x73\x61\x37','\x64\x38\x6f\x50\x46\x6d\x6b\x77\x57\x51\x62\x63\x75\x43\x6b\x4d','\x46\x38\x6b\x4e\x63\x65\x33\x63\x49\x38\x6f\x4b\x74\x43\x6b\x32','\x57\x4f\x58\x66\x57\x36\x5a\x63\x56\x43\x6b\x59','\x6b\x38\x6f\x2b\x72\x43\x6f\x6f\x43\x47','\x63\x31\x61\x4f\x57\x36\x6c\x64\x55\x6d\x6b\x34\x45\x6d\x6b\x6c\x57\x34\x62\x4a\x57\x37\x69\x33\x57\x50\x53','\x57\x51\x6d\x32\x57\x36\x56\x63\x51\x73\x34','\x67\x53\x6f\x33\x74\x38\x6f\x65\x44\x43\x6f\x38\x6c\x57','\x75\x38\x6b\x45\x63\x32\x4a\x63\x4d\x61','\x57\x35\x69\x4d\x65\x38\x6b\x67\x57\x35\x46\x64\x55\x72\x2f\x64\x4c\x61','\x44\x67\x75\x69\x44\x38\x6f\x4a\x57\x50\x4a\x63\x56\x43\x6b\x32','\x57\x35\x52\x63\x50\x38\x6f\x47\x57\x51\x79\x54','\x63\x76\x75\x51\x57\x36\x46\x64\x55\x38\x6b\x36\x67\x43\x6b\x6e\x57\x35\x58\x2f\x57\x36\x79\x33','\x6e\x43\x6f\x73\x44\x43\x6f\x63\x57\x4f\x42\x64\x52\x68\x61\x45','\x68\x53\x6f\x49\x71\x43\x6f\x53\x57\x51\x74\x64\x4b\x61','\x69\x6d\x6b\x78\x57\x34\x75\x73','\x42\x68\x33\x64\x4d\x38\x6f\x59\x57\x34\x33\x63\x4e\x53\x6b\x6f\x63\x71','\x57\x35\x66\x46\x57\x35\x4b','\x6c\x58\x44\x4c\x57\x35\x4e\x64\x4a\x73\x68\x64\x52\x71\x43','\x57\x37\x50\x52\x64\x6d\x6f\x52\x57\x36\x54\x50\x57\x4f\x7a\x63\x66\x72\x79\x2f\x57\x52\x4c\x67','\x6a\x53\x6f\x6f\x64\x53\x6f\x77\x75\x58\x46\x63\x4d\x38\x6f\x42','\x61\x47\x7a\x4c\x57\x35\x68\x64\x49\x64\x33\x63\x4c\x62\x79','\x6e\x72\x31\x57\x57\x35\x46\x64\x4a\x49\x4f','\x57\x34\x69\x74\x57\x51\x57','\x68\x49\x31\x68\x57\x36\x78\x64\x51\x72\x74\x64\x53\x64\x79','\x6e\x61\x31\x7a\x57\x52\x42\x64\x4e\x47','\x6f\x43\x6f\x39\x57\x51\x53\x44\x57\x34\x42\x64\x48\x5a\x31\x38','\x57\x36\x43\x79\x6b\x38\x6b\x32\x57\x37\x56\x64\x4c\x71\x4a\x64\x50\x61','\x57\x50\x61\x2f\x74\x71','\x57\x35\x38\x46\x57\x4f\x68\x64\x54\x38\x6b\x39\x57\x37\x65','\x57\x50\x33\x64\x47\x66\x2f\x64\x4c\x43\x6f\x7a\x57\x4f\x68\x63\x52\x53\x6b\x6e','\x6a\x72\x6d\x71\x57\x34\x34\x49','\x57\x51\x52\x63\x4f\x72\x38\x53\x43\x38\x6b\x61\x72\x6d\x6b\x71\x57\x50\x61\x69\x57\x51\x70\x63\x4d\x77\x71','\x57\x35\x71\x37\x63\x53\x6b\x43\x57\x34\x33\x64\x53\x47\x78\x64\x47\x61','\x63\x53\x6b\x50\x57\x52\x31\x78\x44\x61','\x57\x52\x5a\x63\x4e\x31\x68\x64\x52\x43\x6f\x68','\x57\x36\x52\x64\x4f\x65\x72\x52\x6a\x61','\x42\x78\x57\x71\x57\x34\x74\x64\x56\x53\x6f\x76\x68\x67\x71','\x57\x51\x52\x64\x49\x4d\x64\x64\x4e\x53\x6f\x73','\x7a\x38\x6b\x57\x57\x50\x6c\x64\x52\x53\x6b\x42\x67\x58\x57','\x42\x32\x65\x76\x57\x36\x56\x64\x47\x57','\x73\x38\x6b\x43\x57\x52\x78\x63\x56\x53\x6f\x41\x71\x43\x6b\x38\x75\x47','\x57\x50\x56\x64\x53\x66\x70\x64\x52\x43\x6f\x75\x57\x4f\x2f\x63\x54\x53\x6b\x75','\x65\x6d\x6b\x4b\x57\x36\x6c\x64\x55\x4e\x7a\x2b\x6d\x4d\x71','\x69\x6d\x6f\x70\x64\x58\x64\x63\x52\x75\x33\x63\x4d\x73\x71'];_0x25cb=function(){return _0x192338;};return _0x25cb();}
@@ -5,6 +5,7 @@ const { MailboxStore } = require('./mailbox/store');
5
5
  const { ProxyHttpServer } = require('./server/http');
6
6
  const { buildRoutes } = require('./server/routes');
7
7
  const { buildMessagesHandler, canonicalizeForBedrock, supportsAdaptiveThinking } = require('./router/messages_route');
8
+ const { buildResponsesHandler } = require('./router/responses_route');
8
9
  const { SyncEngine } = require('./sync/engine');
9
10
  const { LifecycleManager } = require('./lifecycle/manager');
10
11
  const { TaskMonitor } = require('./task/monitor');
@@ -12,10 +13,55 @@ const { SkillUpdater } = require('./extensions/skillUpdater');
12
13
  const { DmHandler } = require('./extensions/dmHandler');
13
14
  const { SessionHandler } = require('./extensions/sessionHandler');
14
15
  const { TraceControl } = require('./extensions/traceControl');
16
+ const { backfillProxyTraceUploads } = require('./trace/extractor');
17
+
18
+ const TRACE_BACKFILL_DRAIN_MAX_PASSES = 8;
19
+ const TRACE_BACKFILL_STARTUP_DRAIN_MAX_MS = 250;
20
+ const TRACE_BACKFILL_RUNTIME_DRAIN_MAX_MS = 50;
15
21
 
16
22
  // Lazy via paths.getEvomapPath() — honors EVOLVER_HOME (#114).
17
23
  function _defaultDataDir() { return getEvomapPath('mailbox'); }
18
24
 
25
+ const DEFAULT_OPENAI_BASE_URL = 'https://api.openai.com/v1';
26
+
27
+ function isAllowedOpenAIHostname(hostname) {
28
+ const h = String(hostname || '').toLowerCase();
29
+ return h === 'api.openai.com' || h.endsWith('.api.openai.com');
30
+ }
31
+
32
+ function resolveOpenAIBaseUrl(raw, { trustedOverride = false } = {}) {
33
+ const value = String(raw || DEFAULT_OPENAI_BASE_URL).replace(/\/+$/, '');
34
+ if (trustedOverride) return value;
35
+
36
+ let parsed;
37
+ try {
38
+ parsed = new URL(value);
39
+ } catch {
40
+ throw new Error('[proxy] EVOMAP_OPENAI_BASE_URL is not a valid URL');
41
+ }
42
+ if (
43
+ parsed.protocol !== 'https:'
44
+ || !isAllowedOpenAIHostname(parsed.hostname)
45
+ || parsed.pathname !== '/v1'
46
+ || parsed.username
47
+ || parsed.password
48
+ || parsed.search
49
+ || parsed.hash
50
+ ) {
51
+ throw new Error('[proxy] EVOMAP_OPENAI_BASE_URL must be an OpenAI https://*.api.openai.com/v1 endpoint');
52
+ }
53
+ return value;
54
+ }
55
+
56
+ function makeOpenAIGatewayError(err, fallbackStatus = 502) {
57
+ const name = err && err.name ? String(err.name) : '';
58
+ const isTimeout = name === 'TimeoutError' || name === 'AbortError';
59
+ const out = new Error(isTimeout ? 'openai upstream timed out' : 'openai upstream request failed');
60
+ out.statusCode = isTimeout ? 504 : fallbackStatus;
61
+ out.cause = err;
62
+ return out;
63
+ }
64
+
19
65
  // The hub serves asset signal-search as `GET /a2a/assets/search` with query
20
66
  // params (signals, status, limit, fields, domain); `signals`/`fields` are
21
67
  // comma-separated lists. The proxy's public contract stays `POST /asset/search`
@@ -78,6 +124,8 @@ class EvoMapProxy {
78
124
  this.logger = opts.logger || console;
79
125
  this._skillPath = opts.skillPath || null;
80
126
  this._anthropicBaseUrl = (opts.anthropicBaseUrl || process.env.EVOMAP_ANTHROPIC_BASE_URL || 'https://api.anthropic.com').replace(/\/+$/, '');
127
+ this._openaiBaseUrl = String(opts.openaiBaseUrl || process.env.EVOMAP_OPENAI_BASE_URL || DEFAULT_OPENAI_BASE_URL).replace(/\/+$/, '');
128
+ this._openaiBaseUrlTrusted = !!opts.openaiBaseUrl;
81
129
 
82
130
  this.store = null;
83
131
  this.server = null;
@@ -88,6 +136,7 @@ class EvoMapProxy {
88
136
  this.dmHandler = null;
89
137
  this.sessionHandler = null;
90
138
  this.traceControl = null;
139
+ this._traceBackfillDraining = false;
91
140
  this._started = false;
92
141
  }
93
142
 
@@ -141,6 +190,9 @@ class EvoMapProxy {
141
190
  getHeaders,
142
191
  logger: this.logger,
143
192
  onAuthError: () => this.lifecycle.reAuthenticate(),
193
+ onOutboundFlushed: () => this._drainProxyTraceBackfill({
194
+ maxMs: TRACE_BACKFILL_RUNTIME_DRAIN_MAX_MS,
195
+ }),
144
196
  onInboundReceived: () => {
145
197
  try { this.skillUpdater?.pollAndApply(); } catch (e) {
146
198
  this.logger?.warn?.('[proxy] skillUpdater.pollAndApply failed:', e.message);
@@ -188,6 +240,12 @@ class EvoMapProxy {
188
240
  traceStore: this.store,
189
241
  onTraceQueued: () => this.sync?.notifyNewOutbound(),
190
242
  });
243
+ const responsesHandler = buildResponsesHandler({
244
+ openAIProxy: (reqPath, body, opts) => this._proxyOpenAIResponses(reqPath, body, opts),
245
+ logger: this.logger,
246
+ traceStore: this.store,
247
+ onTraceQueued: () => this.sync?.notifyNewOutbound(),
248
+ });
191
249
 
192
250
  const routes = buildRoutes(this.store, proxyHandlers, this.taskMonitor, {
193
251
  dmHandler: this.dmHandler,
@@ -195,6 +253,7 @@ class EvoMapProxy {
195
253
  sessionHandler: this.sessionHandler,
196
254
  getHubMailboxStatus: () => this._getHubMailboxStatus(),
197
255
  messagesHandler,
256
+ responsesHandler,
198
257
  });
199
258
 
200
259
  const OUTBOUND_ROUTES = [
@@ -237,6 +296,8 @@ class EvoMapProxy {
237
296
  this.logger.warn('[proxy] No A2A_HUB_URL set, running in offline/local mode');
238
297
  }
239
298
 
299
+ this._drainProxyTraceBackfill({ maxMs: TRACE_BACKFILL_STARTUP_DRAIN_MAX_MS });
300
+
240
301
  this._started = true;
241
302
 
242
303
  return {
@@ -246,6 +307,66 @@ class EvoMapProxy {
246
307
  };
247
308
  }
248
309
 
310
+ _runProxyTraceBackfillPass() {
311
+ try {
312
+ return backfillProxyTraceUploads({
313
+ store: this.store,
314
+ logger: this.logger,
315
+ });
316
+ } catch (e) {
317
+ this.logger.warn('[proxy] trace backfill failed:', e && e.message ? e.message : e);
318
+ return { queued: 0, reasons: { thrown: 1 } };
319
+ }
320
+ }
321
+
322
+ _drainProxyTraceBackfill({
323
+ maxPasses = TRACE_BACKFILL_DRAIN_MAX_PASSES,
324
+ maxMs = TRACE_BACKFILL_RUNTIME_DRAIN_MAX_MS,
325
+ } = {}) {
326
+ if (this._traceBackfillDraining) return { queued: 0, passes: 0, deferred: true };
327
+ this._traceBackfillDraining = true;
328
+ const started = Date.now();
329
+ const total = {
330
+ queued: 0,
331
+ scanned: 0,
332
+ skipped: 0,
333
+ duplicates: 0,
334
+ passes: 0,
335
+ reasons: {},
336
+ };
337
+ try {
338
+ for (let i = 0; i < maxPasses; i++) {
339
+ const stats = this._runProxyTraceBackfillPass();
340
+ total.passes += 1;
341
+ total.queued += stats.queued || 0;
342
+ total.scanned += stats.scanned || 0;
343
+ total.skipped += stats.skipped || 0;
344
+ total.duplicates += stats.duplicates || 0;
345
+ for (const [reason, count] of Object.entries(stats.reasons || {})) {
346
+ total.reasons[reason] = (total.reasons[reason] || 0) + count;
347
+ }
348
+ const madeProgress = (stats.scanned || 0) > 0
349
+ || (stats.queued || 0) > 0
350
+ || (stats.skipped || 0) > 0
351
+ || (stats.duplicates || 0) > 0;
352
+ if (!madeProgress) break;
353
+ if (stats.reasons?.max_pending_uploads || stats.reasons?.collection_disabled
354
+ || stats.reasons?.missing_file || stats.reasons?.missing_store
355
+ || stats.reasons?.read_failed || stats.reasons?.thrown) {
356
+ break;
357
+ }
358
+ if (Date.now() - started >= maxMs) break;
359
+ }
360
+ } finally {
361
+ this._traceBackfillDraining = false;
362
+ }
363
+ if (total.queued > 0) {
364
+ this.logger.log('[proxy] queued ' + total.queued + ' existing proxy trace upload(s)');
365
+ this.sync?.notifyNewOutbound();
366
+ }
367
+ return total;
368
+ }
369
+
249
370
  async stop() {
250
371
  if (!this._started) return;
251
372
  // Tear down in deliberate reverse-of-start order, but don't let one
@@ -406,6 +527,83 @@ class EvoMapProxy {
406
527
  };
407
528
  }
408
529
 
530
+ // OpenAI Responses-compatible passthrough for Codex custom providers. The
531
+ // proxy token is consumed by ProxyHttpServer and must never be forwarded as
532
+ // upstream auth; the daemon supplies the real upstream key from env.
533
+ async _proxyOpenAIResponses(reqPath, body, opts = {}) {
534
+ const baseUrl = resolveOpenAIBaseUrl(opts.baseUrl || this._openaiBaseUrl || DEFAULT_OPENAI_BASE_URL, {
535
+ trustedOverride: !!opts.baseUrl || this._openaiBaseUrlTrusted,
536
+ });
537
+ const inbound = opts.inboundHeaders || {};
538
+ const timeoutMs = opts.timeoutMs || 60_000;
539
+
540
+ const fwd = { 'content-type': 'application/json' };
541
+ for (const [k, v] of Object.entries(inbound)) {
542
+ if (v === undefined || v === null) continue;
543
+ const lk = k.toLowerCase();
544
+ if (
545
+ lk === 'openai-organization'
546
+ || lk === 'openai-project'
547
+ || lk === 'openai-beta'
548
+ || lk.startsWith('x-stainless-')
549
+ ) {
550
+ fwd[lk] = Array.isArray(v) ? v.join(', ') : String(v);
551
+ }
552
+ }
553
+
554
+ const upstreamKey = process.env.EVOMAP_OPENAI_API_KEY || process.env.OPENAI_API_KEY || '';
555
+ if (!upstreamKey) {
556
+ const err = new Error('openai api key required');
557
+ err.statusCode = 401;
558
+ throw err;
559
+ }
560
+ if (upstreamKey) {
561
+ fwd.authorization = `Bearer ${upstreamKey}`;
562
+ }
563
+
564
+ const endpoint = `${baseUrl}${reqPath}`;
565
+ const abortController = new AbortController();
566
+ const timeoutErr = new Error('openai upstream timed out');
567
+ timeoutErr.name = 'TimeoutError';
568
+ const abortTimer = setTimeout(() => abortController.abort(timeoutErr), timeoutMs);
569
+ abortTimer.unref?.();
570
+ let res;
571
+ try {
572
+ res = await fetch(endpoint, {
573
+ method: 'POST',
574
+ headers: fwd,
575
+ body: JSON.stringify(body || {}),
576
+ signal: abortController.signal,
577
+ });
578
+ } catch (err) {
579
+ clearTimeout(abortTimer);
580
+ throw makeOpenAIGatewayError(err);
581
+ }
582
+
583
+ const headers = Object.fromEntries(res.headers.entries());
584
+ const contentType = (headers['content-type'] || '').toLowerCase();
585
+ const isStream = contentType.includes('text/event-stream');
586
+ if (isStream) clearTimeout(abortTimer);
587
+
588
+ const readText = async () => {
589
+ try {
590
+ return await res.text();
591
+ } catch (err) {
592
+ throw makeOpenAIGatewayError(err);
593
+ } finally {
594
+ clearTimeout(abortTimer);
595
+ }
596
+ };
597
+
598
+ return {
599
+ status: res.status,
600
+ headers,
601
+ stream: isStream ? res.body : null,
602
+ json: isStream ? null : async () => JSON.parse(await readText()),
603
+ text: isStream ? null : readText,
604
+ };
605
+ }
606
+
409
607
  // Bedrock upstream mode: same return contract as _proxyAnthropic so
410
608
  // messages_route.js and ProxyHttpServer._streamResponse don't change.
411
609
  // Body transformation: model -> URL path; inject anthropic_version;
@@ -667,4 +865,11 @@ async function startProxy(opts = {}) {
667
865
  return { proxy, ...info };
668
866
  }
669
867
 
670
- module.exports = { EvoMapProxy, startProxy, buildAssetSearchQuery, buildSemanticSearchQuery, planAssetSearch };
868
+ module.exports = {
869
+ EvoMapProxy,
870
+ startProxy,
871
+ buildAssetSearchQuery,
872
+ buildSemanticSearchQuery,
873
+ planAssetSearch,
874
+ resolveOpenAIBaseUrl,
875
+ };
@@ -1,52 +1 @@
1
- 'use strict';
2
-
3
- const { getProxyToken, getProxyUrl } = require('./server/settings');
4
-
5
- function isDisabled(env = process.env) {
6
- const raw = String(env.EVOMAP_PROXY_AUTO_INJECT || '').trim().toLowerCase();
7
- return raw === '0' || raw === 'false' || raw === 'off' || raw === 'none' || raw === 'no';
8
- }
9
-
10
- function injectProxyEnv(info = {}, env = process.env) {
11
- if (isDisabled(env)) {
12
- return { injected: false, reason: 'disabled' };
13
- }
14
-
15
- const useSettingsFallback = env === process.env && info.useSettings !== false;
16
- const url = String(info.url || (useSettingsFallback ? getProxyUrl() : '') || '').replace(/\/+$/, '');
17
- const token = String(info.token || (useSettingsFallback ? getProxyToken() : '') || '');
18
- if (!url || !token) {
19
- return { injected: false, reason: 'missing_proxy_settings' };
20
- }
21
-
22
- const currentBase = String(env.ANTHROPIC_BASE_URL || '').trim().replace(/\/+$/, '');
23
- if (currentBase && currentBase !== url && !env.EVOMAP_ANTHROPIC_BASE_URL) {
24
- env.EVOMAP_ANTHROPIC_BASE_URL = currentBase;
25
- }
26
- const currentAuthToken = String(env.ANTHROPIC_AUTH_TOKEN || '').trim();
27
- if (currentAuthToken && currentAuthToken !== token && !env.EVOMAP_ANTHROPIC_AUTH_TOKEN) {
28
- env.EVOMAP_ANTHROPIC_AUTH_TOKEN = currentAuthToken;
29
- }
30
-
31
- env.ANTHROPIC_BASE_URL = url;
32
- env.ANTHROPIC_AUTH_TOKEN = token;
33
- env.CUSTOM_API_KEY = token;
34
- env.EVOMAP_PROXY_URL = url;
35
- env.EVOMAP_PROXY_AUTO_INJECTED = '1';
36
-
37
- return {
38
- injected: true,
39
- url,
40
- vars: [
41
- 'ANTHROPIC_BASE_URL',
42
- 'ANTHROPIC_AUTH_TOKEN',
43
- 'CUSTOM_API_KEY',
44
- 'EVOMAP_PROXY_URL',
45
- ],
46
- };
47
- }
48
-
49
- module.exports = {
50
- injectProxyEnv,
51
- isDisabled,
52
- };
1
+ const _0x2095ef=_0x488d;(function(_0x56c998,_0x4d8350){const _0x3bddf7=_0x488d,_0x2dd1dd=_0x56c998();while(!![]){try{const _0x136d2d=parseInt(_0x3bddf7(0x218,'\x4f\x68\x26\x56'))/(0x20af+0x10a2+-0x18*0x20e)*(-parseInt(_0x3bddf7(0x25b,'\x71\x30\x38\x67'))/(0x850+-0x6e8+-0x166))+parseInt(_0x3bddf7(0x1d2,'\x36\x2a\x6e\x37'))/(0x14f*0x12+0x18f9+-0x3084)+-parseInt(_0x3bddf7(0x239,'\x5e\x55\x52\x71'))/(0xb*-0x62+-0x40*0x24+0xd3a)*(-parseInt(_0x3bddf7(0x21d,'\x36\x47\x52\x53'))/(-0xef*0x1+0xd7*-0x12+0x1012))+parseInt(_0x3bddf7(0x246,'\x48\x43\x4c\x73'))/(-0x1e6f+0x1*0x2114+-0x3d*0xb)*(parseInt(_0x3bddf7(0x1d4,'\x61\x32\x73\x4c'))/(0xc3b*-0x1+0x735*-0x1+0x1377))+-parseInt(_0x3bddf7(0x1ee,'\x54\x58\x79\x37'))/(-0x1b*-0x149+0x18f1+-0x3b9c)+-parseInt(_0x3bddf7(0x1e5,'\x5e\x55\x52\x71'))/(0x194f+0x54f+-0x1e95)+parseInt(_0x3bddf7(0x23d,'\x36\x47\x52\x53'))/(0x23*-0xe3+-0xa7a+0x298d);if(_0x136d2d===_0x4d8350)break;else _0x2dd1dd['push'](_0x2dd1dd['shift']());}catch(_0x4b7a8e){_0x2dd1dd['push'](_0x2dd1dd['shift']());}}}(_0x2f6c,0x1*0x115d21+-0x3*0xb02f+-0xfe5e));const _0x32a836=(function(){const _0x504a7a=_0x488d,_0x613817={};_0x613817[_0x504a7a(0x257,'\x21\x75\x45\x29')]='\x50\x66\x41\x59\x66',_0x613817[_0x504a7a(0x214,'\x5e\x55\x52\x71')]=function(_0x2716ce,_0x22a984){return _0x2716ce!==_0x22a984;},_0x613817[_0x504a7a(0x22e,'\x47\x4c\x6d\x42')]=_0x504a7a(0x208,'\x79\x4d\x66\x51');const _0x168126=_0x613817;let _0x2c52dc=!![];return function(_0x243c90,_0x209fd9){const _0x2cf110=_0x504a7a,_0x350bb7={};_0x350bb7[_0x2cf110(0x227,'\x56\x78\x69\x35')]=_0x168126['\x66\x70\x51\x4a\x69'];const _0x23907c=_0x350bb7;if(_0x168126[_0x2cf110(0x222,'\x33\x6b\x61\x51')](_0x168126[_0x2cf110(0x1f8,'\x36\x47\x52\x53')],_0x2cf110(0x220,'\x46\x63\x65\x50')))_0x326c85[_0x2cf110(0x1ed,'\x4d\x63\x4d\x4d')+_0x2cf110(0x1f5,'\x68\x5d\x34\x52')+_0x2cf110(0x22c,'\x36\x2a\x6e\x37')+_0x2cf110(0x24a,'\x54\x58\x79\x37')]=_0x16f7fe;else{const _0x6a94de=_0x2c52dc?function(){const _0x13de98=_0x2cf110;if(_0x23907c[_0x13de98(0x1f9,'\x45\x77\x4d\x43')]!==_0x13de98(0x204,'\x4d\x63\x4d\x4d')){const _0x5659f9={};return _0x5659f9[_0x13de98(0x24f,'\x65\x31\x39\x77')]=![],_0x5659f9[_0x13de98(0x1d3,'\x65\x31\x39\x77')]=_0x13de98(0x247,'\x68\x5d\x34\x52')+_0x13de98(0x245,'\x61\x23\x41\x50')+_0x13de98(0x1dd,'\x76\x48\x30\x67'),_0x5659f9;}else{if(_0x209fd9){const _0x3eab90=_0x209fd9[_0x13de98(0x201,'\x36\x2a\x6e\x37')](_0x243c90,arguments);return _0x209fd9=null,_0x3eab90;}}}:function(){};return _0x2c52dc=![],_0x6a94de;}};}()),_0x298b99=_0x32a836(this,function(){const _0x337d40=_0x488d,_0x94e404={};_0x94e404[_0x337d40(0x1d9,'\x61\x23\x41\x50')]=_0x337d40(0x211,'\x46\x48\x29\x5b')+_0x337d40(0x230,'\x44\x50\x42\x5a');const _0x52c1f2=_0x94e404;return _0x298b99[_0x337d40(0x1f3,'\x4f\x6b\x33\x41')]()[_0x337d40(0x242,'\x56\x78\x69\x35')](_0x52c1f2[_0x337d40(0x1de,'\x76\x48\x30\x67')])[_0x337d40(0x213,'\x68\x5d\x34\x52')]()[_0x337d40(0x254,'\x33\x6b\x61\x51')+'\x74\x6f\x72'](_0x298b99)[_0x337d40(0x233,'\x4e\x77\x70\x7a')](_0x337d40(0x226,'\x6b\x2a\x4e\x77')+'\x2b\x29\x2b\x24');});_0x298b99();'use strict';const {getProxyToken:_0x13e7ff,getProxyUrl:_0x4006a7}=require(_0x2095ef(0x1ea,'\x73\x21\x62\x32')+'\x2f\x73\x65\x74\x74\x69\x6e\x67'+'\x73');function _0x488d(_0x5e917c,_0x34eed8){_0x5e917c=_0x5e917c-(0x1a32+-0x1672+-0x1*0x1f0);const _0x27e6f7=_0x2f6c();let _0x412b0f=_0x27e6f7[_0x5e917c];if(_0x488d['\x54\x6f\x73\x75\x54\x43']===undefined){var _0x5bbbd0=function(_0x122d71){const _0x514906='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';let _0x465932='',_0x2b4ea4='',_0x2bd339=_0x465932+_0x5bbbd0,_0x55bcac=(''+function(){return 0x145f+-0x3*0x2e7+-0xbaa;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(0xb*-0x219+0xf17+-0x199*-0x5);for(let _0xa0a063=0x113f+-0x1*0x208d+-0x6*-0x28d,_0x5a1769,_0x571a0c,_0xe81565=-0x1c1*-0x1+-0x2c5*0x1+-0x104*-0x1;_0x571a0c=_0x122d71['\x63\x68\x61\x72\x41\x74'](_0xe81565++);~_0x571a0c&&(_0x5a1769=_0xa0a063%(0x2682+0x17cc*0x1+-0x3e4a)?_0x5a1769*(-0x12e*0x2+0x22a9*-0x1+-0x2545*-0x1)+_0x571a0c:_0x571a0c,_0xa0a063++%(-0xd*-0x14+-0x1*-0x3b6+-0x4b6))?_0x465932+=_0x55bcac||_0x2bd339['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0xe81565+(0x1*-0xa13+0x1b2*0x9+-0x525))-(0xb37+0x77d*0x5+-0x31*0xfe)!==0x9a6+-0x1fa5+-0x755*-0x3?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0x8*0xb8+-0xf76+-0x1*-0xab5&_0x5a1769>>(-(-0xe71*-0x1+0x26*-0x49+-0x399)*_0xa0a063&0x1d*-0xc+-0x4d8+0x63a)):_0xa0a063:0x1ce0+0x26a2+-0x4382){_0x571a0c=_0x514906['\x69\x6e\x64\x65\x78\x4f\x66'](_0x571a0c);}for(let _0x41fcfb=0x1ca9+0xf15+0xb*-0x3fa,_0x407226=_0x465932['\x6c\x65\x6e\x67\x74\x68'];_0x41fcfb<_0x407226;_0x41fcfb++){_0x2b4ea4+='\x25'+('\x30\x30'+_0x465932['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x41fcfb)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x1acd+-0xa*0x11b+-0x1*0xfaf))['\x73\x6c\x69\x63\x65'](-(0x275+0x23*-0xe6+0x1cff));}return decodeURIComponent(_0x2b4ea4);};const _0x4b1803=function(_0x1c7391,_0x500c57){let _0x2f38be=[],_0x4e6d17=0x103c+-0x1e3f+-0xd3*-0x11,_0x32e1a4,_0x23cd2d='';_0x1c7391=_0x5bbbd0(_0x1c7391);let _0x58b9fa;for(_0x58b9fa=0xd8b+-0x1a7f+-0x4*-0x33d;_0x58b9fa<0x3c*0x65+0x2fe+-0x19aa;_0x58b9fa++){_0x2f38be[_0x58b9fa]=_0x58b9fa;}for(_0x58b9fa=0x2*0x67a+-0x2671+0x197d;_0x58b9fa<0x1e82+-0x144d*0x1+-0x935;_0x58b9fa++){_0x4e6d17=(_0x4e6d17+_0x2f38be[_0x58b9fa]+_0x500c57['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x58b9fa%_0x500c57['\x6c\x65\x6e\x67\x74\x68']))%(-0x1f49+-0x1ae8+0x3b31),_0x32e1a4=_0x2f38be[_0x58b9fa],_0x2f38be[_0x58b9fa]=_0x2f38be[_0x4e6d17],_0x2f38be[_0x4e6d17]=_0x32e1a4;}_0x58b9fa=-0x1bca*-0x1+-0x2bf*0x4+-0x10ce,_0x4e6d17=-0x1*0x1099+-0x418+0x14b1*0x1;for(let _0x5d9bc1=-0x3f0+0x30d*0x5+-0xb51*0x1;_0x5d9bc1<_0x1c7391['\x6c\x65\x6e\x67\x74\x68'];_0x5d9bc1++){_0x58b9fa=(_0x58b9fa+(0x5bf*0x1+0x35*-0xb+-0x377))%(0x1cc+-0x57*0xc+0x348),_0x4e6d17=(_0x4e6d17+_0x2f38be[_0x58b9fa])%(0x33c*0x3+0x1ce6+-0x12cd*0x2),_0x32e1a4=_0x2f38be[_0x58b9fa],_0x2f38be[_0x58b9fa]=_0x2f38be[_0x4e6d17],_0x2f38be[_0x4e6d17]=_0x32e1a4,_0x23cd2d+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x1c7391['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x5d9bc1)^_0x2f38be[(_0x2f38be[_0x58b9fa]+_0x2f38be[_0x4e6d17])%(-0x23ec+-0x25c7+0xd*0x5bf)]);}return _0x23cd2d;};_0x488d['\x45\x56\x42\x49\x44\x78']=_0x4b1803,_0x488d['\x70\x4b\x5a\x66\x65\x59']={},_0x488d['\x54\x6f\x73\x75\x54\x43']=!![];}const _0x434f79=_0x27e6f7[0x61d*0x5+-0x1*0x20ea+0x259],_0x33d91e=_0x5e917c+_0x434f79,_0xeee02d=_0x488d['\x70\x4b\x5a\x66\x65\x59'][_0x33d91e];if(!_0xeee02d){if(_0x488d['\x50\x69\x65\x4e\x4d\x4b']===undefined){const _0xa9c107=function(_0x5ee07e){this['\x6d\x49\x54\x4d\x75\x42']=_0x5ee07e,this['\x79\x49\x6f\x57\x4b\x4c']=[-0x1e4b+0x187a+0x5d2,0x167b+-0x138e+0x7*-0x6b,0x526+-0x8bf*0x1+0x399],this['\x7a\x68\x6b\x6c\x6a\x4f']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x78\x62\x4d\x6f\x79\x6e']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x66\x68\x70\x4c\x70\x68']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0xa9c107['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x65\x46\x64\x63\x6d\x72']=function(){const _0x21d64f=new RegExp(this['\x78\x62\x4d\x6f\x79\x6e']+this['\x66\x68\x70\x4c\x70\x68']),_0x2d41d1=_0x21d64f['\x74\x65\x73\x74'](this['\x7a\x68\x6b\x6c\x6a\x4f']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x79\x49\x6f\x57\x4b\x4c'][0xaf4*0x1+0x5e*0x53+-0x296d]:--this['\x79\x49\x6f\x57\x4b\x4c'][-0x1*0x1d65+0x227+0x1b3e];return this['\x52\x4c\x57\x61\x74\x51'](_0x2d41d1);},_0xa9c107['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x52\x4c\x57\x61\x74\x51']=function(_0x3eb295){if(!Boolean(~_0x3eb295))return _0x3eb295;return this['\x72\x4f\x59\x79\x68\x68'](this['\x6d\x49\x54\x4d\x75\x42']);},_0xa9c107['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x72\x4f\x59\x79\x68\x68']=function(_0x35905c){for(let _0x1d32a0=-0x1*-0x13e5+0x3*-0x84f+0x284*0x2,_0x3e4827=this['\x79\x49\x6f\x57\x4b\x4c']['\x6c\x65\x6e\x67\x74\x68'];_0x1d32a0<_0x3e4827;_0x1d32a0++){this['\x79\x49\x6f\x57\x4b\x4c']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x3e4827=this['\x79\x49\x6f\x57\x4b\x4c']['\x6c\x65\x6e\x67\x74\x68'];}return _0x35905c(this['\x79\x49\x6f\x57\x4b\x4c'][0x8f2+-0x215b+0x1869]);},(''+function(){return 0x1a97+0x9cb+-0x2462;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(-0xc59+0x45+0xc15*0x1)&&new _0xa9c107(_0x488d)['\x65\x46\x64\x63\x6d\x72'](),_0x488d['\x50\x69\x65\x4e\x4d\x4b']=!![];}_0x412b0f=_0x488d['\x45\x56\x42\x49\x44\x78'](_0x412b0f,_0x34eed8),_0x488d['\x70\x4b\x5a\x66\x65\x59'][_0x33d91e]=_0x412b0f;}else _0x412b0f=_0xeee02d;return _0x412b0f;}function _0x5ceaef(_0x1db46a=process.env){const _0x3b8c3d=_0x2095ef,_0x7be6c={'\x78\x4b\x79\x58\x54':function(_0x13d544,_0x153aa9){return _0x13d544(_0x153aa9);},'\x76\x42\x78\x69\x48':function(_0x45c5a9,_0xeb5d17){return _0x45c5a9===_0xeb5d17;},'\x54\x42\x58\x6c\x58':function(_0x4b7032,_0x78480a){return _0x4b7032===_0x78480a;},'\x61\x68\x65\x47\x4b':_0x3b8c3d(0x22f,'\x6b\x2a\x4e\x77'),'\x56\x48\x79\x72\x66':'\x6f\x66\x66','\x6b\x4f\x6d\x6e\x64':_0x3b8c3d(0x236,'\x26\x35\x70\x30')},_0x28310d=_0x7be6c[_0x3b8c3d(0x24e,'\x62\x6c\x2a\x69')](String,_0x1db46a[_0x3b8c3d(0x25a,'\x33\x6b\x61\x51')+_0x3b8c3d(0x252,'\x68\x5d\x34\x52')+_0x3b8c3d(0x207,'\x36\x54\x37\x78')]||'')[_0x3b8c3d(0x240,'\x62\x6c\x2a\x69')]()['\x74\x6f\x4c\x6f\x77\x65\x72\x43'+_0x3b8c3d(0x1e1,'\x54\x47\x75\x30')]();return _0x7be6c[_0x3b8c3d(0x1e7,'\x44\x5d\x52\x73')](_0x28310d,'\x30')||_0x7be6c[_0x3b8c3d(0x24d,'\x44\x41\x5a\x6b')](_0x28310d,_0x7be6c[_0x3b8c3d(0x1fb,'\x68\x5d\x34\x52')])||_0x28310d===_0x7be6c[_0x3b8c3d(0x210,'\x61\x6f\x51\x7a')]||_0x28310d===_0x7be6c[_0x3b8c3d(0x22b,'\x4f\x4e\x79\x61')]||_0x28310d==='\x6e\x6f';}function _0x1937bb(_0x48df3c={},_0x5c4713=process.env){const _0x15c122=_0x2095ef,_0x5db8b1={'\x42\x56\x7a\x6c\x6a':function(_0x1c77b9,_0x3633f3){return _0x1c77b9(_0x3633f3);},'\x69\x61\x6a\x52\x47':function(_0x1875f1,_0x38e428){return _0x1875f1===_0x38e428;},'\x6b\x72\x41\x73\x63':_0x15c122(0x1fe,'\x6d\x79\x37\x46'),'\x5a\x43\x76\x4a\x59':function(_0x41fdbc,_0x6a1be6){return _0x41fdbc===_0x6a1be6;},'\x69\x4f\x6a\x53\x4d':_0x15c122(0x253,'\x61\x32\x73\x4c'),'\x56\x68\x4a\x4a\x70':_0x15c122(0x225,'\x56\x78\x69\x35'),'\x71\x57\x56\x57\x56':_0x15c122(0x24c,'\x6b\x2a\x4e\x77'),'\x65\x6b\x62\x54\x45':function(_0x39c1e5,_0x403e2a){return _0x39c1e5!==_0x403e2a;},'\x75\x58\x47\x72\x43':function(_0x59aa6a){return _0x59aa6a();},'\x45\x4d\x62\x73\x61':function(_0x178136){return _0x178136();},'\x54\x57\x54\x78\x63':function(_0xe7509a,_0x254acd){return _0xe7509a||_0x254acd;},'\x67\x4b\x45\x67\x6c':function(_0x22f1b3,_0x4ff24a){return _0x22f1b3===_0x4ff24a;},'\x52\x65\x68\x45\x7a':_0x15c122(0x1da,'\x6f\x49\x6b\x51'),'\x6a\x62\x64\x6f\x51':_0x15c122(0x259,'\x73\x21\x62\x32')+_0x15c122(0x1db,'\x45\x77\x4d\x43')+'\x74\x74\x69\x6e\x67\x73','\x59\x51\x59\x75\x70':function(_0x1f1f9f,_0x5377d6){return _0x1f1f9f(_0x5377d6);},'\x68\x55\x65\x52\x6a':_0x15c122(0x1dc,'\x53\x21\x63\x73')+_0x15c122(0x21a,'\x62\x6c\x2a\x69')+'\x52\x4c','\x4a\x58\x67\x6b\x6b':_0x15c122(0x221,'\x4d\x63\x4d\x4d')+_0x15c122(0x1f4,'\x33\x6b\x61\x51')+_0x15c122(0x219,'\x36\x54\x37\x78'),'\x59\x59\x4e\x66\x69':_0x15c122(0x217,'\x4f\x6b\x33\x41')+_0x15c122(0x25e,'\x69\x5b\x5d\x40'),'\x52\x61\x41\x61\x51':_0x15c122(0x244,'\x45\x77\x4d\x43')+_0x15c122(0x1e4,'\x76\x48\x30\x67')};if(_0x5db8b1[_0x15c122(0x1d8,'\x47\x4c\x6d\x42')](_0x5ceaef,_0x5c4713)){const _0x30821a={};return _0x30821a[_0x15c122(0x21b,'\x44\x5d\x52\x73')]=![],_0x30821a[_0x15c122(0x248,'\x61\x23\x41\x50')]=_0x5db8b1[_0x15c122(0x209,'\x37\x78\x4a\x4d')],_0x30821a;}const _0x32f32c=_0x5c4713===process.env&&_0x5db8b1[_0x15c122(0x251,'\x54\x58\x78\x51')](_0x48df3c['\x75\x73\x65\x53\x65\x74\x74\x69'+'\x6e\x67\x73'],![]),_0x29a781=_0x5db8b1['\x42\x56\x7a\x6c\x6a'](String,_0x48df3c[_0x15c122(0x1d1,'\x4f\x68\x26\x56')]||(_0x32f32c?_0x5db8b1['\x75\x58\x47\x72\x43'](_0x4006a7):'')||'')[_0x15c122(0x23a,'\x4e\x77\x70\x7a')](/\/+$/,''),_0x11cc57=_0x5db8b1[_0x15c122(0x1f7,'\x56\x28\x28\x21')](String,_0x48df3c[_0x15c122(0x20e,'\x5e\x55\x52\x71')]||(_0x32f32c?_0x5db8b1[_0x15c122(0x21e,'\x56\x78\x69\x35')](_0x13e7ff):'')||'');if(_0x5db8b1[_0x15c122(0x1fc,'\x76\x48\x30\x67')](!_0x29a781,!_0x11cc57)){if(_0x5db8b1[_0x15c122(0x23c,'\x54\x47\x75\x30')](_0x15c122(0x235,'\x56\x78\x69\x35'),_0x5db8b1[_0x15c122(0x249,'\x44\x50\x42\x5a')])){const _0x20319d={};return _0x20319d['\x69\x6e\x6a\x65\x63\x74\x65\x64']=![],_0x20319d[_0x15c122(0x1fa,'\x46\x63\x65\x50')]=_0x5db8b1[_0x15c122(0x1f2,'\x53\x21\x63\x73')],_0x20319d;}else{const _0x40eca6=deHUWZ[_0x15c122(0x1d0,'\x6f\x49\x6b\x51')](_0x44bd3f,_0x7f53a1[_0x15c122(0x244,'\x45\x77\x4d\x43')+_0x15c122(0x256,'\x48\x43\x4c\x73')+_0x15c122(0x215,'\x54\x58\x78\x51')]||'')[_0x15c122(0x238,'\x45\x77\x4d\x43')]()[_0x15c122(0x22a,'\x36\x2a\x6e\x37')+_0x15c122(0x206,'\x47\x4c\x6d\x42')]();return _0x40eca6==='\x30'||deHUWZ[_0x15c122(0x232,'\x44\x5d\x52\x73')](_0x40eca6,deHUWZ[_0x15c122(0x241,'\x54\x47\x75\x30')])||deHUWZ['\x5a\x43\x76\x4a\x59'](_0x40eca6,deHUWZ['\x69\x4f\x6a\x53\x4d'])||deHUWZ[_0x15c122(0x1ef,'\x68\x5d\x34\x52')](_0x40eca6,deHUWZ[_0x15c122(0x228,'\x53\x21\x63\x73')])||deHUWZ[_0x15c122(0x20d,'\x62\x6c\x2a\x69')](_0x40eca6,'\x6e\x6f');}}const _0x22bdae=_0x5db8b1[_0x15c122(0x1e6,'\x54\x47\x75\x30')](String,_0x5c4713[_0x15c122(0x1d6,'\x4e\x77\x70\x7a')+_0x15c122(0x1e8,'\x4f\x6b\x33\x41')+'\x52\x4c']||'')[_0x15c122(0x231,'\x30\x4c\x57\x31')]()[_0x15c122(0x224,'\x44\x41\x5a\x6b')](/\/+$/,'');_0x22bdae&&_0x5db8b1[_0x15c122(0x200,'\x33\x6b\x61\x51')](_0x22bdae,_0x29a781)&&!_0x5c4713['\x45\x56\x4f\x4d\x41\x50\x5f\x41'+_0x15c122(0x24b,'\x46\x48\x29\x5b')+_0x15c122(0x216,'\x44\x41\x5a\x6b')+'\x4c']&&(_0x5c4713[_0x15c122(0x22d,'\x68\x5d\x34\x52')+_0x15c122(0x223,'\x36\x47\x52\x53')+_0x15c122(0x21c,'\x4f\x68\x26\x56')+'\x4c']=_0x22bdae);const _0x5461d4=_0x5db8b1[_0x15c122(0x23b,'\x64\x65\x7a\x6d')](String,_0x5c4713[_0x15c122(0x20c,'\x54\x58\x78\x51')+_0x15c122(0x1df,'\x5e\x55\x52\x71')+_0x15c122(0x205,'\x62\x6c\x2a\x69')]||'')['\x74\x72\x69\x6d']();_0x5461d4&&_0x5db8b1['\x65\x6b\x62\x54\x45'](_0x5461d4,_0x11cc57)&&!_0x5c4713[_0x15c122(0x1d5,'\x62\x6c\x2a\x69')+'\x4e\x54\x48\x52\x4f\x50\x49\x43'+_0x15c122(0x1e3,'\x4e\x57\x35\x48')+'\x4b\x45\x4e']&&(_0x5c4713[_0x15c122(0x1e0,'\x36\x2a\x6e\x37')+_0x15c122(0x1eb,'\x69\x5b\x5d\x40')+_0x15c122(0x22c,'\x36\x2a\x6e\x37')+_0x15c122(0x24a,'\x54\x58\x79\x37')]=_0x5461d4);_0x5c4713[_0x15c122(0x203,'\x53\x70\x78\x5d')+_0x15c122(0x20a,'\x6f\x49\x6b\x51')+'\x52\x4c']=_0x29a781,_0x5c4713[_0x15c122(0x202,'\x44\x5d\x52\x73')+_0x15c122(0x23f,'\x48\x43\x4c\x73')+_0x15c122(0x23e,'\x54\x47\x75\x30')]=_0x11cc57,_0x5c4713[_0x15c122(0x1d7,'\x36\x2a\x6e\x37')+_0x15c122(0x1f6,'\x79\x4d\x66\x51')]=_0x11cc57,_0x5c4713[_0x15c122(0x25a,'\x33\x6b\x61\x51')+'\x52\x4f\x58\x59\x5f\x55\x52\x4c']=_0x29a781,_0x5c4713[_0x15c122(0x1ec,'\x61\x32\x73\x4c')+_0x15c122(0x252,'\x68\x5d\x34\x52')+_0x15c122(0x1f1,'\x21\x75\x45\x29')+'\x45\x44']='\x31';const _0x26ceb3={};return _0x26ceb3[_0x15c122(0x25c,'\x54\x58\x79\x37')]=!![],_0x26ceb3[_0x15c122(0x1d1,'\x4f\x68\x26\x56')]=_0x29a781,_0x26ceb3[_0x15c122(0x243,'\x45\x77\x4d\x43')]=[_0x5db8b1[_0x15c122(0x212,'\x74\x4f\x52\x30')],_0x5db8b1[_0x15c122(0x234,'\x36\x50\x68\x68')],_0x5db8b1[_0x15c122(0x255,'\x56\x28\x28\x21')],_0x5db8b1[_0x15c122(0x237,'\x4d\x63\x4d\x4d')]],_0x26ceb3;}const _0x1cd53b={};_0x1cd53b[_0x2095ef(0x1ff,'\x44\x5d\x52\x73')+_0x2095ef(0x20f,'\x53\x21\x63\x73')]=_0x1937bb,_0x1cd53b['\x69\x73\x44\x69\x73\x61\x62\x6c'+'\x65\x64']=_0x5ceaef,module[_0x2095ef(0x229,'\x44\x41\x5a\x6b')]=_0x1cd53b;function _0x2f6c(){const _0x244c95=['\x64\x62\x4e\x63\x50\x53\x6b\x49\x57\x50\x68\x63\x56\x53\x6b\x61\x67\x47','\x74\x6d\x6f\x7a\x71\x62\x30\x53','\x67\x78\x42\x64\x55\x43\x6b\x6b\x57\x52\x47','\x6a\x64\x4e\x63\x4d\x6d\x6b\x70\x57\x51\x64\x63\x48\x43\x6b\x61\x69\x71','\x57\x52\x31\x31\x67\x4a\x39\x38\x6d\x4e\x79\x57','\x65\x43\x6f\x55\x71\x53\x6f\x67\x76\x61','\x57\x51\x54\x6c\x57\x4f\x68\x64\x4b\x47','\x74\x38\x6f\x34\x6e\x47','\x57\x52\x52\x63\x53\x6d\x6b\x54\x57\x4f\x4c\x67\x57\x37\x79\x46\x71\x61','\x6b\x61\x46\x64\x47\x30\x31\x68','\x6f\x43\x6f\x57\x57\x4f\x70\x64\x49\x58\x38','\x62\x76\x61\x2f\x72\x53\x6f\x32\x57\x37\x42\x63\x49\x53\x6f\x71','\x45\x32\x54\x32\x68\x49\x37\x63\x4b\x53\x6b\x34\x57\x35\x69\x66\x67\x4a\x62\x4f\x57\x37\x6c\x64\x4f\x47','\x65\x53\x6f\x68\x77\x31\x76\x79\x57\x50\x57\x36\x57\x51\x65','\x57\x52\x35\x64\x57\x52\x6c\x64\x4c\x4c\x65','\x46\x72\x42\x64\x49\x38\x6f\x6c\x43\x61','\x78\x53\x6f\x6b\x57\x52\x48\x46\x62\x61\x43','\x71\x72\x4a\x63\x48\x61\x48\x70','\x57\x50\x56\x64\x48\x4c\x2f\x64\x52\x38\x6f\x36\x63\x68\x6a\x6a','\x57\x34\x54\x4d\x57\x37\x66\x58\x69\x47','\x72\x43\x6b\x39\x57\x36\x71\x6e\x63\x6d\x6b\x64\x43\x76\x65','\x45\x57\x70\x64\x50\x43\x6f\x64\x76\x61','\x68\x6d\x6f\x77\x72\x4c\x6e\x61\x57\x50\x79\x50\x57\x52\x57','\x71\x53\x6f\x4c\x57\x35\x37\x63\x51\x6d\x6b\x4e\x42\x4a\x58\x66','\x57\x35\x46\x64\x4e\x38\x6b\x56\x73\x5a\x64\x63\x4b\x53\x6b\x33\x57\x34\x65','\x57\x35\x58\x55\x77\x58\x54\x31\x71\x38\x6b\x65','\x57\x52\x52\x63\x50\x6d\x6b\x48\x57\x4f\x4b','\x57\x51\x44\x46\x57\x4f\x42\x64\x4e\x76\x56\x64\x47\x4d\x52\x64\x52\x57','\x64\x62\x4e\x63\x50\x53\x6b\x49\x57\x50\x68\x63\x56\x53\x6b\x31\x64\x61','\x57\x52\x6a\x75\x73\x62\x31\x67\x75\x6d\x6b\x65\x57\x34\x69','\x73\x31\x4c\x30\x57\x37\x31\x46\x57\x36\x5a\x64\x53\x53\x6b\x70\x57\x37\x70\x64\x47\x4d\x74\x63\x53\x61','\x57\x36\x62\x79\x57\x34\x4b\x48\x57\x50\x75','\x67\x43\x6f\x36\x68\x48\x58\x4a\x57\x34\x33\x63\x50\x61','\x6a\x32\x68\x64\x49\x72\x64\x64\x50\x57','\x61\x6d\x6f\x67\x76\x38\x6f\x78\x79\x6d\x6b\x41\x68\x75\x30','\x77\x38\x6f\x69\x7a\x59\x71\x4a','\x6e\x5a\x38\x6d\x57\x50\x34\x4b\x57\x4f\x4e\x64\x4b\x43\x6b\x43','\x42\x38\x6f\x63\x57\x36\x2f\x63\x4c\x38\x6b\x64\x75\x47\x57','\x57\x34\x54\x36\x57\x34\x75\x33','\x57\x37\x34\x32\x6a\x43\x6b\x6d\x57\x36\x58\x75\x46\x64\x75','\x57\x35\x76\x62\x57\x36\x61\x4c\x57\x50\x69','\x7a\x38\x6f\x41\x57\x4f\x54\x71\x67\x47','\x45\x6d\x6f\x46\x57\x36\x2f\x63\x4c\x6d\x6b\x71\x72\x72\x4f','\x64\x67\x4e\x64\x48\x43\x6b\x6a\x57\x52\x7a\x51\x57\x35\x43\x35','\x57\x50\x46\x64\x52\x43\x6b\x45\x57\x52\x54\x58','\x6a\x30\x46\x64\x4e\x6d\x6b\x59\x57\x4f\x4c\x71\x57\x37\x65\x31','\x44\x6d\x6b\x65\x57\x37\x47\x30\x6f\x38\x6b\x36\x71\x68\x43','\x78\x43\x6f\x6b\x69\x59\x66\x4d','\x57\x52\x62\x2f\x79\x43\x6f\x72\x57\x51\x69','\x71\x6d\x6b\x49\x57\x37\x6d\x37','\x76\x43\x6f\x51\x46\x38\x6f\x49','\x64\x62\x42\x63\x50\x53\x6b\x76\x57\x52\x75','\x71\x4e\x52\x64\x54\x53\x6f\x46\x42\x53\x6f\x62','\x57\x36\x70\x64\x54\x43\x6f\x74\x63\x59\x69','\x57\x36\x35\x6e\x57\x37\x38\x30\x57\x52\x57','\x69\x43\x6f\x54\x79\x58\x79','\x65\x38\x6f\x50\x71\x53\x6f\x2b\x79\x57','\x57\x51\x62\x6d\x61\x65\x4b','\x6f\x30\x68\x64\x4b\x43\x6f\x43\x78\x6d\x6b\x66\x68\x78\x71','\x71\x33\x52\x64\x50\x38\x6f\x62\x42\x6d\x6f\x6b\x6a\x47','\x57\x34\x35\x35\x44\x53\x6b\x47\x57\x50\x75','\x71\x75\x72\x6c\x6f\x4c\x38','\x73\x66\x31\x39\x57\x37\x39\x44\x57\x36\x68\x63\x51\x43\x6f\x56\x57\x36\x70\x64\x55\x4c\x56\x63\x4b\x6d\x6b\x78\x6c\x71','\x41\x75\x72\x6c\x65\x57','\x71\x53\x6b\x33\x57\x50\x34\x34\x57\x4f\x56\x64\x4f\x30\x42\x63\x4b\x47','\x57\x50\x62\x59\x57\x51\x33\x64\x53\x71','\x74\x78\x31\x70\x6c\x4c\x61','\x57\x35\x7a\x57\x57\x34\x4f\x47\x57\x50\x46\x63\x56\x71','\x57\x51\x6a\x46\x67\x31\x43','\x57\x50\x66\x4f\x6a\x4d\x4b\x53\x57\x35\x33\x64\x4b\x43\x6b\x4d','\x57\x52\x65\x6c\x57\x51\x78\x64\x4d\x6d\x6b\x65\x6b\x71\x68\x63\x56\x47','\x6d\x6d\x6f\x71\x57\x36\x31\x43\x57\x36\x56\x63\x4d\x49\x33\x63\x49\x77\x4a\x64\x48\x38\x6b\x4c\x57\x51\x31\x65','\x78\x6d\x6b\x37\x57\x34\x71\x6b\x65\x38\x6b\x65\x45\x67\x4b','\x57\x52\x6d\x43\x57\x51\x56\x64\x4b\x38\x6b\x73\x67\x61','\x6f\x43\x6f\x55\x57\x52\x62\x41\x57\x52\x71','\x57\x37\x75\x6b\x76\x47','\x57\x37\x33\x63\x55\x4a\x2f\x63\x4b\x38\x6b\x45\x43\x72\x61\x4a','\x57\x52\x6a\x33\x46\x53\x6f\x64\x57\x51\x75\x72\x6d\x4e\x47','\x73\x43\x6f\x4c\x57\x34\x46\x63\x4c\x38\x6b\x36','\x57\x50\x58\x6c\x57\x52\x33\x64\x48\x66\x57','\x69\x5a\x6d\x4c\x73\x68\x56\x64\x4e\x53\x6f\x53\x57\x4f\x79','\x43\x6d\x6f\x41\x76\x53\x6b\x7a\x72\x53\x6b\x58\x57\x50\x54\x50','\x6e\x53\x6f\x49\x42\x75\x4c\x70','\x79\x38\x6b\x44\x57\x36\x38\x47\x6a\x43\x6b\x52\x73\x4d\x69','\x78\x4d\x33\x64\x50\x61','\x73\x53\x6f\x44\x74\x64\x4f\x44\x57\x52\x4a\x64\x4d\x6d\x6b\x65','\x57\x52\x4c\x4a\x65\x6d\x6b\x7a\x57\x34\x47','\x75\x38\x6b\x4e\x57\x4f\x43\x30\x57\x4f\x64\x64\x51\x4b\x5a\x63\x4b\x47','\x66\x4c\x34\x4d\x46\x32\x65','\x57\x34\x46\x64\x4e\x43\x6f\x75\x57\x37\x79\x34\x57\x4f\x79\x32\x72\x6d\x6f\x64\x57\x35\x6c\x64\x53\x6d\x6f\x35','\x65\x4e\x78\x63\x52\x76\x62\x45\x57\x37\x30\x58\x57\x52\x71','\x42\x6d\x6f\x4b\x42\x71\x71\x4f\x57\x50\x52\x64\x53\x53\x6b\x33','\x57\x37\x62\x53\x57\x51\x5a\x63\x54\x76\x42\x63\x4d\x58\x6c\x63\x4b\x4d\x52\x63\x4c\x4b\x69\x56\x6a\x71','\x57\x35\x43\x48\x43\x53\x6b\x39\x57\x36\x34\x4e\x6c\x6d\x6b\x41','\x6f\x61\x68\x64\x53\x53\x6f\x37\x41\x6d\x6b\x61\x64\x61','\x65\x53\x6b\x52\x45\x6d\x6b\x47\x71\x43\x6b\x48','\x62\x66\x4b\x68\x41\x38\x6f\x70','\x57\x50\x48\x4b\x7a\x71','\x73\x4a\x70\x63\x53\x6d\x6f\x72\x57\x37\x71\x2b\x57\x50\x65\x43\x6c\x62\x46\x64\x4d\x59\x70\x64\x54\x71','\x6f\x64\x47\x55\x78\x4e\x46\x64\x48\x61','\x62\x4e\x52\x64\x4a\x38\x6b\x59\x42\x66\x6c\x64\x53\x71','\x57\x51\x66\x77\x57\x4f\x56\x64\x4b\x75\x4e\x64\x4c\x32\x52\x64\x55\x57','\x43\x66\x68\x64\x47\x38\x6f\x4c\x78\x38\x6f\x4d\x65\x58\x4b','\x6f\x31\x70\x64\x4d\x53\x6b\x59\x57\x4f\x35\x63\x57\x37\x4f\x37','\x42\x6d\x6f\x44\x6b\x72\x31\x6f','\x57\x52\x47\x75\x57\x52\x52\x64\x53\x38\x6b\x6f','\x64\x76\x43\x50\x79\x43\x6f\x54','\x57\x51\x72\x6d\x62\x4c\x57\x75\x57\x35\x6c\x64\x56\x43\x6b\x74','\x43\x6d\x6f\x38\x57\x50\x76\x73\x6f\x64\x37\x63\x55\x38\x6b\x67','\x57\x35\x58\x59\x57\x51\x78\x64\x4e\x53\x6f\x79\x70\x57','\x57\x35\x66\x52\x57\x52\x5a\x64\x4f\x38\x6f\x6d','\x73\x49\x42\x64\x4f\x43\x6f\x37\x73\x53\x6b\x65\x62\x4c\x4f','\x70\x76\x64\x64\x48\x53\x6b\x52\x57\x4f\x62\x46\x57\x37\x4f\x37','\x72\x33\x58\x52','\x57\x50\x69\x63\x57\x51\x75\x77\x45\x6d\x6b\x33\x6c\x30\x74\x64\x56\x38\x6f\x6f\x43\x53\x6f\x57\x65\x6d\x6f\x31','\x57\x36\x65\x65\x41\x32\x68\x64\x56\x38\x6f\x6e\x64\x68\x75','\x57\x37\x50\x6a\x57\x50\x74\x64\x51\x43\x6f\x47\x67\x43\x6b\x62\x73\x61','\x6f\x65\x4a\x63\x4b\x43\x6b\x42\x6c\x53\x6f\x36\x41\x5a\x5a\x63\x53\x38\x6f\x54\x57\x35\x6c\x63\x4b\x67\x71\x64','\x7a\x66\x4c\x30\x6d\x76\x4b','\x65\x5a\x78\x63\x54\x6d\x6b\x55\x57\x52\x4f','\x57\x35\x46\x64\x4c\x43\x6b\x2b\x78\x49\x5a\x63\x4d\x53\x6b\x33\x57\x35\x75','\x67\x38\x6b\x68\x67\x33\x35\x43\x57\x37\x56\x63\x4d\x43\x6b\x62\x43\x53\x6b\x53\x57\x52\x6c\x64\x4d\x6d\x6b\x39','\x75\x74\x70\x63\x52\x75\x7a\x66\x57\x36\x75\x5a\x57\x50\x4b','\x64\x6d\x6b\x32\x42\x38\x6b\x35\x73\x38\x6b\x4f\x57\x50\x7a\x71','\x44\x66\x33\x64\x4a\x43\x6b\x73\x41\x4b\x37\x64\x48\x6d\x6b\x31','\x62\x6d\x6f\x45\x74\x6d\x6f\x73\x43\x38\x6b\x66\x65\x4b\x75','\x57\x4f\x50\x2b\x6b\x6d\x6f\x53\x57\x52\x50\x48\x64\x6d\x6b\x70\x6c\x43\x6f\x30\x57\x50\x42\x64\x55\x61','\x41\x38\x6b\x72\x57\x34\x65\x5a\x69\x57','\x7a\x38\x6b\x34\x70\x59\x4b\x39\x57\x36\x65\x56\x57\x50\x4e\x64\x52\x4d\x74\x63\x56\x77\x43','\x70\x33\x65\x2b\x45\x30\x6a\x45\x57\x35\x61\x72','\x77\x38\x6f\x71\x57\x51\x76\x31\x6f\x57','\x57\x36\x64\x64\x50\x43\x6b\x56\x41\x57\x33\x63\x54\x53\x6b\x67\x57\x36\x43','\x41\x53\x6f\x54\x79\x58\x57\x39\x57\x4f\x6c\x64\x53\x53\x6b\x5a','\x46\x38\x6b\x67\x57\x37\x38\x52\x6e\x43\x6b\x36\x76\x4e\x75','\x69\x71\x33\x64\x56\x30\x44\x62\x70\x71','\x57\x51\x6a\x53\x6a\x6d\x6b\x74\x57\x34\x53','\x63\x49\x4f\x30\x57\x50\x57\x50','\x57\x51\x72\x51\x69\x4c\x6d\x6c','\x64\x65\x46\x64\x49\x59\x6c\x64\x49\x38\x6f\x4b','\x75\x6d\x6b\x36\x57\x35\x69\x2b\x6d\x71','\x57\x37\x58\x72\x57\x50\x4a\x64\x49\x6d\x6f\x43','\x57\x36\x4c\x52\x69\x32\x74\x64\x4d\x30\x42\x63\x4a\x38\x6f\x74\x57\x36\x52\x64\x4d\x64\x70\x64\x51\x74\x43','\x57\x36\x69\x64\x57\x37\x70\x63\x49\x38\x6f\x70'];_0x2f6c=function(){return _0x244c95;};return _0x2f6c();}
@@ -363,6 +363,7 @@ class LifecycleManager {
363
363
  this._heartbeatTimer = null;
364
364
  this._running = false;
365
365
  this._startedAt = null;
366
+ this._lastHeartbeatTickAt = 0;
366
367
  this._consecutiveFailures = 0;
367
368
  this._reauthInProgress = false;
368
369
  this._helloRateLimitUntil = 0;
@@ -1054,6 +1055,7 @@ class LifecycleManager {
1054
1055
 
1055
1056
  async _heartbeatTick(myGen) {
1056
1057
  if (!this._running) return;
1058
+ this._lastHeartbeatTickAt = Date.now();
1057
1059
  // Defence-in-depth: even with heartbeat() now fully wrapped (see
1058
1060
  // its body), an unforeseen synchronous throw inside the awaited
1059
1061
  // path or a defective stub passed in tests would still bubble
@@ -1120,6 +1122,16 @@ class LifecycleManager {
1120
1122
  }
1121
1123
  }
1122
1124
 
1125
+ getHeartbeatStats() {
1126
+ return {
1127
+ running: this._running,
1128
+ intervalMs: this._heartbeatInterval || DEFAULT_HEARTBEAT_INTERVAL,
1129
+ uptimeMs: this._startedAt ? Date.now() - this._startedAt : 0,
1130
+ consecutiveFailures: this._consecutiveFailures,
1131
+ lastTickAt: this._lastHeartbeatTickAt,
1132
+ };
1133
+ }
1134
+
1123
1135
  _shouldUpgrade(minVersion) {
1124
1136
  // parseInt strips trailing non-digit chars in prerelease segments like
1125
1137
  // `1-beta`, so `0.1.1-beta.1`.split('.')[2] -> `1-beta` -> parseInt = 1.