Skip to content
KernelIndex
Search⌘K

submission 18667

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

baguette_1.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-fp8-mm-18667?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesfp32, fp8_e4m3fnuz

Benchmark evidence

18 measurements across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 512]
AMD Instinct MI300X
36.6µs
#16 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 256]
AMD Instinct MI300X
39.8µs
#23 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 1536]
AMD Instinct MI300X
49.8µs
#10 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 256]
AMD Instinct MI300X
106.0µs
#37 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 512]
AMD Instinct MI300X
110.5µs
#33 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2048]
AMD Instinct MI300X
114.2µs
#28 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2304]
AMD Instinct MI300X
125.3µs
#32 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
149.7µs
#61 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
152.2µs
#37 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
156.9µs
#21 of 98
2025-05-09
Show all 18 measurements ›
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=576 · seed=12346
AMD Instinct MI300X
158.8µs
#64 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 1536]
AMD Instinct MI300X
170.2µs
#31 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
170.8µs
#27 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
182.8µs
#21 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
355.4µs
#33 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2048]
AMD Instinct MI300X
468.7µs
#40 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2304]
AMD Instinct MI300X
527.9µs
#42 of 98
2025-05-09
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
1.04ms
#42 of 98
2025-05-09

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:9a73bfcc0c166dad3e0bdf87b58e7272177eae6657506c30146a4605478d09e6
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

