@evomap/evolver 1.89.3 → 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 (76) hide show
  1. package/README.md +8 -0
  2. package/index.js +116 -7
  3. package/package.json +1 -1
  4. package/src/adapters/scripts/_runtimePaths.js +1 -0
  5. package/src/adapters/scripts/evolver-session-end.js +1 -0
  6. package/src/adapters/scripts/evolver-session-start.js +1 -0
  7. package/src/config.js +23 -0
  8. package/src/evolve/guards.js +1 -1
  9. package/src/evolve/pipeline/collect.js +1 -1
  10. package/src/evolve/pipeline/dispatch.js +1 -1
  11. package/src/evolve/pipeline/enrich.js +1 -1
  12. package/src/evolve/pipeline/hub.js +1 -1
  13. package/src/evolve/pipeline/select.js +1 -1
  14. package/src/evolve/pipeline/signals.js +1 -1
  15. package/src/evolve/utils.js +1 -1
  16. package/src/evolve.js +1 -1
  17. package/src/experiment/agentRunner.js +229 -0
  18. package/src/experiment/cli.js +159 -0
  19. package/src/experiment/comparison.js +233 -0
  20. package/src/experiment/metrics.js +75 -0
  21. package/src/forceUpdate.js +147 -59
  22. package/src/gep/a2aProtocol.js +1 -1
  23. package/src/gep/antiAbuseTelemetry.js +1 -0
  24. package/src/gep/autoDistillConv.js +1 -1
  25. package/src/gep/autoDistillLlm.js +1 -1
  26. package/src/gep/candidateEval.js +1 -1
  27. package/src/gep/candidates.js +1 -1
  28. package/src/gep/contentHash.js +1 -1
  29. package/src/gep/conversationSniffer.js +1 -1
  30. package/src/gep/crypto.js +1 -1
  31. package/src/gep/curriculum.js +1 -1
  32. package/src/gep/deviceId.js +1 -1
  33. package/src/gep/envFingerprint.js +1 -1
  34. package/src/gep/epigenetics.js +1 -1
  35. package/src/gep/execBridge.js +1 -1
  36. package/src/gep/explore.js +1 -1
  37. package/src/gep/hash.js +1 -1
  38. package/src/gep/hubFetch.js +1 -1
  39. package/src/gep/hubReview.js +1 -1
  40. package/src/gep/hubSearch.js +1 -1
  41. package/src/gep/hubVerify.js +1 -1
  42. package/src/gep/idleScheduler.js +6 -1
  43. package/src/gep/learningSignals.js +1 -1
  44. package/src/gep/memoryGraph.js +1 -1
  45. package/src/gep/memoryGraphAdapter.js +1 -1
  46. package/src/gep/mutation.js +1 -1
  47. package/src/gep/narrativeMemory.js +1 -1
  48. package/src/gep/openPRRegistry.js +1 -1
  49. package/src/gep/personality.js +1 -1
  50. package/src/gep/policyCheck.js +1 -1
  51. package/src/gep/prompt.js +1 -1
  52. package/src/gep/recallInject.js +1 -1
  53. package/src/gep/recallVerifier.js +1 -1
  54. package/src/gep/reflection.js +1 -1
  55. package/src/gep/sanitize.js +9 -0
  56. package/src/gep/selector.js +1 -1
  57. package/src/gep/skillDistiller.js +1 -1
  58. package/src/gep/solidify.js +1 -1
  59. package/src/gep/strategy.js +1 -1
  60. package/src/gep/tokenSavings.js +1 -1
  61. package/src/gep/validator/sandboxExecutor.js +29 -1
  62. package/src/gep/workspaceKeychain.js +1 -1
  63. package/src/ops/lifecycle.js +17 -4
  64. package/src/proxy/extensions/traceControl.js +1 -1
  65. package/src/proxy/index.js +216 -2
  66. package/src/proxy/inject.js +1 -1
  67. package/src/proxy/lifecycle/manager.js +31 -0
  68. package/src/proxy/mailbox/store.js +31 -7
  69. package/src/proxy/router/messages_route.js +5 -2
  70. package/src/proxy/router/responses_route.js +157 -0
  71. package/src/proxy/server/http.js +13 -4
  72. package/src/proxy/server/routes.js +11 -1
  73. package/src/proxy/sync/engine.js +7 -1
  74. package/src/proxy/sync/outbound.js +32 -4
  75. package/src/proxy/trace/extractor.js +1 -1
  76. package/src/proxy/trace/usage.js +1 -1
