Skip to content
KernelIndex
Search⌘K

submission 9802

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

test_K64.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-fp8-mm-9802?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, 256]
AMD Instinct MI300X
49.7µs
#58 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 512]
AMD Instinct MI300X
54.5µs
#65 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 1536]
AMD Instinct MI300X
89.2µs
#66 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 256]
AMD Instinct MI300X
186.6µs
#80 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 512]
AMD Instinct MI300X
186.7µs
#79 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2048]
AMD Instinct MI300X
207.1µs
#76 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2304]
AMD Instinct MI300X
226.3µs
#75 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=576 · seed=12346
AMD Instinct MI300X
259.8µs
#80 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
260.1µs
#80 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
264.8µs
#73 of 98
2025-04-26
Show all 18 measurements ›
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
351.2µs
#70 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 1536]
AMD Instinct MI300X
354.3µs
#79 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
440.7µs
#70 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
452.8µs
#79 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
854.9µs
#77 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2048]
AMD Instinct MI300X
1.03ms
#79 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2304]
AMD Instinct MI300X
1.15ms
#79 of 98
2025-04-26
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
2.43ms
#79 of 98
2025-04-26

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:3cb9870fc22ab2a9bc814ab2e57afa82df1589ea8c8d61bc7477e5f4498b5a30
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

