@evomap/evolver 1.90.0 → 2.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -564
- package/bin/evolver-llm-proxy.js +3 -0
- package/bin/evolver-mcp.js +2 -0
- package/bin/evolver-proxy.js +3 -0
- package/bin/evolver.js +4 -0
- package/index.js +1 -3670
- package/package.json +32 -62
- package/CONTRIBUTING.md +0 -19
- package/LICENSE +0 -641
- package/README.ja-JP.md +0 -521
- package/README.ko-KR.md +0 -520
- package/README.zh-CN.md +0 -531
- package/SKILL.md +0 -365
- package/assets/cover.png +0 -0
- package/assets/gep/genes.seed.json +0 -496
- package/conformance/savings-core/constants.json +0 -30
- package/conformance/savings-core/golden-vectors.json +0 -333
- package/scripts/a2a_export.js +0 -63
- package/scripts/a2a_ingest.js +0 -79
- package/scripts/a2a_promote.js +0 -118
- package/scripts/analyze_by_skill.js +0 -121
- package/scripts/build_binaries.js +0 -479
- package/scripts/check-changelog.js +0 -166
- package/scripts/extract_log.js +0 -85
- package/scripts/generate_history.js +0 -75
- package/scripts/gep_append_event.js +0 -96
- package/scripts/gep_personality_report.js +0 -234
- package/scripts/human_report.js +0 -147
- package/scripts/recall-verify-report.js +0 -234
- package/scripts/recover_loop.js +0 -61
- package/scripts/refresh_stars_badge.js +0 -168
- package/scripts/seed-merchants.js +0 -91
- package/scripts/skill2recipes.js +0 -118
- package/scripts/suggest_version.js +0 -89
- package/scripts/validate-modules.js +0 -38
- package/scripts/validate-suite.js +0 -78
- package/src/adapters/claudeCode.js +0 -194
- package/src/adapters/codex.js +0 -216
- package/src/adapters/cursor.js +0 -91
- package/src/adapters/hookAdapter.js +0 -469
- package/src/adapters/kiro.js +0 -195
- package/src/adapters/opencode.js +0 -326
- package/src/adapters/scripts/_lockPaths.js +0 -74
- package/src/adapters/scripts/_memoryFiltering.js +0 -35
- package/src/adapters/scripts/_runtimePaths.js +0 -440
- package/src/adapters/scripts/evolver-session-end.js +0 -321
- package/src/adapters/scripts/evolver-session-start.js +0 -587
- package/src/adapters/scripts/evolver-signal-detect.js +0 -98
- package/src/adapters/scripts/evolver-task-recall.js +0 -173
- package/src/atp/atpExecute.js +0 -283
- package/src/atp/atpTaskPickup.js +0 -233
- package/src/atp/autoBuyer.js +0 -382
- package/src/atp/autoDeliver.js +0 -215
- package/src/atp/cli.js +0 -354
- package/src/atp/cliAutobuyPrompt.js +0 -154
- package/src/atp/consumerAgent.js +0 -157
- package/src/atp/defaultHandler.js +0 -69
- package/src/atp/heartbeatSignalsHandler.js +0 -254
- package/src/atp/hubClient.js +0 -317
- package/src/atp/index.js +0 -38
- package/src/atp/merchantAgent.js +0 -118
- package/src/atp/protocol.js +0 -41
- package/src/atp/questionComposer.js +0 -133
- package/src/atp/serviceHelper.js +0 -92
- package/src/canary.js +0 -13
- package/src/config.js +0 -351
- package/src/evolve/guards.js +0 -1
- package/src/evolve/pipeline/collect.js +0 -1
- package/src/evolve/pipeline/dispatch.js +0 -1
- package/src/evolve/pipeline/enrich.js +0 -1
- package/src/evolve/pipeline/hub.js +0 -1
- package/src/evolve/pipeline/select.js +0 -1
- package/src/evolve/pipeline/signals.js +0 -1
- package/src/evolve/utils.js +0 -1
- package/src/evolve.js +0 -1
- package/src/experiment/agentRunner.js +0 -229
- package/src/experiment/cli.js +0 -159
- package/src/experiment/comparison.js +0 -233
- package/src/experiment/metrics.js +0 -75
- package/src/forceUpdate.js +0 -991
- package/src/gep/a2a.js +0 -173
- package/src/gep/a2aProtocol.js +0 -1
- package/src/gep/analyzer.js +0 -35
- package/src/gep/antiAbuseTelemetry.js +0 -1
- package/src/gep/assetCallLog.js +0 -197
- package/src/gep/assetStore.js +0 -723
- package/src/gep/assets.js +0 -36
- package/src/gep/autoDistillConv.js +0 -1
- package/src/gep/autoDistillLlm.js +0 -1
- package/src/gep/bridge.js +0 -138
- package/src/gep/candidateEval.js +0 -1
- package/src/gep/candidates.js +0 -1
- package/src/gep/claimNudge.js +0 -121
- package/src/gep/cliContracts.js +0 -1190
- package/src/gep/contentHash.js +0 -1
- package/src/gep/conversationDistiller.js +0 -1
- package/src/gep/conversationSniffer.js +0 -1
- package/src/gep/crypto.js +0 -1
- package/src/gep/curriculum.js +0 -1
- package/src/gep/deviceId.js +0 -1
- package/src/gep/directoryClient.js +0 -115
- package/src/gep/envFingerprint.js +0 -1
- package/src/gep/epigenetics.js +0 -1
- package/src/gep/execBridge.js +0 -1
- package/src/gep/executionTrace.js +0 -291
- package/src/gep/explore.js +0 -1
- package/src/gep/featureFlags.js +0 -121
- package/src/gep/gitOps.js +0 -265
- package/src/gep/hash.js +0 -1
- package/src/gep/hostErrorClassifier.js +0 -34
- package/src/gep/hubFetch.js +0 -1
- package/src/gep/hubReview.js +0 -1
- package/src/gep/hubSearch.js +0 -1
- package/src/gep/hubVerify.js +0 -1
- package/src/gep/idleScheduler.js +0 -400
- package/src/gep/issueReporter.js +0 -416
- package/src/gep/learningSignals.js +0 -1
- package/src/gep/llmReview.js +0 -92
- package/src/gep/localStateAwareness.js +0 -243
- package/src/gep/mailboxTransport.js +0 -119
- package/src/gep/memoryGraph.js +0 -1
- package/src/gep/memoryGraphAdapter.js +0 -1
- package/src/gep/mutation.js +0 -1
- package/src/gep/narrativeMemory.js +0 -1
- package/src/gep/oauthLogin.js +0 -181
- package/src/gep/openPRRegistry.js +0 -1
- package/src/gep/paths.js +0 -522
- package/src/gep/personality.js +0 -1
- package/src/gep/policyCheck.js +0 -1
- package/src/gep/portable.js +0 -103
- package/src/gep/privacyClient.js +0 -235
- package/src/gep/prompt.js +0 -1
- package/src/gep/questionGenerator.js +0 -518
- package/src/gep/recallInject.js +0 -1
- package/src/gep/recallVerifier.js +0 -1
- package/src/gep/reflection.js +0 -1
- package/src/gep/sanitize.js +0 -264
- package/src/gep/savingsCore.js +0 -1
- package/src/gep/schemas/capsule.js +0 -170
- package/src/gep/schemas/gene.js +0 -154
- package/src/gep/schemas/index.js +0 -8
- package/src/gep/schemas/protocol.js +0 -51
- package/src/gep/schemas/task.js +0 -74
- package/src/gep/selector.js +0 -1
- package/src/gep/selfPR.js +0 -469
- package/src/gep/signals.js +0 -776
- package/src/gep/skill2gep.js +0 -1056
- package/src/gep/skill2gepAudit.js +0 -303
- package/src/gep/skill2recipes.js +0 -511
- package/src/gep/skillDistiller.js +0 -1
- package/src/gep/skillPublisher.js +0 -358
- package/src/gep/solidify.js +0 -1
- package/src/gep/strategy.js +0 -1
- package/src/gep/taskReceiver.js +0 -575
- package/src/gep/tokenSavings.js +0 -1
- package/src/gep/trajectoryExport.js +0 -1
- package/src/gep/validationReport.js +0 -55
- package/src/gep/validator/index.js +0 -411
- package/src/gep/validator/reporter.js +0 -210
- package/src/gep/validator/sandboxExecutor.js +0 -480
- package/src/gep/validator/stakeBootstrap.js +0 -357
- package/src/gep/workspaceKeychain.js +0 -1
- package/src/ops/cleanup.js +0 -80
- package/src/ops/commentary.js +0 -60
- package/src/ops/health_check.js +0 -104
- package/src/ops/index.js +0 -11
- package/src/ops/innovation.js +0 -67
- package/src/ops/lifecycle.js +0 -798
- package/src/ops/self_repair.js +0 -76
- package/src/ops/skills_monitor.js +0 -147
- package/src/ops/trigger.js +0 -33
- package/src/proxy/clientSettings.js +0 -405
- package/src/proxy/envelope.js +0 -59
- package/src/proxy/extensions/dmHandler.js +0 -45
- package/src/proxy/extensions/sessionHandler.js +0 -141
- package/src/proxy/extensions/skillUpdater.js +0 -64
- package/src/proxy/extensions/traceControl.js +0 -1
- package/src/proxy/index.js +0 -1395
- package/src/proxy/inject.js +0 -1
- package/src/proxy/lifecycle/manager.js +0 -1568
- package/src/proxy/mailbox/state.js +0 -207
- package/src/proxy/mailbox/store.js +0 -602
- package/src/proxy/router/cache_passthrough.js +0 -26
- package/src/proxy/router/features.js +0 -84
- package/src/proxy/router/gemini_route.js +0 -154
- package/src/proxy/router/messages_route.js +0 -535
- package/src/proxy/router/model_router.js +0 -113
- package/src/proxy/router/models_route.js +0 -52
- package/src/proxy/router/ollama_route.js +0 -103
- package/src/proxy/router/responses_route.js +0 -170
- package/src/proxy/router/vertex_route.js +0 -110
- package/src/proxy/server/http.js +0 -363
- package/src/proxy/server/routes.js +0 -558
- package/src/proxy/server/settings.js +0 -115
- package/src/proxy/sync/engine.js +0 -179
- package/src/proxy/sync/inbound.js +0 -211
- package/src/proxy/sync/outbound.js +0 -361
- package/src/proxy/task/monitor.js +0 -131
- package/src/proxy/trace/extractor.js +0 -1
- package/src/proxy/trace/usage.js +0 -1
- package/src/solo/breaker.js +0 -25
- package/src/solo/gitGuard.js +0 -65
- package/src/webui/client/clientJs/assets.js +0 -111
- package/src/webui/client/clientJs/bootstrap.js +0 -92
- package/src/webui/client/clientJs/common.js +0 -77
- package/src/webui/client/clientJs/i18n.js +0 -366
- package/src/webui/client/clientJs/index.js +0 -35
- package/src/webui/client/clientJs/interactions.js +0 -351
- package/src/webui/client/clientJs/overview.js +0 -152
- package/src/webui/client/clientJs/personality.js +0 -285
- package/src/webui/client/clientJs/pipelines.js +0 -330
- package/src/webui/client/indexHtml.js +0 -221
- package/src/webui/client/static.js +0 -23
- package/src/webui/client/stylesCss.js +0 -639
- package/src/webui/client/vendor/README.md +0 -15
- package/src/webui/client/vendor/echarts.min.js +0 -45
- package/src/webui/index.js +0 -14
- package/src/webui/observer/assets.js +0 -146
- package/src/webui/observer/index.js +0 -37
- package/src/webui/observer/interactions.js +0 -127
- package/src/webui/observer/jsonl.js +0 -75
- package/src/webui/observer/paths.js +0 -46
- package/src/webui/observer/personality.js +0 -43
- package/src/webui/observer/pipelineEvents.js +0 -58
- package/src/webui/observer/redact.js +0 -63
- package/src/webui/observer/runs.js +0 -356
- package/src/webui/observer/safety.js +0 -57
- package/src/webui/observer/skills.js +0 -70
- package/src/webui/observer/status.js +0 -71
- package/src/webui/server/http.js +0 -138
- package/src/webui/server/routes.js +0 -41
package/src/gep/strategy.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var _0x6f0d6b=_0x4f1c;(function(_0x24e7a1,_0x4659b2){var _0x1cadea=_0x4f1c,_0x46aab1=_0x24e7a1();while(!![]){try{var _0x5b2897=-parseInt(_0x1cadea(0xb4,'\x66\x48\x7a\x49'))/(0x12a6+-0x152*0x1+0x1153*-0x1)*(-parseInt(_0x1cadea(0xae,'\x67\x6e\x6c\x2a'))/(-0x25c1+-0xb*0x1bc+0x38d7))+parseInt(_0x1cadea(0xe5,'\x4c\x50\x79\x59'))/(-0x11*0x1be+0x1f*-0x94+0x2f8d)*(-parseInt(_0x1cadea(0xb7,'\x35\x5a\x5e\x35'))/(0x47f*0x1+0xb51*0x3+-0x2*0x1337))+parseInt(_0x1cadea(0x10f,'\x72\x25\x39\x69'))/(-0x6ad+0xf24+-0x872)*(-parseInt(_0x1cadea(0x188,'\x53\x38\x37\x41'))/(-0x1f68+-0x143*0x4+0x247a))+-parseInt(_0x1cadea(0x10a,'\x59\x37\x66\x7a'))/(0x1*-0xcdc+0xfa3*0x1+-0x40*0xb)+-parseInt(_0x1cadea(0xea,'\x6d\x53\x71\x52'))/(0xad*-0x29+0x1*0x4a5+0x1718)+parseInt(_0x1cadea(0x144,'\x79\x54\x51\x4f'))/(-0x1146+-0x14f7+-0x8e*-0x45)+-parseInt(_0x1cadea(0xa4,'\x53\x38\x37\x41'))/(-0x2d*0x3b+-0x6a*-0x22+0x3ab*-0x1)*(-parseInt(_0x1cadea(0xeb,'\x50\x51\x30\x29'))/(0x1*0x1b88+-0x14*0x1c1+-0x1*-0x797));if(_0x5b2897===_0x4659b2)break;else _0x46aab1['push'](_0x46aab1['shift']());}catch(_0x43ff07){_0x46aab1['push'](_0x46aab1['shift']());}}}(_0x1d36,-0x11af14+-0xe1c7a+-0x32788*-0xe));var _0x395ce2=(function(){var _0xf0fdab=!![];return function(_0x41ea67,_0x5768cd){var _0x397115=_0x4f1c,_0x3fa3b5={};_0x3fa3b5[_0x397115(0xd6,'\x77\x4b\x44\x70')]=function(_0x3c38d1,_0x478fd1){return _0x3c38d1===_0x478fd1;},_0x3fa3b5[_0x397115(0xac,'\x36\x49\x6e\x25')]='\x50\x4d\x71\x4a\x4a';var _0x143e39=_0x3fa3b5,_0x145dfd=_0xf0fdab?function(){var _0x33da00=_0x397115;if(_0x5768cd){if(_0x143e39[_0x33da00(0xaf,'\x5d\x51\x75\x59')](_0x143e39[_0x33da00(0xfb,'\x67\x4a\x65\x36')],_0x33da00(0xef,'\x50\x57\x41\x43'))){var _0x255c64=_0x5eb9e3[_0x33da00(0xd3,'\x51\x6a\x61\x38')](_0x250658[_0x33da00(0xd5,'\x52\x64\x73\x50')+'\x53\x79\x6e\x63'](_0x511810[_0x4774cc],_0x33da00(0x182,'\x39\x38\x51\x5b')));return _0x255c64&&_0x39d4c8[_0x33da00(0xe2,'\x50\x57\x41\x43')](_0x255c64[_0x33da00(0x172,'\x6c\x59\x65\x50')+'\x6e\x74'])?_0x255c64[_0x33da00(0xdf,'\x59\x37\x66\x7a')+'\x6e\x74']:0x1408+0xcbb*-0x1+0x26f*-0x3;}else{var _0x5425c5=_0x5768cd['\x61\x70\x70\x6c\x79'](_0x41ea67,arguments);return _0x5768cd=null,_0x5425c5;}}}:function(){};return _0xf0fdab=![],_0x145dfd;};}()),_0x2f2e6d=_0x395ce2(this,function(){var _0x5e436e=_0x4f1c,_0x29d3e8={};_0x29d3e8[_0x5e436e(0xbc,'\x50\x51\x30\x29')]=_0x5e436e(0xa1,'\x66\x48\x7a\x49')+_0x5e436e(0xcd,'\x23\x33\x4f\x68');var _0x14a347=_0x29d3e8;return _0x2f2e6d[_0x5e436e(0xfe,'\x5a\x61\x6b\x30')]()[_0x5e436e(0x10c,'\x7a\x23\x50\x4e')](_0x14a347[_0x5e436e(0x169,'\x67\x6e\x6c\x2a')])[_0x5e436e(0xda,'\x28\x64\x47\x5a')]()[_0x5e436e(0xd9,'\x59\x37\x66\x7a')+_0x5e436e(0x17e,'\x4c\x50\x79\x59')](_0x2f2e6d)[_0x5e436e(0x122,'\x67\x4a\x65\x36')](_0x14a347[_0x5e436e(0x11d,'\x67\x38\x5b\x62')]);});_0x2f2e6d();var _0x163ae0=require('\x66\x73'),_0x5bb7db=require(_0x6f0d6b(0xf0,'\x23\x33\x4f\x68')),_0x1bc2d8={};_0x1bc2d8[_0x6f0d6b(0xf9,'\x7a\x23\x50\x4e')]=0.2,_0x1bc2d8[_0x6f0d6b(0x112,'\x25\x67\x25\x58')]=0.2,_0x1bc2d8[_0x6f0d6b(0x106,'\x59\x37\x66\x7a')]=0.5,_0x1bc2d8[_0x6f0d6b(0x110,'\x67\x38\x5b\x62')]=0.1,_0x1bc2d8[_0x6f0d6b(0x18b,'\x51\x6a\x61\x38')+'\x6f\x70\x54\x68\x72\x65\x73\x68'+'\x6f\x6c\x64']=0.5,_0x1bc2d8[_0x6f0d6b(0x15c,'\x77\x4b\x44\x70')]=_0x6f0d6b(0xdb,'\x44\x76\x28\x38'),_0x1bc2d8['\x64\x65\x73\x63\x72\x69\x70\x74'+_0x6f0d6b(0x17f,'\x50\x57\x41\x43')]=_0x6f0d6b(0xa2,'\x64\x56\x24\x4f')+'\x70\x65\x72\x61\x74\x69\x6f\x6e'+_0x6f0d6b(0x14a,'\x72\x25\x39\x69')+_0x6f0d6b(0xa8,'\x5d\x51\x75\x59')+_0x6f0d6b(0xc1,'\x67\x6e\x6c\x2a')+_0x6f0d6b(0x163,'\x5d\x51\x75\x59');var _0x180d67={};function _0x1d36(){var _0x217dc6=['\x74\x6d\x6b\x39\x70\x57','\x62\x43\x6f\x69\x57\x36\x57','\x64\x53\x6b\x4e\x57\x34\x74\x64\x4d\x38\x6f\x59\x46\x59\x7a\x4d','\x57\x51\x43\x74\x6d\x30\x5a\x63\x4e\x53\x6f\x69\x79\x43\x6f\x6c','\x57\x36\x52\x64\x50\x6d\x6b\x4c\x57\x4f\x34','\x57\x51\x4b\x44\x57\x35\x4b','\x57\x34\x6c\x64\x4f\x43\x6b\x41\x57\x51\x53\x61\x44\x6d\x6b\x39\x57\x51\x30','\x74\x4d\x75\x54\x41\x6d\x6f\x5a\x57\x35\x6a\x65\x57\x52\x43','\x57\x37\x56\x64\x54\x43\x6b\x57\x57\x35\x78\x64\x55\x71\x74\x64\x51\x4b\x75','\x57\x51\x4f\x79\x6c\x4b\x64\x63\x4d\x53\x6f\x61\x7a\x43\x6f\x41','\x65\x53\x6b\x54\x65\x38\x6f\x55\x57\x4f\x43\x6d\x68\x33\x76\x6a\x57\x50\x4b\x30\x72\x61','\x79\x43\x6f\x61\x61\x57','\x74\x65\x39\x5a\x6e\x4a\x78\x64\x50\x59\x74\x63\x48\x57','\x68\x38\x6b\x37\x57\x35\x46\x64\x4c\x53\x6f\x2b\x74\x47\x76\x38','\x77\x65\x65\x48\x43\x6d\x6f\x4e','\x57\x52\x2f\x63\x56\x68\x6a\x7a\x57\x37\x43','\x57\x37\x69\x2f\x57\x36\x52\x64\x47\x53\x6b\x51\x6d\x43\x6b\x56','\x62\x4b\x47\x30\x6c\x77\x4b','\x75\x48\x57\x5a\x57\x50\x47\x52\x62\x43\x6f\x64\x57\x35\x71','\x57\x4f\x70\x63\x4b\x53\x6f\x72\x75\x4a\x56\x64\x54\x64\x6a\x67','\x6b\x38\x6b\x75\x57\x35\x38','\x66\x43\x6b\x4f\x66\x38\x6f\x52\x57\x4f\x75\x6b\x45\x57\x54\x52\x57\x52\x71\x46\x76\x38\x6f\x57\x57\x52\x47','\x57\x50\x71\x71\x57\x35\x30','\x6c\x43\x6f\x39\x57\x4f\x6c\x63\x4d\x47\x33\x64\x4a\x4b\x79','\x57\x35\x6c\x63\x4e\x75\x64\x63\x48\x76\x64\x63\x54\x73\x30\x4c','\x6c\x53\x6f\x6c\x66\x43\x6b\x35\x44\x77\x70\x63\x4f\x38\x6f\x51','\x57\x37\x6d\x38\x44\x47','\x78\x38\x6b\x47\x66\x6d\x6b\x38\x77\x61','\x71\x43\x6f\x2f\x76\x38\x6b\x58\x57\x34\x57\x76\x70\x30\x38','\x43\x53\x6f\x4b\x57\x37\x53\x34\x57\x52\x34','\x57\x34\x2f\x63\x4d\x4a\x4c\x72\x57\x37\x72\x2b\x57\x35\x43','\x77\x73\x2f\x63\x52\x68\x5a\x63\x49\x74\x76\x4b\x57\x36\x34','\x72\x6d\x6f\x76\x68\x38\x6b\x4b\x76\x47','\x57\x35\x52\x63\x55\x4e\x30\x47\x79\x61','\x41\x4c\x56\x64\x4f\x38\x6f\x58\x6d\x43\x6b\x55','\x57\x4f\x5a\x63\x4d\x38\x6f\x78\x77\x49\x4a\x63\x55\x68\x6d\x6a','\x42\x66\x64\x64\x54\x53\x6f\x4a\x6b\x38\x6f\x59\x57\x36\x48\x55','\x74\x61\x61\x4f\x57\x4f\x79\x35\x76\x53\x6b\x52\x57\x50\x65\x66\x44\x49\x4f','\x63\x77\x4a\x63\x50\x31\x70\x63\x48\x58\x79','\x61\x6d\x6b\x78\x6d\x66\x4e\x63\x4b\x62\x69\x47\x75\x57','\x6c\x71\x6c\x63\x54\x43\x6b\x57\x43\x6d\x6b\x34\x57\x34\x6e\x7a\x57\x50\x61\x4b\x57\x4f\x30\x75','\x61\x31\x4f\x71\x69\x77\x54\x77\x74\x4c\x75','\x73\x53\x6b\x33\x6c\x6d\x6b\x44\x46\x43\x6f\x55\x6e\x38\x6f\x52','\x57\x52\x78\x64\x56\x53\x6b\x76\x57\x35\x75\x77\x57\x52\x2f\x64\x51\x30\x47','\x57\x37\x33\x63\x4f\x33\x33\x63\x47\x77\x65','\x57\x36\x61\x34\x57\x34\x70\x63\x4b\x38\x6f\x6b','\x67\x4e\x37\x63\x50\x31\x78\x63\x4a\x61\x35\x6a\x57\x37\x79','\x64\x43\x6b\x49\x6c\x43\x6b\x30\x6f\x53\x6f\x31\x57\x50\x4a\x63\x55\x57','\x64\x43\x6f\x66\x57\x36\x56\x63\x4e\x53\x6f\x53\x57\x4f\x35\x61','\x57\x36\x52\x63\x49\x53\x6f\x72\x66\x72\x47\x32\x57\x34\x7a\x31','\x68\x33\x6c\x63\x4f\x66\x6c\x64\x47\x61\x54\x79\x57\x34\x71','\x57\x52\x37\x63\x4c\x43\x6b\x6f\x57\x51\x76\x45','\x57\x50\x56\x63\x51\x6d\x6b\x42\x57\x50\x76\x41\x77\x74\x35\x35','\x72\x43\x6b\x71\x70\x76\x4a\x63\x50\x47\x38\x5a\x65\x47','\x73\x53\x6f\x79\x57\x35\x6d\x30\x57\x51\x33\x64\x53\x6d\x6f\x4e\x71\x61','\x57\x37\x4e\x64\x51\x53\x6b\x65\x57\x51\x75\x46\x7a\x38\x6b\x66\x57\x51\x53','\x57\x51\x33\x63\x47\x64\x44\x45\x57\x4f\x61','\x57\x34\x42\x63\x48\x6d\x6b\x45\x57\x4f\x6e\x39\x57\x52\x61\x61\x57\x37\x6d','\x70\x6d\x6b\x5a\x57\x51\x30\x42\x64\x73\x57','\x57\x4f\x54\x2b\x67\x47\x43\x5a\x78\x43\x6b\x59\x57\x37\x38','\x57\x34\x2f\x63\x49\x73\x58\x61','\x73\x77\x65\x35\x41\x38\x6f\x34\x57\x50\x4f\x78\x57\x51\x4f','\x57\x50\x4b\x67\x75\x67\x75','\x57\x34\x42\x64\x4e\x43\x6b\x72\x57\x35\x33\x64\x4d\x47','\x66\x43\x6b\x53\x65\x38\x6f\x4b\x57\x4f\x61\x70\x46\x57\x31\x4c\x57\x4f\x6d\x76\x45\x43\x6f\x34\x57\x50\x38','\x57\x4f\x5a\x64\x53\x43\x6f\x34\x57\x51\x54\x4a','\x57\x52\x37\x64\x55\x38\x6f\x66\x57\x51\x4c\x68\x41\x43\x6f\x6b','\x57\x52\x78\x64\x4e\x6d\x6f\x67\x57\x52\x6a\x75\x41\x43\x6f\x43\x57\x52\x65','\x68\x43\x6b\x2f\x57\x35\x78\x64\x48\x6d\x6f\x59','\x57\x51\x4b\x46\x57\x34\x2f\x64\x53\x6d\x6b\x65\x68\x43\x6b\x45\x76\x71','\x57\x34\x4e\x63\x4a\x74\x4c\x62\x57\x35\x44\x57\x57\x34\x69\x6b','\x7a\x4e\x4b\x5a\x44\x43\x6f\x76','\x57\x35\x37\x63\x4d\x67\x4e\x63\x47\x65\x56\x63\x51\x64\x61\x56','\x57\x36\x46\x64\x51\x53\x6b\x67\x57\x37\x52\x64\x48\x71','\x57\x36\x33\x64\x53\x57\x39\x6e\x41\x30\x72\x30\x77\x57','\x57\x52\x6d\x45\x57\x37\x70\x64\x53\x53\x6b\x78\x61\x6d\x6b\x7a\x78\x61','\x57\x4f\x31\x6c\x63\x63\x43\x45\x57\x4f\x31\x2b\x78\x47','\x77\x53\x6f\x78\x6b\x6d\x6b\x44\x6b\x6d\x6f\x6f\x57\x4f\x38','\x77\x43\x6f\x66\x57\x35\x65\x48\x57\x52\x42\x64\x51\x53\x6f\x52','\x57\x51\x69\x6a\x57\x35\x64\x64\x51\x53\x6b\x6b\x67\x38\x6b\x73','\x57\x36\x33\x64\x50\x71\x6a\x73\x45\x4e\x76\x55\x74\x71','\x57\x50\x65\x59\x57\x35\x42\x63\x4a\x67\x71','\x6f\x38\x6b\x49\x57\x51\x53\x77\x62\x73\x56\x63\x48\x53\x6b\x4c','\x62\x43\x6f\x75\x57\x34\x74\x63\x4d\x38\x6f\x52\x57\x50\x31\x72\x57\x52\x61','\x70\x53\x6b\x72\x57\x35\x31\x6c\x57\x50\x4b','\x57\x4f\x38\x49\x57\x35\x70\x63\x54\x59\x46\x63\x53\x38\x6b\x49\x57\x4f\x38','\x61\x43\x6b\x68\x6f\x38\x6b\x58\x78\x43\x6f\x6a\x70\x47','\x74\x43\x6f\x46\x73\x43\x6b\x6f\x57\x37\x69','\x57\x34\x4f\x44\x64\x73\x79\x49','\x63\x43\x6f\x2b\x57\x34\x31\x64\x57\x35\x31\x38','\x6b\x38\x6f\x47\x57\x4f\x70\x64\x4a\x61','\x7a\x43\x6f\x47\x57\x36\x4c\x67\x78\x78\x78\x64\x4a\x38\x6f\x32\x57\x36\x4e\x63\x4b\x4b\x74\x63\x48\x6d\x6b\x4e\x7a\x71','\x57\x50\x62\x6a\x57\x34\x68\x63\x4f\x43\x6f\x65\x6b\x53\x6f\x6f\x64\x47','\x57\x52\x33\x64\x52\x43\x6f\x5a\x69\x71\x4f','\x57\x52\x4e\x64\x51\x38\x6b\x7a\x57\x35\x47\x6e\x57\x51\x4f','\x57\x50\x43\x44\x57\x35\x56\x63\x56\x31\x61','\x6c\x53\x6f\x4d\x57\x35\x64\x63\x48\x38\x6f\x5a','\x57\x34\x6a\x6f\x64\x59\x4b','\x57\x34\x72\x37\x6e\x59\x70\x64\x52\x47','\x71\x38\x6f\x52\x6c\x43\x6b\x4d\x6f\x38\x6f\x4c\x57\x50\x4e\x64\x55\x47','\x57\x37\x65\x63\x57\x36\x42\x63\x4c\x71','\x57\x35\x46\x63\x50\x6d\x6b\x69\x57\x51\x38\x70\x41\x43\x6b\x64\x57\x51\x43','\x57\x35\x68\x63\x4d\x6d\x6b\x34\x57\x51\x44\x4c','\x57\x37\x52\x64\x53\x59\x31\x72\x41\x66\x6e\x5a\x45\x57','\x6d\x43\x6f\x34\x57\x4f\x65','\x70\x53\x6b\x55\x57\x35\x74\x63\x55\x43\x6b\x47','\x75\x4d\x75\x34\x75\x43\x6b\x51\x57\x35\x75','\x57\x35\x37\x63\x50\x4c\x54\x31\x44\x43\x6f\x36\x65\x4b\x43','\x57\x37\x44\x62\x67\x6d\x6f\x67\x73\x61','\x76\x43\x6f\x79\x57\x35\x6a\x4a\x57\x37\x4e\x64\x4e\x43\x6f\x32\x78\x47','\x57\x52\x31\x70\x66\x59\x4b\x43\x57\x50\x48\x2b','\x78\x4c\x76\x42\x45\x76\x69\x72\x57\x52\x64\x64\x48\x57','\x57\x34\x43\x64\x57\x37\x4a\x63\x4d\x53\x6f\x6a\x63\x6d\x6f\x69','\x57\x50\x69\x67\x57\x36\x70\x64\x4b\x6d\x6b\x32','\x57\x35\x6d\x4b\x64\x63\x34\x53\x43\x43\x6b\x6f\x57\x35\x65','\x6f\x6d\x6b\x6e\x57\x34\x78\x63\x52\x53\x6b\x4e\x77\x6d\x6b\x4a\x6e\x47','\x57\x50\x46\x64\x48\x64\x70\x63\x54\x61','\x57\x50\x70\x63\x56\x43\x6b\x37\x57\x51\x35\x43\x74\x49\x58\x4c','\x67\x65\x57\x4d\x6b\x77\x58\x6e\x44\x4c\x38','\x57\x36\x46\x64\x53\x47\x39\x72\x41\x76\x44\x31\x78\x71','\x69\x6d\x6b\x42\x6d\x76\x6c\x63\x51\x61\x71\x36\x75\x71','\x57\x4f\x68\x63\x51\x68\x62\x76\x57\x34\x52\x64\x4e\x38\x6b\x37\x6b\x61','\x57\x34\x53\x44\x64\x4a\x53\x74','\x57\x52\x46\x63\x50\x66\x71\x67\x6b\x47\x61\x34\x79\x71\x42\x64\x48\x43\x6b\x4e\x6b\x6d\x6f\x38','\x7a\x58\x56\x63\x50\x53\x6f\x65\x6b\x38\x6f\x34\x57\x4f\x72\x4b','\x75\x32\x75\x50\x71\x53\x6b\x47\x57\x34\x38','\x57\x51\x70\x64\x50\x53\x6b\x4d\x57\x37\x75\x38','\x57\x52\x42\x64\x4a\x38\x6f\x56\x67\x57\x57\x50\x57\x34\x34','\x41\x38\x6f\x41\x57\x51\x2f\x63\x53\x63\x70\x64\x55\x4d\x30','\x57\x52\x37\x64\x55\x38\x6f\x66\x57\x51\x50\x41\x42\x38\x6f\x43','\x57\x50\x69\x73\x57\x35\x46\x63\x54\x75\x50\x54\x62\x43\x6b\x2f','\x57\x4f\x43\x33\x57\x4f\x4e\x64\x56\x47\x5a\x63\x54\x43\x6b\x37\x57\x50\x38','\x6b\x38\x6b\x66\x57\x35\x6e\x64\x57\x4f\x52\x64\x53\x53\x6b\x43\x57\x37\x4f','\x57\x37\x78\x63\x47\x43\x6b\x4b\x57\x36\x66\x61\x57\x34\x43\x65\x57\x52\x30','\x63\x76\x31\x38\x57\x35\x48\x48\x71\x6d\x6b\x42','\x6f\x6d\x6b\x63\x57\x34\x50\x6f\x57\x4f\x52\x64\x55\x47','\x57\x34\x70\x63\x4d\x75\x42\x63\x48\x61','\x6e\x53\x6b\x5a\x57\x52\x6d\x45\x62\x49\x68\x63\x4d\x43\x6b\x4b','\x57\x37\x74\x64\x55\x6d\x6b\x59\x57\x37\x70\x64\x53\x57','\x57\x36\x70\x64\x53\x6d\x6b\x70\x57\x51\x53\x6e\x46\x38\x6f\x72\x57\x50\x65','\x57\x35\x34\x56\x65\x73\x69\x4f\x45\x43\x6b\x6b\x57\x34\x61','\x74\x76\x39\x38\x6d\x59\x74\x64\x4a\x73\x37\x63\x47\x71','\x57\x50\x4e\x64\x47\x6d\x6f\x2b\x57\x51\x6e\x7a','\x57\x36\x56\x64\x56\x38\x6b\x70\x57\x35\x4e\x64\x56\x61\x4a\x64\x51\x68\x69','\x57\x50\x68\x63\x52\x53\x6b\x47\x57\x50\x66\x44\x73\x63\x72\x2b','\x73\x66\x58\x64\x68\x6d\x6b\x54\x64\x76\x5a\x64\x4b\x47','\x77\x53\x6b\x5a\x69\x43\x6b\x79\x76\x43\x6f\x4b\x70\x53\x6f\x51','\x57\x34\x50\x39\x69\x38\x6f\x62\x74\x65\x38','\x68\x47\x61\x49\x42\x67\x64\x63\x4c\x4e\x5a\x64\x47\x49\x6e\x55\x57\x52\x48\x31\x69\x67\x34','\x57\x34\x5a\x63\x52\x4b\x34\x4d\x43\x57','\x46\x68\x72\x4a\x70\x72\x75','\x41\x4b\x46\x64\x53\x38\x6f\x4e','\x57\x4f\x6c\x63\x52\x59\x50\x4b\x57\x51\x66\x66\x57\x37\x43\x69','\x57\x37\x4b\x4f\x45\x38\x6b\x54\x41\x31\x4a\x64\x53\x6d\x6f\x43','\x57\x35\x46\x63\x4a\x74\x7a\x63\x57\x36\x76\x58','\x64\x38\x6f\x4a\x70\x6d\x6b\x57\x69\x47','\x57\x36\x4e\x64\x49\x43\x6b\x34\x57\x51\x65\x34','\x62\x53\x6b\x70\x6e\x30\x5a\x63\x51\x49\x69\x37\x72\x57','\x57\x51\x79\x74\x57\x34\x4e\x64\x51\x53\x6b\x6d\x65\x38\x6b\x73','\x57\x34\x4b\x45\x57\x37\x68\x63\x48\x71','\x74\x43\x6f\x57\x71\x43\x6b\x34\x57\x34\x31\x33\x6b\x47','\x41\x75\x44\x68\x65\x5a\x53','\x57\x51\x4a\x63\x56\x49\x58\x48\x57\x52\x75\x6d\x57\x35\x34\x7a','\x6a\x38\x6b\x63\x57\x35\x44\x61\x57\x50\x68\x64\x53\x71','\x64\x38\x6f\x4f\x57\x34\x58\x6b','\x73\x38\x6b\x4d\x6b\x6d\x6b\x79\x78\x38\x6f\x2b\x44\x53\x6f\x39','\x57\x35\x61\x45\x57\x37\x4a\x63\x4c\x38\x6f\x70\x63\x61','\x69\x38\x6b\x69\x57\x35\x71','\x75\x53\x6f\x6a\x57\x34\x61\x4b\x57\x52\x46\x63\x55\x6d\x6f\x52\x76\x47','\x7a\x67\x65\x35\x79\x38\x6f\x4b\x57\x35\x4b\x6e\x57\x52\x61','\x57\x37\x5a\x64\x55\x72\x66\x46\x44\x4b\x71\x53\x76\x57','\x70\x43\x6b\x38\x57\x52\x65\x71\x68\x49\x70\x63\x49\x6d\x6b\x4c','\x73\x4d\x38\x35\x7a\x6d\x6f\x4b\x57\x36\x47\x78\x57\x51\x4f','\x75\x53\x6f\x65\x57\x35\x75\x4c\x57\x52\x64\x64\x54\x53\x6f\x50\x64\x47','\x57\x4f\x68\x64\x48\x63\x56\x63\x53\x6d\x6b\x56\x78\x43\x6b\x4c\x6a\x71','\x6f\x65\x57\x4d\x6b\x77\x58\x6e\x67\x4e\x38','\x57\x37\x52\x64\x50\x53\x6b\x53\x57\x35\x52\x64\x56\x48\x4e\x64\x53\x31\x34','\x57\x34\x74\x64\x4c\x64\x6e\x77\x77\x57','\x57\x35\x33\x64\x48\x75\x50\x4a\x57\x35\x5a\x64\x55\x53\x6b\x51\x61\x71','\x41\x38\x6f\x6c\x68\x53\x6b\x79\x79\x33\x52\x63\x52\x53\x6b\x35','\x57\x37\x30\x2b\x44\x53\x6f\x2b\x46\x66\x64\x64\x52\x53\x6f\x41','\x57\x37\x64\x63\x4e\x53\x6b\x53\x71\x4c\x62\x54\x57\x50\x4c\x65\x6d\x32\x72\x45\x57\x51\x5a\x63\x4b\x57','\x57\x52\x4a\x64\x55\x53\x6f\x77\x57\x51\x50\x71\x78\x53\x6f\x77\x57\x36\x4f','\x57\x51\x6e\x66\x66\x49\x6e\x71\x57\x4f\x48\x30\x73\x61','\x6f\x6d\x6b\x79\x76\x6d\x6f\x4d\x6f\x32\x33\x63\x49\x6d\x6b\x4d\x57\x4f\x52\x63\x4b\x38\x6b\x6f','\x57\x50\x69\x70\x57\x37\x4a\x63\x51\x65\x35\x54\x63\x61','\x57\x37\x6c\x63\x4e\x75\x64\x63\x48\x76\x64\x63\x54\x73\x30\x4c','\x43\x6d\x6b\x30\x57\x52\x42\x63\x47\x61\x4e\x64\x47\x31\x66\x34','\x57\x36\x78\x64\x54\x43\x6f\x4a\x57\x35\x4a\x64\x52\x48\x52\x63\x55\x4c\x43','\x62\x53\x6f\x36\x6e\x38\x6b\x4d\x6f\x53\x6f\x5a\x57\x52\x4e\x63\x4f\x57','\x57\x35\x70\x63\x56\x30\x47\x38\x45\x38\x6f\x37\x63\x75\x57','\x57\x52\x70\x63\x51\x5a\x57\x4d\x57\x37\x47\x4f\x57\x34\x75\x76','\x57\x37\x70\x63\x4e\x53\x6b\x63\x57\x36\x62\x67\x57\x34\x53\x6e\x57\x52\x61','\x61\x30\x43\x59\x6c\x78\x31\x57\x78\x61','\x57\x51\x6c\x63\x55\x64\x44\x4b\x57\x51\x30\x72\x57\x34\x30\x74','\x57\x35\x6c\x63\x4b\x30\x42\x63\x4d\x4c\x68\x63\x53\x48\x43\x5a','\x70\x38\x6f\x5a\x57\x34\x58\x38\x57\x34\x30','\x78\x43\x6b\x2b\x70\x53\x6b\x43\x66\x71','\x57\x37\x79\x45\x46\x43\x6b\x69\x72\x57','\x44\x4d\x4f\x47\x7a\x6d\x6b\x75','\x57\x51\x78\x64\x4c\x62\x64\x63\x4d\x6d\x6b\x51','\x57\x37\x42\x64\x56\x38\x6b\x54','\x57\x52\x54\x6c\x65\x63\x6d','\x57\x52\x78\x63\x51\x59\x54\x4e\x57\x52\x71\x74\x57\x34\x65','\x79\x43\x6f\x43\x6d\x38\x6b\x2b\x43\x68\x6c\x63\x55\x6d\x6b\x49','\x71\x67\x65\x50\x79\x53\x6f\x54','\x57\x34\x74\x63\x4e\x30\x52\x63\x49\x65\x68\x63\x55\x67\x4b\x35','\x6f\x43\x6f\x68\x57\x34\x4c\x42\x57\x4f\x6c\x64\x51\x53\x6b\x72\x57\x36\x53','\x68\x4c\x66\x4f\x57\x35\x76\x59\x72\x43\x6b\x79\x57\x4f\x4b','\x57\x4f\x33\x63\x49\x74\x6e\x63\x57\x50\x53','\x57\x51\x2f\x63\x4c\x6d\x6f\x70\x76\x49\x37\x64\x4f\x74\x6a\x69','\x6a\x53\x6b\x33\x57\x51\x38\x45\x61\x74\x61','\x42\x6d\x6f\x66\x63\x38\x6b\x2f\x44\x4d\x37\x64\x50\x71','\x44\x65\x42\x64\x51\x43\x6f\x53','\x46\x30\x69\x34\x79\x6d\x6f\x65','\x41\x38\x6f\x41\x63\x6d\x6b\x36\x44\x32\x70\x63\x4f\x53\x6b\x4c','\x57\x36\x37\x63\x49\x38\x6b\x4d\x57\x36\x4c\x44\x57\x35\x57\x59\x57\x52\x43','\x57\x4f\x71\x4d\x57\x50\x2f\x64\x53\x47\x30','\x6b\x4c\x4a\x63\x4e\x31\x2f\x63\x4a\x61','\x57\x50\x37\x64\x54\x6d\x6f\x36\x57\x4f\x54\x68','\x71\x43\x6f\x4f\x73\x53\x6b\x58\x57\x34\x62\x6d\x6a\x76\x71','\x57\x51\x7a\x66\x63\x47','\x62\x53\x6b\x37\x57\x35\x37\x64\x48\x61','\x64\x67\x71\x4b\x42\x53\x6f\x56\x57\x35\x62\x65\x57\x52\x38','\x57\x50\x46\x63\x48\x75\x52\x63\x4e\x47\x78\x63\x50\x73\x30\x34','\x57\x36\x56\x64\x56\x58\x76\x78\x43\x66\x48\x59\x66\x47','\x63\x31\x57\x49\x6a\x57','\x57\x50\x47\x66\x57\x35\x52\x63\x54\x4c\x4c\x70\x68\x53\x6b\x56','\x57\x52\x78\x64\x56\x43\x6b\x72','\x57\x37\x33\x63\x47\x73\x50\x77\x57\x36\x75\x35\x57\x34\x30\x77','\x64\x38\x6f\x78\x57\x4f\x68\x63\x47\x58\x30','\x67\x43\x6b\x44\x57\x34\x78\x63\x51\x38\x6b\x51','\x76\x53\x6b\x6e\x70\x53\x6b\x6e\x77\x53\x6f\x5a\x70\x53\x6b\x47','\x67\x65\x57\x33\x6c\x65\x6e\x77\x76\x4c\x75','\x57\x50\x33\x63\x4b\x4e\x6e\x76\x57\x35\x46\x64\x4d\x61','\x57\x4f\x4e\x64\x4c\x49\x4a\x63\x56\x57','\x57\x34\x42\x63\x48\x53\x6b\x35\x57\x35\x62\x71','\x76\x38\x6b\x49\x67\x43\x6b\x72\x73\x43\x6f\x49\x6b\x6d\x6f\x4d','\x41\x6d\x6f\x7a\x6a\x53\x6b\x4a\x44\x61'];_0x1d36=function(){return _0x217dc6;};return _0x1d36();}_0x180d67[_0x6f0d6b(0x116,'\x57\x66\x44\x6f')]=0.05,_0x180d67[_0x6f0d6b(0x112,'\x25\x67\x25\x58')]=0.1,_0x180d67['\x69\x6e\x6e\x6f\x76\x61\x74\x65']=0.8,_0x180d67[_0x6f0d6b(0x110,'\x67\x38\x5b\x62')]=0.05,_0x180d67[_0x6f0d6b(0x105,'\x23\x6c\x37\x4a')+_0x6f0d6b(0xc3,'\x62\x39\x76\x26')+_0x6f0d6b(0xa9,'\x7a\x55\x6e\x4d')]=0.3,_0x180d67[_0x6f0d6b(0xee,'\x6c\x59\x65\x50')]=_0x6f0d6b(0xc6,'\x48\x49\x69\x4b')+_0x6f0d6b(0x120,'\x24\x47\x49\x62'),_0x180d67[_0x6f0d6b(0x15f,'\x66\x48\x7a\x49')+'\x69\x6f\x6e']='\x53\x79\x73\x74\x65\x6d\x20\x69'+_0x6f0d6b(0x15e,'\x57\x66\x44\x6f')+_0x6f0d6b(0xc0,'\x79\x54\x51\x4f')+_0x6f0d6b(0x14b,'\x39\x38\x51\x5b')+'\x65\x61\x74\x75\x72\x65\x73\x20'+_0x6f0d6b(0x143,'\x7a\x55\x6e\x4d')+_0x6f0d6b(0x11c,'\x54\x39\x4c\x44')+'\x2e';var _0x57e731={};_0x57e731[_0x6f0d6b(0x135,'\x50\x51\x30\x29')]=0.4,_0x57e731[_0x6f0d6b(0x14d,'\x56\x63\x2a\x73')]=0.35,_0x57e731[_0x6f0d6b(0x111,'\x6c\x59\x65\x50')]=0.2,_0x57e731['\x65\x78\x70\x6c\x6f\x72\x65']=0.05,_0x57e731[_0x6f0d6b(0x184,'\x48\x49\x69\x4b')+_0x6f0d6b(0x15b,'\x5d\x51\x75\x59')+_0x6f0d6b(0xf7,'\x72\x25\x39\x69')]=0.7,_0x57e731['\x6c\x61\x62\x65\x6c']=_0x6f0d6b(0x138,'\x77\x4b\x44\x70')+'\x67',_0x57e731['\x64\x65\x73\x63\x72\x69\x70\x74'+_0x6f0d6b(0x136,'\x57\x66\x44\x6f')]=_0x6f0d6b(0xb2,'\x64\x56\x24\x4f')+_0x6f0d6b(0xfa,'\x56\x63\x2a\x73')+_0x6f0d6b(0xe4,'\x25\x67\x25\x58')+'\x73\x20\x6f\x6e\x20\x73\x74\x61'+_0x6f0d6b(0x161,'\x64\x56\x24\x4f')+'\x6e\x64\x20\x72\x6f\x62\x75\x73'+_0x6f0d6b(0xb1,'\x35\x5a\x5e\x35');var _0x2f9491={};_0x2f9491[_0x6f0d6b(0x162,'\x6d\x53\x71\x52')]=0.8,_0x2f9491[_0x6f0d6b(0xe1,'\x6d\x53\x71\x52')]=0.18,_0x2f9491['\x69\x6e\x6e\x6f\x76\x61\x74\x65']=0x0,_0x2f9491[_0x6f0d6b(0xde,'\x28\x64\x47\x5a')]=0.02,_0x2f9491[_0x6f0d6b(0xb3,'\x35\x5a\x5e\x35')+_0x6f0d6b(0x14f,'\x5a\x2a\x30\x34')+'\x6f\x6c\x64']=0x1,_0x2f9491[_0x6f0d6b(0x12a,'\x57\x45\x77\x58')]=_0x6f0d6b(0x13e,'\x23\x6c\x37\x4a')+_0x6f0d6b(0x183,'\x28\x64\x47\x5a'),_0x2f9491[_0x6f0d6b(0x11b,'\x30\x4b\x23\x54')+_0x6f0d6b(0x158,'\x39\x38\x51\x5b')]=_0x6f0d6b(0x107,'\x43\x28\x77\x7a')+_0x6f0d6b(0x10b,'\x35\x5a\x5e\x35')+_0x6f0d6b(0xc5,'\x36\x49\x6e\x25')+_0x6f0d6b(0xf4,'\x48\x49\x69\x4b')+_0x6f0d6b(0x16e,'\x77\x4b\x44\x70')+_0x6f0d6b(0x13c,'\x36\x49\x6e\x25')+_0x6f0d6b(0x154,'\x4c\x50\x79\x59');var _0x48cb95={};_0x48cb95[_0x6f0d6b(0xf9,'\x7a\x23\x50\x4e')]=0.6,_0x48cb95[_0x6f0d6b(0x131,'\x58\x44\x6c\x32')]=0.22,_0x48cb95[_0x6f0d6b(0x181,'\x74\x4c\x72\x49')]=0.15,_0x48cb95[_0x6f0d6b(0xff,'\x50\x51\x30\x29')]=0.03,_0x48cb95[_0x6f0d6b(0x18b,'\x51\x6a\x61\x38')+_0x6f0d6b(0x14f,'\x5a\x2a\x30\x34')+_0x6f0d6b(0xa5,'\x6c\x59\x65\x50')]=0.8,_0x48cb95[_0x6f0d6b(0xa0,'\x23\x6c\x37\x4a')]=_0x6f0d6b(0x127,'\x58\x44\x6c\x32')+_0x6f0d6b(0x113,'\x57\x66\x44\x6f')+'\x69\x6f\x6e',_0x48cb95[_0x6f0d6b(0x187,'\x74\x4c\x72\x49')+_0x6f0d6b(0x16c,'\x44\x76\x28\x38')]=_0x6f0d6b(0x174,'\x52\x64\x73\x50')+'\x63\x6c\x65\x73\x2e\x20\x50\x72'+_0x6f0d6b(0x114,'\x5a\x2a\x30\x34')+_0x6f0d6b(0xc4,'\x43\x28\x77\x7a')+_0x6f0d6b(0x128,'\x7a\x55\x6e\x4d')+_0x6f0d6b(0xf2,'\x57\x45\x77\x58')+_0x6f0d6b(0x185,'\x77\x4b\x44\x70')+_0x6f0d6b(0xd4,'\x28\x64\x47\x5a')+'\x67\x2e';function _0x4f1c(_0x1a6e3c,_0x5cd634){_0x1a6e3c=_0x1a6e3c-(-0x7a0+0xca*0x2e+-0x1c0c);var _0x424069=_0x1d36();var _0xd2fba8=_0x424069[_0x1a6e3c];if(_0x4f1c['\x77\x6b\x48\x63\x75\x4c']===undefined){var _0x5dd39e=function(_0x5388e7){var _0x5916ec='\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';var _0x4c8fb3='',_0x55becd='',_0x327483=_0x4c8fb3+_0x5dd39e,_0xe78fc1=(''+function(){return-0x3*-0x895+0x1*-0x735+-0x128a;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(-0x1782+-0x24a*0x4+-0x1*-0x20ab);for(var _0x4b08e0=-0x1*0x2629+-0x1d43+0x436c,_0x20ab23,_0x401e1c,_0x8bd582=0x2*0x5d6+0x1991+-0x253d;_0x401e1c=_0x5388e7['\x63\x68\x61\x72\x41\x74'](_0x8bd582++);~_0x401e1c&&(_0x20ab23=_0x4b08e0%(0x13dc+-0x131b+-0xbd)?_0x20ab23*(0x15e4+-0xeb0*0x1+-0x6f4)+_0x401e1c:_0x401e1c,_0x4b08e0++%(-0x25da+-0xb5*0x37+0x4cc1))?_0x4c8fb3+=_0xe78fc1||_0x327483['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x8bd582+(0x1*-0x1e6a+-0x557*0x7+-0xd91*-0x5))-(-0x1*0x1711+-0xe16+0x2531)!==0x1*0x2064+0x52a*-0x1+-0x22*0xcd?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](-0x1cea+0x2*0x1345+0x8a1*-0x1&_0x20ab23>>(-(0x208*0xd+-0x1*-0xec2+-0x2928)*_0x4b08e0&-0x1a42+0x4d5*-0x7+0x3c1b)):_0x4b08e0:-0x3*-0x72b+-0x105d*-0x1+-0x25de){_0x401e1c=_0x5916ec['\x69\x6e\x64\x65\x78\x4f\x66'](_0x401e1c);}for(var _0x11030e=0xe9b+0x8*-0x2a5+0x68d*0x1,_0x48547d=_0x4c8fb3['\x6c\x65\x6e\x67\x74\x68'];_0x11030e<_0x48547d;_0x11030e++){_0x55becd+='\x25'+('\x30\x30'+_0x4c8fb3['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x11030e)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x7b3+-0x1937+0x1194))['\x73\x6c\x69\x63\x65'](-(-0x5*0x387+-0x1*0x1371+-0x1*-0x2516));}return decodeURIComponent(_0x55becd);};var _0x460e9c=function(_0x1b1ea0,_0x57b4d2){var _0x5b463a=[],_0x480dd5=-0x1ae9*0x1+-0xe63+-0x371*-0xc,_0x1c54ef,_0x596967='';_0x1b1ea0=_0x5dd39e(_0x1b1ea0);var _0x5dbdc0;for(_0x5dbdc0=0x168d+0x29*0x79+0x1*-0x29ee;_0x5dbdc0<0x1b01+0x61*-0x17+-0x114a;_0x5dbdc0++){_0x5b463a[_0x5dbdc0]=_0x5dbdc0;}for(_0x5dbdc0=0x6da+-0x1*-0x106+-0x7e0;_0x5dbdc0<-0xe0d+0x223e+0x1*-0x1331;_0x5dbdc0++){_0x480dd5=(_0x480dd5+_0x5b463a[_0x5dbdc0]+_0x57b4d2['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x5dbdc0%_0x57b4d2['\x6c\x65\x6e\x67\x74\x68']))%(-0x16*0x45+-0x203*-0xb+-0xf33),_0x1c54ef=_0x5b463a[_0x5dbdc0],_0x5b463a[_0x5dbdc0]=_0x5b463a[_0x480dd5],_0x5b463a[_0x480dd5]=_0x1c54ef;}_0x5dbdc0=0x1*0x1af3+-0xb1*-0x5+0x1c*-0x116,_0x480dd5=-0x5*-0x380+-0x89*-0x25+-0x3*0xc6f;for(var _0xcd9f77=-0x89*0x5+0x1*0xdf5+-0xb48;_0xcd9f77<_0x1b1ea0['\x6c\x65\x6e\x67\x74\x68'];_0xcd9f77++){_0x5dbdc0=(_0x5dbdc0+(0x83+-0x1877+0x1*0x17f5))%(0x5*-0x577+0x22*0x32+0x15af),_0x480dd5=(_0x480dd5+_0x5b463a[_0x5dbdc0])%(-0x625+0x439*0x7+-0x166a),_0x1c54ef=_0x5b463a[_0x5dbdc0],_0x5b463a[_0x5dbdc0]=_0x5b463a[_0x480dd5],_0x5b463a[_0x480dd5]=_0x1c54ef,_0x596967+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x1b1ea0['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0xcd9f77)^_0x5b463a[(_0x5b463a[_0x5dbdc0]+_0x5b463a[_0x480dd5])%(-0x17d7+0x21d3+0x8fc*-0x1)]);}return _0x596967;};_0x4f1c['\x68\x75\x68\x48\x51\x4d']=_0x460e9c,_0x4f1c['\x6e\x66\x47\x66\x47\x6b']={},_0x4f1c['\x77\x6b\x48\x63\x75\x4c']=!![];}var _0x5bc833=_0x424069[-0x23b0+-0x1*0x1bcc+0x3f7c],_0x3868ee=_0x1a6e3c+_0x5bc833,_0x5a7c7e=_0x4f1c['\x6e\x66\x47\x66\x47\x6b'][_0x3868ee];if(!_0x5a7c7e){if(_0x4f1c['\x75\x52\x62\x5a\x44\x4a']===undefined){var _0x1aae3f=function(_0x5b043b){this['\x54\x6d\x4d\x71\x4b\x6b']=_0x5b043b,this['\x7a\x4d\x61\x50\x6e\x65']=[-0xcd2+0x1ce1*0x1+0x100e*-0x1,-0x8c3*0x1+0x1*-0x1ca5+0x2568*0x1,-0x146b*-0x1+-0x563+-0x1*0xf08],this['\x6d\x77\x72\x72\x57\x51']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x48\x44\x58\x4a\x6b\x74']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x71\x59\x66\x6c\x72\x41']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x1aae3f['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x77\x78\x53\x52\x64\x47']=function(){var _0x6b4d67=new RegExp(this['\x48\x44\x58\x4a\x6b\x74']+this['\x71\x59\x66\x6c\x72\x41']),_0x32282f=_0x6b4d67['\x74\x65\x73\x74'](this['\x6d\x77\x72\x72\x57\x51']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x7a\x4d\x61\x50\x6e\x65'][0x1b92+-0x1727*-0x1+-0x32b8]:--this['\x7a\x4d\x61\x50\x6e\x65'][0x1120+0xff5+-0x2115];return this['\x4e\x68\x6a\x67\x4a\x57'](_0x32282f);},_0x1aae3f['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x4e\x68\x6a\x67\x4a\x57']=function(_0xdcfce6){if(!Boolean(~_0xdcfce6))return _0xdcfce6;return this['\x6d\x59\x6d\x65\x6d\x4e'](this['\x54\x6d\x4d\x71\x4b\x6b']);},_0x1aae3f['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x6d\x59\x6d\x65\x6d\x4e']=function(_0x1b1ac8){for(var _0x5c4642=-0xb61+-0xd*-0xf6+-0x1*0x11d,_0x462ce9=this['\x7a\x4d\x61\x50\x6e\x65']['\x6c\x65\x6e\x67\x74\x68'];_0x5c4642<_0x462ce9;_0x5c4642++){this['\x7a\x4d\x61\x50\x6e\x65']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x462ce9=this['\x7a\x4d\x61\x50\x6e\x65']['\x6c\x65\x6e\x67\x74\x68'];}return _0x1b1ac8(this['\x7a\x4d\x61\x50\x6e\x65'][0x1b*0x53+0x21c+-0xadd]);},(''+function(){return-0x1*0xcca+0x184e+0x43*-0x2c;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0x3*-0x65d+0x2449+0x1b*-0xa3)&&new _0x1aae3f(_0x4f1c)['\x77\x78\x53\x52\x64\x47'](),_0x4f1c['\x75\x52\x62\x5a\x44\x4a']=!![];}_0xd2fba8=_0x4f1c['\x68\x75\x68\x48\x51\x4d'](_0xd2fba8,_0x5cd634),_0x4f1c['\x6e\x66\x47\x66\x47\x6b'][_0x3868ee]=_0xd2fba8;}else _0xd2fba8=_0x5a7c7e;return _0xd2fba8;}var _0x51bd54={};_0x51bd54[_0x6f0d6b(0x179,'\x59\x6b\x73\x25')]=0.55,_0x51bd54['\x6f\x70\x74\x69\x6d\x69\x7a\x65']=0.25,_0x51bd54['\x69\x6e\x6e\x6f\x76\x61\x74\x65']=0.05,_0x51bd54[_0x6f0d6b(0xdd,'\x36\x49\x6e\x25')]=0.15,_0x51bd54[_0x6f0d6b(0x167,'\x5a\x2a\x30\x34')+_0x6f0d6b(0x17c,'\x4c\x50\x79\x59')+_0x6f0d6b(0x189,'\x5d\x51\x75\x59')]=0.9,_0x51bd54[_0x6f0d6b(0x168,'\x25\x67\x25\x58')]=_0x6f0d6b(0x11a,'\x48\x49\x69\x4b')+_0x6f0d6b(0xcb,'\x52\x64\x73\x50'),_0x51bd54[_0x6f0d6b(0x186,'\x39\x38\x51\x5b')+'\x69\x6f\x6e']=_0x6f0d6b(0x149,'\x44\x25\x32\x4f')+_0x6f0d6b(0xbe,'\x57\x45\x77\x58')+_0x6f0d6b(0x14e,'\x58\x44\x6c\x32')+_0x6f0d6b(0x137,'\x36\x49\x6e\x25')+'\x69\x73\x74\x69\x6e\x67\x20\x63'+_0x6f0d6b(0xba,'\x75\x23\x46\x6f')+_0x6f0d6b(0xfc,'\x36\x49\x6e\x25')+_0x6f0d6b(0x146,'\x44\x76\x28\x38')+_0x6f0d6b(0x16f,'\x44\x25\x32\x4f')+_0x6f0d6b(0x170,'\x59\x37\x66\x7a');var _0x1fa8c2={};_0x1fa8c2[_0x6f0d6b(0x118,'\x6d\x53\x71\x52')]=_0x1bc2d8,_0x1fa8c2[_0x6f0d6b(0x101,'\x30\x4b\x23\x54')]=_0x180d67,_0x1fa8c2[_0x6f0d6b(0xc9,'\x6d\x53\x71\x52')]=_0x57e731,_0x1fa8c2[_0x6f0d6b(0x139,'\x59\x37\x66\x7a')+'\x6e\x6c\x79']=_0x2f9491,_0x1fa8c2[_0x6f0d6b(0xcc,'\x77\x4b\x44\x70')+_0x6f0d6b(0x12d,'\x28\x64\x47\x5a')]=_0x48cb95,_0x1fa8c2[_0x6f0d6b(0x15d,'\x44\x25\x32\x4f')+_0x6f0d6b(0x159,'\x44\x76\x28\x38')]=_0x51bd54;var _0x4e7418=_0x1fa8c2;function _0x2dea86(){var _0x595460=_0x6f0d6b,_0x4b7b13={};_0x4b7b13[_0x595460(0x155,'\x7a\x55\x6e\x4d')]=_0x595460(0x132,'\x57\x66\x44\x6f'),_0x4b7b13[_0x595460(0x17b,'\x5a\x2a\x30\x34')]=_0x595460(0x13f,'\x39\x38\x51\x5b')+_0x595460(0xc8,'\x67\x65\x37\x6a')+_0x595460(0x164,'\x35\x5a\x5e\x35'),_0x4b7b13['\x59\x4d\x52\x6b\x51']=function(_0x225dbc,_0x43fcef){return _0x225dbc<_0x43fcef;},_0x4b7b13[_0x595460(0x17d,'\x5d\x51\x75\x59')]=_0x595460(0xbb,'\x44\x25\x32\x4f'),_0x4b7b13[_0x595460(0x125,'\x54\x39\x4c\x44')]=_0x595460(0x16b,'\x53\x38\x37\x41')+'\x6e',_0x4b7b13[_0x595460(0x130,'\x54\x39\x4c\x44')]=_0x595460(0x16a,'\x67\x38\x5b\x62'),_0x4b7b13['\x50\x4b\x71\x6d\x49']=_0x595460(0xe9,'\x72\x25\x39\x69');var _0x1ac068=_0x4b7b13;try{if(_0x595460(0x140,'\x59\x37\x66\x7a')===_0x1ac068[_0x595460(0xb0,'\x56\x63\x2a\x73')]){var _0x4603c3=_0x5bb7db[_0x595460(0x10e,'\x79\x54\x51\x4f')](__dirname,'\x2e\x2e','\x2e\x2e',_0x1ac068[_0x595460(0xc7,'\x58\x44\x6c\x32')],_0x1ac068['\x5a\x68\x6f\x58\x64']),_0x55c1ad=_0x5bb7db['\x72\x65\x73\x6f\x6c\x76\x65'](__dirname,'\x2e\x2e','\x2e\x2e','\x2e\x2e','\x2e\x2e',_0x1ac068[_0x595460(0xc7,'\x58\x44\x6c\x32')],_0x1ac068[_0x595460(0x165,'\x77\x4b\x44\x70')],_0x595460(0x11f,'\x62\x39\x76\x26')+_0x595460(0xd2,'\x67\x38\x5b\x62')+_0x595460(0x17a,'\x47\x68\x74\x26')),_0x3a665a=[_0x4603c3,_0x55c1ad];for(var _0x3c11be=0xa9+0xda+-0x1*0x183;_0x1ac068[_0x595460(0xce,'\x39\x38\x51\x5b')](_0x3c11be,_0x3a665a[_0x595460(0x129,'\x52\x64\x73\x50')]);_0x3c11be++){if(_0x163ae0[_0x595460(0x152,'\x44\x25\x32\x4f')+'\x6e\x63'](_0x3a665a[_0x3c11be])){if(_0x595460(0x109,'\x30\x4b\x23\x54')!==_0x1ac068[_0x595460(0x157,'\x47\x68\x74\x26')]){var _0x4365b6=JSON[_0x595460(0x124,'\x56\x63\x2a\x73')](_0x163ae0[_0x595460(0xb9,'\x4c\x50\x79\x59')+_0x595460(0xf3,'\x50\x51\x30\x29')](_0x3a665a[_0x3c11be],_0x1ac068[_0x595460(0x18d,'\x59\x6b\x73\x25')]));return _0x4365b6&&Number[_0x595460(0xd7,'\x44\x25\x32\x4f')](_0x4365b6[_0x595460(0x12c,'\x43\x28\x77\x7a')+'\x6e\x74'])?_0x4365b6[_0x595460(0x180,'\x51\x6a\x61\x38')+'\x6e\x74']:0xd33*-0x1+-0x1d2d+0x2a60;}else return _0x1e213a[_0x595460(0x12e,'\x50\x51\x30\x29')](_0x45487c);}}}else{var _0x5ddb00=_0x2be521[_0x595460(0x15a,'\x58\x44\x6c\x32')](_0x3def34,'\x2e\x2e','\x2e\x2e',_0x595460(0xed,'\x75\x23\x46\x6f'),_0x595460(0xa7,'\x44\x25\x32\x4f')+_0x595460(0x177,'\x4c\x50\x79\x59')+_0x595460(0x133,'\x41\x25\x24\x7a')),_0x220ecd=_0x4ee442[_0x595460(0xfd,'\x44\x76\x28\x38')](_0x43a625,'\x2e\x2e','\x2e\x2e','\x2e\x2e','\x2e\x2e',_0x1ac068[_0x595460(0xe0,'\x6c\x59\x65\x50')],_0x595460(0x166,'\x5d\x51\x75\x59')+'\x6e',_0x1ac068[_0x595460(0x153,'\x41\x25\x24\x7a')]),_0x51184c=[_0x5ddb00,_0x220ecd];for(var _0x2fc4b8=-0x970+0x6*0x233+0x3c2*-0x1;_0x1ac068[_0x595460(0x12b,'\x48\x49\x69\x4b')](_0x2fc4b8,_0x51184c[_0x595460(0xe8,'\x41\x25\x24\x7a')]);_0x2fc4b8++){if(_0x185e5d[_0x595460(0x14c,'\x57\x45\x77\x58')+'\x6e\x63'](_0x51184c[_0x2fc4b8])){var _0x245e10=_0x4a6894['\x70\x61\x72\x73\x65'](_0x1dc35e[_0x595460(0x178,'\x23\x6c\x37\x4a')+'\x53\x79\x6e\x63'](_0x51184c[_0x2fc4b8],'\x75\x74\x66\x38'));return _0x245e10&&_0x2f3119[_0x595460(0xb8,'\x23\x6c\x37\x4a')](_0x245e10[_0x595460(0x145,'\x67\x38\x5b\x62')+'\x6e\x74'])?_0x245e10[_0x595460(0x18a,'\x54\x39\x4c\x44')+'\x6e\x74']:-0x5*-0x4d4+-0xe7e+-0x9a6;}}}}catch(_0x3c8cf2){}return 0x1*-0x25bf+-0x4*0x876+-0x17dd*-0x3;}function _0x2b128f(_0xa9391b){var _0x7def35=_0x6f0d6b,_0x297ef4={'\x51\x43\x64\x77\x71':'\x73\x74\x65\x61\x64\x79\x2d\x73'+'\x74\x61\x74\x65','\x69\x47\x41\x4a\x41':function(_0x3e2426,_0x5a096a){return _0x3e2426(_0x5a096a);},'\x55\x77\x43\x56\x53':_0x7def35(0x121,'\x4c\x50\x79\x59'),'\x74\x76\x67\x64\x7a':function(_0x5bc6e0,_0x1cb1bf){return _0x5bc6e0(_0x1cb1bf);},'\x4a\x4d\x41\x58\x76':function(_0xc2f40b,_0x5348f0){return _0xc2f40b===_0x5348f0;},'\x6b\x68\x71\x45\x78':_0x7def35(0x126,'\x35\x5a\x5e\x35'),'\x70\x57\x6f\x67\x78':_0x7def35(0x13a,'\x6d\x53\x71\x52'),'\x77\x68\x52\x42\x43':function(_0x4abb0e,_0x31514c){return _0x4abb0e===_0x31514c;},'\x79\x47\x6f\x55\x6a':_0x7def35(0x171,'\x23\x6c\x37\x4a'),'\x78\x7a\x45\x4c\x4e':function(_0x1bc218,_0x24d419){return _0x1bc218&&_0x24d419;},'\x69\x41\x6c\x53\x47':function(_0x23c1a7){return _0x23c1a7();},'\x76\x54\x4c\x62\x67':function(_0x270cf5,_0x5c41a9){return _0x270cf5<=_0x5c41a9;},'\x79\x43\x55\x50\x79':_0x7def35(0xab,'\x53\x38\x37\x41')+_0x7def35(0xbf,'\x50\x57\x41\x43'),'\x72\x44\x52\x44\x59':function(_0x4788cb,_0x25010e){return _0x4788cb!==_0x25010e;},'\x46\x44\x6c\x76\x43':_0x7def35(0x13b,'\x77\x4b\x44\x70')+_0x7def35(0xb6,'\x43\x28\x77\x7a')+'\x74\x65','\x57\x72\x4d\x6d\x56':function(_0x2fe592,_0x38d3b4){return _0x2fe592!==_0x38d3b4;},'\x67\x72\x59\x45\x63':_0x7def35(0x18c,'\x77\x4b\x44\x70'),'\x56\x6a\x68\x54\x57':function(_0x36297c,_0x3d11c7){return _0x36297c===_0x3d11c7;}},_0xecf850=_0xa9391b&&Array[_0x7def35(0x148,'\x6c\x59\x65\x50')](_0xa9391b[_0x7def35(0xa6,'\x72\x25\x39\x69')])?_0xa9391b[_0x7def35(0x115,'\x66\x48\x7a\x49')]:[],_0x1b24b0=_0x297ef4['\x69\x47\x41\x4a\x41'](String,process.env.EVOLVE_STRATEGY||_0x297ef4[_0x7def35(0x100,'\x28\x64\x47\x5a')])[_0x7def35(0xf6,'\x59\x37\x66\x7a')+_0x7def35(0x173,'\x75\x23\x46\x6f')]()[_0x7def35(0x117,'\x44\x25\x32\x4f')](),_0x2bdbf6=![];if(!process.env.EVOLVE_STRATEGY){var _0x2dd078=_0x297ef4[_0x7def35(0xe3,'\x57\x66\x44\x6f')](String,process.env.FORCE_INNOVATION||process.env.EVOLVE_FORCE_INNOVATION||'')[_0x7def35(0x11e,'\x39\x38\x51\x5b')+_0x7def35(0xa3,'\x57\x66\x44\x6f')]();_0x297ef4[_0x7def35(0xc2,'\x62\x39\x76\x26')](_0x2dd078,_0x297ef4[_0x7def35(0x119,'\x39\x38\x51\x5b')])&&(_0x1b24b0=_0x297ef4[_0x7def35(0xe7,'\x30\x4b\x23\x54')],_0x2bdbf6=!![]);}var _0x28ee53=!process.env.EVOLVE_STRATEGY||_0x297ef4[_0x7def35(0x10d,'\x75\x23\x46\x6f')](_0x1b24b0,_0x7def35(0x13d,'\x47\x68\x74\x26'))||_0x1b24b0===_0x297ef4[_0x7def35(0xec,'\x79\x54\x51\x4f')];if(_0x297ef4[_0x7def35(0xd8,'\x39\x38\x51\x5b')](_0x28ee53,!_0x2bdbf6)){var _0x1b87d1=_0x297ef4[_0x7def35(0xe6,'\x53\x38\x37\x41')](_0x2dea86);_0x1b87d1>0xdf2+-0x69b+-0x757&&_0x297ef4[_0x7def35(0xf1,'\x23\x33\x4f\x68')](_0x1b87d1,0x12d*0x9+-0xa7b*-0x1+-0x150b)&&(_0x1b24b0=_0x297ef4[_0x7def35(0xf5,'\x67\x65\x37\x6a')]);if(_0x297ef4['\x72\x44\x52\x44\x59'](_0xecf850[_0x7def35(0x150,'\x23\x6c\x37\x4a')](_0x297ef4['\x46\x44\x6c\x76\x43']),-(-0xd*0x2a5+-0x19a7+0x3c09)))_0x1b24b0=_0x297ef4[_0x7def35(0x175,'\x72\x25\x39\x69')];else _0x297ef4[_0x7def35(0xd0,'\x67\x38\x5b\x62')](_0xecf850[_0x7def35(0x12f,'\x53\x38\x37\x41')](_0x7def35(0x151,'\x58\x44\x6c\x32')+_0x7def35(0x108,'\x59\x6b\x73\x25')+'\x74\x69\x6f\x6e'),-(-0x1cef+0x1*-0x2ba+0x1faa))&&(_0x297ef4[_0x7def35(0x176,'\x47\x7a\x45\x4f')](_0x7def35(0x160,'\x58\x44\x6c\x32'),_0x297ef4[_0x7def35(0xaa,'\x4c\x50\x79\x59')])?_0x1b24b0=_0x7def35(0x134,'\x4c\x50\x79\x59')+_0x7def35(0x103,'\x47\x68\x74\x26'):_0x418462=_0x297ef4['\x51\x43\x64\x77\x71']);}if(_0x297ef4[_0x7def35(0x156,'\x7a\x23\x50\x4e')](_0x1b24b0,_0x297ef4['\x79\x47\x6f\x55\x6a']))_0x1b24b0=_0x297ef4['\x55\x77\x43\x56\x53'];var _0x20d5a7=_0x4e7418[_0x1b24b0]||_0x4e7418[_0x297ef4[_0x7def35(0xf8,'\x47\x7a\x45\x4f')]],_0x1f2a6b={};return _0x1f2a6b['\x6e\x61\x6d\x65']=_0x1b24b0,Object[_0x7def35(0xb5,'\x67\x6e\x6c\x2a')]({},_0x20d5a7,_0x1f2a6b);}function _0x571dee(){var _0x235197=_0x6f0d6b;return Object[_0x235197(0x16d,'\x51\x6a\x61\x38')](_0x4e7418);}var _0x8e597f={};_0x8e597f[_0x6f0d6b(0xbd,'\x67\x6e\x6c\x2a')+_0x6f0d6b(0xad,'\x52\x64\x73\x50')]=_0x2b128f,_0x8e597f[_0x6f0d6b(0x104,'\x62\x39\x76\x26')+_0x6f0d6b(0x142,'\x5d\x51\x75\x59')]=_0x571dee,_0x8e597f[_0x6f0d6b(0x102,'\x47\x7a\x45\x4f')+'\x45\x53']=_0x4e7418,module[_0x6f0d6b(0xd1,'\x67\x38\x5b\x62')]=_0x8e597f;
|
package/src/gep/taskReceiver.js
DELETED
|
@@ -1,575 +0,0 @@
|
|
|
1
|
-
// ---------------------------------------------------------------------------
|
|
2
|
-
// taskReceiver -- pulls external tasks from Hub, auto-claims, and injects
|
|
3
|
-
// them as high-priority signals into the evolution loop.
|
|
4
|
-
//
|
|
5
|
-
// v2: Smart task selection with difficulty-aware ROI scoring and capability
|
|
6
|
-
// matching via memory graph history.
|
|
7
|
-
// ---------------------------------------------------------------------------
|
|
8
|
-
|
|
9
|
-
const { getNodeId, buildHubHeaders, buildNodeScopedHubHeaders } = require('./a2aProtocol');
|
|
10
|
-
const { resolveHubUrl } = require('../config');
|
|
11
|
-
const { hubFetch } = require('./hubFetch');
|
|
12
|
-
const { createTask, validateTask } = require('./schemas/task');
|
|
13
|
-
|
|
14
|
-
function buildAuthHeaders() {
|
|
15
|
-
const buildHeaders = buildNodeScopedHubHeaders || buildHubHeaders;
|
|
16
|
-
return buildHeaders();
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const TASK_STRATEGY = String(process.env.TASK_STRATEGY || 'balanced').toLowerCase();
|
|
20
|
-
const TASK_MIN_CAPABILITY_MATCH = Number(process.env.TASK_MIN_CAPABILITY_MATCH) || 0.1;
|
|
21
|
-
|
|
22
|
-
// Scoring weights by strategy
|
|
23
|
-
const STRATEGY_WEIGHTS = {
|
|
24
|
-
greedy: { roi: 0.10, capability: 0.05, completion: 0.05, bounty: 0.80 },
|
|
25
|
-
balanced: { roi: 0.35, capability: 0.30, completion: 0.20, bounty: 0.15 },
|
|
26
|
-
conservative: { roi: 0.25, capability: 0.45, completion: 0.25, bounty: 0.05 },
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Fetch available tasks from Hub via the A2A fetch endpoint.
|
|
31
|
-
* Optionally piggybacks proactive questions in the payload for Hub to create bounties.
|
|
32
|
-
*
|
|
33
|
-
* @param {object} [opts]
|
|
34
|
-
* @param {Array<{ question: string, amount?: number, signals?: string[] }>} [opts.questions]
|
|
35
|
-
* @returns {{ tasks: Array, questions_created?: Array }}
|
|
36
|
-
*/
|
|
37
|
-
async function fetchTasks(opts) {
|
|
38
|
-
const o = opts || {};
|
|
39
|
-
const nodeId = getNodeId();
|
|
40
|
-
if (!nodeId) return { tasks: [] };
|
|
41
|
-
|
|
42
|
-
try {
|
|
43
|
-
const payload = {
|
|
44
|
-
tasks_only: true,
|
|
45
|
-
include_tasks: true,
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
if (Array.isArray(o.questions) && o.questions.length > 0) {
|
|
49
|
-
payload.questions = o.questions;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const msg = {
|
|
53
|
-
protocol: 'gep-a2a',
|
|
54
|
-
protocol_version: '1.0.0',
|
|
55
|
-
message_type: 'fetch',
|
|
56
|
-
message_id: `msg_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
|
|
57
|
-
sender_id: nodeId,
|
|
58
|
-
timestamp: new Date().toISOString(),
|
|
59
|
-
payload,
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/fetch`;
|
|
63
|
-
const controller = new AbortController();
|
|
64
|
-
const timer = setTimeout(() => controller.abort(), 8000);
|
|
65
|
-
|
|
66
|
-
const res = await hubFetch(url, {
|
|
67
|
-
method: 'POST',
|
|
68
|
-
headers: buildAuthHeaders(),
|
|
69
|
-
body: JSON.stringify(msg),
|
|
70
|
-
signal: controller.signal,
|
|
71
|
-
});
|
|
72
|
-
clearTimeout(timer);
|
|
73
|
-
|
|
74
|
-
if (!res.ok) return { tasks: [] };
|
|
75
|
-
|
|
76
|
-
const data = await res.json();
|
|
77
|
-
const respPayload = data.payload || data;
|
|
78
|
-
const tasks = Array.isArray(respPayload.tasks)
|
|
79
|
-
? respPayload.tasks.map(function(t) { return createTask(t); }).filter(function(t) {
|
|
80
|
-
try { return validateTask(t); } catch (e) {
|
|
81
|
-
console.warn('[TaskReceiver] dropping invalid task:', e.message, t.task_id || '(no id)');
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
})
|
|
85
|
-
: [];
|
|
86
|
-
const result = { tasks };
|
|
87
|
-
|
|
88
|
-
if (respPayload.questions_created) {
|
|
89
|
-
result.questions_created = respPayload.questions_created;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// LessonL: extract relevant lessons from Hub response
|
|
93
|
-
if (Array.isArray(respPayload.relevant_lessons) && respPayload.relevant_lessons.length > 0) {
|
|
94
|
-
result.relevant_lessons = respPayload.relevant_lessons;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return result;
|
|
98
|
-
} catch (err) {
|
|
99
|
-
console.warn("[TaskReceiver] fetchTasks failed:", err && err.message ? err.message : err);
|
|
100
|
-
return { tasks: [] };
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// ---------------------------------------------------------------------------
|
|
105
|
-
// Capability matching: how well this agent's history matches a task's signals
|
|
106
|
-
// ---------------------------------------------------------------------------
|
|
107
|
-
|
|
108
|
-
function parseSignals(raw) {
|
|
109
|
-
if (!raw) return [];
|
|
110
|
-
return String(raw).split(',').map(function(s) { return s.trim().toLowerCase(); }).filter(Boolean);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function jaccard(a, b) {
|
|
114
|
-
if (!a.length || !b.length) return 0;
|
|
115
|
-
var setA = new Set(a);
|
|
116
|
-
var setB = new Set(b);
|
|
117
|
-
var inter = 0;
|
|
118
|
-
for (var v of setB) { if (setA.has(v)) inter++; }
|
|
119
|
-
return inter / (setA.size + setB.size - inter);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Estimate how well this agent can handle a task based on memory graph history.
|
|
124
|
-
* Returns 0.0 - 1.0 where 1.0 = strong match with high success rate.
|
|
125
|
-
*
|
|
126
|
-
* @param {object} task - task from Hub (has .signals field)
|
|
127
|
-
* @param {Array} memoryEvents - from tryReadMemoryGraphEvents()
|
|
128
|
-
* @returns {number}
|
|
129
|
-
*/
|
|
130
|
-
function estimateCapabilityMatch(task, memoryEvents) {
|
|
131
|
-
if (!Array.isArray(memoryEvents) || memoryEvents.length === 0) return 0.5;
|
|
132
|
-
|
|
133
|
-
var taskSignals = parseSignals(task.signals || task.title);
|
|
134
|
-
if (taskSignals.length === 0) return 0.5;
|
|
135
|
-
|
|
136
|
-
var successBySignalKey = {};
|
|
137
|
-
var totalBySignalKey = {};
|
|
138
|
-
var allSignals = {};
|
|
139
|
-
|
|
140
|
-
for (var i = 0; i < memoryEvents.length; i++) {
|
|
141
|
-
var ev = memoryEvents[i];
|
|
142
|
-
if (!ev || ev.type !== 'MemoryGraphEvent' || ev.kind !== 'outcome') continue;
|
|
143
|
-
|
|
144
|
-
var sigs = (ev.signal && Array.isArray(ev.signal.signals)) ? ev.signal.signals : [];
|
|
145
|
-
var key = (ev.signal && ev.signal.key) ? String(ev.signal.key) : '';
|
|
146
|
-
var status = (ev.outcome && ev.outcome.status) ? String(ev.outcome.status) : '';
|
|
147
|
-
|
|
148
|
-
for (var j = 0; j < sigs.length; j++) {
|
|
149
|
-
allSignals[sigs[j].toLowerCase()] = true;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (!key) continue;
|
|
153
|
-
if (!totalBySignalKey[key]) { totalBySignalKey[key] = 0; successBySignalKey[key] = 0; }
|
|
154
|
-
totalBySignalKey[key]++;
|
|
155
|
-
if (status === 'success') successBySignalKey[key]++;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// Jaccard overlap between task signals and all signals this agent has worked with
|
|
159
|
-
var allSigArr = Object.keys(allSignals);
|
|
160
|
-
var overlapScore = jaccard(taskSignals, allSigArr);
|
|
161
|
-
|
|
162
|
-
// Weighted success rate across matching signal keys
|
|
163
|
-
var weightedSuccess = 0;
|
|
164
|
-
var weightSum = 0;
|
|
165
|
-
for (var sk in totalBySignalKey) {
|
|
166
|
-
// Reconstruct signals from the key for comparison
|
|
167
|
-
var skParts = sk.split('|').map(function(s) { return s.trim().toLowerCase(); }).filter(Boolean);
|
|
168
|
-
var sim = jaccard(taskSignals, skParts);
|
|
169
|
-
if (sim < 0.15) continue;
|
|
170
|
-
|
|
171
|
-
var total = totalBySignalKey[sk];
|
|
172
|
-
var succ = successBySignalKey[sk] || 0;
|
|
173
|
-
var rate = (succ + 1) / (total + 2); // Laplace smoothing
|
|
174
|
-
weightedSuccess += rate * sim;
|
|
175
|
-
weightSum += sim;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
var successScore = weightSum > 0 ? (weightedSuccess / weightSum) : 0.5;
|
|
179
|
-
|
|
180
|
-
// Combine: 60% success rate history + 40% signal overlap
|
|
181
|
-
return Math.min(1, overlapScore * 0.4 + successScore * 0.6);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// ---------------------------------------------------------------------------
|
|
185
|
-
// Local fallback difficulty estimation when Hub doesn't provide complexity_score
|
|
186
|
-
// ---------------------------------------------------------------------------
|
|
187
|
-
|
|
188
|
-
function localDifficultyEstimate(task) {
|
|
189
|
-
var signals = parseSignals(task.signals);
|
|
190
|
-
var signalFactor = Math.min(signals.length / 8, 1);
|
|
191
|
-
|
|
192
|
-
var titleWords = (task.title || '').split(/\s+/).filter(Boolean).length;
|
|
193
|
-
var titleFactor = Math.min(titleWords / 15, 1);
|
|
194
|
-
|
|
195
|
-
return Math.min(1, signalFactor * 0.6 + titleFactor * 0.4);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// ---------------------------------------------------------------------------
|
|
199
|
-
// Commitment deadline estimation -- based on task difficulty
|
|
200
|
-
// ---------------------------------------------------------------------------
|
|
201
|
-
|
|
202
|
-
const MIN_COMMITMENT_MS = 5 * 60 * 1000; // 5 min (Hub minimum)
|
|
203
|
-
const MAX_COMMITMENT_MS = 24 * 60 * 60 * 1000; // 24 h (Hub maximum)
|
|
204
|
-
|
|
205
|
-
const DIFFICULTY_DURATION_MAP = [
|
|
206
|
-
{ threshold: 0.3, durationMs: 15 * 60 * 1000 }, // low: 15 min
|
|
207
|
-
{ threshold: 0.5, durationMs: 30 * 60 * 1000 }, // medium: 30 min
|
|
208
|
-
{ threshold: 0.7, durationMs: 60 * 60 * 1000 }, // high: 60 min
|
|
209
|
-
{ threshold: 1.0, durationMs: 120 * 60 * 1000 }, // very high: 120 min
|
|
210
|
-
];
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Estimate a reasonable commitment deadline for a task.
|
|
214
|
-
* Returns an ISO-8601 date string or null if estimation fails.
|
|
215
|
-
*
|
|
216
|
-
* @param {object} task - task from Hub
|
|
217
|
-
* @returns {string|null}
|
|
218
|
-
*/
|
|
219
|
-
function estimateCommitmentDeadline(task) {
|
|
220
|
-
if (!task) return null;
|
|
221
|
-
|
|
222
|
-
var difficulty = (task.complexity_score != null)
|
|
223
|
-
? Number(task.complexity_score)
|
|
224
|
-
: localDifficultyEstimate(task);
|
|
225
|
-
|
|
226
|
-
var durationMs = DIFFICULTY_DURATION_MAP[DIFFICULTY_DURATION_MAP.length - 1].durationMs;
|
|
227
|
-
for (var i = 0; i < DIFFICULTY_DURATION_MAP.length; i++) {
|
|
228
|
-
if (difficulty <= DIFFICULTY_DURATION_MAP[i].threshold) {
|
|
229
|
-
durationMs = DIFFICULTY_DURATION_MAP[i].durationMs;
|
|
230
|
-
break;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
durationMs = Math.max(MIN_COMMITMENT_MS, Math.min(MAX_COMMITMENT_MS, durationMs));
|
|
235
|
-
|
|
236
|
-
var deadline = new Date(Date.now() + durationMs);
|
|
237
|
-
|
|
238
|
-
if (task.expires_at) {
|
|
239
|
-
var expiresAt = new Date(task.expires_at);
|
|
240
|
-
if (!isNaN(expiresAt.getTime()) && expiresAt < deadline) {
|
|
241
|
-
var remaining = expiresAt.getTime() - Date.now();
|
|
242
|
-
if (remaining < MIN_COMMITMENT_MS) return null;
|
|
243
|
-
var adjusted = new Date(expiresAt.getTime() - 60000);
|
|
244
|
-
if (adjusted.getTime() - Date.now() < MIN_COMMITMENT_MS) return null;
|
|
245
|
-
deadline = adjusted;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
return deadline.toISOString();
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
// ---------------------------------------------------------------------------
|
|
253
|
-
// Score a single task for this agent
|
|
254
|
-
// ---------------------------------------------------------------------------
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* @param {object} task - task from Hub
|
|
258
|
-
* @param {number} capabilityMatch - from estimateCapabilityMatch()
|
|
259
|
-
* @returns {{ composite: number, factors: object }}
|
|
260
|
-
*/
|
|
261
|
-
function scoreTask(task, capabilityMatch) {
|
|
262
|
-
var w = STRATEGY_WEIGHTS[TASK_STRATEGY] || STRATEGY_WEIGHTS.balanced;
|
|
263
|
-
|
|
264
|
-
var difficulty = (task.complexity_score != null) ? task.complexity_score : localDifficultyEstimate(task);
|
|
265
|
-
var bountyAmount = task.bounty_amount || 0;
|
|
266
|
-
var completionRate = (task.historical_completion_rate != null) ? task.historical_completion_rate : 0.5;
|
|
267
|
-
|
|
268
|
-
// ROI: bounty per unit difficulty (higher = better value)
|
|
269
|
-
var roiRaw = bountyAmount / (difficulty + 0.1);
|
|
270
|
-
var roiNorm = Math.min(roiRaw / 200, 1); // normalize: 200-credit ROI = max
|
|
271
|
-
|
|
272
|
-
// Bounty absolute: normalize against a reference max
|
|
273
|
-
var bountyNorm = Math.min(bountyAmount / 100, 1);
|
|
274
|
-
|
|
275
|
-
var composite =
|
|
276
|
-
w.roi * roiNorm +
|
|
277
|
-
w.capability * capabilityMatch +
|
|
278
|
-
w.completion * completionRate +
|
|
279
|
-
w.bounty * bountyNorm;
|
|
280
|
-
|
|
281
|
-
return {
|
|
282
|
-
composite: Math.round(composite * 1000) / 1000,
|
|
283
|
-
factors: {
|
|
284
|
-
roi: Math.round(roiNorm * 100) / 100,
|
|
285
|
-
capability: Math.round(capabilityMatch * 100) / 100,
|
|
286
|
-
completion: Math.round(completionRate * 100) / 100,
|
|
287
|
-
bounty: Math.round(bountyNorm * 100) / 100,
|
|
288
|
-
difficulty: Math.round(difficulty * 100) / 100,
|
|
289
|
-
},
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
// ---------------------------------------------------------------------------
|
|
294
|
-
// Enhanced task selection with scoring
|
|
295
|
-
// ---------------------------------------------------------------------------
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Pick the best task from a list using composite scoring.
|
|
299
|
-
* @param {Array} tasks
|
|
300
|
-
* @param {Array} [memoryEvents] - from tryReadMemoryGraphEvents()
|
|
301
|
-
* @returns {object|null}
|
|
302
|
-
*/
|
|
303
|
-
function selectBestTask(tasks, memoryEvents) {
|
|
304
|
-
if (!Array.isArray(tasks) || tasks.length === 0) return null;
|
|
305
|
-
|
|
306
|
-
var nodeId = getNodeId();
|
|
307
|
-
|
|
308
|
-
// Already-claimed tasks for this node always take top priority (resume work)
|
|
309
|
-
var myClaimedTask = tasks.find(function(t) {
|
|
310
|
-
return t.status === 'claimed' && t.claimed_by === nodeId;
|
|
311
|
-
});
|
|
312
|
-
if (myClaimedTask) return myClaimedTask;
|
|
313
|
-
|
|
314
|
-
// Filter to open tasks only
|
|
315
|
-
var open = tasks.filter(function(t) { return t.status === 'open'; });
|
|
316
|
-
if (open.length === 0) return null;
|
|
317
|
-
|
|
318
|
-
// Legacy greedy mode: preserve old behavior exactly
|
|
319
|
-
if (TASK_STRATEGY === 'greedy' && (!memoryEvents || memoryEvents.length === 0)) {
|
|
320
|
-
var bountyTasks = open.filter(function(t) { return t.bounty_id; });
|
|
321
|
-
if (bountyTasks.length > 0) {
|
|
322
|
-
bountyTasks.sort(function(a, b) { return (b.bounty_amount || 0) - (a.bounty_amount || 0); });
|
|
323
|
-
return bountyTasks[0];
|
|
324
|
-
}
|
|
325
|
-
return open[0];
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
// Score all open tasks
|
|
329
|
-
var scored = open.map(function(t) {
|
|
330
|
-
var cap = estimateCapabilityMatch(t, memoryEvents || []);
|
|
331
|
-
var result = scoreTask(t, cap);
|
|
332
|
-
return { task: t, composite: result.composite, factors: result.factors, capability: cap };
|
|
333
|
-
});
|
|
334
|
-
|
|
335
|
-
// Filter by minimum capability match (unless conservative skipping is off)
|
|
336
|
-
if (TASK_MIN_CAPABILITY_MATCH > 0) {
|
|
337
|
-
var filtered = scored.filter(function(s) { return s.capability >= TASK_MIN_CAPABILITY_MATCH; });
|
|
338
|
-
if (filtered.length > 0) scored = filtered;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
scored.sort(function(a, b) { return b.composite - a.composite; });
|
|
342
|
-
|
|
343
|
-
// Log top 3 candidates for debugging
|
|
344
|
-
var top3 = scored.slice(0, 3);
|
|
345
|
-
for (var i = 0; i < top3.length; i++) {
|
|
346
|
-
var s = top3[i];
|
|
347
|
-
console.log('[TaskStrategy] #' + (i + 1) + ' "' + (s.task.title || s.task.task_id || '').slice(0, 50) + '" score=' + s.composite + ' ' + JSON.stringify(s.factors));
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
return scored[0] ? scored[0].task : null;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
/**
|
|
354
|
-
* Claim a task on the Hub.
|
|
355
|
-
* @param {string} taskId
|
|
356
|
-
* @param {{ commitment_deadline?: string }} [opts]
|
|
357
|
-
* @returns {boolean} true if claim succeeded
|
|
358
|
-
*/
|
|
359
|
-
async function claimTask(taskId, opts) {
|
|
360
|
-
const nodeId = getNodeId();
|
|
361
|
-
if (!nodeId || !taskId) return false;
|
|
362
|
-
|
|
363
|
-
try {
|
|
364
|
-
const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/task/claim`;
|
|
365
|
-
const controller = new AbortController();
|
|
366
|
-
const timer = setTimeout(() => controller.abort(), 5000);
|
|
367
|
-
|
|
368
|
-
const body = { task_id: taskId, node_id: nodeId };
|
|
369
|
-
if (opts && opts.commitment_deadline) {
|
|
370
|
-
body.commitment_deadline = opts.commitment_deadline;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
const res = await hubFetch(url, {
|
|
374
|
-
method: 'POST',
|
|
375
|
-
headers: buildAuthHeaders(),
|
|
376
|
-
body: JSON.stringify(body),
|
|
377
|
-
signal: controller.signal,
|
|
378
|
-
});
|
|
379
|
-
clearTimeout(timer);
|
|
380
|
-
|
|
381
|
-
return res.ok;
|
|
382
|
-
} catch {
|
|
383
|
-
return false;
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
/**
|
|
388
|
-
* Complete a task on the Hub with the result asset ID.
|
|
389
|
-
* @param {string} taskId
|
|
390
|
-
* @param {string} assetId
|
|
391
|
-
* @returns {boolean}
|
|
392
|
-
*/
|
|
393
|
-
async function completeTask(taskId, assetId) {
|
|
394
|
-
const nodeId = getNodeId();
|
|
395
|
-
if (!nodeId || !taskId || !assetId) return false;
|
|
396
|
-
|
|
397
|
-
try {
|
|
398
|
-
const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/task/complete`;
|
|
399
|
-
const controller = new AbortController();
|
|
400
|
-
const timer = setTimeout(() => controller.abort(), 5000);
|
|
401
|
-
|
|
402
|
-
const res = await hubFetch(url, {
|
|
403
|
-
method: 'POST',
|
|
404
|
-
headers: buildAuthHeaders(),
|
|
405
|
-
body: JSON.stringify({ task_id: taskId, asset_id: assetId, node_id: nodeId }),
|
|
406
|
-
signal: controller.signal,
|
|
407
|
-
});
|
|
408
|
-
clearTimeout(timer);
|
|
409
|
-
|
|
410
|
-
return res.ok;
|
|
411
|
-
} catch {
|
|
412
|
-
return false;
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* Extract signals from a task to inject into evolution cycle.
|
|
418
|
-
* @param {object} task
|
|
419
|
-
* @returns {string[]} signals array
|
|
420
|
-
*/
|
|
421
|
-
function taskToSignals(task) {
|
|
422
|
-
if (!task) return [];
|
|
423
|
-
const signals = [];
|
|
424
|
-
if (task.signals) {
|
|
425
|
-
const parts = String(task.signals).split(',').map(s => s.trim()).filter(Boolean);
|
|
426
|
-
signals.push(...parts);
|
|
427
|
-
}
|
|
428
|
-
if (task.title) {
|
|
429
|
-
const words = String(task.title).toLowerCase().split(/\s+/).filter(w => w.length >= 3);
|
|
430
|
-
for (const w of words.slice(0, 5)) {
|
|
431
|
-
if (!signals.includes(w)) signals.push(w);
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
signals.push('external_task');
|
|
435
|
-
if (task.bounty_id) signals.push('bounty_task');
|
|
436
|
-
return signals;
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
// ---------------------------------------------------------------------------
|
|
440
|
-
// Worker Pool task operations (POST /a2a/work/*)
|
|
441
|
-
// These use a separate API from bounty tasks and return assignment objects.
|
|
442
|
-
// ---------------------------------------------------------------------------
|
|
443
|
-
|
|
444
|
-
async function claimWorkerTask(taskId) {
|
|
445
|
-
const nodeId = getNodeId();
|
|
446
|
-
if (!nodeId || !taskId) return null;
|
|
447
|
-
|
|
448
|
-
try {
|
|
449
|
-
const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/work/claim`;
|
|
450
|
-
const controller = new AbortController();
|
|
451
|
-
const timer = setTimeout(() => controller.abort(), 5000);
|
|
452
|
-
|
|
453
|
-
const res = await hubFetch(url, {
|
|
454
|
-
method: 'POST',
|
|
455
|
-
headers: buildAuthHeaders(),
|
|
456
|
-
body: JSON.stringify({ task_id: taskId, node_id: nodeId }),
|
|
457
|
-
signal: controller.signal,
|
|
458
|
-
});
|
|
459
|
-
clearTimeout(timer);
|
|
460
|
-
|
|
461
|
-
if (!res.ok) return null;
|
|
462
|
-
return await res.json();
|
|
463
|
-
} catch {
|
|
464
|
-
return null;
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
async function completeWorkerTask(assignmentId, resultAssetId) {
|
|
469
|
-
const nodeId = getNodeId();
|
|
470
|
-
if (!nodeId || !assignmentId || !resultAssetId) return false;
|
|
471
|
-
|
|
472
|
-
try {
|
|
473
|
-
const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/work/complete`;
|
|
474
|
-
const controller = new AbortController();
|
|
475
|
-
const timer = setTimeout(() => controller.abort(), 5000);
|
|
476
|
-
|
|
477
|
-
const res = await hubFetch(url, {
|
|
478
|
-
method: 'POST',
|
|
479
|
-
headers: buildAuthHeaders(),
|
|
480
|
-
body: JSON.stringify({ assignment_id: assignmentId, node_id: nodeId, result_asset_id: resultAssetId }),
|
|
481
|
-
signal: controller.signal,
|
|
482
|
-
});
|
|
483
|
-
clearTimeout(timer);
|
|
484
|
-
|
|
485
|
-
return res.ok;
|
|
486
|
-
} catch {
|
|
487
|
-
return false;
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
/**
|
|
492
|
-
* Atomic claim+complete for deferred worker tasks.
|
|
493
|
-
* Called from solidify after a successful evolution cycle so we never hold
|
|
494
|
-
* an assignment that might expire before completion.
|
|
495
|
-
*
|
|
496
|
-
* @param {string} taskId
|
|
497
|
-
* @param {string} resultAssetId - sha256:... of the published capsule
|
|
498
|
-
* @returns {{ ok: boolean, assignment_id?: string, error?: string }}
|
|
499
|
-
*/
|
|
500
|
-
async function claimAndCompleteWorkerTask(taskId, resultAssetId) {
|
|
501
|
-
const nodeId = getNodeId();
|
|
502
|
-
if (!nodeId || !taskId || !resultAssetId) {
|
|
503
|
-
return { ok: false, error: 'missing_params' };
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
const assignment = await claimWorkerTask(taskId);
|
|
507
|
-
if (!assignment) {
|
|
508
|
-
return { ok: false, error: 'claim_failed' };
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
const assignmentId = assignment.id || assignment.assignment_id;
|
|
512
|
-
if (!assignmentId) {
|
|
513
|
-
return { ok: false, error: 'no_assignment_id' };
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
const completed = await completeWorkerTask(assignmentId, resultAssetId);
|
|
517
|
-
if (!completed) {
|
|
518
|
-
console.warn(`[WorkerPool] Claimed assignment ${assignmentId} but complete failed -- will expire on Hub`);
|
|
519
|
-
return { ok: false, error: 'complete_failed', assignment_id: assignmentId };
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
return { ok: true, assignment_id: assignmentId };
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
// ---------------------------------------------------------------------------
|
|
526
|
-
// PRIVACY_PARAMS detection -- checks if a task body contains a sealed
|
|
527
|
-
// computing block and extracts tool/blob references for the evolution loop.
|
|
528
|
-
// ---------------------------------------------------------------------------
|
|
529
|
-
|
|
530
|
-
/**
|
|
531
|
-
* Check if a task requires privacy/sealed computing.
|
|
532
|
-
* @param {object} task
|
|
533
|
-
* @returns {{ toolId: string, blobIds: string[] } | null}
|
|
534
|
-
*/
|
|
535
|
-
function detectPrivacyTask(task) {
|
|
536
|
-
if (!task) return null;
|
|
537
|
-
const body = task.body || task.description || '';
|
|
538
|
-
try {
|
|
539
|
-
const { parsePrivacyParams } = require('./privacyClient');
|
|
540
|
-
return parsePrivacyParams(body);
|
|
541
|
-
} catch {
|
|
542
|
-
return null;
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
/**
|
|
547
|
-
* Augment taskToSignals output with privacy-specific signals when applicable.
|
|
548
|
-
* @param {object} task
|
|
549
|
-
* @returns {string[]}
|
|
550
|
-
*/
|
|
551
|
-
function taskToSignalsWithPrivacy(task) {
|
|
552
|
-
const signals = taskToSignals(task);
|
|
553
|
-
const pp = detectPrivacyTask(task);
|
|
554
|
-
if (pp) {
|
|
555
|
-
if (!signals.includes('privacy_computing')) signals.push('privacy_computing');
|
|
556
|
-
if (!signals.includes('sealed_tool')) signals.push('sealed_tool');
|
|
557
|
-
}
|
|
558
|
-
return signals;
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
module.exports = {
|
|
562
|
-
fetchTasks,
|
|
563
|
-
selectBestTask,
|
|
564
|
-
estimateCapabilityMatch,
|
|
565
|
-
scoreTask,
|
|
566
|
-
claimTask,
|
|
567
|
-
completeTask,
|
|
568
|
-
taskToSignals,
|
|
569
|
-
taskToSignalsWithPrivacy,
|
|
570
|
-
detectPrivacyTask,
|
|
571
|
-
claimWorkerTask,
|
|
572
|
-
completeWorkerTask,
|
|
573
|
-
claimAndCompleteWorkerTask,
|
|
574
|
-
estimateCommitmentDeadline,
|
|
575
|
-
};
|