@@ -1 +1 @@
1
- const _0x582b27=_0x5515;function _0x3f94(){const _0x410860=['\x57\x36\x39\x63\x57\x34\x6c\x63\x4e\x53\x6b\x66\x6b\x53\x6f\x53\x57\x52\x30','\x68\x73\x57\x74\x73\x6d\x6f\x39\x57\x34\x52\x64\x4c\x67\x71','\x6c\x30\x33\x63\x52\x33\x6c\x63\x52\x43\x6b\x4e\x67\x5a\x6d\x6d\x57\x35\x74\x64\x55\x38\x6b\x6f\x65\x47','\x46\x47\x6c\x63\x4d\x57\x5a\x63\x52\x30\x7a\x4e\x57\x37\x76\x79\x57\x34\x6a\x54','\x70\x59\x64\x63\x47\x71','\x61\x32\x70\x64\x55\x47','\x71\x72\x44\x5a\x6f\x49\x57\x56','\x68\x4c\x37\x64\x54\x33\x42\x64\x48\x57','\x6c\x66\x6c\x63\x4f\x38\x6f\x70\x57\x35\x30\x44\x68\x66\x61','\x6f\x78\x6c\x63\x4c\x4b\x44\x74\x66\x77\x5a\x63\x55\x38\x6b\x6f','\x57\x36\x31\x67\x67\x38\x6f\x68\x7a\x71','\x74\x4a\x74\x64\x49\x61\x4a\x64\x4d\x53\x6f\x69','\x57\x50\x33\x63\x4d\x53\x6f\x52\x57\x51\x6d\x77\x57\x4f\x44\x48\x57\x36\x78\x63\x4c\x38\x6b\x46\x6a\x48\x43\x72','\x73\x38\x6f\x63\x77\x6d\x6f\x64\x71\x33\x4f\x74\x67\x61','\x64\x30\x64\x64\x4a\x76\x4f\x43\x57\x37\x4a\x64\x51\x53\x6b\x46','\x57\x36\x57\x58\x57\x51\x33\x64\x4a\x38\x6b\x36','\x44\x68\x61\x58\x57\x37\x38\x32','\x7a\x43\x6b\x62\x6e\x32\x52\x63\x4a\x53\x6b\x53\x6c\x6d\x6b\x73','\x45\x47\x46\x64\x51\x43\x6b\x58\x64\x57','\x74\x4d\x30\x64\x43\x53\x6f\x42','\x64\x72\x2f\x63\x54\x30\x42\x64\x4c\x61','\x57\x37\x56\x63\x54\x71\x66\x34\x74\x57','\x43\x43\x6f\x51\x57\x50\x76\x66','\x57\x37\x4a\x64\x53\x4c\x7a\x32\x57\x37\x38\x6f\x57\x52\x74\x64\x51\x61','\x65\x53\x6b\x34\x6a\x6d\x6f\x52\x6b\x48\x44\x35\x57\x51\x57','\x6c\x53\x6f\x51\x45\x43\x6f\x52\x57\x36\x47','\x61\x72\x4e\x63\x4b\x67\x37\x63\x53\x71','\x65\x31\x37\x64\x4d\x4b\x38\x68\x57\x36\x6c\x64\x4f\x43\x6b\x66','\x74\x6d\x6b\x30\x68\x43\x6b\x77\x57\x4f\x4c\x42\x66\x4a\x64\x64\x54\x68\x56\x63\x54\x4e\x4c\x7a','\x42\x58\x4a\x64\x49\x53\x6b\x50\x62\x6d\x6f\x76\x62\x53\x6b\x6d','\x79\x6d\x6f\x78\x78\x53\x6b\x42\x73\x32\x71\x72\x57\x4f\x48\x6b\x57\x37\x56\x64\x4e\x38\x6f\x75\x57\x4f\x61','\x73\x43\x6b\x4d\x65\x66\x68\x63\x54\x43\x6b\x6e\x67\x38\x6b\x65','\x57\x51\x76\x73\x74\x4d\x43','\x57\x36\x70\x64\x4f\x43\x6b\x51\x57\x36\x35\x72','\x78\x6d\x6f\x42\x74\x38\x6f\x78\x78\x78\x38\x45\x66\x71','\x57\x51\x76\x73\x6b\x6d\x6f\x32\x57\x4f\x70\x64\x4f\x58\x48\x76','\x46\x64\x35\x4b\x6d\x74\x61','\x57\x52\x71\x4f\x57\x35\x74\x64\x4c\x4d\x30','\x75\x75\x34\x65\x42\x6d\x6f\x71\x57\x34\x65','\x57\x35\x4e\x63\x47\x43\x6b\x57\x66\x5a\x4e\x64\x49\x58\x64\x63\x54\x47','\x57\x51\x4f\x6e\x57\x36\x35\x4e\x6c\x47','\x76\x4b\x47\x59\x57\x36\x30\x57','\x57\x51\x4b\x72\x57\x35\x76\x5a\x6f\x76\x4f','\x57\x52\x4c\x70\x57\x51\x6a\x2b\x57\x35\x5a\x63\x4a\x6d\x6b\x4c\x57\x4f\x75','\x70\x38\x6b\x4a\x69\x6d\x6b\x37\x6e\x48\x39\x37\x70\x53\x6b\x39\x57\x35\x37\x63\x47\x31\x52\x64\x51\x57','\x57\x52\x6e\x6f\x69\x38\x6f\x77\x57\x50\x6c\x64\x50\x72\x4c\x46','\x64\x65\x54\x73\x57\x36\x72\x63','\x57\x37\x52\x64\x4e\x4b\x62\x66\x57\x36\x50\x45','\x57\x50\x72\x59\x68\x53\x6f\x43\x57\x51\x4a\x64\x4b\x64\x48\x49','\x70\x62\x42\x63\x54\x57','\x57\x50\x43\x32\x57\x34\x44\x72\x6a\x47','\x57\x52\x44\x41\x74\x33\x78\x64\x4d\x76\x56\x64\x4a\x38\x6f\x2f','\x57\x50\x70\x64\x50\x32\x47\x68\x75\x6d\x6f\x35\x63\x62\x4b\x73\x57\x52\x65','\x57\x36\x2f\x64\x53\x53\x6b\x44\x57\x34\x6e\x32\x57\x37\x4f\x6a\x57\x35\x79','\x6a\x72\x46\x64\x4c\x43\x6b\x4c\x69\x78\x66\x4c\x57\x34\x47','\x6c\x67\x7a\x6b','\x6e\x57\x4e\x63\x54\x65\x52\x63\x4b\x32\x53\x47','\x57\x34\x37\x64\x52\x38\x6b\x4c\x57\x35\x4c\x32\x6e\x53\x6b\x41\x66\x71','\x57\x52\x75\x38\x6b\x6d\x6f\x34\x57\x34\x6a\x54\x57\x51\x39\x62','\x57\x50\x6a\x39\x41\x66\x5a\x64\x51\x78\x4a\x64\x55\x53\x6f\x73','\x57\x35\x4f\x6c\x57\x37\x62\x32\x71\x61','\x57\x51\x5a\x63\x53\x62\x31\x59\x44\x71','\x71\x32\x30\x46\x76\x53\x6f\x51\x57\x36\x37\x64\x4d\x4e\x34','\x57\x52\x58\x55\x79\x53\x6f\x68\x78\x58\x34','\x57\x37\x52\x64\x53\x38\x6b\x68\x79\x38\x6f\x67\x57\x37\x74\x63\x4e\x38\x6b\x51','\x57\x52\x61\x77\x57\x37\x68\x64\x48\x75\x33\x64\x4a\x6d\x6b\x76\x71\x57','\x41\x48\x6c\x64\x4d\x59\x5a\x64\x51\x6d\x6f\x30\x78\x47\x65','\x41\x61\x42\x64\x4c\x53\x6b\x54\x69\x71','\x57\x36\x5a\x64\x52\x76\x76\x7a\x57\x36\x38','\x68\x74\x4a\x63\x4f\x76\x52\x64\x4d\x47','\x57\x50\x37\x63\x4e\x43\x6f\x54\x57\x51\x62\x70\x57\x37\x61\x49\x57\x34\x4a\x63\x56\x43\x6b\x47','\x7a\x43\x6f\x45\x57\x35\x30\x78\x64\x6d\x6b\x77\x70\x75\x4f','\x57\x36\x79\x4a\x57\x36\x58\x44\x74\x68\x4e\x63\x47\x67\x43','\x57\x34\x56\x64\x56\x67\x7a\x4d\x57\x34\x58\x39\x57\x37\x37\x63\x55\x57','\x66\x77\x42\x64\x51\x31\x74\x64\x4f\x71','\x62\x49\x68\x64\x4c\x38\x6b\x42\x62\x47','\x6c\x67\x7a\x52\x57\x35\x66\x6b\x57\x50\x64\x63\x4e\x43\x6f\x6e','\x57\x52\x6c\x64\x54\x53\x6f\x7a\x42\x65\x42\x63\x51\x4d\x74\x64\x49\x57','\x57\x35\x69\x7a\x61\x31\x70\x64\x51\x71','\x65\x43\x6b\x49\x57\x37\x71\x77\x6d\x57','\x57\x4f\x65\x56\x57\x36\x33\x64\x56\x68\x37\x64\x54\x43\x6b\x4b\x7a\x71','\x72\x33\x2f\x63\x52\x48\x5a\x63\x4c\x57','\x6f\x43\x6b\x75\x57\x35\x34\x45\x68\x38\x6b\x64\x70\x71','\x70\x77\x4a\x64\x51\x33\x30\x39\x57\x34\x4e\x64\x4d\x43\x6b\x70','\x57\x52\x33\x63\x4e\x48\x38\x46\x57\x52\x47\x7a\x57\x50\x68\x63\x54\x38\x6f\x4c\x57\x51\x43\x4d\x57\x51\x2f\x63\x56\x47','\x57\x52\x79\x43\x57\x34\x70\x64\x47\x4c\x64\x64\x49\x57','\x57\x4f\x48\x50\x64\x53\x6f\x78\x57\x52\x4a\x64\x47\x73\x72\x31','\x78\x67\x57\x46\x73\x38\x6f\x4a','\x42\x30\x47\x75\x43\x53\x6f\x79\x57\x35\x2f\x64\x50\x30\x69','\x57\x51\x44\x46\x6d\x43\x6f\x73\x57\x4f\x65','\x46\x53\x6f\x4d\x45\x6d\x6f\x32\x45\x33\x75\x2f\x70\x61','\x57\x37\x38\x38\x6b\x75\x37\x64\x52\x38\x6b\x52\x41\x57\x57','\x42\x77\x61\x47\x75\x61','\x57\x34\x61\x5a\x57\x34\x6e\x31\x57\x34\x42\x63\x52\x53\x6b\x49\x57\x51\x4c\x7a','\x6d\x66\x37\x63\x53\x53\x6f\x35','\x41\x61\x2f\x64\x4b\x5a\x46\x64\x50\x71','\x42\x62\x4a\x64\x50\x59\x2f\x64\x56\x53\x6f\x59\x73\x71','\x57\x4f\x44\x5a\x65\x53\x6f\x6e\x57\x51\x78\x64\x4e\x4a\x31\x2f','\x57\x36\x2f\x64\x55\x6d\x6b\x70\x57\x34\x6a\x54\x57\x37\x38\x6a\x57\x34\x6d','\x57\x34\x6a\x73\x76\x53\x6b\x65\x57\x34\x31\x36\x57\x51\x66\x74\x57\x50\x6e\x44','\x57\x36\x4a\x64\x56\x43\x6b\x33\x57\x37\x54\x6e','\x77\x6d\x6b\x45\x57\x4f\x64\x63\x49\x43\x6f\x46\x57\x35\x71\x30\x77\x61','\x41\x4b\x64\x64\x53\x58\x46\x63\x50\x65\x30\x45\x57\x52\x2f\x63\x49\x43\x6b\x58','\x46\x43\x6f\x62\x57\x50\x39\x65\x74\x53\x6f\x73\x6e\x30\x38\x78\x57\x50\x6c\x64\x54\x6d\x6b\x46','\x72\x53\x6b\x38\x64\x65\x56\x63\x51\x6d\x6b\x73\x61\x53\x6b\x6f','\x57\x4f\x48\x71\x57\x4f\x62\x72\x57\x35\x57','\x42\x4c\x71\x76\x42\x43\x6f\x69\x57\x50\x37\x63\x47\x58\x53','\x57\x4f\x4f\x55\x57\x34\x46\x64\x48\x53\x6b\x67\x57\x37\x70\x63\x56\x43\x6b\x55\x43\x66\x5a\x64\x4f\x5a\x35\x76','\x57\x4f\x66\x76\x75\x64\x42\x63\x4c\x6d\x6f\x46\x68\x47\x6c\x63\x53\x6d\x6f\x74\x57\x34\x50\x53\x57\x37\x38','\x57\x4f\x6e\x52\x63\x43\x6f\x69\x57\x52\x42\x64\x47\x74\x6a\x4d','\x66\x4c\x31\x57\x57\x37\x44\x33\x57\x51\x4e\x63\x55\x53\x6f\x50','\x57\x50\x6d\x6e\x63\x38\x6f\x74\x57\x36\x54\x43\x57\x4f\x4c\x58','\x57\x35\x42\x64\x4a\x31\x39\x55\x57\x36\x79','\x57\x51\x2f\x63\x4f\x76\x52\x63\x4b\x43\x6f\x47','\x42\x5a\x54\x57\x57\x35\x6a\x43\x57\x52\x5a\x63\x4e\x38\x6f\x43','\x57\x37\x78\x63\x49\x38\x6b\x4c\x65\x59\x6d','\x43\x33\x6d\x78\x57\x36\x69','\x57\x51\x6c\x63\x54\x4e\x70\x63\x55\x53\x6f\x64','\x77\x63\x4a\x64\x4d\x6d\x6b\x69\x69\x53\x6f\x30\x6e\x38\x6b\x2f','\x70\x4e\x42\x63\x4c\x64\x30\x30\x43\x78\x4e\x63\x50\x6d\x6b\x63\x75\x6d\x6f\x42\x57\x50\x53','\x57\x34\x4e\x64\x49\x32\x53','\x57\x36\x30\x62\x57\x51\x33\x64\x52\x71','\x57\x4f\x42\x63\x49\x33\x70\x63\x52\x61','\x57\x52\x42\x63\x4d\x62\x58\x4f\x57\x34\x76\x61\x57\x37\x42\x63\x4e\x38\x6f\x6a','\x57\x35\x4a\x64\x47\x53\x6b\x33\x57\x37\x6e\x6d','\x66\x38\x6b\x54\x57\x52\x42\x64\x55\x48\x4a\x64\x53\x57','\x57\x35\x66\x6b\x73\x53\x6b\x73','\x57\x50\x64\x63\x4d\x61\x66\x7a\x45\x43\x6f\x53\x61\x76\x69','\x57\x37\x70\x63\x53\x6d\x6b\x42\x6a\x57\x37\x64\x54\x59\x52\x63\x48\x47','\x57\x34\x4c\x78\x77\x43\x6b\x68\x57\x52\x62\x4a\x57\x50\x58\x6d\x57\x50\x6e\x30\x65\x47','\x57\x4f\x4c\x46\x73\x38\x6f\x44\x73\x61','\x57\x4f\x46\x63\x48\x6d\x6f\x33\x57\x52\x69','\x77\x78\x53\x36\x74\x43\x6f\x36\x57\x36\x43','\x62\x38\x6b\x6c\x57\x4f\x68\x64\x48\x58\x79','\x7a\x4d\x6d\x6a\x57\x35\x47\x78','\x57\x51\x6d\x39\x57\x35\x50\x6f\x6c\x47','\x6b\x4e\x42\x64\x51\x33\x58\x4b','\x57\x51\x4e\x63\x56\x5a\x72\x33\x78\x38\x6f\x62','\x57\x4f\x58\x45\x75\x6d\x6f\x48\x43\x5a\x56\x63\x4c\x43\x6f\x56','\x44\x5a\x4e\x64\x4b\x6d\x6b\x2f\x68\x47','\x6a\x68\x70\x64\x53\x77\x6d','\x57\x35\x6d\x36\x57\x50\x78\x64\x4b\x6d\x6b\x73','\x75\x33\x68\x63\x4a\x5a\x70\x63\x50\x61','\x6f\x38\x6b\x33\x6e\x43\x6b\x34\x6f\x61','\x70\x53\x6b\x46\x68\x38\x6f\x56\x66\x59\x71','\x57\x50\x61\x65\x57\x52\x75','\x6e\x75\x37\x63\x50\x53\x6f\x73\x57\x34\x43\x32\x70\x30\x43'];_0x3f94=function(){return _0x410860;};return _0x3f94();}function _0x5515(_0x4906de,_0x5e61c6){_0x4906de=_0x4906de-(0x6*0x2c8+0x1a24+0x292f*-0x1);const _0x3962a1=_0x3f94();let _0x5a6226=_0x3962a1[_0x4906de];if(_0x5515['\x4b\x56\x46\x4c\x79\x66']===undefined){var _0x3f7ccc=function(_0x4c2dbb){const _0x564ca7='\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 _0x25a8da='',_0x42b0ae='',_0x206bb4=_0x25a8da+_0x3f7ccc,_0x277f23=(''+function(){return-0x87*-0x2d+-0x194a+0x18f;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(-0x256d+0x1*0x1cc7+0x5*0x1bb);for(let _0x289397=-0x1589+0x22ff+-0xd76,_0x1ca59e,_0x467faf,_0x55002b=-0x20d5+0x1b2b+0x5aa;_0x467faf=_0x4c2dbb['\x63\x68\x61\x72\x41\x74'](_0x55002b++);~_0x467faf&&(_0x1ca59e=_0x289397%(0x1be3+-0x57b+0x1664*-0x1)?_0x1ca59e*(-0x189a+0x46f*-0x6+0x3374)+_0x467faf:_0x467faf,_0x289397++%(0xb*0xe5+-0x128c*-0x1+-0x1c5f))?_0x25a8da+=_0x277f23||_0x206bb4['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x55002b+(0x1*-0xeaf+-0x253d+0x5c6*0x9))-(0xa92+-0xd57*0x2+0x813*0x2)!==-0xff1+-0x1*0xaa1+0x1a92?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0x6e2+-0x9*-0x6e+-0xe3*0xb&_0x1ca59e>>(-(0x156a+0x39a*0x7+-0x2e9e)*_0x289397&0x1dbf+-0x1*-0x24e+0xaad*-0x3)):_0x289397:0xb78+-0x1c30+0x28*0x6b){_0x467faf=_0x564ca7['\x69\x6e\x64\x65\x78\x4f\x66'](_0x467faf);}for(let _0x39f8f8=0x270b+-0x1*-0x719+-0x2e24,_0x284d6b=_0x25a8da['\x6c\x65\x6e\x67\x74\x68'];_0x39f8f8<_0x284d6b;_0x39f8f8++){_0x42b0ae+='\x25'+('\x30\x30'+_0x25a8da['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x39f8f8)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](-0xedd*-0x2+0x98b+-0x2735))['\x73\x6c\x69\x63\x65'](-(0x2689+-0x1c9c+-0x9eb));}return decodeURIComponent(_0x42b0ae);};const _0x1ad233=function(_0x481978,_0x1a9fee){let _0x150015=[],_0x33a3c3=-0x1*0xef9+-0x25*0x3b+-0x1780*-0x1,_0x4aa151,_0x4557f6='';_0x481978=_0x3f7ccc(_0x481978);let _0x276b5d;for(_0x276b5d=0x1*0x15e8+0xb08+0x1f*-0x110;_0x276b5d<0x1ebf+0x1*0x38b+-0x214a*0x1;_0x276b5d++){_0x150015[_0x276b5d]=_0x276b5d;}for(_0x276b5d=0x185e+0x10e4+-0x1*0x2942;_0x276b5d<-0x1d07+0x10*0x1a6+-0x11*-0x37;_0x276b5d++){_0x33a3c3=(_0x33a3c3+_0x150015[_0x276b5d]+_0x1a9fee['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x276b5d%_0x1a9fee['\x6c\x65\x6e\x67\x74\x68']))%(0x66c+0x907*0x2+-0x177a),_0x4aa151=_0x150015[_0x276b5d],_0x150015[_0x276b5d]=_0x150015[_0x33a3c3],_0x150015[_0x33a3c3]=_0x4aa151;}_0x276b5d=-0x1a81+0x1*0x4f3+0xb2*0x1f,_0x33a3c3=0x2cf*-0xa+0x21a*0xe+0x13*-0x12;for(let _0x2b9fa6=-0x1a3b+-0x692*-0x1+0x13a9;_0x2b9fa6<_0x481978['\x6c\x65\x6e\x67\x74\x68'];_0x2b9fa6++){_0x276b5d=(_0x276b5d+(0x2666+0x148*0x10+-0x3ae5))%(-0xf7*0x13+-0x16d0+0x2a25),_0x33a3c3=(_0x33a3c3+_0x150015[_0x276b5d])%(-0x51*0x44+-0xa7*-0x31+-0x973),_0x4aa151=_0x150015[_0x276b5d],_0x150015[_0x276b5d]=_0x150015[_0x33a3c3],_0x150015[_0x33a3c3]=_0x4aa151,_0x4557f6+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x481978['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x2b9fa6)^_0x150015[(_0x150015[_0x276b5d]+_0x150015[_0x33a3c3])%(0x2*0x379+0x2378+-0x296a*0x1)]);}return _0x4557f6;};_0x5515['\x52\x65\x75\x74\x43\x52']=_0x1ad233,_0x5515['\x4e\x44\x6c\x67\x48\x67']={},_0x5515['\x4b\x56\x46\x4c\x79\x66']=!![];}const _0x20db68=_0x3962a1[-0x2*0x1283+-0x57a+-0x5*-0x880],_0x4c4fea=_0x4906de+_0x20db68,_0x5883e0=_0x5515['\x4e\x44\x6c\x67\x48\x67'][_0x4c4fea];if(!_0x5883e0){if(_0x5515['\x67\x67\x65\x59\x56\x77']===undefined){const _0x218b84=function(_0x44de23){this['\x4e\x6d\x58\x66\x75\x7a']=_0x44de23,this['\x69\x71\x50\x65\x72\x47']=[-0x2*-0x69e+-0x12d7+-0x2*-0x2ce,0x1352*-0x1+0x1*0x195c+-0x305*0x2,-0x283*0x1+-0x5de+0x861],this['\x6b\x50\x4a\x6f\x67\x5a']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x53\x4d\x54\x4c\x42\x6e']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x77\x53\x5a\x4d\x67\x78']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x218b84['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x50\x64\x59\x58\x4f\x72']=function(){const _0x2e72dc=new RegExp(this['\x53\x4d\x54\x4c\x42\x6e']+this['\x77\x53\x5a\x4d\x67\x78']),_0x3a6c65=_0x2e72dc['\x74\x65\x73\x74'](this['\x6b\x50\x4a\x6f\x67\x5a']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x69\x71\x50\x65\x72\x47'][0x1be*0x4+-0x5d5*0x1+0xa*-0x1d]:--this['\x69\x71\x50\x65\x72\x47'][-0xdca+-0x75f+-0x1*-0x1529];return this['\x65\x76\x6f\x50\x70\x4b'](_0x3a6c65);},_0x218b84['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x65\x76\x6f\x50\x70\x4b']=function(_0x4a8de8){if(!Boolean(~_0x4a8de8))return _0x4a8de8;return this['\x63\x5a\x4a\x64\x53\x68'](this['\x4e\x6d\x58\x66\x75\x7a']);},_0x218b84['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x63\x5a\x4a\x64\x53\x68']=function(_0x5cfbf8){for(let _0x47109a=0xa*-0x134+0x1a0*0xd+-0x918,_0x3fc8b7=this['\x69\x71\x50\x65\x72\x47']['\x6c\x65\x6e\x67\x74\x68'];_0x47109a<_0x3fc8b7;_0x47109a++){this['\x69\x71\x50\x65\x72\x47']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x3fc8b7=this['\x69\x71\x50\x65\x72\x47']['\x6c\x65\x6e\x67\x74\x68'];}return _0x5cfbf8(this['\x69\x71\x50\x65\x72\x47'][-0xf32+-0x2*0x37d+0x162c]);},(''+function(){return-0xb85+0x435*-0x1+0xfba;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0x12ed+-0xcd9+-0x137*0x5)&&new _0x218b84(_0x5515)['\x50\x64\x59\x58\x4f\x72'](),_0x5515['\x67\x67\x65\x59\x56\x77']=!![];}_0x5a6226=_0x5515['\x52\x65\x75\x74\x43\x52'](_0x5a6226,_0x5e61c6),_0x5515['\x4e\x44\x6c\x67\x48\x67'][_0x4c4fea]=_0x5a6226;}else _0x5a6226=_0x5883e0;return _0x5a6226;}(function(_0x2270cb,_0x3d8412){const _0x5c7a02=_0x5515,_0x13e354=_0x2270cb();while(!![]){try{const _0x18aa61=-parseInt(_0x5c7a02(0x1de,'\x71\x21\x74\x46'))/(0x24*-0x9b+0x85a+0xb*0x139)+parseInt(_0x5c7a02(0x1dc,'\x30\x4b\x5a\x6c'))/(0x1eb5+-0x15f9+-0x2*0x45d)+-parseInt(_0x5c7a02(0x227,'\x79\x4f\x6a\x63'))/(-0x73e+-0x2e1*-0xb+-0xa*0x271)+-parseInt(_0x5c7a02(0x223,'\x34\x6e\x43\x50'))/(0x2420+0x1559+-0x3975)*(-parseInt(_0x5c7a02(0x1a8,'\x4c\x40\x44\x41'))/(-0x73*0x39+-0x4a9*0x7+-0x3a3f*-0x1))+parseInt(_0x5c7a02(0x1c3,'\x47\x6a\x65\x2a'))/(-0x6e*0x2b+0x124*-0x3+0x2e*0x7a)*(-parseInt(_0x5c7a02(0x206,'\x51\x7a\x5a\x4d'))/(-0xf91+-0x6b5*0x1+0x164d))+parseInt(_0x5c7a02(0x232,'\x76\x55\x35\x4a'))/(-0x16df+0x14*-0x179+0x407*0xd)*(-parseInt(_0x5c7a02(0x1ec,'\x65\x55\x59\x38'))/(0x1632+-0x29*0x8c+0x43))+-parseInt(_0x5c7a02(0x214,'\x4c\x40\x44\x41'))/(0x7*-0x1cf+0x12ee+-0x63b)*(-parseInt(_0x5c7a02(0x1c9,'\x4b\x4f\x49\x49'))/(-0x3*0x7e3+0x7*0x23b+0x817));if(_0x18aa61===_0x3d8412)break;else _0x13e354['push'](_0x13e354['shift']());}catch(_0x153b4f){_0x13e354['push'](_0x13e354['shift']());}}}(_0x3f94,-0x1559f6+-0x2b9c*-0x4a+0x16b72b));const _0x18706b=(function(){const _0x903d77=_0x5515,_0x479801={};_0x479801[_0x903d77(0x1e8,'\x76\x65\x40\x56')]=_0x903d77(0x213,'\x29\x76\x57\x6a')+_0x903d77(0x1c8,'\x47\x56\x46\x39')+_0x903d77(0x1ef,'\x4c\x40\x44\x41'),_0x479801[_0x903d77(0x204,'\x62\x78\x70\x6a')]='\x69\x6b\x46\x54\x68',_0x479801[_0x903d77(0x1e5,'\x66\x74\x72\x76')]=_0x903d77(0x1d4,'\x4e\x4d\x33\x51');const _0x4b0917=_0x479801;let _0x5a7ca7=!![];return function(_0x2fa350,_0x22c869){const _0x621f1e=_0x903d77;if(_0x4b0917[_0x621f1e(0x1e9,'\x6d\x75\x50\x73')]===_0x4b0917[_0x621f1e(0x229,'\x29\x56\x37\x30')]){const _0x24d239={};return _0x24d239[_0x621f1e(0x1ac,'\x43\x52\x21\x23')]=![],_0x24d239[_0x621f1e(0x215,'\x66\x74\x72\x76')]=_0x4b0917[_0x621f1e(0x20b,'\x63\x24\x61\x7a')],_0x24d239;}else{const _0x598f7b=_0x5a7ca7?function(){const _0x3d6621=_0x621f1e;if(_0x22c869){const _0x177d76=_0x22c869[_0x3d6621(0x1d2,'\x5b\x25\x40\x53')](_0x2fa350,arguments);return _0x22c869=null,_0x177d76;}}:function(){};return _0x5a7ca7=![],_0x598f7b;}};}()),_0x32d896=_0x18706b(this,function(){const _0x2b7384=_0x5515,_0x595471={};_0x595471[_0x2b7384(0x1d9,'\x30\x4b\x5a\x6c')]=_0x2b7384(0x1f9,'\x6a\x6c\x52\x67')+_0x2b7384(0x1b0,'\x51\x7a\x5a\x4d');const _0x3deae0=_0x595471;return _0x32d896['\x74\x6f\x53\x74\x72\x69\x6e\x67']()[_0x2b7384(0x1ff,'\x4b\x43\x5b\x2a')](_0x3deae0[_0x2b7384(0x1c7,'\x47\x6a\x65\x2a')])[_0x2b7384(0x20c,'\x76\x55\x35\x4a')]()[_0x2b7384(0x1e3,'\x67\x39\x52\x71')+_0x2b7384(0x1a5,'\x62\x78\x70\x6a')](_0x32d896)[_0x2b7384(0x1e6,'\x74\x63\x46\x79')](_0x3deae0[_0x2b7384(0x1da,'\x62\x45\x71\x50')]);});_0x32d896();'use strict';const {getProxyToken:_0x374310,getProxyUrl:_0x236d3d}=require(_0x582b27(0x207,'\x79\x4f\x6a\x63')+'\x2f\x73\x65\x74\x74\x69\x6e\x67'+'\x73');function _0x3ed549(_0x38c464=process.env){const _0x4a6ad6=_0x582b27,_0x24d743={'\x52\x65\x6e\x6b\x46':function(_0x22c008,_0x2d93a2){return _0x22c008(_0x2d93a2);},'\x6b\x76\x45\x58\x46':function(_0x3ba215,_0x32ee78){return _0x3ba215===_0x32ee78;},'\x61\x62\x77\x57\x76':function(_0x3fe3e1,_0x3d92af){return _0x3fe3e1===_0x3d92af;},'\x78\x49\x6e\x4e\x78':_0x4a6ad6(0x231,'\x73\x4f\x6d\x79'),'\x72\x6e\x51\x46\x59':function(_0x5f2808,_0x4a0d80){return _0x5f2808===_0x4a0d80;},'\x41\x68\x79\x77\x43':'\x6f\x66\x66','\x5a\x53\x5a\x64\x4d':'\x6e\x6f\x6e\x65'},_0x1620c5=_0x24d743['\x52\x65\x6e\x6b\x46'](String,_0x38c464[_0x4a6ad6(0x225,'\x6a\x55\x31\x51')+'\x52\x4f\x58\x59\x5f\x41\x55\x54'+_0x4a6ad6(0x1fa,'\x34\x6e\x43\x50')]||'')[_0x4a6ad6(0x1b9,'\x29\x76\x57\x6a')]()[_0x4a6ad6(0x202,'\x4f\x44\x36\x49')+_0x4a6ad6(0x1c5,'\x79\x64\x2a\x5e')]();return _0x24d743[_0x4a6ad6(0x235,'\x73\x4f\x6d\x79')](_0x1620c5,'\x30')||_0x24d743[_0x4a6ad6(0x219,'\x67\x39\x52\x71')](_0x1620c5,_0x24d743[_0x4a6ad6(0x1b4,'\x76\x65\x40\x56')])||_0x24d743[_0x4a6ad6(0x1ca,'\x32\x4b\x56\x47')](_0x1620c5,_0x24d743[_0x4a6ad6(0x1bb,'\x35\x5e\x74\x4a')])||_0x24d743[_0x4a6ad6(0x219,'\x67\x39\x52\x71')](_0x1620c5,_0x24d743[_0x4a6ad6(0x20f,'\x79\x4f\x6a\x63')])||_0x24d743[_0x4a6ad6(0x1b3,'\x6d\x75\x50\x73')](_0x1620c5,'\x6e\x6f');}function _0x5b0ac1(_0xe29bea={},_0x326e10=process.env){const _0x2feda9=_0x582b27,_0x3a4dbc={'\x76\x72\x44\x74\x7a':_0x2feda9(0x1f3,'\x26\x7a\x46\x45'),'\x5a\x62\x58\x49\x72':'\x28\x28\x28\x2e\x2b\x29\x2b\x29'+_0x2feda9(0x21e,'\x5b\x25\x40\x53'),'\x55\x46\x76\x4e\x6f':function(_0x419af7,_0x3e00f6){return _0x419af7(_0x3e00f6);},'\x4f\x4c\x76\x78\x73':function(_0x3ba03e,_0x1ac667){return _0x3ba03e===_0x1ac667;},'\x46\x4f\x59\x4d\x49':_0x2feda9(0x20a,'\x47\x6a\x65\x2a'),'\x6c\x4e\x49\x62\x68':_0x2feda9(0x211,'\x35\x5e\x74\x4a'),'\x57\x6a\x4c\x51\x4f':function(_0x2e9e9,_0xc787d2){return _0x2e9e9===_0xc787d2;},'\x62\x43\x56\x4e\x61':function(_0x3e34d5,_0x108d02){return _0x3e34d5!==_0x108d02;},'\x4a\x49\x51\x50\x79':function(_0x407ebd){return _0x407ebd();},'\x44\x50\x6b\x6d\x6f':function(_0x3a77d9,_0x330934){return _0x3a77d9||_0x330934;},'\x62\x7a\x63\x53\x4c':'\x65\x45\x43\x65\x52','\x6f\x55\x54\x51\x4e':_0x2feda9(0x1cf,'\x50\x4d\x26\x73'),'\x64\x6f\x48\x53\x75':_0x2feda9(0x1d1,'\x6c\x72\x36\x36')+_0x2feda9(0x21a,'\x65\x55\x59\x38')+'\x74\x74\x69\x6e\x67\x73','\x73\x71\x4f\x70\x57':function(_0x1b306c,_0x5f1844){return _0x1b306c(_0x5f1844);},'\x48\x66\x74\x74\x4b':_0x2feda9(0x1af,'\x4b\x43\x5b\x2a'),'\x6c\x46\x66\x6c\x68':'\x41\x4e\x54\x48\x52\x4f\x50\x49'+_0x2feda9(0x1db,'\x29\x76\x57\x6a')+'\x52\x4c','\x4c\x42\x73\x51\x70':_0x2feda9(0x1df,'\x6c\x72\x36\x36')+_0x2feda9(0x236,'\x5b\x25\x40\x53')+_0x2feda9(0x21c,'\x74\x63\x46\x79'),'\x6b\x6b\x46\x55\x58':'\x45\x56\x4f\x4d\x41\x50\x5f\x50'+_0x2feda9(0x1e2,'\x65\x55\x59\x38')};if(_0x3a4dbc[_0x2feda9(0x1fd,'\x43\x52\x21\x23')](_0x3ed549,_0x326e10)){if(_0x3a4dbc['\x4f\x4c\x76\x78\x73'](_0x3a4dbc['\x46\x4f\x59\x4d\x49'],_0x3a4dbc[_0x2feda9(0x1b8,'\x5b\x25\x40\x53')])){const _0x5343b7={};return _0x5343b7[_0x2feda9(0x22f,'\x34\x6e\x43\x50')]=![],_0x5343b7[_0x2feda9(0x1c6,'\x6b\x4a\x5e\x28')]=_0x3a4dbc[_0x2feda9(0x217,'\x62\x78\x63\x63')],_0x5343b7;}else{const _0x8e391b={};return _0x8e391b['\x69\x6e\x6a\x65\x63\x74\x65\x64']=![],_0x8e391b[_0x2feda9(0x1ea,'\x76\x65\x40\x56')]=_0x3a4dbc[_0x2feda9(0x21f,'\x4f\x44\x36\x49')],_0x8e391b;}}const _0x1cb4f1=_0x3a4dbc[_0x2feda9(0x205,'\x4e\x4d\x33\x51')](_0x326e10,process.env)&&_0x3a4dbc['\x62\x43\x56\x4e\x61'](_0xe29bea[_0x2feda9(0x1ed,'\x67\x39\x52\x71')+_0x2feda9(0x1f1,'\x62\x45\x71\x50')],![]),_0x54b93a=_0x3a4dbc[_0x2feda9(0x1fc,'\x38\x31\x45\x25')](String,_0xe29bea['\x75\x72\x6c']||(_0x1cb4f1?_0x3a4dbc[_0x2feda9(0x1bc,'\x4d\x38\x57\x2a')](_0x236d3d):'')||'')[_0x2feda9(0x220,'\x4f\x44\x36\x49')](/\/+$/,''),_0x40ab9b=_0x3a4dbc['\x55\x46\x76\x4e\x6f'](String,_0xe29bea[_0x2feda9(0x1a9,'\x51\x7a\x5a\x4d')]||(_0x1cb4f1?_0x3a4dbc[_0x2feda9(0x1ba,'\x50\x4d\x26\x73')](_0x374310):'')||'');if(_0x3a4dbc[_0x2feda9(0x224,'\x51\x7a\x5a\x4d')](!_0x54b93a,!_0x40ab9b)){if(_0x3a4dbc[_0x2feda9(0x1e4,'\x6b\x4a\x5e\x28')](_0x3a4dbc[_0x2feda9(0x20e,'\x29\x6e\x79\x23')],_0x3a4dbc[_0x2feda9(0x233,'\x49\x48\x4d\x40')]))return _0xb18fc2[_0x2feda9(0x201,'\x66\x74\x72\x76')]()[_0x2feda9(0x1b1,'\x62\x78\x63\x63')](_0x2feda9(0x20d,'\x49\x48\x4d\x40')+_0x2feda9(0x1ab,'\x34\x6e\x43\x50'))[_0x2feda9(0x1dd,'\x5b\x25\x40\x53')]()[_0x2feda9(0x1e3,'\x67\x39\x52\x71')+_0x2feda9(0x1f7,'\x76\x55\x35\x4a')](_0x3f4f22)[_0x2feda9(0x1ff,'\x4b\x43\x5b\x2a')](trOQFY[_0x2feda9(0x1d5,'\x36\x28\x44\x48')]);else{const _0x465ace={};return _0x465ace[_0x2feda9(0x1ad,'\x49\x48\x4d\x40')]=![],_0x465ace[_0x2feda9(0x1aa,'\x55\x4f\x4e\x53')]=_0x3a4dbc['\x64\x6f\x48\x53\x75'],_0x465ace;}}const _0x4db452=_0x3a4dbc[_0x2feda9(0x203,'\x5b\x25\x40\x53')](String,_0x326e10[_0x2feda9(0x221,'\x67\x39\x52\x71')+_0x2feda9(0x1d8,'\x71\x21\x74\x46')+'\x52\x4c']||'')[_0x2feda9(0x1a6,'\x50\x4d\x26\x73')]()[_0x2feda9(0x212,'\x79\x4f\x6a\x63')](/\/+$/,'');_0x4db452&&_0x4db452!==_0x54b93a&&!_0x326e10[_0x2feda9(0x1cd,'\x65\x55\x59\x38')+_0x2feda9(0x216,'\x67\x39\x52\x71')+_0x2feda9(0x1c0,'\x47\x73\x79\x6e')+'\x4c']&&(_0x3a4dbc[_0x2feda9(0x1e1,'\x51\x7a\x5a\x4d')](_0x2feda9(0x1ee,'\x76\x55\x35\x4a'),_0x3a4dbc[_0x2feda9(0x1b5,'\x79\x64\x2a\x5e')])?_0x27f47d[_0x2feda9(0x210,'\x66\x74\x72\x76')+'\x4e\x54\x48\x52\x4f\x50\x49\x43'+'\x5f\x41\x55\x54\x48\x5f\x54\x4f'+'\x4b\x45\x4e']=_0x24a9a1:_0x326e10[_0x2feda9(0x1d7,'\x62\x78\x70\x6a')+'\x4e\x54\x48\x52\x4f\x50\x49\x43'+'\x5f\x42\x41\x53\x45\x5f\x55\x52'+'\x4c']=_0x4db452);const _0x4c2578=_0x3a4dbc[_0x2feda9(0x1d0,'\x6d\x75\x50\x73')](String,_0x326e10[_0x2feda9(0x1fb,'\x26\x7a\x46\x45')+_0x2feda9(0x1e7,'\x49\x48\x4d\x40')+_0x2feda9(0x1d6,'\x49\x51\x4d\x69')]||'')[_0x2feda9(0x234,'\x6d\x75\x50\x73')]();_0x4c2578&&_0x3a4dbc[_0x2feda9(0x1b2,'\x55\x4f\x4e\x53')](_0x4c2578,_0x40ab9b)&&!_0x326e10[_0x2feda9(0x209,'\x4c\x40\x44\x41')+_0x2feda9(0x228,'\x6c\x72\x36\x36')+'\x5f\x41\x55\x54\x48\x5f\x54\x4f'+'\x4b\x45\x4e']&&(_0x326e10['\x45\x56\x4f\x4d\x41\x50\x5f\x41'+_0x2feda9(0x22e,'\x76\x55\x35\x4a')+_0x2feda9(0x1ce,'\x29\x76\x57\x6a')+_0x2feda9(0x1be,'\x32\x59\x6f\x25')]=_0x4c2578);_0x326e10[_0x2feda9(0x22a,'\x4c\x74\x2a\x47')+_0x2feda9(0x200,'\x5e\x6d\x42\x44')+'\x52\x4c']=_0x54b93a,_0x326e10[_0x2feda9(0x1eb,'\x29\x56\x37\x30')+_0x2feda9(0x1f5,'\x51\x7a\x5a\x4d')+_0x2feda9(0x1a7,'\x73\x4f\x6d\x79')]=_0x40ab9b,_0x326e10[_0x2feda9(0x222,'\x51\x7a\x5a\x4d')+_0x2feda9(0x1b6,'\x43\x52\x21\x23')]=_0x40ab9b,_0x326e10[_0x2feda9(0x218,'\x62\x78\x63\x63')+_0x2feda9(0x1f6,'\x63\x24\x61\x7a')]=_0x54b93a,_0x326e10[_0x2feda9(0x22d,'\x67\x39\x52\x71')+_0x2feda9(0x1f0,'\x67\x39\x52\x71')+_0x2feda9(0x21b,'\x29\x6e\x79\x23')+'\x45\x44']='\x31';const _0x5b6990={};return _0x5b6990[_0x2feda9(0x208,'\x38\x31\x45\x25')]=!![],_0x5b6990[_0x2feda9(0x1c4,'\x4e\x4d\x33\x51')]=_0x54b93a,_0x5b6990[_0x2feda9(0x1e0,'\x26\x7a\x46\x45')]=[_0x3a4dbc[_0x2feda9(0x1d3,'\x74\x63\x46\x79')],_0x3a4dbc[_0x2feda9(0x1f2,'\x76\x65\x40\x56')],_0x2feda9(0x1b7,'\x4b\x43\x5b\x2a')+_0x2feda9(0x1cb,'\x4f\x44\x36\x49'),_0x3a4dbc[_0x2feda9(0x230,'\x62\x78\x70\x6a')]],_0x5b6990;}const _0x334401={};_0x334401[_0x582b27(0x1bf,'\x47\x56\x46\x39')+_0x582b27(0x1bd,'\x71\x21\x74\x46')]=_0x5b0ac1,_0x334401[_0x582b27(0x1fe,'\x62\x78\x63\x63')+'\x65\x64']=_0x3ed549,module[_0x582b27(0x1f8,'\x62\x45\x71\x50')]=_0x334401;
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;
@@ -761,6 +762,25 @@ class LifecycleManager {
761
762
  },
