From mboxrd@z Thu Jan 1 00:00:00 1970 From: oldham@codesourcery.com To: gcc-gnats@gcc.gnu.org Subject: debug/2851: dbxout.c's concat loses information Date: Wed, 16 May 2001 18:46:00 -0000 Message-id: <20010517013937.30975.qmail@sourceware.cygnus.com> X-SW-Source: 2001-05/msg00420.html List-Id: >Number: 2851 >Category: debug >Synopsis: dbxout.c's concat loses information >Confidential: no >Severity: non-critical >Priority: low >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed May 16 18:46:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Jeffrey D. Oldham >Release: unknown-1.0 >Organization: >Environment: dbx debugging, e.g., i686-pc-linux-gnu >Description: dbxout.c:dbxout_symbol_location()'s CONCAT code assumes a COMPLEX_TYPE type even though record types can also use CONCAT. The current code hacks around the latter case, but it loses debugging information. >How-To-Repeat: cc1plus -g hoo.ii -quiet >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="hoo.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hoo.ii" dHlwZWRlZiBpbnQgcHRyZGlmZl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CgpuYW1l c3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQoKZXh0 ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsK ICB9IGRpdl90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9u ZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsK ICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZf dDsKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsK CmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKZXh0 ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9u ZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKX19leHRlbnNpb25f XyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93 ICgpOwoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBz dHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhy b3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7 CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93 ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg X19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwpfX2V4dGVuc2lvbl9fCmV4 dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9f ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp bnQgX19iYXNlKSB0aHJvdyAoKTsKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKICBz dHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1s2XTsKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQg aW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50 ICpfX2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0 b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgX19sb2NhbGVf dCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9f c3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpf X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs ZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gZmxv YXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxv bmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CmV4 dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7 CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cg KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIg KiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dy b3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu dCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGlu dCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93 ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJu YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9f CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29u c3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqIF9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKmw2NGEgKGxv bmcgaW50IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFy ICpfX3MpIHRocm93ICgpOwoKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191 X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVk IGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lv bl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lv bl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKdHlwZWRlZiBzaWduZWQgY2hhciBf X2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQg c2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZf dDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191 aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2lu dDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWlu dDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3Qg X19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90 Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlw ZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVm IF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3Nz aXplX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19ybGltX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ybGlt NjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50 IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7Cgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYg Y2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIGxvbmcg aW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKdHlwZWRlZiB1bnNp Z25lZCBsb25nIGludCBfX2ZkX21hc2s7CnR5cGVkZWYgc3RydWN0CiAgewoKICAgIF9fZmRfbWFz ayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCiAgfSBfX2ZkX3Nl dDsKCnR5cGVkZWYgaW50IF9fa2V5X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lw Y19waWRfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBf X2Jsa2NudDY0X3Q7Cgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3Vf cXVhZF90IF9fZnNibGtjbnQ2NF90OwoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5 cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCnR5cGVkZWYgX191X2xvbmcgX19pbm82 NF90OwoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fdF9z Y2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKdHlwZWRl ZiBpbnQgX19pbnRwdHJfdDsKCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVk X3ByaW9yaXR5OwogIH07CgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9f c3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVz Y3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kZXRh Y2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3Nj aGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBf X2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwog IHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCnR5cGVkZWYgc3RydWN0CnsK ICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19j X3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVt bXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9r ZXlfdDsKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291 bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3Qg X3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKdHlwZWRlZiBz dHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKdHlwZWRl ZiBpbnQgcHRocmVhZF9vbmNlX3Q7Cgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7 CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJz OwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVh ZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19y d19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCnR5cGVkZWYg c3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcnds b2NrYXR0cl90OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7Cgp0eXBlZGVm IF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3Vf aW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFk X3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7 Cgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCnR5cGVk ZWYgX19pbm82NF90IGlubzY0X3Q7Cgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7Cgp0eXBlZGVmIF9f Z2lkX3QgZ2lkX3Q7Cgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCnR5cGVkZWYgX19ubGlua190 IG5saW5rX3Q7Cgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7Cgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7 Cgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKdHlw ZWRlZiBfX2lkX3QgaWRfdDsKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7Cgp0eXBlZGVmIF9f ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKdHlwZWRlZiBfX2tl eV90IGtleV90OwoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCnR5cGVkZWYgX190aW1lX3Qg dGltZV90OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50Owp0eXBlZGVmIGlu dCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50 IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50 IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50 IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIHVu c2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3Qg X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKCnR5cGVkZWYgaW50IF9fc2ln X2F0b21pY190OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3Zh bFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3Nl dF90OwoKc3RydWN0IHRpbWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwogICAgbG9uZyBp bnQgdHZfbnNlYzsKICB9OwoKZXh0ZXJuICJDIiB7CgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYg X19mZF9tYXNrIGZkX21hc2s7Cgp0eXBlZGVmIF9fZmRfc2V0IGZkX3NldDsKZXh0ZXJuIGludCBf X3NlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3Jp dGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkg dGhyb3cgKCk7CgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVh ZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0 IHRpbWV2YWwgKl9fdGltZW91dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9f bmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0 ICpfX2V4Y2VwdGZkcywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsIGNvbnN0IF9f c2lnc2V0X3QgKl9fc2lnbWFzaykgdGhyb3cgKCk7Cgp9Cgp0eXBlZGVmIF9fYmxrY250X3QgYmxr Y250X3Q7CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CnR5cGVkZWYgX19mc2ZpbGNu dF90IGZzZmlsY250X3Q7Cgp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVm IF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2Zp bGNudDY0X3Q7Cgp9CgpleHRlcm4gaW50MzJfdCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoKZXh0 ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgpleHRlcm4g dm9pZCAqIGluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqIF9fc3RhdGVidWYs IHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogc2V0c3RhdGUgKHZv aWQgKiBfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGlu dDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBp bnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50 MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3Qg cmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVu c2lnbmVkIGludCBfX3NlZWQsIHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3RhdGVidWYsIHNpemVfdCBf X3N0YXRlbGVuLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp OwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yICh2b2lkICogX19yZXN0cmljdCBfX3N0YXRlYnVmLCBz dHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGlu dCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQg X19zZWVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2Vl ZCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRl cm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAo KTsKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg aW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCmV4 dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpy YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCmV4dGVybiB2 b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25l ZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhy b3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzdd KSB0aHJvdyAoKTsKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBp bnQgeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwogICAgdW5zaWduZWQgc2hvcnQg aW50IGM7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hbM107CiAgICBpbnQgaW5pdDsKICB9 OwoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg X19idWZmZXIsIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4g aW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFu ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3Vs dCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAq X19yZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93 ICgpOwoKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNd LCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19y ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0 IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg X19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0 IGludCBfX3hzdWJpWzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy LCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNy YW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZl cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19z ZWVkMTZ2WzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRl cm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sIHN0cnVjdCBk cmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKiBtYWxsb2MgKHNp emVfdCBfX3NpemUpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgKiBjYWxsb2MgKHNpemVfdCBfX25t ZW1iLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogcmVhbGxvYyAodm9p ZCAqIF9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZv aWQgKiBfX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqIF9fcHRyKSB0 aHJvdyAoKTsKCmV4dGVybiAiQyIgewoKZXh0ZXJuIHZvaWQgKiBhbGxvY2EgKHNpemVfdCBfX3Np emUpIHRocm93ICgpOwoKfQoKZXh0ZXJuIHZvaWQgKiB2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRo cm93ICgpOwoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX25vcmV0dXJuX18pKTsKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9p ZCkpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQg X19zdGF0dXMsIHZvaWQgKiBfX2FyZyksIHZvaWQgKiBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4g aW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiBfX2FyZyks IHZvaWQgKiBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCmV4dGVybiB2b2lkIF9F eGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p KTsKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsK CmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgpleHRl cm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1 ZSwgaW50IF9fcmVwbGFjZSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCB1bnNldGVudiAoX19jb25z dCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhy b3cgKCk7CmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoK ZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgpleHRlcm4gY2hh ciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgp OwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUs IGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7Cgp0eXBlZGVmIGludCAoKl9f Y29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKdHlwZWRlZiBf X2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCmV4dGVybiB2b2lkICogYnNlYXJjaCAoX19j b25zdCB2b2lkICogX19rZXksIF9fY29uc3Qgdm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIs IHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKZXh0ZXJuIHZvaWQgcXNv cnQgKHZvaWQgKiBfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBh cl9mbl90IF9fY29tcGFyKTsKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBf X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KSB0aHJvdyAoKQog ICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkaXZfdCBkaXYgKGludCBf X251bWVyLCBpbnQgX19kZW5vbSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20p IHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25f XyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLCBsb25nIGxvbmcg aW50IF9fZGVub20pIHRocm93ICgpCgogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK ZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y ZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCmV4dGVy biBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJp Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgpleHRlcm4gY2hh ciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93 ICgpOwoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln aXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJv dyAoKTsKCmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhy b3cgKCk7CgpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz dHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93 ICgpOwoKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu dCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jl c3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9y IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2Rl Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXpl X3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp Y3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgp OwpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cg KCk7CgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gaW50 IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKZXh0ZXJuIHNp emVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0 b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X3B3Y3MsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3Qg Y2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoq X19yZXN0cmljdCBfX29wdGlvbnAsIF9fY29uc3QgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBf X3Rva2VucywgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwpleHRlcm4gdm9p ZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKZXh0ZXJuIGludCBncmFu dHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkg dGhyb3cgKCk7CgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKZXh0 ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKfQpuYW1lc3Bh Y2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90OwogIGV4dGVybiAiQyIg ZG91YmxlIGF0b2YoY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IGF0b2koY29uc3QgY2hh ciopOwogIGV4dGVybiAiQyIgbG9uZyBpbnQgYXRvbChjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJD IiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIqLCBjaGFyKiopOwogIGV4dGVybiAiQyIgZmxvYXQg c3RydG9mKGNvbnN0IGNoYXIqLCBjaGFyKiopOwogIGV4dGVybiAiQyIgbG9uZyBpbnQgc3RydG9s KGNvbnN0IGNoYXIqLCBjaGFyKiosIGludCk7CiAgZXh0ZXJuICJDIiB1bnNpZ25lZCBsb25nIGlu dCBzdHJ0b3VsKGNvbnN0IGNoYXIqLCBjaGFyKiosIGludCk7CiAgZXh0ZXJuICJDIiBpbnQgcmFu ZCh2b2lkKTsKICBleHRlcm4gIkMiIHZvaWQgc3JhbmQodW5zaWduZWQgaW50KTsKICBleHRlcm4g IkMiIHZvaWQqIGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CiAgZXh0ZXJuICJDIiB2b2lkIGZyZWUo dm9pZCopOwogIGV4dGVybiAiQyIgdm9pZCogbWFsbG9jKHNpemVfdCk7CiAgZXh0ZXJuICJDIiB2 b2lkKiByZWFsbG9jKHZvaWQqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgdm9pZCBhYm9ydCh2b2lk KTsKICBleHRlcm4gIkMiIGludCBhdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKTsKICBleHRlcm4g IkMiIHZvaWQgZXhpdChpbnQpOwogIGV4dGVybiAiQyIgdm9pZCBfRXhpdChpbnQpOwogIGV4dGVy biAiQyIgY2hhcipnZXRlbnYoY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IHN5c3RlbShj b25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiB2b2lkKiBic2VhcmNoKGNvbnN0IHZvaWQqLCBjb25z dCB2b2lkKiwgc2l6ZV90LCBzaXplX3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAo KmNvbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CiAgZXh0ZXJuICJDIiB2b2lkIHFz b3J0KHZvaWQqLCBzaXplX3QsIHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgq Y29tcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKICBleHRlcm4gIkMiIGludCBhYnMo aW50KTsKICBleHRlcm4gIkMiIGxvbmcgaW50IGxhYnMobG9uZyBpbnQpOwogIGV4dGVybiAiQyIg ZGl2X3QgZGl2KGludCwgaW50KTsKICBleHRlcm4gIkMiIGxkaXZfdCBsZGl2KGxvbmcgaW50LCBs b25nIGludCk7CiAgZXh0ZXJuICJDIiBpbnQgbWJsZW4oY29uc3QgY2hhciosIHNpemVfdCk7CiAg ZXh0ZXJuICJDIiBpbnQgbWJ0b3djKHdjaGFyX3QqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBl eHRlcm4gIkMiIGludCB3Y3RvbWIoY2hhciosIHdjaGFyX3QpOwogIGV4dGVybiAiQyIgc2l6ZV90 IG1ic3Rvd2NzKHdjaGFyX3QqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHNp emVfdCB3Y3N0b21icyhjaGFyKiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7CiAgZXh0ZXJuICJD IiBsb25nIGRvdWJsZSBzdHJ0b2xkKGNvbnN0IGNoYXIqLCBjaGFyKiopOwoKfQoKZXh0ZXJuICJD IiB7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRv dWJsZV90OwpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9f YWNvcyAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpOyBleHRl cm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJs ZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91Ymxl IGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChk b3VibGUgX195LCBkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KTsg ZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91 YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJs ZSB0YW4gKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KTsKCmV4 dGVybiB2b2lkIHNpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19j b3N4KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBk b3VibGUgKl9fY29zeCk7CgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpOyBleHRlcm4g ZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSBf X3gpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIHRh bmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoZG91YmxlIF9feCk7CgpleHRl cm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3Vi bGUgX194KTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl IF9fYXNpbmggKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCk7 IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGV4cCAo ZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRv dWJsZSBleHAxMCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9f eCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3Bv dzEwIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJsZSBfX3gsIGludCAq X19leHBvbmVudCk7IGV4dGVybiBkb3VibGUgX19mcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4 cG9uZW50KTsKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50 KTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCk7Cgpl eHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJs ZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUg X19sb2cxMCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRv dWJsZSAqX19pcHRyKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAq X19pcHRyKTsKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl IF9fZXhwbTEgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCk7 IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGxvZ2Ig KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9feCk7CgpleHRlcm4g ZG91YmxlIGV4cDIgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9f eCk7CgpleHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9n MiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9f eSk7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKZXh0ZXJu IGRvdWJsZSBzcXJ0IChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3NxcnQgKGRvdWJsZSBf X3gpOwoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVy biBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgpleHRlcm4gZG91Ymxl IGNicnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9feCk7Cgpl eHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91 YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpOyBl eHRlcm4gZG91YmxlIF9fZmxvb3IgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBmbW9kIChk b3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpOwoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91YmxlIF9fdmFs dWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJs ZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gaW50IGZpbml0 ZSAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBk b3VibGUgaW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl eHRlcm4gZG91YmxlIF9faW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0 ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKZXh0ZXJuIGRvdWJs ZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAo ZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUg X195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2ln biAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK ZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBf X3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gaW50IGlzbmFuIChk b3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGRvdWJs ZSBqMCAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpOwpleHRlcm4gZG91Ymxl IGoxIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUg am4gKGludCwgZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRvdWJsZSk7CmV4dGVy biBkb3VibGUgeTAgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKTsKZXh0ZXJu IGRvdWJsZSB5MSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpOwpleHRlcm4g ZG91YmxlIHluIChpbnQsIGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3VibGUp OwoKZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJs ZSk7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKGRv dWJsZSk7CmV4dGVybiBkb3VibGUgbGdhbW1hIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fbGdh bW1hIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHRnYW1tYSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJs ZSBfX3RnYW1tYSAoZG91YmxlKTsKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSk7IGV4dGVy biBkb3VibGUgX19nYW1tYSAoZG91YmxlKTsKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJs ZSwgaW50ICpfX3NpZ25nYW1wKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGlu dCAqX19zaWduZ2FtcCk7CgpleHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpOyBleHRlcm4g ZG91YmxlIF9fcmludCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91 YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g ZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91Ymxl IF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91 YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBf X3kpOwoKZXh0ZXJuIGRvdWJsZSBzY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbik7IGV4dGVy biBkb3VibGUgX19zY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbik7CgpleHRlcm4gZG91Ymxl IHNjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbik7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRv dWJsZSBfX3gsIGludCBfX24pOwoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCk7IGV4dGVy biBpbnQgX19pbG9nYiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJs ZSBfX3gsIGxvbmcgaW50IF9fbik7IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChkb3VibGUgX194 LCBsb25nIGludCBfX24pOwoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpOyBl eHRlcm4gZG91YmxlIF9fbmVhcmJ5aW50IChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgcm91 bmQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fcm91bmQgKGRvdWJsZSBfX3gpOwoKZXh0 ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBp bnQgKl9fcXVvKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9f eSwgaW50ICpfX3F1byk7CgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSBfX3gpOyBleHRl cm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs cmludCAoZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUg X194KTsKCmV4dGVybiBsb25nIGludCBscm91bmQgKGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBp bnQgX19scm91bmQgKGRvdWJsZSBfX3gpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kIChk b3VibGUgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kIChkb3VibGUgX194KTsK CmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3Vi bGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KTsKCmV4dGVybiBkb3VibGUgZm1heCAo ZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3VibGUgX194 LCBkb3VibGUgX195KTsKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91YmxlIF9feCwgZG91YmxlIF9f eSk7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBkb3VibGUgX195KTsKCmV4dGVy biBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgpleHRlcm4gaW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFsdWUpCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opOyBleHRlcm4gZG91YmxlIF9fZm1hIChkb3VibGUg X194LCBkb3VibGUgX195LCBkb3VibGUgX196KTsKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBf X3gpOyBleHRlcm4gZmxvYXQgX19hY29zZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBhc2lu ZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCk7CgpleHRlcm4g ZmxvYXQgYXRhbmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2F0YW5mIChmbG9hdCBfX3gp OwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpOyBleHRlcm4gZmxv YXQgX19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBjb3NmIChm bG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0 IHNpbmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCk7CgpleHRl cm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194 KTsKCmV4dGVybiB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQg Kl9fY29zeCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54 LCBmbG9hdCAqX19jb3N4KTsKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194KTsgZXh0ZXJu IGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9f eCk7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IHRhbmhm IChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KTsKCmV4dGVybiBm bG9hdCBhY29zaGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194 KTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2FzaW5o ZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCk7IGV4dGVybiBm bG9hdCBfX2F0YW5oZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBleHBmIChmbG9hdCBfX3gp OyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGV4cDEwZiAo ZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZs b2F0IHBvdzEwZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gp OwoKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpOyBleHRl cm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KTsKCmV4dGVybiBm bG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpOyBleHRlcm4gZmxvYXQgX19s ZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpOwoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZs b2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQg bG9nMTBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0IF9feCk7Cgpl eHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cik7IGV4dGVybiBmbG9h dCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpOwoKZXh0ZXJuIGZsb2F0IGV4cG0x ZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpOwoKZXh0ZXJu IGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBf X3gpOwoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2di ZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZs b2F0IF9fZXhwMmYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgbG9nMmYgKGZsb2F0IF9feCk7 IGV4dGVybiBmbG9hdCBfX2xvZzJmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZs b2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpOwoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19z cXJ0ZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQg X195KTsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgpleHRl cm4gZmxvYXQgY2JydGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBf X3gpOwoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19jZWls ZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCk7 IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBmbW9kZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19mbW9kZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpOwoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBf X3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gaW50IGZpbml0ZWYg KGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9h dCBpbmZuYW5mIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl cm4gZmxvYXQgX19pbmZuYW5mIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKZXh0ZXJuIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7IGV4dGVybiBm bG9hdCBfX2RyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgpleHRlcm4gZmxvYXQgc2lnbmlm aWNhbmRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9f eCk7CgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9f eCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQg bmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg ZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVl KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCk7 IGV4dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCk7IGV4 dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0KTsg ZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQp OyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpOyBl eHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9hdCk7 IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCk7CgpleHRlcm4gZmxvYXQgZXJmZiAoZmxv YXQpOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCk7CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxv YXQpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgbGdhbW1hZiAo ZmxvYXQpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmIChmbG9hdCk7CmV4dGVybiBmbG9hdCB0Z2Ft bWFmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KTsKCmV4dGVybiBmbG9h dCBnYW1tYWYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fZ2FtbWFmIChmbG9hdCk7CgpleHRlcm4g ZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsgZXh0ZXJuIGZsb2F0IF9f bGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsKCmV4dGVybiBmbG9hdCByaW50ZiAo ZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxv YXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBuZXh0dG93YXJkZiAo ZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg ZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gs IGZsb2F0IF9feSk7CgpleHRlcm4gZmxvYXQgc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbik7 IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pOwoKZXh0ZXJuIGZs b2F0IHNjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbik7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYg KGZsb2F0IF9feCwgaW50IF9fbik7CgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KTsgZXh0 ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxv YXQgX194LCBsb25nIGludCBfX24pOyBleHRlcm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194 LCBsb25nIGludCBfX24pOwoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCk7IGV4 dGVybiBmbG9hdCBfX25lYXJieWludGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgcm91bmRm IChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCk7CgpleHRlcm4g ZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0 ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCmV4dGVybiBmbG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1 byk7IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9f cXVvKTsKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25nIGlu dCBfX2xyaW50ZiAoZmxvYXQgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxv YXQgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpOwoKZXh0 ZXJuIGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25nIGludCBfX2xyb3Vu ZGYgKGZsb2F0IF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9hdCBfX3gp OyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZs b2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChm bG9hdCBfX3gsIGZsb2F0IF9feSk7CgpleHRlcm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwgZmxv YXQgX195KTsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCmV4 dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19m bWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlmIChm bG9hdCBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBp bnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgpleHRlcm4gZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9f eik7IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3op OwpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFz aW5sIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBk b3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9u ZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gp OwoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lu bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9uZyBkb3Vi bGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpOyBleHRl cm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIHZvaWQgc2lu Y29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAq X19jb3N4KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGNv c2hsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBk b3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194KTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9u ZyBkb3VibGUgdGFuaGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Rh bmhsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBk b3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gp OwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IGF0YW5obCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmhsIChs b25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9f eCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4g bG9uZyBkb3VibGUgZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUg X19leHAxMGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChs b25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cxMGwgKGxvbmcgZG91Ymxl IF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAq X19leHBvbmVudCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194 LCBpbnQgKl9fZXhwb25lbnQpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3Vi bGUgX194LCBpbnQgX19leHBvbmVudCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9u ZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCk7CgpleHRlcm4gbG9uZyBkb3VibGUgbG9nbCAo bG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9uZyBkb3VibGUg X194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRv dWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0 cik7CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4g bG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3Vi bGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwg KGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91Ymxl IF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0 ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19leHAybCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cybCAo bG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91Ymxl IF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3dsIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9f eCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KTsKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3Vi bGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NlaWxsIChs b25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBf X3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmFi c2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zt b2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgpleHRlcm4gaW50IF9faXNp bmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7Cgpl eHRlcm4gaW50IF9fZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3Vi bGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91 YmxlIGluZm5hbmwgKGludCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2luZm5hbmwgKGludCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgX195KTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwg KGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9u ZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5s IChfX2NvbnN0IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl cm4gbG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1 ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcg ZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25n IGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25n IGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGlu dCwgbG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3Vi bGUpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRv dWJsZSBfX3kwbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRv dWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9u ZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5s IChpbnQsIGxvbmcgZG91YmxlKTsKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJs ZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcg ZG91YmxlIGVyZmNsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNsIChs b25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsIChsb25nIGRvdWJsZSk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcgZG91 YmxlIHRnYW1tYWwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAo bG9uZyBkb3VibGUpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKTsKCmV4dGVybiBsb25nIGRv dWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOyBleHRlcm4gbG9u ZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOwoKZXh0 ZXJuIGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0 ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0 dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFpbmRlcmwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKCmV4dGVybiBsb25nIGRvdWJsZSBz Y2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbik7CgpleHRlcm4g bG9uZyBkb3VibGUgc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKTsKCmV4dGVybiBp bnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRv dWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgaW50IF9fbik7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgaW50IF9fbik7CgpleHRlcm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9u ZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3Vi bGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25n IGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbXF1b2wgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19x dW8pOwoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxv bmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpOwpleHRlcm4gbG9uZyBsb25nIGludCBs bHJpbnRsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwg KGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUg X194KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KTsKZXh0ZXJu IGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGxv bmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUg ZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKCmV4dGVybiBs b25nIGRvdWJsZSBmbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRl cm4gbG9uZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp OwoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSk7CgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9fdmFs dWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGludCBfX3NpZ25i aXRsIChsb25nIGRvdWJsZSBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCmV4dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSwgbG9uZyBkb3VibGUgX196KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feik7CmV4dGVybiBpbnQg c2lnbmdhbTsKZW51bQogIHsKICAgIEZQX05BTiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9a RVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAgICBGUF9OT1JNQUwKCiAgfTsKdHlwZWRlZiBlbnVt CnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09D Xwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVS U0lPTjsKc3RydWN0IF9fZXhjZXB0aW9uCgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAqbmFt ZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFsOwog IH07CgpleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93 ICgpOwp9Cm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2Nt YXRoX3Bvd2VyKF9UcCwgdW5zaWduZWQgaW50KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog IGlubGluZSBfVHAKICAgIF9fY21hdGhfYWJzKF9UcCBfX3gpCiAgICB7CiAgICAgIHJldHVybiBf X3ggPCBfVHAoKSA/IC1fX3ggOiBfX3g7CiAgICB9CgogIGlubGluZSBsb25nCiAgYWJzKGxvbmcg X19pKSB7IHJldHVybiA6OmxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcg X19pLCBsb25nIF9faikgeyByZXR1cm4gOjpsZGl2KF9faSwgX19qKTsgfQoKICBpbmxpbmUgZmxv YXQKICBhYnMoZmxvYXQgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQogIGlu bGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KCiAg aW5saW5lIGZsb2F0CiAgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194KTsgfQoK ICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuZihfX3gpOyB9 CgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6 OmF0YW4yZihfX3ksIF9feCk7IH0KCiAgaW5saW5lIGZsb2F0CiAgY2VpbChmbG9hdCBfX3gpIHsg cmV0dXJuIDo6Y2VpbGYoX194KTsgfQogIGlubGluZSBmbG9hdAogIGNvcyhmbG9hdCBfX3gpIHsg cmV0dXJuIDo6Y29zZihfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7 IHJldHVybiA6OmNvc2hmKF9feCk7IH0KCiAgaW5saW5lIGZsb2F0CiAgZXhwKGZsb2F0IF9feCkg eyByZXR1cm4gOjpleHBmKF9feCk7IH0KCiAgaW5saW5lIGZsb2F0CiAgZmFicyhmbG9hdCBfX3gp IHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CiAgaW5saW5lIGZsb2F0CiAgZmxvb3Io ZmxvYXQgX194KSB7IHJldHVybiA6OmZsb29yZihfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIGZt b2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9Cgog IGlubGluZSBmbG9hdAogIGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpm cmV4cGYoX194LCBfX2V4cCk7IH0KCiAgaW5saW5lIGZsb2F0CiAgbGRleHAoZmxvYXQgX194LCBp bnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBmKF9feCwgX19leHApOyB9CgogIGlubGluZSBmbG9h dAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgogIGlubGluZSBmbG9h dAogIGxvZzEwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2cxMGYoX194KTsgfQoKICBpbmxpbmUg ZmxvYXQKICBtb2RmKGZsb2F0IF9feCwgZmxvYXQqIF9faXB0cikgeyByZXR1cm4gOjptb2RmZihf X3gsIF9faXB0cik7IH0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAg ICBfX3Bvd19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fbiA8 IDAKICAgICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikKICAgICAgICA6IF9f Y21hdGhfcG93ZXIoX194LCBfX24pOwogICAgfQoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQg X194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6cG93ZihfX3gsIF9feSk7IH0KCiAgaW5saW5lIGZs b2F0CiAgcG93KGZsb2F0IF9feCwgaW50IF9fbikKICB7CiAgICByZXR1cm4gX19wb3dfaGVscGVy KF9feCwgX19uKTsKICB9CgogIGlubGluZSBmbG9hdAogIHNpbihmbG9hdCBfX3gpIHsgcmV0dXJu IDo6c2luZihfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIHNpbmgoZmxvYXQgX194KSB7IHJldHVy biA6OnNpbmhmKF9feCk7IH0KICBpbmxpbmUgZmxvYXQKICBzcXJ0KGZsb2F0IF9feCkgeyByZXR1 cm4gOjpzcXJ0ZihfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIHRhbihmbG9hdCBfX3gpIHsgcmV0 dXJuIDo6dGFuZihfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194KSB7IHJl dHVybiA6OnRhbmhmKF9feCk7IH0KCiAgZXh0ZXJuICJDIiBkb3VibGUgYWNvcyhkb3VibGUgX194 KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgYXNpbihkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBk b3VibGUgYXRhbihkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgYXRhbjIoZG91Ymxl IF9feSwgZG91YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91YmxlIGNlaWwoZG91YmxlIF9feCk7 CgogIGV4dGVybiAiQyIgZG91YmxlIGNvcyhkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3Vi bGUgY29zaChkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgZXhwKGRvdWJsZSBfX3gp OwoKICBpbmxpbmUgZG91YmxlCiAgZmFicyhkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5f ZmFicyhfX3gpOyB9CgogIGlubGluZSBkb3VibGUKICBhYnMoZG91YmxlIF9feCkgeyByZXR1cm4g X19idWlsdGluX2ZhYnMoX194KTsgfQoKICBleHRlcm4gIkMiIGRvdWJsZSBmbG9vcihkb3VibGUg X194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgZm1vZChkb3VibGUgX194LCBkb3VibGUgX195KTsK CiAgZXh0ZXJuICJDIiBkb3VibGUgZnJleHAoZG91YmxlIF9feCwgaW50KiBfX2V4cCk7CgogIGV4 dGVybiAiQyIgZG91YmxlIGxkZXhwKGRvdWJsZSBfX3gsIGludCBfX2V4cCk7CgogIGV4dGVybiAi QyIgZG91YmxlIGxvZyhkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgbG9nMTAoZG91 YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91YmxlIG1vZGYoZG91YmxlIF9feCwgZG91YmxlKiBf X2lwdHIpOwoKICBleHRlcm4gIkMiIGRvdWJsZSBwb3coZG91YmxlIF9feCwgZG91YmxlIF9feSk7 CgogIGlubGluZSBkb3VibGUKICBwb3coZG91YmxlIF9feCwgaW50IF9faSkKICB7CiAgICByZXR1 cm4gX19wb3dfaGVscGVyKF9feCwgX19pKTsKICB9CgogIGV4dGVybiAiQyIgZG91YmxlIHNpbihk b3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgc2luaChkb3VibGUgX194KTsKCiAgZXh0 ZXJuICJDIiBkb3VibGUgc3FydChkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgdGFu KGRvdWJsZSBfX3gpOwoKICBleHRlcm4gIkMiIGRvdWJsZSB0YW5oKGRvdWJsZSBfX3gpOwoKICBp bmxpbmUgbG9uZyBkb3VibGUKICBhYnMobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0 aW5fZmFic2woX194KTsgfQogIGlubGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUg X194KSB7IHJldHVybiA6OmFjb3NsKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXNp bihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXNpbmwoX194KTsgfQoKICBpbmxpbmUgbG9u ZyBkb3VibGUKICBhdGFuKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFubChfX3gpOyB9 CgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4yKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3Vi bGUgX194KSB7IHJldHVybiA6OmF0YW4ybChfX3ksIF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91 YmxlCiAgY2VpbChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y2VpbGwoX194KTsgfQogIGlu bGluZSBsb25nIGRvdWJsZQogIGNvcyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zbChf X3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvc2gobG9uZyBkb3VibGUgX194KSB7IHJl dHVybiA6OmNvc2hsKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZXhwKGxvbmcgZG91 YmxlIF9feCkgeyByZXR1cm4gOjpleHBsKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg ZmFicyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CiAg aW5saW5lIGxvbmcgZG91YmxlCiAgZmxvb3IobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmZs b29ybChfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgogIGlubGlu ZSBsb25nIGRvdWJsZQogIGZyZXhwKGxvbmcgZG91YmxlIF9feCwgaW50KiBfX2V4cCkgeyByZXR1 cm4gOjpmcmV4cGwoX194LCBfX2V4cCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbGRleHAo bG9uZyBkb3VibGUgX194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBsKF9feCwgX19leHAp OyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGxvZyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu IDo6bG9nbChfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGxvZzEwKGxvbmcgZG91Ymxl IF9feCkgeyByZXR1cm4gOjpsb2cxMGwoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBt b2RmKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUqIF9faXB0cikgeyByZXR1cm4gOjptb2Rm bChfX3gsIF9faXB0cik7IH0KICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9feSk7IH0KCiAgaW5s aW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7CiAgICBy ZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsKICB9CgogIGlubGluZSBsb25nIGRvdWJsZQog IHNpbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c2lubChfX3gpOyB9CgogIGlubGluZSBs b25nIGRvdWJsZQogIHNpbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnNpbmhsKF9feCk7 IH0KICBpbmxpbmUgbG9uZyBkb3VibGUKICBzcXJ0KGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4g OjpzcXJ0bChfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbihsb25nIGRvdWJsZSBf X3gpIHsgcmV0dXJuIDo6dGFubChfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgo bG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmhsKF9feCk7IH0KCn0KCm5hbWVzcGFjZSBz dGQgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBfVHAKICAgIF9fY21hdGhf cG93ZXIoX1RwIF9feCwgdW5zaWduZWQgaW50IF9fbikKICAgIHsKICAgICAgX1RwIF9feSA9IF9f biAlIDIgPyBfX3ggOiAxOwoKICAgICAgd2hpbGUgKF9fbiA+Pj0gMSkKICAgICAgICB7CiAgICAg ICAgICBfX3ggPSBfX3ggKiBfX3g7CiAgICAgICAgICBpZiAoX19uICUgMikKICAgICAgICAgICAg X195ID0gX195ICogX194OwogICAgICAgIH0KCiAgICAgIHJldHVybiBfX3k7CiAgICB9Cn0KCnR5 cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CnR5cGVkZWYgX19nbnVjX3Zh X2xpc3QgdmFfbGlzdDsKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6dmFfbGlzdDsKfQoKZXh0 ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgd2ludF90Owp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChf X21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0df dWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnN0cnVjdCBfSU9f anVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKc3RydWN0 IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJ TEUgKl9zYnVmOwoKICBpbnQgX3BvczsKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFn czsKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBf SU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9w dHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciog X0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9i YXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJz OwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtz aXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1u OwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICBf SU9fbG9ja190ICpfbG9jazsKICBfX29mZjY0X3QgX29mZnNldDsKCiAgaW50IF91bnVzZWQyWzE2 XTsKCn07CgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz IF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRv dXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwp0eXBlZGVm IF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKiBfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNp emVfdCBfX25ieXRlcyk7CnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKiBf X2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbik7CnR5cGVkZWYgaW50IF9f aW9fc2Vla19mbiAodm9pZCAqIF9fY29va2llLCBfX29mZl90IF9fcG9zLCBpbnQgX193KTsKCnR5 cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKiBfX2Nvb2tpZSk7Cgp0eXBlZGVmIF9faW9f cmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29v a2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1 bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsK CnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAq d3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9J T19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNf dCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1 Y3QgX0lPX0ZJTEUgX19maWxlOwogIGNvbnN0IHZvaWQgKl9fdnRhYmxlOwogIHZvaWQgKl9fY29v a2llOwogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jdGlvbnM7Cn07CgpleHRl cm4gIkMiIHsKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpl eHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3Zl cmZsb3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2dldGMgKF9J T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lP X0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19m cCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93 ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cg KCk7CgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0 ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9f dmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwg X19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9J T192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qs IF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKCmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9J T19GSUxFICosIGludCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dl dG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0 X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgp OwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGlu dCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUg KikgdGhyb3cgKCk7Cgp9Cgp0eXBlZGVmIF9fb2ZmX3QgZnBvc190OwoKdHlwZWRlZiBfX29mZjY0 X3QgZnBvczY0X3Q7CgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4 dGVybiBGSUxFICpzdGRlcnI7CgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2Zp bGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xk LCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2 b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7Cgpl eHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnRt cG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25z dCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkgdGhyb3cgKCk7CgpleHRlcm4gaW50 IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxF ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cg KCk7CgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVu YW1lLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4g RklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0 aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7Cgpl eHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFt ZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3Qg Y2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQg Kl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21v ZGVzLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKZXh0 ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywgc2l6 ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBzZXRidWYg KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93 ICgpOwoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFy ICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7Cgpl eHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9f cmVzdHJpY3QgX19idWYsIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc2V0 bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmcHJpbnRmIChG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p IHRocm93ICgpOwoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRo cm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmlu dGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc25wcmludGYg KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19m b3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgX192c25wcmludGYgKGNo YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCgogICAgIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwpleHRlcm4gaW50IHZz bnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkK CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7Cgpl eHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2YsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoKICAgICBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGlu dCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm10LCAuLi4pIHRocm93ICgpCgogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h dF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19y ZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pIHRocm93 ICgpCgogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkp OwoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCgogICAgIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYg KGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikgdGhyb3cgKCkK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCmV4 dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4g aW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCB2ZnNjYW5mIChG SUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBf X2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9y bWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQog ICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgpleHRl cm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCgog ICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgpleHRl cm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0YyAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIGlu dCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBm cHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMg KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHV0Y2hhciAo aW50IF9fYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBf X2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2Vk IChpbnQgX19jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpmZ2V0c191 bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cg KCk7CmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5l cHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hh ciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19k ZWxpbWl0ZXIsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIF9f c3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsIHNpemVfdCAqX19y ZXN0cmljdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJu IGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKZXh0ZXJu IGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBz aXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsIHNpemVf dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVf dCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwg c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKZXh0ZXJuIHNpemVf dCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwg c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4g c2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBz aXplX3QgX19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwg aW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CmV4dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwg aW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpIHRocm93ICgpOwoKZXh0ZXJuIGludCBm c2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50 IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRo cm93ICgpOwoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK CmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBm ZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3Vu bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tl ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNo YXIgKl9fcykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBj aGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJu IF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCmV4dGVybiBpbnQgZmlsZW5v IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNo YXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqY3Rlcm1p ZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3Mp IHRocm93ICgpOwoKc3RydWN0IG9ic3RhY2s7CgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChz dHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRm IChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSB0aHJvdyAoKTsKZXh0ZXJu IHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZ0 cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgZnVubG9j a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKfQpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu ZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIGV4dGVybiAiQyIgaW50IHJlbW92ZShjb25z dCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgcmVuYW1lKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFy Kik7CiAgZXh0ZXJuICJDIiBGSUxFKiB0bXBmaWxlKHZvaWQpOwogIGV4dGVybiAiQyIgY2hhciog dG1wbmFtKGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBmY2xvc2UoRklMRSopOwogIGV4dGVybiAi QyIgaW50IGZmbHVzaChGSUxFKik7CiAgZXh0ZXJuICJDIiBGSUxFKiBmb3Blbihjb25zdCBjaGFy KiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgRklMRSogZnJlb3Blbihjb25zdCBjaGFyKiwg Y29uc3QgY2hhciosIEZJTEUqKTsKICBleHRlcm4gIkMiIHZvaWQgc2V0YnVmKEZJTEUqLCBjaGFy Kik7CiAgZXh0ZXJuICJDIiBpbnQgc2V0dmJ1ZihGSUxFKiwgY2hhciosIGludCwgc2l6ZV90KTsK ICBleHRlcm4gIkMiIGludCBmcHJpbnRmKEZJTEUqLCBjb25zdCBjaGFyKiwgLi4uKTsKICBleHRl cm4gIkMiIGludCBmc2NhbmYoRklMRSosIGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIg aW50IHByaW50Zihjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBzY2FuZihjb25z dCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBzbnByaW50ZihjaGFyICosIHNpemVfdCwg Y29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgc3ByaW50ZihjaGFyICosIGNvbnN0 IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHNzY2FuZihjb25zdCBjaGFyKiwgY29uc3Qg Y2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgdmZwcmludGYoRklMRSosIGNvbnN0IGNoYXIq LCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2ZnNjYW5mKEZJTEUqLCBjb25zdCBjaGFyKiwg dmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnByaW50Zihjb25zdCBjaGFyKiwgdmFfbGlzdCk7 CiAgZXh0ZXJuICJDIiBpbnQgdnNjYW5mKGNvbnN0IGNoYXIqLCB2YV9saXN0KTsKICBleHRlcm4g IkMiIGludCB2c25wcmludGYoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIHZhX2xpc3QpOwog IGV4dGVybiAiQyIgaW50IHZzcHJpbnRmKGNoYXIqLCBjb25zdCBjaGFyKiwgdmFfbGlzdCk7CiAg ZXh0ZXJuICJDIiBpbnQgdnNzY2FuZihjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHZhX2xpc3Qp OwogIGV4dGVybiAiQyIgaW50IGZnZXRjKEZJTEUgKik7CiAgZXh0ZXJuICJDIiBjaGFyICpmZ2V0 cyhjaGFyKiwgaW50LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZnB1dGMoaW50LCBGSUxFKik7 CiAgZXh0ZXJuICJDIiBpbnQgZnB1dHMoY29uc3QgY2hhciosIEZJTEUqKTsKICBleHRlcm4gIkMi IGludCBnZXRjKEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBnZXRjaGFyKHZvaWQpOwogIGV4dGVy biAiQyIgY2hhciAqZ2V0cyhjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgcHV0YyhpbnQsIEZJTEUq KTsKICBleHRlcm4gIkMiIGludCBwdXRjaGFyKGludCk7CiAgZXh0ZXJuICJDIiBpbnQgcHV0cyhj b25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgdW5nZXRjKGludCwgRklMRSopOwogIGV4dGVy biAiQyIgc2l6ZV90IGZyZWFkKHZvaWQqLCBzaXplX3QsIHNpemVfdCwgRklMRSopOwogIGV4dGVy biAiQyIgc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUqKTsK ICBleHRlcm4gIkMiIGludCBmZ2V0cG9zKEZJTEUqLCBmcG9zX3QqKTsKICBleHRlcm4gIkMiIGlu dCBmc2VlayhGSUxFKiwgbG9uZyBpbnQsIGludCk7CiAgZXh0ZXJuICJDIiBpbnQgZnNldHBvcyhG SUxFKiwgY29uc3QgZnBvc190Kik7CiAgZXh0ZXJuICJDIiBsb25nIGludCBmdGVsbChGSUxFKik7 CiAgZXh0ZXJuICJDIiB2b2lkIHJld2luZChGSUxFKik7CiAgZXh0ZXJuICJDIiB2b2lkIGNsZWFy ZXJyKEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmZW9mKEZJTEUqKTsKICBleHRlcm4gIkMiIGlu dCBmZXJyb3IoRklMRSopOwogIGV4dGVybiAiQyIgdm9pZCBwZXJyb3IoY29uc3QgY2hhciopOwp9 Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IGNvdW50OwogIHdpbnRfdCB2YWx1ZTsKfSBtYnN0YXRl X3Q7CnN0cnVjdCB0bTsKCmV4dGVybiAiQyIgewoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2No YXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3Ny YykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmlj dCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f ZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVy biB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikg dGhyb3cgKCk7CgpleHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j b25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgd2Nz Y2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRo cm93ICgpOwoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBf X2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIGludCBf X3djc2Nhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9f czIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX3djc25jYXNlY21w X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3Qg X19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgd2NzY29sbCAoX19j b25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKZXh0 ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsIF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf X3djc2NvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIs IF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBfX3djc3hmcm1fbCAo d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uLCBfX2xvY2Fs ZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAgKF9fY29uc3Qgd2No YXJfdCAqX19zKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIgKF9fY29uc3Qgd2No YXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2Nz cmNociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCmV4 dGVybiBzaXplX3Qgd2NzY3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hh cl90ICpfX3JlamVjdCkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3NwbiAoX19jb25zdCB3 Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkgdGhyb3cgKCk7CgpleHRl cm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hh cl90ICpfX2FjY2VwdCkgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0 IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpIHRocm93ICgp OwpleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRy KSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgX193Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19z KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0 aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNp emVfdCBfX21heGxlbikgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25z dCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVy biBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsIF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB3 Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsIF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90 ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3Qg X19uKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdj aGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB3aW50X3QgYnRvd2MgKGlu dCBfX2MpIHRocm93ICgpOwoKZXh0ZXJuIGludCB3Y3RvYiAod2ludF90IF9fYykgdGhyb3cgKCk7 CgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0aHJvdyAoKTsK CmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICpfX3ApIHRocm93 ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJf dCBfX3djLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgpleHRlcm4gc2l6 ZV90IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLCBt YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IG1icmxl biAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICpf X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJf dCAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgpleHRlcm4g c2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCB3Y2hhcl90 ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3Qg X19wcykgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19kc3QsIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX25t Yywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7Cgpl eHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3Qg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX253Yywgc2l6ZV90IF9fbGVuLCBt YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CmV4dGVybiBpbnQgd2N3aWR0aCAo d2ludF90IF9fYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdjaGFy X3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp OwoKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVy biBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVy biB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cg KCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u ZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3 Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4 dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90 ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9u ZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp IHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9f CmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwg X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l ZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9j YWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9sIChfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgX193Y3N0b2ZfbCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IF9fd2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90 ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRl cm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93 ICgpOwoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3Jv dXApIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9pbnRlcm5hbCAoX19j b25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xf aW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7Cgpl eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFy X3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKiBfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs b25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICogX19yZXN0 cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBp bnQgX19ncm91cCkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25n IGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJp Y3QgX19ucHRyLCB3Y2hhcl90ICoqIF9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGlu dCBfX2dyb3VwKSB0aHJvdyAoKTsKZXh0ZXJuIHdjaGFyX3QgKndjcGNweSAod2NoYXJfdCAqX19k ZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3 Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBf X24pIHRocm93ICgpOwp9Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9Cgpu YW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90 cmFpdHM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp dHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU PiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+ IHN0cmluZzsKCn0KCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0 aW9uKHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgogIHZvaWQKICBf X3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQp OwoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19s ZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jh bmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KCm5hbWVzcGFjZSBz dGQKewoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K ICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1i dWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg ICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3Ry ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8 X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf aXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBh bGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh clQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAg IGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19m aWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ ID4KICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj X2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9 IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICBjbGFzcyBpb3NfYmFz ZTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1N0YXRlPiBzdHJ1Y3QgZnBvczsKCiAgdHlwZWRlZiBmcG9z PG1ic3RhdGVfdD4gc3RyZWFtcG9zOwoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAg dHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNf aXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3Ry ZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBi YXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0 cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxj aGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0 cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBl ZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJl YW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07 Cn0KCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNsYXNzIGNvbXBs ZXg7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb21wbGV4PGZsb2F0PjsKICB0ZW1wbGF0ZTw+IGNsYXNz IGNvbXBsZXg8ZG91YmxlPjsKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvbXBsZXg8bG9uZyBkb3VibGU+ OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBhYnMoY29uc3QgY29tcGxleDxfVHA+Jik7 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgYXJnKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIG5vcm0oY29uc3QgY29tcGxleDxfVHA+Jik7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IGNvbmooY29uc3QgY29tcGxleDxf VHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG9sYXIoY29uc3Qg X1RwJiwgY29uc3QgX1RwJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+ IGNvcyhjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBs ZXg8X1RwPiBjb3NoKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4gY29tcGxleDxfVHA+IGV4cChjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBsb2coY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gbG9nMTAoY29uc3QgY29tcGxleDxfVHA+Jik7 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG93KGNvbnN0IGNvbXBsZXg8 X1RwPiYsIGludCk7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG93KGNv bnN0IGNvbXBsZXg8X1RwPiYsIGNvbnN0IF9UcCYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g Y29tcGxleDxfVHA+IHBvdyhjb25zdCBjb21wbGV4PF9UcD4mLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG93KGNvbnN0IF9UcCYsIGNvbnN0IGNvbXBsZXg8 X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IHNpbihjb25zdCBj b21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBzaW5o KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxf VHA+IHNxcnQoY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBj b21wbGV4PF9UcD4gdGFuKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gY29tcGxleDxfVHA+IHRhbmgoY29uc3QgY29tcGxleDxfVHA+Jik7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgIGNsYXNzIGNvbXBsZXgKICAgIHsKICAgIHB1YmxpYzoKICAgICAg dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIGNvbXBsZXgoY29uc3QgX1RwJiA9IF9UcCgp LCBjb25zdCBfVHAgJiA9IF9UcCgpKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAg ICAgICBjb21wbGV4KGNvbnN0IGNvbXBsZXg8X1VwPiYpOwoKICAgICAgX1RwIHJlYWwoKSBjb25z dDsKICAgICAgX1RwIGltYWcoKSBjb25zdDsKCiAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3I9 KGNvbnN0IF9UcCYpOwogICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKz0oY29uc3QgX1RwJik7 CiAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3ItPShjb25zdCBfVHAmKTsKICAgICAgY29tcGxl eDxfVHA+JiBvcGVyYXRvcio9KGNvbnN0IF9UcCYpOwogICAgICBjb21wbGV4PF9UcD4mIG9wZXJh dG9yLz0oY29uc3QgX1RwJik7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CiAgICAgICAg Y29tcGxleDxfVHA+JiBvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKz0oY29uc3Qg Y29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21w bGV4PF9UcD4mIG9wZXJhdG9yLT0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKj0oY29uc3QgY29t cGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4 PF9UcD4mIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVXA+Jik7CgogICAgcHJpdmF0ZToKICAg ICAgX1RwIF9NX3JlYWwsIF9NX2ltYWc7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgX1RwCiAgICBjb21wbGV4PF9UcD46OnJlYWwoKSBjb25zdCB7IHJldHVybiBf TV9yZWFsOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIGNv bXBsZXg8X1RwPjo6aW1hZygpIGNvbnN0IHsgcmV0dXJuIF9NX2ltYWc7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgaW5saW5lCiAgICBjb21wbGV4PF9UcD46OmNvbXBsZXgoY29uc3Qg X1RwJiBfX3IsIGNvbnN0IF9UcCYgX19pKQogICAgOiBfTV9yZWFsKF9fciksIF9NX2ltYWcoX19p KSB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Vw PgogICAgaW5saW5lCiAgICBjb21wbGV4PF9UcD46OmNvbXBsZXgoY29uc3QgY29tcGxleDxfVXA+ JiBfX3opCiAgICA6IF9NX3JlYWwoX196LnJlYWwoKSksIF9NX2ltYWcoX196LmltYWcoKSkgeyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBsZXg8 X1RwPjo6b3BlcmF0b3I9KGNvbnN0IF9UcCYgX190KQogICAgewogICAgIF9NX3JlYWwgPSBfX3Q7 CiAgICAgX01faW1hZyA9IF9UcCgpOwogICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBsZXg8X1Rw Pjo6b3BlcmF0b3IrPShjb25zdCBfVHAmIF9fdCkKICAgIHsKICAgICAgX01fcmVhbCArPSBfX3Q7 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW5saW5lIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3ItPShjb25zdCBf VHAmIF9fdCkKICAgIHsKICAgICAgX01fcmVhbCAtPSBfX3Q7CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29tcGxleDxfVHA+JgogICAgY29t cGxleDxfVHA+OjpvcGVyYXRvcio9KGNvbnN0IF9UcCYgX190KQogICAgewogICAgICBfTV9yZWFs ICo9IF9fdDsKICAgICAgX01faW1hZyAqPSBfX3Q7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29tcGxleDxfVHA+JgogICAgY29tcGxleDxf VHA+OjpvcGVyYXRvci89KGNvbnN0IF9UcCYgX190KQogICAgewogICAgICBfTV9yZWFsIC89IF9f dDsKICAgICAgX01faW1hZyAvPSBfX3Q7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgogICAgY29tcGxl eDxfVHA+JgogICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVXA+JiBf X3opCiAgICB7CiAgICAgIF9NX3JlYWwgPSBfX3oucmVhbCgpOwogICAgICBfTV9pbWFnID0gX196 LmltYWcoKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CiAgICBjb21wbGV4PF9UcD4mCiAgICBjb21w bGV4PF9UcD46Om9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVXA+JiBfX3opCiAgICB7CiAgICAg IF9NX3JlYWwgKz0gX196LnJlYWwoKTsKICAgICAgX01faW1hZyArPSBfX3ouaW1hZygpOwogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9VcD4KICAgIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBsZXg8X1RwPjo6b3Bl cmF0b3ItPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikKICAgIHsKICAgICAgX01fcmVhbCAtPSBf X3oucmVhbCgpOwogICAgICBfTV9pbWFnIC09IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg X1VwPgogICAgY29tcGxleDxfVHA+JgogICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcio9KGNvbnN0 IGNvbXBsZXg8X1VwPiYgX196KQogICAgewogICAgICBjb25zdCBfVHAgX19yID0gX01fcmVhbCAq IF9fei5yZWFsKCkgLSBfTV9pbWFnICogX196LmltYWcoKTsKICAgICAgX01faW1hZyA9IF9NX3Jl YWwgKiBfX3ouaW1hZygpICsgX01faW1hZyAqIF9fei5yZWFsKCk7CiAgICAgIF9NX3JlYWwgPSBf X3I7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgogICAgY29tcGxleDxfVHA+JgogICAgY29tcGxleDxf VHA+OjpvcGVyYXRvci89KGNvbnN0IGNvbXBsZXg8X1VwPiYgX196KQogICAgewogICAgICBjb25z dCBfVHAgX19yID0gX01fcmVhbCAqIF9fei5yZWFsKCkgKyBfTV9pbWFnICogX196LmltYWcoKTsK ICAgICAgY29uc3QgX1RwIF9fbiA9IG5vcm0oX196KTsKICAgICAgX01faW1hZyA9IChfTV9yZWFs ICogX196LmltYWcoKSAtIF9NX2ltYWcgKiBfX3oucmVhbCgpKSAvIF9fbjsKICAgICAgX01fcmVh bCA9IF9fciAvIF9fbjsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvcisoY29uc3QgY29t cGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29t cGxleDxfVHA+IChfX3gpICs9IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvcisoY29uc3QgY29tcGxleDxfVHA+JiBfX3gs IGNvbnN0IF9UcCYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChfX3gpICs9IF9feTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBv cGVyYXRvcisoY29uc3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyBy ZXR1cm4gY29tcGxleDxfVHA+IChfX3kpICs9IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvci0oY29uc3QgY29tcGxleDxf VHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxf VHA+IChfX3gpIC09IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg Y29tcGxleDxfVHA+CiAgICBvcGVyYXRvci0oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0 IF9UcCYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChfX3gpIC09IF9feTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRv ci0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4g Y29tcGxleDxfVHA+IChfX3gpIC09IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvciooY29uc3QgY29tcGxleDxfVHA+JiBf X3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChf X3gpICo9IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxl eDxfVHA+CiAgICBvcGVyYXRvciooY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IF9UcCYg X195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChfX3gpICo9IF9feTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvciooY29u c3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29tcGxl eDxfVHA+IChfX3kpICo9IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxp bmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvci8oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNv bnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChfX3gpIC89 IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+ CiAgICBvcGVyYXRvci8oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IF9UcCYgX195KQog ICAgeyByZXR1cm4gY29tcGxleDxfVHA+IChfX3gpIC89IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvci8oY29uc3QgX1Rw JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+ IChfX3gpIC89IF9feTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29t cGxleDxfVHA+CiAgICBvcGVyYXRvcisoY29uc3QgY29tcGxleDxfVHA+JiBfX3gpCiAgICB7IHJl dHVybiBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8 X1RwPgogICAgb3BlcmF0b3ItKGNvbnN0IGNvbXBsZXg8X1RwPiYgX194KQogICAgeyByZXR1cm4g Y29tcGxleDxfVHA+KC1fX3gucmVhbCgpLCAtX194LmltYWcoKSk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgY29tcGxleDxf VHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gX194LnJlYWwo KSA9PSBfX3kucmVhbCgpICYmIF9feC5pbWFnKCkgPT0gX195LmltYWcoKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBjb21w bGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBfX3gucmVhbCgpID09 IF9feSAmJiBfX3guaW1hZygpID09IF9UcCgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9UcCYgX194LCBjb25zdCBjb21w bGV4PF9UcD4mIF9feSkKICAgIHsgcmV0dXJuIF9feCA9PSBfX3kucmVhbCgpICYmIF9UcCgpID09 IF9feS5pbWFnKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yIT0oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1Rw PiYgX195KQogICAgeyByZXR1cm4gX194LnJlYWwoKSAhPSBfX3kucmVhbCgpIHx8IF9feC5pbWFn KCkgIT0gX195LmltYWcoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3IhPShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBf X3kpCiAgICB7IHJldHVybiBfX3gucmVhbCgpICE9IF9feSB8fCBfX3guaW1hZygpICE9IF9UcCgp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv ciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKICAgIHsgcmV0dXJu IF9feCAhPSBfX3kucmVhbCgpIHx8IF9UcCgpICE9IF9feS5pbWFnKCk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYsIGNvbXBsZXg8X1RwPiYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiwgY29uc3QgY29tcGxleDxfVHA+Jik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu bGluZSBfVHAKICAgIHJlYWwoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7IHJldHVybiBf X3oucmVhbCgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAg IGltYWcoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7IHJldHVybiBfX3ouaW1hZygpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIGFicyhjb25zdCBj b21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX1RwIF9feCA9IF9fei5yZWFsKCk7CiAgICAg IF9UcCBfX3kgPSBfX3ouaW1hZygpOwogICAgICBjb25zdCBfVHAgX19zID0gYWJzKF9feCkgKyBh YnMoX195KTsKICAgICAgaWYgKF9fcyA9PSBfVHAoKSkKICAgICAgICByZXR1cm4gX19zOwogICAg ICBfX3ggLz0gX19zOwogICAgICBfX3kgLz0gX19zOwogICAgICByZXR1cm4gX19zICogc3FydChf X3ggKiBfX3ggKyBfX3kgKiBfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbmxpbmUgX1RwCiAgICBhcmcoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7IHJldHVy biBhdGFuMihfX3ouaW1hZygpLCBfX3oucmVhbCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBpbmxpbmUgX1RwCiAgICBub3JtKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAg ewogICAgICBfVHAgX19yZXMgPSBhYnMoX196KTsKICAgICAgcmV0dXJuIF9fcmVzICogX19yZXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K ICAgIHBvbGFyKGNvbnN0IF9UcCYgX19yaG8sIGNvbnN0IF9UcCYgX190aGV0YSkKICAgIHsgcmV0 dXJuIGNvbXBsZXg8X1RwPihfX3JobyAqIGNvcyhfX3RoZXRhKSwgX19yaG8gKiBzaW4oX190aGV0 YSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K ICAgIGNvbmooY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7IHJldHVybiBjb21wbGV4PF9U cD4oX196LnJlYWwoKSwgLV9fei5pbWFnKCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIGNvcyhjb25zdCBjb21wbGV4PF9UcD4mIF9feikK ICAgIHsKICAgICAgY29uc3QgX1RwIF9feCA9IF9fei5yZWFsKCk7CiAgICAgIGNvbnN0IF9UcCBf X3kgPSBfX3ouaW1hZygpOwogICAgICByZXR1cm4gY29tcGxleDxfVHA+KGNvcyhfX3gpICogY29z aChfX3kpLCAtc2luKF9feCkgKiBzaW5oKF9feSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBjb3NoKGNvbnN0IGNvbXBsZXg8X1Rw PiYgX196KQogICAgewogICAgICBjb25zdCBfVHAgX194ID0gX196LnJlYWwoKTsKICAgICAgY29u c3QgX1RwIF9feSA9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oY29zaChf X3gpICogY29zKF9feSksIHNpbmgoX194KSAqIHNpbihfX3kpKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPgogICAgZXhwKGNvbnN0IGNvbXBs ZXg8X1RwPiYgX196KQogICAgeyByZXR1cm4gcG9sYXIoZXhwKF9fei5yZWFsKCkpLCBfX3ouaW1h ZygpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+ CiAgICBsb2coY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7IHJldHVybiBjb21wbGV4PF9U cD4obG9nKGFicyhfX3opKSwgYXJnKF9feikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIGxvZzEwKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196 KQogICAgeyByZXR1cm4gbG9nKF9feikgLyBsb2coX1RwKDEwLjApKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBzaW4oY29uc3QgY29tcGxl eDxfVHA+JiBfX3opCiAgICB7CiAgICAgIGNvbnN0IF9UcCBfX3ggPSBfX3oucmVhbCgpOwogICAg ICBjb25zdCBfVHAgX195ID0gX196LmltYWcoKTsKICAgICAgcmV0dXJuIGNvbXBsZXg8X1RwPihz aW4oX194KSAqIGNvc2goX195KSwgY29zKF9feCkgKiBzaW5oKF9feSkpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBzaW5oKGNvbnN0 IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBjb25zdCBfVHAgX194ID0gX196LnJlYWwo KTsKICAgICAgY29uc3QgX1RwIF9feSA9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiBjb21wbGV4 PF9UcD4oc2luaChfX3gpICogY29zKF9feSksIGNvc2goX194KSAqIHNpbihfX3kpKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29tcGxleDxfVHA+CiAgICBzcXJ0KGNvbnN0 IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfVHAgX194ID0gX196LnJlYWwoKTsKICAg ICAgX1RwIF9feSA9IF9fei5pbWFnKCk7CgogICAgICBpZiAoX194ID09IF9UcCgpKQogICAgICAg IHsKICAgICAgICAgIF9UcCBfX3QgPSBzcXJ0KGFicyhfX3kpIC8gMik7CiAgICAgICAgICByZXR1 cm4gY29tcGxleDxfVHA+KF9fdCwgX195IDwgX1RwKCkgPyAtX190IDogX190KTsKICAgICAgICB9 CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfVHAgX190ID0gc3FydCgyICogKGFicyhf X3opICsgYWJzKF9feCkpKTsKICAgICAgICAgIF9UcCBfX3UgPSBfX3QgLyAyOwogICAgICAgICAg cmV0dXJuIF9feCA+IF9UcCgpCiAgICAgICAgICAgID8gY29tcGxleDxfVHA+KF9fdSwgX195IC8g X190KQogICAgICAgICAgICA6IGNvbXBsZXg8X1RwPihhYnMoX195KSAvIF9fdCwgX195IDwgX1Rw KCkgPyAtX191IDogX191KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIHRhbihjb25zdCBjb21wbGV4PF9UcD4mIF9f eikKICAgIHsKICAgICAgcmV0dXJuIHNpbihfX3opIC8gY29zKF9feik7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIHRhbmgoY29uc3Qg Y29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIHJldHVybiBzaW5oKF9feikgLyBjb3NoKF9f eik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9U cD4KICAgIHBvdyhjb25zdCBjb21wbGV4PF9UcD4mIF9feiwgaW50IF9fbikKICAgIHsKICAgICAg cmV0dXJuIF9fcG93X2hlbHBlcihfX3osIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIHBvdyhjb25zdCBjb21wbGV4PF9UcD4m IF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7CiAgICAgIHJldHVybiBleHAoX195ICogbG9nKF9f eCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxf VHA+CiAgICBwb3coY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYg X195KQogICAgewogICAgICByZXR1cm4gZXhwKF9feSAqIGxvZyhfX3gpKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPgogICAgcG93KGNvbnN0 IF9UcCYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGV4 cChfX3kgKiBsb2coX194KSk7CiAgICB9CgogIHRlbXBsYXRlPD4gY2xhc3MgY29tcGxleDxmbG9h dD4KICB7CiAgcHVibGljOgogICAgdHlwZWRlZiBmbG9hdCB2YWx1ZV90eXBlOwoKICAgIGNvbXBs ZXgoZmxvYXQgPSAwLjBmLCBmbG9hdCA9IDAuMGYpOwoKICAgIGV4cGxpY2l0IGNvbXBsZXgoY29u c3QgY29tcGxleDxkb3VibGU+Jik7CiAgICBleHBsaWNpdCBjb21wbGV4KGNvbnN0IGNvbXBsZXg8 bG9uZyBkb3VibGU+Jik7CgogICAgZmxvYXQgcmVhbCgpIGNvbnN0OwogICAgZmxvYXQgaW1hZygp IGNvbnN0OwoKICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRvcj0oZmxvYXQpOwogICAgY29tcGxl eDxmbG9hdD4mIG9wZXJhdG9yKz0oZmxvYXQpOwogICAgY29tcGxleDxmbG9hdD4mIG9wZXJhdG9y LT0oZmxvYXQpOwogICAgY29tcGxleDxmbG9hdD4mIG9wZXJhdG9yKj0oZmxvYXQpOwogICAgY29t cGxleDxmbG9hdD4mIG9wZXJhdG9yLz0oZmxvYXQpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4KICAgICAgY29tcGxleDxmbG9hdD4mb3BlcmF0b3I9KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwog ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGZsb2F0PiYgb3BlcmF0b3Ir PShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4KICAgICAgY29t cGxleDxmbG9hdD4mIG9wZXJhdG9yLT0oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0 ZTxjbGFzcyBfVHA+CiAgICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRvcio9KGNvbnN0IGNvbXBs ZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8Y2xhc3MgX1RwPgogICAgICBjb21wbGV4PGZsb2F0PiZv cGVyYXRvci89KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwoKICBwcml2YXRlOgogICAgdHlwZWRlZiBf X2NvbXBsZXhfXyBmbG9hdCBfQ29tcGxleFQ7CiAgICBfQ29tcGxleFQgX01fdmFsdWU7CgogICAg Y29tcGxleChfQ29tcGxleFQgX196KSA6IF9NX3ZhbHVlKF9feikgeyB9CgogICAgZnJpZW5kIGNs YXNzIGNvbXBsZXg8ZG91YmxlPjsKICAgIGZyaWVuZCBjbGFzcyBjb21wbGV4PGxvbmcgZG91Ymxl PjsKICB9OwoKICBpbmxpbmUgZmxvYXQKICBjb21wbGV4PGZsb2F0Pjo6cmVhbCgpIGNvbnN0CiAg eyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0KCiAgaW5saW5lIGZsb2F0CiAgY29tcGxleDxm bG9hdD46OmltYWcoKSBjb25zdAogIHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CgogIGlu bGluZQogIGNvbXBsZXg8ZmxvYXQ+Ojpjb21wbGV4KGZsb2F0IHIsIGZsb2F0IGkpCiAgewogICAg X19yZWFsX18gX01fdmFsdWUgPSByOwogICAgX19pbWFnX18gX01fdmFsdWUgPSBpOwogIH0KCiAg aW5saW5lIGNvbXBsZXg8ZmxvYXQ+JgogIGNvbXBsZXg8ZmxvYXQ+OjpvcGVyYXRvcj0oZmxvYXQg X19mKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX19mOwogICAgX19pbWFnX18gX01fdmFs dWUgPSAwLjBmOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8ZmxvYXQ+ JgogIGNvbXBsZXg8ZmxvYXQ+OjpvcGVyYXRvcis9KGZsb2F0IF9fZikKICB7CiAgICBfX3JlYWxf XyBfTV92YWx1ZSArPSBfX2Y7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxl eDxmbG9hdD4mCiAgY29tcGxleDxmbG9hdD46Om9wZXJhdG9yLT0oZmxvYXQgX19mKQogIHsKICAg IF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fZjsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGlu ZSBjb21wbGV4PGZsb2F0PiYKICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3IqPShmbG9hdCBfX2Yp CiAgewogICAgX01fdmFsdWUgKj0gX19mOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5l IGNvbXBsZXg8ZmxvYXQ+JgogIGNvbXBsZXg8ZmxvYXQ+OjpvcGVyYXRvci89KGZsb2F0IF9fZikK ICB7CiAgICBfTV92YWx1ZSAvPSBfX2Y7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbXBsZXg8ZmxvYXQ+JgogIGNvbXBsZXg8ZmxvYXQ+ OjpvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgewogICAgX19yZWFsX18gX01f dmFsdWUgPSBfX3oucmVhbCgpOwogICAgX19pbWFnX18gX01fdmFsdWUgPSBfX3ouaW1hZygpOwog ICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBj b21wbGV4PGZsb2F0PiYKICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3IrPShjb25zdCBjb21wbGV4 PF9UcD4mIF9feikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSArPSBfX3oucmVhbCgpOwogICAg X19pbWFnX18gX01fdmFsdWUgKz0gX196LmltYWcoKTsKICAgIHJldHVybiAqdGhpczsKICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PGZsb2F0PiYKICAgIGNv bXBsZXg8ZmxvYXQ+OjpvcGVyYXRvci09KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewog ICAgIF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fei5yZWFsKCk7CiAgICAgX19pbWFnX18gX01fdmFs dWUgLT0gX196LmltYWcoKTsKICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PGZsb2F0PiYKICAgIGNvbXBsZXg8ZmxvYXQ+ OjpvcGVyYXRvcio9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfQ29tcGxl eFQgX190OwogICAgICBfX3JlYWxfXyBfX3QgPSBfX3oucmVhbCgpOwogICAgICBfX2ltYWdfXyBf X3QgPSBfX3ouaW1hZygpOwogICAgICBfTV92YWx1ZSAqPSBfX3Q7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8Zmxv YXQ+JgogICAgY29tcGxleDxmbG9hdD46Om9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVHA+JiBf X3opCiAgICB7CiAgICAgIF9Db21wbGV4VCBfX3Q7CiAgICAgIF9fcmVhbF9fIF9fdCA9IF9fei5y ZWFsKCk7CiAgICAgIF9faW1hZ19fIF9fdCA9IF9fei5pbWFnKCk7CiAgICAgIF9NX3ZhbHVlIC89 IF9fdDsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvbXBs ZXg8ZG91YmxlPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGRvdWJsZSB2YWx1ZV90eXBlOwoK ICAgIGNvbXBsZXgoZG91YmxlID0wLjAsIGRvdWJsZSA9MC4wKTsKCiAgICBjb21wbGV4KGNvbnN0 IGNvbXBsZXg8ZmxvYXQ+Jik7CiAgICBleHBsaWNpdCBjb21wbGV4KGNvbnN0IGNvbXBsZXg8bG9u ZyBkb3VibGU+Jik7CgogICAgZG91YmxlIHJlYWwoKSBjb25zdDsKICAgIGRvdWJsZSBpbWFnKCkg Y29uc3Q7CgogICAgY29tcGxleDxkb3VibGU+JiBvcGVyYXRvcj0oZG91YmxlKTsKICAgIGNvbXBs ZXg8ZG91YmxlPiYgb3BlcmF0b3IrPShkb3VibGUpOwogICAgY29tcGxleDxkb3VibGU+JiBvcGVy YXRvci09KGRvdWJsZSk7CiAgICBjb21wbGV4PGRvdWJsZT4mIG9wZXJhdG9yKj0oZG91YmxlKTsK ICAgIGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3IvPShkb3VibGUpOwoKICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxkb3VibGU+JiBvcGVyYXRvcj0oY29uc3QgY29tcGxl eDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgIGNvbXBsZXg8ZG91Ymxl PiYgb3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgICAgY29tcGxleDxkb3VibGU+JiBvcGVyYXRvci09KGNvbnN0IGNvbXBsZXg8X1Rw PiYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGRvdWJsZT4mIG9w ZXJhdG9yKj0oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICAgIGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9UcD4mKTsK CiAgcHJpdmF0ZToKICAgIHR5cGVkZWYgX19jb21wbGV4X18gZG91YmxlIF9Db21wbGV4VDsKICAg IF9Db21wbGV4VCBfTV92YWx1ZTsKCiAgICBjb21wbGV4KF9Db21wbGV4VCBfX3opIDogX01fdmFs dWUoX196KSB7IH0KCiAgICBmcmllbmQgY2xhc3MgY29tcGxleDxmbG9hdD47CiAgICBmcmllbmQg Y2xhc3MgY29tcGxleDxsb25nIGRvdWJsZT47CiAgfTsKCiAgaW5saW5lIGRvdWJsZQogIGNvbXBs ZXg8ZG91YmxlPjo6cmVhbCgpIGNvbnN0CiAgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0K CiAgaW5saW5lIGRvdWJsZQogIGNvbXBsZXg8ZG91YmxlPjo6aW1hZygpIGNvbnN0CiAgeyByZXR1 cm4gX19pbWFnX18gX01fdmFsdWU7IH0KCiAgaW5saW5lCiAgY29tcGxleDxkb3VibGU+Ojpjb21w bGV4KGRvdWJsZSBfX3IsIGRvdWJsZSBfX2kpCiAgewogICAgX19yZWFsX18gX01fdmFsdWUgPSBf X3I7CiAgICBfX2ltYWdfXyBfTV92YWx1ZSA9IF9faTsKICB9CgogIGlubGluZSBjb21wbGV4PGRv dWJsZT4mCiAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvcj0oZG91YmxlIF9fZCkKICB7CiAgICBf X3JlYWxfXyBfTV92YWx1ZSA9IF9fZDsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gMC4wOwogICAg cmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICBjb21wbGV4PGRv dWJsZT46Om9wZXJhdG9yKz0oZG91YmxlIF9fZCkKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSAr PSBfX2Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxleDxkb3VibGU+Jgog IGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0b3ItPShkb3VibGUgX19kKQogIHsKICAgIF9fcmVhbF9f IF9NX3ZhbHVlIC09IF9fZDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4 PGRvdWJsZT4mCiAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvcio9KGRvdWJsZSBfX2QpCiAgewog ICAgX01fdmFsdWUgKj0gX19kOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBs ZXg8ZG91YmxlPiYKICBjb21wbGV4PGRvdWJsZT46Om9wZXJhdG9yLz0oZG91YmxlIF9fZCkKICB7 CiAgICBfTV92YWx1ZSAvPSBfX2Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxkb3VibGU+JgogICAgY29tcGxleDxkb3Vi bGU+OjpvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVh bF9fIF9NX3ZhbHVlID0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX01fdmFsdWUgPSBfX3ou aW1hZygpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4KICAgIGlubGluZSBjb21wbGV4PGRvdWJsZT4mCiAgICBjb21wbGV4PGRvdWJsZT46Om9wZXJh dG9yKz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVhbF9fIF9NX3Zh bHVlICs9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlICs9IF9fei5pbWFnKCk7 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICAgIGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0b3ItPShj b25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX19yZWFsX18gX01fdmFsdWUgLT0g X196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX01fdmFsdWUgLT0gX196LmltYWcoKTsKICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg Y29tcGxleDxkb3VibGU+JgogICAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvcio9KGNvbnN0IGNv bXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfQ29tcGxleFQgX190OwogICAgICBfX3JlYWxf XyBfX3QgPSBfX3oucmVhbCgpOwogICAgICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOwogICAg ICBfTV92YWx1ZSAqPSBfX3Q7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICAgIGNvbXBsZXg8ZG91 YmxlPjo6b3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX0Nv bXBsZXhUIF9fdDsKICAgICAgX19yZWFsX18gX190ID0gX196LnJlYWwoKTsKICAgICAgX19pbWFn X18gX190ID0gX196LmltYWcoKTsKICAgICAgX01fdmFsdWUgLz0gX190OwogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPD4gY2xhc3MgY29tcGxleDxsb25nIGRvdWJsZT4KICB7 CiAgcHVibGljOgogICAgdHlwZWRlZiBsb25nIGRvdWJsZSB2YWx1ZV90eXBlOwoKICAgIGNvbXBs ZXgobG9uZyBkb3VibGUgPSAwLjBMLCBsb25nIGRvdWJsZSA9IDAuMEwpOwoKICAgIGNvbXBsZXgo Y29uc3QgY29tcGxleDxmbG9hdD4mKTsKICAgIGNvbXBsZXgoY29uc3QgY29tcGxleDxkb3VibGU+ Jik7CgogICAgbG9uZyBkb3VibGUgcmVhbCgpIGNvbnN0OwogICAgbG9uZyBkb3VibGUgaW1hZygp IGNvbnN0OwoKICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvcj0gKGxvbmcgZG91Ymxl KTsKICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvcis9IChsb25nIGRvdWJsZSk7CiAg ICBjb21wbGV4PGxvbmcgZG91YmxlPiYgb3BlcmF0b3ItPSAobG9uZyBkb3VibGUpOwogICAgY29t cGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yKj0gKGxvbmcgZG91YmxlKTsKICAgIGNvbXBsZXg8 bG9uZyBkb3VibGU+JiBvcGVyYXRvci89IChsb25nIGRvdWJsZSk7CgogICAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGxvbmcgZG91YmxlPiYgb3BlcmF0b3I9KGNvbnN0IGNv bXBsZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGxv bmcgZG91YmxlPiYgb3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yLT0oY29u c3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgIGNvbXBs ZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvcio9KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogICAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGxvbmcgZG91YmxlPiYgb3BlcmF0b3Iv PShjb25zdCBjb21wbGV4PF9UcD4mKTsKCiAgcHJpdmF0ZToKICAgIHR5cGVkZWYgX19jb21wbGV4 X18gbG9uZyBkb3VibGUgX0NvbXBsZXhUOwogICAgX0NvbXBsZXhUIF9NX3ZhbHVlOwoKICAgIGNv bXBsZXgoX0NvbXBsZXhUIF9feikgOiBfTV92YWx1ZShfX3opIHsgfQoKICAgIGZyaWVuZCBjbGFz cyBjb21wbGV4PGZsb2F0PjsKICAgIGZyaWVuZCBjbGFzcyBjb21wbGV4PGRvdWJsZT47CiAgfTsK CiAgaW5saW5lCiAgY29tcGxleDxsb25nIGRvdWJsZT46OmNvbXBsZXgobG9uZyBkb3VibGUgX19y LCBsb25nIGRvdWJsZSBfX2kpCiAgewogICAgX19yZWFsX18gX01fdmFsdWUgPSBfX3I7CiAgICBf X2ltYWdfXyBfTV92YWx1ZSA9IF9faTsKICB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvbXBs ZXg8bG9uZyBkb3VibGU+OjpyZWFsKCkgY29uc3QKICB7IHJldHVybiBfX3JlYWxfXyBfTV92YWx1 ZTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6aW1hZygp IGNvbnN0CiAgeyByZXR1cm4gX19pbWFnX18gX01fdmFsdWU7IH0KCiAgaW5saW5lIGNvbXBsZXg8 bG9uZyBkb3VibGU+JgogIGNvbXBsZXg8bG9uZyBkb3VibGU+OjpvcGVyYXRvcj0obG9uZyBkb3Vi bGUgX19yKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX19yOwogICAgX19pbWFnX18gX01f dmFsdWUgPSAwLjBMOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8bG9u ZyBkb3VibGU+JgogIGNvbXBsZXg8bG9uZyBkb3VibGU+OjpvcGVyYXRvcis9KGxvbmcgZG91Ymxl IF9fcikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSArPSBfX3I7CiAgICByZXR1cm4gKnRoaXM7 CiAgfQoKICBpbmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgY29tcGxleDxsb25nIGRvdWJs ZT46Om9wZXJhdG9yLT0obG9uZyBkb3VibGUgX19yKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVl IC09IF9fcjsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGxvbmcgZG91 YmxlPiYKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3IqPShsb25nIGRvdWJsZSBfX3Ip CiAgewogICAgX19yZWFsX18gX01fdmFsdWUgKj0gX19yOwogICAgcmV0dXJuICp0aGlzOwogIH0K CiAgaW5saW5lIGNvbXBsZXg8bG9uZyBkb3VibGU+JgogIGNvbXBsZXg8bG9uZyBkb3VibGU+Ojpv cGVyYXRvci89KGxvbmcgZG91YmxlIF9fcikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSAvPSBf X3I7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3Bl cmF0b3I9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfX3JlYWxfXyBfTV92 YWx1ZSA9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsK ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3Bl cmF0b3IrPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX19yZWFsX18gX01f dmFsdWUgKz0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX01fdmFsdWUgKz0gX196LmltYWco KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgICBjb21wbGV4PGxvbmcgZG91YmxlPjo6 b3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX19yZWFsX18g X01fdmFsdWUgLT0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX01fdmFsdWUgLT0gX196Lmlt YWcoKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgICBjb21wbGV4PGxvbmcgZG91Ymxl Pjo6b3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX0NvbXBs ZXhUIF9fdDsKICAgICAgX19yZWFsX18gX190ID0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18g X190ID0gX196LmltYWcoKTsKICAgICAgX01fdmFsdWUgKj0gX190OwogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PGxv bmcgZG91YmxlPiYKICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+OjpvcGVyYXRvci89KGNvbnN0IGNv bXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfQ29tcGxleFQgX190OwogICAgICBfX3JlYWxf XyBfX3QgPSBfX3oucmVhbCgpOwogICAgICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOwogICAg ICBfTV92YWx1ZSAvPSBfX3Q7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgaW5saW5lCiAg Y29tcGxleDxmbG9hdD46OmNvbXBsZXgoY29uc3QgY29tcGxleDxkb3VibGU+JiBfX3opCiAgOiBf TV92YWx1ZShfQ29tcGxleFQoX196Ll9NX3ZhbHVlKSkgeyB9CgogIGlubGluZQogIGNvbXBsZXg8 ZmxvYXQ+Ojpjb21wbGV4KGNvbnN0IGNvbXBsZXg8bG9uZyBkb3VibGU+JiBfX3opCiAgOiBfTV92 YWx1ZShfQ29tcGxleFQoX196Ll9NX3ZhbHVlKSkgeyB9CgogIGlubGluZQogIGNvbXBsZXg8ZG91 YmxlPjo6Y29tcGxleChjb25zdCBjb21wbGV4PGZsb2F0PiYgX196KQogIDogX01fdmFsdWUoX0Nv bXBsZXhUKF9fei5fTV92YWx1ZSkpIHsgfQoKICBpbmxpbmUKICBjb21wbGV4PGRvdWJsZT46OmNv bXBsZXgoY29uc3QgY29tcGxleDxsb25nIGRvdWJsZT4mIF9feikKICB7CiAgICBfX3JlYWxfXyBf TV92YWx1ZSA9IF9fei5yZWFsKCk7CiAgICBfX2ltYWdfXyBfTV92YWx1ZSA9IF9fei5pbWFnKCk7 CiAgfQoKICBpbmxpbmUKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6Y29tcGxleChjb25zdCBjb21w bGV4PGZsb2F0PiYgX196KQogIDogX01fdmFsdWUoX0NvbXBsZXhUKF9fei5fTV92YWx1ZSkpIHsg fQoKICBpbmxpbmUKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6Y29tcGxleChjb25zdCBjb21wbGV4 PGRvdWJsZT4mIF9feikKICA6IF9NX3ZhbHVlKF9Db21wbGV4VChfX3ouX01fdmFsdWUpKSB7IH0K fQoKdGVtcGxhdGUgPGludCBEaW0sIGNsYXNzIFQ+CmNsYXNzIEVuZ2luZQp7CnB1YmxpYzoKICBF bmdpbmUgKFQgdmFsID0gVCgpKSB7fQp9OwoKaW50IG1haW4oKQp7CiAgRW5naW5lPDEsIHN0ZDo6 Y29tcGxleDxkb3VibGU+ID4gZTsKICByZXR1cm4gMDsKfQo=