Skip to content
KernelIndex
Search⌘K

amd-mixture-of-experts · submission 26159

KernelBot user 126 · 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_version_5.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mixture-of-experts-26159?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.78ms
#39 of 118
2025-05-22
AMD DeepSeek-style MoE layerfp16 · [1, 8192, 7168]
AMD Instinct MI300X
12.2ms
#24 of 118
2025-05-22

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:baf70a4539ee8d5f9c61229d4dcddbdde6fb2fe154e8a86d610ae5d914b1290c
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

submission_moe_version_5.py1 lines
aW1wb3J0IHRpbWUKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QsIFR1cGxlLCBMaXN0LCBPcHRpb25hbAoKaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubi5mdW5jdGlvbmFsIGFzIEYKaW1wb3J0IHRyaXRvbgppbXBvcnQgdHJpdG9uLmxhbmd1YWdlIGFzIHRsCgpmcm9tIGV2YWwgaW1wb3J0IF9jbG9uZV9kYXRhCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB1dGlscyBpbXBvcnQgdmVyYm9zZV9hbGxjbG9zZQpmcm9tIHJlZmVyZW5jZSBpbXBvcnQgZ2VuZXJhdGVfaW5wdXQsIHJlZl9rZXJuZWwKCgpCTE9DS19TSVpFX006IHRsLmNvbnN0ZXhwciA9IDI1NgpCTE9DS19TSVpFX046IHRsLmNvbnN0ZXhwciA9IDI1NgpCTE9DS19TSVpFX0s6IHRsLmNvbnN0ZXhwciA9IDY0CkdST1VQX1NJWkVfTTogdGwuY29uc3RleHByID0gOAoKCiMgbWF0bXVsCgpAdHJpdG9uLmppdApkZWYgbWF0bXVsX2tlcm5lbCgKICAgICAgICAjIFBvaW50ZXJzIHRvIG1hdHJpY2VzCiAgICAgICAgYV9wdHIsIGJfcHRyLCBjX3B0ciwKICAgICAgICAjIE1hdHJpeCBkaW1lbnNpb25zCiAgICAgICAgTSwgTiwgSywKICAgICAgICAjIFRoZSBzdHJpZGUgdmFyaWFibGVzIHJlcHJlc2VudCBob3cgbXVjaCB0byBpbmNyZWFzZSB0aGUgcHRyIGJ5IHdoZW4gbW92aW5nIGJ5IDEKICAgICAgICAjIGVsZW1lbnQgaW4gYSBwYXJ0aWN1bGFyIGRpbWVuc2lvbi4gRS5nLiBgc3RyaWRlX2FtYCBpcyBob3cgbXVjaCB0byBpbmNyZWFzZSBgYV9wdHJgCiAgICAgICAgIyBieSB0byBnZXQgdGhlIGVsZW1lbnQgb25lIHJvdyBkb3duIChBIGhhcyBNIHJvd3MpLgogICAgICAgIHN0cmlkZV9hbSwgc3RyaWRlX2FrLCAgIwogICAgICAgIHN0cmlkZV9iaywgc3RyaWRlX2JuLCAgIwogICAgICAgIHN0cmlkZV9jbSwgc3RyaWRlX2NuLAogICAgICAgICMgTWV0YS1wYXJhbWV0ZXJzCiAgICAgICAgQkxPQ0tfU0laRV9NOiB0bC5jb25zdGV4cHIsIEJMT0NLX1NJWkVfTjogdGwuY29uc3RleHByLCBCTE9DS19TSVpFX0s6IHRsLmNvbnN0ZXhwciwgICMKICAgICAgICBHUk9VUF9TSVpFX006IHRsLmNvbnN0ZXhwciwgICMKICAgICAgICBBQ1RJVkFUSU9OOiB0bC5jb25zdGV4cHIgICMKKToKICAgICIiIktlcm5lbCBmb3IgY29tcHV0aW5nIHRoZSBtYXRtdWwgQyA9IEEgeCBCLgogICAgQSBoYXMgc2hhcGUgKE0sIEspLCBCIGhhcyBzaGFwZSAoSywgTikgYW5kIEMgaGFzIHNoYXBlIChNLCBOKQogICAgIiIiCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE1hcCBwcm9ncmFtIGlkcyBgcGlkYCB0byB0aGUgYmxvY2sgb2YgQyBpdCBzaG91bGQgY29tcHV0ZS4KICAgICMgVGhpcyBpcyBkb25lIGluIGEgZ3JvdXBlZCBvcmRlcmluZyB0byBwcm9tb3RlIEwyIGRhdGEgcmV1c2UuCiAgICAjIFNlZSBhYm92ZSBgTDIgQ2FjaGUgT3B0aW1pemF0aW9uc2Agc2VjdGlvbiBmb3IgZGV0YWlscy4KICAgIHBpZCA9IHRsLnByb2dyYW1faWQoYXhpcz0wKQogICAgbnVtX3BpZF9tID0gdGwuY2RpdihNLCBCTE9DS19TSVpFX00pCiAgICBudW1fcGlkX24gPSB0bC5jZGl2KE4sIEJMT0NLX1NJWkVfTikKICAgIG51bV9waWRfaW5fZ3JvdXAgPSBHUk9VUF9TSVpFX00gKiBudW1fcGlkX24KICAgIGdyb3VwX2lkID0gcGlkIC8vIG51bV9waWRfaW5fZ3JvdXAKICAgIGZpcnN0X3BpZF9tID0gZ3JvdXBfaWQgKiBHUk9VUF9TSVpFX00KICAgIGdyb3VwX3NpemVfbSA9IG1pbihudW1fcGlkX20gLSBmaXJzdF9waWRfbSwgR1JPVVBfU0laRV9NKQogICAgcGlkX20gPSBmaXJzdF9waWRfbSArICgocGlkICUgbnVtX3BpZF9pbl9ncm91cCkgJSBncm91cF9zaXplX20pCiAgICBwaWRfbiA9IChwaWQgJSBudW1fcGlkX2luX2dyb3VwKSAvLyBncm91cF9zaXplX20KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQ3JlYXRlIHBvaW50ZXJzIGZvciB0aGUgZmlyc3QgYmxvY2tzIG9mIEEgYW5kIEIuCiAgICAjIFdlIHdpbGwgYWR2YW5jZSB0aGlzIHBvaW50ZXIgYXMgd2UgbW92ZSBpbiB0aGUgSyBkaXJlY3Rpb24KICAgICMgYW5kIGFjY3VtdWxhdGUKICAgICMgYGFfcHRyc2AgaXMgYSBibG9jayBvZiBbQkxPQ0tfU0laRV9NLCBCTE9DS19TSVpFX0tdIHBvaW50ZXJzCiAgICAjIGBiX3B0cnNgIGlzIGEgYmxvY2sgb2YgW0JMT0NLX1NJWkVfSywgQkxPQ0tfU0laRV9OXSBwb2ludGVycwogICAgIyBTZWUgYWJvdmUgYFBvaW50ZXIgQXJpdGhtZXRpY2Agc2VjdGlvbiBmb3IgZGV0YWlscwogICAgb2Zmc19hbSA9IChwaWRfbSAqIEJMT0NLX1NJWkVfTSArIHRsLmFyYW5nZSgwLCBCTE9DS19TSVpFX00pKSAlIE0KICAgIG9mZnNfYm4gPSAocGlkX24gKiBCTE9DS19TSVpFX04gKyB0bC5hcmFuZ2UoMCwgQkxPQ0tfU0laRV9OKSkgJSBOCiAgICBvZmZzX2sgPSB0bC5hcmFuZ2UoMCwgQkxPQ0tfU0laRV9LKQogICAgYV9wdHJzID0gYV9wdHIgKyAob2Zmc19hbVs6LCBOb25lXSAqIHN0cmlkZV9hbSArIG9mZnNfa1tOb25lLCA6XSAqIHN0cmlkZV9haykKICAgIGJfcHRycyA9IGJfcHRyICsgKG9mZnNfa1s6LCBOb25lXSAqIHN0cmlkZV9iayArIG9mZnNfYm5bTm9uZSwgOl0gKiBzdHJpZGVfYm4pCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBJdGVyYXRlIHRvIGNvbXB1dGUgYSBibG9jayBvZiB0aGUgQyBtYXRyaXguCiAgICAjIFdlIGFjY3VtdWxhdGUgaW50byBhIGBbQkxPQ0tfU0laRV9NLCBCTE9DS19TSVpFX05dYCBibG9jawogICAgIyBvZiBmcDMyIHZhbHVlcyBmb3IgaGlnaGVyIGFjY3VyYWN5LgogICAgIyBgYWNjdW11bGF0b3JgIHdpbGwgYmUgY29udmVydGVkIGJhY2sgdG8gZnAxNiBhZnRlciB0aGUgbG9vcC4KICAgIGFjY3VtdWxhdG9yID0gdGwuemVyb3MoKEJMT0NLX1NJWkVfTSwgQkxPQ0tfU0laRV9OKSwgZHR5cGU9dGwuZmxvYXQzMikKICAgIGZvciBrIGluIHJhbmdlKDAsIHRsLmNkaXYoSywgQkxPQ0tfU0laRV9LKSk6CiAgICAgICAgIyBMb2FkIHRoZSBuZXh0IGJsb2NrIG9mIEEgYW5kIEIsIGdlbmVyYXRlIGEgbWFzayBieSBjaGVja2luZyB0aGUgSyBkaW1lbnNpb24uCiAgICAgICAgIyBJZiBpdCBpcyBvdXQgb2YgYm91bmRzLCBzZXQgaXQgdG8gMC4KICAgICAgICBhID0gdGwubG9hZChhX3B0cnMsIG1hc2s9b2Zmc19rW05vbmUsIDpdIDwgSyAtIGsgKiBCTE9DS19TSVpFX0ssIG90aGVyPTAuMCkKICAgICAgICBiID0gdGwubG9hZChiX3B0cnMsIG1hc2s9b2Zmc19rWzosIE5vbmVdIDwgSyAtIGsgKiBCTE9DS19TSVpFX0ssIG90aGVyPTAuMCkKICAgICAgICAjIFdlIGFjY3VtdWxhdGUgYWxvbmcgdGhlIEsgZGltZW5zaW9uLgogICAgICAgIGFjY3VtdWxhdG9yID0gdGwuZG90KGEsIGIsIGFjY3VtdWxhdG9yKQogICAgICAgICMgQWR2YW5jZSB0aGUgcHRycyB0byB0aGUgbmV4dCBLIGJsb2NrLgogICAgICAgIGFfcHRycyArPSBCTE9DS19TSVpFX0sgKiBzdHJpZGVfYWsKICAgICAgICBiX3B0cnMgKz0gQkxPQ0tfU0laRV9LICogc3RyaWRlX2JrCiAgICAjIFlvdSBjYW4gZnVzZSBhcmJpdHJhcnkgYWN0aXZhdGlvbiBmdW5jdGlvbnMgaGVyZQogICAgIyB3aGlsZSB0aGUgYWNjdW11bGF0b3IgaXMgc3RpbGwgaW4gRlAzMiEKICAgIGlmIEFDVElWQVRJT04gPT0gImxlYWt5X3JlbHUiOgogICAgICAgIGFjY3VtdWxhdG9yID0gbGVha3lfcmVsdShhY2N1bXVsYXRvcikKICAgIGMgPSBhY2N1bXVsYXRvci50byh0bC5mbG9hdDE2KQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgV3JpdGUgYmFjayB0aGUgYmxvY2sgb2YgdGhlIG91dHB1dCBtYXRyaXggQyB3aXRoIG1hc2tzLgogICAgb2Zmc19jbSA9IHBpZF9tICogQkxPQ0tfU0laRV9NICsgdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkVfTSkKICAgIG9mZnNfY24gPSBwaWRfbiAqIEJMT0NLX1NJWkVfTiArIHRsLmFyYW5nZSgwLCBCTE9DS19TSVpFX04pCiAgICBjX3B0cnMgPSBjX3B0ciArIHN0cmlkZV9jbSAqIG9mZnNfY21bOiwgTm9uZV0gKyBzdHJpZGVfY24gKiBvZmZzX2NuW05vbmUsIDpdCiAgICBjX21hc2sgPSAob2Zmc19jbVs6LCBOb25lXSA8IE0pICYgKG9mZnNfY25bTm9uZSwgOl0gPCBOKQogICAgdGwuc3RvcmUoY19wdHJzLCBjLCBtYXNrPWNfbWFzaykKCmRlZiBtYXRtdWwoYSwgYiwgYWN0aXZhdGlvbj0iIik6CiAgICAjIENoZWNrIGNvbnN0cmFpbnRzLgogICAgSyA9IGEuc2l6ZSgtMSkKICAgIE0gPSBhLm51bWVsKCkgLy8gSwogICAgTiA9IGIuc2l6ZSgxKQogICAgYXNzZXJ0IGEuaXNfY29udGlndW91cygpLCAiTWF0cml4IEEgbXVzdCBiZSBjb250aWd1b3VzIgogICAgYXNzZXJ0IEsgPT0gYi5zaGFwZVswXSwgIkluY29tcGF0aWJsZSBkaW1lbnNpb25zIgogICAgIyBBbGxvY2F0ZXMgb3V0cHV0LgogICAgYyA9IHRvcmNoLmVtcHR5KChNLCBOKSwgZGV2aWNlPWEuZGV2aWNlLCBkdHlwZT10b3JjaC5mbG9hdDE2KQogICAgIyAxRCBsYXVuY2gga2VybmVsIHdoZXJlIGVhY2ggYmxvY2sgZ2V0cyBpdHMgb3duIHByb2dyYW0uCiAgICBncmlkID0gbGFtYmRhIE1FVEE6ICh0cml0b24uY2RpdihNLCBNRVRBWydCTE9DS19TSVpFX00nXSkgKiB0cml0b24uY2RpdihOLCBNRVRBWydCTE9DS19TSVpFX04nXSksICkKICAgIG1hdG11bF9rZXJuZWxbZ3JpZF0oCiAgICAgICAgYSwgYiwgYywgICMKICAgICAgICBNLCBOLCBLLCAgIwogICAgICAgIEssIDEsICAjCiAgICAgICAgYi5zdHJpZGUoMCksIGIuc3RyaWRlKDEpLCAgIwogICAgICAgIE4sIDEsICAjCiAgICAgICAgQkxPQ0tfU0laRV9NPTY0LAogICAgICAgIEJMT0NLX1NJWkVfTj02NCwKICAgICAgICBCTE9DS19TSVpFX0s9MTI4LAogICAgICAgIEdST1VQX1NJWkVfTT00LAogICAgICAgIEFDVElWQVRJT049YWN0aXZhdGlvbiAgIwogICAgKQogICAgcmV0dXJuIGMKCgpAdG9yY2gubm9fZ3JhZCgpCmRlZiBtb2VfZXhwZXJ0X2tlcm5lbCh4OiB0b3JjaC5UZW5zb3IsIHdfZ2F0ZTogdG9yY2guVGVuc29yLCB3X3VwOiB0b3JjaC5UZW5zb3IsIHdfZG93bjogdG9yY2guVGVuc29yKToKICAgIHhfZ2F0ZSA9IG1hdG11bCh4LCB3X2dhdGUpCiAgICB4X2dhdGUgPSBGLnNpbHUoeF9nYXRlKQogICAgeF91cCA9IG1hdG11bCh4LCB3X3VwKQogICAgb3V0ID0geF9nYXRlICogeF91cAogICAgb3V0ID0gbWF0bXVsKG91dCwgd19kb3duKQogICAgcmV0dXJuIG91dAoKIyBtb2UgZ2F0ZQoKQHRvcmNoLm5vX2dyYWQoKQpkZWYgbW9lX2dhdGVfa2VybmVsKHg6IHRvcmNoLlRlbnNvciwgd19nOiB0b3JjaC5UZW5zb3IsIHRvcGs6IGludCk6CiAgICBsb2dpdHMgPSBGLmxpbmVhcih4LCB3X2cpCiAgICBzY29yZXMgPSBsb2dpdHMuc29mdG1heChkaW09LTEpCiAgICB0b3BrX3Njb3JlcywgdG9wa19pbmRpY2VzID0gdG9yY2gudG9wayhzY29yZXMsIGs9dG9waywgZGltPS0xLCBzb3J0ZWQ9RmFsc2UpCgogICAgcmV0dXJuIHRvcGtfaW5kaWNlcywgdG9wa19zY29yZXMKCgojIG1vZSBhbGlnbgoKZGVmIGNlaWxfZGl2KGEsIGIpOgogICAgcmV0dXJuIChhICsgYiAtIDEpIC8vIGIKCgpAdHJpdG9uLmppdApkZWYgbW9lX2FsaWduX2Jsb2NrX3NpemVfc3RhZ2UxKAogICAgdG9wa19pZHNfcHRyLAogICAgdG9rZW5zX2NudHNfcHRyLAogICAgbnVtX2V4cGVydHM6IHRsLmNvbnN0ZXhwciwKICAgIG51bWVsOiB0bC5jb25zdGV4cHIsCiAgICB0b2tlbnNfcGVyX3RocmVhZDogdGwuY29uc3RleHByLAopOgogICAgcGlkID0gdGwucHJvZ3JhbV9pZCgwKQoKICAgIHN0YXJ0X2lkeCA9IHBpZCAqIHRva2Vuc19wZXJfdGhyZWFkCgogICAgb2ZmX2MgPSAocGlkICsgMSkgKiBudW1fZXhwZXJ0cwoKICAgIGZvciBpIGluIHJhbmdlKHRva2Vuc19wZXJfdGhyZWFkKToKICAgICAgICBpZiBzdGFydF9pZHggKyBpIDwgbnVtZWw6CiAgICAgICAgICAgIGlkeCA9IHRsLmxvYWQodG9wa19pZHNfcHRyICsgc3RhcnRfaWR4ICsgaSkKICAgICAgICAgICAgdG9rZW5fY250ID0gdGwubG9hZCh0b2tlbnNfY250c19wdHIgKyBvZmZfYyArIGlkeCkKICAgICAgICAgICAgdGwuc3RvcmUodG9rZW5zX2NudHNfcHRyICsgb2ZmX2MgKyBpZHgsIHRva2VuX2NudCArIDEpCgoKQHRyaXRvbi5qaXQKZGVmIG1vZV9hbGlnbl9ibG9ja19zaXplX3N0YWdlMigKICAgIHRva2Vuc19jbnRzX3B0ciwKICAgIG51bV9leHBlcnRzOiB0bC5jb25zdGV4cHIsCik6CiAgICBwaWQgPSB0bC5wcm9ncmFtX2lkKDApCgogICAgbGFzdF9jbnQgPSAwCiAgICBmb3IgaSBpbiByYW5nZSgxLCBudW1fZXhwZXJ0cyArIDEpOgogICAgICAgIHRva2VuX2NudCA9IHRsLmxvYWQodG9rZW5zX2NudHNfcHRyICsgaSAqIG51bV9leHBlcnRzICsgcGlkKQogICAgICAgIGxhc3RfY250ID0gbGFzdF9jbnQgKyB0b2tlbl9jbnQKICAgICAgICB0bC5zdG9yZSh0b2tlbnNfY250c19wdHIgKyBpICogbnVtX2V4cGVydHMgKyBwaWQsIGxhc3RfY250KQoKCkB0cml0b24uaml0CmRlZiBtb2VfYWxpZ25fYmxvY2tfc2l6ZV9zdGFnZTMoCiAgICB0b3RhbF90b2tlbnNfcG9zdF9wYWRfcHRyLAogICAgdG9rZW5zX2NudHNfcHRyLAogICAgY3Vtc3VtX3B0ciwKICAgIG51bV9leHBlcnRzOiB0bC5jb25zdGV4cHIsCiAgICBibG9ja19zaXplOiB0bC5jb25zdGV4cHIsCik6CiAgICBsYXN0X2N1bXN1bSA9IDAKICAgIG9mZl9jbnQgPSBudW1fZXhwZXJ0cyAqIG51bV9leHBlcnRzCiAgICBmb3IgaSBpbiByYW5nZSgxLCBudW1fZXhwZXJ0cyArIDEpOgogICAgICAgIHRva2VuX2NudCA9IHRsLmxvYWQodG9rZW5zX2NudHNfcHRyICsgb2ZmX2NudCArIGkgLSAxKQogICAgICAgIGxhc3RfY3Vtc3VtID0gbGFzdF9jdW1zdW0gKyB0bC5jZGl2KHRva2VuX2NudCwgYmxvY2tfc2l6ZSkgKiBibG9ja19zaXplCiAgICAgICAgdGwuc3RvcmUoY3Vtc3VtX3B0ciArIGksIGxhc3RfY3Vtc3VtKQogICAgdGwuc3RvcmUodG90YWxfdG9rZW5zX3Bvc3RfcGFkX3B0ciwgbGFzdF9jdW1zdW0pCgoKQHRyaXRvbi5qaXQKZGVmIG1vZV9hbGlnbl9ibG9ja19zaXplX3N0YWdlNCgKICAgIHRvcGtfaWRzX3B0ciwKICAgIHNvcnRlZF90b2tlbl9pZHNfcHRyLAogICAgZXhwZXJ0X2lkc19wdHIsCiAgICB0b2tlbnNfY250c19wdHIsCiAgICBjdW1zdW1fcHRyLAogICAgbnVtX2V4cGVydHM6IHRsLmNvbnN0ZXhwciwKICAgIGJsb2NrX3NpemU6IHRsLmNvbnN0ZXhwciwKICAgIG51bWVsOiB0bC5jb25zdGV4cHIsCiAgICB0b2tlbnNfcGVyX3RocmVhZDogdGwuY29uc3RleHByLAopOgogICAgcGlkID0gdGwucHJvZ3JhbV9pZCgwKQogICAgc3RhcnRfaWR4ID0gdGwubG9hZChjdW1zdW1fcHRyICsgcGlkKQogICAgZW5kX2lkeCA9IHRsLmxvYWQoY3Vtc3VtX3B0ciArIHBpZCArIDEpCgogICAgZm9yIGkgaW4gcmFuZ2Uoc3RhcnRfaWR4LCBlbmRfaWR4LCBibG9ja19zaXplKToKICAgICAgICB0bC5zdG9yZShleHBlcnRfaWRzX3B0ciArIGkgLy8gYmxvY2tfc2l6ZSwgcGlkKQoKICAgIHN0YXJ0X2lkeCA9IHBpZCAqIHRva2Vuc19wZXJfdGhyZWFkCiAgICBvZmZfdCA9IHBpZCAqIG51bV9leHBlcnRzCgogICAgZm9yIGkgaW4gcmFuZ2Uoc3RhcnRfaWR4LCB0bC5taW5pbXVtKHN0YXJ0X2lkeCArIHRva2Vuc19wZXJfdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVsKSk6CiAgICAgICAgZXhwZXJ0X2lkID0gdGwubG9hZCh0b3BrX2lkc19wdHIgKyBpKQogICAgICAgIHRva2VuX2NudCA9IHRsLmxvYWQodG9rZW5zX2NudHNfcHRyICsgb2ZmX3QgKyBleHBlcnRfaWQpCiAgICAgICAgcmFua19wb3N0X3BhZCA9IHRva2VuX2NudCArIHRsLmxvYWQoY3Vtc3VtX3B0ciArIGV4cGVydF9pZCkKICAgICAgICB0bC5zdG9yZShzb3J0ZWRfdG9rZW5faWRzX3B0ciArIHJhbmtfcG9zdF9wYWQsIGkpCiAgICAgICAgdGwuc3RvcmUodG9rZW5zX2NudHNfcHRyICsgb2ZmX3QgKyBleHBlcnRfaWQsIHRva2VuX2NudCArIDEpCgoKZGVmIGludm9rZV9tb2VfYWxpZ25fYmxvY2tfc2l6ZSgKICAgIHRvcGtfaWRzOiB0b3JjaC5UZW5zb3IsCiAgICBudW1fZXhwZXJ0czogaW50LAogICAgYmxvY2tfc2l6ZTogaW50LAopIC0+IE5vbmU6CiAgICAiIiIKICAgIC0gdG9wa19pZHM6IEEgdGVuc29yIG9mIHNoYXBlIFt0b3RhbF90b2tlbnMsIHRvcF9rXSByZXByZXNlbnRpbmcgdGhlCiAgICAgICAgdG9wLWsgZXhwZXJ0IGluZGljZXMgZm9yIGVhY2ggdG9rZW4uCiAgICAtIGJsb2NrX3NpemU6IFRoZSBibG9jayBzaXplIHVzZWQgaW4gYmxvY2sgbWF0cml4IG11bHRpcGxpY2F0aW9uLgogICAgLSBudW1fZXhwZXJ0czogVGhlIHRvdGFsIG51bWJlciBvZiBleHBlcnRzLgoKICAgIFJldHVybnM6CiAgICAtIHNvcnRlZF90b2tlbl9pZHM6IEEgdGVuc29yIGNvbnRhaW5pbmcgdGhlIHNvcnRlZCB0b2tlbiBpbmRpY2VzIGFjY29yZGluZwogICAgICAgIHRvIHRoZWlyIGFsbG9jYXRlZCBleHBlcnQuCiAgICAtIGV4cGVydF9pZHM6IEEgdGVuc29yIGluZGljYXRpbmcgdGhlIGFzc2lnbmVkIGV4cGVydCBpbmRleCBmb3IgZWFjaCBibG9jay4KICAgIC0gbnVtX3Rva2Vuc19wb3N0X3BhZGRlZDogVGhlIHRvdGFsIG51bWJlciBvZiB0b2tlbnMgYWZ0ZXIgcGFkZGluZywKICAgICAgICBlbnN1cmluZyBkaXZpc2liaWxpdHkgYnkgYmxvY2tfc2l6ZS4KCiAgICBUaGlzIGZ1bmN0aW9uIHBhZHMgdGhlIG51bWJlciBvZiB0b2tlbnMgdGhhdCBlYWNoIGV4cGVydCBuZWVkcyB0byBwcm9jZXNzCiAgICBzbyB0aGF0IGl0IGlzIGRpdmlzaWJsZSBieSBibG9ja19zaXplLgogICAgUGFkZGluZyBlbnN1cmVzIHRoYXQgZHVyaW5nIGJsb2NrIG1hdHJpeCBtdWx0aXBsaWNhdGlvbiwgdGhlIGRpbWVuc2lvbnMKICAgIGFsaWduIGNvcnJlY3RseS4KCiAgICBFeGFtcGxlOgogICAgR2l2ZW4gdG9wa19pZHMgPSBbWzIsIDMsIDRdLCBbMSwgMiwgNF0sIFsxLCAzLCA0XSwgWzEsIDIsIDNdXSwKICAgIGJsb2NrX3NpemUgPSA0LCBhbmQgbnVtX2V4cGVydHMgPSA0OgogICAgLSBXZSBpbml0aWFsbHkgaGF2ZSAxMiB0b2tlbnMgKGFmdGVyIHJlcGVhdGluZyAndG9wX2snIHRpbWVzKSBhbmQgNCBleHBlcnRzLAogICAgICAgIHdpdGggZWFjaCBleHBlcnQgbmVlZGluZyB0byBwcm9jZXNzIDMgdG9rZW5zLgogICAgLSBBcyBibG9ja19zaXplIGlzIDQsIHdlIHBhZCAxIHRva2VuIGZvciBlYWNoIGV4cGVydC4KICAgIC0gRmlyc3QsIGZsYXR0ZW4gdG9wa19pZHMgdG8gWzIsIDMsIDQsIDEsIDIsIDQsIDEsIDMsIDQsIDEsIDIsIDNdLgogICAgLSBUaGVuIGFwcGVuZCBwYWRkaW5nIHRva2VucyBbMTIsIDEyLCAxMiwgMTJdIGZvciBlYWNoIGJsb2NrLgogICAgLSBBZnRlciBzb3J0aW5nIGJ5IGV4cGVydCBpbmRleCwgd2Ugb2J0YWluIHRva2VuX2lkcwogICAgICAgIFszLCA2LCA5LCAxMiwgMCwgNCwgMTAsIDEyLCAxLCA3LCAxMSwgMTIsIDIsIDUsIDgsIDEyXS4KICAgICAgICBUb2tlbnMgMTIgYXJlIG5vbi1leGlzdGVudCAocGFkZGluZykgYW5kIGFyZSBpZ25vcmVkIGluCiAgICAgICAgdGhlIHN1YnNlcXVlbnQgbWF0cml4IG11bHRpcGxpY2F0aW9uLgogICAgLSBUaGUgcGFkZGluZyBlbnN1cmVzIHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiB0b2tlbnMgaXMgbm93IGRpdmlzaWJsZQogICAgICAgIGJ5IGJsb2NrX3NpemUgZm9yIHByb3BlciBibG9jayBtYXRyaXggb3BlcmF0aW9ucy4KICAgICIiIgogICAgbWF4X251bV90b2tlbnNfcGFkZGVkID0gdG9wa19pZHMubnVtZWwoKSArIG51bV9leHBlcnRzICogKGJsb2NrX3NpemUgLSAxKQogICAgc29ydGVkX2lkcyA9IHRvcmNoLmVtcHR5KChtYXhfbnVtX3Rva2Vuc19wYWRkZWQsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHR5cGU9dG9yY2guaW50MzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlPXRvcGtfaWRzLmRldmljZSkKICAgIHNvcnRlZF9pZHMuZmlsbF8odG9wa19pZHMubnVtZWwoKSkKICAgIG1heF9udW1fbV9ibG9ja3MgPSB0cml0b24uY2RpdihtYXhfbnVtX3Rva2Vuc19wYWRkZWQsIGJsb2NrX3NpemUpCiAgICAjIEV4cGVydCBpZHMgbXVzdCBiZSB6ZXJvZWQgb3V0IHRvIHByZXZlbnQgaW5kZXggb3V0IG9mIGJvdW5kcyBlcnJvciB3aGlsZQogICAgIyBtYXBwaW5nIGdsb2JhbCBleHBlcnQgaWRzIHRvIGxvY2FsIGV4cGVydCBpZHMgaW4gZXhwZXJ0IHBhcmFsbGVsaXNtLgogICAgZXhwZXJ0X2lkcyA9IHRvcmNoLnplcm9zKChtYXhfbnVtX21fYmxvY2tzLCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0eXBlPXRvcmNoLmludDMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT10b3BrX2lkcy5kZXZpY2UpCiAgICBudW1fdG9rZW5zX3Bvc3RfcGFkID0gdG9yY2guZW1wdHkoKDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0eXBlPXRvcmNoLmludDMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT10b3BrX2lkcy5kZXZpY2UpCgogICAgbnVtZWwgPSB0b3BrX2lkcy5udW1lbCgpCiAgICBncmlkID0gKG51bV9leHBlcnRzLCApCiAgICB0b2tlbnNfY250cyA9IHRvcmNoLnplcm9zKChudW1fZXhwZXJ0cyArIDEsIG51bV9leHBlcnRzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHR5cGU9dG9yY2guaW50MzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT10b3BrX2lkcy5kZXZpY2UpCiAgICBjdW1zdW0gPSB0b3JjaC56ZXJvcygobnVtX2V4cGVydHMgKyAxLCApLAogICAgICAgICAgICAgICAgICAgICAgICAgZHR5cGU9dG9yY2guaW50MzIsCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2U9dG9wa19pZHMuZGV2aWNlKQogICAgdG9rZW5zX3Blcl90aHJlYWQgPSBjZWlsX2RpdihudW1lbCwgbnVtX2V4cGVydHMpCgogICAgIyB0b3JjaC5jdWRhLnN5bmNocm9uaXplKCkKICAgICMgc3RhcnQgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiAgICBtb2VfYWxpZ25fYmxvY2tfc2l6ZV9zdGFnZTFbZ3JpZF0oCiAgICAgICAgdG9wa19pZHMsCiAgICAgICAgdG9rZW5zX2NudHMsCiAgICAgICAgbnVtX2V4cGVydHMsCiAgICAgICAgbnVtZWwsCiAgICAgICAgdG9rZW5zX3Blcl90aHJlYWQsCiAgICApCiAgICAjIHRvcmNoLmN1ZGEuc3luY2hyb25pemUoKQogICAgIyBlbmQgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiAgICAjIHByaW50KGYibW9lX2FsaWduX2Jsb2NrX3NpemVfc3RhZ2UxOiB7ZW5kIC0gc3RhcnR9IikKCiAgICAjIHRvcmNoLmN1ZGEuc3luY2hyb25pemUoKQogICAgIyBzdGFydCA9IHRpbWUucGVyZl9jb3VudGVyX25zKCkKICAgIG1vZV9hbGlnbl9ibG9ja19zaXplX3N0YWdlMltncmlkXSgKICAgICAgICB0b2tlbnNfY250cywKICAgICAgICBudW1fZXhwZXJ0cywKICAgICkKICAgICMgdG9yY2guY3VkYS5zeW5jaHJvbml6ZSgpCiAgICAjIGVuZCA9IHRpbWUucGVyZl9jb3VudGVyX25zKCkKICAgICMgcHJpbnQoZiJtb2VfYWxpZ25fYmxvY2tfc2l6ZV9zdGFnZTI6IHtlbmQgLSBzdGFydH0iKQoKICAgICMgdG9yY2guY3VkYS5zeW5jaHJvbml6ZSgpCiAgICAjIHN0YXJ0ID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQogICAgbW9lX2FsaWduX2Jsb2NrX3NpemVfc3RhZ2UzWygxLCApXSgKICAgICAgICBudW1fdG9rZW5zX3Bvc3RfcGFkLAogICAgICAgIHRva2Vuc19jbnRzLAogICAgICAgIGN1bXN1bSwKICAgICAgICBudW1fZXhwZXJ0cywKICAgICAgICBibG9ja19zaXplLAogICAgKQogICAgIyB0b3JjaC5jdWRhLnN5bmNocm9uaXplKCkKICAgICMgZW5kID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQogICAgIyBwcmludChmIm1vZV9hbGlnbl9ibG9ja19zaXplX3N0YWdlMzoge2VuZCAtIHN0YXJ0fSIpCgogICAgIyB0b3JjaC5jdWRhLnN5bmNocm9uaXplKCkKICAgICMgc3RhcnQgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiAgICBtb2VfYWxpZ25fYmxvY2tfc2l6ZV9zdGFnZTRbZ3JpZF0oCiAgICAgICAgdG9wa19pZHMsCiAgICAgICAgc29ydGVkX2lkcywKICAgICAgICBleHBlcnRfaWRzLAogICAgICAgIHRva2Vuc19jbnRzLAogICAgICAgIGN1bXN1bSwKICAgICAgICBudW1fZXhwZXJ0cywKICAgICAgICBibG9ja19zaXplLAogICAgICAgIG51bWVsLAogICAgICAgIHRva2Vuc19wZXJfdGhyZWFkLAogICAgKQogICAgIyB0b3JjaC5jdWRhLnN5bmNocm9uaXplKCkKICAgICMgZW5kID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQogICAgIyBwcmludChmIm1vZV9hbGlnbl9ibG9ja19zaXplX3N0YWdlNDoge2VuZCAtIHN0YXJ0fSIpCgogICAgcmV0dXJuIHNvcnRlZF9pZHMsIGV4cGVydF9pZHMsIG51bV90b2tlbnNfcG9zdF9wYWQKCgojIHNpbHUgYW5kIG11bAoKCiMgQHRyaXRvbi5qaXQKIyBkZWYgc2lsdV9hbmRfbXVsX2tlcm5lbChpbnB1dF9wdHIsIG91dHB1dF9wdHIsIG5fZWxlbWVudHMsIEJMT0NLX1NJWkU6IHRsLmNvbnN0ZXhwcik6CiMgICAgIHBpZCA9IHRsLnByb2dyYW1faWQoYXhpcz0wKQojICAgICBhX2Jsb2NrX3N0YXJ0ID0gcGlkICogQkxPQ0tfU0laRQojICAgICBiX2Jsb2NrX3N0YXJ0ID0gYV9ibG9ja19zdGFydCArIG5fZWxlbWVudHMKIyAgICAgYV9vZmZzZXRzID0gYV9ibG9ja19zdGFydCArIHRsLmFyYW5nZSgwLCBCTE9DS19TSVpFKQojICAgICBiX29mZnNldHMgPSBiX2Jsb2NrX3N0YXJ0ICsgdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkUpCiMgICAgIGFfbWFzayA9IGFfb2Zmc2V0cyA8IG5fZWxlbWVudHMKIyAgICAgYl9tYXNrID0gYl9vZmZzZXRzIDwgbl9lbGVtZW50cyAqIDIKCiMgICAgIGEgPSB0bC5sb2FkKGlucHV0X3B0ciArIGFfb2Zmc2V0cywgbWFzaz1hX21hc2spCiMgICAgIGIgPSB0bC5sb2FkKGlucHV0X3B0ciArIGJfb2Zmc2V0cywgbWFzaz1iX21hc2spCiMgICAgIG91dHB1dCA9IGEgKiAoMSAvICgxICsgdGwuZXhwKC1hLnRvKHRsLmZsb2F0MzIpKSkpICogYgojICAgICB0bC5zdG9yZShvdXRwdXRfcHRyICsgYV9vZmZzZXRzLCBvdXRwdXQsIG1hc2s9YV9tYXNrKQoKIyBncmlkID0gKHRyaXRvbi5jZGl2KG5fZWxlbWVudHMsIEJMT0NLX1NJWkUpLCkKIyBzaWx1X2FuZF9tdWxfa2VybmVsW2dyaWRdKGlucHV0X3RlbnNvciwgb3V0cHV0X3RlbnNvciwgbl9lbGVtZW50cywgQkxPQ0tfU0laRSkKCkB0cml0b24uaml0CmRlZiBzaWx1X2FuZF9tdWxfa2VybmVsKGlucHV0X3B0ciwgb3V0cHV0X3B0ciwgbl9lbGVtZW50cywgQkxPQ0tfU0laRTogdGwuY29uc3RleHByKToKICAgIHBpZCA9IHRsLnByb2dyYW1faWQoYXhpcz0wKQogICAgYV9yb3dfcHRyID0gaW5wdXRfcHRyICsgcGlkICogbl9lbGVtZW50cyAqIDIKICAgIGJfcm93X3B0ciA9IGFfcm93X3B0ciArIG5fZWxlbWVudHMKICAgIGNfcm93X3B0ciA9IG91dHB1dF9wdHIgKyBwaWQgKiBuX2VsZW1lbnRzCiAgICBvZmZzID0gdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkUpCiAgICBtYXNrID0gb2ZmcyA8IG5fZWxlbWVudHMKCiAgICBmb3IgaSBpbiByYW5nZSgwLCBuX2VsZW1lbnRzLCBCTE9DS19TSVpFKToKICAgICAgICBvZmZzID0gb2ZmcyArIGkKICAgICAgICBhID0gdGwubG9hZChhX3Jvd19wdHIgKyBvZmZzLCBtYXNrPW1hc2spCiAgICAgICAgYiA9IHRsLmxvYWQoYl9yb3dfcHRyICsgb2ZmcywgbWFzaz1tYXNrKQogICAgICAgIGMgPSBhICogKDEgLyAoMSArIHRsLmV4cCgtYS50byh0bC5mbG9hdDMyKSkpKSAqIGIKICAgICAgICB0bC5zdG9yZShjX3Jvd19wdHIgKyBvZmZzLCBjLCBtYXNrPW1hc2spCgoKZGVmIGludm9rZV9zaWx1X2FuZF9tdWxfa2VybmVsKGlucHV0OiB0b3JjaC5UZW5zb3IsIG91dHB1dDogdG9yY2guVGVuc29yKToKICAgIGFzc2VydCBpbnB1dC5pc19jb250aWd1b3VzKCkKICAgIGFzc2VydCBvdXRwdXQuaXNfY29udGlndW91cygpCiAgICBhc3NlcnQgbGVuKGlucHV0LnNoYXBlKSA+IDEKICAgIGFzc2VydCBsZW4oaW5wdXQuc2hhcGUpID09IGxlbihvdXRwdXQuc2hhcGUpCiAgICBhc3NlcnQgaW5wdXQuc2hhcGVbLTFdID09IG91dHB1dC5zaGFwZVstMV0gKiAyCiAgICBhc3NlcnQgaW5wdXQubnVtZWwoKSAvIGlucHV0LnNoYXBlWy0xXSA9PSBvdXRwdXQubnVtZWwoKSAvIG91dHB1dC5zaGFwZVstMV0KCiAgICBuX2VsZW1lbnRzID0gaW5wdXQuc2hhcGVbLTFdIC8vIDIKICAgIGdyaWQgPSAodHJpdG9uLmNkaXYoaW5wdXQubnVtZWwoKSwgaW5wdXQuc2hhcGVbLTFdKSwpCiAgICBzaWx1X2FuZF9tdWxfa2VybmVsW2dyaWRdKGlucHV0LCBvdXRwdXQsIG5fZWxlbWVudHMsIDEwMjQgaWYgbl9lbGVtZW50cyA+IDEwMjQgZWxzZSBuX2VsZW1lbnRzKQoKCmRlZiB0ZXN0X3NpbHVfYW5kX211bF9rZXJuZWwoKToKICAgIG51bV90b2tlbnMgPSA4CiAgICBudW1fZXhwZXJ0ID0gNAogICAgaGlkZGVuX3NpemUgPSAyMDQ4CiAgICBhID0gdG9yY2gucmFuZCgobnVtX3Rva2VucywgbnVtX2V4cGVydCwgaGlkZGVuX3NpemUpLCBkdHlwZT10b3JjaC5mbG9hdDE2LCBkZXZpY2U9ImN1ZGEiKQogICAgYiA9IHRvcmNoLm9uZXMoKG51bV90b2tlbnMsIG51bV9leHBlcnQsIGhpZGRlbl9zaXplLCksIGR0eXBlPXRvcmNoLmZsb2F0MTYsIGRldmljZT0iY3VkYSIpCiAgICAjIGIgPSBiICogMgogICAgaW5wdXRfdGVuc29yID0gdG9yY2guY29uY2F0KChhLCBiKSwgZGltPS0xKQogICAgIyBwcmludChpbnB1dF90ZW5zb3IpCgogICAgb3V0cHV0X3RlbnNvciA9IHRvcmNoLmVtcHR5KChudW1fdG9rZW5zLCBudW1fZXhwZXJ0LCBoaWRkZW5fc2l6ZSwpLCBkdHlwZT10b3JjaC5mbG9hdDE2LCBkZXZpY2U9ImN1ZGEiKQogICAgaW52b2tlX3NpbHVfYW5kX211bF9rZXJuZWwoaW5wdXRfdGVuc29yLCBvdXRwdXRfdGVuc29yKQogICAgIyBwcmludChvdXRwdXRfdGVuc29yKQoKICAgIHJlZl9vdXRwdXQgPSB0b3JjaC5ubi5mdW5jdGlvbmFsLnNpbHUoYSkgKiBiCiAgICAjIHByaW50KHJlZl9vdXRwdXQpCgogICAgcHJpbnQodmVyYm9zZV9hbGxjbG9zZShvdXRwdXRfdGVuc29yLCByZWZfb3V0cHV0LCBydG9sPTFlLTIsIGF0b2w9MWUtMikpCgoKIyBmdXNlZCBleHBlcnRzCgpAdHJpdG9uLmppdApkZWYgZnVzZWRfbW9lX2tlcm5lbCgKICAgICMgUG9pbnRlcnMgdG8gbWF0cmljZXMKICAgIGFfcHRyLAogICAgYl9wdHIsCiAgICBjX3B0ciwKICAgIHRvcGtfd2VpZ2h0c19wdHIsCiAgICBzb3J0ZWRfdG9rZW5faWRzX3B0ciwKICAgIGV4cGVydF9pZHNfcHRyLAogICAgbnVtX3Rva2Vuc19wb3N0X3BhZGRlZF9wdHIsCiAgICAjIE1hdHJpeCBkaW1lbnNpb25zCiAgICBOLAogICAgSywKICAgIEVNLAogICAgbnVtX3ZhbGlkX3Rva2VucywKICAgICMgVGhlIHN0cmlkZSB2YXJpYWJsZXMgcmVwcmVzZW50IGhvdyBtdWNoIHRvIGluY3JlYXNlIHRoZSBwdHIgYnkgd2hlbiBtb3ZpbmcgYnkgMQogICAgIyBlbGVtZW50IGluIGEgcGFydGljdWxhciBkaW1lbnNpb24uIEUuZy4gYHN0cmlkZV9hbWAgaXMgaG93IG11Y2ggdG8gaW5jcmVhc2UgYGFfcHRyYAogICAgIyBieSB0byBnZXQgdGhlIGVsZW1lbnQgb25lIHJvdyBkb3duIChBIGhhcyBNIHJvd3MpLgogICAgc3RyaWRlX2FtLAogICAgc3RyaWRlX2FrLAogICAgc3RyaWRlX2JlLAogICAgc3RyaWRlX2JrLAogICAgc3RyaWRlX2JuLAogICAgc3RyaWRlX2NtLAogICAgc3RyaWRlX2NuLAogICAgc3RyaWRlX3dlaWdodCwKICAgIHN0cmlkZV90b2tlbl9pZCwKICAgICMgTWV0YS1wYXJhbWV0ZXJzCiAgICBCTE9DS19TSVpFX006IHRsLmNvbnN0ZXhwciwKICAgIEJMT0NLX1NJWkVfTjogdGwuY29uc3RleHByLAogICAgQkxPQ0tfU0laRV9LOiB0bC5jb25zdGV4cHIsCiAgICBHUk9VUF9TSVpFX006IHRsLmNvbnN0ZXhwciwKICAgIE1VTF9ST1VURURfV0VJR0hUOiB0bC5jb25zdGV4cHIsCiAgICB0b3BfazogdGwuY29uc3RleHByLAogICAgY29tcHV0ZV90eXBlOiB0bC5jb25zdGV4cHIsCik6CiAgICAiIiIKICAgIEltcGxlbWVudHMgdGhlIGZ1c2VkIGNvbXB1dGF0aW9uIGZvciBhIE1peHR1cmUgb2YgRXhwZXJ0cyAoTU9FKSB1c2luZyB0b2tlbiBhbmQgZXhwZXJ0IG1hdHJpY2VzLgoKICAgIEtleSBQYXJhbWV0ZXJzOgogICAgLSBBOiBUaGUgaW5wdXQgdGVuc29yIHJlcHJlc2VudGluZyB0b2tlbnMgd2l0aCBzaGFwZSAoKiwgSyksIHdoZXJlICcqJyBjYW4gYmUgYW55IHNoYXBlIHJlcHJlc2VudGluZyBiYXRjaGVzIGFuZCBLIGlzIHRoZSBmZWF0dXJlIGRpbWVuc2lvbiBvZiBlYWNoIHRva2VuLgogICAgLSBCOiBUaGUgc3RhY2tlZCBNT0Ugd2VpZ2h0IHRlbnNvciB3aXRoIHNoYXBlIChFLCBOLCBLKSwgd2hlcmUgRSBpcyB0aGUgbnVtYmVyIG9mIGV4cGVydHMsIEsgaXMgdGhlIGlucHV0IGZlYXR1cmUgZGltZW5zaW9uLCBhbmQgTiBpcyB0aGUgb3V0cHV0IGZlYXR1cmUgZGltZW5zaW9uLgogICAgLSBDOiBUaGUgb3V0cHV0IGNhY2hlIHRlbnNvciB3aXRoIHNoYXBlIChNLCB0b3BrLCBOKSwgd2hlcmUgTSBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRva2VucyBwb3N0IHBhZGRpbmcsIHRvcGsgaXMgdGhlIG51bWJlciBvZiB0aW1lcyBlYWNoIHRva2VuIGlzIHJlcGVhdGVkLAogICAgICAgIGFuZCBOIGlzIHRoZSBvdXRwdXQgZmVhdHVyZSBkaW1lbnNpb24uCiAgICAtIHNvcnRlZF90b2tlbl9pZHM6IEEgdGVuc29yIGNvbnRhaW5pbmcgdGhlIHNvcnRlZCBpbmRpY2VzIG9mIHRva2VucywgcmVwZWF0ZWQgdG9wayB0aW1lcyBhbmQgYXJyYW5nZWQgYnkgdGhlIGV4cGVydCBpbmRleCB0aGV5IGFyZSBhc3NpZ25lZCB0by4KICAgIC0gZXhwZXJ0X2lkczogQSB0ZW5zb3IgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgZXhwZXJ0IGZvciBlYWNoIGJsb2NrLiBJdCBkZXRlcm1pbmVzIHdoaWNoIGV4cGVydCBtYXRyaXggZnJvbSBCIHNob3VsZCBiZSB1c2VkIGZvciBlYWNoIGJsb2NrIGluIEEuCiAgICBUaGlzIGtlcm5lbCBwZXJmb3JtcyB0aGUgbXVsdGlwbGljYXRpb24gb2YgYSB0b2tlbiBieSBpdHMgY29ycmVzcG9uZGluZyBleHBlcnQgbWF0cml4IGFzIGRldGVybWluZWQgYnkgYGV4cGVydF9pZHNgLiBUaGUgc29ydGluZyBvZiBgc29ydGVkX3Rva2VuX2lkc2AKICAgIGJ5IGV4cGVydCBpbmRleCBhbmQgcGFkZGluZyBlbnN1cmVzIGRpdmlzaWJpbGl0eSBieSBCTE9DS19TSVpFX00sIHdoaWNoIGlzIG5lY2Vzc2FyeSB0byBtYWludGFpbiBjb25zaXN0ZW5jeSBpbiBibG9jayBtYXRyaXggbXVsdGlwbGljYXRpb24gYWNyb3NzIGRpZmZlcmVudCBibG9ja3MgcHJvY2Vzc2VkIGJ5IHRoZSBzYW1lIGV4cGVydC4KICAgICIiIgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBNYXAgcHJvZ3JhbSBpZHMgYHBpZGAgdG8gdGhlIGJsb2NrIG9mIEMgaXQgc2hvdWxkIGNvbXB1dGUuCiAgICAjIFRoaXMgaXMgZG9uZSBpbiBhIGdyb3VwZWQgb3JkZXJpbmcgdG8gcHJvbW90ZSBMMiBkYXRhIHJldXNlLgogICAgcGlkID0gdGwucHJvZ3JhbV9pZChheGlzPTApCiAgICBudW1fcGlkX20gPSB0bC5jZGl2KEVNLCBCTE9DS19TSVpFX00pCiAgICBudW1fcGlkX24gPSB0bC5jZGl2KE4sIEJMT0NLX1NJWkVfTikKICAgIG51bV9waWRfaW5fZ3JvdXAgPSBHUk9VUF9TSVpFX00gKiBudW1fcGlkX24KICAgIGdyb3VwX2lkID0gcGlkIC8vIG51bV9waWRfaW5fZ3JvdXAKICAgIGZpcnN0X3BpZF9tID0gZ3JvdXBfaWQgKiBHUk9VUF9TSVpFX00KICAgIGdyb3VwX3NpemVfbSA9IG1pbihudW1fcGlkX20gLSBmaXJzdF9waWRfbSwgR1JPVVBfU0laRV9NKQogICAgcGlkX20gPSBmaXJzdF9waWRfbSArICgocGlkICUgbnVtX3BpZF9pbl9ncm91cCkgJSBncm91cF9zaXplX20pCiAgICBwaWRfbiA9IChwaWQgJSBudW1fcGlkX2luX2dyb3VwKSAvLyBncm91cF9zaXplX20KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQ3JlYXRlIHBvaW50ZXJzIGZvciB0aGUgZmlyc3QgYmxvY2tzIG9mIEEgYW5kIEIuCiAgICAjIFdlIHdpbGwgYWR2YW5jZSB0aGlzIHBvaW50ZXIgYXMgd2UgbW92ZSBpbiB0aGUgSyBkaXJlY3Rpb24KICAgICMgYW5kIGFjY3VtdWxhdGUKICAgICMgYGFfcHRyc2AgaXMgYSBibG9jayBvZiBbQkxPQ0tfU0laRV9NLCBCTE9DS19TSVpFX0tdIHBvaW50ZXJzCiAgICAjIGBiX3B0cnNgIGlzIGEgYmxvY2sgb2YgW0JMT0NLX1NJWkVfSywgQkxPQ0tfU0laRV9OXSBwb2ludGVycwogICAgbnVtX3Rva2Vuc19wb3N0X3BhZGRlZCA9IHRsLmxvYWQobnVtX3Rva2Vuc19wb3N0X3BhZGRlZF9wdHIpCiAgICBpZiBwaWRfbSAqIEJMT0NLX1NJWkVfTSA+PSBudW1fdG9rZW5zX3Bvc3RfcGFkZGVkOgogICAgICAgIHJldHVybgoKICAgIG9mZnNfdG9rZW5faWQgPSBwaWRfbSAqIEJMT0NLX1NJWkVfTSArIHRsLmFyYW5nZSgwLCBCTE9DS19TSVpFX00pCiAgICBvZmZzX3Rva2VuID0gdGwubG9hZChzb3J0ZWRfdG9rZW5faWRzX3B0ciArIG9mZnNfdG9rZW5faWQpCiAgICB0b2tlbl9tYXNrID0gb2Zmc190b2tlbiA8IG51bV92YWxpZF90b2tlbnMKCiAgICBvZmZzX2JuID0gKHBpZF9uICogQkxPQ0tfU0laRV9OICsgdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkVfTikpICUgTgogICAgb2Zmc19rID0gdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkVfSykKICAgIGFfcHRycyA9IGFfcHRyICsgKG9mZnNfdG9rZW5bOiwgTm9uZV0gLy8gdG9wX2sgKiBzdHJpZGVfYW0gKyBvZmZzX2tbTm9uZSwgOl0gKiBzdHJpZGVfYWspCgogICAgb2ZmX2V4cGVydHMgPSB0bC5sb2FkKGV4cGVydF9pZHNfcHRyICsgcGlkX20pCiAgICBiX3B0cnMgPSBiX3B0ciArIG9mZl9leHBlcnRzICogc3RyaWRlX2JlICsgKG9mZnNfa1s6LCBOb25lXSAqIHN0cmlkZV9iayArIG9mZnNfYm5bTm9uZSwgOl0gKiBzdHJpZGVfYm4pCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBJdGVyYXRlIHRvIGNvbXB1dGUgYSBibG9jayBvZiB0aGUgQyBtYXRyaXguCiAgICAjIFdlIGFjY3VtdWxhdGUgaW50byBhIGBbQkxPQ0tfU0laRV9NLCBCTE9DS19TSVpFX05dYCBibG9jawogICAgIyBvZiBmcDMyIHZhbHVlcyBmb3IgaGlnaGVyIGFjY3VyYWN5LgogICAgIyBgYWNjdW11bGF0b3JgIHdpbGwgYmUgY29udmVydGVkIGJhY2sgdG8gZnAxNiBhZnRlciB0aGUgbG9vcC4KICAgIGFjY3VtdWxhdG9yID0gdGwuemVyb3MoKEJMT0NLX1NJWkVfTSwgQkxPQ0tfU0laRV9OKSwgZHR5cGU9dGwuZmxvYXQzMikKCiAgICBmb3IgayBpbiByYW5nZSgwLCB0bC5jZGl2KEssIEJMT0NLX1NJWkVfSykpOgogICAgICAgICMgTG9hZCB0aGUgbmV4dCBibG9jayBvZiBBIGFuZCBCLCBnZW5lcmF0ZSBhIG1hc2sgYnkgY2hlY2tpbmcgdGhlIEsgZGltZW5zaW9uLgogICAgICAgIGEgPSB0bC5sb2FkKGFfcHRycywKICAgICAgICAgICAgICAgICAgICBtYXNrPXRva2VuX21hc2tbOiwgTm9uZV0gJgogICAgICAgICAgICAgICAgICAgIChvZmZzX2tbTm9uZSwgOl0gPCBLIC0gayAqIEJMT0NLX1NJWkVfSyksCiAgICAgICAgICAgICAgICAgICAgb3RoZXI9MC4wKQogICAgICAgIGIgPSB0bC5sb2FkKGJfcHRycywKICAgICAgICAgICAgICAgICAgICBtYXNrPW9mZnNfa1s6LCBOb25lXSA8IEsgLSBrICogQkxPQ0tfU0laRV9LLAogICAgICAgICAgICAgICAgICAgIG90aGVyPTAuMCkKCiAgICAgICAgIyBXZSBhY2N1bXVsYXRlIGFsb25nIHRoZSBLIGRpbWVuc2lvbi4KICAgICAgICBhY2N1bXVsYXRvciArPSB0bC5kb3QoYSwgYikKICAgICAgICAjIEFkdmFuY2UgdGhlIHB0cnMgdG8gdGhlIG5leHQgSyBibG9jay4KICAgICAgICBhX3B0cnMgKz0gQkxPQ0tfU0laRV9LICogc3RyaWRlX2FrCiAgICAgICAgYl9wdHJzICs9IEJMT0NLX1NJWkVfSyAqIHN0cmlkZV9iawoKICAgIGlmIE1VTF9ST1VURURfV0VJR0hUOgogICAgICAgIG1vZV93ZWlnaHQgPSB0bC5sb2FkKHRvcGtfd2VpZ2h0c19wdHIgKyBvZmZzX3Rva2VuICogc3RyaWRlX3dlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrPXRva2VuX21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXI9MCkKICAgICAgICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICogbW9lX3dlaWdodFs6LCBOb25lXQoKICAgIGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IudG8oY29tcHV0ZV90eXBlKQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBXcml0ZSBiYWNrIHRoZSBibG9jayBvZiB0aGUgb3V0cHV0CiAgICBvZmZzX2NuID0gcGlkX24gKiBCTE9DS19TSVpFX04gKyB0bC5hcmFuZ2UoMCwgQkxPQ0tfU0laRV9OKQogICAgY19wdHJzID0gY19wdHIgKyBzdHJpZGVfY20gKiBvZmZzX3Rva2VuWzosIE5vbmVdICsgc3RyaWRlX2NuICogb2Zmc19jblsKICAgICAgICBOb25lLCA6XQogICAgY19tYXNrID0gdG9rZW5fbWFza1s6LCBOb25lXSAmIChvZmZzX2NuW05vbmUsIDpdIDwgTikKICAgIHRsLnN0b3JlKGNfcHRycywgYWNjdW11bGF0b3IsIG1hc2s9Y19tYXNrKQoKCmRlZiBpbnZva2VfZnVzZWRfbW9lX2tlcm5lbChBOiB0b3JjaC5UZW5zb3IsIEI6IHRvcmNoLlRlbnNvciwgQzogdG9yY2guVGVuc29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wa193ZWlnaHRzOiB0b3JjaC5UZW5zb3IsIHRvcGtfaWRzOiB0b3JjaC5UZW5zb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWRfdG9rZW5faWRzOiB0b3JjaC5UZW5zb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlcnRfaWRzOiB0b3JjaC5UZW5zb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fdG9rZW5zX3Bvc3RfcGFkZGVkOiB0b3JjaC5UZW5zb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxfcm91dGVkX3dlaWdodDogYm9vbCwgdG9wX2s6IGludCk6CgogICAgZ3JpZCA9IGxhbWJkYSBNRVRBOiAodHJpdG9uLmNkaXYoc29ydGVkX3Rva2VuX2lkcy5zaGFwZVswXSwgTUVUQVsnQkxPQ0tfU0laRV9NJ10pICogdHJpdG9uLmNkaXYoQi5zaGFwZVsxXSwgTUVUQVsnQkxPQ0tfU0laRV9OJ10pLCApCiAgICBmdXNlZF9tb2Vfa2VybmVsW2dyaWRdKAogICAgICAgIEEsCiAgICAgICAgQiwKICAgICAgICBDLAogICAgICAgIHRvcGtfd2VpZ2h0cywKICAgICAgICBzb3J0ZWRfdG9rZW5faWRzLAogICAgICAgIGV4cGVydF9pZHMsCiAgICAgICAgbnVtX3Rva2Vuc19wb3N0X3BhZGRlZCwKICAgICAgICBCLnNoYXBlWzFdLAogICAgICAgIEIuc2hhcGVbMl0sCiAgICAgICAgc29ydGVkX3Rva2VuX2lkcy5zaGFwZVswXSwKICAgICAgICB0b3BrX2lkcy5udW1lbCgpLAogICAgICAgIEEuc3RyaWRlKDApLAogICAgICAgIEEuc3RyaWRlKDEpLAogICAgICAgIEIuc3RyaWRlKDApLAogICAgICAgIEIuc3RyaWRlKDIpLAogICAgICAgIEIuc3RyaWRlKDEpLAogICAgICAgIEMuc3RyaWRlKDEpLAogICAgICAgIEMuc3RyaWRlKDIpLAogICAgICAgIHRvcGtfd2VpZ2h0cy5zdHJpZGUoMiksCiAgICAgICAgc29ydGVkX3Rva2VuX2lkcy5zdHJpZGUoMCksCiAgICAgICAgTVVMX1JPVVRFRF9XRUlHSFQ9bXVsX3JvdXRlZF93ZWlnaHQsCiAgICAgICAgdG9wX2s9dG9wX2ssCiAgICAgICAgY29tcHV0ZV90eXBlPXRsLmJmbG9hdDE2IGlmIEEuZHR5cGUgPT0gdG9yY2guYmZsb2F0MTYgZWxzZSB0bC5mbG9hdDE2LAogICAgICAgIEJMT0NLX1NJWkVfTT1CTE9DS19TSVpFX00sCiAgICAgICAgQkxPQ0tfU0laRV9OPUJMT0NLX1NJWkVfTiwKICAgICAgICBCTE9DS19TSVpFX0s9QkxPQ0tfU0laRV9LLAogICAgICAgIEdST1VQX1NJWkVfTT1HUk9VUF9TSVpFX00sCiAgICAgICAgbnVtX3dhcnBzPTgsCiAgICAgICAgbnVtX3N0YWdlcz0yLAogICAgICAgIHdhdmVzX3Blcl9ldT0wLAogICAgICAgIGtwYWNrPTEsCiAgICAgICAgbWF0cml4X2luc3RyX25vbmtkaW09MTYsCiAgICApCgoKIyBtYWluIGtlcm5lbAoKQHRvcmNoLm5vX2dyYWQoKQpkZWYgbW9lX2V4cGVydF9rZXJuZWwoeDogdG9yY2guVGVuc29yLCB3X2dhdGU6IHRvcmNoLlRlbnNvciwgd191cDogdG9yY2guVGVuc29yLCB3X2Rvd246IHRvcmNoLlRlbnNvcik6CiAgICAjIHhfZ2F0ZSA9IHggQCB3X2dhdGUKICAgIHhfZ2F0ZSA9IEYubGluZWFyKHgsIHdfZ2F0ZS5UKQogICAgeF9nYXRlID0gRi5zaWx1KHhfZ2F0ZSkKICAgICMgeF91cCA9IHggQCB3X3VwCiAgICB4X3VwID0gRi5saW5lYXIoeCwgd191cC5UKQogICAgb3V0ID0geF9nYXRlICogeF91cAogICAgIyBvdXQgPSBvdXQgQCB3X2Rvd24KICAgIG91dCA9IEYubGluZWFyKG91dCwgd19kb3duLlQpCiAgICByZXR1cm4gb3V0CgoKQHRyaXRvbi5qaXQKZGVmIHRyYW5zcG9zZV9rZXJuZWwoCiAgICBNOiB0bC5jb25zdGV4cHIsCiAgICBOOiB0bC5jb25zdGV4cHIsCiAgICBCTE9DS19NOiB0bC5jb25zdGV4cHIsCiAgICBCTE9DS19OOiB0bC5jb25zdGV4cHIsCiAgICBYLAogICAgc3RyaWRlX3htOiB0bC5jb25zdGV4cHIsCiAgICBzdHJpZGVfeG46IHRsLmNvbnN0ZXhwciwKICAgIFksCiAgICBzdHJpZGVfeW06IHRsLmNvbnN0ZXhwciwKICAgIHN0cmlkZV95bjogdGwuY29uc3RleHByLAogICAgSURYOiB0bC5jb25zdGV4cHIsCik6CiAgICBwaWRfbSA9IHRsLnByb2dyYW1faWQoMCkudG8odGwuaW50NjQpCiAgICBwaWRfbiA9IHRsLnByb2dyYW1faWQoMSkudG8odGwuaW50NjQpCgogICAgbV9leGFjdDogdGwuY29uc3RleHByID0gKE0gJSBCTE9DS19NKSA9PSAwCiAgICBuX2V4YWN0OiB0bC5jb25zdGV4cHIgPSAoTiAlIEJMT0NLX04pID09IDAKCiAgICBvZmZfbSA9IHBpZF9tICogQkxPQ0tfTSArIHRsLmFyYW5nZSgwLCBCTE9DS19NKQogICAgb2ZmX24gPSBwaWRfbiAqIEJMT0NLX04gKyB0bC5hcmFuZ2UoMCwgQkxPQ0tfTikKCiAgICBtYXNrX20gPSBvZmZfbSA8IE0KICAgIG1hc2tfbiA9IG9mZl9uIDwgTgoKICAgIGlmIG1fZXhhY3Q6CiAgICAgICAgaWYgbl9leGFjdDoKICAgICAgICAgICAgbWFzayA9IE5vbmUKICAgICAgICAgICAgb3RoZXIgPSBOb25lCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbWFzayA9IG1hc2tfbltOb25lLCA6XQogICAgICAgICAgICBvdGhlciA9IDAKICAgIGVsc2U6CiAgICAgICAgaWYgbl9leGFjdDoKICAgICAgICAgICAgbWFzayA9IG1hc2tfbVs6LCBOb25lXQogICAgICAgICAgICBvdGhlciA9IDAKICAgICAgICBlbHNlOgogICAgICAgICAgICBtYXNrID0gbWFza19tWzosIE5vbmVdICYgbWFza19uW05vbmUsIDpdCiAgICAgICAgICAgIG90aGVyID0gMAoKICAgICMgWF9wdHJzID0gWCArIG9mZl9tWzosIE5vbmVdICogMSArIG9mZl9uW05vbmUsIDpdICogTQogICAgIyBZX3B0cnMgPSBZICsgKEVfSUQgKiAyICsgV19JRCkgKiBNICogTiArIG9mZl9tWzosIE5vbmVdICogTiArIG9mZl9uW05vbmUsIDpdICogMQogICAgWF9wdHJzID0gWCArIG9mZl9tWzosIE5vbmVdICogc3RyaWRlX3htICsgb2ZmX25bTm9uZSwgOl0gKiBzdHJpZGVfeG4KICAgIFlfcHRycyA9IFkgKyBJRFggKiBNICogTiArIG9mZl9tWzosIE5vbmVdICogc3RyaWRlX3ltICsgb2ZmX25bTm9uZSwgOl0gKiBzdHJpZGVfeW4KCiAgICB0aWxlID0gdGwubG9hZChYX3B0cnMsIG1hc2s9bWFzaywgb3RoZXI9b3RoZXIpCiAgICB0bC5zdG9yZShZX3B0cnMsIHRpbGUsIG1hc2s9bWFzaykKCgpkZWYgaW52b2tlX3RyYW5zcG9zZShYLCBZLCBJRFg9MCwgQkxPQ0tfTT0xMjgsIEJMT0NLX049MTI4LCBudW1fd2FycHM9MTYpIC0+IE5vbmU6CiAgICBpZiBYLmR0eXBlLml0ZW1zaXplID09IDE6CiAgICAgICAgWCA9IFgudmlldyh0b3JjaC5pbnQ4KQogICAgaWYgWS5kdHlwZS5pdGVtc2l6ZSA9PSAxOgogICAgICAgIFkgPSBZLnZpZXcodG9yY2guaW50OCkKCiAgICAjIGNoZWNrIGNvbXBhdGliaWxpdHk6CiAgICBhc3NlcnQgWC5kdHlwZSA9PSBZLmR0eXBlCgogICAgTSA9IFguc2hhcGVbMF0KICAgIE4gPSBYLnNoYXBlWzFdCgogICAgc3RyaWRlX3htID0gWC5zdHJpZGUoMCkKICAgIHN0cmlkZV94biA9IFguc3RyaWRlKDEpCgogICAgc3RyaWRlX3ltID0gWS5zdHJpZGUoLTIpCiAgICBzdHJpZGVfeW4gPSBZLnN0cmlkZSgtMSkKCiAgICBncmlkID0gKChNICsgQkxPQ0tfTSAtIDEpIC8vIEJMT0NLX00sIChOICsgQkxPQ0tfTiAtIDEpIC8vIEJMT0NLX04pCiAgICB0cmFuc3Bvc2Vfa2VybmVsW2dyaWRdKAogICAgICAgIE0sCiAgICAgICAgTiwKICAgICAgICBCTE9DS19NLAogICAgICAgIEJMT0NLX04sCiAgICAgICAgWCwKICAgICAgICBzdHJpZGVfeG0sCiAgICAgICAgc3RyaWRlX3huLAogICAgICAgIFksCiAgICAgICAgc3RyaWRlX3ltLAogICAgICAgIHN0cmlkZV95biwKICAgICAgICBJRFg9SURYLAogICAgICAgIG51bV93YXJwcz1udW1fd2FycHMsCiAgICApCgoKdzE6IHRvcmNoLlRlbnNvciA9IHRvcmNoLmVtcHR5KCgzMiwgNDA5NiwgNzE2OCksIGR0eXBlPXRvcmNoLmZsb2F0MTYsIGRldmljZT0iY3VkYSIpCncyOiB0b3JjaC5UZW5zb3IgPSB0b3JjaC5lbXB0eSgoMzIsIDcxNjgsIDIwNDgpLCBkdHlwZT10b3JjaC5mbG9hdDE2LCBkZXZpY2U9ImN1ZGEiKQoKCkB0b3JjaC5ub19ncmFkKCkKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICAiIiIKICAgIFJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBEZWVwU2Vlay1zdHlsZSBNaXh0dXJlIG9mIEV4cGVydHMgdXNpbmcgUHlUb3JjaC4KICAgIAogICAgQXJnczoKICAgICAgICBkYXRhOiBUdXBsZSBvZiAoaW5wdXQ6IHRvcmNoLlRlbnNvciwgd2VpZ2h0czogRGljdFtzdHIsIHRvcmNoLlRlbnNvcl0sIGNvbmZpZzogRGljdCkKICAgICAgICAgICAgLSBpbnB1dDogSW5wdXQgdGVuc29yIG9mIHNoYXBlIFtiYXRjaF9zaXplLCBzZXFfbGVuLCBoaWRkZW5fZGltXQogICAgICAgICAgICAtIHdlaWdodHM6IERpY3Rpb25hcnkgY29udGFpbmluZyBtb2RlbCB3ZWlnaHRzCiAgICAgICAgICAgIC0gY29uZmlnOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgbW9kZWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCiAgICAgICAgICAgIAogICAgUmV0dXJuczoKICAgICAgICBUdXBsZSBjb250YWluaW5nOgogICAgICAgICAgICAtIG91dHB1dDogUHJvY2Vzc2VkIHRlbnNvciBbYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgZF9tb2RlbF0KICAgICAgICAgICAgLSBhdXhfZGF0YTogRGljdGlvbmFyeSB3aXRoIGF1eGlsaWFyeSBkYXRhCiAgICAiIiIKICAgIHRpbWVfbGlzdCA9IFtdCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHByZXBhcmUgd2VpZ2h0CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgogICAgaW5wdXRfdGVuc29yOiB0b3JjaC5UZW5zb3IKICAgIHdlaWdodHM6IERpY3Rbc3RyLCB0b3JjaC5UZW5zb3JdCiAgICBjb25maWc6IERpY3Rbc3RyLCBpbnRdCiAgICBpbnB1dF90ZW5zb3IsIHdlaWdodHMsIGNvbmZpZyA9IGRhdGEKCiAgICBNID0gY29uZmlnWyJiYXRjaF9zaXplIl0gKiBjb25maWdbInNlcV9sZW4iXQogICAgTiA9IGNvbmZpZ1siZF9leHBlcnQiXQogICAgSyA9IGNvbmZpZ1siZF9oaWRkZW4iXQoKICAgIGZvciBpIGluIHJhbmdlKGNvbmZpZ1sibl9yb3V0ZWRfZXhwZXJ0cyJdKToKICAgICAgICBmb3IgaiBpbiByYW5nZSgyKToKICAgICAgICAgICAgaW52b2tlX3RyYW5zcG9zZSh3ZWlnaHRzW2YiZXhwZXJ0cy57aX0ue2p9LndlaWdodCJdLlQsIHcxLCBpICogMiArIGopCiAgICBmb3IgaSBpbiByYW5nZShjb25maWdbIm5fcm91dGVkX2V4cGVydHMiXSk6CiAgICAgICAgaW52b2tlX3RyYW5zcG9zZSh3ZWlnaHRzW2YiZXhwZXJ0cy57aX0uMi53ZWlnaHQiXS5ULCB3MiwgaSkKCiAgICBpbnRlcm1lZGlhdGVfY2FjaGUxID0gdG9yY2gub25lcygoTSwgY29uZmlnWyJuX2V4cGVydHNfcGVyX3Rva2VuIl0sIE4gKiAyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2U9aW5wdXRfdGVuc29yLmRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdHlwZT1pbnB1dF90ZW5zb3IuZHR5cGUpCiAgICBpbnRlcm1lZGlhdGVfY2FjaGUyID0gdG9yY2guZW1wdHkoKE0gKiBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXSwgTiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlPWlucHV0X3RlbnNvci5kZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHR5cGU9aW5wdXRfdGVuc29yLmR0eXBlKQogICAgaW50ZXJtZWRpYXRlX2NhY2hlMyA9IHRvcmNoLmVtcHR5KChNLCBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXSwgSyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlPWlucHV0X3RlbnNvci5kZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHR5cGU9aW5wdXRfdGVuc29yLmR0eXBlKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBtb2UgZ2F0ZQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKICAgIGV4cGVydF9pbmRpY2VzLCBleHBlcnRfc2NvcmVzID0gbW9lX2dhdGVfa2VybmVsKAogICAgICAgIGlucHV0X3RlbnNvciwKICAgICAgICB3ZWlnaHRzWydyb3V0ZXIud2VpZ2h0J10sCiAgICAgICAgY29uZmlnWyJuX2V4cGVydHNfcGVyX3Rva2VuIl0pCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHNoYXJlZF9leHBlcnRzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgogICAgc2hhcmVkX291dHB1dCA9IG1vZV9leHBlcnRfa2VybmVsKAogICAgICAgIGlucHV0X3RlbnNvciwKICAgICAgICB3ZWlnaHRzWydzaGFyZWRfZXhwZXJ0cy4wLndlaWdodCddLAogICAgICAgIHdlaWdodHNbJ3NoYXJlZF9leHBlcnRzLjEud2VpZ2h0J10sCiAgICAgICAgd2VpZ2h0c1snc2hhcmVkX2V4cGVydHMuMi53ZWlnaHQnXSkKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgbW9lIGFsaWduCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgogICAgc29ydGVkX3Rva2VuX2lkcywgZXhwZXJ0X2lkcywgbnVtX3Rva2Vuc19wb3N0X3BhZGRlZCA9IGludm9rZV9tb2VfYWxpZ25fYmxvY2tfc2l6ZSgKICAgICAgICBleHBlcnRfaW5kaWNlcywgY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0sIEJMT0NLX1NJWkVfTSkKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgZnVzZWRfbW9lXzEKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiAgICBpbnZva2VfZnVzZWRfbW9lX2tlcm5lbChpbnB1dF90ZW5zb3IudmlldygtMSwgSyksIHcxLCBpbnRlcm1lZGlhdGVfY2FjaGUxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZXJ0X3Njb3JlcywgZXhwZXJ0X2luZGljZXMsIHNvcnRlZF90b2tlbl9pZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlcnRfaWRzLCBudW1fdG9rZW5zX3Bvc3RfcGFkZGVkLCBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVydF9pbmRpY2VzLnNoYXBlWzJdKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBzaWx1X2FuZF9tdWwKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiAgICBpbnZva2Vfc2lsdV9hbmRfbXVsX2tlcm5lbChpbnRlcm1lZGlhdGVfY2FjaGUxLnZpZXcoLTEsIDIgKiBOKSwgaW50ZXJtZWRpYXRlX2NhY2hlMikKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgZnVzZWRfbW9lXzIKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiAgICBpbnZva2VfZnVzZWRfbW9lX2tlcm5lbChpbnRlcm1lZGlhdGVfY2FjaGUyLCB3MiwgaW50ZXJtZWRpYXRlX2NhY2hlMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVydF9zY29yZXMsIGV4cGVydF9pbmRpY2VzLCBzb3J0ZWRfdG9rZW5faWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZXJ0X2lkcywgbnVtX3Rva2Vuc19wb3N0X3BhZGRlZCwgVHJ1ZSwgMSkKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc3VtCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgogICAgcm91dGVkX291dHB1dCA9IHRvcmNoLnN1bSgKICAgICAgICBpbnRlcm1lZGlhdGVfY2FjaGUzLnZpZXcoKmludGVybWVkaWF0ZV9jYWNoZTMuc2hhcGUpLCBkaW09MSkudmlldyhjb25maWdbImJhdGNoX3NpemUiXSwgY29uZmlnWyJzZXFfbGVuIl0sIEspCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGFkZAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKICAgIG91dHB1dCA9IHJvdXRlZF9vdXRwdXQgKyBzaGFyZWRfb3V0cHV0CgogICAgcmV0dXJuIG91dHB1dAo=

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 26152.

Best evidence level for this revision: reported

JSON