762
763
  };
763
764
 
765
+ try {
766
+ const cfg = require('../../config');
767
+ if (cfg.antiAbuseTelemetryMode && cfg.antiAbuseTelemetryMode() === 'heartbeat') {
768
+ const { buildHeartbeatAntiAbuseTelemetry } = require('../../gep/antiAbuseTelemetry');
769
+ body.meta.anti_abuse = buildHeartbeatAntiAbuseTelemetry({
770
+ source: 'evolver-proxy',
771
+ nodeId: this.nodeId,
772
+ envFingerprint: fp,
773
+ taskMeta: body.meta,
774
+ // This heartbeat is sent FROM the running proxy — ground truth,
775
+ // not env sniffing (this process usually has neither EVOMAP_PROXY
776
+ // nor EVOMAP_PROXY_PORT set, which would misreport false).
777
+ proxyPortConfigured: true,
778
+ });
779
+ }
780
+ } catch (e) {
781
+ this.logger.warn(`[AntiAbuseTelemetry] failed to build heartbeat summary: ${e && e.message || e}`);
782
+ }
783
+
764
784
  // Attach any pending force_update outcome so the hub-side
765
785
  // EvolverUpgradeAttempt table gets a row. Captured in a local so the
766
786
  // post-2xx clear matches identity (rotation-safe — see
