Skip to content
KernelIndex
Search⌘K

amd-mixture-of-experts · submission 29075

KernelBot user 160 · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

No package. Vendor the mirrored source: 1 lines, June 9 Researcher Reciprocity License v1.0.

submission-moe.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mixture-of-experts-29075?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesfp16

Benchmark evidence

2 measurements across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD DeepSeek-style MoE layerfp16 · [1, 2048, 7168]
AMD Instinct MI300X
5.87ms
#42 of 118
2025-05-29
AMD DeepSeek-style MoE layerfp16 · [1, 8192, 7168]
AMD Instinct MI300X
13.0ms
#34 of 118
2025-05-29

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:1e7c84da0255e7018e4480b15165aec5c53ddf3e279f622a882b4d0ab966601b
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

submission-moe.py1 lines
IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1taXh0dXJlLW9mLWV4cGVydHMKIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBtYXRoCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgppbXBvcnQgdHJpdG9uCmltcG9ydCB0cml0b24ubGFuZ3VhZ2UgYXMgdGwKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QsIFR1cGxlCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKCgpAdG9yY2guaml0LnNjcmlwdApkZWYgZnVzZWRfZXhwZXJ0X2ZvcndhcmQoCiAgICB4OiB0b3JjaC5UZW5zb3IsCiAgICBXX2dhdGU6IHRvcmNoLlRlbnNvciwKICAgIFdfdXA6IHRvcmNoLlRlbnNvciwKICAgIFdfZG93bjogdG9yY2guVGVuc29yLAogICAgd2VpZ2h0OiB0b3JjaC5UZW5zb3IKKSAtPiB0b3JjaC5UZW5zb3I6CiAgICB4ID0geC5jb250aWd1b3VzKCkKICAgIGdhdGUgPSBGLnNpbHUoeCBAIFdfZ2F0ZSkKICAgIHVwID0geCBAIFdfdXAKICAgIHJldHVybiAoZ2F0ZSAqIHVwICogd2VpZ2h0LnVuc3F1ZWV6ZSgtMSkpIEAgV19kb3duCgoKQHRvcmNoLmppdC5zY3JpcHQKZGVmIGZ1c2VkX2dhdGluZ190b3BrKAogICAgeDogdG9yY2guVGVuc29yLAogICAgV19nOiB0b3JjaC5UZW5zb3IsCiAgICB0b3BfazogaW50CikgLT4gVHVwbGVbdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3JdOgogICAgbG9naXRzID0geCBAIFdfZwogICAgcHJvYnMgPSBGLnNvZnRtYXgobG9naXRzLCBkaW09LTEpCiAgICB0b3BrX3Njb3JlcywgdG9wa19pbmRpY2VzID0gdG9yY2gudG9wayhwcm9icywgaz10b3BfaywgZGltPS0xKQogICAgcmV0dXJuIHRvcGtfc2NvcmVzLCB0b3BrX2luZGljZXMKCkB0cml0b24uaml0CmRlZiBjb3VudF9leHBlcnRzX2tlcm5lbCgKICAgIHRvcGtfaW5kaWNlc19wdHIsIGNvdW50c19wdHIsCiAgICBOOiB0bC5jb25zdGV4cHIsIHRvcF9rOiB0bC5jb25zdGV4cHIsIG51bV9leHBlcnRzOiB0bC5jb25zdGV4cHIsCiAgICBCTE9DS19TSVpFOiB0bC5jb25zdGV4cHIsCik6CiAgICBwaWQgPSB0bC5wcm9ncmFtX2lkKDApCiAgICBvZmZzZXQgPSBwaWQgKiBCTE9DS19TSVpFICsgdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkUpCiAgICB0b3RhbF90b2tlbnM6IHRsLmNvbnN0ZXhwciA9IE4gKiB0b3BfawogICAgbWFzayA9IG9mZnNldCA8IHRvdGFsX3Rva2VucwogICAgCiAgICB0b2tlbl9pZCA9IG9mZnNldCAvLyB0b3BfawogICAga19pZCA9IG9mZnNldCAlIHRvcF9rCiAgICAKICAgIGV4cGVydF9pZHggPSB0bC5sb2FkKHRvcGtfaW5kaWNlc19wdHIgKyB0b2tlbl9pZCAqIHRvcF9rICsga19pZCwgbWFzaz1tYXNrLCBvdGhlcj1udW1fZXhwZXJ0cykKICAgIHZhbGlkX21hc2sgPSBtYXNrICYgKGV4cGVydF9pZHggPCBudW1fZXhwZXJ0cykKICAgIAogICAgT05FOiB0bC5jb25zdGV4cHIgPSAxCiAgICB0bC5hdG9taWNfYWRkKGNvdW50c19wdHIgKyBleHBlcnRfaWR4LCBPTkUsIG1hc2s9dmFsaWRfbWFzaykKCgpAdHJpdG9uLmppdApkZWYgc2NhdHRlcl9zb3J0ZWRfa2VybmVsKAogICAgdG9wa19zY29yZXNfcHRyLCB0b3BrX2luZGljZXNfcHRyLAogICAgc29ydGVkX2V4cGVydF9pbmRpY2VzX3B0ciwgc29ydGVkX3Rva2VuX2luZGljZXNfcHRyLCBzb3J0ZWRfZXhwZXJ0X3Njb3Jlc19wdHIsCiAgICBjb3VudHNfcHRyLCBvZmZzZXRzX3B0ciwKICAgIE46IHRsLmNvbnN0ZXhwciwgdG9wX2s6IHRsLmNvbnN0ZXhwciwgbnVtX2V4cGVydHM6IHRsLmNvbnN0ZXhwciwKICAgIEJMT0NLX1NJWkU6IHRsLmNvbnN0ZXhwciwKKToKICAgIHBpZCA9IHRsLnByb2dyYW1faWQoMCkKICAgIG9mZnNldCA9IHBpZCAqIEJMT0NLX1NJWkUgKyB0bC5hcmFuZ2UoMCwgQkxPQ0tfU0laRSkKICAgIHRvdGFsX3Rva2VuczogdGwuY29uc3RleHByID0gTiAqIHRvcF9rCiAgICBtYXNrID0gb2Zmc2V0IDwgdG90YWxfdG9rZW5zCiAgICAKICAgIHRva2VuX2lkID0gb2Zmc2V0IC8vIHRvcF9rCiAgICBrX2lkID0gb2Zmc2V0ICUgdG9wX2sKICAgIAogICAgZXhwZXJ0X2lkeCA9IHRsLmxvYWQodG9wa19pbmRpY2VzX3B0ciArIHRva2VuX2lkICogdG9wX2sgKyBrX2lkLCBtYXNrPW1hc2ssIG90aGVyPTApCiAgICBzY29yZXMgPSB0bC5sb2FkKHRvcGtfc2NvcmVzX3B0ciArIHRva2VuX2lkICogdG9wX2sgKyBrX2lkLCBtYXNrPW1hc2ssIG90aGVyPTAuMCkKICAgIAogICAgdmFsaWRfbWFzayA9IG1hc2sgJiAoZXhwZXJ0X2lkeCA8IG51bV9leHBlcnRzKQogICAgCiAgICBPTkU6IHRsLmNvbnN0ZXhwciA9IDEKICAgIGxvY2FsX3BvcyA9IHRsLmF0b21pY19hZGQoY291bnRzX3B0ciArIGV4cGVydF9pZHgsIE9ORSwgbWFzaz12YWxpZF9tYXNrKQogICAgZXhwZXJ0X29mZnNldCA9IHRsLmxvYWQob2Zmc2V0c19wdHIgKyBleHBlcnRfaWR4LCBtYXNrPXZhbGlkX21hc2ssIG90aGVyPTApCiAgICBmaW5hbF9wb3MgPSBleHBlcnRfb2Zmc2V0ICsgbG9jYWxfcG9zCiAgICAKICAgIHRsLnN0b3JlKHNvcnRlZF9leHBlcnRfaW5kaWNlc19wdHIgKyBmaW5hbF9wb3MsIGV4cGVydF9pZHgsIG1hc2s9dmFsaWRfbWFzaykKICAgIHRsLnN0b3JlKHNvcnRlZF90b2tlbl9pbmRpY2VzX3B0ciArIGZpbmFsX3BvcywgdG9rZW5faWQsIG1hc2s9dmFsaWRfbWFzaykKICAgIHRsLnN0b3JlKHNvcnRlZF9leHBlcnRfc2NvcmVzX3B0ciArIGZpbmFsX3Bvcywgc2NvcmVzLCBtYXNrPXZhbGlkX21hc2spCgoKZGVmIHRyaXRvbl9mdXNlZF9yb3V0aW5nX3ByZXAodG9wa19zY29yZXM6IHRvcmNoLlRlbnNvciwgdG9wa19pbmRpY2VzOiB0b3JjaC5UZW5zb3IsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE46IGludCwgdG9wX2s6IGludCwgbnVtX2V4cGVydHM6IGludCwgZGV2aWNlOiB0b3JjaC5kZXZpY2UpIC0+IFR1cGxlW3RvcmNoLlRlbnNvciwgdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3IsIHRvcmNoLlRlbnNvcl06CiAgICB0b3RhbF90b2tlbnMgPSBOICogdG9wX2sKICAgIAogICAgc29ydGVkX2V4cGVydF9pbmRpY2VzID0gdG9yY2guZW1wdHkodG90YWxfdG9rZW5zLCBkdHlwZT10b3JjaC5sb25nLCBkZXZpY2U9ZGV2aWNlKQogICAgc29ydGVkX3Rva2VuX2luZGljZXMgPSB0b3JjaC5lbXB0eSh0b3RhbF90b2tlbnMsIGR0eXBlPXRvcmNoLmxvbmcsIGRldmljZT1kZXZpY2UpCiAgICBzb3J0ZWRfZXhwZXJ0X3Njb3JlcyA9IHRvcmNoLmVtcHR5KHRvdGFsX3Rva2VucywgZHR5cGU9dG9wa19zY29yZXMuZHR5cGUsIGRldmljZT1kZXZpY2UpCiAgICBjb3VudHMgPSB0b3JjaC56ZXJvcyhudW1fZXhwZXJ0cywgZHR5cGU9dG9yY2gubG9uZywgZGV2aWNlPWRldmljZSkKICAgIAogICAgQkxPQ0tfU0laRTogaW50ID0gMjU2CiAgICBncmlkX3NpemUgPSB0cml0b24uY2Rpdih0b3RhbF90b2tlbnMsIEJMT0NLX1NJWkUpCiAgICAKICAgIGNvdW50X2V4cGVydHNfa2VybmVsWyhncmlkX3NpemUsKV0oCiAgICAgICAgdG9wa19pbmRpY2VzLCBjb3VudHMsCiAgICAgICAgTiwgdG9wX2ssIG51bV9leHBlcnRzLAogICAgICAgIEJMT0NLX1NJWkU9QkxPQ0tfU0laRSwKICAgICAgICBudW1fd2FycHM9OCwKICAgICkKICAgIAogICAgb2Zmc2V0cyA9IHRvcmNoLnplcm9zX2xpa2UoY291bnRzKQogICAgb2Zmc2V0c1sxOl0gPSBjb3VudHNbOi0xXS5jdW1zdW0oMCkKICAgIAogICAgdGVtcF9jb3VudHMgPSB0b3JjaC56ZXJvc19saWtlKGNvdW50cykKICAgIAogICAgc2NhdHRlcl9zb3J0ZWRfa2VybmVsWyhncmlkX3NpemUsKV0oCiAgICAgICAgdG9wa19zY29yZXMsIHRvcGtfaW5kaWNlcywKICAgICAgICBzb3J0ZWRfZXhwZXJ0X2luZGljZXMsIHNvcnRlZF90b2tlbl9pbmRpY2VzLCBzb3J0ZWRfZXhwZXJ0X3Njb3JlcywKICAgICAgICB0ZW1wX2NvdW50cywgb2Zmc2V0cywKICAgICAgICBOLCB0b3BfaywgbnVtX2V4cGVydHMsCiAgICAgICAgQkxPQ0tfU0laRT1CTE9DS19TSVpFLAogICAgICAgIG51bV93YXJwcz04LAogICAgKQogICAgCiAgICByZXR1cm4gc29ydGVkX2V4cGVydF9pbmRpY2VzLCBzb3J0ZWRfdG9rZW5faW5kaWNlcywgc29ydGVkX2V4cGVydF9zY29yZXMsIGNvdW50cwoKCmRlZiBmdXNlZF9yb3V0aW5nX3ByZXAodG9wa19zY29yZXM6IHRvcmNoLlRlbnNvciwgdG9wa19pbmRpY2VzOiB0b3JjaC5UZW5zb3IsIAogICAgICAgICAgICAgICAgICAgICAgTjogaW50LCB0b3BfazogaW50LCBudW1fZXhwZXJ0czogaW50LCBkZXZpY2U6IHRvcmNoLmRldmljZSkgLT4gVHVwbGVbdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3IsIHRvcmNoLlRlbnNvciwgdG9yY2guVGVuc29yXToKICAgIHJldHVybiB0cml0b25fZnVzZWRfcm91dGluZ19wcmVwKHRvcGtfc2NvcmVzLCB0b3BrX2luZGljZXMsIE4sIHRvcF9rLCBudW1fZXhwZXJ0cywgZGV2aWNlKQoKCgpAdG9yY2guaml0LnNjcmlwdApkZWYgZnVzZWRfb3V0cHV0X2FnZ3JlZ2F0aW9uKAogICAgb3V0cHV0OiB0b3JjaC5UZW5zb3IsCiAgICBleHBlcnRfb3V0cHV0OiB0b3JjaC5UZW5zb3IsCiAgICB0b2tlbl9pbmRpY2VzOiB0b3JjaC5UZW5zb3IsCiAgICBEOiBpbnQKKSAtPiB0b3JjaC5UZW5zb3I6CiAgICBvdXRwdXQuc2NhdHRlcl9hZGRfKDAsIHRva2VuX2luZGljZXMudW5zcXVlZXplKDEpLmV4cGFuZCgtMSwgRCksIGV4cGVydF9vdXRwdXQpCiAgICByZXR1cm4gb3V0cHV0CgoKY2xhc3MgTW9FKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZwogICAgICAgIHNlbGYubnVtX2V4cGVydHMgPSBjb25maWdbIm5fcm91dGVkX2V4cGVydHMiXQogICAgICAgIHNlbGYudG9wX2sgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgIHNlbGYuZF9oaWRkZW4gPSBjb25maWdbImRfaGlkZGVuIl0KICAgICAgICAKICAgICAgICBzZWxmLnJvdXRlciA9IE5vbmUKICAgICAgICBzZWxmLnNoYXJlZF9nYXRlID0gTm9uZQogICAgICAgIHNlbGYuc2hhcmVkX3VwID0gTm9uZQogICAgICAgIHNlbGYuc2hhcmVkX2Rvd24gPSBOb25lCiAgICAgICAgc2VsZi5nYXRlID0gW05vbmVdICogc2VsZi5udW1fZXhwZXJ0cwogICAgICAgIHNlbGYudXAgPSBbTm9uZV0gKiBzZWxmLm51bV9leHBlcnRzCiAgICAgICAgc2VsZi5kb3duID0gW05vbmVdICogc2VsZi5udW1fZXhwZXJ0cwoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIEIsIFQsIEQgPSB4LnNoYXBlCiAgICAgICAgTiA9IEIgKiBUCiAgICAgICAgeF9mbGF0ID0geC52aWV3KE4sIEQpCgogICAgICAgIHNoYXJlZF9vdXQgPSAoCiAgICAgICAgICAgIEYuc2lsdSh4IEAgc2VsZi5zaGFyZWRfZ2F0ZSkKICAgICAgICAgICAgKiAoeCBAIHNlbGYuc2hhcmVkX3VwKQogICAgICAgICkgQCBzZWxmLnNoYXJlZF9kb3duCgogICAgICAgIHRvcGtfc2NvcmVzLCB0b3BrX2luZGljZXMgPSBmdXNlZF9nYXRpbmdfdG9wayh4X2ZsYXQsIHNlbGYucm91dGVyLCBzZWxmLnRvcF9rKQogICAgICAgIAogICAgICAgIGV4cGVydF9pbmRpY2VzLCB0b2tlbl9pbmRpY2VzLCBleHBlcnRfc2NvcmVzLCBjb3VudHMgPSBmdXNlZF9yb3V0aW5nX3ByZXAoCiAgICAgICAgICAgIHRvcGtfc2NvcmVzLCB0b3BrX2luZGljZXMsIE4sIHNlbGYudG9wX2ssIHNlbGYubnVtX2V4cGVydHMsIHguZGV2aWNlCiAgICAgICAgKQogICAgICAgIAogICAgICAgIGN1bXN1bSA9IGNvdW50cy5jdW1zdW0oMCkuY3B1KCkubnVtcHkoKQoKICAgICAgICBvdXRwdXQgPSB0b3JjaC56ZXJvc19saWtlKHhfZmxhdCkKCiAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5udW1fZXhwZXJ0cyk6CiAgICAgICAgICAgIHN0YXJ0ID0gMCBpZiBpID09IDAgZWxzZSBjdW1zdW1baSAtIDFdCiAgICAgICAgICAgIGVuZCA9IGN1bXN1bVtpXQogICAgICAgICAgICBpZiBzdGFydCA9PSBlbmQ6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgdG9rZW5zID0gdG9rZW5faW5kaWNlc1tzdGFydDplbmRdCiAgICAgICAgICAgIHdlaWdodHMgPSBleHBlcnRfc2NvcmVzW3N0YXJ0OmVuZF0KICAgICAgICAgICAgaW5wdXRzID0geF9mbGF0W3Rva2Vuc10KCiAgICAgICAgICAgIG91dCA9IGZ1c2VkX2V4cGVydF9mb3J3YXJkKAogICAgICAgICAgICAgICAgaW5wdXRzLAogICAgICAgICAgICAgICAgc2VsZi5nYXRlW2ldLAogICAgICAgICAgICAgICAgc2VsZi51cFtpXSwKICAgICAgICAgICAgICAgIHNlbGYuZG93bltpXSwKICAgICAgICAgICAgICAgIHdlaWdodHMKICAgICAgICAgICAgKQoKICAgICAgICAgICAgb3V0cHV0ID0gZnVzZWRfb3V0cHV0X2FnZ3JlZ2F0aW9uKG91dHB1dCwgb3V0LCB0b2tlbnMsIEQpCgogICAgICAgIHJldHVybiAoc2hhcmVkX291dC52aWV3KE4sIEQpICsgb3V0cHV0KS52aWV3KEIsIFQsIEQpCgoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICB4LCB3ZWlnaHRzLCBjb25maWcgPSBkYXRhCiAgICBtb2UgPSBNb0UoY29uZmlnKQogICAgbW9lLnJvdXRlciA9IHdlaWdodHNbInJvdXRlci53ZWlnaHQiXS50KCkKICAgIG1vZS5zaGFyZWRfZ2F0ZSA9IHdlaWdodHNbInNoYXJlZF9leHBlcnRzLjAud2VpZ2h0Il0KICAgIG1vZS5zaGFyZWRfdXAgPSB3ZWlnaHRzWyJzaGFyZWRfZXhwZXJ0cy4xLndlaWdodCJdCiAgICBtb2Uuc2hhcmVkX2Rvd24gPSB3ZWlnaHRzWyJzaGFyZWRfZXhwZXJ0cy4yLndlaWdodCJdCiAgICBmb3IgaSBpbiByYW5nZShjb25maWdbIm5fcm91dGVkX2V4cGVydHMiXSk6CiAgICAgICAgbW9lLmdhdGVbaV0gPSB3ZWlnaHRzW2YiZXhwZXJ0cy57aX0uMC53ZWlnaHQiXQogICAgICAgIG1vZS51cFtpXSA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4xLndlaWdodCJdCiAgICAgICAgbW9lLmRvd25baV0gPSB3ZWlnaHRzW2YiZXhwZXJ0cy57aX0uMi53ZWlnaHQiXQogICAgcmV0dXJuIG1vZSh4KQ==

Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0

