Skip to content
KernelIndex
Search⌘K

amd-mixture-of-experts · submission 29033

KernelBot user 142 · 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.

batched_moe.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mixture-of-experts-29033?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
58.2ms
#72 of 118
2025-05-29
AMD DeepSeek-style MoE layerfp16 · [1, 8192, 7168]
AMD Instinct MI300X
164.3ms
#72 of 118
2025-05-29

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:09943fb4cc00be22104370bc1846e30c73871c28db94e9f5ccb12448e8da5a83
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

batched_moe.py1 lines
IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1taXh0dXJlLW9mLWV4cGVydHMKaW1wb3J0IHRvcmNoCmltcG9ydCB0b3JjaC5ubiBhcyBubgppbXBvcnQgdG9yY2gubm4uZnVuY3Rpb25hbCBhcyBGCmZyb20gdHlwaW5nIGltcG9ydCBEaWN0LCBUdXBsZQoKaW1wb3J0IHRyaXRvbgppbXBvcnQgdHJpdG9uLmxhbmd1YWdlIGFzIHRsCgpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90ICMgQXNzdW1pbmcgdGFzay5weSBkZWZpbmVzIHRoZXNlIHR5cGVzCgpIQVJEQ09ERURfRkZOX0NPTkZJR1NfU0hBUkVEID0gewogICAgIyAoTV90b2tlbnMsIE5fb3V0LCBLX2luLCBLX2ludGVyKTogKEJMT0NLX00sIEJMT0NLX05fT1VULCBCTE9DS19LX0lOLCBCTE9DS19LX0lOVEVSLCBHUk9VUF9NLCBXQVJQUywgU1RBR0VTKQogICAgKDIwNDgsIDcxNjgsIDcxNjgsIDIwNDgpOiAoMTI4LCA1MTIsIDY0LCA2NCwgOCwgOCwgMiksICMgVXBkYXRlZAogICAgKDgxOTIsIDcxNjgsIDcxNjgsIDIwNDgpOiAoMTI4LCA1MTIsIDY0LCA2NCwgOCwgOCwgMiksICMgVXBkYXRlZAp9CkRFRkFVTFRfRkZOX0NPTkZJR19TSEFSRUQgPSAoMTI4LCA1MTIsIDY0LCA2NCwgOCwgOCwgMikgIyBVcGRhdGVkIERlZmF1bHQKCkhBUkRDT0RFRF9GRk5fQ09ORklHU19ST1VURURfQkFUQ0hFRCA9IHsKICAgICMgKEtfaW5fZGltLCBLX2ludGVyX2RpbSwgTl9vdXRfZGltLCBzZXFfbGVuX2Zvcl9jb25maWdfa2V5KTogKEJMT0NLX00sIEJMT0NLX05fT1VULCBCTE9DS19LX0lOLCBCTE9DS19LX0lOVEVSLCBHUk9VUF9NLCBXQVJQUywgU1RBR0VTKQogICAgKDcxNjgsIDIwNDgsIDcxNjgsIDIwNDgpOiAoMTI4LCA1MTIsIDY0LCA2NCwgMiwgOCwgMiksICAjIENoYW1waW9uCiAgICAoNzE2OCwgMjA0OCwgNzE2OCwgODE5Mik6ICgxMjgsIDUxMiwgNjQsIDY0LCAyLCA4LCAyKSwgIyBDaGFtcGlvbgp9CkRFRkFVTFRfRkZOX0NPTkZJR19ST1VURURfQkFUQ0hFRCA9ICgxMjgsIDUxMiwgNjQsIDY0LCAyLCA4LCAyKSAjIENoYW1waW9uIERlZmF1bHQKICAgIAoKQHRyaXRvbi5qaXQKZGVmIHNpbHUoeCk6IHJldHVybiAoeCAqIHRsLnNpZ21vaWQoeC50byh0bC5mbG9hdDMyKSkpLnRvKHRsLmZsb2F0MTYpICMgQXNzdW1pbmcgZmxvYXQxNiBmcm9tIGNvbnRleHQKCiMgS2VybmVsIGZvciBzaW5nbGUgRkZOIChlLmcuLCBmb3IgU2hhcmVkIEV4cGVydCkgLSBSZW1haW5zIHRoZSBzYW1lCkB0cml0b24uaml0CmRlZiBmdXNlZF9mZm5fa2VybmVsX3YyKAogICAgIyBQb2ludGVycyB0byBNYXRyaWNlcwogICAgeF9wdHIsIHdfZ2F0ZV9wdHIsIHdfdXBfcHRyLCB3X2Rvd25fcHRyLCBvdXRwdXRfcHRyLAogICAgIyBNYXRyaXggZGltZW5zaW9ucwogICAgTSwgTl9vdXQsIEtfaW4sIEtfaW50ZXIsCiAgICAjIFN0cmlkZXMKICAgIHN0cmlkZV94X20sIHN0cmlkZV94X2ssCiAgICBzdHJpZGVfd19nYXRlX2ssIHN0cmlkZV93X2dhdGVfaW50ZXIsCiAgICBzdHJpZGVfd191cF9rLCBzdHJpZGVfd191cF9pbnRlciwKICAgIHN0cmlkZV93X2Rvd25faW50ZXIsIHN0cmlkZV93X2Rvd25fbiwKICAgIHN0cmlkZV9vdXRfbSwgc3RyaWRlX291dF9uLAogICAgIyBNZXRhLXBhcmFtZXRlcnMKICAgIEJMT0NLX1NJWkVfTTogdGwuY29uc3RleHByLCBCTE9DS19TSVpFX05fT1VUOiB0bC5jb25zdGV4cHIsCiAgICBCTE9DS19TSVpFX0tfSU46IHRsLmNvbnN0ZXhwciwgQkxPQ0tfU0laRV9LX0lOVEVSOiB0bC5jb25zdGV4cHIsCiAgICBHUk9VUF9TSVpFX006IHRsLmNvbnN0ZXhwciwKKToKICAgIHBpZCA9IHRsLnByb2dyYW1faWQoYXhpcz0wKQogICAgbnVtX3BpZF9tID0gdGwuY2RpdihNLCBCTE9DS19TSVpFX00pCiAgICBudW1fcGlkX24gPSB0bC5jZGl2KE5fb3V0LCBCTE9DS19TSVpFX05fT1VUKQogICAgbnVtX3BpZF9pbl9ncm91cCA9IEdST1VQX1NJWkVfTSAqIG51bV9waWRfbgogICAgZ3JvdXBfaWQgPSBwaWQgLy8gbnVtX3BpZF9pbl9ncm91cAogICAgZmlyc3RfcGlkX20gPSBncm91cF9pZCAqIEdST1VQX1NJWkVfTQogICAgZ3JvdXBfc2l6ZV9tID0gbWluKG51bV9waWRfbSAtIGZpcnN0X3BpZF9tLCBHUk9VUF9TSVpFX00pCiAgICBwaWRfbSA9IGZpcnN0X3BpZF9tICsgKHBpZCAlIGdyb3VwX3NpemVfbSkKICAgIHBpZF9uID0gKHBpZCAlIG51bV9waWRfaW5fZ3JvdXApIC8vIGdyb3VwX3NpemVfbQoKICAgIG9mZnNfbV9ibG9ja19sb2NhbCA9IHRsLmFyYW5nZSgwLCBCTE9DS19TSVpFX00pCiAgICBvZmZzX21fZ2xvYmFsID0gcGlkX20gKiBCTE9DS19TSVpFX00gKyBvZmZzX21fYmxvY2tfbG9jYWwKICAgIAogICAgb2Zmc19uX291dCA9IHBpZF9uICogQkxPQ0tfU0laRV9OX09VVCArIHRsLmFyYW5nZSgwLCBCTE9DS19TSVpFX05fT1VUKQogICAgeF9zdGFydF9wdHIgPSB4X3B0ciArIG9mZnNfbV9nbG9iYWxbOiwgTm9uZV0gKiBzdHJpZGVfeF9tICMgQ29ycmVjdGVkIHRvIHVzZSBvZmZzX21fZ2xvYmFsCiAgICAKICAgIHdlaWdodF9kdHlwZSA9IHdfZ2F0ZV9wdHIuZHR5cGUuZWxlbWVudF90eQogICAgYWNjdW1fZHR5cGUgPSB0bC5mbG9hdDMyCiAgICBhY2NfZG93biA9IHRsLnplcm9zKChCTE9DS19TSVpFX00sIEJMT0NLX1NJWkVfTl9PVVQpLCBkdHlwZT1hY2N1bV9kdHlwZSkKICAgIHdfZG93bl9zdGFydF9wdHIgPSB3X2Rvd25fcHRyICsgb2Zmc19uX291dFtOb25lLCA6XSAqIHN0cmlkZV93X2Rvd25fbgoKICAgIGZvciBrX2ludGVyX3N0YXJ0IGluIHJhbmdlKDAsIHRsLmNkaXYoS19pbnRlciwgQkxPQ0tfU0laRV9LX0lOVEVSKSk6CiAgICAgICAgb2Zmc19rX2ludGVyID0ga19pbnRlcl9zdGFydCAqIEJMT0NLX1NJWkVfS19JTlRFUiArIHRsLmFyYW5nZSgwLCBCTE9DS19TSVpFX0tfSU5URVIpCiAgICAgICAgYWNjX2dhdGVfZnAzMiA9IHRsLnplcm9zKChCTE9DS19TSVpFX00sIEJMT0NLX1NJWkVfS19JTlRFUiksIGR0eXBlPWFjY3VtX2R0eXBlKQogICAgICAgIGFjY191cF9mcDMyID0gdGwuemVyb3MoKEJMT0NLX1NJWkVfTSwgQkxPQ0tfU0laRV9LX0lOVEVSKSwgZHR5cGU9YWNjdW1fZHR5cGUpCiAgICAgICAgd19nYXRlX2tfaW50ZXJfcHRyID0gd19nYXRlX3B0ciArIG9mZnNfa19pbnRlcltOb25lLCA6XSAqIHN0cmlkZV93X2dhdGVfaW50ZXIKICAgICAgICB3X3VwX2tfaW50ZXJfcHRyID0gd191cF9wdHIgKyBvZmZzX2tfaW50ZXJbTm9uZSwgOl0gKiBzdHJpZGVfd191cF9pbnRlcgoKICAgICAgICBmb3Iga19pbl9zdGFydCBpbiByYW5nZSgwLCB0bC5jZGl2KEtfaW4sIEJMT0NLX1NJWkVfS19JTikpOgogICAgICAgICAgICBvZmZzX2tfaW4gPSBrX2luX3N0YXJ0ICogQkxPQ0tfU0laRV9LX0lOICsgdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkVfS19JTikKICAgICAgICAgICAgCiAgICAgICAgICAgIGN1cnJlbnRfeF9wdHJzID0geF9zdGFydF9wdHIgKyBvZmZzX2tfaW5bTm9uZSwgOl0gKiBzdHJpZGVfeF9rCiAgICAgICAgICAgICMgTWFzayBmb3IgaW5wdXQgeDogdmFsaWQgcm93cyBpbiB0aGUgaW5wdXQgTSBhbmQgdmFsaWQgS19pbiBkaW1lbnNpb24KICAgICAgICAgICAgeF9tYXNrID0gKG9mZnNfbV9nbG9iYWxbOiwgTm9uZV0gPCBNKSAmIChvZmZzX2tfaW5bTm9uZSwgOl0gPCBLX2luKQogICAgICAgICAgICB4X2Jsb2NrID0gdGwubG9hZChjdXJyZW50X3hfcHRycywgbWFzaz14X21hc2ssIG90aGVyPTAuMCkKICAgICAgICAgICAgCiAgICAgICAgICAgIHdfZ2F0ZV9wdHJzID0gd19nYXRlX2tfaW50ZXJfcHRyICsgb2Zmc19rX2luWzosIE5vbmVdICogc3RyaWRlX3dfZ2F0ZV9rCiAgICAgICAgICAgIHdfZ2F0ZV9tYXNrID0gKG9mZnNfa19pbls6LCBOb25lXSA8IEtfaW4pICYgKG9mZnNfa19pbnRlcltOb25lLCA6XSA8IEtfaW50ZXIpCiAgICAgICAgICAgIHdfZ2F0ZV9ibG9jayA9IHRsLmxvYWQod19nYXRlX3B0cnMsIG1hc2s9d19nYXRlX21hc2ssIG90aGVyPTAuMCkKICAgICAgICAgICAgYWNjX2dhdGVfZnAzMiArPSB0bC5kb3QoeF9ibG9jaywgd19nYXRlX2Jsb2NrLCBvdXRfZHR5cGU9YWNjdW1fZHR5cGUpCiAgICAgICAgICAgIAogICAgICAgICAgICB3X3VwX3B0cnMgPSB3X3VwX2tfaW50ZXJfcHRyICsgb2Zmc19rX2luWzosIE5vbmVdICogc3RyaWRlX3dfdXBfawogICAgICAgICAgICB3X3VwX21hc2sgPSAob2Zmc19rX2luWzosIE5vbmVdIDwgS19pbikgJiAob2Zmc19rX2ludGVyW05vbmUsIDpdIDwgS19pbnRlcikKICAgICAgICAgICAgd191cF9ibG9jayA9IHRsLmxvYWQod191cF9wdHJzLCBtYXNrPXdfdXBfbWFzaywgb3RoZXI9MC4wKQogICAgICAgICAgICBhY2NfdXBfZnAzMiArPSB0bC5kb3QoeF9ibG9jaywgd191cF9ibG9jaywgb3V0X2R0eXBlPWFjY3VtX2R0eXBlKQoKICAgICAgICBhY2NfZ2F0ZV9mcDE2ID0gYWNjX2dhdGVfZnAzMi50byh3ZWlnaHRfZHR5cGUpCiAgICAgICAgYWNjX3VwX2ZwMTYgPSBhY2NfdXBfZnAzMi50byh3ZWlnaHRfZHR5cGUpCiAgICAgICAgZ2F0ZV9hY3RpdmF0ZWRfZnAxNiA9IHNpbHUoYWNjX2dhdGVfZnAxNikKICAgICAgICBpbnRlcm1lZGlhdGVfYmxvY2tfZnAxNiA9IGdhdGVfYWN0aXZhdGVkX2ZwMTYgKiBhY2NfdXBfZnAxNgogICAgICAgIAogICAgICAgIHdfZG93bl9wdHJzID0gd19kb3duX3N0YXJ0X3B0ciArIG9mZnNfa19pbnRlcls6LCBOb25lXSAqIHN0cmlkZV93X2Rvd25faW50ZXIKICAgICAgICB3X2Rvd25fbWFzayA9IChvZmZzX2tfaW50ZXJbOiwgTm9uZV0gPCBLX2ludGVyKSAmIChvZmZzX25fb3V0W05vbmUsIDpdIDwgTl9vdXQpCiAgICAgICAgd19kb3duX2Jsb2NrID0gdGwubG9hZCh3X2Rvd25fcHRycywgbWFzaz13X2Rvd25fbWFzaywgb3RoZXI9MC4wKQogICAgICAgIGFjY19kb3duICs9IHRsLmRvdChpbnRlcm1lZGlhdGVfYmxvY2tfZnAxNiwgd19kb3duX2Jsb2NrLCBvdXRfZHR5cGU9YWNjdW1fZHR5cGUpCgogICAgZmluYWxfb3V0cHV0X3B0cnMgPSBvdXRwdXRfcHRyICsgb2Zmc19tX2dsb2JhbFs6LCBOb25lXSAqIHN0cmlkZV9vdXRfbSArIG9mZnNfbl9vdXRbTm9uZSwgOl0gKiBzdHJpZGVfb3V0X24KICAgIG91dHB1dF9tYXNrID0gKG9mZnNfbV9nbG9iYWxbOiwgTm9uZV0gPCBNKSAmIChvZmZzX25fb3V0W05vbmUsIDpdIDwgTl9vdXQpCiAgICB0bC5zdG9yZShmaW5hbF9vdXRwdXRfcHRycywgYWNjX2Rvd24udG8ob3V0cHV0X3B0ci5kdHlwZS5lbGVtZW50X3R5KSwgbWFzaz1vdXRwdXRfbWFzaykKCiMgTmV3IEJhdGNoZWQgRkZOIEtlcm5lbCBmb3IgUm91dGVkIEV4cGVydHMKQHRyaXRvbi5qaXQKZGVmIGJhdGNoZWRfZnVzZWRfZmZuX2tlcm5lbF9leHBlcnRfZGltKAogICAgIyBQb2ludGVycyB0byBCYXRjaGVkL1N0YWNrZWQgTWF0cmljZXMKICAgIGJhdGNoZWRfeF9wdHIsICAgICAgICAjIFNoYXBlOiBbRSwgbWF4X3Rva2Vuc19wZXJfZXhwZXJ0LCBLX2luX2RpbV0KICAgIGFsbF93X2dhdGVfcHRyLCAgICAgICAjIFNoYXBlOiBbRSwgS19pbl9kaW0sIEtfaW50ZXJfZGltXQogICAgYWxsX3dfdXBfcHRyLCAgICAgICAgICMgU2hhcGU6IFtFLCBLX2luX2RpbSwgS19pbnRlcl9kaW1dCiAgICBhbGxfd19kb3duX3B0ciwgICAgICAgIyBTaGFwZTogW0UsIEtfaW50ZXJfZGltLCBOX291dF9kaW1dCiAgICBiYXRjaGVkX291dHB1dF9wdHIsICAgIyBTaGFwZTogW0UsIG1heF90b2tlbnNfcGVyX2V4cGVydCwgTl9vdXRfZGltXQogICAgZXhwZXJ0X2NvdW50c19wdHIsICAgICMgU2hhcGU6IFtFXSwgYWN0dWFsIG51bSB0b2tlbnMgZm9yIGVhY2ggZXhwZXJ0IChpbnQzMikKICAgICMgTWF0cml4IGRpbWVuc2lvbnMgKHNjYWxhciB2YWx1ZXMgZm9yIFRISVMgZXhwZXJ0J3MgRkZOIHN0cnVjdHVyZSkKICAgIG1heF90b2tlbnNfcGVyX2V4cGVydF9wYWRkZWRfZGltLCAjIFBhZGRlZCBNIGRpbSBmb3IgYXJyYXkgYm91bmRzIGZvciBiYXRjaGVkX3hfcHRyCiAgICBOX291dF9kaW0sIEtfaW5fZGltLCBLX2ludGVyX2RpbSwKICAgICMgU3RyaWRlcyBmb3IgYmF0Y2hlZF94X3B0ciBbRSwgTV9wYWRkZWQsIEtfaW5dCiAgICBzdHJpZGVfYl94X2UsIHN0cmlkZV9iX3hfbSwgc3RyaWRlX2JfeF9rLAogICAgIyBTdHJpZGVzIGZvciBhbGxfd19nYXRlX3B0ciBbRSwgS19pbiwgS19pbnRlcl0KICAgIHN0cmlkZV9hbGxfd19nYXRlX2UsIHN0cmlkZV9hbGxfd19nYXRlX2ssIHN0cmlkZV9hbGxfd19nYXRlX2ludGVyLAogICAgIyBTdHJpZGVzIGZvciBhbGxfd191cF9wdHIgW0UsIEtfaW4sIEtfaW50ZXJdCiAgICBzdHJpZGVfYWxsX3dfdXBfZSwgc3RyaWRlX2FsbF93X3VwX2ssIHN0cmlkZV9hbGxfd191cF9pbnRlciwKICAgICMgU3RyaWRlcyBmb3IgYWxsX3dfZG93bl9wdHIgW0UsIEtfaW50ZXIsIE5fb3V0XQogICAgc3RyaWRlX2FsbF93X2Rvd25fZSwgc3RyaWRlX2FsbF93X2Rvd25faW50ZXIsIHN0cmlkZV9hbGxfd19kb3duX24sCiAgICAjIFN0cmlkZXMgZm9yIGJhdGNoZWRfb3V0cHV0X3B0ciBbRSwgTV9wYWRkZWQsIE5fb3V0XQogICAgc3RyaWRlX2Jfb3V0X2UsIHN0cmlkZV9iX291dF9tLCBzdHJpZGVfYl9vdXRfbiwKICAgICMgTWV0YS1wYXJhbWV0ZXJzIGZyb20gY29uZmlnCiAgICBCTE9DS19TSVpFX006IHRsLmNvbnN0ZXhwciwgQkxPQ0tfU0laRV9OX09VVDogdGwuY29uc3RleHByLAogICAgQkxPQ0tfU0laRV9LX0lOOiB0bC5jb25zdGV4cHIsIEJMT0NLX1NJWkVfS19JTlRFUjogdGwuY29uc3RleHByLAogICAgR1JPVVBfU0laRV9NX0NGRzogdGwuY29uc3RleHByLCAjIFJlbmFtZWQgZnJvbSBHUk9VUF9TSVpFX00gdG8gYXZvaWQgY29uZmxpY3QKKToKICAgIGV4cGVydF9pZCA9IHRsLnByb2dyYW1faWQoYXhpcz0wKQogICAgCiAgICBNX2N1cnJfZXhwZXJ0X2FjdHVhbCA9IHRsLmxvYWQoZXhwZXJ0X2NvdW50c19wdHIgKyBleHBlcnRfaWQpICMgQXNzdW1lcyBpbnQzMiBkYXRhCgogICAgcGlkX3Rva2VuX2Jsb2NrX2ZsYXQgPSB0bC5wcm9ncmFtX2lkKGF4aXM9MSkKCiAgICBudW1fcGlkX21fbG9jYWxfcGFkZGVkID0gdGwuY2RpdihtYXhfdG9rZW5zX3Blcl9leHBlcnRfcGFkZGVkX2RpbSwgQkxPQ0tfU0laRV9NKQogICAgbnVtX3BpZF9uID0gdGwuY2RpdihOX291dF9kaW0sIEJMT0NLX1NJWkVfTl9PVVQpCiAgICAKICAgIG51bV9waWRfaW5fZ3JvdXAgPSBHUk9VUF9TSVpFX01fQ0ZHICogbnVtX3BpZF9uCiAgICBncm91cF9pZCA9IHBpZF90b2tlbl9ibG9ja19mbGF0IC8vIG51bV9waWRfaW5fZ3JvdXAKICAgIGZpcnN0X3BpZF9tX2xvY2FsID0gZ3JvdXBfaWQgKiBHUk9VUF9TSVpFX01fQ0ZHCiAgICAKICAgIGdyb3VwX3NpemVfbV9sb2NhbCA9IG1pbihudW1fcGlkX21fbG9jYWxfcGFkZGVkIC0gZmlyc3RfcGlkX21fbG9jYWwsIEdST1VQX1NJWkVfTV9DRkcpCgogICAgcGlkX21fbG9jYWwgPSBmaXJzdF9waWRfbV9sb2NhbCArIChwaWRfdG9rZW5fYmxvY2tfZmxhdCAlIGdyb3VwX3NpemVfbV9sb2NhbCkKICAgIHBpZF9uID0gKHBpZF90b2tlbl9ibG9ja19mbGF0ICUgbnVtX3BpZF9pbl9ncm91cCkgLy8gZ3JvdXBfc2l6ZV9tX2xvY2FsCgogICAgIyBTZWxlY3QgZGF0YSBmb3IgdGhlIGN1cnJlbnQgZXhwZXJ0X2lkCiAgICB4X3B0cl9jdXJyX2V4cGVydCA9IGJhdGNoZWRfeF9wdHIgKyBleHBlcnRfaWQgKiBzdHJpZGVfYl94X2UKICAgIHdfZ2F0ZV9wdHJfY3Vycl9leHBlcnQgPSBhbGxfd19nYXRlX3B0ciArIGV4cGVydF9pZCAqIHN0cmlkZV9hbGxfd19nYXRlX2UKICAgIHdfdXBfcHRyX2N1cnJfZXhwZXJ0ID0gYWxsX3dfdXBfcHRyICsgZXhwZXJ0X2lkICogc3RyaWRlX2FsbF93X3VwX2UKICAgIHdfZG93bl9wdHJfY3Vycl9leHBlcnQgPSBhbGxfd19kb3duX3B0ciArIGV4cGVydF9pZCAqIHN0cmlkZV9hbGxfd19kb3duX2UKICAgIG91dHB1dF9wdHJfY3Vycl9leHBlcnQgPSBiYXRjaGVkX291dHB1dF9wdHIgKyBleHBlcnRfaWQgKiBzdHJpZGVfYl9vdXRfZQoKICAgIG9mZnNfbV9ibG9ja19sb2NhbF9jb29yZHMgPSB0bC5hcmFuZ2UoMCwgQkxPQ0tfU0laRV9NKSAjIENvb3JkaW5hdGVzIHdpdGhpbiBhIHByb2Nlc3NpbmcgYmxvY2sgWzAsIC4uLiwgQkxPQ0tfU0laRV9NLTFdCiAgICAjIE9mZnNldHMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoaXMgZXhwZXJ0J3Mgc2VnbWVudCBpbiBiYXRjaGVkX3hfcHRyCiAgICBvZmZzX21faW5fZXhwZXJ0X3NlZ21lbnQgPSBwaWRfbV9sb2NhbCAqIEJMT0NLX1NJWkVfTSArIG9mZnNfbV9ibG9ja19sb2NhbF9jb29yZHMKICAgIAogICAgb2Zmc19uX291dCA9IHBpZF9uICogQkxPQ0tfU0laRV9OX09VVCArIHRsLmFyYW5nZSgwLCBCTE9DS19TSVpFX05fT1VUKQogICAgIyBTdGFydCBwb2ludGVyIGZvciB4IGZvciB0aGUgY3VycmVudCBNLWJsb2NrIG9mIHRoaXMgZXhwZXJ0CiAgICB4X2Jsb2NrX3N0YXJ0X3B0ciA9IHhfcHRyX2N1cnJfZXhwZXJ0ICsgb2Zmc19tX2luX2V4cGVydF9zZWdtZW50WzosIE5vbmVdICogc3RyaWRlX2JfeF9tCiAgICAKICAgIHdlaWdodF9kdHlwZSA9IHdfZ2F0ZV9wdHJfY3Vycl9leHBlcnQuZHR5cGUuZWxlbWVudF90eQogICAgYWNjdW1fZHR5cGUgPSB0bC5mbG9hdDMyCiAgICBhY2NfZG93biA9IHRsLnplcm9zKChCTE9DS19TSVpFX00sIEJMT0NLX1NJWkVfTl9PVVQpLCBkdHlwZT1hY2N1bV9kdHlwZSkKICAgIAogICAgIyBTdGFydCBwb2ludGVyIGZvciB3X2Rvd24gZm9yIHRoZSBjdXJyZW50IE4tYmxvY2sgb2YgdGhpcyBleHBlcnQKICAgIHdfZG93bl9ibG9ja19zdGFydF9wdHIgPSB3X2Rvd25fcHRyX2N1cnJfZXhwZXJ0ICsgb2Zmc19uX291dFtOb25lLCA6XSAqIHN0cmlkZV9hbGxfd19kb3duX24KCiAgICBmb3Iga19pbnRlcl9zdGFydCBpbiByYW5nZSgwLCB0bC5jZGl2KEtfaW50ZXJfZGltLCBCTE9DS19TSVpFX0tfSU5URVIpKToKICAgICAgICBvZmZzX2tfaW50ZXIgPSBrX2ludGVyX3N0YXJ0ICogQkxPQ0tfU0laRV9LX0lOVEVSICsgdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkVfS19JTlRFUikKICAgICAgICBhY2NfZ2F0ZV9mcDMyID0gdGwuemVyb3MoKEJMT0NLX1NJWkVfTSwgQkxPQ0tfU0laRV9LX0lOVEVSKSwgZHR5cGU9YWNjdW1fZHR5cGUpCiAgICAgICAgYWNjX3VwX2ZwMzIgPSB0bC56ZXJvcygoQkxPQ0tfU0laRV9NLCBCTE9DS19TSVpFX0tfSU5URVIpLCBkdHlwZT1hY2N1bV9kdHlwZSkKICAgICAgICAKICAgICAgICB3X2dhdGVfa19pbnRlcl9wdHIgPSB3X2dhdGVfcHRyX2N1cnJfZXhwZXJ0ICsgb2Zmc19rX2ludGVyW05vbmUsIDpdICogc3RyaWRlX2FsbF93X2dhdGVfaW50ZXIKICAgICAgICB3X3VwX2tfaW50ZXJfcHRyID0gd191cF9wdHJfY3Vycl9leHBlcnQgKyBvZmZzX2tfaW50ZXJbTm9uZSwgOl0gKiBzdHJpZGVfYWxsX3dfdXBfaW50ZXIKCiAgICAgICAgZm9yIGtfaW5fc3RhcnQgaW4gcmFuZ2UoMCwgdGwuY2RpdihLX2luX2RpbSwgQkxPQ0tfU0laRV9LX0lOKSk6CiAgICAgICAgICAgIG9mZnNfa19pbiA9IGtfaW5fc3RhcnQgKiBCTE9DS19TSVpFX0tfSU4gKyB0bC5hcmFuZ2UoMCwgQkxPQ0tfU0laRV9LX0lOKQogICAgICAgICAgICAKICAgICAgICAgICAgY3VycmVudF94X3B0cnMgPSB4X2Jsb2NrX3N0YXJ0X3B0ciArIG9mZnNfa19pbltOb25lLCA6XSAqIHN0cmlkZV9iX3hfawogICAgICAgICAgICB4X21hc2sgPSAob2Zmc19tX2luX2V4cGVydF9zZWdtZW50WzosIE5vbmVdIDwgTV9jdXJyX2V4cGVydF9hY3R1YWwpICYgKG9mZnNfa19pbltOb25lLCA6XSA8IEtfaW5fZGltKQogICAgICAgICAgICB4X2Jsb2NrID0gdGwubG9hZChjdXJyZW50X3hfcHRycywgbWFzaz14X21hc2ssIG90aGVyPTAuMCkKICAgICAgICAgICAgCiAgICAgICAgICAgIHdfZ2F0ZV9wdHJzID0gd19nYXRlX2tfaW50ZXJfcHRyICsgb2Zmc19rX2luWzosIE5vbmVdICogc3RyaWRlX2FsbF93X2dhdGVfawogICAgICAgICAgICB3X2dhdGVfbWFzayA9IChvZmZzX2tfaW5bOiwgTm9uZV0gPCBLX2luX2RpbSkgJiAob2Zmc19rX2ludGVyW05vbmUsIDpdIDwgS19pbnRlcl9kaW0pCiAgICAgICAgICAgIHdfZ2F0ZV9ibG9jayA9IHRsLmxvYWQod19nYXRlX3B0cnMsIG1hc2s9d19nYXRlX21hc2ssIG90aGVyPTAuMCkKICAgICAgICAgICAgYWNjX2dhdGVfZnAzMiArPSB0bC5kb3QoeF9ibG9jaywgd19nYXRlX2Jsb2NrLCBvdXRfZHR5cGU9YWNjdW1fZHR5cGUpCiAgICAgICAgICAgIAogICAgICAgICAgICB3X3VwX3B0cnMgPSB3X3VwX2tfaW50ZXJfcHRyICsgb2Zmc19rX2luWzosIE5vbmVdICogc3RyaWRlX2FsbF93X3VwX2sKICAgICAgICAgICAgd191cF9tYXNrID0gKG9mZnNfa19pbls6LCBOb25lXSA8IEtfaW5fZGltKSAmIChvZmZzX2tfaW50ZXJbTm9uZSwgOl0gPCBLX2ludGVyX2RpbSkKICAgICAgICAgICAgd191cF9ibG9jayA9IHRsLmxvYWQod191cF9wdHJzLCBtYXNrPXdfdXBfbWFzaywgb3RoZXI9MC4wKQogICAgICAgICAgICBhY2NfdXBfZnAzMiArPSB0bC5kb3QoeF9ibG9jaywgd191cF9ibG9jaywgb3V0X2R0eXBlPWFjY3VtX2R0eXBlKQoKICAgICAgICBhY2NfZ2F0ZV9mcDE2ID0gYWNjX2dhdGVfZnAzMi50byh3ZWlnaHRfZHR5cGUpCiAgICAgICAgYWNjX3VwX2ZwMTYgPSBhY2NfdXBfZnAzMi50byh3ZWlnaHRfZHR5cGUpCiAgICAgICAgZ2F0ZV9hY3RpdmF0ZWRfZnAxNiA9IHNpbHUoYWNjX2dhdGVfZnAxNikKICAgICAgICBpbnRlcm1lZGlhdGVfYmxvY2tfZnAxNiA9IGdhdGVfYWN0aXZhdGVkX2ZwMTYgKiBhY2NfdXBfZnAxNgogICAgICAgIAogICAgICAgIHdfZG93bl9wdHJzID0gd19kb3duX2Jsb2NrX3N0YXJ0X3B0ciArIG9mZnNfa19pbnRlcls6LCBOb25lXSAqIHN0cmlkZV9hbGxfd19kb3duX2ludGVyCiAgICAgICAgd19kb3duX21hc2sgPSAob2Zmc19rX2ludGVyWzosIE5vbmVdIDwgS19pbnRlcl9kaW0pICYgKG9mZnNfbl9vdXRbTm9uZSwgOl0gPCBOX291dF9kaW0pCiAgICAgICAgd19kb3duX2Jsb2NrID0gdGwubG9hZCh3X2Rvd25fcHRycywgbWFzaz13X2Rvd25fbWFzaywgb3RoZXI9MC4wKQogICAgICAgIGFjY19kb3duICs9IHRsLmRvdChpbnRlcm1lZGlhdGVfYmxvY2tfZnAxNiwgd19kb3duX2Jsb2NrLCBvdXRfZHR5cGU9YWNjdW1fZHR5cGUpCgogICAgZmluYWxfb3V0cHV0X3B0cnMgPSBvdXRwdXRfcHRyX2N1cnJfZXhwZXJ0ICsgb2Zmc19tX2luX2V4cGVydF9zZWdtZW50WzosIE5vbmVdICogc3RyaWRlX2Jfb3V0X20gKyBvZmZzX25fb3V0W05vbmUsIDpdICogc3RyaWRlX2Jfb3V0X24KICAgIG91dHB1dF9tYXNrID0gKG9mZnNfbV9pbl9leHBlcnRfc2VnbWVudFs6LCBOb25lXSA8IE1fY3Vycl9leHBlcnRfYWN0dWFsKSAmIChvZmZzX25fb3V0W05vbmUsIDpdIDwgTl9vdXRfZGltKQogICAgdGwuc3RvcmUoZmluYWxfb3V0cHV0X3B0cnMsIGFjY19kb3duLnRvKGJhdGNoZWRfb3V0cHV0X3B0ci5kdHlwZS5lbGVtZW50X3R5KSwgbWFzaz1vdXRwdXRfbWFzaykKCgpjbGFzcyBUcml0b25FeHBlcnQobm4uTW9kdWxlKTogIyBGb3IgU2hhcmVkIEV4cGVydAogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZzogRGljdCwgV19nYXRlOiB0b3JjaC5UZW5zb3IsIFdfdXA6IHRvcmNoLlRlbnNvciwgV19kb3duOiB0b3JjaC5UZW5zb3IsIGRfZXhwZXJ0X2FjdHVhbDogaW50LCBzZXFfbGVuX2Zvcl9jb25maWdfa2V5OiBpbnQpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYuZF9oaWRkZW46IGludCA9IGNvbmZpZ1siZF9oaWRkZW4iXSAjIEtfaW4gZm9yIEZGTgogICAgICAgIHNlbGYuZF9leHBlcnRfYWN0dWFsID0gZF9leHBlcnRfYWN0dWFsICMgS19pbnRlciBmb3IgRkZOCiAgICAgICAgc2VsZi5XX2dhdGUgPSBXX2dhdGUKICAgICAgICBzZWxmLldfdXAgPSBXX3VwCiAgICAgICAgc2VsZi5XX2Rvd24gPSBXX2Rvd24KICAgICAgICBzZWxmLnNlcV9sZW5fZm9yX2NvbmZpZ19rZXkgPSBzZXFfbGVuX2Zvcl9jb25maWdfa2V5CgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yLCBvdXRfdGVuc29yX3ZpZXc6IHRvcmNoLlRlbnNvcikgLT4gTm9uZToKICAgICAgICBNX3Rva2VucywgS19pbl9kaW0gPSB4LnNoYXBlCiAgICAgICAgS19pbnRlcl9kaW0gPSBzZWxmLmRfZXhwZXJ0X2FjdHVhbAogICAgICAgIE5fb3V0X2RpbSA9IHNlbGYuZF9oaWRkZW4gCgogICAgICAgIHggPSB4LmNvbnRpZ3VvdXMoKQogICAgICAgIAogICAgICAgIGZmbl9jb25maWdfa2V5ID0gKE1fdG9rZW5zLCBOX291dF9kaW0sIEtfaW5fZGltLCBLX2ludGVyX2RpbSkKICAgICAgICBzZWxlY3RlZF9wYXJhbXMgPSBIQVJEQ09ERURfRkZOX0NPTkZJR1NfU0hBUkVELmdldChmZm5fY29uZmlnX2tleSwgREVGQVVMVF9GRk5fQ09ORklHX1NIQVJFRCkKICAgICAgICAKICAgICAgICBCTE9DS19TSVpFX00sIEJMT0NLX1NJWkVfTl9PVVQsIEJMT0NLX1NJWkVfS19JTiwgQkxPQ0tfU0laRV9LX0lOVEVSLCBHUk9VUF9TSVpFX01fY2ZnLCBudW1fd2FycHMsIG51bV9zdGFnZXMgPSBzZWxlY3RlZF9wYXJhbXMKICAgICAgICAKICAgICAgICBncmlkID0gKAogICAgICAgICAgICB0cml0b24uY2RpdihNX3Rva2VucywgQkxPQ0tfU0laRV9NKSAqIHRyaXRvbi5jZGl2KE5fb3V0X2RpbSwgQkxPQ0tfU0laRV9OX09VVCksCiAgICAgICAgKQoKICAgICAgICBmdXNlZF9mZm5fa2VybmVsX3YyW2dyaWRdKAogICAgICAgICAgICB4LCBzZWxmLldfZ2F0ZSwgc2VsZi5XX3VwLCBzZWxmLldfZG93biwgCiAgICAgICAgICAgIG91dF90ZW5zb3JfdmlldywKICAgICAgICAgICAgTV90b2tlbnMsIE5fb3V0X2RpbSwgS19pbl9kaW0sIEtfaW50ZXJfZGltLAogICAgICAgICAgICB4LnN0cmlkZSgwKSwgeC5zdHJpZGUoMSksCiAgICAgICAgICAgIHNlbGYuV19nYXRlLnN0cmlkZSgwKSwgc2VsZi5XX2dhdGUuc3RyaWRlKDEpLCAjIEFzc3VtZXMgV19nYXRlIGlzIFtLX2luLCBLX2ludGVyXQogICAgICAgICAgICBzZWxmLldfdXAuc3RyaWRlKDApLCBzZWxmLldfdXAuc3RyaWRlKDEpLCAgICAgIyBBc3N1bWVzIFdfdXAgaXMgW0tfaW4sIEtfaW50ZXJdCiAgICAgICAgICAgIHNlbGYuV19kb3duLnN0cmlkZSgwKSwgc2VsZi5XX2Rvd24uc3RyaWRlKDEpLCAjIEFzc3VtZXMgV19kb3duIGlzIFtLX2ludGVyLCBOX291dF0KICAgICAgICAgICAgb3V0X3RlbnNvcl92aWV3LnN0cmlkZSgwKSwgb3V0X3RlbnNvcl92aWV3LnN0cmlkZSgxKSwKICAgICAgICAgICAgQkxPQ0tfU0laRV9NPUJMT0NLX1NJWkVfTSwgQkxPQ0tfU0laRV9OX09VVD1CTE9DS19TSVpFX05fT1VULAogICAgICAgICAgICBCTE9DS19TSVpFX0tfSU49QkxPQ0tfU0laRV9LX0lOLCBCTE9DS19TSVpFX0tfSU5URVI9QkxPQ0tfU0laRV9LX0lOVEVSLAogICAgICAgICAgICBHUk9VUF9TSVpFX009R1JPVVBfU0laRV9NX2NmZywKICAgICAgICAgICAgbnVtX3dhcnBzPW51bV93YXJwcywKICAgICAgICAgICAgbnVtX3N0YWdlcz1udW1fc3RhZ2VzCiAgICAgICAgKQoKY2xhc3MgTW9FR2F0ZShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZzogRGljdCwgV19nX3dlaWdodDogdG9yY2guVGVuc29yKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLnRvcF9rOiBpbnQgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgICMgc2VsZi5uX2V4cGVydHM6IGludCA9IGNvbmZpZ1sibl9yb3V0ZWRfZXhwZXJ0cyJdICMgTm90IGRpcmVjdGx5IHVzZWQgaGVyZQogICAgICAgIHNlbGYucmVnaXN0ZXJfYnVmZmVyKCdXX2cnLCBXX2dfd2VpZ2h0KSAjIFdfZyBpcyBbbl9yb3V0ZWRfZXhwZXJ0cywgZF9oaWRkZW5dCgogICAgQHRvcmNoLmNvbXBpbGUKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gVHVwbGVbdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3JdOgogICAgICAgIGxvZ2l0cyA9IEYubGluZWFyKHgsIHNlbGYuV19nKSAjIHg6IFt0b2tlbnMsIGRfaGlkZGVuXSwgV19nOiBbbl9yb3V0ZWRfZXhwZXJ0cywgZF9oaWRkZW5dIC0+IGxvZ2l0czogW3Rva2Vucywgbl9yb3V0ZWRfZXhwZXJ0c10KICAgICAgICBzY29yZXMgPSBsb2dpdHMuc29mdG1heChkaW09LTEpCiAgICAgICAgdG9wa19zY29yZXMsIHRvcGtfaW5kaWNlcyA9IHRvcmNoLnRvcGsoc2NvcmVzLCBrPXNlbGYudG9wX2ssIGRpbT0tMSwgc29ydGVkPUZhbHNlKQogICAgICAgIHJldHVybiB0b3BrX2luZGljZXMsIHRvcGtfc2NvcmVzCgpjbGFzcyBUcml0b25Nb0Uobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWc6IERpY3QsIHdlaWdodHM6IERpY3Rbc3RyLCB0b3JjaC5UZW5zb3JdLCBzZXFfbGVuX2Zvcl9jb25maWdfa2V5OiBpbnQpOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYubnVtX2V4cGVydHMgPSBjb25maWdbIm5fcm91dGVkX2V4cGVydHMiXQogICAgICAgIHNlbGYudG9wX2sgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgIHNlbGYuZF9oaWRkZW4gPSBjb25maWdbImRfaGlkZGVuIl0KICAgICAgICBzZWxmLmRfZXhwZXJ0ID0gY29uZmlnWyJkX2V4cGVydCJdICMgS19pbnRlciBmb3Igcm91dGVkIGV4cGVydHMKICAgICAgICBzZWxmLnNlcV9sZW5fZm9yX2NvbmZpZ19rZXkgPSBzZXFfbGVuX2Zvcl9jb25maWdfa2V5CgogICAgICAgIHNlbGYuZ2F0aW5nX25ldHdvcmsgPSBNb0VHYXRlKGNvbmZpZywgd2VpZ2h0c1sncm91dGVyLndlaWdodCddKQogICAgICAgIAogICAgICAgIGxpc3Rfd19nYXRlLCBsaXN0X3dfdXAsIGxpc3Rfd19kb3duID0gW10sIFtdLCBbXQogICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYubnVtX2V4cGVydHMpOgogICAgICAgICAgICBsaXN0X3dfZ2F0ZS5hcHBlbmQod2VpZ2h0c1tmJ2V4cGVydHMue2l9LjAud2VpZ2h0J10pCiAgICAgICAgICAgIGxpc3Rfd191cC5hcHBlbmQod2VpZ2h0c1tmJ2V4cGVydHMue2l9LjEud2VpZ2h0J10pCiAgICAgICAgICAgIGxpc3Rfd19kb3duLmFwcGVuZCh3ZWlnaHRzW2YnZXhwZXJ0cy57aX0uMi53ZWlnaHQnXSkKICAgICAgICAKICAgICAgICAjIFN0b3JlIGFzIG5vbi10cmFpbmFibGUgcGFyYW1ldGVycyBvciBidWZmZXJzIGlmIG5vdCB0cmFpbmluZwogICAgICAgIHNlbGYuV19nYXRlX2FsbF9yb3V0ZWQgPSB0b3JjaC5zdGFjayhsaXN0X3dfZ2F0ZSkuY29udGlndW91cygpCiAgICAgICAgc2VsZi5XX3VwX2FsbF9yb3V0ZWQgPSB0b3JjaC5zdGFjayhsaXN0X3dfdXApLmNvbnRpZ3VvdXMoKQogICAgICAgIHNlbGYuV19kb3duX2FsbF9yb3V0ZWQgPSB0b3JjaC5zdGFjayhsaXN0X3dfZG93bikuY29udGlndW91cygpCiAgICAgICAgCiAgICAgICAgIyBTaGFyZWQgZXhwZXJ0CiAgICAgICAgc2hhcmVkX2V4cGVydF9pbnRlcl9kaW0gPSBjb25maWdbImRfZXhwZXJ0Il0gKiBjb25maWdbIm5fc2hhcmVkX2V4cGVydHMiXQogICAgICAgIHdfZ2F0ZV9zaGFyZWQgPSB3ZWlnaHRzWydzaGFyZWRfZXhwZXJ0cy4wLndlaWdodCddCiAgICAgICAgd191cF9zaGFyZWQgPSB3ZWlnaHRzWydzaGFyZWRfZXhwZXJ0cy4xLndlaWdodCddCiAgICAgICAgd19kb3duX3NoYXJlZCA9IHdlaWdodHNbJ3NoYXJlZF9leHBlcnRzLjIud2VpZ2h0J10KICAgICAgICBzZWxmLnNoYXJlZF9leHBlcnRfbW9kdWxlID0gVHJpdG9uRXhwZXJ0KGNvbmZpZywgd19nYXRlX3NoYXJlZCwgd191cF9zaGFyZWQsIHdfZG93bl9zaGFyZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkX2V4cGVydF9pbnRlcl9kaW0sIHNlcV9sZW5fZm9yX2NvbmZpZ19rZXkpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yKSAtPiB0b3JjaC5UZW5zb3I6CiAgICAgICAgb3JpZ19zaGFwZSA9IHguc2hhcGUKICAgICAgICB4X2ZsYXQgPSB4LnZpZXcoLTEsIHNlbGYuZF9oaWRkZW4pCiAgICAgICAgbnVtX3RvdGFsX3Rva2Vuc19tb2VfaW5wdXQgPSB4X2ZsYXQuc2hhcGVbMF0KCiAgICAgICAgZXhwZXJ0X2luZGljZXMsIGV4cGVydF9zY29yZXMgPSBzZWxmLmdhdGluZ19uZXR3b3JrKHhfZmxhdCkKCiAgICAgICAgZmxhdF9leHBlcnRfaW5kaWNlcyA9IGV4cGVydF9pbmRpY2VzLnZpZXcoLTEpCiAgICAgICAgZmxhdF9leHBlcnRfc2NvcmVzID0gZXhwZXJ0X3Njb3Jlcy52aWV3KC0xLCAxKQoKICAgICAgICB0b2tlbl9pZHNfZm9yX2ZsYXRfYXNzaWdubWVudHMgPSB0b3JjaC5hcmFuZ2UobnVtX3RvdGFsX3Rva2Vuc19tb2VfaW5wdXQsIGRldmljZT14LmRldmljZSkucmVwZWF0X2ludGVybGVhdmUoc2VsZi50b3BfaykKICAgICAgICBzb3J0X3Blcm0gPSBmbGF0X2V4cGVydF9pbmRpY2VzLmFyZ3NvcnQoKQoKICAgICAgICBwZXJtX2V4cGVydF9pbmRpY2VzID0gZmxhdF9leHBlcnRfaW5kaWNlc1tzb3J0X3Blcm1dCiAgICAgICAgcGVybV90b2tlbl9pZHMgPSB0b2tlbl9pZHNfZm9yX2ZsYXRfYXNzaWdubWVudHNbc29ydF9wZXJtXQogICAgICAgIHBlcm1fZXhwZXJ0X3Njb3JlcyA9IGZsYXRfZXhwZXJ0X3Njb3Jlc1tzb3J0X3Blcm1dCiAgICAgICAgcGVybV94X2ZsYXQgPSB4X2ZsYXRbcGVybV90b2tlbl9pZHNdICMgU2hhcGU6IFt0b3RhbF9yb3V0ZWRfYXNzaWdubWVudHMsIGRfaGlkZGVuXQoKICAgICAgICBleHBlcnRfY291bnRzID0gdG9yY2guYmluY291bnQocGVybV9leHBlcnRfaW5kaWNlcy50byh0b3JjaC5pbnQzMiksIG1pbmxlbmd0aD1zZWxmLm51bV9leHBlcnRzKQogICAgICAgIG1heF90b2tlbnNfcGVyX2V4cGVydCA9IGV4cGVydF9jb3VudHMubWF4KCkuaXRlbSgpICNtYXggY291bnQgb2YgaW5zdGFuY2VzIGdvaW5nIHRvIGFuIGV4cGVydAogICAgICAgIFNfdG90YWxfYXNzaWdubWVudHMgPSBwZXJtX3hfZmxhdC5zaGFwZVswXQoKICAgICAgICBiYXRjaGVkX3hfaW5wdXQgPSB0b3JjaC56ZXJvcygKICAgICAgICAgICAgc2VsZi5udW1fZXhwZXJ0cywKICAgICAgICAgICAgbWF4X3Rva2Vuc19wZXJfZXhwZXJ0LAogICAgICAgICAgICBzZWxmLmRfaGlkZGVuLAogICAgICAgICAgICBkZXZpY2U9eC5kZXZpY2UsCiAgICAgICAgICAgIGR0eXBlPXguZHR5cGUKICAgICAgICApCiAgICAgIAogICAgICAgIGV4cGVydF9zdGFydHNfaW5fcGVybV9mbGF0ID0gdG9yY2guemVyb3NfbGlrZShleHBlcnRfY291bnRzKSAjIE9yIG9uIENQVSB0aGVuIG1vdmUgaWYgZmFzdGVyCiAgICAgICAgdG9yY2guY3Vtc3VtKGV4cGVydF9jb3VudHNbOi0xXSwgZGltPTAsIG91dD1leHBlcnRfc3RhcnRzX2luX3Blcm1fZmxhdFsxOl0pCgogICAgICAgIHRva2VuX2Fic19pbmRpY2VzX2luX3Blcm1fZmxhdCA9IHRvcmNoLmFyYW5nZShTX3RvdGFsX2Fzc2lnbm1lbnRzLCBkZXZpY2U9eC5kZXZpY2UpCiAgICAgICAgc3RhcnRfb2Zmc2V0X2Zvcl90b2tlbl9ncm91cCA9IGV4cGVydF9zdGFydHNfaW5fcGVybV9mbGF0W3Blcm1fZXhwZXJ0X2luZGljZXNdICMgU2hhcGUgW1NfdG90YWxfYXNzaWdubWVudHNdCiAgICAgICAgdG9rZW5faW50cmFfZXhwZXJ0X2luZGljZXMgPSB0b2tlbl9hYnNfaW5kaWNlc19pbl9wZXJtX2ZsYXQgLSBzdGFydF9vZmZzZXRfZm9yX3Rva2VuX2dyb3VwICMgU2hhcGUgW1NfdG90YWxfYXNzaWdubWVudHNdCiAgICAgICAgYmF0Y2hlZF94X2lucHV0W3Blcm1fZXhwZXJ0X2luZGljZXMsIHRva2VuX2ludHJhX2V4cGVydF9pbmRpY2VzLCA6XSA9IHBlcm1feF9mbGF0CiAgICAgICAgYmF0Y2hlZF9vdXRwdXRfcm91dGVkID0gdG9yY2guemVyb3MoCiAgICAgICAgICAgIHNlbGYubnVtX2V4cGVydHMsIG1heF90b2tlbnNfcGVyX2V4cGVydCwgc2VsZi5kX2hpZGRlbiwKICAgICAgICAgICAgZGV2aWNlPXguZGV2aWNlLCBkdHlwZT14LmR0eXBlCiAgICAgICAgKQoKICAgICAgICAjQmF0Y2hlZCBrZXJuZWwgYXR0cnMKICAgICAgICBLX2luX2RpbSwgS19pbnRlcl9kaW0sIE5fb3V0X2RpbSA9IHNlbGYuZF9oaWRkZW4sIHNlbGYuZF9leHBlcnQsIHNlbGYuZF9oaWRkZW4KICAgICAgICBmZm5fY29uZmlnX2tleV9yb3V0ZWQgPSAoS19pbl9kaW0sIEtfaW50ZXJfZGltLCBOX291dF9kaW0sIHNlbGYuc2VxX2xlbl9mb3JfY29uZmlnX2tleSkKICAgICAgICBzZWxlY3RlZF9wYXJhbXNfcm91dGVkID0gSEFSRENPREVEX0ZGTl9DT05GSUdTX1JPVVRFRF9CQVRDSEVELmdldChmZm5fY29uZmlnX2tleV9yb3V0ZWQsIERFRkFVTFRfRkZOX0NPTkZJR19ST1VURURfQkFUQ0hFRCkKICAgICAgICBCTE9DS19TSVpFX00sIEJMT0NLX1NJWkVfTl9PVVQsIEJMT0NLX1NJWkVfS19JTiwgQkxPQ0tfU0laRV9LX0lOVEVSLCBHUk9VUF9TSVpFX01fY2ZnLCBudW1fd2FycHMsIG51bV9zdGFnZXMgPSBzZWxlY3RlZF9wYXJhbXNfcm91dGVkCiAgICAgICAgZ3JpZF9kaW0wX2V4cGVydHMgPSBzZWxmLm51bV9leHBlcnRzCiAgICAgICAgZ3JpZF9kaW0xX3Rva2VuX2Jsb2Nrc19mbGF0ID0gdHJpdG9uLmNkaXYobWF4X3Rva2Vuc19wZXJfZXhwZXJ0LCBCTE9DS19TSVpFX00pICogdHJpdG9uLmNkaXYoTl9vdXRfZGltLCBCTE9DS19TSVpFX05fT1VUKQogICAgICAgIGdyaWQgPSAoZ3JpZF9kaW0wX2V4cGVydHMsIGdyaWRfZGltMV90b2tlbl9ibG9ja3NfZmxhdCkKICAgICAgICAKICAgICAgICBiYXRjaGVkX2Z1c2VkX2Zmbl9rZXJuZWxfZXhwZXJ0X2RpbVtncmlkXSgKICAgICAgICAgICAgYmF0Y2hlZF94X2lucHV0LAogICAgICAgICAgICBzZWxmLldfZ2F0ZV9hbGxfcm91dGVkLCBzZWxmLldfdXBfYWxsX3JvdXRlZCwgc2VsZi5XX2Rvd25fYWxsX3JvdXRlZCwKICAgICAgICAgICAgYmF0Y2hlZF9vdXRwdXRfcm91dGVkLAogICAgICAgICAgICBleHBlcnRfY291bnRzLAogICAgICAgICAgICBtYXhfdG9rZW5zX3Blcl9leHBlcnQsIE5fb3V0X2RpbSwgS19pbl9kaW0sIEtfaW50ZXJfZGltLAogICAgICAgICAgICBiYXRjaGVkX3hfaW5wdXQuc3RyaWRlKDApLCBiYXRjaGVkX3hfaW5wdXQuc3RyaWRlKDEpLCBiYXRjaGVkX3hfaW5wdXQuc3RyaWRlKDIpLAogICAgICAgICAgICBzZWxmLldfZ2F0ZV9hbGxfcm91dGVkLnN0cmlkZSgwKSwgc2VsZi5XX2dhdGVfYWxsX3JvdXRlZC5zdHJpZGUoMSksIHNlbGYuV19nYXRlX2FsbF9yb3V0ZWQuc3RyaWRlKDIpLAogICAgICAgICAgICBzZWxmLldfdXBfYWxsX3JvdXRlZC5zdHJpZGUoMCksIHNlbGYuV191cF9hbGxfcm91dGVkLnN0cmlkZSgxKSwgc2VsZi5XX3VwX2FsbF9yb3V0ZWQuc3RyaWRlKDIpLAogICAgICAgICAgICBzZWxmLldfZG93bl9hbGxfcm91dGVkLnN0cmlkZSgwKSwgc2VsZi5XX2Rvd25fYWxsX3JvdXRlZC5zdHJpZGUoMSksIHNlbGYuV19kb3duX2FsbF9yb3V0ZWQuc3RyaWRlKDIpLAogICAgICAgICAgICBiYXRjaGVkX291dHB1dF9yb3V0ZWQuc3RyaWRlKDApLCBiYXRjaGVkX291dHB1dF9yb3V0ZWQuc3RyaWRlKDEpLCBiYXRjaGVkX291dHB1dF9yb3V0ZWQuc3RyaWRlKDIpLAogICAgICAgICAgICBCTE9DS19TSVpFX009QkxPQ0tfU0laRV9NLCBCTE9DS19TSVpFX05fT1VUPUJMT0NLX1NJWkVfTl9PVVQsCiAgICAgICAgICAgIEJMT0NLX1NJWkVfS19JTj1CTE9DS19TSVpFX0tfSU4sIEJMT0NLX1NJWkVfS19JTlRFUj1CTE9DS19TSVpFX0tfSU5URVIsCiAgICAgICAgICAgIEdST1VQX1NJWkVfTV9DRkc9R1JPVVBfU0laRV9NX2NmZywgIyBQYXNzIHJlbmFtZWQgR1JPVVBfU0laRV9NIGZyb20gY29uZmlnCiAgICAgICAgICAgIG51bV93YXJwcz1udW1fd2FycHMsIG51bV9zdGFnZXM9bnVtX3N0YWdlcwogICAgICAgICkKCiAgICAgICAgdG9rZW5faW5kaWNlc19mb3JfbWFzayA9IHRvcmNoLmFyYW5nZShtYXhfdG9rZW5zX3Blcl9leHBlcnQsIGRldmljZT14LmRldmljZSkKICAgICAgICB2YWxpZF90b2tlbl9tYXNrID0gdG9rZW5faW5kaWNlc19mb3JfbWFzayA8IGV4cGVydF9jb3VudHMudW5zcXVlZXplKC0xKQogICAgICAgIGFsbF9leHBlcnRfb3V0cHV0c19wZXJtX2FsbG9jYXRlZCA9IGJhdGNoZWRfb3V0cHV0X3JvdXRlZFt2YWxpZF90b2tlbl9tYXNrXQogICAgICAgIHdlaWdodGVkX2V4cGVydF9vdXRwdXRzX3Blcm0gPSBhbGxfZXhwZXJ0X291dHB1dHNfcGVybV9hbGxvY2F0ZWQgKiBwZXJtX2V4cGVydF9zY29yZXMKCiAgICAgICAgc2hhcmVkX2V4cGVydF9vdXRwdXRfZmxhdCA9IHRvcmNoLmVtcHR5X2xpa2UoeF9mbGF0KSAjIFNoYXBlIFt0b3RhbF9vcmlnaW5hbF90b2tlbnMsIGRfaGlkZGVuXQogICAgICAgIHNlbGYuc2hhcmVkX2V4cGVydF9tb2R1bGUoeF9mbGF0LCBzaGFyZWRfZXhwZXJ0X291dHB1dF9mbGF0KQoKICAgICAgICBzY2F0dGVyX2luZGljZXMgPSBwZXJtX3Rva2VuX2lkcy51bnNxdWVlemUoLTEpLmV4cGFuZF9hcyh3ZWlnaHRlZF9leHBlcnRfb3V0cHV0c19wZXJtKQogICAgICAgIHNoYXJlZF9leHBlcnRfb3V0cHV0X2ZsYXQuc2NhdHRlcl9yZWR1Y2VfKAogICAgICAgICAgICBkaW09MCwKICAgICAgICAgICAgaW5kZXg9c2NhdHRlcl9pbmRpY2VzLAogICAgICAgICAgICBzcmM9d2VpZ2h0ZWRfZXhwZXJ0X291dHB1dHNfcGVybSwKICAgICAgICAgICAgcmVkdWNlPSJzdW0iLAogICAgICAgICAgICBpbmNsdWRlX3NlbGY9VHJ1ZSAjIEFkZHMgdG8gZXhpc3RpbmcgdmFsdWVzIGZyb20gc2hhcmVkX2V4cGVydF9vdXRwdXRfZmxhdAogICAgICAgICkKICAgICAgICAKICAgICAgICBvdXRwdXQgPSBzaGFyZWRfZXhwZXJ0X291dHB1dF9mbGF0LnZpZXcob3JpZ19zaGFwZSkKICAgICAgICByZXR1cm4gb3V0cHV0CgpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgIGlucHV0X3RlbnNvciwgd2VpZ2h0cywgY29uZmlnID0gZGF0YQogICAgc2VxX2xlbl9mb3JfY29uZmlnX2tleSA9IGlucHV0X3RlbnNvci5zaGFwZVsxXQogICAgCiAgICBmb3IgaywgdiBpbiB3ZWlnaHRzLml0ZW1zKCk6CiAgICAgICAgd2VpZ2h0c1trXSA9IHYuY29udGlndW91cygpICMgVGhpcyBwcmVwYXJlcyB0aGVtIGJlZm9yZSBwYXNzaW5nIHRvIFRyaXRvbk1vRQoKICAgIHRyaXRvbl9tb2VfbW9kZWwgPSBUcml0b25Nb0UoY29uZmlnLCB3ZWlnaHRzLCBzZXFfbGVuX2Zvcl9jb25maWdfa2V5KQogICAgCiAgICBpbnB1dF90ZW5zb3IgPSBpbnB1dF90ZW5zb3IudG8oJ2N1ZGEnKQogICAgdHJpdG9uX21vZV9tb2RlbC50bygnY3VkYScpICMgTW92ZXMgc3RhY2tlZCBwYXJhbXMgYW5kIHNoYXJlZCBleHBlcnQgcGFyYW1zCiAgICAKICAgIGlucHV0X2R0eXBlID0gbmV4dChpdGVyKHdlaWdodHMudmFsdWVzKCkpKS5kdHlwZSAjIEluZmVyIGR0eXBlIGZyb20gd2VpZ2h0cwogICAgaW5wdXRfdGVuc29yID0gaW5wdXRfdGVuc29yLnRvKGlucHV0X2R0eXBlKQogICAgCiAgICBvdXRwdXQgPSB0cml0b25fbW9lX21vZGVsKGlucHV0X3RlbnNvcikKICAgIHJldHVybiBvdXRwdXQK

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

Best evidence level for this revision: reported

JSON