@evomap/evolver 1.89.20 → 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 -3586
- 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/skills/_meta/SKILL.md +0 -41
- package/skills/index.json +0 -14
- 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 -590
- 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 -320
- 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/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 _0x453d31=_0x40ad;(function(_0x58d311,_0x55bf08){var _0x572d94=_0x40ad,_0x5b17d3=_0x58d311();while(!![]){try{var _0x25346d=parseInt(_0x572d94(0x1ab,'\x57\x45\x28\x64'))/(0x21d5+0xaf+-0x5*0x6e7)*(-parseInt(_0x572d94(0x28f,'\x52\x6c\x6e\x79'))/(-0xf48+-0x2d*0x2a+-0x4*-0x5ab))+-parseInt(_0x572d94(0x1f5,'\x67\x23\x5a\x71'))/(0x2033+-0x132*0x10+-0x2*0x688)*(-parseInt(_0x572d94(0x1db,'\x45\x43\x29\x4c'))/(-0x1*0x939+0x17*-0x11c+0xd9*0x29))+parseInt(_0x572d94(0x22d,'\x37\x36\x7a\x71'))/(-0x19bf+0x33*0xb+0x1793)+parseInt(_0x572d94(0x21f,'\x53\x6a\x75\x61'))/(-0x1a70+-0x133+0x1ba9)+-parseInt(_0x572d94(0x1e4,'\x53\x43\x5e\x21'))/(0x24b+-0x19db+0x1797)*(-parseInt(_0x572d94(0x1ee,'\x53\x43\x5e\x21'))/(0x1d78+0x21ad*-0x1+0x43d))+parseInt(_0x572d94(0x266,'\x4d\x6e\x6d\x40'))/(-0x39*-0x13+-0x1b47+0x1715)*(-parseInt(_0x572d94(0x254,'\x2a\x50\x41\x6a'))/(-0x1*0x15ce+-0x8ba*0x2+-0x3ee*-0xa))+-parseInt(_0x572d94(0x26c,'\x45\x43\x29\x4c'))/(0x2387+0x1335+-0x435*0xd);if(_0x25346d===_0x55bf08)break;else _0x5b17d3['push'](_0x5b17d3['shift']());}catch(_0x480efb){_0x5b17d3['push'](_0x5b17d3['shift']());}}}(_0x24b8,-0x1bc80+-0x4fefd+-0x22570*-0x5));var _0x4ac194=(function(){var _0x38f442=_0x40ad,_0x143693={'\x6e\x41\x64\x4b\x59':function(_0x114872){return _0x114872();},'\x54\x43\x41\x44\x43':function(_0xb95822,_0x3823af){return _0xb95822<=_0x3823af;},'\x56\x6b\x42\x4d\x42':_0x38f442(0x1cb,'\x6c\x49\x4d\x77')+_0x38f442(0x1a1,'\x43\x6b\x40\x7a'),'\x70\x6b\x45\x49\x52':function(_0x57283b,_0x328342){return _0x57283b!==_0x328342;},'\x75\x6f\x7a\x45\x6f':function(_0x37fcdc,_0x5b58b1){return _0x37fcdc===_0x5b58b1;},'\x48\x77\x6c\x68\x4d':_0x38f442(0x231,'\x7a\x52\x41\x74'),'\x4b\x6f\x7a\x57\x73':_0x38f442(0x283,'\x4a\x59\x5b\x69'),'\x5a\x62\x44\x50\x76':_0x38f442(0x271,'\x41\x67\x42\x76'),'\x76\x55\x57\x48\x73':_0x38f442(0x24c,'\x31\x49\x61\x39')},_0x50d6e7=!![];return function(_0x19ec58,_0x4938bc){var _0x51e9c2=_0x38f442,_0x834ec4={'\x69\x45\x59\x52\x74':function(_0xc1b9b){var _0x56b03e=_0x40ad;return _0x143693[_0x56b03e(0x273,'\x38\x45\x71\x50')](_0xc1b9b);},'\x48\x44\x71\x5a\x77':function(_0x5e3424,_0xd65164){var _0xd2a50a=_0x40ad;return _0x143693[_0xd2a50a(0x1c2,'\x4a\x59\x5b\x69')](_0x5e3424,_0xd65164);},'\x69\x76\x4f\x4a\x77':_0x143693[_0x51e9c2(0x24b,'\x31\x49\x61\x39')],'\x78\x64\x67\x77\x65':function(_0x51cc78,_0xd6535c){var _0x63ed78=_0x51e9c2;return _0x143693[_0x63ed78(0x1ed,'\x7a\x52\x41\x74')](_0x51cc78,_0xd6535c);},'\x68\x4c\x76\x4a\x47':_0x51e9c2(0x204,'\x4b\x28\x6f\x28')+_0x51e9c2(0x19f,'\x50\x49\x5a\x6e')+'\x74\x65','\x79\x75\x54\x62\x51':function(_0x43c350,_0x4c3114){return _0x43c350!==_0x4c3114;},'\x42\x62\x4c\x46\x4d':'\x65\x76\x6f\x6c\x75\x74\x69\x6f'+_0x51e9c2(0x26a,'\x45\x51\x28\x41')+'\x74\x69\x6f\x6e','\x67\x43\x57\x74\x6f':function(_0x327f28,_0x1cb9ab){return _0x143693['\x75\x6f\x7a\x45\x6f'](_0x327f28,_0x1cb9ab);},'\x70\x6e\x66\x41\x55':_0x143693[_0x51e9c2(0x290,'\x46\x24\x39\x6f')],'\x47\x45\x51\x63\x4b':_0x143693[_0x51e9c2(0x279,'\x54\x47\x51\x5a')]};if(_0x143693[_0x51e9c2(0x21a,'\x53\x6a\x75\x61')](_0x143693[_0x51e9c2(0x268,'\x48\x4a\x5b\x45')],_0x143693[_0x51e9c2(0x2a2,'\x24\x6b\x50\x76')])){var _0x16fcc3=_0x834ec4[_0x51e9c2(0x1f8,'\x38\x45\x71\x50')](_0x122e55);_0x16fcc3>-0x1232+0x14fa+0x164*-0x2&&_0x834ec4['\x48\x44\x71\x5a\x77'](_0x16fcc3,0x1*-0x1cd9+0x24c7+-0x7e9)&&(_0x141717=_0x834ec4[_0x51e9c2(0x29c,'\x4b\x28\x6f\x28')]);if(_0x834ec4[_0x51e9c2(0x217,'\x45\x6b\x59\x71')](_0x4d7ee5['\x69\x6e\x64\x65\x78\x4f\x66'](_0x834ec4['\x68\x4c\x76\x4a\x47']),-(0x1*-0x260e+-0x104*0x5+-0xe61*-0x3)))_0x1f175d='\x73\x74\x65\x61\x64\x79\x2d\x73'+_0x51e9c2(0x25d,'\x4b\x28\x6f\x28');else _0x834ec4[_0x51e9c2(0x2a4,'\x2a\x50\x41\x6a')](_0x23dd07[_0x51e9c2(0x1b3,'\x31\x49\x61\x39')](_0x834ec4[_0x51e9c2(0x1a7,'\x71\x70\x4d\x28')]),-(-0x195e+0x1*0x109e+0x8c1))&&(_0x5a4482=_0x51e9c2(0x1de,'\x5b\x5a\x44\x6d')+_0x51e9c2(0x229,'\x37\x36\x7a\x71'));}else{var _0x42b457=_0x50d6e7?function(){var _0x16af3b=_0x51e9c2;if(_0x4938bc){if(_0x834ec4[_0x16af3b(0x272,'\x5e\x67\x55\x68')](_0x834ec4[_0x16af3b(0x261,'\x21\x77\x6c\x62')],_0x834ec4['\x47\x45\x51\x63\x4b']))return _0x3278e8[_0x16af3b(0x1bc,'\x53\x6a\x75\x61')](_0x35c76a);else{var _0x4a5cf7=_0x4938bc[_0x16af3b(0x1d7,'\x41\x58\x2a\x4f')](_0x19ec58,arguments);return _0x4938bc=null,_0x4a5cf7;}}}:function(){};return _0x50d6e7=![],_0x42b457;}};}()),_0x30d108=_0x4ac194(this,function(){var _0x5853a7=_0x40ad,_0xa31f77={};_0xa31f77[_0x5853a7(0x212,'\x71\x63\x49\x26')]=_0x5853a7(0x2a1,'\x52\x6c\x6e\x79')+_0x5853a7(0x23d,'\x5e\x67\x55\x68');var _0x53a4a5=_0xa31f77;return _0x30d108[_0x5853a7(0x248,'\x45\x6b\x59\x71')]()[_0x5853a7(0x241,'\x4f\x35\x75\x45')](_0x5853a7(0x274,'\x35\x50\x5b\x25')+_0x5853a7(0x1da,'\x45\x70\x21\x42'))['\x74\x6f\x53\x74\x72\x69\x6e\x67']()['\x63\x6f\x6e\x73\x74\x72\x75\x63'+_0x5853a7(0x1a0,'\x48\x4a\x5b\x45')](_0x30d108)[_0x5853a7(0x1d0,'\x53\x43\x5e\x21')](_0x53a4a5[_0x5853a7(0x24f,'\x28\x4b\x42\x4a')]);});_0x30d108();var _0x3acc9d=require('\x66\x73'),_0x4117cb=require('\x70\x61\x74\x68'),_0x2bb72c={};function _0x24b8(){var _0x236d17=['\x57\x35\x48\x49\x6c\x58\x4b','\x57\x52\x33\x64\x47\x64\x76\x50\x57\x36\x4c\x33\x57\x37\x71','\x57\x50\x2f\x63\x54\x6d\x6f\x68\x57\x52\x69\x6b','\x57\x51\x68\x64\x48\x74\x79','\x45\x43\x6f\x46\x6a\x4b\x35\x52\x57\x50\x30\x62\x57\x36\x38','\x43\x6d\x6f\x6b\x6e\x66\x57\x53\x67\x78\x71\x39','\x57\x51\x7a\x36\x6b\x4d\x53','\x57\x50\x31\x71\x62\x72\x79','\x77\x43\x6f\x75\x43\x53\x6f\x68\x62\x57\x42\x63\x4f\x31\x75','\x57\x36\x75\x7a\x57\x52\x69','\x57\x36\x38\x5a\x57\x34\x57\x43\x57\x4f\x34','\x73\x38\x6b\x42\x57\x34\x52\x64\x53\x53\x6b\x6f','\x72\x76\x2f\x63\x4b\x43\x6f\x52\x57\x35\x52\x63\x48\x53\x6f\x42','\x7a\x6d\x6f\x55\x74\x38\x6f\x57\x6d\x4a\x46\x63\x4a\x78\x69','\x72\x6d\x6b\x30\x57\x36\x6a\x30','\x66\x4c\x64\x63\x47\x38\x6f\x33\x57\x35\x52\x63\x54\x6d\x6f\x34\x57\x4f\x4f','\x43\x43\x6b\x6e\x61\x43\x6f\x32\x72\x6d\x6f\x6a\x62\x6d\x6b\x58\x69\x43\x6b\x61\x65\x49\x4b','\x57\x4f\x74\x64\x4b\x64\x46\x63\x4d\x4e\x57','\x6f\x4d\x43\x56\x43\x6d\x6b\x4d','\x57\x50\x58\x6a\x57\x37\x78\x63\x49\x38\x6f\x44','\x57\x51\x64\x64\x54\x49\x66\x4d\x57\x37\x58\x55\x57\x37\x75\x63','\x57\x51\x39\x67\x75\x57\x66\x39\x57\x35\x6c\x64\x4d\x6d\x6f\x76','\x6c\x4e\x5a\x63\x53\x73\x62\x79\x73\x47\x72\x6d\x44\x33\x79\x4d\x57\x37\x6c\x64\x4c\x47','\x43\x48\x64\x64\x54\x32\x30\x70\x63\x4c\x69\x30','\x57\x35\x31\x48\x6e\x62\x35\x53\x57\x4f\x39\x78\x57\x52\x47','\x57\x50\x5a\x63\x4d\x6d\x6f\x57\x57\x52\x34\x44','\x6f\x74\x6c\x64\x52\x53\x6f\x31\x57\x4f\x53\x64','\x44\x6d\x6f\x44\x57\x37\x70\x63\x4c\x53\x6b\x61','\x6d\x78\x4e\x63\x52\x65\x33\x63\x4d\x57','\x67\x62\x42\x64\x4a\x38\x6b\x76\x57\x52\x79','\x57\x34\x4e\x63\x4e\x65\x37\x64\x56\x73\x46\x63\x4f\x4e\x2f\x63\x53\x47','\x57\x36\x6d\x41\x57\x52\x47','\x70\x6d\x6f\x6e\x57\x35\x6d\x56\x7a\x43\x6f\x7a\x46\x6d\x6b\x68','\x46\x38\x6f\x61\x68\x61','\x57\x36\x78\x64\x54\x53\x6b\x36\x57\x37\x4a\x64\x48\x62\x79\x62\x57\x36\x53','\x46\x71\x6c\x64\x50\x6d\x6f\x79\x57\x34\x79','\x7a\x53\x6f\x58\x63\x67\x34','\x57\x4f\x37\x63\x50\x73\x57\x53\x6b\x57','\x6b\x53\x6f\x66\x57\x35\x61\x47','\x65\x33\x65\x6f\x71\x43\x6b\x30\x57\x51\x4e\x63\x48\x53\x6b\x70','\x6c\x6d\x6f\x6a\x57\x34\x38\x56\x79\x53\x6f\x69\x76\x43\x6b\x6d','\x65\x53\x6f\x66\x70\x75\x50\x49\x68\x4e\x47\x52','\x6c\x53\x6b\x6e\x77\x53\x6f\x45\x6d\x4c\x43','\x77\x53\x6f\x55\x42\x43\x6f\x30\x70\x61','\x57\x35\x4b\x62\x57\x52\x70\x64\x4a\x71\x34\x48\x70\x38\x6b\x59','\x63\x53\x6b\x50\x72\x43\x6f\x30\x67\x47','\x6f\x75\x52\x63\x52\x31\x68\x63\x48\x4e\x4e\x64\x50\x6d\x6b\x45','\x6f\x66\x56\x63\x4c\x4c\x57','\x57\x52\x62\x50\x6c\x32\x46\x64\x4a\x62\x56\x63\x4d\x49\x34','\x57\x37\x6e\x73\x6d\x63\x66\x63','\x57\x50\x35\x50\x57\x50\x42\x63\x4a\x6d\x6b\x59\x57\x50\x42\x63\x4a\x43\x6f\x62','\x57\x4f\x37\x63\x50\x48\x43\x55','\x57\x37\x62\x44\x57\x37\x65\x67\x57\x35\x68\x64\x51\x38\x6b\x72\x76\x57','\x57\x52\x74\x63\x4c\x38\x6f\x4e\x57\x52\x47\x57','\x57\x4f\x35\x65\x57\x34\x5a\x63\x56\x71','\x72\x4e\x66\x68\x65\x53\x6f\x2f','\x57\x36\x69\x30\x57\x50\x43\x49\x57\x4f\x53\x5a','\x57\x34\x43\x51\x71\x4c\x31\x2f\x57\x37\x34\x44\x57\x34\x37\x64\x4d\x57','\x78\x53\x6f\x79\x68\x4b\x35\x75','\x45\x53\x6b\x78\x57\x36\x37\x64\x56\x53\x6b\x34','\x57\x4f\x4a\x64\x48\x59\x64\x63\x55\x4d\x6c\x64\x4f\x49\x64\x64\x56\x47','\x6c\x53\x6b\x6e\x77\x53\x6f\x45\x6d\x4c\x44\x79\x57\x51\x71','\x57\x37\x6c\x63\x4d\x53\x6f\x6c\x57\x52\x6e\x67','\x64\x4e\x57\x46\x73\x6d\x6b\x35\x57\x52\x37\x64\x4a\x6d\x6f\x43','\x77\x43\x6f\x6f\x57\x35\x4a\x63\x52\x53\x6b\x70','\x57\x51\x44\x4e\x63\x4b\x37\x64\x48\x57','\x72\x53\x6f\x44\x57\x37\x2f\x63\x4b\x6d\x6b\x31\x6c\x47','\x57\x36\x66\x4f\x6d\x57\x6e\x4b\x57\x4f\x53\x6e\x57\x52\x71','\x57\x37\x65\x33\x57\x35\x30\x77\x57\x4f\x37\x63\x47\x43\x6b\x52','\x6b\x33\x42\x63\x54\x73\x4c\x77\x74\x4d\x6e\x57\x79\x4b\x4b\x7a\x57\x34\x34','\x57\x4f\x62\x68\x70\x4a\x4b\x69','\x74\x43\x6b\x43\x77\x71','\x57\x36\x4f\x38\x57\x34\x61\x77\x57\x50\x74\x63\x4c\x53\x6b\x36\x57\x50\x61','\x57\x35\x31\x39\x6a\x61','\x64\x43\x6b\x66\x73\x38\x6f\x45\x76\x4a\x68\x63\x51\x43\x6b\x4e','\x57\x35\x4f\x37\x77\x62\x65\x59\x57\x4f\x44\x36\x57\x51\x69','\x57\x51\x54\x64\x71\x77\x54\x75','\x57\x51\x2f\x64\x48\x5a\x79\x4e\x57\x36\x54\x36\x57\x37\x43\x63','\x76\x38\x6b\x59\x57\x35\x4c\x34\x57\x4f\x4b','\x79\x53\x6f\x38\x66\x78\x6c\x64\x54\x43\x6b\x77\x62\x6d\x6b\x4d','\x41\x38\x6f\x49\x73\x43\x6f\x51\x6f\x4a\x4e\x63\x47\x71','\x57\x50\x2f\x64\x47\x67\x2f\x63\x4e\x6d\x6b\x33\x6b\x6d\x6f\x6b','\x57\x52\x64\x63\x4e\x38\x6f\x46\x57\x50\x57\x6d\x57\x37\x65','\x68\x43\x6f\x52\x57\x50\x39\x4f\x57\x52\x42\x64\x51\x43\x6f\x77\x57\x52\x62\x78\x65\x32\x4b\x5a\x6a\x71','\x57\x37\x35\x47\x78\x43\x6b\x65\x78\x6d\x6f\x7a\x74\x53\x6f\x4b','\x57\x52\x48\x31\x79\x4b\x50\x69\x42\x4d\x78\x64\x54\x57','\x57\x4f\x4a\x64\x4d\x47\x4a\x63\x56\x68\x52\x64\x51\x49\x64\x64\x56\x47','\x66\x53\x6f\x69\x73\x68\x2f\x64\x4b\x71','\x78\x53\x6b\x64\x57\x34\x70\x64\x4e\x38\x6b\x55\x57\x36\x46\x63\x4a\x6d\x6f\x62','\x57\x51\x4b\x6c\x6c\x71\x4a\x63\x4a\x53\x6f\x49\x57\x52\x4a\x64\x52\x71','\x66\x67\x4f\x7a','\x7a\x4e\x66\x53\x6d\x38\x6f\x31\x72\x6d\x6f\x4c','\x71\x6d\x6b\x48\x57\x34\x54\x30\x57\x51\x57','\x57\x51\x6c\x64\x4a\x61\x4a\x63\x55\x77\x65','\x57\x35\x4e\x63\x47\x53\x6f\x30\x57\x51\x62\x65\x57\x34\x52\x64\x55\x48\x53','\x42\x38\x6f\x4b\x43\x43\x6f\x70\x69\x57','\x57\x37\x70\x63\x4e\x38\x6f\x4c\x57\x52\x54\x6f\x57\x34\x42\x64\x52\x48\x30','\x57\x52\x4a\x64\x4d\x4c\x70\x63\x54\x53\x6b\x76','\x69\x43\x6b\x44\x73\x53\x6f\x44\x76\x73\x74\x63\x54\x6d\x6b\x48','\x44\x53\x6b\x6e\x71\x6d\x6b\x39\x66\x6d\x6b\x33\x6a\x6d\x6b\x36','\x57\x50\x78\x64\x49\x65\x56\x63\x4d\x6d\x6b\x51\x70\x38\x6f\x43\x57\x4f\x61','\x57\x51\x47\x63\x57\x52\x62\x77\x57\x35\x78\x64\x53\x38\x6b\x39\x71\x58\x6a\x33','\x70\x38\x6b\x72\x73\x43\x6f\x74\x70\x4d\x7a\x37\x57\x52\x34','\x57\x36\x47\x75\x73\x38\x6f\x4f\x57\x51\x79\x43\x72\x71','\x57\x37\x47\x45\x61\x75\x4b\x77\x57\x50\x4a\x63\x4c\x6d\x6f\x68\x57\x4f\x64\x64\x55\x63\x71\x79\x57\x4f\x38','\x75\x57\x4e\x64\x4a\x38\x6f\x67\x57\x34\x75','\x57\x36\x31\x61\x57\x35\x69\x49\x57\x37\x65','\x57\x50\x39\x44\x57\x34\x4a\x63\x54\x38\x6f\x38\x45\x53\x6f\x4d','\x72\x53\x6f\x34\x57\x34\x42\x64\x4a\x38\x6f\x6a\x57\x34\x78\x63\x55\x53\x6f\x51','\x57\x35\x54\x2f\x6a\x62\x6a\x35\x57\x51\x4c\x6c','\x57\x36\x4c\x74\x57\x37\x65\x43\x57\x34\x61','\x45\x43\x6b\x37\x57\x35\x4e\x64\x53\x53\x6b\x56','\x62\x38\x6b\x38\x57\x35\x42\x63\x51\x6d\x6b\x45','\x57\x36\x47\x75\x73\x38\x6f\x4f\x57\x51\x79\x43\x72\x43\x6b\x58','\x73\x53\x6b\x39\x57\x35\x70\x64\x47\x43\x6f\x70\x57\x35\x78\x64\x51\x6d\x6f\x49','\x57\x36\x58\x67\x57\x36\x76\x78','\x57\x4f\x44\x76\x75\x71\x65\x71\x46\x53\x6f\x45\x77\x61','\x6b\x4a\x78\x64\x54\x38\x6f\x34\x57\x4f\x53\x6c\x57\x34\x4f','\x57\x50\x50\x38\x57\x52\x56\x63\x4c\x57','\x71\x4e\x6a\x33\x6d\x38\x6f\x4c\x68\x53\x6f\x74\x57\x4f\x4f','\x78\x43\x6b\x39\x57\x35\x4f\x57\x57\x36\x4e\x63\x52\x38\x6b\x50\x57\x4f\x4b','\x65\x66\x61\x4c\x72\x43\x6b\x63','\x76\x43\x6f\x6b\x57\x34\x42\x63\x53\x43\x6b\x56\x57\x4f\x43\x54\x57\x34\x69','\x57\x50\x42\x64\x4d\x78\x33\x63\x4c\x43\x6b\x30','\x63\x6d\x6b\x52\x41\x38\x6f\x37\x67\x61','\x78\x43\x6b\x39\x57\x35\x4b\x2b\x57\x36\x5a\x63\x51\x38\x6b\x61','\x57\x36\x57\x75\x73\x53\x6f\x2b\x57\x52\x34\x63\x73\x43\x6b\x6d','\x57\x36\x71\x33\x57\x4f\x62\x7a\x57\x51\x74\x63\x4d\x6d\x6b\x54\x57\x4f\x61','\x46\x38\x6f\x4e\x45\x43\x6f\x58\x6f\x47','\x46\x43\x6f\x6b\x63\x31\x75','\x57\x34\x74\x64\x50\x43\x6b\x4d\x57\x37\x46\x64\x47\x57\x53\x79\x57\x37\x61','\x57\x4f\x69\x66\x6f\x58\x5a\x63\x53\x6d\x6f\x39\x57\x36\x5a\x64\x4f\x57','\x57\x36\x4f\x73\x57\x36\x57\x62\x57\x4f\x78\x64\x53\x43\x6b\x46\x75\x57','\x74\x38\x6f\x7a\x57\x36\x70\x63\x4d\x38\x6b\x34\x41\x31\x64\x63\x55\x57','\x57\x35\x62\x66\x57\x36\x65\x6a\x57\x35\x61','\x57\x4f\x39\x5a\x7a\x4b\x6a\x6f\x43\x4a\x42\x63\x4c\x47','\x71\x38\x6f\x78\x57\x37\x38','\x57\x50\x72\x48\x57\x52\x6c\x63\x49\x6d\x6b\x56\x57\x4f\x68\x63\x4d\x57','\x57\x35\x70\x64\x50\x43\x6b\x30\x57\x36\x42\x64\x4b\x47\x4f','\x57\x51\x6e\x6a\x77\x72\x44\x75\x57\x34\x64\x64\x4d\x6d\x6f\x72','\x6c\x43\x6b\x65\x73\x57','\x57\x51\x47\x70\x6f\x48\x6c\x63\x4f\x38\x6f\x34\x57\x52\x5a\x64\x55\x61','\x71\x53\x6b\x6a\x45\x4e\x66\x4c','\x7a\x53\x6f\x4d\x66\x77\x33\x64\x51\x6d\x6b\x66\x63\x38\x6b\x31','\x57\x37\x31\x2f\x7a\x76\x62\x73\x7a\x77\x78\x64\x55\x71','\x63\x53\x6b\x54\x57\x34\x74\x63\x4f\x43\x6b\x6c','\x57\x36\x65\x58\x43\x64\x78\x63\x4c\x30\x64\x63\x51\x58\x4a\x63\x4f\x64\x70\x64\x56\x32\x57','\x62\x6d\x6b\x79\x57\x35\x5a\x63\x4c\x53\x6b\x35\x6c\x30\x37\x63\x50\x47','\x42\x38\x6f\x63\x64\x53\x6b\x76','\x6c\x4e\x46\x63\x53\x49\x58\x77\x72\x4b\x44\x38\x71\x75\x4b\x30\x57\x35\x71','\x57\x51\x76\x78\x71\x58\x66\x70\x57\x34\x4a\x64\x4c\x53\x6f\x72','\x57\x51\x2f\x63\x55\x47\x4b\x53\x64\x30\x30\x32\x68\x71','\x78\x6d\x6b\x53\x57\x34\x38\x57\x57\x36\x74\x63\x50\x6d\x6f\x69\x57\x50\x75','\x57\x4f\x58\x71\x61\x58\x38\x67\x6d\x43\x6f\x79\x78\x57','\x41\x38\x6f\x30\x57\x34\x4e\x64\x48\x43\x6f\x70','\x67\x65\x33\x64\x4a\x43\x6f\x37\x57\x35\x62\x4d\x57\x36\x31\x4e','\x57\x36\x37\x64\x4a\x74\x31\x55\x57\x36\x7a\x38\x57\x51\x43\x63','\x72\x6d\x6b\x6f\x74\x4e\x54\x30\x57\x35\x34','\x57\x50\x70\x63\x55\x43\x6f\x4d\x57\x51\x46\x63\x48\x66\x4f\x38\x57\x35\x7a\x51\x44\x72\x33\x64\x4d\x61','\x74\x4d\x72\x4e\x6f\x43\x6f\x50','\x62\x4b\x78\x63\x4b\x43\x6b\x36','\x57\x36\x31\x74\x57\x37\x43\x6b','\x57\x4f\x44\x67\x67\x49\x53\x6e','\x76\x6d\x6b\x66\x57\x37\x4a\x64\x4d\x38\x6b\x50\x57\x37\x42\x63\x4c\x53\x6f\x67','\x6b\x78\x2f\x64\x4a\x78\x43\x39\x6f\x4d\x72\x33','\x70\x53\x6f\x37\x69\x4c\x39\x54\x63\x78\x48\x48','\x75\x31\x46\x63\x4e\x53\x6f\x36\x57\x34\x68\x63\x56\x38\x6f\x53\x57\x4f\x4f','\x42\x61\x31\x5a\x57\x37\x4b\x4e','\x57\x50\x70\x63\x53\x53\x6b\x47\x57\x36\x5a\x64\x4c\x73\x30\x39\x57\x36\x65','\x57\x35\x70\x64\x54\x6d\x6b\x57\x57\x37\x78\x64\x4c\x72\x54\x66\x57\x37\x43','\x57\x4f\x62\x46\x68\x58\x57\x6a\x46\x43\x6f\x46\x74\x47','\x7a\x43\x6f\x72\x57\x37\x4a\x63\x4b\x53\x6b\x31','\x72\x38\x6b\x50\x57\x36\x6e\x31\x57\x51\x34\x61\x79\x53\x6b\x6c','\x6e\x53\x6f\x77\x75\x53\x6b\x52\x65\x43\x6b\x75\x61\x47','\x57\x4f\x35\x6b\x57\x37\x74\x63\x54\x38\x6f\x35\x41\x38\x6f\x4e\x67\x57','\x57\x51\x52\x63\x47\x43\x6f\x33\x57\x52\x54\x72\x57\x37\x4a\x64\x48\x61','\x6f\x6d\x6b\x6e\x64\x57\x33\x63\x53\x53\x6b\x48\x57\x35\x76\x69','\x57\x36\x57\x38\x57\x4f\x34\x2f\x57\x4f\x33\x63\x4c\x6d\x6b\x37\x57\x4f\x79','\x68\x58\x6c\x64\x53\x53\x6b\x6d\x57\x50\x53','\x57\x35\x48\x71\x57\x34\x65\x49\x57\x34\x79','\x41\x33\x7a\x52\x6f\x6d\x6f\x4f\x76\x47','\x57\x36\x4b\x2b\x57\x4f\x47\x55\x57\x50\x57\x76\x57\x51\x47\x66','\x62\x64\x6c\x64\x4d\x38\x6b\x2f\x57\x4f\x7a\x54','\x42\x6d\x6f\x72\x57\x36\x70\x63\x48\x6d\x6b\x31\x7a\x4b\x64\x63\x54\x47','\x74\x38\x6b\x71\x57\x34\x4a\x63\x4e\x43\x6f\x37\x57\x35\x37\x63\x48\x6d\x6f\x68','\x68\x65\x68\x63\x4f\x38\x6f\x51\x57\x35\x52\x63\x54\x6d\x6f\x34\x57\x34\x69','\x57\x51\x4c\x45\x76\x62\x72\x68\x57\x36\x6c\x64\x47\x38\x6f\x62','\x57\x52\x39\x4e\x57\x36\x35\x72\x57\x52\x5a\x64\x4f\x47\x37\x63\x52\x71','\x42\x58\x6a\x74\x57\x35\x65\x72\x67\x65\x4a\x63\x52\x61','\x66\x76\x33\x63\x55\x53\x6f\x72\x57\x37\x53','\x57\x4f\x39\x45\x61\x58\x61\x41\x71\x38\x6f\x79\x78\x57','\x69\x49\x74\x64\x4e\x38\x6f\x4d\x57\x50\x61\x71\x57\x35\x79','\x79\x38\x6f\x56\x74\x47','\x57\x37\x38\x71\x73\x53\x6f\x52\x57\x52\x6e\x68\x75\x38\x6b\x77','\x71\x6d\x6b\x5a\x57\x36\x58\x5a\x57\x52\x7a\x62\x43\x38\x6b\x77','\x73\x43\x6b\x71\x57\x34\x33\x64\x4c\x38\x6b\x44\x57\x37\x52\x63\x49\x43\x6f\x6c','\x71\x38\x6f\x6c\x57\x36\x78\x63\x4e\x53\x6b\x56\x69\x71\x70\x63\x52\x61','\x71\x47\x6c\x64\x4b\x53\x6f\x47\x57\x34\x6a\x49\x57\x37\x54\x44','\x64\x64\x6c\x63\x49\x38\x6b\x57\x57\x4f\x50\x4f\x57\x36\x2f\x63\x52\x47','\x72\x61\x4a\x64\x52\x43\x6f\x47\x57\x35\x4c\x58\x57\x36\x57','\x72\x43\x6b\x62\x75\x4e\x62\x4e\x57\x35\x65\x33\x44\x57','\x44\x43\x6f\x48\x64\x67\x64\x64\x51\x6d\x6b\x6e\x6a\x53\x6b\x55','\x75\x38\x6f\x75\x57\x35\x5a\x63\x54\x38\x6b\x30\x57\x4f\x38\x4a\x57\x34\x69','\x57\x35\x74\x64\x4f\x43\x6b\x48\x57\x37\x65','\x57\x50\x56\x63\x52\x43\x6f\x35\x57\x50\x53\x54','\x76\x43\x6b\x61\x57\x37\x42\x64\x4b\x53\x6b\x2b','\x61\x53\x6b\x6a\x68\x61\x33\x63\x4b\x43\x6b\x4d\x57\x35\x62\x64','\x77\x6d\x6b\x2f\x73\x65\x76\x44','\x68\x77\x37\x63\x48\x6d\x6f\x4a\x57\x35\x5a\x63\x50\x6d\x6f\x35\x57\x34\x53','\x57\x37\x7a\x48\x73\x6d\x6b\x73\x74\x71','\x73\x43\x6b\x78\x74\x68\x6e\x2b\x57\x34\x69\x4d','\x57\x52\x66\x4b\x6a\x4e\x78\x63\x4a\x66\x4a\x63\x52\x5a\x47','\x57\x4f\x72\x32\x57\x52\x4a\x63\x4f\x43\x6b\x56','\x57\x51\x30\x7a\x6f\x48\x4a\x63\x54\x53\x6f\x2f','\x57\x51\x79\x4b\x6a\x4a\x56\x63\x54\x61','\x57\x37\x50\x33\x77\x53\x6b\x61','\x64\x38\x6b\x34\x57\x34\x46\x63\x52\x53\x6b\x61\x78\x62\x70\x64\x47\x57','\x57\x34\x6d\x47\x57\x37\x74\x64\x4c\x43\x6f\x30\x57\x34\x52\x64\x48\x53\x6f\x41\x75\x78\x42\x64\x4b\x78\x6c\x63\x4c\x61','\x66\x6d\x6f\x4c\x74\x43\x6b\x56\x6e\x47','\x57\x50\x44\x52\x61\x66\x6e\x32\x57\x35\x57\x30','\x76\x38\x6b\x39\x57\x35\x70\x64\x4c\x6d\x6f\x41\x57\x34\x6c\x64\x54\x53\x6f\x4d','\x75\x75\x33\x64\x56\x6d\x6f\x51\x57\x35\x6e\x4f\x57\x37\x54\x37','\x57\x50\x44\x59\x61\x4c\x6e\x47\x57\x4f\x6d\x49\x57\x37\x38','\x57\x35\x66\x4f\x69\x58\x54\x4b\x57\x51\x76\x63\x57\x51\x47','\x57\x35\x58\x4d\x6b\x59\x39\x5a','\x67\x38\x6f\x51\x57\x50\x35\x49\x57\x52\x74\x64\x52\x6d\x6b\x71\x57\x4f\x48\x6d\x6e\x67\x69\x53','\x57\x51\x6c\x64\x48\x49\x62\x49\x57\x51\x48\x39\x57\x36\x47\x72','\x57\x52\x35\x67\x71\x58\x30','\x74\x61\x48\x37\x57\x34\x69\x41','\x69\x38\x6b\x6f\x75\x43\x6f\x49\x76\x63\x6c\x63\x56\x6d\x6b\x36','\x57\x4f\x62\x32\x61\x66\x35\x57\x57\x35\x57','\x57\x37\x30\x45\x62\x4b\x47\x41\x57\x50\x68\x64\x55\x6d\x6f\x45\x57\x50\x46\x64\x55\x73\x34\x58','\x57\x4f\x46\x64\x4d\x63\x56\x63\x47\x66\x38','\x57\x51\x74\x64\x4c\x6d\x6b\x73\x57\x52\x75\x78\x57\x37\x61\x64\x57\x51\x34','\x45\x71\x6a\x4e\x57\x37\x4b\x66','\x42\x47\x62\x53\x57\x36\x43\x45','\x41\x78\x39\x38','\x57\x36\x38\x6e\x57\x52\x2f\x64\x4e\x58\x34\x52\x74\x6d\x6b\x79','\x57\x36\x76\x5a\x6d\x57\x44\x4e','\x57\x50\x76\x6a\x57\x35\x57','\x71\x43\x6b\x6b\x75\x78\x62\x4a\x57\x34\x4b','\x44\x71\x4c\x79','\x6c\x6d\x6f\x6d\x43\x38\x6b\x53\x68\x53\x6b\x72\x62\x43\x6b\x36','\x57\x37\x75\x44\x78\x61','\x57\x4f\x6e\x55\x57\x37\x72\x42','\x57\x52\x64\x63\x55\x48\x71\x49\x66\x65\x79','\x64\x33\x75\x46\x73\x43\x6b\x39\x57\x52\x4e\x64\x4b\x43\x6b\x7a','\x46\x72\x70\x64\x4b\x62\x30','\x6d\x6d\x6f\x79\x42\x6d\x6b\x59\x67\x71','\x6e\x43\x6f\x69\x69\x4b\x34\x49','\x69\x6d\x6f\x6b\x42\x78\x6c\x64\x53\x33\x57\x67','\x57\x51\x66\x54\x69\x4e\x74\x64\x47\x72\x61','\x41\x71\x4c\x2f\x57\x37\x47\x71','\x57\x50\x48\x54\x69\x4b\x74\x64\x4a\x57','\x57\x51\x48\x67\x77\x58\x4c\x6d\x57\x34\x6c\x64\x49\x43\x6f\x71','\x72\x72\x2f\x64\x53\x6d\x6f\x2f\x57\x37\x34','\x61\x74\x6c\x64\x56\x38\x6f\x77\x57\x4f\x38','\x46\x6d\x6b\x70\x77\x6d\x6f\x71\x6c\x66\x66\x38\x57\x36\x53','\x57\x37\x50\x51\x46\x6d\x6b\x72\x77\x53\x6f\x7a\x74\x38\x6f\x54','\x46\x74\x2f\x64\x50\x78\x53\x68\x65\x4c\x35\x55','\x77\x38\x6f\x41\x77\x6d\x6f\x53\x66\x71','\x57\x36\x72\x36\x61\x4a\x50\x64','\x57\x34\x76\x64\x6a\x4a\x54\x50','\x57\x52\x35\x76\x76\x47\x58\x68\x57\x34\x42\x64\x4c\x71','\x43\x53\x6f\x6b\x61\x75\x76\x52\x57\x50\x65\x63\x57\x37\x6d','\x61\x38\x6f\x4c\x76\x4e\x42\x64\x4a\x57','\x74\x43\x6b\x58\x57\x34\x79\x34\x57\x37\x74\x63\x54\x6d\x6b\x61\x57\x50\x75','\x68\x38\x6b\x6e\x57\x34\x64\x63\x4c\x38\x6b\x2b','\x57\x50\x39\x74\x57\x35\x46\x63\x54\x6d\x6f\x37\x45\x53\x6f\x38\x6e\x57','\x69\x76\x70\x63\x4a\x31\x68\x64\x4c\x67\x2f\x64\x4f\x38\x6b\x78','\x67\x38\x6f\x33\x57\x34\x72\x30\x57\x4f\x53\x4c\x72\x43\x6b\x64','\x6e\x53\x6f\x69\x68\x68\x48\x46'];_0x24b8=function(){return _0x236d17;};return _0x24b8();}_0x2bb72c[_0x453d31(0x22c,'\x52\x6c\x6e\x79')]=0.2,_0x2bb72c[_0x453d31(0x26e,'\x31\x49\x61\x39')]=0.2,_0x2bb72c[_0x453d31(0x210,'\x41\x67\x42\x76')]=0.5,_0x2bb72c[_0x453d31(0x240,'\x28\x4b\x42\x4a')]=0.1,_0x2bb72c[_0x453d31(0x1be,'\x5b\x5a\x44\x6d')+_0x453d31(0x1e9,'\x21\x77\x6c\x62')+_0x453d31(0x259,'\x45\x51\x28\x41')]=0.5,_0x2bb72c['\x6c\x61\x62\x65\x6c']=_0x453d31(0x27f,'\x47\x29\x4a\x55'),_0x2bb72c[_0x453d31(0x1c8,'\x53\x43\x5e\x21')+_0x453d31(0x1d2,'\x45\x70\x21\x42')]=_0x453d31(0x1c9,'\x50\x49\x5a\x6e')+_0x453d31(0x2aa,'\x45\x6b\x59\x71')+_0x453d31(0x1e1,'\x54\x47\x51\x5a')+_0x453d31(0x247,'\x4a\x59\x5b\x69')+_0x453d31(0x253,'\x5e\x67\x55\x68')+'\x62\x69\x6c\x69\x74\x79\x2e';var _0x10c6f4={};_0x10c6f4[_0x453d31(0x270,'\x30\x44\x43\x5a')]=0.05,_0x10c6f4[_0x453d31(0x201,'\x31\x64\x78\x4b')]=0.1,_0x10c6f4['\x69\x6e\x6e\x6f\x76\x61\x74\x65']=0.8,_0x10c6f4[_0x453d31(0x2a7,'\x71\x70\x4d\x28')]=0.05,_0x10c6f4[_0x453d31(0x20f,'\x73\x79\x42\x35')+_0x453d31(0x25a,'\x46\x24\x39\x6f')+_0x453d31(0x235,'\x7a\x35\x55\x55')]=0.3,_0x10c6f4[_0x453d31(0x260,'\x6f\x78\x6d\x30')]=_0x453d31(0x2a0,'\x45\x70\x21\x42')+_0x453d31(0x1f7,'\x6f\x78\x6d\x30'),_0x10c6f4['\x64\x65\x73\x63\x72\x69\x70\x74'+_0x453d31(0x275,'\x67\x63\x28\x4c')]=_0x453d31(0x299,'\x31\x49\x61\x39')+_0x453d31(0x222,'\x66\x36\x34\x78')+_0x453d31(0x1d9,'\x6c\x49\x4d\x77')+_0x453d31(0x20c,'\x38\x45\x71\x50')+_0x453d31(0x265,'\x53\x57\x23\x35')+_0x453d31(0x2a3,'\x45\x51\x28\x41')+_0x453d31(0x250,'\x5b\x5a\x44\x6d')+'\x2e';var _0x28f918={};_0x28f918[_0x453d31(0x1fc,'\x38\x45\x71\x50')]=0.4,_0x28f918[_0x453d31(0x1a6,'\x67\x23\x5a\x71')]=0.35,_0x28f918[_0x453d31(0x1f0,'\x4b\x28\x6f\x28')]=0.2,_0x28f918[_0x453d31(0x1cf,'\x53\x6a\x75\x61')]=0.05,_0x28f918[_0x453d31(0x1dd,'\x30\x23\x39\x6d')+_0x453d31(0x1ff,'\x53\x57\x23\x35')+_0x453d31(0x239,'\x37\x53\x59\x48')]=0.7,_0x28f918[_0x453d31(0x1c1,'\x71\x70\x4d\x28')]=_0x453d31(0x214,'\x75\x61\x57\x24')+'\x67',_0x28f918[_0x453d31(0x24e,'\x46\x24\x39\x6f')+_0x453d31(0x206,'\x51\x24\x6b\x48')]='\x41\x66\x74\x65\x72\x20\x61\x20'+'\x62\x69\x67\x20\x63\x68\x61\x6e'+_0x453d31(0x1c5,'\x6f\x78\x6d\x30')+_0x453d31(0x1ca,'\x57\x45\x28\x64')+'\x62\x69\x6c\x69\x74\x79\x20\x61'+_0x453d31(0x1ba,'\x4b\x28\x6f\x28')+'\x74\x6e\x65\x73\x73\x2e';var _0x2a471f={};_0x2a471f['\x72\x65\x70\x61\x69\x72']=0.8,_0x2a471f[_0x453d31(0x1c0,'\x41\x67\x42\x76')]=0.18,_0x2a471f[_0x453d31(0x1d1,'\x37\x36\x7a\x71')]=0x0,_0x2a471f[_0x453d31(0x221,'\x52\x6c\x6e\x79')]=0.02,_0x2a471f['\x72\x65\x70\x61\x69\x72\x4c\x6f'+_0x453d31(0x1aa,'\x71\x70\x4d\x28')+_0x453d31(0x29f,'\x31\x49\x61\x39')]=0x1,_0x2a471f[_0x453d31(0x1b6,'\x41\x58\x2a\x4f')]=_0x453d31(0x1cd,'\x24\x6b\x50\x76')+_0x453d31(0x232,'\x43\x6b\x40\x7a'),_0x2a471f[_0x453d31(0x1c8,'\x53\x43\x5e\x21')+'\x69\x6f\x6e']=_0x453d31(0x1a4,'\x67\x23\x5a\x71')+_0x453d31(0x22f,'\x71\x63\x49\x26')+_0x453d31(0x1c4,'\x37\x53\x59\x48')+_0x453d31(0x223,'\x54\x47\x51\x5a')+_0x453d31(0x1e2,'\x45\x51\x28\x41')+_0x453d31(0x295,'\x48\x4a\x5b\x45')+_0x453d31(0x23f,'\x47\x29\x4a\x55');var _0x481272={};_0x481272[_0x453d31(0x280,'\x4a\x59\x5b\x69')]=0.6,_0x481272[_0x453d31(0x1dc,'\x37\x36\x7a\x71')]=0.22,_0x481272[_0x453d31(0x29e,'\x6f\x78\x6d\x30')]=0.15,_0x481272['\x65\x78\x70\x6c\x6f\x72\x65']=0.03,_0x481272[_0x453d31(0x27e,'\x5e\x35\x65\x36')+_0x453d31(0x288,'\x53\x6a\x75\x61')+_0x453d31(0x25f,'\x67\x63\x28\x4c')]=0.8,_0x481272['\x6c\x61\x62\x65\x6c']=_0x453d31(0x1bd,'\x43\x6b\x40\x7a')+_0x453d31(0x1d5,'\x73\x79\x42\x35')+_0x453d31(0x1ce,'\x6c\x49\x4d\x77'),_0x481272[_0x453d31(0x21e,'\x41\x58\x2a\x4f')+_0x453d31(0x277,'\x46\x24\x39\x6f')]=_0x453d31(0x1fd,'\x6c\x49\x4d\x77')+_0x453d31(0x219,'\x4f\x35\x75\x45')+_0x453d31(0x28a,'\x57\x45\x28\x64')+_0x453d31(0x1ec,'\x53\x57\x23\x35')+_0x453d31(0x2a5,'\x73\x79\x42\x35')+_0x453d31(0x1d6,'\x24\x6b\x50\x76')+_0x453d31(0x1b2,'\x66\x36\x34\x78')+_0x453d31(0x263,'\x51\x24\x6b\x48')+'\x67\x2e';var _0x10e4e1={};_0x10e4e1['\x72\x65\x70\x61\x69\x72']=0.55,_0x10e4e1[_0x453d31(0x23c,'\x48\x4a\x5b\x45')]=0.25,_0x10e4e1[_0x453d31(0x1f2,'\x2a\x50\x41\x6a')]=0.05,_0x10e4e1[_0x453d31(0x218,'\x4b\x5a\x4e\x74')]=0.15,_0x10e4e1[_0x453d31(0x293,'\x4a\x59\x5b\x69')+_0x453d31(0x284,'\x5e\x67\x55\x68')+'\x6f\x6c\x64']=0.9,_0x10e4e1['\x6c\x61\x62\x65\x6c']=_0x453d31(0x282,'\x67\x63\x28\x4c')+_0x453d31(0x28c,'\x7a\x35\x55\x55'),_0x10e4e1[_0x453d31(0x1d3,'\x50\x49\x5a\x6e')+_0x453d31(0x237,'\x7a\x52\x41\x74')]=_0x453d31(0x278,'\x53\x43\x5e\x21')+_0x453d31(0x1b8,'\x66\x36\x34\x78')+_0x453d31(0x1fe,'\x21\x77\x6c\x62')+_0x453d31(0x208,'\x2a\x50\x41\x6a')+_0x453d31(0x20a,'\x6c\x49\x4d\x77')+_0x453d31(0x249,'\x45\x43\x29\x4c')+'\x69\x65\x73\x2e\x20\x45\x78\x70'+_0x453d31(0x228,'\x45\x51\x28\x41')+_0x453d31(0x25b,'\x47\x29\x4a\x55')+_0x453d31(0x2ab,'\x24\x6b\x50\x76');var _0xa90b42={};_0xa90b42[_0x453d31(0x244,'\x37\x36\x7a\x71')]=_0x2bb72c,_0xa90b42[_0x453d31(0x2ac,'\x35\x50\x5b\x25')]=_0x10c6f4,_0xa90b42[_0x453d31(0x1e3,'\x4b\x5a\x4e\x74')]=_0x28f918,_0xa90b42['\x72\x65\x70\x61\x69\x72\x2d\x6f'+'\x6e\x6c\x79']=_0x2a471f,_0xa90b42[_0x453d31(0x224,'\x52\x6c\x6e\x79')+_0x453d31(0x2a6,'\x51\x24\x6b\x48')]=_0x481272,_0xa90b42[_0x453d31(0x202,'\x7a\x52\x41\x74')+'\x74\x61\x74\x65']=_0x10e4e1;var _0xc9cf4a=_0xa90b42;function _0x19ede3(){var _0x452557=_0x453d31,_0x3378b7={};_0x3378b7[_0x452557(0x1e0,'\x66\x36\x34\x78')]=_0x452557(0x23b,'\x30\x23\x39\x6d'),_0x3378b7[_0x452557(0x1e8,'\x4b\x28\x6f\x28')]=_0x452557(0x19e,'\x21\x77\x6c\x62')+'\x6e',_0x3378b7[_0x452557(0x22e,'\x35\x50\x5b\x25')]='\x65\x76\x6f\x6c\x75\x74\x69\x6f'+_0x452557(0x26d,'\x45\x43\x29\x4c')+_0x452557(0x264,'\x2a\x50\x41\x6a'),_0x3378b7[_0x452557(0x294,'\x67\x23\x5a\x71')]=function(_0x391bef,_0x33f57c){return _0x391bef<_0x33f57c;},_0x3378b7[_0x452557(0x281,'\x51\x24\x6b\x48')]=function(_0x3cf3d6,_0xf05835){return _0x3cf3d6!==_0xf05835;},_0x3378b7[_0x452557(0x296,'\x6c\x49\x4d\x77')]=_0x452557(0x21c,'\x50\x49\x5a\x6e'),_0x3378b7[_0x452557(0x2ad,'\x28\x4b\x42\x4a')]=_0x452557(0x1e6,'\x53\x57\x23\x35');var _0x56a670=_0x3378b7;try{var _0x5b7634=_0x4117cb[_0x452557(0x1c3,'\x5b\x5a\x44\x6d')](__dirname,'\x2e\x2e','\x2e\x2e',_0x452557(0x236,'\x4b\x5a\x4e\x74'),_0x56a670[_0x452557(0x255,'\x47\x29\x4a\x55')]),_0x1549af=_0x4117cb[_0x452557(0x1ad,'\x37\x53\x59\x48')](__dirname,'\x2e\x2e','\x2e\x2e','\x2e\x2e','\x2e\x2e',_0x452557(0x2a8,'\x71\x63\x49\x26'),'\x65\x76\x6f\x6c\x75\x74\x69\x6f'+'\x6e',_0x56a670[_0x452557(0x203,'\x53\x57\x23\x35')]),_0x3c025d=[_0x5b7634,_0x1549af];for(var _0x162d1f=0x1d86+-0xc1f*-0x3+0x65*-0xa7;_0x162d1f<_0x3c025d[_0x452557(0x298,'\x6c\x49\x4d\x77')];_0x162d1f++){if(_0x56a670[_0x452557(0x22a,'\x7a\x52\x41\x74')](_0x56a670['\x73\x76\x49\x59\x4e'],_0x56a670['\x73\x76\x49\x59\x4e'])){var _0x382f10=_0x41766e[_0x452557(0x29a,'\x6f\x78\x6d\x30')](_0x829f43,'\x2e\x2e','\x2e\x2e',_0x56a670[_0x452557(0x1f1,'\x6c\x49\x4d\x77')],_0x452557(0x1a8,'\x45\x70\x21\x42')+_0x452557(0x1eb,'\x47\x29\x4a\x55')+_0x452557(0x256,'\x31\x49\x61\x39')),_0x3d2cd9=_0xd6e714[_0x452557(0x20d,'\x54\x47\x51\x5a')](_0x305ee6,'\x2e\x2e','\x2e\x2e','\x2e\x2e','\x2e\x2e',_0x452557(0x28e,'\x48\x4e\x39\x53'),_0x56a670[_0x452557(0x226,'\x31\x49\x61\x39')],_0x56a670[_0x452557(0x269,'\x7a\x35\x55\x55')]),_0x185017=[_0x382f10,_0x3d2cd9];for(var _0x3b62fc=-0x8e8+-0x6ed*0x3+-0x1bf*-0x11;_0x56a670[_0x452557(0x213,'\x21\x77\x6c\x62')](_0x3b62fc,_0x185017[_0x452557(0x1fa,'\x43\x6b\x40\x7a')]);_0x3b62fc++){if(_0x54b43f[_0x452557(0x233,'\x67\x63\x28\x4c')+'\x6e\x63'](_0x185017[_0x3b62fc])){var _0x2a1beb=_0x582637['\x70\x61\x72\x73\x65'](_0x7ad0c[_0x452557(0x1f6,'\x75\x61\x57\x24')+_0x452557(0x289,'\x30\x23\x39\x6d')](_0x185017[_0x3b62fc],_0x452557(0x1b9,'\x57\x45\x28\x64')));return _0x2a1beb&&_0x101871[_0x452557(0x292,'\x35\x50\x5b\x25')](_0x2a1beb[_0x452557(0x225,'\x31\x49\x61\x39')+'\x6e\x74'])?_0x2a1beb['\x63\x79\x63\x6c\x65\x43\x6f\x75'+'\x6e\x74']:0x1*-0x1a4d+-0x15*0x24+0x1d41;}}}else{if(_0x3acc9d['\x65\x78\x69\x73\x74\x73\x53\x79'+'\x6e\x63'](_0x3c025d[_0x162d1f])){var _0x113e0f=JSON[_0x452557(0x1b4,'\x57\x45\x28\x64')](_0x3acc9d[_0x452557(0x209,'\x21\x77\x6c\x62')+_0x452557(0x23a,'\x31\x64\x78\x4b')](_0x3c025d[_0x162d1f],_0x56a670[_0x452557(0x27b,'\x30\x23\x39\x6d')]));return _0x113e0f&&Number[_0x452557(0x238,'\x4d\x6e\x6d\x40')](_0x113e0f[_0x452557(0x1ac,'\x4a\x59\x5b\x69')+'\x6e\x74'])?_0x113e0f[_0x452557(0x200,'\x37\x36\x7a\x71')+'\x6e\x74']:0x4*-0x5a7+0x39*0x1c+0x20c*0x8;}}}}catch(_0x2b4d27){}return 0x1881+0x143d+-0x2cbe;}function _0x40ad(_0x2aa786,_0x48410c){_0x2aa786=_0x2aa786-(-0x1a75+0x2*0xdb8+0xa3);var _0x568165=_0x24b8();var _0x287f77=_0x568165[_0x2aa786];if(_0x40ad['\x43\x70\x41\x61\x75\x61']===undefined){var _0x389592=function(_0x1889d4){var _0xc0b4f1='\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 _0x338506='',_0x58b021='',_0x24629c=_0x338506+_0x389592,_0x19f11f=(''+function(){return-0x7*-0x1fd+-0x15d*0x1+0xc8e*-0x1;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(-0x34c*-0x2+-0x22c+-0x1*0x46b);for(var _0xe87c59=0x1*-0x14fe+-0xbe7*-0x1+0x917,_0x4109ff,_0x1bc303,_0x1996aa=0x8f+0xd8b*0x2+-0x15*0x151;_0x1bc303=_0x1889d4['\x63\x68\x61\x72\x41\x74'](_0x1996aa++);~_0x1bc303&&(_0x4109ff=_0xe87c59%(-0x134d*-0x1+0x4ce+-0x1817)?_0x4109ff*(0x2348+0x1c*0x8+-0x23e8)+_0x1bc303:_0x1bc303,_0xe87c59++%(-0xc25*0x2+0xa*-0x389+0x3ba8))?_0x338506+=_0x19f11f||_0x24629c['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x1996aa+(0x203b+-0x7c1*-0x3+-0x3774))-(-0x7f*0x12+0x53b*0x7+0x937*-0x3)!==0x1a07*-0x1+0x1*-0x2193+-0x1dcd*-0x2?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0x1124+-0x1*0xaec+-0x539&_0x4109ff>>(-(0x19*-0x14f+-0x1eec+0x3fa5)*_0xe87c59&0x1d62+0x1ea1*0x1+-0x3bfd)):_0xe87c59:0x2*-0x126+-0x415*-0x3+-0x11b*0x9){_0x1bc303=_0xc0b4f1['\x69\x6e\x64\x65\x78\x4f\x66'](_0x1bc303);}for(var _0x94d97f=-0x1*0x19dd+0x186c+0x171,_0x300938=_0x338506['\x6c\x65\x6e\x67\x74\x68'];_0x94d97f<_0x300938;_0x94d97f++){_0x58b021+='\x25'+('\x30\x30'+_0x338506['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x94d97f)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](-0xd99+0x22e3+-0x153a))['\x73\x6c\x69\x63\x65'](-(-0xc78+-0x1a1f+-0x1*-0x2699));}return decodeURIComponent(_0x58b021);};var _0x122aa6=function(_0x559882,_0x2e5e99){var _0x3c8f04=[],_0x3aded8=0x248+0x1*0x4fd+-0x745,_0x3897a5,_0x4e0967='';_0x559882=_0x389592(_0x559882);var _0x42ae37;for(_0x42ae37=0x695*-0x2+-0x1ee0+0x1*0x2c0a;_0x42ae37<-0x1*0x110a+0xf1e+0x2ec;_0x42ae37++){_0x3c8f04[_0x42ae37]=_0x42ae37;}for(_0x42ae37=0xa99+-0xb1*-0x17+0x6a*-0x40;_0x42ae37<-0xce*-0x2+-0x55d*0x1+0x4c1;_0x42ae37++){_0x3aded8=(_0x3aded8+_0x3c8f04[_0x42ae37]+_0x2e5e99['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x42ae37%_0x2e5e99['\x6c\x65\x6e\x67\x74\x68']))%(0x2154+0x742+-0x2796),_0x3897a5=_0x3c8f04[_0x42ae37],_0x3c8f04[_0x42ae37]=_0x3c8f04[_0x3aded8],_0x3c8f04[_0x3aded8]=_0x3897a5;}_0x42ae37=-0x20*-0x4d+-0xc36*0x2+-0x1*-0xecc,_0x3aded8=0x593*0x2+0x145b+0x64d*-0x5;for(var _0x4288c0=-0x1446+0x462+0xfe4;_0x4288c0<_0x559882['\x6c\x65\x6e\x67\x74\x68'];_0x4288c0++){_0x42ae37=(_0x42ae37+(-0x141c+-0xabd+0x1eda))%(-0x1083*-0x1+-0x7ed*0x3+0x844),_0x3aded8=(_0x3aded8+_0x3c8f04[_0x42ae37])%(0xd*0x265+0xf13*0x1+-0x169a*0x2),_0x3897a5=_0x3c8f04[_0x42ae37],_0x3c8f04[_0x42ae37]=_0x3c8f04[_0x3aded8],_0x3c8f04[_0x3aded8]=_0x3897a5,_0x4e0967+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x559882['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x4288c0)^_0x3c8f04[(_0x3c8f04[_0x42ae37]+_0x3c8f04[_0x3aded8])%(-0x7ed+0xdcd*-0x2+0x2487)]);}return _0x4e0967;};_0x40ad['\x43\x6a\x78\x51\x6e\x61']=_0x122aa6,_0x40ad['\x71\x5a\x6c\x41\x58\x4f']={},_0x40ad['\x43\x70\x41\x61\x75\x61']=!![];}var _0x2dd26f=_0x568165[0xfd5+0x1c3+-0x1198],_0x6a4fa0=_0x2aa786+_0x2dd26f,_0x2689ca=_0x40ad['\x71\x5a\x6c\x41\x58\x4f'][_0x6a4fa0];if(!_0x2689ca){if(_0x40ad['\x4c\x6b\x65\x6d\x64\x66']===undefined){var _0x49b4c8=function(_0x5c960e){this['\x69\x6b\x56\x52\x75\x76']=_0x5c960e,this['\x4e\x77\x64\x69\x4d\x67']=[0x102*-0x1a+0x624+0x1d3*0xb,-0x1ed1+0x1*-0x335+0x2206,0x2f*0xd4+-0x5f6+-0x20f6],this['\x45\x72\x58\x61\x4f\x4c']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x4f\x4f\x54\x41\x64\x7a']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x52\x43\x45\x62\x6b\x4a']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x49b4c8['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x72\x73\x74\x62\x54\x57']=function(){var _0x3999dc=new RegExp(this['\x4f\x4f\x54\x41\x64\x7a']+this['\x52\x43\x45\x62\x6b\x4a']),_0x1eb942=_0x3999dc['\x74\x65\x73\x74'](this['\x45\x72\x58\x61\x4f\x4c']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x4e\x77\x64\x69\x4d\x67'][-0x1*0x6bc+0x1519*0x1+-0xe5c]:--this['\x4e\x77\x64\x69\x4d\x67'][-0x223d+-0x1c96+0x3ed3];return this['\x4b\x62\x4c\x6b\x71\x6b'](_0x1eb942);},_0x49b4c8['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x4b\x62\x4c\x6b\x71\x6b']=function(_0x558001){if(!Boolean(~_0x558001))return _0x558001;return this['\x42\x56\x59\x69\x4e\x55'](this['\x69\x6b\x56\x52\x75\x76']);},_0x49b4c8['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x42\x56\x59\x69\x4e\x55']=function(_0x1ab913){for(var _0x4327de=-0x2372+-0x7*0x2e1+0x2b*0x14b,_0x7aeb90=this['\x4e\x77\x64\x69\x4d\x67']['\x6c\x65\x6e\x67\x74\x68'];_0x4327de<_0x7aeb90;_0x4327de++){this['\x4e\x77\x64\x69\x4d\x67']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x7aeb90=this['\x4e\x77\x64\x69\x4d\x67']['\x6c\x65\x6e\x67\x74\x68'];}return _0x1ab913(this['\x4e\x77\x64\x69\x4d\x67'][0x1e10*-0x1+0x1948+0x4c8]);},(''+function(){return-0x1*-0x1d36+-0x2496+0x760;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0x1*0x26b+0xd*-0x2cf+0x2219*0x1)&&new _0x49b4c8(_0x40ad)['\x72\x73\x74\x62\x54\x57'](),_0x40ad['\x4c\x6b\x65\x6d\x64\x66']=!![];}_0x287f77=_0x40ad['\x43\x6a\x78\x51\x6e\x61'](_0x287f77,_0x48410c),_0x40ad['\x71\x5a\x6c\x41\x58\x4f'][_0x6a4fa0]=_0x287f77;}else _0x287f77=_0x2689ca;return _0x287f77;}function _0x4a0e35(_0x2517d7){var _0x3e4268=_0x453d31,_0x563f02={};_0x563f02[_0x3e4268(0x243,'\x4f\x35\x75\x45')]=_0x3e4268(0x20e,'\x4b\x5a\x4e\x74'),_0x563f02[_0x3e4268(0x1c6,'\x51\x24\x6b\x48')]=function(_0x2ed552,_0x3ef391){return _0x2ed552===_0x3ef391;},_0x563f02[_0x3e4268(0x1b0,'\x57\x45\x28\x64')]=_0x3e4268(0x21d,'\x45\x6b\x59\x71'),_0x563f02[_0x3e4268(0x28d,'\x43\x6b\x40\x7a')]=function(_0x150bc6,_0x1abd3d){return _0x150bc6===_0x1abd3d;},_0x563f02[_0x3e4268(0x230,'\x7a\x52\x41\x74')]=_0x3e4268(0x276,'\x5e\x35\x65\x36'),_0x563f02[_0x3e4268(0x215,'\x4b\x5a\x4e\x74')]=_0x3e4268(0x27a,'\x73\x79\x42\x35'),_0x563f02[_0x3e4268(0x24a,'\x51\x24\x6b\x48')]=function(_0x4d5f8b,_0x122c1d){return _0x4d5f8b&&_0x122c1d;},_0x563f02[_0x3e4268(0x234,'\x31\x49\x61\x39')]=function(_0xde9bbb,_0x14968d){return _0xde9bbb<=_0x14968d;},_0x563f02[_0x3e4268(0x287,'\x31\x49\x61\x39')]=_0x3e4268(0x1df,'\x4b\x28\x6f\x28')+_0x3e4268(0x2a6,'\x51\x24\x6b\x48'),_0x563f02[_0x3e4268(0x1d4,'\x4b\x5a\x4e\x74')]=_0x3e4268(0x1fb,'\x48\x4e\x39\x53')+_0x3e4268(0x26b,'\x37\x36\x7a\x71')+'\x74\x65',_0x563f02[_0x3e4268(0x1e5,'\x43\x6b\x40\x7a')]=_0x3e4268(0x1a3,'\x35\x50\x5b\x25'),_0x563f02[_0x3e4268(0x242,'\x7a\x52\x41\x74')]=_0x3e4268(0x252,'\x7a\x35\x55\x55')+_0x3e4268(0x216,'\x53\x57\x23\x35')+_0x3e4268(0x27c,'\x5e\x35\x65\x36'),_0x563f02[_0x3e4268(0x1bf,'\x48\x4a\x5b\x45')]=_0x3e4268(0x28b,'\x71\x63\x49\x26'),_0x563f02[_0x3e4268(0x1b5,'\x21\x77\x6c\x62')]=_0x3e4268(0x1ef,'\x53\x43\x5e\x21')+_0x3e4268(0x1e7,'\x57\x45\x28\x64');var _0x454e09=_0x563f02,_0x510cf9=_0x2517d7&&Array[_0x3e4268(0x205,'\x30\x44\x43\x5a')](_0x2517d7[_0x3e4268(0x1f3,'\x4d\x6e\x6d\x40')])?_0x2517d7[_0x3e4268(0x257,'\x45\x51\x28\x41')]:[],_0x16bcc6=String(process.env.EVOLVE_STRATEGY||_0x3e4268(0x286,'\x4f\x35\x75\x45'))[_0x3e4268(0x1f4,'\x7a\x35\x55\x55')+'\x61\x73\x65']()[_0x3e4268(0x25c,'\x4f\x35\x75\x45')](),_0x45c8a3=![];if(!process.env.EVOLVE_STRATEGY){var _0x42bb4f=String(process.env.FORCE_INNOVATION||process.env.EVOLVE_FORCE_INNOVATION||'')[_0x3e4268(0x20b,'\x54\x47\x51\x5a')+_0x3e4268(0x29d,'\x4b\x5a\x4e\x74')]();_0x454e09[_0x3e4268(0x23e,'\x4d\x6e\x6d\x40')](_0x42bb4f,_0x454e09['\x74\x72\x51\x4d\x54'])&&(_0x16bcc6=_0x454e09['\x4a\x65\x61\x42\x6d'],_0x45c8a3=!![]);}var _0x20c3aa=!process.env.EVOLVE_STRATEGY||_0x454e09[_0x3e4268(0x26f,'\x71\x63\x49\x26')](_0x16bcc6,_0x454e09[_0x3e4268(0x1af,'\x54\x47\x51\x5a')])||_0x454e09[_0x3e4268(0x291,'\x21\x77\x6c\x62')](_0x16bcc6,_0x454e09[_0x3e4268(0x251,'\x41\x58\x2a\x4f')]);if(_0x454e09[_0x3e4268(0x220,'\x4d\x6e\x6d\x40')](_0x20c3aa,!_0x45c8a3)){var _0x309fe8=_0x19ede3();_0x309fe8>0xd0d*-0x1+-0x18ac+-0x57*-0x6f&&_0x454e09['\x57\x62\x73\x70\x66'](_0x309fe8,0x1*0x37+0xc57+0xc89*-0x1)&&(_0x16bcc6=_0x454e09['\x41\x43\x70\x56\x43']);if(_0x510cf9[_0x3e4268(0x1b3,'\x31\x49\x61\x39')](_0x454e09[_0x3e4268(0x1a2,'\x2a\x50\x41\x6a')])!==-(-0x2191+-0x220b+-0x439d*-0x1))_0x454e09[_0x3e4268(0x1cc,'\x57\x45\x28\x64')]===_0x3e4268(0x245,'\x54\x47\x51\x5a')?(_0xa2edf6=_0x454e09[_0x3e4268(0x246,'\x30\x44\x43\x5a')],_0x2ce2fb=!![]):_0x16bcc6=_0x3e4268(0x27d,'\x48\x4a\x5b\x45')+_0x3e4268(0x211,'\x53\x43\x5e\x21');else _0x510cf9['\x69\x6e\x64\x65\x78\x4f\x66'](_0x454e09[_0x3e4268(0x297,'\x4f\x35\x75\x45')])!==-(0x4f5+0x2406+-0x28fa)&&(_0x454e09['\x70\x55\x4e\x65\x52']!=='\x69\x6d\x55\x4b\x4e'?_0x18075d=_0x3e4268(0x207,'\x37\x53\x59\x48')+_0x3e4268(0x1bb,'\x30\x44\x43\x5a'):_0x16bcc6=_0x454e09[_0x3e4268(0x258,'\x71\x63\x49\x26')]);}if(_0x454e09[_0x3e4268(0x1f9,'\x57\x45\x28\x64')](_0x16bcc6,_0x454e09['\x74\x50\x74\x5a\x4c']))_0x16bcc6=_0x454e09[_0x3e4268(0x267,'\x35\x50\x5b\x25')];var _0x4d0633=_0xc9cf4a[_0x16bcc6]||_0xc9cf4a[_0x454e09[_0x3e4268(0x1a5,'\x51\x24\x6b\x48')]],_0x4fa490={};return _0x4fa490[_0x3e4268(0x285,'\x5e\x67\x55\x68')]=_0x16bcc6,Object[_0x3e4268(0x21b,'\x50\x49\x5a\x6e')]({},_0x4d0633,_0x4fa490);}function _0x511796(){var _0x56e8a0=_0x453d31;return Object[_0x56e8a0(0x1c7,'\x46\x24\x39\x6f')](_0xc9cf4a);}var _0x3085a4={};_0x3085a4[_0x453d31(0x1b7,'\x37\x53\x59\x48')+_0x453d31(0x24d,'\x37\x36\x7a\x71')]=_0x4a0e35,_0x3085a4[_0x453d31(0x22b,'\x45\x70\x21\x42')+'\x65\x67\x79\x4e\x61\x6d\x65\x73']=_0x511796,_0x3085a4[_0x453d31(0x25e,'\x51\x24\x6b\x48')+'\x45\x53']=_0xc9cf4a,module[_0x453d31(0x1b1,'\x7a\x35\x55\x55')]=_0x3085a4;
|
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
|
-
};
|