Changes from previous submission

Against this author's previous submission amd-mixture-of-experts · submission 27659.

- IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1taXh0dXJlLW9mLWV4cGVydHMKIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBtYXRoCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgVHVwbGUKZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdAoKCkB0b3JjaC5qaXQuc2NyaXB0CmRlZiBmdXNlZF9leHBlcnRfZm9yd2FyZCgKICAgIHg6IHRvcmNoLlRlbnNvciwKICAgIFdfZ2F0ZTogdG9yY2guVGVuc29yLAogICAgV191cDogdG9yY2guVGVuc29yLAogICAgV19kb3duOiB0b3JjaC5UZW5zb3IsCiAgICB3ZWlnaHQ6IHRvcmNoLlRlbnNvcgopIC0+IHRvcmNoLlRlbnNvcjoKICAgIHggPSB4LmNvbnRpZ3VvdXMoKQogICAgZ2F0ZSA9IEYuc2lsdSh4IEAgV19nYXRlKQogICAgdXAgPSB4IEAgV191cAogICAgcmV0dXJuIChnYXRlICogdXAgKiB3ZWlnaHQpIEAgV19kb3duCgoKY2xhc3MgTW9FKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZwogICAgICAgIHNlbGYubnVtX2V4cGVydHMgPSBjb25maWdbIm5fcm91dGVkX2V4cGVydHMiXQogICAgICAgIHNlbGYudG9wX2sgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgIHNlbGYuZF9oaWRkZW4gPSBjb25maWdbImRfaGlkZGVuIl0KICAgICAgICAKICAgICAgICAjIERpY3Rpb25hcnktYmFzZWQgd2VpZ2h0IHN0b3JhZ2UgZm9yIGJldHRlciBwZXJmb3JtYW5jZQogICAgICAgIHNlbGYud2VpZ2h0cyA9IHsKICAgICAgICAgICAgIldfZyI6IE5vbmUsCiAgICAgICAgICAgICJXX2dhdGUiOiBbTm9uZV0gKiBzZWxmLm51bV9leHBlcnRzLAogICAgICAgICAgICAiV191cCI6IFtOb25lXSAqIHNlbGYubnVtX2V4cGVydHMsCiAgICAgICAgICAgICJXX2Rvd24iOiBbTm9uZV0gKiBzZWxmLm51bV9leHBlcnRzLAogICAgICAgICAgICAiV19zaGFyZWRfZ2F0ZSI6IE5vbmUsCiAgICAgICAgICAgICJXX3NoYXJlZF91cCI6IE5vbmUsCiAgICAgICAgICAgICJXX3NoYXJlZF9kb3duIjogTm9uZQogICAgICAgIH0KCiAgICBkZWYgbG9hZF93ZWlnaHRzKHNlbGYsIHdlaWdodHM6IERpY3Rbc3RyLCB0b3JjaC5UZW5zb3JdKToKICAgICAgICAiIiJMb2FkIHdlaWdodHMgaW50byB0aGUgbW9kZWwiIiIKICAgICAgICBzZWxmLndlaWdodHNbIldfZyJdID0gd2VpZ2h0c1sicm91dGVyLndlaWdodCJdLnQoKQogICAgICAgIHNlbGYud2VpZ2h0c1siV19zaGFyZWRfZ2F0ZSJdID0gd2VpZ2h0c1sic2hhcmVkX2V4cGVydHMuMC53ZWlnaHQiXQogICAgICAgIHNlbGYud2VpZ2h0c1siV19zaGFyZWRfdXAiXSA9IHdlaWdodHNbInNoYXJlZF9leHBlcnRzLjEud2VpZ2h0Il0KICAgICAgICBzZWxmLndlaWdodHNbIldfc2hhcmVkX2Rvd24iXSA9IHdlaWdodHNbInNoYXJlZF9leHBlcnRzLjIud2VpZ2h0Il0KICAgICAgICAKICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLm51bV9leHBlcnRzKToKICAgICAgICAgICAgc2VsZi53ZWlnaHRzWyJXX2dhdGUiXVtpXSA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4wLndlaWdodCJdCiAgICAgICAgICAgIHNlbGYud2VpZ2h0c1siV191cCJdW2ldID0gd2VpZ2h0c1tmImV4cGVydHMue2l9LjEud2VpZ2h0Il0KICAgICAgICAgICAgc2VsZi53ZWlnaHRzWyJXX2Rvd24iXVtpXSA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4yLndlaWdodCJdCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yKSAtPiB0b3JjaC5UZW5zb3I6CiAgICAgICAgQiwgVCwgRCA9IHguc2hhcGUKICAgICAgICBOID0gQiAqIFQKICAgICAgICB4X2ZsYXQgPSB4LnZpZXcoTiwgRCkKCiAgICAgICAgIyBTaGFyZWQgZXhwZXJ0IGNvbXB1dGF0aW9uCiAgICAgICAgc2hhcmVkX291dCA9ICgKICAgICAgICAgICAgRi5zaWx1KHggQCBzZWxmLndlaWdodHNbIldfc2hhcmVkX2dhdGUiXSkKICAgICAgICAgICAgKiAoeCBAIHNlbGYud2VpZ2h0c1siV19zaGFyZWRfdXAiXSkKICAgICAgICApIEAgc2VsZi53ZWlnaHRzWyJXX3NoYXJlZF9kb3duIl0KCiAgICAgICAgIyBHYXRpbmcgbmV0d29yawogICAgICAgIGxvZ2l0cyA9IHhfZmxhdCBAIHNlbGYud2VpZ2h0c1siV19nIl0KICAgICAgICBwcm9icyA9IEYuc29mdG1heChsb2dpdHMsIGRpbT0tMSkKICAgICAgICB0b3BrX3Njb3JlcywgdG9wa19pbmRpY2VzID0gdG9yY2gudG9wayhwcm9icywgaz1zZWxmLnRvcF9rLCBkaW09LTEpCiAgICAgICAgCiAgICAgICAgIyBQcmVwYXJlIGZvciBleHBlcnQgcm91dGluZwogICAgICAgIGV4cGVydF9pbmRpY2VzID0gdG9wa19pbmRpY2VzLnJlc2hhcGUoLTEpCiAgICAgICAgZXhwZXJ0X3Njb3JlcyA9IHRvcGtfc2NvcmVzLnJlc2hhcGUoLTEsIDEpCiAgICAgICAgdG9rZW5faW5kaWNlcyA9IHRvcmNoLmFyYW5nZShOLCBkZXZpY2U9eC5kZXZpY2UpLnJlcGVhdF9pbnRlcmxlYXZlKHNlbGYudG9wX2spCgogICAgICAgICMgU29ydCBieSBleHBlcnQgaW5kaWNlcyBmb3IgZWZmaWNpZW50IGJhdGNoaW5nCiAgICAgICAgc29ydGVkX2lkeCA9IGV4cGVydF9pbmRpY2VzLmFyZ3NvcnQoKQogICAgICAgIGV4cGVydF9pbmRpY2VzID0gZXhwZXJ0X2luZGljZXNbc29ydGVkX2lkeF0KICAgICAgICB0b2tlbl9pbmRpY2VzID0gdG9rZW5faW5kaWNlc1tzb3J0ZWRfaWR4XQogICAgICAgIGV4cGVydF9zY29yZXMgPSBleHBlcnRfc2NvcmVzW3NvcnRlZF9pZHhdCgogICAgICAgICMgQ2FsY3VsYXRlIGV4cGVydCBib3VuZGFyaWVzCiAgICAgICAgY291bnRzID0gdG9yY2guYmluY291bnQoZXhwZXJ0X2luZGljZXMsIG1pbmxlbmd0aD1zZWxmLm51bV9leHBlcnRzKQogICAgICAgIGN1bXN1bSA9IGNvdW50cy5jdW1zdW0oMCkuY3B1KCkubnVtcHkoKQoKICAgICAgICBvdXRwdXQgPSB0b3JjaC56ZXJvc19saWtlKHhfZmxhdCkKCiAgICAgICAgIyBQcm9jZXNzIGVhY2ggZXhwZXJ0CiAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5udW1fZXhwZXJ0cyk6CiAgICAgICAgICAgIHN0YXJ0ID0gMCBpZiBpID09IDAgZWxzZSBjdW1zdW1baSAtIDFdCiAgICAgICAgICAgIGVuZCA9IGN1bXN1bVtpXQogICAgICAgICAgICBpZiBzdGFydCA9PSBlbmQ6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgdG9rZW5zID0gdG9rZW5faW5kaWNlc1tzdGFydDplbmRdCiAgICAgICAgICAgIHdlaWdodHMgPSBleHBlcnRfc2NvcmVzW3N0YXJ0OmVuZF0KICAgICAgICAgICAgaW5wdXRzID0geF9mbGF0W3Rva2Vuc10KCiAgICAgICAgICAgICMgQXBwbHkgZXhwZXJ0IHVzaW5nIGZ1c2VkIGtlcm5lbAogICAgICAgICAgICBvdXQgPSBmdXNlZF9leHBlcnRfZm9yd2FyZCgKICAgICAgICAgICAgICAgIGlucHV0cywKICAgICAgICAgICAgICAgIHNlbGYud2VpZ2h0c1siV19nYXRlIl1baV0sCiAgICAgICAgICAgICAgICBzZWxmLndlaWdodHNbIldfdXAiXVtpXSwKICAgICAgICAgICAgICAgIHNlbGYud2VpZ2h0c1siV19kb3duIl1baV0sCiAgICAgICAgICAgICAgICB3ZWlnaHRzCiAgICAgICAgICAgICkKCiAgICAgICAgICAgIG91dHB1dC5zY2F0dGVyX2FkZF8oMCwgdG9rZW5zLnVuc3F1ZWV6ZSgxKS5leHBhbmQoLTEsIEQpLCBvdXQpCgogICAgICAgIHJldHVybiAoc2hhcmVkX291dC52aWV3KE4sIEQpICsgb3V0cHV0KS52aWV3KEIsIFQsIEQpCgoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICB4LCB3ZWlnaHRzLCBjb25maWcgPSBkYXRhCiAgICBtb2UgPSBNb0UoY29uZmlnKQogICAgbW9lLmxvYWRfd2VpZ2h0cyh3ZWlnaHRzKQogICAgcmV0dXJuIG1vZSh4KQ==
No newline at end of file
+ IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1taXh0dXJlLW9mLWV4cGVydHMKIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBtYXRoCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgppbXBvcnQgdHJpdG9uCmltcG9ydCB0cml0b24ubGFuZ3VhZ2UgYXMgdGwKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QsIFR1cGxlCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKCgpAdG9yY2guaml0LnNjcmlwdApkZWYgZnVzZWRfZXhwZXJ0X2ZvcndhcmQoCiAgICB4OiB0b3JjaC5UZW5zb3IsCiAgICBXX2dhdGU6IHRvcmNoLlRlbnNvciwKICAgIFdfdXA6IHRvcmNoLlRlbnNvciwKICAgIFdfZG93bjogdG9yY2guVGVuc29yLAogICAgd2VpZ2h0OiB0b3JjaC5UZW5zb3IKKSAtPiB0b3JjaC5UZW5zb3I6CiAgICB4ID0geC5jb250aWd1b3VzKCkKICAgIGdhdGUgPSBGLnNpbHUoeCBAIFdfZ2F0ZSkKICAgIHVwID0geCBAIFdfdXAKICAgIHJldHVybiAoZ2F0ZSAqIHVwICogd2VpZ2h0LnVuc3F1ZWV6ZSgtMSkpIEAgV19kb3duCgoKQHRvcmNoLmppdC5zY3JpcHQKZGVmIGZ1c2VkX2dhdGluZ190b3BrKAogICAgeDogdG9yY2guVGVuc29yLAogICAgV19nOiB0b3JjaC5UZW5zb3IsCiAgICB0b3BfazogaW50CikgLT4gVHVwbGVbdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3JdOgogICAgbG9naXRzID0geCBAIFdfZwogICAgcHJvYnMgPSBGLnNvZnRtYXgobG9naXRzLCBkaW09LTEpCiAgICB0b3BrX3Njb3JlcywgdG9wa19pbmRpY2VzID0gdG9yY2gudG9wayhwcm9icywgaz10b3BfaywgZGltPS0xKQogICAgcmV0dXJuIHRvcGtfc2NvcmVzLCB0b3BrX2luZGljZXMKCkB0cml0b24uaml0CmRlZiBjb3VudF9leHBlcnRzX2tlcm5lbCgKICAgIHRvcGtfaW5kaWNlc19wdHIsIGNvdW50c19wdHIsCiAgICBOOiB0bC5jb25zdGV4cHIsIHRvcF9rOiB0bC5jb25zdGV4cHIsIG51bV9leHBlcnRzOiB0bC5jb25zdGV4cHIsCiAgICBCTE9DS19TSVpFOiB0bC5jb25zdGV4cHIsCik6CiAgICBwaWQgPSB0bC5wcm9ncmFtX2lkKDApCiAgICBvZmZzZXQgPSBwaWQgKiBCTE9DS19TSVpFICsgdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkUpCiAgICB0b3RhbF90b2tlbnM6IHRsLmNvbnN0ZXhwciA9IE4gKiB0b3BfawogICAgbWFzayA9IG9mZnNldCA8IHRvdGFsX3Rva2VucwogICAgCiAgICB0b2tlbl9pZCA9IG9mZnNldCAvLyB0b3BfawogICAga19pZCA9IG9mZnNldCAlIHRvcF9rCiAgICAKICAgIGV4cGVydF9pZHggPSB0bC5sb2FkKHRvcGtfaW5kaWNlc19wdHIgKyB0b2tlbl9pZCAqIHRvcF9rICsga19pZCwgbWFzaz1tYXNrLCBvdGhlcj1udW1fZXhwZXJ0cykKICAgIHZhbGlkX21hc2sgPSBtYXNrICYgKGV4cGVydF9pZHggPCBudW1fZXhwZXJ0cykKICAgIAogICAgT05FOiB0bC5jb25zdGV4cHIgPSAxCiAgICB0bC5hdG9taWNfYWRkKGNvdW50c19wdHIgKyBleHBlcnRfaWR4LCBPTkUsIG1hc2s9dmFsaWRfbWFzaykKCgpAdHJpdG9uLmppdApkZWYgc2NhdHRlcl9zb3J0ZWRfa2VybmVsKAogICAgdG9wa19zY29yZXNfcHRyLCB0b3BrX2luZGljZXNfcHRyLAogICAgc29ydGVkX2V4cGVydF9pbmRpY2VzX3B0ciwgc29ydGVkX3Rva2VuX2luZGljZXNfcHRyLCBzb3J0ZWRfZXhwZXJ0X3Njb3Jlc19wdHIsCiAgICBjb3VudHNfcHRyLCBvZmZzZXRzX3B0ciwKICAgIE46IHRsLmNvbnN0ZXhwciwgdG9wX2s6IHRsLmNvbnN0ZXhwciwgbnVtX2V4cGVydHM6IHRsLmNvbnN0ZXhwciwKICAgIEJMT0NLX1NJWkU6IHRsLmNvbnN0ZXhwciwKKToKICAgIHBpZCA9IHRsLnByb2dyYW1faWQoMCkKICAgIG9mZnNldCA9IHBpZCAqIEJMT0NLX1NJWkUgKyB0bC5hcmFuZ2UoMCwgQkxPQ0tfU0laRSkKICAgIHRvdGFsX3Rva2VuczogdGwuY29uc3RleHByID0gTiAqIHRvcF9rCiAgICBtYXNrID0gb2Zmc2V0IDwgdG90YWxfdG9rZW5zCiAgICAKICAgIHRva2VuX2lkID0gb2Zmc2V0IC8vIHRvcF9rCiAgICBrX2lkID0gb2Zmc2V0ICUgdG9wX2sKICAgIAogICAgZXhwZXJ0X2lkeCA9IHRsLmxvYWQodG9wa19pbmRpY2VzX3B0ciArIHRva2VuX2lkICogdG9wX2sgKyBrX2lkLCBtYXNrPW1hc2ssIG90aGVyPTApCiAgICBzY29yZXMgPSB0bC5sb2FkKHRvcGtfc2NvcmVzX3B0ciArIHRva2VuX2lkICogdG9wX2sgKyBrX2lkLCBtYXNrPW1hc2ssIG90aGVyPTAuMCkKICAgIAogICAgdmFsaWRfbWFzayA9IG1hc2sgJiAoZXhwZXJ0X2lkeCA8IG51bV9leHBlcnRzKQogICAgCiAgICBPTkU6IHRsLmNvbnN0ZXhwciA9IDEKICAgIGxvY2FsX3BvcyA9IHRsLmF0b21pY19hZGQoY291bnRzX3B0ciArIGV4cGVydF9pZHgsIE9ORSwgbWFzaz12YWxpZF9tYXNrKQogICAgZXhwZXJ0X29mZnNldCA9IHRsLmxvYWQob2Zmc2V0c19wdHIgKyBleHBlcnRfaWR4LCBtYXNrPXZhbGlkX21hc2ssIG90aGVyPTApCiAgICBmaW5hbF9wb3MgPSBleHBlcnRfb2Zmc2V0ICsgbG9jYWxfcG9zCiAgICAKICAgIHRsLnN0b3JlKHNvcnRlZF9leHBlcnRfaW5kaWNlc19wdHIgKyBmaW5hbF9wb3MsIGV4cGVydF9pZHgsIG1hc2s9dmFsaWRfbWFzaykKICAgIHRsLnN0b3JlKHNvcnRlZF90b2tlbl9pbmRpY2VzX3B0ciArIGZpbmFsX3BvcywgdG9rZW5faWQsIG1hc2s9dmFsaWRfbWFzaykKICAgIHRsLnN0b3JlKHNvcnRlZF9leHBlcnRfc2NvcmVzX3B0ciArIGZpbmFsX3Bvcywgc2NvcmVzLCBtYXNrPXZhbGlkX21hc2spCgoKZGVmIHRyaXRvbl9mdXNlZF9yb3V0aW5nX3ByZXAodG9wa19zY29yZXM6IHRvcmNoLlRlbnNvciwgdG9wa19pbmRpY2VzOiB0b3JjaC5UZW5zb3IsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE46IGludCwgdG9wX2s6IGludCwgbnVtX2V4cGVydHM6IGludCwgZGV2aWNlOiB0b3JjaC5kZXZpY2UpIC0+IFR1cGxlW3RvcmNoLlRlbnNvciwgdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3IsIHRvcmNoLlRlbnNvcl06CiAgICB0b3RhbF90b2tlbnMgPSBOICogdG9wX2sKICAgIAogICAgc29ydGVkX2V4cGVydF9pbmRpY2VzID0gdG9yY2guZW1wdHkodG90YWxfdG9rZW5zLCBkdHlwZT10b3JjaC5sb25nLCBkZXZpY2U9ZGV2aWNlKQogICAgc29ydGVkX3Rva2VuX2luZGljZXMgPSB0b3JjaC5lbXB0eSh0b3RhbF90b2tlbnMsIGR0eXBlPXRvcmNoLmxvbmcsIGRldmljZT1kZXZpY2UpCiAgICBzb3J0ZWRfZXhwZXJ0X3Njb3JlcyA9IHRvcmNoLmVtcHR5KHRvdGFsX3Rva2VucywgZHR5cGU9dG9wa19zY29yZXMuZHR5cGUsIGRldmljZT1kZXZpY2UpCiAgICBjb3VudHMgPSB0b3JjaC56ZXJvcyhudW1fZXhwZXJ0cywgZHR5cGU9dG9yY2gubG9uZywgZGV2aWNlPWRldmljZSkKICAgIAogICAgQkxPQ0tfU0laRTogaW50ID0gMjU2CiAgICBncmlkX3NpemUgPSB0cml0b24uY2Rpdih0b3RhbF90b2tlbnMsIEJMT0NLX1NJWkUpCiAgICAKICAgIGNvdW50X2V4cGVydHNfa2VybmVsWyhncmlkX3NpemUsKV0oCiAgICAgICAgdG9wa19pbmRpY2VzLCBjb3VudHMsCiAgICAgICAgTiwgdG9wX2ssIG51bV9leHBlcnRzLAogICAgICAgIEJMT0NLX1NJWkU9QkxPQ0tfU0laRSwKICAgICAgICBudW1fd2FycHM9OCwKICAgICkKICAgIAogICAgb2Zmc2V0cyA9IHRvcmNoLnplcm9zX2xpa2UoY291bnRzKQogICAgb2Zmc2V0c1sxOl0gPSBjb3VudHNbOi0xXS5jdW1zdW0oMCkKICAgIAogICAgdGVtcF9jb3VudHMgPSB0b3JjaC56ZXJvc19saWtlKGNvdW50cykKICAgIAogICAgc2NhdHRlcl9zb3J0ZWRfa2VybmVsWyhncmlkX3NpemUsKV0oCiAgICAgICAgdG9wa19zY29yZXMsIHRvcGtfaW5kaWNlcywKICAgICAgICBzb3J0ZWRfZXhwZXJ0X2luZGljZXMsIHNvcnRlZF90b2tlbl9pbmRpY2VzLCBzb3J0ZWRfZXhwZXJ0X3Njb3JlcywKICAgICAgICB0ZW1wX2NvdW50cywgb2Zmc2V0cywKICAgICAgICBOLCB0b3BfaywgbnVtX2V4cGVydHMsCiAgICAgICAgQkxPQ0tfU0laRT1CTE9DS19TSVpFLAogICAgICAgIG51bV93YXJwcz04LAogICAgKQogICAgCiAgICByZXR1cm4gc29ydGVkX2V4cGVydF9pbmRpY2VzLCBzb3J0ZWRfdG9rZW5faW5kaWNlcywgc29ydGVkX2V4cGVydF9zY29yZXMsIGNvdW50cwoKCmRlZiBmdXNlZF9yb3V0aW5nX3ByZXAodG9wa19zY29yZXM6IHRvcmNoLlRlbnNvciwgdG9wa19pbmRpY2VzOiB0b3JjaC5UZW5zb3IsIAogICAgICAgICAgICAgICAgICAgICAgTjogaW50LCB0b3BfazogaW50LCBudW1fZXhwZXJ0czogaW50LCBkZXZpY2U6IHRvcmNoLmRldmljZSkgLT4gVHVwbGVbdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3IsIHRvcmNoLlRlbnNvciwgdG9yY2guVGVuc29yXToKICAgIHJldHVybiB0cml0b25fZnVzZWRfcm91dGluZ19wcmVwKHRvcGtfc2NvcmVzLCB0b3BrX2luZGljZXMsIE4sIHRvcF9rLCBudW1fZXhwZXJ0cywgZGV2aWNlKQoKCgpAdG9yY2guaml0LnNjcmlwdApkZWYgZnVzZWRfb3V0cHV0X2FnZ3JlZ2F0aW9uKAogICAgb3V0cHV0OiB0b3JjaC5UZW5zb3IsCiAgICBleHBlcnRfb3V0cHV0OiB0b3JjaC5UZW5zb3IsCiAgICB0b2tlbl9pbmRpY2VzOiB0b3JjaC5UZW5zb3IsCiAgICBEOiBpbnQKKSAtPiB0b3JjaC5UZW5zb3I6CiAgICBvdXRwdXQuc2NhdHRlcl9hZGRfKDAsIHRva2VuX2luZGljZXMudW5zcXVlZXplKDEpLmV4cGFuZCgtMSwgRCksIGV4cGVydF9vdXRwdXQpCiAgICByZXR1cm4gb3V0cHV0CgoKY2xhc3MgTW9FKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZwogICAgICAgIHNlbGYubnVtX2V4cGVydHMgPSBjb25maWdbIm5fcm91dGVkX2V4cGVydHMiXQogICAgICAgIHNlbGYudG9wX2sgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgIHNlbGYuZF9oaWRkZW4gPSBjb25maWdbImRfaGlkZGVuIl0KICAgICAgICAKICAgICAgICBzZWxmLnJvdXRlciA9IE5vbmUKICAgICAgICBzZWxmLnNoYXJlZF9nYXRlID0gTm9uZQogICAgICAgIHNlbGYuc2hhcmVkX3VwID0gTm9uZQogICAgICAgIHNlbGYuc2hhcmVkX2Rvd24gPSBOb25lCiAgICAgICAgc2VsZi5nYXRlID0gW05vbmVdICogc2VsZi5udW1fZXhwZXJ0cwogICAgICAgIHNlbGYudXAgPSBbTm9uZV0gKiBzZWxmLm51bV9leHBlcnRzCiAgICAgICAgc2VsZi5kb3duID0gW05vbmVdICogc2VsZi5udW1fZXhwZXJ0cwoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIEIsIFQsIEQgPSB4LnNoYXBlCiAgICAgICAgTiA9IEIgKiBUCiAgICAgICAgeF9mbGF0ID0geC52aWV3KE4sIEQpCgogICAgICAgIHNoYXJlZF9vdXQgPSAoCiAgICAgICAgICAgIEYuc2lsdSh4IEAgc2VsZi5zaGFyZWRfZ2F0ZSkKICAgICAgICAgICAgKiAoeCBAIHNlbGYuc2hhcmVkX3VwKQogICAgICAgICkgQCBzZWxmLnNoYXJlZF9kb3duCgogICAgICAgIHRvcGtfc2NvcmVzLCB0b3BrX2luZGljZXMgPSBmdXNlZF9nYXRpbmdfdG9wayh4X2ZsYXQsIHNlbGYucm91dGVyLCBzZWxmLnRvcF9rKQogICAgICAgIAogICAgICAgIGV4cGVydF9pbmRpY2VzLCB0b2tlbl9pbmRpY2VzLCBleHBlcnRfc2NvcmVzLCBjb3VudHMgPSBmdXNlZF9yb3V0aW5nX3ByZXAoCiAgICAgICAgICAgIHRvcGtfc2NvcmVzLCB0b3BrX2luZGljZXMsIE4sIHNlbGYudG9wX2ssIHNlbGYubnVtX2V4cGVydHMsIHguZGV2aWNlCiAgICAgICAgKQogICAgICAgIAogICAgICAgIGN1bXN1bSA9IGNvdW50cy5jdW1zdW0oMCkuY3B1KCkubnVtcHkoKQoKICAgICAgICBvdXRwdXQgPSB0b3JjaC56ZXJvc19saWtlKHhfZmxhdCkKCiAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5udW1fZXhwZXJ0cyk6CiAgICAgICAgICAgIHN0YXJ0ID0gMCBpZiBpID09IDAgZWxzZSBjdW1zdW1baSAtIDFdCiAgICAgICAgICAgIGVuZCA9IGN1bXN1bVtpXQogICAgICAgICAgICBpZiBzdGFydCA9PSBlbmQ6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgdG9rZW5zID0gdG9rZW5faW5kaWNlc1tzdGFydDplbmRdCiAgICAgICAgICAgIHdlaWdodHMgPSBleHBlcnRfc2NvcmVzW3N0YXJ0OmVuZF0KICAgICAgICAgICAgaW5wdXRzID0geF9mbGF0W3Rva2Vuc10KCiAgICAgICAgICAgIG91dCA9IGZ1c2VkX2V4cGVydF9mb3J3YXJkKAogICAgICAgICAgICAgICAgaW5wdXRzLAogICAgICAgICAgICAgICAgc2VsZi5nYXRlW2ldLAogICAgICAgICAgICAgICAgc2VsZi51cFtpXSwKICAgICAgICAgICAgICAgIHNlbGYuZG93bltpXSwKICAgICAgICAgICAgICAgIHdlaWdodHMKICAgICAgICAgICAgKQoKICAgICAgICAgICAgb3V0cHV0ID0gZnVzZWRfb3V0cHV0X2FnZ3JlZ2F0aW9uKG91dHB1dCwgb3V0LCB0b2tlbnMsIEQpCgogICAgICAgIHJldHVybiAoc2hhcmVkX291dC52aWV3KE4sIEQpICsgb3V0cHV0KS52aWV3KEIsIFQsIEQpCgoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICB4LCB3ZWlnaHRzLCBjb25maWcgPSBkYXRhCiAgICBtb2UgPSBNb0UoY29uZmlnKQogICAgbW9lLnJvdXRlciA9IHdlaWdodHNbInJvdXRlci53ZWlnaHQiXS50KCkKICAgIG1vZS5zaGFyZWRfZ2F0ZSA9IHdlaWdodHNbInNoYXJlZF9leHBlcnRzLjAud2VpZ2h0Il0KICAgIG1vZS5zaGFyZWRfdXAgPSB3ZWlnaHRzWyJzaGFyZWRfZXhwZXJ0cy4xLndlaWdodCJdCiAgICBtb2Uuc2hhcmVkX2Rvd24gPSB3ZWlnaHRzWyJzaGFyZWRfZXhwZXJ0cy4yLndlaWdodCJdCiAgICBmb3IgaSBpbiByYW5nZShjb25maWdbIm5fcm91dGVkX2V4cGVydHMiXSk6CiAgICAgICAgbW9lLmdhdGVbaV0gPSB3ZWlnaHRzW2YiZXhwZXJ0cy57aX0uMC53ZWlnaHQiXQogICAgICAgIG1vZS51cFtpXSA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4xLndlaWdodCJdCiAgICAgICAgbW9lLmRvd25baV0gPSB3ZWlnaHRzW2YiZXhwZXJ0cy57aX0uMi53ZWlnaHQiXQogICAgcmV0dXJuIG1vZSh4KQ==
No newline at end of file

Best evidence level for this revision: reported

JSON