submission 23394
KernelBot user 333 · 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.
template-hip.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-fp8-mm-23394?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, 7168] · n=576 · seed=12346
AMD Instinct MI300X
125.1µs
#53 of 98
2025-05-17
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
147.6µs
#60 of 98
2025-05-17
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
157.1µs
#42 of 98
2025-05-17
Show all 18 measurements ›Showing all 18 measurements ⌄
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
210.6µs
#47 of 98
2025-05-17
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
215.7µs
#43 of 98
2025-05-17
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
222.9µs
#42 of 98
2025-05-17
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
370.5µs
#41 of 98
2025-05-17
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
927.3µs
#30 of 98
2025-05-17
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:f08faaa9c434f5c2d105a78888ca9ae51c3298471126fee4318c125b04fdd3d3
license declaredunknown
license concludedunknown
imported2026-08-15
Kernel source
template-hip.py1 lines
IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcgppbXBvcnQgdG9yY2gKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CkNQUF9XUkFQUEVSID0gIiIiCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMsIHRvcmNoOjpUZW5zb3IgYVQsIHRvcmNoOjpUZW5zb3IgYlQpOwoiIiIKCkNVREFfU1JDID0gIiIiCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2ZwOC5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9iZjE2Lmg+Cgp1c2luZyBmcDhfcmF3X3QgPSB1aW50OF90Owp1c2luZyBmcDh4OF90ID0gZnA4X3Jhd190IF9fYXR0cmlidXRlKChleHRfdmVjdG9yX3R5cGUoOCkpKTsKdXNpbmcgZnAzMngyX3QgPSBmbG9hdCBfX2F0dHJpYnV0ZSgoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7CnVzaW5nIGZwMzJ4NF90ID0gZmxvYXQgX19hdHRyaWJ1dGUoKGV4dF92ZWN0b3JfdHlwZSg0KSkpOwp1c2luZyBmcDMyeDE2X3QgPSBmbG9hdCBfX2F0dHJpYnV0ZSgoZXh0X3ZlY3Rvcl90eXBlKDE2KSkpOwoKY29uc3RleHByIGNvbnN0IGludCBCTE9DSyA9IDEyODsKCnRlbXBsYXRlIDx0eXBlbmFtZSBZLCB0eXBlbmFtZSBYPgpfX2RldmljZV9fIGNvbnN0ZXhwciBZIGJpdF9jYXN0KGNvbnN0IFggJngpCnsKICByZXR1cm4gX19idWlsdGluX2JpdF9jYXN0KFksIHgpOwp9Cl9fZ2xvYmFsX18gdm9pZCBwZXJtdXRlX2tlcm5lbChfX2hpcF9mcDhfZTRtM19mbnV6ICpvdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBtbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBrKQp7CiAgX19zaGFyZWRfXyBfX2hpcF9mcDhfZTRtM19mbnV6IHNoYnVmWzMyICogKDMyICsgMSldOwogIGNvbnN0IGludDMyX3Qgd2FycF9pZCA9IHRocmVhZElkeC55OwogIGNvbnN0IGludDMyX3QgbGFuZV9pZCA9IHRocmVhZElkeC54OwogIGNvbnN0IGludDMyX3Qga19pZCA9IGJsb2NrSWR4LnkgKiAzMjsKICBjb25zdCBpbnQzMl90IG1uX2lkID0gYmxvY2tJZHgueCAqIDMyOwoKICBjb25zdCBzaXplX3QgaW5wdXRfaWR4ID0gKGtfaWQgKyB3YXJwX2lkKSAqIG1uICsgbW5faWQgKyBsYW5lX2lkOwoKICBjb25zdCBpbnQgbGFuZV9pZF94XzMzID0gbGFuZV9pZCAqIDMzOwojcHJhZ21hIHVucm9sbAogIGZvciAoaW50IGtMb29wSWR4ID0gMDsga0xvb3BJZHggPCA0OyBrTG9vcElkeCsrKQogIHsKICAgIHNoYnVmW2xhbmVfaWRfeF8zMyArIHdhcnBfaWQgKyBrTG9vcElkeCAqIDhdID0gaW5wdXRbaW5wdXRfaWR4ICsga0xvb3BJZHggKiA4ICogbW5dOwogIH0KICBfX3N5bmN0aHJlYWRzKCk7CgogIGNvbnN0IGludDMyX3Qga2lPdXQgPSBrX2lkICsgbGFuZV9pZDsKICBpbnQgbW5JID0gd2FycF9pZDsKI3ByYWdtYSB1bnJvbGwKICBmb3IgKGludCBtbkxvb3BJZHggPSAwOyBtbkxvb3BJZHggPCA0OyArK21uTG9vcElkeCkKICB7CiAgICBvdXRwdXRba2lPdXQgKyAobW5faWQgKyBtbkkpICoga10gPSBzaGJ1ZlsobW5JKSAqIDMzICsgbGFuZV9pZF07CiAgICBtbkkgKz0gODsKICB9Cn0KX19nbG9iYWxfXyBfX2xhdW5jaF9ib3VuZHNfXygyNTYsIDIpIHZvaWQgZnA4XzEyOHgxMjhfa2VybmVsKGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXogKmEsIGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXogKmIsIGNvbnN0IGZsb2F0ICphcywgY29uc3QgZmxvYXQgKmJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2hpcF9iZmxvYXQxNiAqYywgaW50IG0sIGludCBuLCBpbnQgaykKewogIGNvbnN0IGludCBCTE9DS009MTI4OwogIGNvbnN0IGludCBCTE9DS049MTI4OwogIC8vIFlvdXIgaW1wbGVtZW50YXRpb24gaGVyZQogIGludCBieCA9IGJsb2NrSWR4Lng7CiAgaW50IGJ5ID0gYmxvY2tJZHgueTsKCiAgaW50IHRpZCA9IHRocmVhZElkeC54OwogIGludCBsYW5lX2lkID0gdGhyZWFkSWR4LnggJSA2NDsKICBpbnQgd2FycF9pZCA9IHRocmVhZElkeC54IC8gNjQ7CiAgaW50IGxhbmVfbW9kMzIgPSBsYW5lX2lkICUgMzI7CiAgaW50IGxhbmVfZGl2MzIgPSBsYW5lX2lkIC8gMzI7CiAgaW50IGxhbmVfbW9kMTYgPSBsYW5lX2lkICUgMTY7CiAgaW50IGxhbmVfZGl2MTYgPSBsYW5lX2lkIC8gMTY7CiAgaW50IGxhbmVfbW9kOCA9IGxhbmVfaWQgJSA4OwogIGludCBsYW5lX2RpdjggPSBsYW5lX2lkIC8gODsKICBpbnQgd2FycF9tb2QyID0gd2FycF9pZCAlIDI7CiAgaW50IHdhcnBfZGl2MiA9IHdhcnBfaWQgLyAyOwogIC8vIHNtZW0KICBfX3NoYXJlZF9fIGNoYXIgc21lbVsoKEJMT0NLTSArIEJMT0NLTikgKiBCTE9DSykgKiBzaXplb2YoX19oaXBfZnA4X2U0bTNfZm51eikgKyAoMSArIEJMT0NLTSkgKiBzaXplb2YoZmxvYXQpXTsKICBfX2hpcF9mcDhfZTRtM19mbnV6ICpzbWVtQSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X19oaXBfZnA4X2U0bTNfZm51eiAqPihzbWVtKTsKICBfX2hpcF9mcDhfZTRtM19mbnV6ICpzbWVtQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8X19oaXBfZnA4X2U0bTNfZm51eiAqPihzbWVtICsgQkxPQ0tNICogQkxPQ0sgKiBzaXplb2YoX19oaXBfZnA4X2U0bTNfZm51eikpOwogIGZsb2F0ICpzbWVtX3NjYWxlc19hID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPihzbWVtICsgKEJMT0NLTSArIEJMT0NLTikgKiBCTE9DSyAqIHNpemVvZihfX2hpcF9mcDhfZTRtM19mbnV6KSk7CiAgZmxvYXQgKnNtZW1fc2NhbGVzX2IgPSByZWludGVycHJldF9jYXN0PGZsb2F0ICo+KHNtZW0gKyAoKEJMT0NLTSArIEJMT0NLTikgKiBCTE9DSykgKiBzaXplb2YoX19oaXBfZnA4X2U0bTNfZm51eikgKyBCTE9DS00gKiBzaXplb2YoZmxvYXQpKTsKCgogIGludCBnZW1tX3Jvd0EgPSBieCAqIEJMT0NLTSArIHdhcnBfaWQgKiAzMiArIGxhbmVfZGl2ODsKICBpbnQgZ2VtbV9jb2wgPSBsYW5lX21vZDggKiAxNjsKICBpbnQgZ2VtbV9yb3dCID0gYnkgKiBCTE9DS04gKyB3YXJwX2lkICogMzIgKyBsYW5lX2Rpdjg7CiAgaW50IEFfbGRnX2lkeCA9IGdlbW1fcm93QSAqIGsgKyBnZW1tX2NvbDsKICBpbnQgQl9sZGdfaWR4ID0gZ2VtbV9yb3dCICogayArIGdlbW1fY29sOwogIC8vIGxkZwogIGZwMzJ4NF90IEFfbGRnX3JlZ1s0XTsKICBmcDMyeDRfdCBCX2xkZ19yZWdbNF07CiAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCiAgewogICAgQV9sZGdfcmVnW2ldID0gKihmcDMyeDRfdCAqKSgmYVtBX2xkZ19pZHggKyBpICogOCAqIGtdKTsKICAgIEJfbGRnX3JlZ1tpXSA9ICooZnAzMng0X3QgKikoJmJbQl9sZGdfaWR4ICsgaSAqIDggKiBrXSk7CiAgfQogIEFfbGRnX2lkeCArPSBCTE9DSzsKICBCX2xkZ19pZHggKz0gQkxPQ0s7CgogIGludCBBX3N0c19pZHggPSAod2FycF9pZCAqIDMyICsgbGFuZV9kaXY4KSAqIDEyOCArIChsYW5lX21vZDggXiBsYW5lX2RpdjgpICogMTY7CiAgaW50IEJfc3RzX2lkeCA9ICh3YXJwX2lkICogMzIgKyBsYW5lX2RpdjgpICogMTI4ICsgKGxhbmVfbW9kOCBeIGxhbmVfZGl2OCkgKiAxNjsKICAKICBpbnQgbGRzX3JvdyA9IGxhbmVfbW9kMzI7CgogIGludCBBX2xkc19pZHhbNF07CiAgaW50IEJfbGRzX2lkeFs0XTsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspewogICAgaW50IGxkc19jb2wgPSAoKGxhbmVfZGl2MzIgKyAyICogaSkgJSA4KSBeIChsZHNfcm93ICUgOCk7CiAgICBBX2xkc19pZHhbaV0gPSAod2FycF9kaXYyICogNjQgKiAxMjgpICsgbGRzX3JvdyAqIDEyOCArIGxkc19jb2wgKiAxNjsKICAgIEJfbGRzX2lkeFtpXSA9ICh3YXJwX21vZDIgKiA2NCAqIDEyOCkgKyBsZHNfcm93ICogMTI4ICsgbGRzX2NvbCAqIDE2OwogIH0KCiAgaW50IHNuID0gKG4gKyBCTE9DSyAtIDEpIC8gQkxPQ0s7CgogIGFzICs9IEJMT0NLTSAqIGJsb2NrSWR4Lng7CiAgYnMgKz0gQkxPQ0tOICogYmxvY2tJZHgueSAvIEJMT0NLOwogIGMgKz0gQkxPQ0tOICogYmxvY2tJZHgueSArIEJMT0NLTSAqIGJsb2NrSWR4LnggKiBuOwoKICBmcDMyeDE2X3QgYWNjWzJdWzJdOwogIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQogIHsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKQogICAgewogICAgICBhY2NbaV1bal0gPSB7MC4wZn07CiAgICB9CiAgfQoKICBfX2hpcF9mcDhfZTRtM19mbnV6IEFfbGRzX3JlZ1syXVsyXVs4XTsKICBfX2hpcF9mcDhfZTRtM19mbnV6IEJfbGRzX3JlZ1syXVsyXVs4XTsKICBmbG9hdCBBX3NjYWxlX2xkc19yZWdbMl1bMTZdOwogIGZsb2F0IEJfc2NhbGVfbGRzX3JlZzsKCiAgLy8gc3RzCiAgKihmcDMyeDRfdCAqKSgmc21lbUFbQV9zdHNfaWR4ICsgMCAqIDggKiAxMjhdKSA9IEFfbGRnX3JlZ1swXTsKICAqKGZwMzJ4NF90ICopKCZzbWVtQltCX3N0c19pZHggKyAwICogOCAqIDEyOF0pID0gQl9sZGdfcmVnWzBdOwogICooZnAzMng0X3QgKikoJnNtZW1BW0Ffc3RzX2lkeCArIDEgKiA4ICogMTI4XSkgPSBBX2xkZ19yZWdbMV07CiAgKihmcDMyeDRfdCAqKSgmc21lbUJbQl9zdHNfaWR4ICsgMSAqIDggKiAxMjhdKSA9IEJfbGRnX3JlZ1sxXTsKICAqKGZwMzJ4NF90ICopKCZzbWVtQVtBX3N0c19pZHggKyAyICogOCAqIDEyOF0pID0gQV9sZGdfcmVnWzJdOwogICooZnAzMng0X3QgKikoJnNtZW1CW0Jfc3RzX2lkeCArIDIgKiA4ICogMTI4XSkgPSBCX2xkZ19yZWdbMl07CiAgKihmcDMyeDRfdCAqKSgmc21lbUFbQV9zdHNfaWR4ICsgMyAqIDggKiAxMjhdKSA9IEFfbGRnX3JlZ1szXTsKICAqKGZwMzJ4NF90ICopKCZzbWVtQltCX3N0c19pZHggKyAzICogOCAqIDEyOF0pID0gQl9sZGdfcmVnWzNdOwogIGlmICh0aWQgPCBCTE9DS00pCiAgewogICAgc21lbV9zY2FsZXNfYVt0aWRdID0gYXNbdGlkXTsKICB9CiAgaWYgKHRpZCA9PSAwKQogIHsKICAgIHNtZW1fc2NhbGVzX2JbMF0gPSBic1swXTsKICB9CiAgYXMgKz0gbTsKICBicyArPSBzbjsKICBmb3IgKGludCBpdGlsZSA9IEJMT0NLOyBpdGlsZSA8IGs7IGl0aWxlICs9IEJMT0NLKQogIHsKCiAgICBmcDMyeDE2X3QgYmxvY2tfYWNjWzJdWzJdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspCiAgICB7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKQogICAgICB7CiAgICAgICAgYmxvY2tfYWNjW2ldW2pdID0gezAuMGZ9OwogICAgICB9CiAgICB9CiAgICAvLyBsZGcKICAgIEFfbGRnX3JlZ1swXSA9ICooZnAzMng0X3QgKikoJmFbQV9sZGdfaWR4ICsgMCAqIDggKiBrXSk7CiAgICBCX2xkZ19yZWdbMF0gPSAqKGZwMzJ4NF90ICopKCZiW0JfbGRnX2lkeCArIDAgKiA4ICoga10pOwogICAgQV9sZGdfcmVnWzFdID0gKihmcDMyeDRfdCAqKSgmYVtBX2xkZ19pZHggKyAxICogOCAqIGtdKTsKICAgIEJfbGRnX3JlZ1sxXSA9ICooZnAzMng0X3QgKikoJmJbQl9sZGdfaWR4ICsgMSAqIDggKiBrXSk7CiAgICBBX2xkZ19yZWdbMl0gPSAqKGZwMzJ4NF90ICopKCZhW0FfbGRnX2lkeCArIDIgKiA4ICoga10pOwogICAgQl9sZGdfcmVnWzJdID0gKihmcDMyeDRfdCAqKSgmYltCX2xkZ19pZHggKyAyICogOCAqIGtdKTsKICAgIEFfbGRnX3JlZ1szXSA9ICooZnAzMng0X3QgKikoJmFbQV9sZGdfaWR4ICsgMyAqIDggKiBrXSk7CiAgICBCX2xkZ19yZWdbM10gPSAqKGZwMzJ4NF90ICopKCZiW0JfbGRnX2lkeCArIDMgKiA4ICoga10pOwogICAgQV9sZGdfaWR4ICs9IEJMT0NLOwogICAgQl9sZGdfaWR4ICs9IEJMT0NLOwoKICAgIF9fc3luY3RocmVhZHMoKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykKICAgIHsKICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCAxNjsgaysrKQogICAgICB7CiAgICAgICAgQV9zY2FsZV9sZHNfcmVnW2ldW2tdID0gc21lbV9zY2FsZXNfYVsoayAlIDQpICsgbGFuZV9kaXYzMiAqIDQgKyAoayAvIDQpICogOCArIHdhcnBfZGl2MiAqIDY0ICsgMzIgKiBpXTsKICAgICAgfQogICAgfQogICAgQl9zY2FsZV9sZHNfcmVnID0gc21lbV9zY2FsZXNfYlswXTsKCiAgICBmb3IgKGludCBrX3N0ZXAgPSAwOyBrX3N0ZXAgPCA0OyBrX3N0ZXArKykKICAgIHsKICAgICAgLy8gbGRzCiAgICAgICooZnAzMng0X3QgKikoJkFfbGRzX3JlZ1swXSkgPSAqKGZwMzJ4NF90ICopKCZzbWVtQVtBX2xkc19pZHhba19zdGVwXSArIDAgKiAzMiAqIDEyOF0pOwogICAgICAqKGZwMzJ4NF90ICopKCZCX2xkc19yZWdbMF0pID0gKihmcDMyeDRfdCAqKSgmc21lbUJbQl9sZHNfaWR4W2tfc3RlcF0gKyAwICogMzIgKiAxMjhdKTsKICAgICAgKihmcDMyeDRfdCAqKSgmQV9sZHNfcmVnWzFdKSA9ICooZnAzMng0X3QgKikoJnNtZW1BW0FfbGRzX2lkeFtrX3N0ZXBdICsgMSAqIDMyICogMTI4XSk7CiAgICAgICooZnAzMng0X3QgKikoJkJfbGRzX3JlZ1sxXSkgPSAqKGZwMzJ4NF90ICopKCZzbWVtQltCX2xkc19pZHhba19zdGVwXSArIDEgKiAzMiAqIDEyOF0pOwoKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspCiAgICAgIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7IGorKykKICAgICAgICB7CiAgICAgICAgICBibG9ja19hY2NbaV1bal0gPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzMyeDMyeDE2X2ZwOF9mcDgoCiAgICAgICAgICAgICAgYml0X2Nhc3Q8bG9uZz4oQV9sZHNfcmVnW2ldWzBdKSwgYml0X2Nhc3Q8bG9uZz4oQl9sZHNfcmVnW2pdWzBdKSwgYmxvY2tfYWNjW2ldW2pdLCAwLCAwLCAwKTsKICAgICAgICAgIGJsb2NrX2FjY1tpXVtqXSA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMzJ4MzJ4MTZfZnA4X2ZwOCgKICAgICAgICAgICAgICBiaXRfY2FzdDxsb25nPihBX2xkc19yZWdbaV1bMV0pLCBiaXRfY2FzdDxsb25nPihCX2xkc19yZWdbal1bMV0pLCBibG9ja19hY2NbaV1bal0sIDAsIDAsIDApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpCiAgICB7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgKytqKQogICAgICB7CiAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCAxNjsgKytrKQogICAgICAgIHsKICAgICAgICAgIGFjY1tpXVtqXVtrXSArPSBibG9ja19hY2NbaV1bal1ba10gKiBBX3NjYWxlX2xkc19yZWdbaV1ba10gKiBCX3NjYWxlX2xkc19yZWc7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgX19zeW5jdGhyZWFkcygpOwoKICAgIC8vIHN0cwogICAgKihmcDMyeDRfdCAqKSgmc21lbUFbQV9zdHNfaWR4ICsgMCAqIDggKiAxMjhdKSA9IEFfbGRnX3JlZ1swXTsKICAgICooZnAzMng0X3QgKikoJnNtZW1CW0Jfc3RzX2lkeCArIDAgKiA4ICogMTI4XSkgPSBCX2xkZ19yZWdbMF07CiAgICAqKGZwMzJ4NF90ICopKCZzbWVtQVtBX3N0c19pZHggKyAxICogOCAqIDEyOF0pID0gQV9sZGdfcmVnWzFdOwogICAgKihmcDMyeDRfdCAqKSgmc21lbUJbQl9zdHNfaWR4ICsgMSAqIDggKiAxMjhdKSA9IEJfbGRnX3JlZ1sxXTsKICAgICooZnAzMng0X3QgKikoJnNtZW1BW0Ffc3RzX2lkeCArIDIgKiA4ICogMTI4XSkgPSBBX2xkZ19yZWdbMl07CiAgICAqKGZwMzJ4NF90ICopKCZzbWVtQltCX3N0c19pZHggKyAyICogOCAqIDEyOF0pID0gQl9sZGdfcmVnWzJdOwogICAgKihmcDMyeDRfdCAqKSgmc21lbUFbQV9zdHNfaWR4ICsgMyAqIDggKiAxMjhdKSA9IEFfbGRnX3JlZ1szXTsKICAgICooZnAzMng0X3QgKikoJnNtZW1CW0Jfc3RzX2lkeCArIDMgKiA4ICogMTI4XSkgPSBCX2xkZ19yZWdbM107CiAgICBpZiAodGlkIDwgQkxPQ0tNKQogICAgewogICAgICBzbWVtX3NjYWxlc19hW3RpZF0gPSBhc1t0aWRdOwogICAgfQogICAgaWYgKHRpZCA9PSAwKQogICAgewogICAgICBzbWVtX3NjYWxlc19iWzBdID0gYnNbMF07CiAgICB9CiAgICBhcyArPSBtOwogICAgYnMgKz0gc247CiAgfQoKICBmcDMyeDE2X3QgYmxvY2tfYWNjWzJdWzJdOwogIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQogIHsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKQogICAgewogICAgICBibG9ja19hY2NbaV1bal0gPSB7MC4wZn07CiAgICB9CiAgfQogIF9fc3luY3RocmVhZHMoKTsKICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykKICB7CiAgICBmb3IgKGludCBrID0gMDsgayA8IDE2OyBrKyspCiAgICB7CiAgICAgIEFfc2NhbGVfbGRzX3JlZ1tpXVtrXSA9IHNtZW1fc2NhbGVzX2FbKGsgJSA0KSArIGxhbmVfZGl2MzIgKiA0ICsgKGsgLyA0KSAqIDggKyB3YXJwX2RpdjIgKiA2NCArIDMyICogaV07CiAgICB9CiAgfQogIEJfc2NhbGVfbGRzX3JlZyA9IHNtZW1fc2NhbGVzX2JbMF07CgogIGZvciAoaW50IGtfc3RlcCA9IDA7IGtfc3RlcCA8IDQ7IGtfc3RlcCsrKQogIHsKICAgIC8vIGxkcwogICAgKihmcDMyeDRfdCAqKSgmQV9sZHNfcmVnWzBdKSA9ICooZnAzMng0X3QgKikoJnNtZW1BW0FfbGRzX2lkeFtrX3N0ZXBdICsgMCAqIDMyICogMTI4XSk7CiAgICAqKGZwMzJ4NF90ICopKCZCX2xkc19yZWdbMF0pID0gKihmcDMyeDRfdCAqKSgmc21lbUJbQl9sZHNfaWR4W2tfc3RlcF0gKyAwICogMzIgKiAxMjhdKTsKICAgICooZnAzMng0X3QgKikoJkFfbGRzX3JlZ1sxXSkgPSAqKGZwMzJ4NF90ICopKCZzbWVtQVtBX2xkc19pZHhba19zdGVwXSArIDEgKiAzMiAqIDEyOF0pOwogICAgKihmcDMyeDRfdCAqKSgmQl9sZHNfcmVnWzFdKSA9ICooZnAzMng0X3QgKikoJnNtZW1CW0JfbGRzX2lkeFtrX3N0ZXBdICsgMSAqIDMyICogMTI4XSk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspCiAgICB7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKQogICAgICB7CiAgICAgICAgYmxvY2tfYWNjW2ldW2pdID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8zMngzMngxNl9mcDhfZnA4KAogICAgICAgICAgICBiaXRfY2FzdDxsb25nPihBX2xkc19yZWdbaV1bMF0pLCBiaXRfY2FzdDxsb25nPihCX2xkc19yZWdbal1bMF0pLCBibG9ja19hY2NbaV1bal0sIDAsIDAsIDApOwogICAgICAgIGJsb2NrX2FjY1tpXVtqXSA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMzJ4MzJ4MTZfZnA4X2ZwOCgKICAgICAgICAgICAgYml0X2Nhc3Q8bG9uZz4oQV9sZHNfcmVnW2ldWzFdKSwgYml0X2Nhc3Q8bG9uZz4oQl9sZHNfcmVnW2pdWzFdKSwgYmxvY2tfYWNjW2ldW2pdLCAwLCAwLCAwKTsKICAgICAgfQogICAgfQogIH0KICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkKICB7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7ICsraikKICAgIHsKICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCAxNjsgKytrKQogICAgICB7CiAgICAgICAgYWNjW2ldW2pdW2tdICs9IGJsb2NrX2FjY1tpXVtqXVtrXSAqIEFfc2NhbGVfbGRzX3JlZ1tpXVtrXSAqIEJfc2NhbGVfbGRzX3JlZzsKICAgICAgfQogICAgfQogIH0KCiAgLy8gZmluYWxseSwgd3JpdGUgdGhlIHJlc3VsdCBhcyBiZjE2CiAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpCiAgewogICAgZm9yIChpbnQgaiA9IDA7IGogPCAyOyArK2opCiAgICB7CiAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgMTY7ICsraykKICAgICAgewogICAgICAgIGludCBDX3N0Z19pZHggPSAobGFuZV9tb2QzMiArIHdhcnBfbW9kMiAqIDY0ICsgMzIgKiBqKSArICgoayAlIDQpICsgbGFuZV9kaXYzMiAqIDQgKyAoayAvIDQpICogOCArIHdhcnBfZGl2MiAqIDY0ICsgMzIgKiBpKSAqIG47CiAgICAgICAgY1tDX3N0Z19pZHhdID0gKF9faGlwX2JmbG9hdDE2KWFjY1tpXVtqXVtrXTsKICAgICAgfQogICAgfQogIH0KfQoKX19nbG9iYWxfXyBfX2xhdW5jaF9ib3VuZHNfXygyNTYsIDIpIHZvaWQgZnA4XzEyOHg2NF9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqYSwgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqYiwgY29uc3QgZmxvYXQgKmFzLCBjb25zdCBmbG9hdCAqYnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faGlwX2JmbG9hdDE2ICpjLCBpbnQgbSwgaW50IG4sIGludCBrKQp7CiAgY29uc3QgaW50IEJMT0NLTT0xMjg7CiAgY29uc3QgaW50IEJMT0NLTj02NDsKLy8gWW91ciBpbXBsZW1lbnRhdGlvbiBoZXJlCiAgaW50IGJ4ID0gYmxvY2tJZHgueDsKICBpbnQgYnkgPSBibG9ja0lkeC55OwoKICBpbnQgdGlkID0gdGhyZWFkSWR4Lng7CiAgaW50IGxhbmVfaWQgPSB0aHJlYWRJZHgueCAlIDY0OwogIGludCB3YXJwX2lkID0gdGhyZWFkSWR4LnggLyA2NDsKICBpbnQgbGFuZV9tb2QzMiA9IGxhbmVfaWQgJSAzMjsKICBpbnQgbGFuZV9kaXYzMiA9IGxhbmVfaWQgLyAzMjsKICBpbnQgbGFuZV9tb2QxNiA9IGxhbmVfaWQgJSAxNjsKICBpbnQgbGFuZV9kaXYxNiA9IGxhbmVfaWQgLyAxNjsKICBpbnQgbGFuZV9tb2Q4ID0gbGFuZV9pZCAlIDg7CiAgaW50IGxhbmVfZGl2OCA9IGxhbmVfaWQgLyA4OwogIGludCB3YXJwX21vZDIgPSB3YXJwX2lkICUgMjsKICBpbnQgd2FycF9kaXYyID0gd2FycF9pZCAvIDI7CgogIGludCBnZW1tX3Jvd0EgPSBieCAqIEJMT0NLTSArIHdhcnBfaWQgKiAzMiArIGxhbmVfZGl2ODsKICBpbnQgZ2VtbV9jb2wgPSBsYW5lX21vZDggKiAxNjsKCiAgaW50IGdlbW1fcm93QiA9IGJ5ICogQkxPQ0tOICsgd2FycF9pZCAqIDE2ICsgbGFuZV9kaXY4OwoKICBpbnQgQV9sZGdfaWR4ID0gZ2VtbV9yb3dBICogayArIGdlbW1fY29sOwogIGludCBCX2xkZ19pZHggPSBnZW1tX3Jvd0IgKiBrICsgZ2VtbV9jb2w7CgogIGludCBBX3N0c19pZHggPSAod2FycF9pZCAqIDMyICsgbGFuZV9kaXY4KSAqIDEyOCArIChsYW5lX21vZDggXiBsYW5lX2RpdjgpICogMTY7CiAgaW50IEJfc3RzX2lkeCA9ICh3YXJwX2lkICogMTYgKyBsYW5lX2RpdjgpICogMTI4ICsgKGxhbmVfbW9kOCBeIGxhbmVfZGl2OCkgKiAxNjsKICAKICBpbnQgbGRzX3JvdyA9IGxhbmVfbW9kMzI7CgogIGludCBBX2xkc19pZHhbNF07CiAgaW50IEJfbGRzX2lkeFs0XTsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspewogICAgaW50IGxkc19jb2wgPSAoKGxhbmVfZGl2MzIgKyAyICogaSkgJSA4KSBeIChsZHNfcm93ICUgOCk7CiAgICBBX2xkc19pZHhbaV0gPSAod2FycF9kaXYyICogNjQgKiAxMjgpICsgbGRzX3JvdyAqIDEyOCArIGxkc19jb2wgKiAxNjsKICAgIEJfbGRzX2lkeFtpXSA9ICh3YXJwX21vZDIgKiAzMiAqIDEyOCkgKyBsZHNfcm93ICogMTI4ICsgbGRzX2NvbCAqIDE2OwogIH0KCiAgaW50IHNuID0gKG4gKyBCTE9DSyAtIDEpIC8gQkxPQ0s7CgogIGFzICs9IEJMT0NLTSAqIGJsb2NrSWR4Lng7CiAgYnMgKz0gQkxPQ0tOICogYmxvY2tJZHgueSAvIEJMT0NLOwogIGMgKz0gQkxPQ0tOICogYmxvY2tJZHgueSArIEJMT0NLTSAqIGJsb2NrSWR4LnggKiBuOwogIC8vIHNtZW0KICBfX3NoYXJlZF9fIGNoYXIgc21lbVsoKEJMT0NLTSArIEJMT0NLTikgKiBCTE9DSykgKiBzaXplb2YoX19oaXBfZnA4X2U0bTNfZm51eikgKyAoMSArIEJMT0NLTSkgKiBzaXplb2YoZmxvYXQpXTsKICBfX2hpcF9mcDhfZTRtM19mbnV6ICpzbWVtQSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X19oaXBfZnA4X2U0bTNfZm51eiAqPihzbWVtKTsKICBfX2hpcF9mcDhfZTRtM19mbnV6ICpzbWVtQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8X19oaXBfZnA4X2U0bTNfZm51eiAqPihzbWVtICsgQkxPQ0tNICogQkxPQ0sgKiBzaXplb2YoX19oaXBfZnA4X2U0bTNfZm51eikpOwogIGZsb2F0ICpzbWVtX3NjYWxlc19hID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPihzbWVtICsgKEJMT0NLTSArIEJMT0NLTikgKiBCTE9DSyAqIHNpemVvZihfX2hpcF9mcDhfZTRtM19mbnV6KSk7CiAgZmxvYXQgKnNtZW1fc2NhbGVzX2IgPSByZWludGVycHJldF9jYXN0PGZsb2F0ICo+KHNtZW0gKyAoKEJMT0NLTSArIEJMT0NLTikgKiBCTE9DSykgKiBzaXplb2YoX19oaXBfZnA4X2U0bTNfZm51eikgKyBCTE9DS00gKiBzaXplb2YoZmxvYXQpKTsKCiAgZnAzMngxNl90IGFjY1syXVsxXTsKICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykKICB7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IDE7IGorKykKICAgIHsKICAgICAgYWNjW2ldW2pdID0gezAuMGZ9OwogICAgfQogIH0KCiAgZnAzMng0X3QgQV9sZGdfcmVnWzRdOwogIGZwMzJ4NF90IEJfbGRnX3JlZ1syXTsKCiAgX19oaXBfZnA4X2U0bTNfZm51eiBBX2xkc19yZWdbMl1bMl1bOF07CiAgX19oaXBfZnA4X2U0bTNfZm51eiBCX2xkc19yZWdbMV1bMl1bOF07CiAgZmxvYXQgQV9zY2FsZV9sZHNfcmVnWzJdWzE2XTsKICBmbG9hdCBCX3NjYWxlX2xkc19yZWc7CgogIGZvciAoaW50IGl0aWxlID0gMDsgaXRpbGUgPCBrOyBpdGlsZSArPSBCTE9DSykKICB7CgogICAgZnAzMngxNl90IGJsb2NrX2FjY1syXVsxXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQogICAgewogICAgICBmb3IgKGludCBqID0gMDsgaiA8IDE7IGorKykKICAgICAgewogICAgICAgIGJsb2NrX2FjY1tpXVtqXSA9IHswLjBmfTsKICAgICAgfQogICAgfQogICAgLy8gbGRnCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKICAgIHsKICAgICAgQV9sZGdfcmVnW2ldID0gKihmcDMyeDRfdCAqKSgmYVtBX2xkZ19pZHggKyBpICogOCAqIGtdKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQogICAgewogICAgICBCX2xkZ19yZWdbaV0gPSAqKGZwMzJ4NF90ICopKCZiW0JfbGRnX2lkeCArIGkgKiA4ICoga10pOwogICAgfQogICAgQV9sZGdfaWR4ICs9IEJMT0NLOwogICAgQl9sZGdfaWR4ICs9IEJMT0NLOwogICAgLy8gc3RzCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKICAgIHsKICAgICAgKihmcDMyeDRfdCAqKSgmc21lbUFbQV9zdHNfaWR4ICsgaSAqIDggKiAxMjhdKSA9IEFfbGRnX3JlZ1tpXTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQogICAgewogICAgICAqKGZwMzJ4NF90ICopKCZzbWVtQltCX3N0c19pZHggKyBpICogOCAqIDEyOF0pID0gQl9sZGdfcmVnW2ldOwogICAgfQogICAgaWYgKHRpZCA8IEJMT0NLTSkKICAgIHsKICAgICAgc21lbV9zY2FsZXNfYVt0aWRdID0gYXNbdGlkXTsKICAgIH0KICAgIGlmICh0aWQgPT0gMCkKICAgIHsKICAgICAgc21lbV9zY2FsZXNfYlswXSA9IGJzWzBdOwogICAgfQogICAgX19zeW5jdGhyZWFkcygpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQogICAgewogICAgICBmb3IgKGludCBrID0gMDsgayA8IDE2OyBrKyspCiAgICAgIHsKICAgICAgICBBX3NjYWxlX2xkc19yZWdbaV1ba10gPSBzbWVtX3NjYWxlc19hWyhrICUgNCkgKyBsYW5lX2RpdjMyICogNCArIChrIC8gNCkgKiA4ICsgd2FycF9kaXYyICogNjQgKyAzMiAqIGldOwogICAgICB9CiAgICB9CiAgICBCX3NjYWxlX2xkc19yZWcgPSBzbWVtX3NjYWxlc19iWzBdOwoKICAgIGZvciAoaW50IGtfc3RlcCA9IDA7IGtfc3RlcCA8IDQ7IGtfc3RlcCsrKQogICAgewogICAgICAvLyBsZHMKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspCiAgICAgIHsKICAgICAgICAqKGZwMzJ4NF90ICopKCZBX2xkc19yZWdbaV0pID0gKihmcDMyeDRfdCAqKSgmc21lbUFbQV9sZHNfaWR4W2tfc3RlcF0gKyBpICogMzIgKiAxMjhdKTsKICAgICAgfQogICAgICBmb3IgKGludCBqID0gMDsgaiA8IDE7IGorKykKICAgICAgewogICAgICAgICooZnAzMng0X3QgKikoJkJfbGRzX3JlZ1tqXSkgPSAqKGZwMzJ4NF90ICopKCZzbWVtQltCX2xkc19pZHhba19zdGVwXSArIGogKiAzMiAqIDEyOF0pOwogICAgICB9CgogICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykKICAgICAgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTsgaisrKQogICAgICAgIHsKICAgICAgICAgIGJsb2NrX2FjY1tpXVtqXSA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMzJ4MzJ4MTZfZnA4X2ZwOCgKICAgICAgICAgICAgICBiaXRfY2FzdDxsb25nPihBX2xkc19yZWdbaV1bMF0pLCBiaXRfY2FzdDxsb25nPihCX2xkc19yZWdbal1bMF0pLCBibG9ja19hY2NbaV1bal0sIDAsIDAsIDApOwogICAgICAgICAgYmxvY2tfYWNjW2ldW2pdID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8zMngzMngxNl9mcDhfZnA4KAogICAgICAgICAgICAgIGJpdF9jYXN0PGxvbmc+KEFfbGRzX3JlZ1tpXVsxXSksIGJpdF9jYXN0PGxvbmc+KEJfbGRzX3JlZ1tqXVsxXSksIGJsb2NrX2FjY1tpXVtqXSwgMCwgMCwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpCiAgICB7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTsgKytqKQogICAgICB7CiAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCAxNjsgKytrKQogICAgICAgIHsKICAgICAgICAgIGFjY1tpXVtqXVtrXSArPSBibG9ja19hY2NbaV1bal1ba10gKiBBX3NjYWxlX2xkc19yZWdbaV1ba10gKiBCX3NjYWxlX2xkc19yZWc7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhcyArPSBtOwogICAgYnMgKz0gc247CiAgICBfX3N5bmN0aHJlYWRzKCk7CiAgfQoKICAvLyBmaW5hbGx5LCB3cml0ZSB0aGUgcmVzdWx0IGFzIGJmMTYKICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkKICB7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IDE7ICsraikKICAgIHsKICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCAxNjsgKytrKQogICAgICB7CiAgICAgICAgaW50IENfc3RnX2lkeCA9IChsYW5lX21vZDMyICsgd2FycF9tb2QyICogMzIgKyAzMiAqIGopICsgKChrICUgNCkgKyBsYW5lX2RpdjMyICogNCArIChrIC8gNCkgKiA4ICsgd2FycF9kaXYyICogNjQgKyAzMiAqIGkpICogbjsKICAgICAgICBjW0Nfc3RnX2lkeF0gPSAoX19oaXBfYmZsb2F0MTYpYWNjW2ldW2pdW2tdOwogICAgICB9CiAgICB9CiAgfQp9CgpfX2dsb2JhbF9fIHZvaWQgZnA4XzY0eDY0X2tlcm5lbChjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICphLCBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICpiLCBjb25zdCBmbG9hdCAqYXMsIGNvbnN0IGZsb2F0ICpicywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19oaXBfYmZsb2F0MTYgKmMsIGludCBtLCBpbnQgbiwgaW50IGspCnsKICBjb25zdCBpbnQgQkxPQ0tNPTY0OwogIGNvbnN0IGludCBCTE9DS049NjQ7Ci8vIFlvdXIgaW1wbGVtZW50YXRpb24gaGVyZQogIGludCBieCA9IGJsb2NrSWR4Lng7CiAgaW50IGJ5ID0gYmxvY2tJZHgueTsKCiAgaW50IHRpZCA9IHRocmVhZElkeC54OwogIGludCBsYW5lX2lkID0gdGhyZWFkSWR4LnggJSA2NDsKICBpbnQgd2FycF9pZCA9IHRocmVhZElkeC54IC8gNjQ7CiAgaW50IGxhbmVfbW9kOCA9IGxhbmVfaWQgJSA4OwogIGludCBsYW5lX2RpdjggPSBsYW5lX2lkIC8gODsKICBpbnQgbGFuZV9tb2QxNiA9IGxhbmVfaWQgJSAxNjsKICBpbnQgbGFuZV9kaXYxNiA9IGxhbmVfaWQgLyAxNjsKICBpbnQgd2FycF9tb2QyID0gd2FycF9pZCAlIDI7CiAgaW50IHdhcnBfZGl2MiA9IHdhcnBfaWQgLyAyOwoKICBpbnQgZ2VtbV9yb3dBID0gYnggKiBCTE9DS00gKyB3YXJwX2lkICogMTYgKyBsYW5lX2Rpdjg7CiAgaW50IGdlbW1fY29sID0gbGFuZV9tb2Q4ICogMTY7CgogIGludCBnZW1tX3Jvd0IgPSBieSAqIEJMT0NLTiArIHdhcnBfaWQgKiAxNiArIGxhbmVfZGl2ODsKCiAgaW50IEFfbGRnX2lkeCA9IGdlbW1fcm93QSAqIGsgKyBnZW1tX2NvbDsKICBpbnQgQl9sZGdfaWR4ID0gZ2VtbV9yb3dCICogayArIGdlbW1fY29sOwoKICBpbnQgQV9zdHNfaWR4ID0gKHdhcnBfaWQgKiAxNiArIGxhbmVfZGl2OCkgKiAxMjggKyAobGFuZV9tb2Q4IF4gbGFuZV9kaXY4KSAqIDE2OwogIGludCBCX3N0c19pZHggPSAod2FycF9pZCAqIDE2ICsgbGFuZV9kaXY4KSAqIDEyOCArIChsYW5lX21vZDggXiBsYW5lX2RpdjgpICogMTY7CgogIGludCBsZHNfcm93ID0gKGxhbmVfbW9kMTYpOwogIGludCBsZHNfY29sMCA9ICgobGFuZV9kaXYxNikgJSA4KSBeIChsZHNfcm93ICUgOCk7CiAgaW50IGxkc19jb2wxID0gKCgobGFuZV9kaXYxNikgKyA0KSAlIDgpIF4gKGxkc19yb3cgJSA4KTsKICBpbnQgQV9sZHNfaWR4MCA9ICh3YXJwX2RpdjIgKiAzMiAqIDEyOCkgKyBsZHNfcm93ICogMTI4ICsgbGRzX2NvbDAgKiAxNjsKICBpbnQgQl9sZHNfaWR4MCA9ICh3YXJwX21vZDIgKiAzMiAqIDEyOCkgKyBsZHNfcm93ICogMTI4ICsgbGRzX2NvbDAgKiAxNjsKICBpbnQgQV9sZHNfaWR4MSA9ICh3YXJwX2RpdjIgKiAzMiAqIDEyOCkgKyBsZHNfcm93ICogMTI4ICsgbGRzX2NvbDEgKiAxNjsKICBpbnQgQl9sZHNfaWR4MSA9ICh3YXJwX21vZDIgKiAzMiAqIDEyOCkgKyBsZHNfcm93ICogMTI4ICsgbGRzX2NvbDEgKiAxNjsKCiAgaW50IHNuID0gKG4gKyBCTE9DSyAtIDEpIC8gQkxPQ0s7CgogIGFzICs9IEJMT0NLTSAqIGJsb2NrSWR4Lng7CiAgYnMgKz0gQkxPQ0tOICogYmxvY2tJZHgueSAvIEJMT0NLOwogIGMgKz0gQkxPQ0tOICogYmxvY2tJZHgueSArIEJMT0NLTSAqIGJsb2NrSWR4LnggKiBuOwogIC8vIHNtZW0KICBfX3NoYXJlZF9fIGNoYXIgc21lbVsoKEJMT0NLTSArIEJMT0NLTikgKiBCTE9DSykgKiBzaXplb2YoX19oaXBfZnA4X2U0bTNfZm51eikgKyAoMSArIEJMT0NLTSkgKiBzaXplb2YoZmxvYXQpXTsKICBfX2hpcF9mcDhfZTRtM19mbnV6ICpzbWVtQSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X19oaXBfZnA4X2U0bTNfZm51eiAqPihzbWVtKTsKICBfX2hpcF9mcDhfZTRtM19mbnV6ICpzbWVtQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8X19oaXBfZnA4X2U0bTNfZm51eiAqPihzbWVtICsgQkxPQ0tNICogQkxPQ0sgKiBzaXplb2YoX19oaXBfZnA4X2U0bTNfZm51eikpOwogIGZsb2F0ICpzbWVtX3NjYWxlc19hID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPihzbWVtICsgKEJMT0NLTSArIEJMT0NLTikgKiBCTE9DSyAqIHNpemVvZihfX2hpcF9mcDhfZTRtM19mbnV6KSk7CiAgZmxvYXQgKnNtZW1fc2NhbGVzX2IgPSByZWludGVycHJldF9jYXN0PGZsb2F0ICo+KHNtZW0gKyAoKEJMT0NLTSArIEJMT0NLTikgKiBCTE9DSykgKiBzaXplb2YoX19oaXBfZnA4X2U0bTNfZm51eikgKyBCTE9DS00gKiBzaXplb2YoZmxvYXQpKTsKCiAgZnAzMng0X3QgYWNjWzJdWzJdOwogIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQogIHsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKQogICAgewogICAgICBhY2NbaV1bal0gPSB7MC4wZn07CiAgICB9CiAgfQoKICBmcDMyeDRfdCBBX2xkZ19yZWdbMl07CiAgZnAzMng0X3QgQl9sZGdfcmVnWzJdOwoKICBfX2hpcF9mcDhfZTRtM19mbnV6IEFfbGRzX3JlZ1syXVsyXVs4XTsKICBfX2hpcF9mcDhfZTRtM19mbnV6IEJfbGRzX3JlZ1syXVsyXVs4XTsKICBmbG9hdCBBX3NjYWxlX2xkc19yZWdbMl1bNF07CiAgZmxvYXQgQl9zY2FsZV9sZHNfcmVnOwoKICBmb3IgKGludCBpdGlsZSA9IDA7IGl0aWxlIDwgazsgaXRpbGUgKz0gQkxPQ0spCiAgewoKICAgIGZwMzJ4NF90IGJsb2NrX2FjY1syXVsyXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQogICAgewogICAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7IGorKykKICAgICAgewogICAgICAgIGJsb2NrX2FjY1tpXVtqXSA9IHswLjBmfTsKICAgICAgfQogICAgfQogICAgLy8gbGRnCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykKICAgIHsKICAgICAgQV9sZGdfcmVnW2ldID0gKihmcDMyeDRfdCAqKSgmYVtBX2xkZ19pZHggKyBpICogOCAqIGtdKTsKICAgICAgQl9sZGdfcmVnW2ldID0gKihmcDMyeDRfdCAqKSgmYltCX2xkZ19pZHggKyBpICogOCAqIGtdKTsKICAgIH0KICAgIEFfbGRnX2lkeCArPSBCTE9DSzsKICAgIEJfbGRnX2lkeCArPSBCTE9DSzsKICAgIC8vIHN0cwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspCiAgICB7CiAgICAgICooZnAzMng0X3QgKikoJnNtZW1BW0Ffc3RzX2lkeCArIGkgKiA4ICogMTI4XSkgPSBBX2xkZ19yZWdbaV07CiAgICAgICooZnAzMng0X3QgKikoJnNtZW1CW0Jfc3RzX2lkeCArIGkgKiA4ICogMTI4XSkgPSBCX2xkZ19yZWdbaV07CiAgICB9CiAgICBpZiAod2FycF9pZCA8IDEpCiAgICB7CiAgICAgIHNtZW1fc2NhbGVzX2FbdGlkXSA9IGFzW3RpZF07CiAgICB9CiAgICBpZiAodGlkID09IDApCiAgICB7CiAgICAgIHNtZW1fc2NhbGVzX2JbMF0gPSBic1swXTsKICAgIH0KICAgIF9fc3luY3RocmVhZHMoKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykKICAgIHsKICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA0OyBrKyspCiAgICAgIHsKICAgICAgICBBX3NjYWxlX2xkc19yZWdbaV1ba10gPSBzbWVtX3NjYWxlc19hW2sgKyBsYW5lX2RpdjE2ICogNCArIHdhcnBfZGl2MiAqIDMyICsgMTYgKiBpXTsKICAgICAgfQogICAgfQogICAgQl9zY2FsZV9sZHNfcmVnID0gc21lbV9zY2FsZXNfYlswXTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykKICAgIHsKICAgICAgKihmcDMyeDRfdCAqKSgmQV9sZHNfcmVnW2ldKSA9ICooZnAzMng0X3QgKikoJnNtZW1BW0FfbGRzX2lkeDAgKyBpICogMTYgKiAxMjhdKTsKICAgIH0KICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKQogICAgewogICAgICAqKGZwMzJ4NF90ICopKCZCX2xkc19yZWdbal0pID0gKihmcDMyeDRfdCAqKSgmc21lbUJbQl9sZHNfaWR4MCArIGogKiAxNiAqIDEyOF0pOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQogICAgewogICAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7IGorKykKICAgICAgewogICAgICAgIGJsb2NrX2FjY1tpXVtqXSA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOCgKICAgICAgICAgICAgYml0X2Nhc3Q8bG9uZz4oQV9sZHNfcmVnW2ldWzBdKSwgYml0X2Nhc3Q8bG9uZz4oQl9sZHNfcmVnW2pdWzBdKSwgYmxvY2tfYWNjW2ldW2pdLCAwLCAwLCAwKTsKICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspCiAgICB7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKQogICAgICB7CiAgICAgICAgYmxvY2tfYWNjW2ldW2pdID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KAogICAgICAgICAgICBiaXRfY2FzdDxsb25nPihBX2xkc19yZWdbaV1bMV0pLCBiaXRfY2FzdDxsb25nPihCX2xkc19yZWdbal1bMV0pLCBibG9ja19hY2NbaV1bal0sIDAsIDAsIDApOwogICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspCiAgICB7CiAgICAgICooZnAzMng0X3QgKikoJkFfbGRzX3JlZ1tpXSkgPSAqKGZwMzJ4NF90ICopKCZzbWVtQVtBX2xkc19pZHgxICsgaSAqIDE2ICogMTI4XSk7CiAgICB9CiAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7IGorKykKICAgIHsKICAgICAgKihmcDMyeDRfdCAqKSgmQl9sZHNfcmVnW2pdKSA9ICooZnAzMng0X3QgKikoJnNtZW1CW0JfbGRzX2lkeDEgKyBqICogMTYgKiAxMjhdKTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykKICAgIHsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAyOyBqKyspCiAgICAgIHsKICAgICAgICBibG9ja19hY2NbaV1bal0gPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzE2eDE2eDMyX2ZwOF9mcDgoCiAgICAgICAgICAgIGJpdF9jYXN0PGxvbmc+KEFfbGRzX3JlZ1tpXVswXSksIGJpdF9jYXN0PGxvbmc+KEJfbGRzX3JlZ1tqXVswXSksIGJsb2NrX2FjY1tpXVtqXSwgMCwgMCwgMCk7CiAgICAgIH0KICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQogICAgewogICAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7IGorKykKICAgICAgewogICAgICAgIGJsb2NrX2FjY1tpXVtqXSA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOCgKICAgICAgICAgICAgYml0X2Nhc3Q8bG9uZz4oQV9sZHNfcmVnW2ldWzFdKSwgYml0X2Nhc3Q8bG9uZz4oQl9sZHNfcmVnW2pdWzFdKSwgYmxvY2tfYWNjW2ldW2pdLCAwLCAwLCAwKTsKICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKQogICAgewogICAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7ICsraikKICAgICAgewogICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNDsgKytrKQogICAgICAgIHsKICAgICAgICAgIGFjY1tpXVtqXVtrXSArPSBibG9ja19hY2NbaV1bal1ba10gKiBBX3NjYWxlX2xkc19yZWdbaV1ba10gKiBCX3NjYWxlX2xkc19yZWc7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhcyArPSBtOwogICAgYnMgKz0gc247CiAgICBfX3N5bmN0aHJlYWRzKCk7CiAgfQoKICAvLyBmaW5hbGx5LCB3cml0ZSB0aGUgcmVzdWx0IGFzIGJmMTYKICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkKICB7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7ICsraikKICAgIHsKICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA0OyArK2spCiAgICAgIHsKICAgICAgICBpbnQgQ19zdGdfaWR4ID0gKGxhbmVfbW9kMTYgKyB3YXJwX21vZDIgKiAzMiArIDE2ICogaikgKyAoayArIGxhbmVfZGl2MTYgKiA0ICsgd2FycF9kaXYyICogMzIgKyAxNiAqIGkpICogbjsKICAgICAgICBjW0Nfc3RnX2lkeF0gPSAoX19oaXBfYmZsb2F0MTYpYWNjW2ldW2pdW2tdOwogICAgICB9CiAgICB9CiAgfQp9CgoKdm9pZCBmcDhfbW0odG9yY2g6OlRlbnNvciBhLCB0b3JjaDo6VGVuc29yIGIsIHRvcmNoOjpUZW5zb3IgYXMsIHRvcmNoOjpUZW5zb3IgYnMsIHRvcmNoOjpUZW5zb3IgYywgdG9yY2g6OlRlbnNvciBhVCwgdG9yY2g6OlRlbnNvciBiVCkKewogIGludCBtID0gYS5zaXplKDApOwogIGludCBuID0gYi5zaXplKDApOwogIGludCBrID0gYS5zaXplKDEpOwoKICBwZXJtdXRlX2tlcm5lbDw8PGRpbTMoKG0gKyAzMiAtIDEpIC8gMzIsIChrICsgMzIgLSAxKSAvIDMyKSwgZGltMygzMiwgOCksIDAsIDA+Pj4oKF9faGlwX2ZwOF9lNG0zX2ZudXogKilhVC5kYXRhX3B0cigpLCAoX19oaXBfZnA4X2U0bTNfZm51eiAqKWEuZGF0YV9wdHIoKSwgbSwgayk7CiAgcGVybXV0ZV9rZXJuZWw8PDxkaW0zKChuICsgMzIgLSAxKSAvIDMyLCAoayArIDMyIC0gMSkgLyAzMiksIGRpbTMoMzIsIDgpLCAwLCAwPj4+KChfX2hpcF9mcDhfZTRtM19mbnV6ICopYlQuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXogKiliLmRhdGFfcHRyKCksIG4sIGspOwoKICBpZihtICUgMTI4ID09IDAgJiYgbiAlIDEyOCA9PSAwKXsKICAgIGZwOF8xMjh4MTI4X2tlcm5lbDw8PGRpbTMoKG0gKyAxMjggLSAxKSAvIDEyOCwgKG4gKyAxMjggLSAxKSAvIDEyOCksIGRpbTMoMjU2KSwgMCwgMD4+PigoX19oaXBfZnA4X2U0bTNfZm51eiAqKWFULmRhdGFfcHRyKCksIChfX2hpcF9mcDhfZTRtM19mbnV6ICopYlQuZGF0YV9wdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmRhdGFfcHRyPGZsb2F0PigpLCBicy5kYXRhX3B0cjxmbG9hdD4oKSwgKF9faGlwX2JmbG9hdDE2ICopYy5kYXRhX3B0cigpLCBtLCBuLCBrKTsKICB9ZWxzZXsKICAgIGZwOF82NHg2NF9rZXJuZWw8PDxkaW0zKChtICsgNjQgLSAxKSAvIDY0LCAobiArIDY0IC0gMSkgLyA2NCksIGRpbTMoMjU2KSwgMCwgMD4+PigoX19oaXBfZnA4X2U0bTNfZm51eiAqKWFULmRhdGFfcHRyKCksIChfX2hpcF9mcDhfZTRtM19mbnV6ICopYlQuZGF0YV9wdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmRhdGFfcHRyPGZsb2F0PigpLCBicy5kYXRhX3B0cjxmbG9hdD4oKSwgKF9faGlwX2JmbG9hdDE2ICopYy5kYXRhX3B0cigpLCBtLCBuLCBrKTsKICB9CiAgCiAgCiAgLy8gQzEwX0NVREFfQ0hFQ0soY3VkYUdldExhc3RFcnJvcigpKTsKfQoiIiIKCmltcG9ydCBvcwpvcy5lbnZpcm9uWyJDWFgiXSA9ICJjbGFuZysrIgptb2R1bGUgPSBsb2FkX2lubGluZSgKICAgIG5hbWU9J2ZwOF9tbScsCiAgICBjcHBfc291cmNlcz1bQ1BQX1dSQVBQRVJdLAogICAgY3VkYV9zb3VyY2VzPVtDVURBX1NSQ10sCiAgICBmdW5jdGlvbnM9WydmcDhfbW0nXSwKICAgIHZlcmJvc2U9VHJ1ZSwKICAgIGV4dHJhX2N1ZGFfY2ZsYWdzPVsiLS1vZmZsb2FkLWFyY2g9Z2Z4OTQyIiwgIi1zdGQ9YysrMjAiXSwKKQoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICAKICAgIGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMgPSBkYXRhCiAgICBtID0gYS5zaGFwZVswXQogICAgbiA9IGIuc2hhcGVbMF0KICAgIGsgPSBhLnNoYXBlWzFdCiAgICBhVCA9ICh0b3JjaC5lbXB0eSgoaywgbSksIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBkZXZpY2U9ImN1ZGEiKSkudG8odG9yY2guZmxvYXQ4X2U0bTNmbnV6KQogICAgYlQgPSAodG9yY2guZW1wdHkoKGssIG4pLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPSJjdWRhIikpLnRvKHRvcmNoLmZsb2F0OF9lNG0zZm51eikKCiAgICBtb2R1bGUuZnA4X21tKGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMsIGFULCBiVCkKCiAgICByZXR1cm4gYwoKSource code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0
Best evidence level for this revision: reported
JSON