test_K64.py1 lines
IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCiNpbmNsdWRlIDxyb2N3bW1hL3JvY3dtbWEuaHBwPg0KI2luY2x1ZGUgPGNvb3BlcmF0aXZlX2dyb3Vwcy5oPg0KbmFtZXNwYWNlIGNnID0gY29vcGVyYXRpdmVfZ3JvdXBzOw0KDQp1c2luZyBmbG9hdHgxNiA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7DQoNCiNkZWZpbmUgS19KVU1QIDEyOA0KI2RlZmluZSBXTU1BX00gMzINCiNkZWZpbmUgV01NQV9OIDMyDQojZGVmaW5lIFdNTUFfSyAxNg0KI2RlZmluZSBXQVJQX1NJWkUgNjQNCiNkZWZpbmUgV01NQV9QTEFDRUhPTERFUiA0DQoNCl9fZ2xvYmFsX18gdm9pZCBjdXN0b21fa2VybmVsKGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIEFfcHRyLCBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6KiBCX3B0ciwgY29uc3QgZmxvYXQqIEFzX3B0ciwgY29uc3QgZmxvYXQqIEJzX3B0ciwgcm9jd21tYTo6YmZsb2F0MTZfdCogQ19wdHIsIGludCBNLCBpbnQgTiwgaW50IEspIHsNCiAgICAvKg0KICAgIGEgYmxvY2sgY292ZXJzIDMyeDMyeDQgZWxlbQ0KICAgIG51bV93YXJwX3ggPSA0DQogICAgbnVtX3dhcnBfeSA9IDENCiAgICBibG9jayBzaXplID0gKCg2NCAqIG51bV93YXJwX3gpLCBudW1fd2FycF95KSA9IDI1NiB0aHJlYWRzDQogICAgZ3JpZCBzaXplID0gKE4gLyAobnVtX3dhcnBfeCAqIFdNTUFfTiksIE0gLyAobnVtX3dhcnBfeSAqIFdNTUFfTSkpDQoNCiAgICBBOiBNIHggSyBjb2wtbWFqICAtLS0gQXMgKDF4MTI4IHNjYWxpbmcpOiBNIHggSy8xMjggY29sLW1hag0KICAgIEI6IEsgeCBOIHJvdy1tYWogIC0tLSBCcyAoMTI4eDEyOCBzY2FsaW5nKTogSy8xMjggeCBOLzEyOCByb3ctbWFqDQogICAgQzogTSB4IE4gcm93LW1hag0KICAgIE0sIE4gaXMgZGl2aXNpYmxlIGJ5IDY0DQogICAgSyBpcyBkaXZpc2libGUgYnkgMTI4DQogICAgKi8gICAgICANCiAgICBpbnQgd2FycF9pZHhfeCA9IHRocmVhZElkeC54IC8gV0FSUF9TSVpFOw0KICAgIC8vaW50IHdhcnBfaWR4X3kgPSB0aHJlYWRJZHgueTsNCiAgICANCiAgICBpbnQgbGRhID0gTTsNCiAgICBpbnQgbGRiID0gTjsNCiAgICBpbnQgbGRjID0gTjsNCiAgICANCiAgICBpbnQgc24gPSAoTiArIDEyOCAtIDEpIC8gMTI4Ow0KDQogICAgLy9pbnQgcm93X2Jhc2VfQyA9IChibG9ja0lkeC55ICogYmxvY2tEaW0ueSArIHRocmVhZElkeC55KSAqIFdNTUFfTTsgLy8gYWRkIHRoaXMgbGluZSBjYXVzZXMgdGhlIGNvZGUgdG8gYmUgMnggc2xvd2VyDQogICAgDQogICAgaW50IHJvd19iYXNlX0MgPSBibG9ja0lkeC55ICogV01NQV9NOw0KICAgIGludCBjb2xfYmFzZV9DID0gKGJsb2NrSWR4LnggKiBibG9ja0RpbS54IC8gV0FSUF9TSVpFICsgd2FycF9pZHhfeCkgKiBXTU1BX047DQoNCiAgICAvL2ludCBjb2xfYmFzZV9DID0gKGJsb2NrSWR4LnggKiAyICsgd2FycF9pZHhfeCkgKiBXTU1BX047IC8vIG51bV93YXJwX3ggPSAyDQogICAgLy9pbnQgY29sX2Jhc2VfQyA9IChibG9ja0lkeC54ICogNCArIHdhcnBfaWR4X3gpICogV01NQV9OOyAvLyBudW1fd2FycF94ID0gNA0KDQogICAgLy9pbnQgY29sX2Jhc2VfQyA9IChibG9ja0lkeC54ICsgd2FycF9pZHhfeCkgKiBXTU1BX047IC8vIG51bV93YXJwX3ggPSAyDQogICAgDQoNCiAgICAvL2ludCB3YXJwX2lkeF94ID0gdGhyZWFkSWR4LnggLyBXQVJQX1NJWkU7IC8vIFRoaXMgY2F1c2UgdGltZSBvdXQNCiAgICAvL2ludCB3YXJwX2lkeF95ID0gdGhyZWFkSWR4Lnk7DQogICAgLy9pbnQgcm93X2Jhc2VfQyA9IChibG9ja0lkeC55ICogYmxvY2tEaW0ueSArIHRocmVhZElkeC55KSAqIFdNTUFfTTsNCiAgICAvL2ludCBjb2xfYmFzZV9DID0gKGJsb2NrSWR4LnggKiBibG9ja0RpbS54ICsgdGhyZWFkSWR4LngpLyBXQVJQX1NJWkUgKiBXTU1BX04gOw0KDQogICAgLy8gaWYgKHJvd19iYXNlX0MgPj0gTSkgcmV0dXJuOw0KICAgIGlmIChjb2xfYmFzZV9DID49IE4pIHJldHVybjsgIA0KICAgIA0KICAgIGF1dG8gZnJhZ19hY2NfbWFzdGVyID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6YWNjdW11bGF0b3IsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIGZsb2F0PigpOw0KICAgIHJvY3dtbWE6OmZpbGxfZnJhZ21lbnQoZnJhZ19hY2NfbWFzdGVyLCAwLmYpOw0KDQogICAgZm9yIChpbnQga2Jhc2UgPSAwOyBrYmFzZSA8IEs7IGtiYXNlICs9IEtfSlVNUCkgew0KICAgICAgICBhdXRvIGZyYWdfYWNjX2Jsb2NrID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6YWNjdW11bGF0b3IsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIGZsb2F0PigpIDsNCiAgICAgICAgcm9jd21tYTo6ZmlsbF9mcmFnbWVudChmcmFnX2FjY19ibG9jaywgMC5mKTsNCg0KICAgICAgICBhdXRvIGZyYWdfYSA9IHJvY3dtbWE6OmZyYWdtZW50PHJvY3dtbWE6Om1hdHJpeF9hLCBXTU1BX00sIFdNTUFfTiwgV01NQV9LLCBfX2hpcF9mcDhfZTRtM19mbnV6LCByb2N3bW1hOjpjb2xfbWFqb3I+KCk7DQogICAgICAgIGF1dG8gZnJhZ19iID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6bWF0cml4X2IsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIF9faGlwX2ZwOF9lNG0zX2ZudXosIHJvY3dtbWE6OnJvd19tYWpvcj4oKTsgIA0KDQogICAgICAgIGZvciAoaW50IGttaW5pID0gMDsga21pbmkgPCBLX0pVTVA7IGttaW5pICs9IFdNTUFfSykgew0KICAgICAgICAgICAgaW50IGtfb2Zmc2V0ID0ga2Jhc2UgKyBrbWluaTsgICAgICAgICAgICANCiAgICAgICAgICAgIHJvY3dtbWE6OmxvYWRfbWF0cml4X3N5bmMoZnJhZ19hLCBBX3B0ciArIHJvd19iYXNlX0MgKyBrX29mZnNldCAqIGxkYSwgbGRhKTsgICAgICAgICAgICANCiAgICAgICAgICAgIHJvY3dtbWE6OmxvYWRfbWF0cml4X3N5bmMoZnJhZ19iLCBCX3B0ciArIGtfb2Zmc2V0ICogbGRiICsgY29sX2Jhc2VfQywgbGRiKTsgICAgICAgIA0KICAgICAgICAgICAgcm9jd21tYTo6bW1hX3N5bmMoZnJhZ19hY2NfYmxvY2ssIGZyYWdfYSwgZnJhZ19iLCBmcmFnX2FjY19ibG9jayk7DQogICAgICAgIH0gLy8gZW5kIGZvciBrbWluaQ0KDQogICAgICAgIC8vIExvYWQgc2NhbGVyDQoNCiAgICAgICAgX19zaGFyZWRfXyBmbG9hdCB0aWxlU2NhbGVBW1dNTUFfTV1bV01NQV9OICsgMV07IC8vIGNvbC1tYWpvciB0aWxlU2NhbGVBW2NvbF1bcm93XQ0KICAgICAgICBmbG9hdCBzY2FsZUIgPSBCc19wdHJbKGtiYXNlIC8gMTI4KSAqIHNuICsgKGJsb2NrSWR4LnggKiAoKGJsb2NrRGltLnggLyBXQVJQX1NJWkUpICogV01NQV9OKSAvIDEyOCldOyANCg0KICAgICAgICBpZiAodGhyZWFkSWR4LnggPCBXTU1BX00pIHsgICAgICAgICAgIA0KICAgICAgICAgICAgZmxvYXQgdmFsID0gQXNfcHRyW3Jvd19iYXNlX0MgKyB0aHJlYWRJZHgueCArIE0gKiAoa2Jhc2UgLyAxMjgpXSAqIHNjYWxlQjsNCiAgICAgICAgICAgIC8vIFJlcGxpY2F0ZSB0aGlzIHZhbHVlIGFjcm9zcyBhbGwgY29sdW1ucw0KICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBXTU1BX047ICsraikgew0KICAgICAgICAgICAgICAgIHRpbGVTY2FsZUFbal1bdGhyZWFkSWR4LnhdID0gdmFsOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gY2c6OnRocmVhZF9ibG9jayB0aGlzX3RiID0gY2c6OnRoaXNfdGhyZWFkX2Jsb2NrKCk7DQogICAgICAgIC8vIGF1dG8gdGlsZTE2ID0gY2c6OnRpbGVkX3BhcnRpdGlvbjwxNj4odGhpc190Yik7IC8vIDEyOCB0aHJlYWRzIC0+IDE2IHggOA0KICAgICAgICAvLyBpbnQgdDE2eCA9IHRpbGUxNi50aHJlYWRfcmFuaygpOw0KICAgICAgICAvLyBpbnQgdDE2eSA9IHRpbGUxNi5tZXRhX2dyb3VwX3JhbmsoKTsNCg0KICAgICAgICAvLyBmbG9hdCB2YWwgPSBBc19wdHJbcm93X2Jhc2VfQyArIHQxNnggKyBNICogKGtiYXNlIC8gMTI4KV0gKiBzY2FsZUI7DQogICAgICAgIC8vIHRpbGVTY2FsZUFbdDE2eV1bdDE2eF0gPSB2YWw7DQogICAgICAgIC8vIHRpbGVTY2FsZUFbdDE2eSArIDhdW3QxNnhdID0gdmFsOw0KDQogICAgICAgIA0KICAgICAgICAvLyBpZiAodDE2eSA9PSAwKXsNCiAgICAgICAgLy8gICAgIGZsb2F0IHZhbCA9IEFzX3B0cltyb3dfYmFzZV9DICsgdDE2eCArIE0gKiAoa2Jhc2UgLyAxMjgpXSAqIHNjYWxlQjsNCiAgICAgICAgLy8gICAgIGZvciAoaW50IGogPSAwOyBqIDwgV01NQV9OOyArK2opIHsNCiAgICAgICAgLy8gICAgICAgICB0aWxlU2NhbGVBW2pdW3QxNnhdID0gdmFsOw0KICAgICAgICAvLyAgICAgfSAgICAgICAgICAgIA0KICAgICAgICAvLyB9DQoNCiAgICAgICAgX19zeW5jdGhyZWFkcygpOw0KICAgICAgICANCiAgICAgICAgYXV0byBmcmFnX3NjYWxlQSA9IHJvY3dtbWE6OmZyYWdtZW50PHJvY3dtbWE6OmFjY3VtdWxhdG9yLCBXTU1BX00sIFdNTUFfTiwgV01NQV9LLCBmbG9hdD4oKTsNCiAgICAgICAgcm9jd21tYTo6bG9hZF9tYXRyaXhfc3luYyhmcmFnX3NjYWxlQSwgJnRpbGVTY2FsZUFbMF1bMF0sIFdNTUFfTiArIDEsIHJvY3dtbWE6Om1lbV9jb2xfbWFqb3IpOw0KDQogICAgICAgIC8vIFRPRE86IFRyeSB0byB1c2UgZnJhZ19hY2NfbWFzdGVyIGFzIGJmbG9hdDE2LCBzZWUgaWYgaXQncyB3aXRoaW4gZXJyb3IuDQogICAgICAgIC8vIEFwcGx5IHNjYWxlcg0KICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdfYWNjX21hc3Rlci5udW1fZWxlbWVudHM7ICsraSkgew0KICAgICAgICAgICAgZnJhZ19hY2NfbWFzdGVyLnhbaV0gKz0gZnJhZ19zY2FsZUEueFtpXSAqIGZyYWdfYWNjX2Jsb2NrLnhbaV07DQogICAgICAgIH0NCiAgICAgICAgDQogICAgfSAvLyBlbmQgZm9yIGtiYXNlDQogICANCiAgICAvLyBDb252ZXJ0IGZwMzIgdG8gYmYxNiBhbmQgc3RvcmUNCiAgICBhdXRvIGZyYWdfcmVzdWx0ID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6YWNjdW11bGF0b3IsIFdNTUFfTSwgV01NQV9OLCBXTU1BX1BMQUNFSE9MREVSLCByb2N3bW1hOjpiZmxvYXQxNl90PigpOyAvL1BsYWNlaG9sZGVyIGZyYWcNCiAgICANCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdfYWNjX21hc3Rlci5udW1fZWxlbWVudHM7ICsraSkgew0KICAgICAgICBmcmFnX3Jlc3VsdC54W2ldID0gKHJvY3dtbWE6OmJmbG9hdDE2X3QpZnJhZ19hY2NfbWFzdGVyLnhbaV07DQogICAgfQ0KICAgDQogICAgcm9jd21tYTo6c3RvcmVfbWF0cml4X3N5bmMoQ19wdHIgKyByb3dfYmFzZV9DICogbGRjICsgY29sX2Jhc2VfQywgZnJhZ19yZXN1bHQsIGxkYywgcm9jd21tYTo6bWVtX3Jvd19tYWpvcik7DQp9DQoNCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpIHsNCiAgICBpbnQgTSA9IGEuc2l6ZSgwKTsNCiAgICBpbnQgTiA9IGIuc2l6ZSgwKTsNCiAgICBpbnQgSyA9IGEuc2l6ZSgxKTsNCg0KICAgIGludCBudW1fd2FycF94ID0gNDsNCiAgICBpbnQgbnVtX3dhcnBfeSA9IDE7DQogICAgZGltMyBibG9ja19zaXplKChXQVJQX1NJWkUgKiBudW1fd2FycF94KSwgbnVtX3dhcnBfeSk7DQogICAgZGltMyBncmlkX3NpemUoKE4gKyBudW1fd2FycF94ICogV01NQV9OIC0gMSkgLyAobnVtX3dhcnBfeCAqIFdNTUFfTiksIA0KICAgICAgICAgICAgICAgICAgIChNICsgbnVtX3dhcnBfeSAqIFdNTUFfTSAtIDEpIC8gKG51bV93YXJwX3kgKiBXTU1BX00pKTsNCg0KICAgIGN1c3RvbV9rZXJuZWw8PDxncmlkX3NpemUsIGJsb2NrX3NpemUsIDAsIDA+Pj4gKChfX2hpcF9mcDhfZTRtM19mbnV6KilhLmRhdGFfcHRyKCksIChfX2hpcF9mcDhfZTRtM19mbnV6KiliLmRhdGFfcHRyKCksIA0KICAgIGFzLmRhdGFfcHRyPGZsb2F0PigpLCBicy5kYXRhX3B0cjxmbG9hdD4oKSwgKHJvY3dtbWE6OmJmbG9hdDE2X3QqKWMuZGF0YV9wdHIoKSwgTSwgTiwgSyk7DQogICAgLy9DMTBfQ1VEQV9DSEVDSyhjdWRhR2V0TGFzdEVycm9yKCkpOw0KfQ0KIiIiDQoNCmltcG9ydCBvcw0Kb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyINCmltcG9ydCB0b3JjaA0KYmxvY2tfc2hhcGUgPSAxMjgNCg0KbW9kdWxlID0gbG9hZF9pbmxpbmUoDQogICAgbmFtZT0nZnA4X21tJywNCiAgICBjcHBfc291cmNlcz1bQ1BQX1dSQVBQRVJdLA0KICAgIGN1ZGFfc291cmNlcz1bQ1VEQV9TUkNdLA0KICAgIGZ1bmN0aW9ucz1bJ2ZwOF9tbSddLA0KICAgIHZlcmJvc2U9VHJ1ZSwNCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIiwgIi1PMiJdLA0KKQ0KIyBPMSBpcyBzbG93LCAtTzIgaXMgZXF1YWwgdG8gbm90aGluZywgIC1PMyBpcyBzbGlnaHRseSBzbG93ZXIgdGhhbiBPMiAobWF5YmUgc2FtZSkNCg0KZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6DQogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGENCiAgICBtb2R1bGUuZnA4X21tKGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMpDQogICAgcmV0dXJuIGMNCg==

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

- IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCiNpbmNsdWRlIDxyb2N3bW1hL3JvY3dtbWEuaHBwPg0KI2luY2x1ZGUgPGNvb3BlcmF0aXZlX2dyb3Vwcy5oPg0KbmFtZXNwYWNlIGNnID0gY29vcGVyYXRpdmVfZ3JvdXBzOw0KDQp1c2luZyBmbG9hdHgxNiA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7DQoNCiNkZWZpbmUgS19KVU1QIDEyOA0KI2RlZmluZSBXTU1BX00gMzINCiNkZWZpbmUgV01NQV9OIDMyDQojZGVmaW5lIFdNTUFfSyAxNg0KI2RlZmluZSBXQVJQX1NJWkUgNjQNCiNkZWZpbmUgV01NQV9QTEFDRUhPTERFUiA0DQoNCl9fZ2xvYmFsX18gdm9pZCBjdXN0b21fa2VybmVsKGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIEFfcHRyLCBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6KiBCX3B0ciwgY29uc3QgZmxvYXQqIEFzX3B0ciwgY29uc3QgZmxvYXQqIEJzX3B0ciwgcm9jd21tYTo6YmZsb2F0MTZfdCogQ19wdHIsIGludCBNLCBpbnQgTiwgaW50IEspIHsNCiAgICAvKg0KICAgIGEgYmxvY2sgY292ZXJzIDMyeDMyeDQgZWxlbQ0KICAgIG51bV93YXJwX3ggPSA0DQogICAgbnVtX3dhcnBfeSA9IDENCiAgICBibG9jayBzaXplID0gKCg2NCAqIG51bV93YXJwX3gpLCBudW1fd2FycF95KSA9IDI1NiB0aHJlYWRzDQogICAgZ3JpZCBzaXplID0gKE4gLyAobnVtX3dhcnBfeCAqIFdNTUFfTiksIE0gLyAobnVtX3dhcnBfeSAqIFdNTUFfTSkpDQoNCiAgICBBOiBNIHggSyBjb2wtbWFqICAtLS0gQXMgKDF4MTI4IHNjYWxpbmcpOiBNIHggSy8xMjggY29sLW1hag0KICAgIEI6IEsgeCBOIHJvdy1tYWogIC0tLSBCcyAoMTI4eDEyOCBzY2FsaW5nKTogSy8xMjggeCBOLzEyOCByb3ctbWFqDQogICAgQzogTSB4IE4gcm93LW1hag0KICAgIE0sIE4gaXMgZGl2aXNpYmxlIGJ5IDY0DQogICAgSyBpcyBkaXZpc2libGUgYnkgMTI4DQogICAgKi8gICAgICANCiAgICBpbnQgd2FycF9pZHggPSB0aHJlYWRJZHgueCAvIFdBUlBfU0laRTsNCiAgICAvLyBpbnQgdGhyZWFkX2lkeCA9IHRocmVhZElkeC54ICUgV0FSUF9TSVpFOw0KICAgIA0KICAgIGludCBsZGEgPSBNOw0KICAgIGludCBsZGIgPSBOOw0KICAgIGludCBsZGMgPSBOOw0KICAgIA0KICAgIGludCBzbiA9IChOICsgMTI4IC0gMSkgLyAxMjg7DQoNCiAgICBpbnQgcm93X2Jhc2VfQyA9IGJsb2NrSWR4LnkgKiBXTU1BX007IC8vIHJvdyBiYXNlIG9mIHdhcnBzIGluIGEgYmxvY2sgaW4gQy4gRGl2aXNpYmxlIGJ5IFdNTV9NDQogICAgLy8gaW50IHdhcnBfY29sID0gKGJsb2NrSWR4LnggKiBibG9ja0RpbS54IC8gV0FSUF9TSVpFICsgd2FycF9pZHgpICogV01NQV9OOw0KICAgIGludCBjb2xfYmFzZV9DID0gYmxvY2tJZHgueCAqICgoYmxvY2tEaW0ueCAvIFdBUlBfU0laRSkgKiBXTU1BX04pICsgd2FycF9pZHggKiBXTU1BX047IC8vIENvbCBiYXNlIG9mIHdhcnBzIGluIGEgYmxvY2sgaW4gQy4gRGl2aXNpYmxlIGJ5IFdNTUFfTg0KDQogICAgaWYgKGNvbF9iYXNlX0MgPiBOKSByZXR1cm47DQogICAgDQogICAgYXV0byBmcmFnX2FjY19tYXN0ZXIgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjphY2N1bXVsYXRvciwgV01NQV9NLCBXTU1BX04sIFdNTUFfSywgZmxvYXQ+KCk7DQogICAgcm9jd21tYTo6ZmlsbF9mcmFnbWVudChmcmFnX2FjY19tYXN0ZXIsIDAuZik7DQoNCiAgICBmb3IgKGludCBrYmFzZSA9IDA7IGtiYXNlIDwgSzsga2Jhc2UgKz0gS19KVU1QKSB7DQogICAgICAgIGF1dG8gZnJhZ19hY2NfYmxvY2sgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjphY2N1bXVsYXRvciwgV01NQV9NLCBXTU1BX04sIFdNTUFfSywgZmxvYXQ+KCkgOw0KICAgICAgICByb2N3bW1hOjpmaWxsX2ZyYWdtZW50KGZyYWdfYWNjX2Jsb2NrLCAwLmYpOw0KDQogICAgICAgIGF1dG8gZnJhZ19hID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6bWF0cml4X2EsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIF9faGlwX2ZwOF9lNG0zX2ZudXosIHJvY3dtbWE6OmNvbF9tYWpvcj4oKTsNCiAgICAgICAgYXV0byBmcmFnX2IgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjptYXRyaXhfYiwgV01NQV9NLCBXTU1BX04sIFdNTUFfSywgX19oaXBfZnA4X2U0bTNfZm51eiwgcm9jd21tYTo6cm93X21ham9yPigpOyAgDQoNCiAgICAgICAgZm9yIChpbnQga21pbmkgPSAwOyBrbWluaSA8IEtfSlVNUDsga21pbmkgKz0gV01NQV9LKSB7DQogICAgICAgICAgICBpbnQga19vZmZzZXQgPSBrYmFzZSArIGttaW5pOyAgICAgICAgICAgIA0KICAgICAgICAgICAgcm9jd21tYTo6bG9hZF9tYXRyaXhfc3luYyhmcmFnX2EsIEFfcHRyICsgcm93X2Jhc2VfQyArIGtfb2Zmc2V0ICogbGRhLCBsZGEpOyAgICAgICAgICAgIA0KICAgICAgICAgICAgcm9jd21tYTo6bG9hZF9tYXRyaXhfc3luYyhmcmFnX2IsIEJfcHRyICsga19vZmZzZXQgKiBsZGIgKyBjb2xfYmFzZV9DLCBsZGIpOyAgICAgICAgDQogICAgICAgICAgICByb2N3bW1hOjptbWFfc3luYyhmcmFnX2FjY19ibG9jaywgZnJhZ19hLCBmcmFnX2IsIGZyYWdfYWNjX2Jsb2NrKTsNCiAgICAgICAgfSAvLyBlbmQgZm9yIGttaW5pDQoNCiAgICAgICAgLy8gTG9hZCBzY2FsZXINCg0KICAgICAgICBfX3NoYXJlZF9fIGZsb2F0IHRpbGVTY2FsZUFbV01NQV9NXVtXTU1BX04gKyAxXTsgLy8gY29sLW1ham9yIHRpbGVTY2FsZUFbY29sXVtyb3ddDQogICAgICAgIGZsb2F0IHNjYWxlQiA9IEJzX3B0clsoa2Jhc2UgLyAxMjgpICogc24gKyAoYmxvY2tJZHgueCAqICgoYmxvY2tEaW0ueCAvIFdBUlBfU0laRSkgKiBXTU1BX04pIC8gMTI4KV07IA0KDQogICAgICAgIGlmICh0aHJlYWRJZHgueCA8IFdNTUFfTSkgeyAgICAgICAgICAgDQogICAgICAgICAgICBmbG9hdCB2YWwgPSBBc19wdHJbcm93X2Jhc2VfQyArIHRocmVhZElkeC54ICsgTSAqIChrYmFzZSAvIDEyOCldICogc2NhbGVCOw0KICAgICAgICAgICAgLy8gUmVwbGljYXRlIHRoaXMgdmFsdWUgYWNyb3NzIGFsbCBjb2x1bW5zDQogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFdNTUFfTjsgKytqKSB7DQogICAgICAgICAgICAgICAgdGlsZVNjYWxlQVtqXVt0aHJlYWRJZHgueF0gPSB2YWw7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyBjZzo6dGhyZWFkX2Jsb2NrIHRoaXNfdGIgPSBjZzo6dGhpc190aHJlYWRfYmxvY2soKTsNCiAgICAgICAgLy8gYXV0byB0aWxlMTYgPSBjZzo6dGlsZWRfcGFydGl0aW9uPDE2Pih0aGlzX3RiKTsgLy8gMTI4IHRocmVhZHMgLT4gMTYgeCA4DQogICAgICAgIC8vIGludCB0MTZ4ID0gdGlsZTE2LnRocmVhZF9yYW5rKCk7DQogICAgICAgIC8vIGludCB0MTZ5ID0gdGlsZTE2Lm1ldGFfZ3JvdXBfcmFuaygpOw0KDQogICAgICAgIC8vIGZsb2F0IHZhbCA9IEFzX3B0cltyb3dfYmFzZV9DICsgdDE2eCArIE0gKiAoa2Jhc2UgLyAxMjgpXSAqIHNjYWxlQjsNCiAgICAgICAgLy8gdGlsZVNjYWxlQVt0MTZ5XVt0MTZ4XSA9IHZhbDsNCiAgICAgICAgLy8gdGlsZVNjYWxlQVt0MTZ5ICsgOF1bdDE2eF0gPSB2YWw7DQoNCiAgICAgICAgDQogICAgICAgIC8vIGlmICh0MTZ5ID09IDApew0KICAgICAgICAvLyAgICAgZmxvYXQgdmFsID0gQXNfcHRyW3Jvd19iYXNlX0MgKyB0MTZ4ICsgTSAqIChrYmFzZSAvIDEyOCldICogc2NhbGVCOw0KICAgICAgICAvLyAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBXTU1BX047ICsraikgew0KICAgICAgICAvLyAgICAgICAgIHRpbGVTY2FsZUFbal1bdDE2eF0gPSB2YWw7DQogICAgICAgIC8vICAgICB9ICAgICAgICAgICAgDQogICAgICAgIC8vIH0NCg0KICAgICAgICBfX3N5bmN0aHJlYWRzKCk7DQogICAgICAgIA0KICAgICAgICBhdXRvIGZyYWdfc2NhbGVBID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6YWNjdW11bGF0b3IsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIGZsb2F0PigpOw0KICAgICAgICByb2N3bW1hOjpsb2FkX21hdHJpeF9zeW5jKGZyYWdfc2NhbGVBLCAmdGlsZVNjYWxlQVswXVswXSwgV01NQV9OICsgMSwgcm9jd21tYTo6bWVtX2NvbF9tYWpvcik7DQoNCiAgICAgICAgLy8gVE9ETzogVHJ5IHRvIHVzZSBmcmFnX2FjY19tYXN0ZXIgYXMgYmZsb2F0MTYsIHNlZSBpZiBpdCdzIHdpdGhpbiBlcnJvci4NCiAgICAgICAgLy8gQXBwbHkgc2NhbGVyDQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ19hY2NfbWFzdGVyLm51bV9lbGVtZW50czsgKytpKSB7DQogICAgICAgICAgICBmcmFnX2FjY19tYXN0ZXIueFtpXSArPSBmcmFnX3NjYWxlQS54W2ldICogZnJhZ19hY2NfYmxvY2sueFtpXTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICB9IC8vIGVuZCBmb3Iga2Jhc2UNCiAgIA0KICAgIC8vIENvbnZlcnQgZnAzMiB0byBiZjE2IGFuZCBzdG9yZQ0KICAgIGF1dG8gZnJhZ19yZXN1bHQgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjphY2N1bXVsYXRvciwgV01NQV9NLCBXTU1BX04sIFdNTUFfUExBQ0VIT0xERVIsIHJvY3dtbWE6OmJmbG9hdDE2X3Q+KCk7IC8vUGxhY2Vob2xkZXIgZnJhZw0KICAgIA0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ19hY2NfbWFzdGVyLm51bV9lbGVtZW50czsgKytpKSB7DQogICAgICAgIGZyYWdfcmVzdWx0LnhbaV0gPSAocm9jd21tYTo6YmZsb2F0MTZfdClmcmFnX2FjY19tYXN0ZXIueFtpXTsNCiAgICB9DQogICANCiAgICByb2N3bW1hOjpzdG9yZV9tYXRyaXhfc3luYyhDX3B0ciArIHJvd19iYXNlX0MgKiBsZGMgKyBjb2xfYmFzZV9DLCBmcmFnX3Jlc3VsdCwgbGRjLCByb2N3bW1hOjptZW1fcm93X21ham9yKTsNCn0NCg0Kdm9pZCBmcDhfbW0odG9yY2g6OlRlbnNvciBhLCB0b3JjaDo6VGVuc29yIGIsIHRvcmNoOjpUZW5zb3IgYXMsIHRvcmNoOjpUZW5zb3IgYnMsIHRvcmNoOjpUZW5zb3IgYykgew0KICAgIGludCBNID0gYS5zaXplKDApOw0KICAgIGludCBOID0gYi5zaXplKDApOw0KICAgIGludCBLID0gYS5zaXplKDEpOw0KDQogICAgaW50IG51bV93YXJwX3ggPSAyOw0KICAgIGludCBudW1fd2FycF95ID0gMTsNCiAgICBkaW0zIGJsb2NrX3NpemUoKFdBUlBfU0laRSAqIG51bV93YXJwX3gpLCBudW1fd2FycF95KTsNCiAgICBkaW0zIGdyaWRfc2l6ZSgoTiArIG51bV93YXJwX3ggKiBXTU1BX04gLSAxKSAvIChudW1fd2FycF94ICogV01NQV9OKSwgDQogICAgICAgICAgICAgICAgICAgKE0gKyBudW1fd2FycF95ICogV01NQV9NIC0gMSkgLyAobnVtX3dhcnBfeSAqIFdNTUFfTSkpOw0KDQogICAgY3VzdG9tX2tlcm5lbDw8PGdyaWRfc2l6ZSwgYmxvY2tfc2l6ZSwgMCwgMD4+PiAoKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWIuZGF0YV9wdHIoKSwgDQogICAgYXMuZGF0YV9wdHI8ZmxvYXQ+KCksIGJzLmRhdGFfcHRyPGZsb2F0PigpLCAocm9jd21tYTo6YmZsb2F0MTZfdCopYy5kYXRhX3B0cigpLCBNLCBOLCBLKTsNCiAgICAvL0MxMF9DVURBX0NIRUNLKGN1ZGFHZXRMYXN0RXJyb3IoKSk7DQp9DQoiIiINCg0KaW1wb3J0IG9zDQpvcy5lbnZpcm9uWyJDWFgiXSA9ICJjbGFuZysrIg0KaW1wb3J0IHRvcmNoDQpibG9ja19zaGFwZSA9IDEyOA0KDQptb2R1bGUgPSBsb2FkX2lubGluZSgNCiAgICBuYW1lPSdmcDhfbW0nLA0KICAgIGNwcF9zb3VyY2VzPVtDUFBfV1JBUFBFUl0sDQogICAgY3VkYV9zb3VyY2VzPVtDVURBX1NSQ10sDQogICAgZnVuY3Rpb25zPVsnZnA4X21tJ10sDQogICAgdmVyYm9zZT1UcnVlLA0KICAgIGV4dHJhX2N1ZGFfY2ZsYWdzPVsiLS1vZmZsb2FkLWFyY2g9Z2Z4OTQyIiwgIi1zdGQ9YysrMjAiLCAiLU8yIl0sDQopDQojIE8xIGlzIHNsb3csIC1PMiBpcyBlcXVhbCB0byBub3RoaW5nLCAgLU8zIGlzIHNsaWdodGx5IHNsb3dlciB0aGFuIE8yIChtYXliZSBzYW1lKQ0KDQpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoNCiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQ0KICAgIG1vZHVsZS5mcDhfbW0oYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYykNCiAgICByZXR1cm4gYw0K
No newline at end of file
+ IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCiNpbmNsdWRlIDxyb2N3bW1hL3JvY3dtbWEuaHBwPg0KI2luY2x1ZGUgPGNvb3BlcmF0aXZlX2dyb3Vwcy5oPg0KbmFtZXNwYWNlIGNnID0gY29vcGVyYXRpdmVfZ3JvdXBzOw0KDQp1c2luZyBmbG9hdHgxNiA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7DQoNCiNkZWZpbmUgS19KVU1QIDEyOA0KI2RlZmluZSBXTU1BX00gMzINCiNkZWZpbmUgV01NQV9OIDMyDQojZGVmaW5lIFdNTUFfSyAxNg0KI2RlZmluZSBXQVJQX1NJWkUgNjQNCiNkZWZpbmUgV01NQV9QTEFDRUhPTERFUiA0DQoNCl9fZ2xvYmFsX18gdm9pZCBjdXN0b21fa2VybmVsKGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIEFfcHRyLCBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6KiBCX3B0ciwgY29uc3QgZmxvYXQqIEFzX3B0ciwgY29uc3QgZmxvYXQqIEJzX3B0ciwgcm9jd21tYTo6YmZsb2F0MTZfdCogQ19wdHIsIGludCBNLCBpbnQgTiwgaW50IEspIHsNCiAgICAvKg0KICAgIGEgYmxvY2sgY292ZXJzIDMyeDMyeDQgZWxlbQ0KICAgIG51bV93YXJwX3ggPSA0DQogICAgbnVtX3dhcnBfeSA9IDENCiAgICBibG9jayBzaXplID0gKCg2NCAqIG51bV93YXJwX3gpLCBudW1fd2FycF95KSA9IDI1NiB0aHJlYWRzDQogICAgZ3JpZCBzaXplID0gKE4gLyAobnVtX3dhcnBfeCAqIFdNTUFfTiksIE0gLyAobnVtX3dhcnBfeSAqIFdNTUFfTSkpDQoNCiAgICBBOiBNIHggSyBjb2wtbWFqICAtLS0gQXMgKDF4MTI4IHNjYWxpbmcpOiBNIHggSy8xMjggY29sLW1hag0KICAgIEI6IEsgeCBOIHJvdy1tYWogIC0tLSBCcyAoMTI4eDEyOCBzY2FsaW5nKTogSy8xMjggeCBOLzEyOCByb3ctbWFqDQogICAgQzogTSB4IE4gcm93LW1hag0KICAgIE0sIE4gaXMgZGl2aXNpYmxlIGJ5IDY0DQogICAgSyBpcyBkaXZpc2libGUgYnkgMTI4DQogICAgKi8gICAgICANCiAgICBpbnQgd2FycF9pZHhfeCA9IHRocmVhZElkeC54IC8gV0FSUF9TSVpFOw0KICAgIC8vaW50IHdhcnBfaWR4X3kgPSB0aHJlYWRJZHgueTsNCiAgICANCiAgICBpbnQgbGRhID0gTTsNCiAgICBpbnQgbGRiID0gTjsNCiAgICBpbnQgbGRjID0gTjsNCiAgICANCiAgICBpbnQgc24gPSAoTiArIDEyOCAtIDEpIC8gMTI4Ow0KDQogICAgLy9pbnQgcm93X2Jhc2VfQyA9IChibG9ja0lkeC55ICogYmxvY2tEaW0ueSArIHRocmVhZElkeC55KSAqIFdNTUFfTTsgLy8gYWRkIHRoaXMgbGluZSBjYXVzZXMgdGhlIGNvZGUgdG8gYmUgMnggc2xvd2VyDQogICAgDQogICAgaW50IHJvd19iYXNlX0MgPSBibG9ja0lkeC55ICogV01NQV9NOw0KICAgIGludCBjb2xfYmFzZV9DID0gKGJsb2NrSWR4LnggKiBibG9ja0RpbS54IC8gV0FSUF9TSVpFICsgd2FycF9pZHhfeCkgKiBXTU1BX047DQoNCiAgICAvL2ludCBjb2xfYmFzZV9DID0gKGJsb2NrSWR4LnggKiAyICsgd2FycF9pZHhfeCkgKiBXTU1BX047IC8vIG51bV93YXJwX3ggPSAyDQogICAgLy9pbnQgY29sX2Jhc2VfQyA9IChibG9ja0lkeC54ICogNCArIHdhcnBfaWR4X3gpICogV01NQV9OOyAvLyBudW1fd2FycF94ID0gNA0KDQogICAgLy9pbnQgY29sX2Jhc2VfQyA9IChibG9ja0lkeC54ICsgd2FycF9pZHhfeCkgKiBXTU1BX047IC8vIG51bV93YXJwX3ggPSAyDQogICAgDQoNCiAgICAvL2ludCB3YXJwX2lkeF94ID0gdGhyZWFkSWR4LnggLyBXQVJQX1NJWkU7IC8vIFRoaXMgY2F1c2UgdGltZSBvdXQNCiAgICAvL2ludCB3YXJwX2lkeF95ID0gdGhyZWFkSWR4Lnk7DQogICAgLy9pbnQgcm93X2Jhc2VfQyA9IChibG9ja0lkeC55ICogYmxvY2tEaW0ueSArIHRocmVhZElkeC55KSAqIFdNTUFfTTsNCiAgICAvL2ludCBjb2xfYmFzZV9DID0gKGJsb2NrSWR4LnggKiBibG9ja0RpbS54ICsgdGhyZWFkSWR4LngpLyBXQVJQX1NJWkUgKiBXTU1BX04gOw0KDQogICAgLy8gaWYgKHJvd19iYXNlX0MgPj0gTSkgcmV0dXJuOw0KICAgIGlmIChjb2xfYmFzZV9DID49IE4pIHJldHVybjsgIA0KICAgIA0KICAgIGF1dG8gZnJhZ19hY2NfbWFzdGVyID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6YWNjdW11bGF0b3IsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIGZsb2F0PigpOw0KICAgIHJvY3dtbWE6OmZpbGxfZnJhZ21lbnQoZnJhZ19hY2NfbWFzdGVyLCAwLmYpOw0KDQogICAgZm9yIChpbnQga2Jhc2UgPSAwOyBrYmFzZSA8IEs7IGtiYXNlICs9IEtfSlVNUCkgew0KICAgICAgICBhdXRvIGZyYWdfYWNjX2Jsb2NrID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6YWNjdW11bGF0b3IsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIGZsb2F0PigpIDsNCiAgICAgICAgcm9jd21tYTo6ZmlsbF9mcmFnbWVudChmcmFnX2FjY19ibG9jaywgMC5mKTsNCg0KICAgICAgICBhdXRvIGZyYWdfYSA9IHJvY3dtbWE6OmZyYWdtZW50PHJvY3dtbWE6Om1hdHJpeF9hLCBXTU1BX00sIFdNTUFfTiwgV01NQV9LLCBfX2hpcF9mcDhfZTRtM19mbnV6LCByb2N3bW1hOjpjb2xfbWFqb3I+KCk7DQogICAgICAgIGF1dG8gZnJhZ19iID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6bWF0cml4X2IsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIF9faGlwX2ZwOF9lNG0zX2ZudXosIHJvY3dtbWE6OnJvd19tYWpvcj4oKTsgIA0KDQogICAgICAgIGZvciAoaW50IGttaW5pID0gMDsga21pbmkgPCBLX0pVTVA7IGttaW5pICs9IFdNTUFfSykgew0KICAgICAgICAgICAgaW50IGtfb2Zmc2V0ID0ga2Jhc2UgKyBrbWluaTsgICAgICAgICAgICANCiAgICAgICAgICAgIHJvY3dtbWE6OmxvYWRfbWF0cml4X3N5bmMoZnJhZ19hLCBBX3B0ciArIHJvd19iYXNlX0MgKyBrX29mZnNldCAqIGxkYSwgbGRhKTsgICAgICAgICAgICANCiAgICAgICAgICAgIHJvY3dtbWE6OmxvYWRfbWF0cml4X3N5bmMoZnJhZ19iLCBCX3B0ciArIGtfb2Zmc2V0ICogbGRiICsgY29sX2Jhc2VfQywgbGRiKTsgICAgICAgIA0KICAgICAgICAgICAgcm9jd21tYTo6bW1hX3N5bmMoZnJhZ19hY2NfYmxvY2ssIGZyYWdfYSwgZnJhZ19iLCBmcmFnX2FjY19ibG9jayk7DQogICAgICAgIH0gLy8gZW5kIGZvciBrbWluaQ0KDQogICAgICAgIC8vIExvYWQgc2NhbGVyDQoNCiAgICAgICAgX19zaGFyZWRfXyBmbG9hdCB0aWxlU2NhbGVBW1dNTUFfTV1bV01NQV9OICsgMV07IC8vIGNvbC1tYWpvciB0aWxlU2NhbGVBW2NvbF1bcm93XQ0KICAgICAgICBmbG9hdCBzY2FsZUIgPSBCc19wdHJbKGtiYXNlIC8gMTI4KSAqIHNuICsgKGJsb2NrSWR4LnggKiAoKGJsb2NrRGltLnggLyBXQVJQX1NJWkUpICogV01NQV9OKSAvIDEyOCldOyANCg0KICAgICAgICBpZiAodGhyZWFkSWR4LnggPCBXTU1BX00pIHsgICAgICAgICAgIA0KICAgICAgICAgICAgZmxvYXQgdmFsID0gQXNfcHRyW3Jvd19iYXNlX0MgKyB0aHJlYWRJZHgueCArIE0gKiAoa2Jhc2UgLyAxMjgpXSAqIHNjYWxlQjsNCiAgICAgICAgICAgIC8vIFJlcGxpY2F0ZSB0aGlzIHZhbHVlIGFjcm9zcyBhbGwgY29sdW1ucw0KICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBXTU1BX047ICsraikgew0KICAgICAgICAgICAgICAgIHRpbGVTY2FsZUFbal1bdGhyZWFkSWR4LnhdID0gdmFsOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gY2c6OnRocmVhZF9ibG9jayB0aGlzX3RiID0gY2c6OnRoaXNfdGhyZWFkX2Jsb2NrKCk7DQogICAgICAgIC8vIGF1dG8gdGlsZTE2ID0gY2c6OnRpbGVkX3BhcnRpdGlvbjwxNj4odGhpc190Yik7IC8vIDEyOCB0aHJlYWRzIC0+IDE2IHggOA0KICAgICAgICAvLyBpbnQgdDE2eCA9IHRpbGUxNi50aHJlYWRfcmFuaygpOw0KICAgICAgICAvLyBpbnQgdDE2eSA9IHRpbGUxNi5tZXRhX2dyb3VwX3JhbmsoKTsNCg0KICAgICAgICAvLyBmbG9hdCB2YWwgPSBBc19wdHJbcm93X2Jhc2VfQyArIHQxNnggKyBNICogKGtiYXNlIC8gMTI4KV0gKiBzY2FsZUI7DQogICAgICAgIC8vIHRpbGVTY2FsZUFbdDE2eV1bdDE2eF0gPSB2YWw7DQogICAgICAgIC8vIHRpbGVTY2FsZUFbdDE2eSArIDhdW3QxNnhdID0gdmFsOw0KDQogICAgICAgIA0KICAgICAgICAvLyBpZiAodDE2eSA9PSAwKXsNCiAgICAgICAgLy8gICAgIGZsb2F0IHZhbCA9IEFzX3B0cltyb3dfYmFzZV9DICsgdDE2eCArIE0gKiAoa2Jhc2UgLyAxMjgpXSAqIHNjYWxlQjsNCiAgICAgICAgLy8gICAgIGZvciAoaW50IGogPSAwOyBqIDwgV01NQV9OOyArK2opIHsNCiAgICAgICAgLy8gICAgICAgICB0aWxlU2NhbGVBW2pdW3QxNnhdID0gdmFsOw0KICAgICAgICAvLyAgICAgfSAgICAgICAgICAgIA0KICAgICAgICAvLyB9DQoNCiAgICAgICAgX19zeW5jdGhyZWFkcygpOw0KICAgICAgICANCiAgICAgICAgYXV0byBmcmFnX3NjYWxlQSA9IHJvY3dtbWE6OmZyYWdtZW50PHJvY3dtbWE6OmFjY3VtdWxhdG9yLCBXTU1BX00sIFdNTUFfTiwgV01NQV9LLCBmbG9hdD4oKTsNCiAgICAgICAgcm9jd21tYTo6bG9hZF9tYXRyaXhfc3luYyhmcmFnX3NjYWxlQSwgJnRpbGVTY2FsZUFbMF1bMF0sIFdNTUFfTiArIDEsIHJvY3dtbWE6Om1lbV9jb2xfbWFqb3IpOw0KDQogICAgICAgIC8vIFRPRE86IFRyeSB0byB1c2UgZnJhZ19hY2NfbWFzdGVyIGFzIGJmbG9hdDE2LCBzZWUgaWYgaXQncyB3aXRoaW4gZXJyb3IuDQogICAgICAgIC8vIEFwcGx5IHNjYWxlcg0KICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdfYWNjX21hc3Rlci5udW1fZWxlbWVudHM7ICsraSkgew0KICAgICAgICAgICAgZnJhZ19hY2NfbWFzdGVyLnhbaV0gKz0gZnJhZ19zY2FsZUEueFtpXSAqIGZyYWdfYWNjX2Jsb2NrLnhbaV07DQogICAgICAgIH0NCiAgICAgICAgDQogICAgfSAvLyBlbmQgZm9yIGtiYXNlDQogICANCiAgICAvLyBDb252ZXJ0IGZwMzIgdG8gYmYxNiBhbmQgc3RvcmUNCiAgICBhdXRvIGZyYWdfcmVzdWx0ID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6YWNjdW11bGF0b3IsIFdNTUFfTSwgV01NQV9OLCBXTU1BX1BMQUNFSE9MREVSLCByb2N3bW1hOjpiZmxvYXQxNl90PigpOyAvL1BsYWNlaG9sZGVyIGZyYWcNCiAgICANCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdfYWNjX21hc3Rlci5udW1fZWxlbWVudHM7ICsraSkgew0KICAgICAgICBmcmFnX3Jlc3VsdC54W2ldID0gKHJvY3dtbWE6OmJmbG9hdDE2X3QpZnJhZ19hY2NfbWFzdGVyLnhbaV07DQogICAgfQ0KICAgDQogICAgcm9jd21tYTo6c3RvcmVfbWF0cml4X3N5bmMoQ19wdHIgKyByb3dfYmFzZV9DICogbGRjICsgY29sX2Jhc2VfQywgZnJhZ19yZXN1bHQsIGxkYywgcm9jd21tYTo6bWVtX3Jvd19tYWpvcik7DQp9DQoNCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpIHsNCiAgICBpbnQgTSA9IGEuc2l6ZSgwKTsNCiAgICBpbnQgTiA9IGIuc2l6ZSgwKTsNCiAgICBpbnQgSyA9IGEuc2l6ZSgxKTsNCg0KICAgIGludCBudW1fd2FycF94ID0gNDsNCiAgICBpbnQgbnVtX3dhcnBfeSA9IDE7DQogICAgZGltMyBibG9ja19zaXplKChXQVJQX1NJWkUgKiBudW1fd2FycF94KSwgbnVtX3dhcnBfeSk7DQogICAgZGltMyBncmlkX3NpemUoKE4gKyBudW1fd2FycF94ICogV01NQV9OIC0gMSkgLyAobnVtX3dhcnBfeCAqIFdNTUFfTiksIA0KICAgICAgICAgICAgICAgICAgIChNICsgbnVtX3dhcnBfeSAqIFdNTUFfTSAtIDEpIC8gKG51bV93YXJwX3kgKiBXTU1BX00pKTsNCg0KICAgIGN1c3RvbV9rZXJuZWw8PDxncmlkX3NpemUsIGJsb2NrX3NpemUsIDAsIDA+Pj4gKChfX2hpcF9mcDhfZTRtM19mbnV6KilhLmRhdGFfcHRyKCksIChfX2hpcF9mcDhfZTRtM19mbnV6KiliLmRhdGFfcHRyKCksIA0KICAgIGFzLmRhdGFfcHRyPGZsb2F0PigpLCBicy5kYXRhX3B0cjxmbG9hdD4oKSwgKHJvY3dtbWE6OmJmbG9hdDE2X3QqKWMuZGF0YV9wdHIoKSwgTSwgTiwgSyk7DQogICAgLy9DMTBfQ1VEQV9DSEVDSyhjdWRhR2V0TGFzdEVycm9yKCkpOw0KfQ0KIiIiDQoNCmltcG9ydCBvcw0Kb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyINCmltcG9ydCB0b3JjaA0KYmxvY2tfc2hhcGUgPSAxMjgNCg0KbW9kdWxlID0gbG9hZF9pbmxpbmUoDQogICAgbmFtZT0nZnA4X21tJywNCiAgICBjcHBfc291cmNlcz1bQ1BQX1dSQVBQRVJdLA0KICAgIGN1ZGFfc291cmNlcz1bQ1VEQV9TUkNdLA0KICAgIGZ1bmN0aW9ucz1bJ2ZwOF9tbSddLA0KICAgIHZlcmJvc2U9VHJ1ZSwNCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIiwgIi1PMiJdLA0KKQ0KIyBPMSBpcyBzbG93LCAtTzIgaXMgZXF1YWwgdG8gbm90aGluZywgIC1PMyBpcyBzbGlnaHRseSBzbG93ZXIgdGhhbiBPMiAobWF5YmUgc2FtZSkNCg0KZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6DQogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGENCiAgICBtb2R1bGUuZnA4X21tKGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMpDQogICAgcmV0dXJuIGMNCg==
No newline at end of file

Best evidence level for this revision: reported

JSON