@@ -1035,6 +1055,7 @@ class LifecycleManager {
1035
1055
 
1036
1056
  async _heartbeatTick(myGen) {
1037
1057
  if (!this._running) return;
1058
+ this._lastHeartbeatTickAt = Date.now();
1038
1059
  // Defence-in-depth: even with heartbeat() now fully wrapped (see
1039
1060
  // its body), an unforeseen synchronous throw inside the awaited
1040
1061
  // path or a defective stub passed in tests would still bubble
@@ -1101,6 +1122,16 @@ class LifecycleManager {
1101
1122
  }
1102
1123
  }
1103
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
+
1104
1135
  _shouldUpgrade(minVersion) {
1105
1136
  // parseInt strips trailing non-digit chars in prerelease segments like
1106
1137
  // `1-beta`, so `0.1.1-beta.1`.split('.')[2] -> `1-beta` -> parseInt = 1.
@@ -7,6 +7,24 @@ const crypto = require('crypto');
7
7
  const DEFAULT_CHANNEL = 'evomap-hub';
8
8
  const SCHEMA_VERSION = 1;
9
9
  const PROXY_PROTOCOL_VERSION = '0.1.0';
10
+ const PRIVATE_DIR_MODE = 0o700;
11
+ const PRIVATE_FILE_MODE = 0o600;
12
+
13
+ function bestEffortChmod(filePath, mode) {
14
+ try { fs.chmodSync(filePath, mode); } catch { /* best effort; no-op on Windows */ }
15
+ }
16
+
17
+ function ensurePrivateDir(dir) {
18
+ if (!fs.existsSync(dir)) {
19
+ fs.mkdirSync(dir, { recursive: true, mode: PRIVATE_DIR_MODE });
20
+ }
21
+ bestEffortChmod(dir, PRIVATE_DIR_MODE);
22
+ }
23
+
24
+ function writePrivateFile(filePath, content) {
25
+ fs.writeFileSync(filePath, content, { encoding: 'utf8', mode: PRIVATE_FILE_MODE });
26
+ bestEffortChmod(filePath, PRIVATE_FILE_MODE);
27
+ }
10
28
 
11
29
  // Merge `fields` into `target` while stripping keys that can mutate the
12
30
  // prototype chain. Mailbox rows are persisted as JSONL and rebuilt on
@@ -90,8 +108,8 @@ function safeParse(payload) {
90
108
  // regular files that POSIX local filesystems do, so the removal above is
91
109
  // equally valid on Windows. No platform-specific code is needed here.
92
110
  function appendLine(filePath, obj) {
93
- fs.appendFileSync(filePath, JSON.stringify(obj) + '\n', 'utf8');
94
- try { fs.chmodSync(filePath, 0o600); } catch { /* best effort */ }
111
+ fs.appendFileSync(filePath, JSON.stringify(obj) + '\n', { encoding: 'utf8', mode: PRIVATE_FILE_MODE });
112
+ bestEffortChmod(filePath, PRIVATE_FILE_MODE);
95
113
  }
96
114
 
97
115
  function readLines(filePath) {
@@ -112,11 +130,13 @@ function readLines(filePath) {
112
130
  class MailboxStore {
113
131
  constructor(dataDir) {
114
132
  if (!dataDir) throw new Error('dataDir is required');
115
- if (!fs.existsSync(dataDir)) fs.mkdirSync(dataDir, { recursive: true });
133
+ ensurePrivateDir(dataDir);
116
134
  this.dataDir = dataDir;
117
135
 
118
136
  this._messagesFile = path.join(dataDir, 'messages.jsonl');
119
137
  this._stateFile = path.join(dataDir, 'state.json');
138
+ bestEffortChmod(this._messagesFile, PRIVATE_FILE_MODE);
139
+ bestEffortChmod(this._stateFile, PRIVATE_FILE_MODE);
120
140
 
121
141
  // in-memory indexes
122
142
  this._messages = new Map(); // id -> message object
@@ -156,7 +176,7 @@ class MailboxStore {
156
176
 
157
177
  _persistState() {
158
178
  const dir = path.dirname(this._stateFile);
159
- if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
179
+ ensurePrivateDir(dir);
160
180
  // Round-7 (§20.5): per-PID tmp path. Two evolver processes (daemon +
161
181
  // ad-hoc CLI / proxy + loop) writing to the same `${stateFile}.tmp`
162
182
  // would otherwise interleave: process B's writeFileSync truncates
@@ -167,7 +187,7 @@ class MailboxStore {
167
187
  // for 30 min..4 h" symptom this branch targets. Matches the
168
188
  // precedent set by _persistNodeSecret in src/gep/a2aProtocol.js.
169
189
  const tmp = `${this._stateFile}.${process.pid}.tmp`;
170
- fs.writeFileSync(tmp, JSON.stringify(this._state, null, 2) + '\n', 'utf8');
190
+ writePrivateFile(tmp, JSON.stringify(this._state, null, 2) + '\n');
171
191
  // Windows: fs.renameSync throws EPERM when the destination file already
172
192
  // exists, unlike POSIX where rename(2) atomically replaces the target.
173
193
  // Remove the destination first so the rename succeeds on all platforms.
@@ -179,6 +199,7 @@ class MailboxStore {
179
199
  }
180
200
  }
181
201
  fs.renameSync(tmp, this._stateFile);
202
+ bestEffortChmod(this._stateFile, PRIVATE_FILE_MODE);
182
203
  }
183
204
 
184
205
  _rebuildIndex() {
@@ -387,7 +408,7 @@ class MailboxStore {
387
408
  return all.slice(skip, skip + max).map(m => ({ ...m }));
388
409
  }
389
410
 
390
- countPending({ direction, channel } = {}) {
411
+ countPending({ direction, channel, type } = {}) {
391
412
  const dir = direction || 'outbound';
392
413
  let count = 0;
393
414
  const idList = dir === 'outbound' ? this._outbound : this._inbound;
@@ -395,6 +416,7 @@ class MailboxStore {
395
416
  const msg = this._messages.get(id);
396
417
  if (!msg || msg.status !== 'pending') continue;
397
418
  if (channel && msg.channel !== channel) continue;
419
+ if (type && msg.type !== type) continue;
398
420
  count++;
399
421
  }
400
422
  return count;
@@ -435,11 +457,12 @@ class MailboxStore {
435
457
  }
436
458
  entries.sort((a, b) => a.created_at - b.created_at);
437
459
 
438
- const fd = fs.openSync(tmpFile, 'w');
460
+ const fd = fs.openSync(tmpFile, 'w', PRIVATE_FILE_MODE);
439
461
  for (const msg of entries) {
440
462
  fs.writeSync(fd, JSON.stringify(msg) + '\n');
441
463
  }
442
464
  fs.closeSync(fd);
465
+ bestEffortChmod(tmpFile, PRIVATE_FILE_MODE);
443
466
  // Windows: renameSync throws EPERM when the destination already exists.
444
467
  // Remove it first so the swap succeeds on all platforms.
445
468
  if (process.platform === 'win32') {
@@ -448,6 +471,7 @@ class MailboxStore {
448
471
  }
449
472
  }
450
473
  fs.renameSync(tmpFile, this._messagesFile);
474
+ bestEffortChmod(this._messagesFile, PRIVATE_FILE_MODE);
451
475
  this._rebuildIndex();
452
476
  }
453
477
 
@@ -104,7 +104,7 @@ function resolveTierModels() {
104
104
  };
105
105
  }
106
106
 
107
- function buildMessagesHandler({ anthropicProxy, logger, routerEnabled, traceStore } = {}) {
107
+ function buildMessagesHandler({ anthropicProxy, logger, routerEnabled, traceStore, onTraceQueued } = {}) {
108
108
  if (typeof anthropicProxy !== 'function') {
109
109
  throw new Error('buildMessagesHandler requires anthropicProxy(path, body, opts)');
110
110
  }
@@ -278,6 +278,8 @@ function buildMessagesHandler({ anthropicProxy, logger, routerEnabled, traceStor
278
278
  originalModel,
279
279
  chosenModel,
280
280
  store: traceStore,
281
+ logger: traceStore ? log : null,
282
+ onTraceQueued,
281
283
  });
282
284
  } catch (_) { /* best-effort trace; never break the request */ }
283
285
 
@@ -450,7 +452,8 @@ function buildMessagesHandler({ anthropicProxy, logger, routerEnabled, traceStor
450
452
  event: 'router_fallback',
451
453
  reason: 'upstream_non_json',
452
454
  upstream_status: finalUpstream.status,
453
- preview: raw.slice(0, 200),
455
+ content_type: finalUpstream.headers && finalUpstream.headers['content-type'] || '',
456
+ response_bytes: Buffer.byteLength(raw),
454
457
  }));
455
458
  }
456
459
  }
@@ -0,0 +1,157 @@
1
+ 'use strict';
2
+
3
+ const { createProxyTrace } = require('../trace/extractor');
4
+
5
+ const OPENAI_RESPONSE_HEADER_ALLOWLIST = new Set([
6
+ 'openai-processing-ms',
7
+ 'openai-version',
8
+ 'retry-after',
9
+ 'x-request-id',
10
+ ]);
11
+
12
+ function hasOpenAIUpstreamCredential() {
13
+ if (process.env.EVOMAP_OPENAI_API_KEY || process.env.OPENAI_API_KEY) return true;
14
+ return false;
15
+ }
16
+
17
+ function upstreamStatus(err, fallback = 502) {
18
+ const status = Number(err && err.statusCode);
19
+ return Number.isFinite(status) ? status : fallback;
20
+ }
21
+
22
+ function safeOpenAIConfigDiagnostic(err) {
23
+ const message = err && typeof err.message === 'string' ? err.message : '';
24
+ if (message.startsWith('[proxy] EVOMAP_OPENAI_BASE_URL ')) return message;
25
+ return '';
26
+ }
27
+
28
+ function asUpstreamError(err, fallback = 502) {
29
+ if (err && err.statusCode && /^openai upstream /.test(err.message || '')) return err;
30
+ const diagnostic = safeOpenAIConfigDiagnostic(err);
31
+ const message = diagnostic
32
+ ? `openai upstream request failed: ${diagnostic}`
33
+ : 'openai upstream request failed';
34
+ const out = new Error(message);
35
+ out.statusCode = upstreamStatus(err, fallback);
36
+ out.cause = err;
37
+ return out;
38
+ }
39
+
40
+ function responseToBody(raw, status, headers, log) {
41
+ if (!raw) return {};
42
+ try {
43
+ return JSON.parse(raw);
44
+ } catch {
45
+ log.warn?.(JSON.stringify({
46
+ event: 'openai_responses_fallback',
47
+ reason: 'upstream_non_json',
48
+ upstream_status: status,
49
+ content_type: headers && headers['content-type'] || '',
50
+ response_bytes: Buffer.byteLength(raw),
51
+ }));
52
+ return { error: raw };
53
+ }
54
+ }
55
+
56
+ function copyOpenAIResponseHeaders(headers = {}) {
57
+ const out = {};
58
+ for (const [name, value] of Object.entries(headers || {})) {
59
+ const lower = String(name || '').toLowerCase();
60
+ if (!OPENAI_RESPONSE_HEADER_ALLOWLIST.has(lower) && !lower.startsWith('x-ratelimit-')) continue;
61
+ if (value === undefined || value === null) continue;
62
+ const headerValue = Array.isArray(value) ? value.join(', ') : String(value);
63
+ if (/[\r\n]/.test(headerValue)) continue;
64
+ out[lower] = headerValue;
65
+ }
66
+ return out;
67
+ }
68
+
69
+ function buildResponsesHandler({ openAIProxy, logger, traceStore, onTraceQueued } = {}) {
70
+ if (typeof openAIProxy !== 'function') {
71
+ throw new Error('buildResponsesHandler requires openAIProxy(path, body, opts)');
72
+ }
73
+ const log = logger || console;
74
+
75
+ return async ({ body, headers }) => {
76
+ const inboundHeaders = headers || {};
77
+ if (!hasOpenAIUpstreamCredential()) {
78
+ throw Object.assign(new Error('openai api key required'), { statusCode: 401 });
79
+ }
80
+
81
+ const originalModel = body && typeof body.model === 'string' ? body.model : null;
82
+ let trace = null;
83
+ try {
84
+ trace = createProxyTrace({
85
+ route: 'POST /v1/responses',
86
+ headers: inboundHeaders,
87
+ body,
88
+ upstreamMode: 'openai',
89
+ originalModel,
90
+ chosenModel: originalModel,
91
+ store: traceStore,
92
+ logger: traceStore ? log : null,
93
+ onTraceQueued,
94
+ });
95
+ } catch (_) { /* best-effort trace; never break the request */ }
96
+
97
+ let upstream;
98
+ try {
99
+ upstream = await openAIProxy('/responses', body, {
100
+ inboundHeaders,
101
+ upstreamMode: 'openai',
102
+ });
103
+ } catch (err) {
104
+ const wrapped = asUpstreamError(err, upstreamStatus(err));
105
+ trace?.record({ status: wrapped.statusCode, error: wrapped, upstreamMode: 'openai', model: originalModel });
106
+ throw wrapped;
107
+ }
108
+
109
+ if (upstream.stream) {
110
+ const forwardHeaders = copyOpenAIResponseHeaders(upstream.headers);
111
+ const ct = upstream.headers && upstream.headers['content-type'];
112
+ if (ct) forwardHeaders['Content-Type'] = ct;
113
+ trace?.recordStreamStart({
114
+ status: upstream.status,
115
+ upstreamMode: 'openai',
116
+ model: originalModel,
117
+ headers: forwardHeaders,
118
+ });
119
+ return {
120
+ status: upstream.status,
121
+ stream: upstream.stream,
122
+ headers: forwardHeaders,
123
+ };
124
+ }
125
+
126
+ let raw = '';
127
+ if (upstream.text) {
128
+ try {
129
+ raw = await upstream.text();
130
+ } catch (err) {
131
+ const wrapped = asUpstreamError(err, upstreamStatus(err));
132
+ trace?.record({ status: wrapped.statusCode, error: wrapped, upstreamMode: 'openai', model: originalModel });
133
+ throw wrapped;
134
+ }
135
+ }
136
+ const respBody = responseToBody(raw, upstream.status, upstream.headers, log);
137
+ trace?.record({
138
+ status: upstream.status,
139
+ responseBody: respBody,
140
+ upstreamMode: 'openai',
141
+ model: originalModel,
142
+ headers: upstream.headers,
143
+ });
144
+ return {
145
+ status: upstream.status,
146
+ body: respBody,
147
+ headers: copyOpenAIResponseHeaders(upstream.headers),
148
+ };
149
+ };
150
+ }
151
+
152
+ module.exports = {
153
+ buildResponsesHandler,
154
+ copyOpenAIResponseHeaders,
155
+ hasOpenAIUpstreamCredential,
156
+ responseToBody,
157
+ };
@@ -64,12 +64,21 @@ function parseBody(req, opts) {
64
64
  });
65
65
  }
66
66
 
67
- function sendJson(res, status, body) {
67
+ function sendJson(res, status, body, extraHeaders = {}) {
68
68
  const payload = JSON.stringify(body);
69
- res.writeHead(status, {
69
+ const headers = {
70
70
  'Content-Type': 'application/json',
71
71
  'Content-Length': Buffer.byteLength(payload),
72
- });
72
+ };
73
+ for (const [name, value] of Object.entries(extraHeaders || {})) {
74
+ if (value === undefined || value === null) continue;
75
+ const lower = String(name).toLowerCase();
76
+ if (lower === 'content-length' || lower === 'transfer-encoding' || lower === 'connection') continue;
77
+ const headerValue = Array.isArray(value) ? value.join(', ') : String(value);
78
+ if (/[\r\n]/.test(headerValue)) continue;
79
+ headers[name] = headerValue;
80
+ }
81
+ res.writeHead(status, headers);
73
82
  res.end(payload);
74
83
  }
75
84
 
@@ -196,7 +205,7 @@ class ProxyHttpServer {
196
205
  if (result && result.stream) {
197
206
  await this._streamResponse(res, result);
198
207
  } else {
199
- sendJson(res, result.status || 200, result.body || result);
208
+ sendJson(res, result.status || 200, result.body || result, result.headers);
200
209
  }
201
210
  } catch (err) {
202
211
  this.logger.error(`[proxy] ${routeKey} error:`, err.message);
@@ -3,7 +3,14 @@
3
3
  const { PROXY_PROTOCOL_VERSION, SCHEMA_VERSION } = require('../mailbox/store');
4
4
 
5
5
  function buildRoutes(store, proxyHandlers, taskMonitor, extensions) {
6
- const { dmHandler, skillUpdater, getHubMailboxStatus, sessionHandler, messagesHandler } = extensions || {};
6
+ const {
7
+ dmHandler,
8
+ skillUpdater,
9
+ getHubMailboxStatus,
10
+ sessionHandler,
11
+ messagesHandler,
12
+ responsesHandler,
13
+ } = extensions || {};
7
14
  const routes = {
8
15
  // -- Mailbox --
9
16
  'POST /mailbox/send': async ({ body }) => {
@@ -466,6 +473,9 @@ function buildRoutes(store, proxyHandlers, taskMonitor, extensions) {
466
473
  if (messagesHandler) {
467
474
  routes['POST /v1/messages'] = messagesHandler;
468
475
  }
476
+ if (responsesHandler) {
477
+ routes['POST /v1/responses'] = responsesHandler;
478
+ }
469
479
 
470
480
  return routes;
471
481
  }
@@ -8,13 +8,14 @@ const DEFAULT_OUTBOUND_INTERVAL = 5_000;
8
8
  const IDLE_THRESHOLD = 5 * 60_000;
9
9
 
10
10
  class SyncEngine {
11
- constructor({ store, hubUrl, getHeaders, logger, onInboundReceived, onAuthError }) {
11
+ constructor({ store, hubUrl, getHeaders, logger, onInboundReceived, onAuthError, onOutboundFlushed }) {
12
12
  this.store = store;
13
13
  this.hubUrl = hubUrl;
14
14
  this.logger = logger || console;
15
15
  this.getHeaders = getHeaders;
16
16
  this.onInboundReceived = onInboundReceived || null;
17
17
  this.onAuthError = onAuthError || null;
18
+ this.onOutboundFlushed = onOutboundFlushed || null;
18
19
 
19
20
  this.outbound = new OutboundSync({ store, hubUrl, getHeaders, logger });
20
21
  this.inbound = new InboundSync({ store, hubUrl, getHeaders, logger });
@@ -82,6 +83,11 @@ class SyncEngine {
82
83
  try {
83
84
  const result = await this.outbound.flush();
84
85
  if (result.sent > 0) this._lastActivity = Date.now();
86
+ if ((result.sent > 0 || result.dropped > 0) && typeof this.onOutboundFlushed === 'function') {
87
+ try { this.onOutboundFlushed(result); } catch (e) {
88
+ this.logger.warn?.('[sync] onOutboundFlushed callback failed:', e.message);
89
+ }
90
+ }
85
91
  } catch (err) {
86
92
  if (err instanceof AuthError) {
87
93
  await this._handleAuthError('outbound');
@@ -2,6 +2,7 @@
2
2
 
3
3
  const { PROXY_PROTOCOL_VERSION } = require('../mailbox/store');
4
4
  const { AuthError } = require('../lifecycle/manager');
5
+ const { isProxyTraceUploadPayloadAllowed, resolveTraceMode } = require('../trace/extractor');
5
6
  const { hubFetch } = require('../../gep/hubFetch');
6
7
 
7
8
  const MAX_BATCH = 50;
@@ -16,8 +17,31 @@ class OutboundSync {
16
17
  }
17
18
 
18
19
  async flush(channel = 'evomap-hub') {
19
- const pending = this.store.pollOutbound({ channel, limit: MAX_BATCH });
20
- if (pending.length === 0) return { sent: 0 };
20
+ const pendingBatch = this.store.pollOutbound({ channel, limit: MAX_BATCH });
21
+ if (pendingBatch.length === 0) return { sent: 0 };
22
+
23
+ let pending = pendingBatch;
24
+ const rejectedTraceUploads = [];
25
+ const traceUploadEnabled = resolveTraceMode(process.env, { store: this.store });
26
+ for (const m of pendingBatch) {
27
+ if (m.type !== 'proxy_trace') continue;
28
+ if (!traceUploadEnabled) {
29
+ rejectedTraceUploads.push({ id: m.id, error: 'proxy trace upload disabled' });
30
+ } else if (!isProxyTraceUploadPayloadAllowed(m.payload, process.env)) {
31
+ rejectedTraceUploads.push({ id: m.id, error: 'proxy trace payload rejected' });
32
+ }
33
+ }
34
+ if (rejectedTraceUploads.length > 0) {
35
+ this.store.updateStatusBatch(rejectedTraceUploads.map(m => ({
36
+ id: m.id,
37
+ status: 'rejected',
38
+ error: m.error,
39
+ })));
40
+ const rejectedIds = new Set(rejectedTraceUploads.map(m => m.id));
41
+ pending = pendingBatch.filter(m => !rejectedIds.has(m.id));
42
+ if (pending.length === 0) return { sent: 0, dropped: rejectedTraceUploads.length };
43
+ }
44
+ const dropped = rejectedTraceUploads.length;
21
45
 
22
46
  const endpoint = `${this.hubUrl}/a2a/mailbox/outbound`;
23
47
 
@@ -83,14 +107,18 @@ class OutboundSync {
83
107
  if (inboundMessages.length > 0) this.store.writeInboundBatch(inboundMessages);
84
108
 
85
109
  this.store.setState('last_sync_at', new Date().toISOString());
86
- return { sent: pending.length, synced: updates.length, responses: inboundMessages.length };
110
+ const result = { sent: pending.length, synced: updates.length, responses: inboundMessages.length };
111
+ if (dropped > 0) result.dropped = dropped;
112
+ return result;
87
113
  } catch (err) {
88
114
  if (err instanceof AuthError) throw err;
89
115
  this.logger.error(`[outbound] flush failed: ${err.message}`);
90
116
  for (const m of pending) {
91
117
  this.store.incrementRetry(m.id, err.message);
92
118
  }
93
- return { sent: 0, error: err.message };
119
+ const result = { sent: 0, error: err.message };
120
+ if (dropped > 0) result.dropped = dropped;
121
+ return result;
94
122
  }
95
123
  }
96
124
  }