baguette_1.py1 lines
IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdAppbXBvcnQgdG9yY2gKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQppbXBvcnQgdGltZQppbXBvcnQgb3MKaW1wb3J0IHN5cwoKaWYgIlBZVE9SQ0hfUk9DTV9BUkNIIiBub3QgaW4gb3MuZW52aXJvbjoKICAgIG9zLmVudmlyb25bIlBZVE9SQ0hfUk9DTV9BUkNIIl0gPSAiZ2Z4OTQyOnhuYWNrLSIKCmtlcm5lbF9jcHAgPSByIiIiCiNpbmNsdWRlIDxoaXAvaGlwX3J1bnRpbWUuaD4KI2luY2x1ZGUgPGhpcC9oaXBfZnAxNi5oPgojaW5jbHVkZSA8aGlwL2hpcF9mcDguaD4KI2luY2x1ZGUgPHB5YmluZDExL3B5YmluZDExLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnR5cGVkZWYgX19oaXBfZnA4X2U0bTNfZm51eiBmcDg7CnVzaW5nIHZlYzRmID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDQgKiBzaXplb2YoZmxvYXQpKSkpIGZsb2F0OwoKI2RlZmluZSBXQVJQX1NJWkUgNjQKI2RlZmluZSBOX1dBUlBfWV9ERUYgNAojZGVmaW5lIE5fV0FSUF9YX0RFRiA0Ci8vIE91dHB1dCBUaWxlIGNvbmZpZwojZGVmaW5lIFRJTEVfU0laRV9ZX0RFRiAxMjgKI2RlZmluZSBUSUxFX1NJWkVfWF9ERUYgMTI4CiNkZWZpbmUgVElMRV9LX0RJTV9ERUYgMTI4CgpfX2RldmljZV9fIHZvaWQgbWF0bXVsMTZ4MTZUZXN0KGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXogKmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICpiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNGYgJmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbSwgaW50IG4pCnsKICAgIGludCB0aWQgPSB0aHJlYWRJZHgueCAlIFdBUlBfU0laRTsKICAgIGF1dG8gcGFja2VkQSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0X3QgKj4oYSArICh0aWQgJSAxNikgKiAobSApICsgKHRpZCAvIDE2KSAqIDgpWzBdOwogICAgYXV0byBwYWNrZWRCID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50NjRfdCAqPihiICsgKHRpZCAlIDE2KSAqIChuICkgKyAodGlkIC8gMTYpICogOClbMF07CiAgICBjID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KHBhY2tlZEEsIHBhY2tlZEIsIGMsIDAsIDAsIDApOwp9CgoKdGVtcGxhdGU8Ym9vbCBib3VuZENoZWNrPgpfX2dsb2JhbF9fIHZvaWQgX19sYXVuY2hfYm91bmRzX18oTl9XQVJQX1hfREVGICpOX1dBUlBfWV9ERUYgKldBUlBfU0laRSkgY3VzdG9tX2tlcm5lbChjb25zdCBmcDggKmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZwOCAqYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKmFzLCBjb25zdCBmbG9hdCAqYnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faGlwX2JmbG9hdDE2ICpjLCBpbnQgTSwgaW50IE4sIGludCBLKQp7CiAgICBpbnQgdGlkID0gdGhyZWFkSWR4Lng7CiAgICBpbnQgbGFuZUlkID0gdGlkICUgV0FSUF9TSVpFOwogICAgZmxvYXQgcmVzdWx0ID0gMDsKCiAgICBjb25zdGV4cHIgaW50IFRJTEVfU0laRV9ZID0gVElMRV9TSVpFX1lfREVGOwogICAgY29uc3RleHByIGludCBUSUxFX1NJWkVfWCA9IFRJTEVfU0laRV9YX0RFRjsKICAgIGNvbnN0ZXhwciBpbnQgS19ESU0gPSBUSUxFX0tfRElNX0RFRjsKICAgIGNvbnN0ZXhwciBpbnQgTkJXQVJQU19ZID0gTl9XQVJQX1lfREVGOyAvLyA0CiAgICBjb25zdGV4cHIgaW50IE5CV0FSUFNfWCA9IE5fV0FSUF9YX0RFRjsgLy8gMgogICAgLy8gaW50cmluc2ljIGNvbmZpZwogICAgY29uc3RleHByIGludCBNQVRNVUxfRElNX0sgPSAzMjsKICAgIGNvbnN0ZXhwciBpbnQgTUFUTVVMX0RJTV9OTSA9IDE2OwogICAgY29uc3RleHByIGludCBCTE9DS19ESU0gPSBOQldBUlBTX1ggKiBOQldBUlBTX1kgKiBXQVJQX1NJWkU7IC8vIDUxMgoKICAgIGludCBTTiA9IChOICsgMTI4IC0gMSkgLyAxMjg7CgogICAgaW50IHdhcnBJZCA9IHRocmVhZElkeC54IC8gV0FSUF9TSVpFOwogICAgaW50IHdhcnBJZHggPSB3YXJwSWQgLyBOQldBUlBTX1k7IC8vIDAgLSA+IDMKICAgIGludCB3YXJwSWR5ID0gd2FycElkICUgTkJXQVJQU19ZOwoKICAgIGNvbnN0ZXhwciBpbnQgS19ESU1fUEFEID0gS19ESU0gKyA4OwoKICAgIF9fc2hhcmVkX18gZnA4IHNfYVtUSUxFX1NJWkVfWF1bS19ESU1fUEFEXTsKICAgIF9fc2hhcmVkX18gZnA4IHNfYltUSUxFX1NJWkVfWV1bS19ESU1fUEFEXTsKICAgIC8vX19zaGFyZWRfXyBmcDggc19iW0tfRElNXVtUSUxFX1NJWkVfWSs4XTsKICAgIAogICAgY29uc3RleHByIGludCBXQVJQX1RJTEVfU0laRV9ZID0gVElMRV9TSVpFX1kgLyBOQldBUlBTX1kgLyBNQVRNVUxfRElNX05NOyAvLyAyCiAgICBjb25zdGV4cHIgaW50IFdBUlBfVElMRV9TSVpFX1ggPSBUSUxFX1NJWkVfWCAvIE5CV0FSUFNfWCAvIE1BVE1VTF9ESU1fTk07IC8vIDQKICAgIHZlYzRmIGNfc1tXQVJQX1RJTEVfU0laRV9YXVtXQVJQX1RJTEVfU0laRV9ZXSA9IHswfTsKCiAgIC8vICNwcmFnbWEgdW5yb2xsIDEKICAgIGZvciAoaW50IGtJZCA9IDA7IGtJZCA8IEs7IGtJZCArPSBLX0RJTSkKICAgIHsKICAgICAgICBhdXRvIHN0YXJ0ID0gIHdhbGxfY2xvY2s2NCgpOwogICAgICAgIC8vIG5iIHJvd3MgcmVhZCBwZXIgYmxvY2sKICAgICAgICBpbnQgbmJSb3dzWSA9IEJMT0NLX0RJTSAvIFRJTEVfU0laRV9ZOyAvLyA0CiAgICAgICAgLy8gQgogICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgS19ESU07IHIgKz0gbmJSb3dzWSkgLy8xNiBsb2FkcwogICAgICAgIHsKICAgICAgICB1aW50MzJfdCByb3dfb2Zmc2V0ID0ga0lkOwogICAgICAgICAgICB1aW50MzJfdCBjb2xfb2Zmc2V0ID0gVElMRV9TSVpFX1kgKiBibG9ja0lkeC55OwoKICAgICAgICAgICAgdWludDMyX3Qgcm93ID0gciArICh0aWQgLyBUSUxFX1NJWkVfWSk7CiAgICAgICAgICAgIHVpbnQzMl90IGNvbCA9ICh0aWQgJSBUSUxFX1NJWkVfWSk7CgogICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IChyb3dfb2Zmc2V0ICsgcm93KSAqIE4gKyAoY29sX29mZnNldCArIGNvbCk7CiAgICAgICAgICAgIGJvb2wgYl9jaGVjayA9IHRydWU7CiAgICAgICAgICAgIGlmIGNvbnN0ZXhwcihib3VuZENoZWNrKXsKICAgICAgICAgICAgICBiX2NoZWNrID0gKGNvbCA8IE4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChiX2NoZWNrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvL3NfYltyb3ddW2NvbF0gPSBiW2luZGV4XTsKICAgICAgICAgICAgICAgIHNfYltjb2xdW3Jvd10gPSBiW2luZGV4XTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbnQgbmJSb3dzWCA9IEJMT0NLX0RJTSAvIFRJTEVfU0laRV9YOyAvLyA0CiAgICAgICAgLy8gQQogICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgS19ESU07IHIgKz0gbmJSb3dzWCkKICAgICAgICB7CiAgICAgICAgICAgIHVpbnQzMl90IHJvd19vZmZzZXQgPSBrSWQ7CiAgICAgICAgICAgIHVpbnQzMl90IGNvbF9vZmZzZXQgPSBUSUxFX1NJWkVfWCAqIGJsb2NrSWR4Lng7IC8vIGNvbHVtbiBtYWpvcgoKICAgICAgICAgICAgdWludDMyX3Qgcm93ID0gciArICh0aWQgLyBUSUxFX1NJWkVfWCk7CiAgICAgICAgICAgIHVpbnQzMl90IGNvbCA9ICh0aWQgJSBUSUxFX1NJWkVfWCk7CgogICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IChyb3dfb2Zmc2V0ICsgcm93KSAqIE0gKyAoY29sX29mZnNldCArIGNvbCk7CiAgICAgICAgICAgIGJvb2wgYl9jaGVjayA9IHRydWU7CiAgICAgICAgICAgIGlmIGNvbnN0ZXhwcihib3VuZENoZWNrKXsKICAgICAgICAgICAgICBiX2NoZWNrID0gKGNvbCA8IE0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChiX2NoZWNrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvL3NfYVtyb3ddW2NvbF0gPSBhW2luZGV4XTsKICAgICAgICAgICAgICAgIHNfYVtjb2xdW3Jvd10gPSBhW2luZGV4XTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgCiAgICAgICAgX19zeW5jdGhyZWFkcygpOwoKICAgICAgIAogICAgICAgIHZlYzRmIGNfdG1wW1dBUlBfVElMRV9TSVpFX1hdW1dBUlBfVElMRV9TSVpFX1ldID0gezB9OwogICAgICAgICNwcmFnbWEgdW5yb2xsCgogICAgICAgIGZvciAoaW50IHRfd0lkeCA9IDA7IHRfd0lkeCA8IFdBUlBfVElMRV9TSVpFX1g7IHRfd0lkeCsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgdF93SWR5ID0gMDsgdF93SWR5IDwgV0FSUF9USUxFX1NJWkVfWTsgdF93SWR5KyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBpbnQgc3RlcFggPSBUSUxFX1NJWkVfWCAvIFdBUlBfVElMRV9TSVpFX1g7CiAgICAgICAgICAgICAgICBjb25zdGV4cHIgaW50IHN0ZXBZID0gVElMRV9TSVpFX1kgLyBXQVJQX1RJTEVfU0laRV9ZOyAvLzEyOC8yPTY0CgogICAgICAgICAgICAgICAgdmVjNGYgY190bXAgPSB7MC4wZiwgMC4wZiwgMC4wZiwgMC4wZn07CgogICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBLX0RJTTsgays9TUFUTVVMX0RJTV9LKSAvLyBNQVRNVUxfRElNX0sgbXVzdCBiZSBhIG11bHRpcGxlIG9mIEtfRElNCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaW50IGFfY29sID0gKHRfd0lkeCAqIHN0ZXBYKSArIHdhcnBJZHggKiBNQVRNVUxfRElNX05NOwogICAgICAgICAgICAgICAgICAgIGludCBiX2NvbCA9ICh0X3dJZHkgKiBzdGVwWSkgKyB3YXJwSWR5ICogTUFUTVVMX0RJTV9OTTsKICAgICAgICAgICAgICAgICAgICBtYXRtdWwxNngxNlRlc3QoJnNfYVthX2NvbF1ba10sICZzX2JbYl9jb2xdW2tdLCBjX3RtcCwgS19ESU1fUEFELCBLX0RJTV9QQUQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGludCBhX3JvdyA9ICh0X3dJZHggKiBzdGVwWCkgKyB3YXJwSWR4ICogTUFUTVVMX0RJTV9OTTsgCiAgICAgICAgICAgICAgICAvLyBBcHBseSBzY2FsaW5nCiAgICAgICAgICAgICAgICBpbnQgYXNfY29sID0ga0lkIC8gMTI4OwogICAgICAgICAgICAgICAgaW50IGFzX3JvdyA9IGFfcm93ICsgYmxvY2tJZHgueCAqIFRJTEVfU0laRV9YOwogICAgICAgICAgICAgICAgaW50IGJzX2NvbCA9IGJsb2NrSWR4Lnk7CiAgICAgICAgICAgICAgICBpbnQgYnNfcm93ID0ga0lkIC8gMTI4OwogICAgICAgICAgICAgICAgZmxvYXQgYnNfdmFsID0gYnNbYnNfcm93ICogU04gKyBic19jb2xdOyAvLyByb3cgbWFqb3Igc2FtZSBhcyBCdCA/CiAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpbnQgcm93ID0gYXNfcm93ICsgaSArIChsYW5lSWQgLyAxNikgKiA0OwogICAgICAgICAgICAgICAgICAgIGZsb2F0IGFzX3ZhbCA9IGFzW2FzX2NvbCAqIE0gKyByb3ddOwogICAgICAgICAgICAgICAgICAgIGNfc1t0X3dJZHhdW3Rfd0lkeV1baV0gKz0gY190bXBbaV0gKiBhc192YWwgKiBic192YWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgCiAgICAgICAgIF9fc3luY3RocmVhZHMoKTsKCiAgICAgICAgCiAgICB9CiAgICBmb3IgKGludCB0X3dJZHggPSAwOyB0X3dJZHggPCBXQVJQX1RJTEVfU0laRV9YOyB0X3dJZHgrKykKICAgIHsKICAgICAgICBmb3IgKGludCB0X3dJZHkgPSAwOyB0X3dJZHkgPCBXQVJQX1RJTEVfU0laRV9ZOyB0X3dJZHkrKykKICAgICAgICB7CiAgICAgICAgICAgIC8vIG9mZnNldCBwb2ludGluZyB0byB0aGUgYWNjdW11bGF0ZWQgMTZ4MTYgYmxvY2sKICAgICAgICAgICAgaW50IGNvbF9vZmZzZXQgPSBibG9ja0lkeC55ICogVElMRV9TSVpFX1kgKyAgICAgICAgICAgICAgICAgLy8gVElMRSBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2FycElkeSAqIE1BVE1VTF9ESU1fTk0pICsgICAgICAgICAgICAgICAgLy8gV2FycCBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0X3dJZHkgKiAoVElMRV9TSVpFX1kgLyBXQVJQX1RJTEVfU0laRV9ZKTsgICAvLyBXYXJwIHRpbGUgb2Zmc2V0CgogICAgICAgICAgICBpbnQgcm93X29mZnNldCA9IGJsb2NrSWR4LnggKiBUSUxFX1NJWkVfWCArICAgICAgICAgICAgICAgICAvLyBUSUxFIG9mZnNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3YXJwSWR4ICogTUFUTVVMX0RJTV9OTSkgKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXYXJwIG9mZnNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRfd0lkeCAqIChUSUxFX1NJWkVfWCAvIFdBUlBfVElMRV9TSVpFX1gpOyAvLyBXYXJwIHRpbGUgb2Zmc2V0CgogICAgICAgICAgICBhdXRvIHJlcyA9IGNfc1t0X3dJZHhdW3Rfd0lkeV07CiAgICAgICAgICAgIGJvb2wgYl9jaGVjayA9IHRydWU7CiAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoYm91bmRDaGVjayl7CiAgICAgICAgICAgICAgYl9jaGVjayA9IChyb3dfb2Zmc2V0KSA8IE0gJiYgKGNvbF9vZmZzZXQpIDwgTjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYl9jaGVjayl7CiAgICAgICAgICAgICAgLy8gQyBpcyBzdG9yZWQgb24gNCBWR1BScwogICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaW50IGNvbCA9IGxhbmVJZCAlIDE2OwogICAgICAgICAgICAgICAgICBpbnQgcm93ID0gaSArIChsYW5lSWQgLyAxNikgKiA0OwogICAgICAgICAgICAgICAgICAvL2lmICgocm93X29mZnNldCArIHJvdykgPCBNICYmIChjb2xfb2Zmc2V0ICsgY29sKSA8IE4pCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNbKHJvd19vZmZzZXQgKyByb3cpICogTiArIChjb2xfb2Zmc2V0ICsgY29sKV0gPSAoX19oaXBfYmZsb2F0MTYpKHJlc1tpXSk7CiAgICAgICAgICAgICAgICAgICAgICAvL2NbKHJvd19vZmZzZXQgKyByb3cpICogTiArIChjb2xfb2Zmc2V0ICsgY29sKV0gPSAoX19oaXBfYmZsb2F0MTYpKDY0KnRfd0lkeSsxNip3YXJwSWR5KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCiNkZWZpbmUgSElQX0NIRUNLKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgaGlwRXJyb3JfdCBlcnJvciA9IGNvbmRpdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgaWYoZXJyb3IgIT0gaGlwU3VjY2VzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiRXJyb3IgIiA8PCBoaXBHZXRFcnJvck5hbWUoZXJyb3IpIDw8ICcoJyA8PCBlcnJvciA8PCAnKScgPDwgIjogIiAgICBACiAgICAgICAgICAgICAgICAgICAgICA8PCBoaXBHZXRFcnJvclN0cmluZyhlcnJvcikgPDwgIiBpbiAiIDw8IF9fZnVuY19fIDw8ICIgYXQgIiA8PCBfX0ZJTEVfXyBACiAgICAgICAgICAgICAgICAgICAgICA8PCAnOicgPDwgX19MSU5FX18gPDwgJ0BuJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgICAgIGV4aXQoZXJyb3IpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICB3aGlsZShmYWxzZSkKCnZvaWQgcnVuKAogICAgdWludHB0cl90IGFfcHRyLAogICAgdWludHB0cl90IGJfcHRyLAogICAgdWludHB0cl90IGFzX3B0ciwKICAgIHVpbnRwdHJfdCBic19wdHIsCiAgICB1aW50cHRyX3QgY19wdHIsCiAgICBpbnQgTSwKICAgIGludCBOLAogICAgaW50IEsKKSB7CiAgICBjb25zdCBhdXRvKiBkX0EgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZwOCo+KGFfcHRyKTsKICAgIGNvbnN0IGF1dG8qIGRfQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZnA4Kj4oYl9wdHIpOwogICAgY29uc3QgYXV0byogZF9BcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihhc19wdHIpOwogICAgY29uc3QgYXV0byogZF9CcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihic19wdHIpOwogICAgYXV0byogZF9DID0gcmVpbnRlcnByZXRfY2FzdDxfX2hpcF9iZmxvYXQxNio+KGNfcHRyKTsKCiAgICBkaW0zIHRocmVhZHNQZXJCbG9jayhOX1dBUlBfWF9ERUYgKiBOX1dBUlBfWV9ERUYgKiBXQVJQX1NJWkUpOwogICAgZGltMyBibG9ja3NQZXJHcmlkKChNICsgVElMRV9TSVpFX1hfREVGIC0gMSkgLyBUSUxFX1NJWkVfWF9ERUYsCiAgICAgICAgICAgICAgICAgICAgIChOICsgVElMRV9TSVpFX1lfREVGIC0gMSkgLyBUSUxFX1NJWkVfWV9ERUYpOwogICAgCiAgICBpZiAoTSUxMjg9PTAgJiYgTiUxMjg9PTApewogICAgICAgIGhpcExhdW5jaEtlcm5lbEdHTCgoY3VzdG9tX2tlcm5lbDxmYWxzZT4pLCBibG9ja3NQZXJHcmlkLCB0aHJlYWRzUGVyQmxvY2ssIDAsIDAsCiAgICAgICAgICAgICAgICAgICAgIGRfQSwgZF9CLCBkX0FzLCBkX0JzLCBkX0MsIE0sIE4sIEspOwogICAgfWVsc2V7CiAgICAgICAgaGlwTGF1bmNoS2VybmVsR0dMKChjdXN0b21fa2VybmVsPHRydWU+KSwgYmxvY2tzUGVyR3JpZCwgdGhyZWFkc1BlckJsb2NrLCAwLCAwLAogICAgICAgICAgICAgICAgICAgICBkX0EsIGRfQiwgZF9BcywgZF9CcywgZF9DLCBNLCBOLCBLKTt9CgogICAgSElQX0NIRUNLKGhpcEdldExhc3RFcnJvcigpKTsKfQoKUFlCSU5EMTFfTU9EVUxFKGZwOCwgbSkgewogIG0uZGVmKCJmcDgiLCAmcnVuLCAiSElQIGtlcm5lbCIpOwp9CiIiIgoKaGlwX21vZHVsZSA9IGxvYWRfaW5saW5lKAogICAgbmFtZT0iZnA4IiwKICAgIGNwcF9zb3VyY2VzPSIiLAogICAgY3VkYV9zb3VyY2VzPWtlcm5lbF9jcHAucmVwbGFjZSgnQCcsIGNocig5MikpLAogICAgd2l0aF9jdWRhPVRydWUsCiAgICB2ZXJib3NlPUZhbHNlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItZyAtLXNhdmUtdGVtcHMgLVJwYXNzLWFuYWx5c2lzPWtlcm5lbC1yZXNvdXJjZS11c2FnZSAtc3RkPWMrKzIwIl0sCiAgICBub19pbXBsaWNpdF9oZWFkZXJzPVRydWUsCikKCmZpcnN0ID0gVHJ1ZQoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICAiIiIKICAgIFJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBibG9jay1zY2FsZSBmcDggZ2VtbQogICAgQXJnczoKICAgICAgICBkYXRhOiBUdXBsZSB0aGF0IGV4cGFuZHMgdG86CiAgICAgICAgICAgIGE6IHRvcmNoLlRlbnNvcltmbG9hdDhfZTRtM2ZudXpdIG9mIHNoYXBlIFttLCBrXSwKICAgICAgICAgICAgYjogdG9yY2guVGVuc29yW2Zsb2F0OF9lNG0zZm51el0gb2Ygc2hhcGUgW24sIGtdLAogICAgICAgICAgICBhX3NjYWxlOiB0b3JjaC5UZW5zb3JbZmxvYXQzMl0gb2Ygc2hhcGUgW20sIGsgLy8gMTI4XSwKICAgICAgICAgICAgYl9zY2FsZTogdG9yY2guVGVuc29yW2Zsb2F0MzJdIG9mIHNoYXBlIFtuIC8vIDEyOCwgayAvLyAxMjhdLAogICAgICAgICAgICBjOiB0b3JjaC5UZW5zb3JbYmZsb2F0MTZdIG9mIHNoYXBlIFttLCBuXQogICAgUmV0dXJuczoKICAgICAgICBUZW5zb3IgY29udGFpbmluZyBvdXRwdXQgaW4gYmYxNgogICAgIiIiCgogICAgZ2xvYmFsIGZpcnN0CiAgICBpZiBmaXJzdDoKICAgICAgICBwcmludCgiZXhlY3V0aW5nIG9uIiwgdG9yY2guY3VkYS5nZXRfZGV2aWNlX25hbWUoKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIGZpcnN0ID0gRmFsc2UKCiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQoKICAgIG0sIG4gPSBjLnNoYXBlCiAgICBrID0gYS5zaGFwZVsxXQoKICAgIGhpcF9tb2R1bGUuZnA4KAogICAgICAgIGEuZGF0YV9wdHIoKSwKICAgICAgICBiLmRhdGFfcHRyKCksCiAgICAgICAgYV9zY2FsZS5kYXRhX3B0cigpLAogICAgICAgIGJfc2NhbGUuZGF0YV9wdHIoKSwKICAgICAgICBjLmRhdGFfcHRyKCksCiAgICAgICAgbSwKICAgICAgICBuLAogICAgICAgIGssCiAgICApCgogICAgcmV0dXJuIGMK

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 submission 7548.

- IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KCiMgVGhpcyBpcyBhIHN1Ym1pc3Npb24gdGVtcGxhdGUgZm9yIHBvcGNvcm4gbGVhZGVyYm9hcmQgJ2FtZC1mcDgtbW0nLgojIFlvdXIgdGFzayBpcyBhcyBmb2xsb3dzOgojID4gCiMgPiBZb3Ugd2lsbCBpbXBsZW1lbnQgYSBjdXN0b20gZnA4LWJsb2Nrd2lzZSBtYXRtdWwga2VybmVsIG9wdGltaXplZCBmb3IgTUkzMDAuCiMgPiBZb3Ugd2lsbCBiZSBnaXZlbiBzaW5nbGUtcHJlY2lzaW9uIHNjYWxpbmcgZmFjdG9ycyBmb3IgeW91ciBtYXRyaWNlcy4KIyA+IFRoZSBzaGFwZXMgb2YgYWxsIG91dGVyIGFuZCBpbm5lciBkaW1lbnNpb25zIG9mIHRlbnNvcnMgYXJlIGZyb20gRGVlcFNlZWstUjEuCiMgPiBUbyBiZSBleHBsaWNpdCwgeW91IHdpbGwgYmUgZ2l2ZW4gYSB0dXBsZSBvZiB0ZW5zb3JzOgojID4gYGBgCiMgPiAoYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYykKIyA+IGBgYAojID4gd2hlcmUgYGFgIGFuZCBgYmAgYXJlIHRoZSBpbnB1dCBtYXRyaWNlcywgYGFfc2NhbGVgIGFuZCBgYl9zY2FsZWAgYXJlIHRoZSBzY2FsaW5nIGZhY3RvcnMgZm9yIGBhYCBhbmQgYGJgIHJlc3BlY3RpdmVseSwKIyA+IGFuZCBgY2AgaXMgdGhlIG91dHB1dCBtYXRyaXg6CiMgPiAqIGBhYCBpcyBNIHggSyBpbiBjb2x1bW4tbWFqb3Igb3JkZXIgaW4gZTRtM2ZudXoKIyA+ICogYGJgIGlzIE4geCBLIGluIGNvbHVtbi1tYWpvciBvcmRlciBpbiBlNG0zZm51egojID4gKiBgYV9zY2FsZWAgaXMgTSB4IEsgaW4gY29sdW1uLW1ham9yIG9yZGVyIGluIGZwMzIKIyA+ICogYGJfc2NhbGVgIGlzIE4geCBLIGluIGNvbHVtbi1tYWpvciBvcmRlciBpbiBmcDMyCiMgPiAqIGBjYCBpcyBNIHggTiBpbiBST1ctbWFqb3Igb3JkZXIgaW4gYmYxNgojID4gCiMgPiBNYXRyaXggc2l6ZXMgYG1gIGFuZCBgbmAgYXJlIGRpdmlzaWJsZSBieSA2NCwgYGtgIGlzIGRpdmlzaWJsZSBieSAxMjguCiMgPiAKIyA+IFRoZSByYW5raW5nIGNyaXRlcmlhIGlzIHRoZSBnZW9tZXRyaWMgbWVhbiBvZiB0aGUgYmVuY2htYXJrIHJlc3VsdHMuCiMgPiAKIyA+IEZvciB0aGUgZ3JhbmQgcHJpY2UsIHlvdXIga2VybmVsIHdpbGwgYmUgZXZhbHVhdGVkIGFnYWluc3QgdGhlIHNwZWVkIG9mIGxpZ2h0IGFuYWx5c2lzCiMgPiBhbmQgdGhlIHNvbHV0aW9uIGNsb3Nlc3QgdG8gdGhlIHNwZWVkIG9mIGxpZ2h0IHdpbGwgYmUgYXdhcmRlZCB0aGUgZ3JhbmQgcHJpY2UuCiMgPiBgYGAKIyA+IFRoZSBzcGVlZCBvZiBsaWdodCBhbmFseXNpcyBpczoKIyA+ICBNICAgICAgIE4gICAgICAgSyAgICAgdGltZVt1c10KIyA+IDEwMjQgICAgMTUzNiAgICA3MTY4ICAgICAgOC42MwojID4gMTAyNCAgICA0NjA4ICAgIDcxNjggICAgIDI1Ljg5CiMgPiA2MTQ0ICAgIDE1MzYgICAgNzE2OCAgICAgNTEuNzgKIyA+IDYxNDQgICAgNDYwOCAgICA3MTY4ICAgIDE1NS4zMAojID4gMTAyNCAgICA3MTY4ICAgICAyNTYgICAgICAzLjE3CiMgPiA2MTQ0ICAgIDcxNjggICAgIDI1NiAgICAgMTcuMjcKIyA+IGBgYAojIFRoZSBkZWFkbGluZSBmb3IgdGhpcyBsZWFkZXJib2FyZCBpcyAyMDI1LTA1LTI3IDAwOjAwOjAwKzAwOjAwCgojIFlvdSBjYW4gYXV0b21hdGljYWxseSByb3V0ZSB0aGlzIGZpbGUgdG8gc3BlY2lmaWMgR1BVcyBieSBhZGRpbmcgYSBsaW5lCiMgYCMhUE9QQ09STiBncHVzIDxHUFVzPmAgdG8gdGhlIGhlYWRlciBvZiB0aGlzIGZpbGUuCiMgSGFwcHkgaGFja2luZyEKCiMgVGhpcyBzY3JpcHQgcHJvdmlkZXMgYSB0ZW1wbGF0ZSBmb3IgdXNpbmcgbG9hZF9pbmxpbmUgdG8gcnVuIGEgSElQIGtlcm5lbCBmb3IKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CkNQUF9XUkFQUEVSID0gIiIiCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOwoiIiIKCkNVREFfU1JDID0gIiIiCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2ZwOC5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9iZjE2Lmg+Cgp0eXBlZGVmIF9faGlwX2ZwOF9lNG0zX2ZudXogZnA4OwoKI2RlZmluZSBXQVJQX1NJWkUgNjQKdXNpbmcgdmVjNGYgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNCAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CiNkZWZpbmUgTl9XQVJQX1hfREVGIDQKI2RlZmluZSBOX1dBUlBfWV9ERUYgMgojZGVmaW5lIFRJTEVfU0laRV9ERUYgMTI4CgpfX2RldmljZV9fIHZvaWQgbWF0bXVsMTZ4MTYoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXogKmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWM0ZiAmYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtLCBpbnQgbikKewogICAgaW50IHRpZCA9IHRocmVhZElkeC54ICUgV0FSUF9TSVpFOwogICAgYXV0byBwYWNrZWRBID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50NjRfdCo+KGErKHRpZCAlIDE2KSooVElMRV9TSVpFX0RFRis4KSArICh0aWQgLyAxNikgKiA4IClbMF07CiAgICBhdXRvIHBhY2tlZEIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ2NF90Kj4oYisodGlkICUgMTYpKihUSUxFX1NJWkVfREVGKzgpICsgKHRpZCAvIDE2KSAqIDggKVswXTsKICAgIGMgPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzE2eDE2eDMyX2ZwOF9mcDgocGFja2VkQSwgcGFja2VkQiwgYywgMCwgMCwgMCk7Cgp9Cl9fZ2xvYmFsX18gdm9pZCBfX2xhdW5jaF9ib3VuZHNfXyhOX1dBUlBfWF9ERUYgKk5fV0FSUF9ZX0RFRiAqIFdBUlBfU0laRSkgY3VzdG9tX2tlcm5lbChjb25zdCBmcDggKmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZwOCAqYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKmFzLCBjb25zdCBmbG9hdCAqYnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faGlwX2JmbG9hdDE2ICpjLCBpbnQgTSwgaW50IE4sIGludCBLKQp7CiAgICBpbnQgdGlkID0gdGhyZWFkSWR4Lng7CiAgICBpbnQgbGFuZUlkID0gdGlkICUgV0FSUF9TSVpFOwogICAgZmxvYXQgcmVzdWx0ID0gMDsKICAgICAgICAKICAgIGNvbnN0ZXhwciBpbnQgVElMRV9TSVpFID0gVElMRV9TSVpFX0RFRjsKICAgIGNvbnN0ZXhwciBpbnQgTkJXQVJQU19YID0gTl9XQVJQX1hfREVGOwogICAgY29uc3RleHByIGludCBOQldBUlBTX1kgPSBOX1dBUlBfWV9ERUY7CiAgICBjb25zdGV4cHIgaW50IEJMT0NLX0RJTSA9IE5CV0FSUFNfWCAqIE5CV0FSUFNfWSAqIFdBUlBfU0laRTsKICAgIGNvbnN0ZXhwciBpbnQgbmJSZWFkcyA9IFRJTEVfU0laRSAqIFRJTEVfU0laRSAvIEJMT0NLX0RJTTsKCiAgICBpbnQgU04gPSAoTiArIDEyOCAtIDEpIC8gMTI4OwoKICAgIGludCB3YXJwSWQgPSB0aHJlYWRJZHgueCAvIFdBUlBfU0laRTsKICAgIC8vIDI1NiB0aHJlYWRzIG9yZ2FuaXplZCBpbiAyeDIgd2FycHMKICAgIGludCB3YXJwSWR4ID0gd2FycElkIC8gTkJXQVJQU19ZOwogICAgaW50IHdhcnBJZHkgPSB3YXJwSWQgJSBOQldBUlBTX1k7CgogICAgX19zaGFyZWRfXyBmcDggc19hW1RJTEVfU0laRV1bVElMRV9TSVpFKzhdOwogICAgX19zaGFyZWRfXyBmcDggc19iW1RJTEVfU0laRV1bVElMRV9TSVpFKzhdOwoKICAgIC8vIEV2ZXJ5IFdhcnAgaG9sZCBjb21wdXRlIDR4NCAxNngxNiB0aWxlIC0+IFdBUlAgVGlsZSBzaXplIGlzIDY0eDY0CiAgICAvLyAgVE9ETzogU2VlIGlmIDJ4MiBpcyBiZXR0ZXIuLi4KICAgIGNvbnN0ZXhwciBpbnQgV0FSUF9USUxFX1NJWkVfWCA9IFRJTEVfU0laRSAvIE5CV0FSUFNfWCAvIDE2OwogICAgY29uc3RleHByIGludCBXQVJQX1RJTEVfU0laRV9ZID0gVElMRV9TSVpFIC8gTkJXQVJQU19ZIC8gMTY7CiAgICB2ZWM0ZiBjX3NbV0FSUF9USUxFX1NJWkVfWF1bV0FSUF9USUxFX1NJWkVfWV0gPSB7MH07CgogICAgZm9yIChpbnQga0lkID0gMDsga0lkIDwgSzsga0lkICs9IFRJTEVfU0laRSkKICAgIHsKICAgICAgICAvLyBuYiByb3dzIHJlYWQgcGVyIGJsb2NrCiAgICAgICAgaW50IG5iUm93cyA9IEJMT0NLX0RJTSAvIFRJTEVfU0laRTsKICAgICAgICAvLyBCCiAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBUSUxFX1NJWkU7IHIgKz0gbmJSb3dzKQogICAgICAgIHsKICAgICAgICAgICAgdWludDMyX3Qgcm93X29mZnNldCA9IGtJZDsKICAgICAgICAgICAgdWludDMyX3QgY29sX29mZnNldCA9IFRJTEVfU0laRSAqIGJsb2NrSWR4Lnk7CiAgICAgICAgICAgIC8vIFJlYWRzIGJ5IGNvbHVtbnMgZm9yIGNvYWxlc2NlZCBsb2FkcwogICAgICAgICAgICB1aW50MzJfdCByb3cgPSByb3dfb2Zmc2V0ICsgciArICh0aWQgLyBUSUxFX1NJWkUpOwogICAgICAgICAgICB1aW50MzJfdCBjb2wgPSBjb2xfb2Zmc2V0ICsgKHRpZCAlIFRJTEVfU0laRSk7CiAgICAgICAgICAgIHVpbnQzMl90IGJJbmRleCA9IHJvdyAqIE4gKyBjb2w7CiAgICAgICAgICAgIGlmIChjb2w8Til7CiAgICAgICAgICAgICAgICBzX2JbY29sICUgVElMRV9TSVpFXVtyb3cgJSBUSUxFX1NJWkVdID0gYltiSW5kZXhdOyAvLyB0cmFuc3Bvc2VkCiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIC8vIEEKICAgICAgICBmb3IgKGludCByID0gMDsgciA8IFRJTEVfU0laRTsgciArPSBuYlJvd3MpCiAgICAgICAgewogICAgICAgICAgICB1aW50MzJfdCByb3dfb2Zmc2V0ID0gVElMRV9TSVpFICogYmxvY2tJZHgueDsKICAgICAgICAgICAgdWludDMyX3QgY29sX29mZnNldCA9IGtJZDsKICAgICAgICAgICAgLy8gUmVhZHMgYnkgcm93cyBmb3IgY29hbGVzY2VkIGxvYWRzCiAgICAgICAgICAgIHVpbnQzMl90IHJvdyA9IHJvd19vZmZzZXQgKyAodGlkICUgVElMRV9TSVpFKTsKICAgICAgICAgICAgdWludDMyX3QgY29sID0gY29sX29mZnNldCArIHIgKyAodGlkIC8gVElMRV9TSVpFKTsKICAgICAgICAgICAgdWludDMyX3QgYUluZGV4ID0gY29sICogTSArIHJvdzsKICAgICAgICAgICAgYXV0byBhVCA9IHJvdzxNID8gYVthSW5kZXhdIDogKGZwOCkwOwogICAgICAgICAgICBpZiAocm93PE0pewogICAgICAgICAgICAgICAgc19hW3JvdyAlIFRJTEVfU0laRV1bY29sICUgVElMRV9TSVpFXSA9IGFbYUluZGV4XTsgLy8gdHJhbnNwb3NlZAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9fc3luY3RocmVhZHMoKTsKICAgIAogICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHRfd0lkeCA9IDA7IHRfd0lkeCA8IFdBUlBfVElMRV9TSVpFX1g7IHRfd0lkeCsrKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgdF93SWR5ID0gMDsgdF93SWR5IDwgV0FSUF9USUxFX1NJWkVfWTsgdF93SWR5KyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBpbnQgc3RlcFggPSBUSUxFX1NJWkUgLyBXQVJQX1RJTEVfU0laRV9YOyAvLyAxNgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGludCBzdGVwWSA9IFRJTEVfU0laRSAvIFdBUlBfVElMRV9TSVpFX1k7IC8vIDMyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmUgbWF0bXVsIG5lZWRzIDQgaXRlcmF0aW9ucwogICAgICAgICAgICAgICAgY29uc3RleHByIGludCBuYkl0ZXIgPSBUSUxFX1NJWkUgLyAzMjsgLy8gMzIgYmVpbmcgSyBkaW0gb2YgdGhlIG1mbWExNngxNngzMmZwOAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNGYgY190bXAgPSB7MC4wZiwgMC4wZiwgMC4wZiwgMC4wZn07CiAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iSXRlcjsgaSsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFfY29sID0gMzIgKiBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFfcm93ID0gKHRfd0lkeCAqIHN0ZXBYKSArIHdhcnBJZHggKiAxNjsgLy8gMTYgaXMgTSBvZiB0aGUgbWZtYTE2eDE2eDMyZnA4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYl9yb3cgPSAzMiAqIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYl9jb2wgPSAodF93SWR5ICogc3RlcFkpICsgd2FycElkeSAqIDE2OyAvLyAxNiBpcyBOIG9mIHRoZSBtZm1hMTZ4MTZ4MzJmcDgKICAgICAgICAgICAgICAgICAgICBtYXRtdWwxNngxNigmc19hW2Ffcm93XVthX2NvbF0sICZzX2JbYl9jb2xdW2Jfcm93XSwgY190bXAsIFRJTEVfU0laRSwgVElMRV9TSVpFKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhX3JvdyA9ICh0X3dJZHggKiBzdGVwWCkgKyB3YXJwSWR4ICogMTY7IC8vIDE2IGlzIE0gb2YgdGhlIG1mbWExNngxNngzMmZwOAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgc2NhbGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFzX2NvbCA9IGtJZCAvIDEyODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhc19yb3cgPSBhX3JvdyArIGJsb2NrSWR4LnggKiBUSUxFX1NJWkU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnNfY29sID0gYmxvY2tJZHgueTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBic19yb3cgPSBrSWQgLyAxMjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBic192YWwgPSBic1tic19yb3cgKiBTTisgYnNfY29sXTsgLy8gcm93IG1ham9yIHNhbWUgYXMgQnQgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvdyA9IGFzX3JvdyArIGkgKyAobGFuZUlkIC8gMTYpICogNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhc192YWwgPSBhc1thc19jb2wgKiBNICsgcm93XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX3NbdF93SWR4XVt0X3dJZHldW2ldICs9IGNfdG1wW2ldICogYXNfdmFsICogYnNfdmFsOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIF9fc3luY3RocmVhZHMoKTsKICAgIH0KICAgIGZvciAoaW50IHRfd0lkeCA9IDA7IHRfd0lkeCA8IFdBUlBfVElMRV9TSVpFX1g7IHRfd0lkeCsrKQogICAgewogICAgICAgIGZvciAoaW50IHRfd0lkeSA9IDA7IHRfd0lkeSA8IFdBUlBfVElMRV9TSVpFX1k7IHRfd0lkeSsrKQogICAgICAgIHsKICAgICAgICAgICAgLy8gb2Zmc2V0IHBvaW50aW5nIHRvIHRoZSBhY2N1bXVsYXRlZCAxNngxNiBibG9jawogICAgICAgICAgICBpbnQgY29sX29mZnNldCA9IGJsb2NrSWR4LnkgKiBUSUxFX1NJWkUgKyAgICAgICAgICAgICAgICAgLy8gVElMRSBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2FycElkeSAqIDE2KSArICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhcnAgb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdF93SWR5ICogKFRJTEVfU0laRSAvIFdBUlBfVElMRV9TSVpFX1kpOyAvLyBXYXJwIHRpbGUgb2Zmc2V0CgogICAgICAgICAgICBpbnQgcm93X29mZnNldCA9IGJsb2NrSWR4LnggKiBUSUxFX1NJWkUgKyAgICAgICAgICAgICAgICAgLy8gVElMRSBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2FycElkeCAqIDE2KSArICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhcnAgb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdF93SWR4ICogKFRJTEVfU0laRSAvIFdBUlBfVElMRV9TSVpFX1gpOyAvLyBXYXJwIHRpbGUgb2Zmc2V0CgogICAgICAgICAgICBhdXRvIHJlcyA9IGNfc1t0X3dJZHhdW3Rfd0lkeV07CiAgICAgICAgICAgIC8vIEMgaXMgc3RvcmVkIG9uIDQgVkdQUnMKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBjb2wgPSBsYW5lSWQgJSAxNjsKICAgICAgICAgICAgICAgIGludCByb3cgPSBpICsgKGxhbmVJZCAvIDE2KSAqIDQ7CiAgICAgICAgICAgICAgICBpZiAoKHJvd19vZmZzZXQgKyByb3cpPE0gJiYgKGNvbF9vZmZzZXQgKyBjb2wpPE4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY1socm93X29mZnNldCArIHJvdykgKiBOICsgKGNvbF9vZmZzZXQgKyBjb2wpXSA9IChfX2hpcF9iZmxvYXQxNikocmVzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBmcDhfbW0odG9yY2g6OlRlbnNvciBhLCB0b3JjaDo6VGVuc29yIGIsIHRvcmNoOjpUZW5zb3IgYXMsIHRvcmNoOjpUZW5zb3IgYnMsIHRvcmNoOjpUZW5zb3IgYykgewogICAgaW50IG0gPSBhLnNpemUoMCk7CiAgICBpbnQgbiA9IGIuc2l6ZSgwKTsKICAgIGludCBrID0gYS5zaXplKDEpOwogICAgY3VzdG9tX2tlcm5lbDw8PGRpbTMoKG0rMTI3KS8xMjgsIChuKzEyNykvMTI4KSwgZGltMyg0KjIqNjQsMSksIDAsIDA+Pj4gKChfX2hpcF9mcDhfZTRtM19mbnV6KilhLmRhdGFfcHRyKCksIChfX2hpcF9mcDhfZTRtM19mbnV6KiliLmRhdGFfcHRyKCksIAogICAgYXMuZGF0YV9wdHI8ZmxvYXQ+KCksIGJzLmRhdGFfcHRyPGZsb2F0PigpLCAoX19oaXBfYmZsb2F0MTYqKWMuZGF0YV9wdHIoKSwgbSwgbiwgayk7CiAgICAvL0MxMF9DVURBX0NIRUNLKGN1ZGFHZXRMYXN0RXJyb3IoKSk7Cn0KIiIiCgppbXBvcnQgb3MKb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyIKCm1vZHVsZSA9IGxvYWRfaW5saW5lKAogICAgbmFtZT0nZnA4X21tJywKICAgIGNwcF9zb3VyY2VzPVtDUFBfV1JBUFBFUl0sCiAgICBjdWRhX3NvdXJjZXM9W0NVREFfU1JDXSwKICAgIGZ1bmN0aW9ucz1bJ2ZwOF9tbSddLAogICAgdmVyYm9zZT1UcnVlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysyMCJdLAopCgoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQogICAgbW9kdWxlLmZwOF9tbShhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjKQogICAgcmV0dXJuIGMKCgo=
No newline at end of file
+ IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdAppbXBvcnQgdG9yY2gKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQppbXBvcnQgdGltZQppbXBvcnQgb3MKaW1wb3J0IHN5cwoKaWYgIlBZVE9SQ0hfUk9DTV9BUkNIIiBub3QgaW4gb3MuZW52aXJvbjoKICAgIG9zLmVudmlyb25bIlBZVE9SQ0hfUk9DTV9BUkNIIl0gPSAiZ2Z4OTQyOnhuYWNrLSIKCmtlcm5lbF9jcHAgPSByIiIiCiNpbmNsdWRlIDxoaXAvaGlwX3J1bnRpbWUuaD4KI2luY2x1ZGUgPGhpcC9oaXBfZnAxNi5oPgojaW5jbHVkZSA8aGlwL2hpcF9mcDguaD4KI2luY2x1ZGUgPHB5YmluZDExL3B5YmluZDExLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnR5cGVkZWYgX19oaXBfZnA4X2U0bTNfZm51eiBmcDg7CnVzaW5nIHZlYzRmID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDQgKiBzaXplb2YoZmxvYXQpKSkpIGZsb2F0OwoKI2RlZmluZSBXQVJQX1NJWkUgNjQKI2RlZmluZSBOX1dBUlBfWV9ERUYgNAojZGVmaW5lIE5fV0FSUF9YX0RFRiA0Ci8vIE91dHB1dCBUaWxlIGNvbmZpZwojZGVmaW5lIFRJTEVfU0laRV9ZX0RFRiAxMjgKI2RlZmluZSBUSUxFX1NJWkVfWF9ERUYgMTI4CiNkZWZpbmUgVElMRV9LX0RJTV9ERUYgMTI4CgpfX2RldmljZV9fIHZvaWQgbWF0bXVsMTZ4MTZUZXN0KGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXogKmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICpiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNGYgJmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbSwgaW50IG4pCnsKICAgIGludCB0aWQgPSB0aHJlYWRJZHgueCAlIFdBUlBfU0laRTsKICAgIGF1dG8gcGFja2VkQSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0X3QgKj4oYSArICh0aWQgJSAxNikgKiAobSApICsgKHRpZCAvIDE2KSAqIDgpWzBdOwogICAgYXV0byBwYWNrZWRCID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50NjRfdCAqPihiICsgKHRpZCAlIDE2KSAqIChuICkgKyAodGlkIC8gMTYpICogOClbMF07CiAgICBjID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KHBhY2tlZEEsIHBhY2tlZEIsIGMsIDAsIDAsIDApOwp9CgoKdGVtcGxhdGU8Ym9vbCBib3VuZENoZWNrPgpfX2dsb2JhbF9fIHZvaWQgX19sYXVuY2hfYm91bmRzX18oTl9XQVJQX1hfREVGICpOX1dBUlBfWV9ERUYgKldBUlBfU0laRSkgY3VzdG9tX2tlcm5lbChjb25zdCBmcDggKmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZwOCAqYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKmFzLCBjb25zdCBmbG9hdCAqYnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faGlwX2JmbG9hdDE2ICpjLCBpbnQgTSwgaW50IE4sIGludCBLKQp7CiAgICBpbnQgdGlkID0gdGhyZWFkSWR4Lng7CiAgICBpbnQgbGFuZUlkID0gdGlkICUgV0FSUF9TSVpFOwogICAgZmxvYXQgcmVzdWx0ID0gMDsKCiAgICBjb25zdGV4cHIgaW50IFRJTEVfU0laRV9ZID0gVElMRV9TSVpFX1lfREVGOwogICAgY29uc3RleHByIGludCBUSUxFX1NJWkVfWCA9IFRJTEVfU0laRV9YX0RFRjsKICAgIGNvbnN0ZXhwciBpbnQgS19ESU0gPSBUSUxFX0tfRElNX0RFRjsKICAgIGNvbnN0ZXhwciBpbnQgTkJXQVJQU19ZID0gTl9XQVJQX1lfREVGOyAvLyA0CiAgICBjb25zdGV4cHIgaW50IE5CV0FSUFNfWCA9IE5fV0FSUF9YX0RFRjsgLy8gMgogICAgLy8gaW50cmluc2ljIGNvbmZpZwogICAgY29uc3RleHByIGludCBNQVRNVUxfRElNX0sgPSAzMjsKICAgIGNvbnN0ZXhwciBpbnQgTUFUTVVMX0RJTV9OTSA9IDE2OwogICAgY29uc3RleHByIGludCBCTE9DS19ESU0gPSBOQldBUlBTX1ggKiBOQldBUlBTX1kgKiBXQVJQX1NJWkU7IC8vIDUxMgoKICAgIGludCBTTiA9IChOICsgMTI4IC0gMSkgLyAxMjg7CgogICAgaW50IHdhcnBJZCA9IHRocmVhZElkeC54IC8gV0FSUF9TSVpFOwogICAgaW50IHdhcnBJZHggPSB3YXJwSWQgLyBOQldBUlBTX1k7IC8vIDAgLSA+IDMKICAgIGludCB3YXJwSWR5ID0gd2FycElkICUgTkJXQVJQU19ZOwoKICAgIGNvbnN0ZXhwciBpbnQgS19ESU1fUEFEID0gS19ESU0gKyA4OwoKICAgIF9fc2hhcmVkX18gZnA4IHNfYVtUSUxFX1NJWkVfWF1bS19ESU1fUEFEXTsKICAgIF9fc2hhcmVkX18gZnA4IHNfYltUSUxFX1NJWkVfWV1bS19ESU1fUEFEXTsKICAgIC8vX19zaGFyZWRfXyBmcDggc19iW0tfRElNXVtUSUxFX1NJWkVfWSs4XTsKICAgIAogICAgY29uc3RleHByIGludCBXQVJQX1RJTEVfU0laRV9ZID0gVElMRV9TSVpFX1kgLyBOQldBUlBTX1kgLyBNQVRNVUxfRElNX05NOyAvLyAyCiAgICBjb25zdGV4cHIgaW50IFdBUlBfVElMRV9TSVpFX1ggPSBUSUxFX1NJWkVfWCAvIE5CV0FSUFNfWCAvIE1BVE1VTF9ESU1fTk07IC8vIDQKICAgIHZlYzRmIGNfc1tXQVJQX1RJTEVfU0laRV9YXVtXQVJQX1RJTEVfU0laRV9ZXSA9IHswfTsKCiAgIC8vICNwcmFnbWEgdW5yb2xsIDEKICAgIGZvciAoaW50IGtJZCA9IDA7IGtJZCA8IEs7IGtJZCArPSBLX0RJTSkKICAgIHsKICAgICAgICBhdXRvIHN0YXJ0ID0gIHdhbGxfY2xvY2s2NCgpOwogICAgICAgIC8vIG5iIHJvd3MgcmVhZCBwZXIgYmxvY2sKICAgICAgICBpbnQgbmJSb3dzWSA9IEJMT0NLX0RJTSAvIFRJTEVfU0laRV9ZOyAvLyA0CiAgICAgICAgLy8gQgogICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgS19ESU07IHIgKz0gbmJSb3dzWSkgLy8xNiBsb2FkcwogICAgICAgIHsKICAgICAgICB1aW50MzJfdCByb3dfb2Zmc2V0ID0ga0lkOwogICAgICAgICAgICB1aW50MzJfdCBjb2xfb2Zmc2V0ID0gVElMRV9TSVpFX1kgKiBibG9ja0lkeC55OwoKICAgICAgICAgICAgdWludDMyX3Qgcm93ID0gciArICh0aWQgLyBUSUxFX1NJWkVfWSk7CiAgICAgICAgICAgIHVpbnQzMl90IGNvbCA9ICh0aWQgJSBUSUxFX1NJWkVfWSk7CgogICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IChyb3dfb2Zmc2V0ICsgcm93KSAqIE4gKyAoY29sX29mZnNldCArIGNvbCk7CiAgICAgICAgICAgIGJvb2wgYl9jaGVjayA9IHRydWU7CiAgICAgICAgICAgIGlmIGNvbnN0ZXhwcihib3VuZENoZWNrKXsKICAgICAgICAgICAgICBiX2NoZWNrID0gKGNvbCA8IE4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChiX2NoZWNrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvL3NfYltyb3ddW2NvbF0gPSBiW2luZGV4XTsKICAgICAgICAgICAgICAgIHNfYltjb2xdW3Jvd10gPSBiW2luZGV4XTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbnQgbmJSb3dzWCA9IEJMT0NLX0RJTSAvIFRJTEVfU0laRV9YOyAvLyA0CiAgICAgICAgLy8gQQogICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgS19ESU07IHIgKz0gbmJSb3dzWCkKICAgICAgICB7CiAgICAgICAgICAgIHVpbnQzMl90IHJvd19vZmZzZXQgPSBrSWQ7CiAgICAgICAgICAgIHVpbnQzMl90IGNvbF9vZmZzZXQgPSBUSUxFX1NJWkVfWCAqIGJsb2NrSWR4Lng7IC8vIGNvbHVtbiBtYWpvcgoKICAgICAgICAgICAgdWludDMyX3Qgcm93ID0gciArICh0aWQgLyBUSUxFX1NJWkVfWCk7CiAgICAgICAgICAgIHVpbnQzMl90IGNvbCA9ICh0aWQgJSBUSUxFX1NJWkVfWCk7CgogICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IChyb3dfb2Zmc2V0ICsgcm93KSAqIE0gKyAoY29sX29mZnNldCArIGNvbCk7CiAgICAgICAgICAgIGJvb2wgYl9jaGVjayA9IHRydWU7CiAgICAgICAgICAgIGlmIGNvbnN0ZXhwcihib3VuZENoZWNrKXsKICAgICAgICAgICAgICBiX2NoZWNrID0gKGNvbCA8IE0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChiX2NoZWNrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvL3NfYVtyb3ddW2NvbF0gPSBhW2luZGV4XTsKICAgICAgICAgICAgICAgIHNfYVtjb2xdW3Jvd10gPSBhW2luZGV4XTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgCiAgICAgICAgX19zeW5jdGhyZWFkcygpOwoKICAgICAgIAogICAgICAgIHZlYzRmIGNfdG1wW1dBUlBfVElMRV9TSVpFX1hdW1dBUlBfVElMRV9TSVpFX1ldID0gezB9OwogICAgICAgICNwcmFnbWEgdW5yb2xsCgogICAgICAgIGZvciAoaW50IHRfd0lkeCA9IDA7IHRfd0lkeCA8IFdBUlBfVElMRV9TSVpFX1g7IHRfd0lkeCsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgdF93SWR5ID0gMDsgdF93SWR5IDwgV0FSUF9USUxFX1NJWkVfWTsgdF93SWR5KyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBpbnQgc3RlcFggPSBUSUxFX1NJWkVfWCAvIFdBUlBfVElMRV9TSVpFX1g7CiAgICAgICAgICAgICAgICBjb25zdGV4cHIgaW50IHN0ZXBZID0gVElMRV9TSVpFX1kgLyBXQVJQX1RJTEVfU0laRV9ZOyAvLzEyOC8yPTY0CgogICAgICAgICAgICAgICAgdmVjNGYgY190bXAgPSB7MC4wZiwgMC4wZiwgMC4wZiwgMC4wZn07CgogICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBLX0RJTTsgays9TUFUTVVMX0RJTV9LKSAvLyBNQVRNVUxfRElNX0sgbXVzdCBiZSBhIG11bHRpcGxlIG9mIEtfRElNCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaW50IGFfY29sID0gKHRfd0lkeCAqIHN0ZXBYKSArIHdhcnBJZHggKiBNQVRNVUxfRElNX05NOwogICAgICAgICAgICAgICAgICAgIGludCBiX2NvbCA9ICh0X3dJZHkgKiBzdGVwWSkgKyB3YXJwSWR5ICogTUFUTVVMX0RJTV9OTTsKICAgICAgICAgICAgICAgICAgICBtYXRtdWwxNngxNlRlc3QoJnNfYVthX2NvbF1ba10sICZzX2JbYl9jb2xdW2tdLCBjX3RtcCwgS19ESU1fUEFELCBLX0RJTV9QQUQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGludCBhX3JvdyA9ICh0X3dJZHggKiBzdGVwWCkgKyB3YXJwSWR4ICogTUFUTVVMX0RJTV9OTTsgCiAgICAgICAgICAgICAgICAvLyBBcHBseSBzY2FsaW5nCiAgICAgICAgICAgICAgICBpbnQgYXNfY29sID0ga0lkIC8gMTI4OwogICAgICAgICAgICAgICAgaW50IGFzX3JvdyA9IGFfcm93ICsgYmxvY2tJZHgueCAqIFRJTEVfU0laRV9YOwogICAgICAgICAgICAgICAgaW50IGJzX2NvbCA9IGJsb2NrSWR4Lnk7CiAgICAgICAgICAgICAgICBpbnQgYnNfcm93ID0ga0lkIC8gMTI4OwogICAgICAgICAgICAgICAgZmxvYXQgYnNfdmFsID0gYnNbYnNfcm93ICogU04gKyBic19jb2xdOyAvLyByb3cgbWFqb3Igc2FtZSBhcyBCdCA/CiAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpbnQgcm93ID0gYXNfcm93ICsgaSArIChsYW5lSWQgLyAxNikgKiA0OwogICAgICAgICAgICAgICAgICAgIGZsb2F0IGFzX3ZhbCA9IGFzW2FzX2NvbCAqIE0gKyByb3ddOwogICAgICAgICAgICAgICAgICAgIGNfc1t0X3dJZHhdW3Rfd0lkeV1baV0gKz0gY190bXBbaV0gKiBhc192YWwgKiBic192YWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgCiAgICAgICAgIF9fc3luY3RocmVhZHMoKTsKCiAgICAgICAgCiAgICB9CiAgICBmb3IgKGludCB0X3dJZHggPSAwOyB0X3dJZHggPCBXQVJQX1RJTEVfU0laRV9YOyB0X3dJZHgrKykKICAgIHsKICAgICAgICBmb3IgKGludCB0X3dJZHkgPSAwOyB0X3dJZHkgPCBXQVJQX1RJTEVfU0laRV9ZOyB0X3dJZHkrKykKICAgICAgICB7CiAgICAgICAgICAgIC8vIG9mZnNldCBwb2ludGluZyB0byB0aGUgYWNjdW11bGF0ZWQgMTZ4MTYgYmxvY2sKICAgICAgICAgICAgaW50IGNvbF9vZmZzZXQgPSBibG9ja0lkeC55ICogVElMRV9TSVpFX1kgKyAgICAgICAgICAgICAgICAgLy8gVElMRSBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2FycElkeSAqIE1BVE1VTF9ESU1fTk0pICsgICAgICAgICAgICAgICAgLy8gV2FycCBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0X3dJZHkgKiAoVElMRV9TSVpFX1kgLyBXQVJQX1RJTEVfU0laRV9ZKTsgICAvLyBXYXJwIHRpbGUgb2Zmc2V0CgogICAgICAgICAgICBpbnQgcm93X29mZnNldCA9IGJsb2NrSWR4LnggKiBUSUxFX1NJWkVfWCArICAgICAgICAgICAgICAgICAvLyBUSUxFIG9mZnNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3YXJwSWR4ICogTUFUTVVMX0RJTV9OTSkgKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXYXJwIG9mZnNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRfd0lkeCAqIChUSUxFX1NJWkVfWCAvIFdBUlBfVElMRV9TSVpFX1gpOyAvLyBXYXJwIHRpbGUgb2Zmc2V0CgogICAgICAgICAgICBhdXRvIHJlcyA9IGNfc1t0X3dJZHhdW3Rfd0lkeV07CiAgICAgICAgICAgIGJvb2wgYl9jaGVjayA9IHRydWU7CiAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoYm91bmRDaGVjayl7CiAgICAgICAgICAgICAgYl9jaGVjayA9IChyb3dfb2Zmc2V0KSA8IE0gJiYgKGNvbF9vZmZzZXQpIDwgTjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYl9jaGVjayl7CiAgICAgICAgICAgICAgLy8gQyBpcyBzdG9yZWQgb24gNCBWR1BScwogICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaW50IGNvbCA9IGxhbmVJZCAlIDE2OwogICAgICAgICAgICAgICAgICBpbnQgcm93ID0gaSArIChsYW5lSWQgLyAxNikgKiA0OwogICAgICAgICAgICAgICAgICAvL2lmICgocm93X29mZnNldCArIHJvdykgPCBNICYmIChjb2xfb2Zmc2V0ICsgY29sKSA8IE4pCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNbKHJvd19vZmZzZXQgKyByb3cpICogTiArIChjb2xfb2Zmc2V0ICsgY29sKV0gPSAoX19oaXBfYmZsb2F0MTYpKHJlc1tpXSk7CiAgICAgICAgICAgICAgICAgICAgICAvL2NbKHJvd19vZmZzZXQgKyByb3cpICogTiArIChjb2xfb2Zmc2V0ICsgY29sKV0gPSAoX19oaXBfYmZsb2F0MTYpKDY0KnRfd0lkeSsxNip3YXJwSWR5KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCiNkZWZpbmUgSElQX0NIRUNLKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgaGlwRXJyb3JfdCBlcnJvciA9IGNvbmRpdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgaWYoZXJyb3IgIT0gaGlwU3VjY2VzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiRXJyb3IgIiA8PCBoaXBHZXRFcnJvck5hbWUoZXJyb3IpIDw8ICcoJyA8PCBlcnJvciA8PCAnKScgPDwgIjogIiAgICBACiAgICAgICAgICAgICAgICAgICAgICA8PCBoaXBHZXRFcnJvclN0cmluZyhlcnJvcikgPDwgIiBpbiAiIDw8IF9fZnVuY19fIDw8ICIgYXQgIiA8PCBfX0ZJTEVfXyBACiAgICAgICAgICAgICAgICAgICAgICA8PCAnOicgPDwgX19MSU5FX18gPDwgJ0BuJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgICAgIGV4aXQoZXJyb3IpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBACiAgICB3aGlsZShmYWxzZSkKCnZvaWQgcnVuKAogICAgdWludHB0cl90IGFfcHRyLAogICAgdWludHB0cl90IGJfcHRyLAogICAgdWludHB0cl90IGFzX3B0ciwKICAgIHVpbnRwdHJfdCBic19wdHIsCiAgICB1aW50cHRyX3QgY19wdHIsCiAgICBpbnQgTSwKICAgIGludCBOLAogICAgaW50IEsKKSB7CiAgICBjb25zdCBhdXRvKiBkX0EgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZwOCo+KGFfcHRyKTsKICAgIGNvbnN0IGF1dG8qIGRfQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZnA4Kj4oYl9wdHIpOwogICAgY29uc3QgYXV0byogZF9BcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihhc19wdHIpOwogICAgY29uc3QgYXV0byogZF9CcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihic19wdHIpOwogICAgYXV0byogZF9DID0gcmVpbnRlcnByZXRfY2FzdDxfX2hpcF9iZmxvYXQxNio+KGNfcHRyKTsKCiAgICBkaW0zIHRocmVhZHNQZXJCbG9jayhOX1dBUlBfWF9ERUYgKiBOX1dBUlBfWV9ERUYgKiBXQVJQX1NJWkUpOwogICAgZGltMyBibG9ja3NQZXJHcmlkKChNICsgVElMRV9TSVpFX1hfREVGIC0gMSkgLyBUSUxFX1NJWkVfWF9ERUYsCiAgICAgICAgICAgICAgICAgICAgIChOICsgVElMRV9TSVpFX1lfREVGIC0gMSkgLyBUSUxFX1NJWkVfWV9ERUYpOwogICAgCiAgICBpZiAoTSUxMjg9PTAgJiYgTiUxMjg9PTApewogICAgICAgIGhpcExhdW5jaEtlcm5lbEdHTCgoY3VzdG9tX2tlcm5lbDxmYWxzZT4pLCBibG9ja3NQZXJHcmlkLCB0aHJlYWRzUGVyQmxvY2ssIDAsIDAsCiAgICAgICAgICAgICAgICAgICAgIGRfQSwgZF9CLCBkX0FzLCBkX0JzLCBkX0MsIE0sIE4sIEspOwogICAgfWVsc2V7CiAgICAgICAgaGlwTGF1bmNoS2VybmVsR0dMKChjdXN0b21fa2VybmVsPHRydWU+KSwgYmxvY2tzUGVyR3JpZCwgdGhyZWFkc1BlckJsb2NrLCAwLCAwLAogICAgICAgICAgICAgICAgICAgICBkX0EsIGRfQiwgZF9BcywgZF9CcywgZF9DLCBNLCBOLCBLKTt9CgogICAgSElQX0NIRUNLKGhpcEdldExhc3RFcnJvcigpKTsKfQoKUFlCSU5EMTFfTU9EVUxFKGZwOCwgbSkgewogIG0uZGVmKCJmcDgiLCAmcnVuLCAiSElQIGtlcm5lbCIpOwp9CiIiIgoKaGlwX21vZHVsZSA9IGxvYWRfaW5saW5lKAogICAgbmFtZT0iZnA4IiwKICAgIGNwcF9zb3VyY2VzPSIiLAogICAgY3VkYV9zb3VyY2VzPWtlcm5lbF9jcHAucmVwbGFjZSgnQCcsIGNocig5MikpLAogICAgd2l0aF9jdWRhPVRydWUsCiAgICB2ZXJib3NlPUZhbHNlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItZyAtLXNhdmUtdGVtcHMgLVJwYXNzLWFuYWx5c2lzPWtlcm5lbC1yZXNvdXJjZS11c2FnZSAtc3RkPWMrKzIwIl0sCiAgICBub19pbXBsaWNpdF9oZWFkZXJzPVRydWUsCikKCmZpcnN0ID0gVHJ1ZQoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICAiIiIKICAgIFJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBibG9jay1zY2FsZSBmcDggZ2VtbQogICAgQXJnczoKICAgICAgICBkYXRhOiBUdXBsZSB0aGF0IGV4cGFuZHMgdG86CiAgICAgICAgICAgIGE6IHRvcmNoLlRlbnNvcltmbG9hdDhfZTRtM2ZudXpdIG9mIHNoYXBlIFttLCBrXSwKICAgICAgICAgICAgYjogdG9yY2guVGVuc29yW2Zsb2F0OF9lNG0zZm51el0gb2Ygc2hhcGUgW24sIGtdLAogICAgICAgICAgICBhX3NjYWxlOiB0b3JjaC5UZW5zb3JbZmxvYXQzMl0gb2Ygc2hhcGUgW20sIGsgLy8gMTI4XSwKICAgICAgICAgICAgYl9zY2FsZTogdG9yY2guVGVuc29yW2Zsb2F0MzJdIG9mIHNoYXBlIFtuIC8vIDEyOCwgayAvLyAxMjhdLAogICAgICAgICAgICBjOiB0b3JjaC5UZW5zb3JbYmZsb2F0MTZdIG9mIHNoYXBlIFttLCBuXQogICAgUmV0dXJuczoKICAgICAgICBUZW5zb3IgY29udGFpbmluZyBvdXRwdXQgaW4gYmYxNgogICAgIiIiCgogICAgZ2xvYmFsIGZpcnN0CiAgICBpZiBmaXJzdDoKICAgICAgICBwcmludCgiZXhlY3V0aW5nIG9uIiwgdG9yY2guY3VkYS5nZXRfZGV2aWNlX25hbWUoKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIGZpcnN0ID0gRmFsc2UKCiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQoKICAgIG0sIG4gPSBjLnNoYXBlCiAgICBrID0gYS5zaGFwZVsxXQoKICAgIGhpcF9tb2R1bGUuZnA4KAogICAgICAgIGEuZGF0YV9wdHIoKSwKICAgICAgICBiLmRhdGFfcHRyKCksCiAgICAgICAgYV9zY2FsZS5kYXRhX3B0cigpLAogICAgICAgIGJfc2NhbGUuZGF0YV9wdHIoKSwKICAgICAgICBjLmRhdGFfcHRyKCksCiAgICAgICAgbSwKICAgICAgICBuLAogICAgICAgIGssCiAgICApCgogICAgcmV0dXJuIGMK
No newline at end of file

Best evidence level for this revision: reported

JSON