From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31290 invoked by alias); 6 May 2003 03:36:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 31273 invoked by uid 71); 6 May 2003 03:36:01 -0000 Resent-Date: 6 May 2003 03:36:01 -0000 Resent-Message-ID: <20030506033601.31271.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, Shea.Williams@colorado.edu Received: (qmail 28574 invoked by uid 48); 6 May 2003 03:26:24 -0000 Message-Id: <20030506032624.28573.qmail@sources.redhat.com> Date: Tue, 06 May 2003 03:36:00 -0000 From: Shea.Williams@colorado.edu Reply-To: Shea.Williams@colorado.edu To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/10635: g++ seg faluts on compile command X-SW-Source: 2003-05/txt/msg00341.txt.bz2 List-Id: >Number: 10635 >Category: c++ >Synopsis: g++ seg faluts on compile command >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue May 06 03:36:01 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Shea.Williams@colorado.edu >Release: gcc version 3.2.3 20030415 (Debian prerelease) >Organization: >Environment: Debian GNU/Linux Sarge/Sid distribution g++ -v produces: Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.2 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-java-gc=boehm --enable-objc-gc i386-linux Thread model: posix gcc version 3.2.3 20030415 (Debian prerelease) >Description: command below produces this: /usr/lib/gcc-lib/i386-linux/3.2.3/cpp0 -lang-c++ -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -v -I/home/williasp/payload/src/include -I/usr/local/qt-x11-free-3.0.6/include -I/home/williasp/payload/generic-sw/src/gstaci-framework/include -I/home/williasp/payload/generic-sw/src/gstaci-framework/built-source -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=3 -D__GXX_ABI_VERSION=102 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i386__ moc_timelabel.cpp -Wall moc_timelabel.ii ignoring nonexistent directory "/home/williasp/payload/src/include" GNU CPP version 3.2.3 20030415 (Debian prerelease) (cpplib) (i386 Linux/ELF) ignoring nonexistent directory "/usr/i386-linux/include" #include "..." search starts here: #include <...> search starts here: /usr/local/qt-x11-free-3.0.6/include /home/williasp/payload/generic-sw/src/gstaci-framework/include /home/williasp/payload/generic-sw/src/gstaci-framework/built-source /usr/include/c++/3.2 /usr/include/c++/3.2/i386-linux /usr/include/c++/3.2/backward /usr/local/include /usr/lib/gcc-lib/i386-linux/3.2.3/include /usr/include End of search list. /usr/lib/gcc-lib/i386-linux/3.2.3/cc1plus -fpreprocessed moc_timelabel.ii -quiet -dumpbase moc_timelabel.cpp -gstabs -Wall -version -o moc_timelabel.s GNU CPP version 3.2.3 20030415 (Debian prerelease) (cpplib) (i386 Linux/ELF) GNU C++ version 3.2.3 20030415 (Debian prerelease) (i386-linux) compiled by GNU C version 3.2.3 20030415 (Debian prerelease). moc_timelabel.cpp: In member function `virtual bool TimeLabel::qt_invoke(int, QUObject*)': moc_timelabel.cpp:84: internal error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: All I did was run the following: g++ -Wall -I/home/williasp/payload/src/include -I/usr/local/qt-x11-free-3.0.6/include -I/home/williasp/payload/generic-sw/src/gstaci-framework/include -I/home/williasp/payload/generic-sw/src/gstaci-framework/built-source -gstabs -c moc_timelabel.cpp -o moc_timelabel.o >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="moc_timelabel.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="moc_timelabel.ii" IyAxICJtb2NfdGltZWxhYmVsLmNwcCIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxp bmU+IgojIDEgIm1vY190aW1lbGFiZWwuY3BwIgojIDExICJtb2NfdGltZWxhYmVsLmNwcCIKIyAx ICIvaG9tZS93aWxsaWFzcC9wYXlsb2FkL2dlbmVyaWMtc3cvc3JjL2dzdGFjaS1mcmFtZXdvcmsv aW5jbHVkZS90aW1lbGFiZWwuaCIgMQojIDE4ICIvaG9tZS93aWxsaWFzcC9wYXlsb2FkL2dlbmVy aWMtc3cvc3JjL2dzdGFjaS1mcmFtZXdvcmsvaW5jbHVkZS90aW1lbGFiZWwuaCIKIyAxICIvdXNy L2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWhib3guaCIgMQojIDM5ICIvdXNyL2xv Y2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWhib3guaCIKIyAxICIvdXNyL2xvY2FsL3F0 LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpZGdldC5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQt eDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xd2lkZ2V0LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEt ZnJlZS0zLjAuNi9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC14 MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC14 MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FvYmplY3RkZWZzLmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9x dC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FvYmplY3RkZWZzLmgiCiMgMSAiL3Vzci9sb2NhbC9x dC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FnbG9iYWwuaCIgMQojIDUwNiAiL3Vzci9sb2NhbC9x dC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FnbG9iYWwuaCIKdHlwZWRlZiB1bnNpZ25lZCBjaGFy IHVjaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCB1 aW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxvbmc7CnR5cGVkZWYgY2hhciAqcGNoYXI7CnR5 cGVkZWYgdWNoYXIgKnB1Y2hhcjsKdHlwZWRlZiBjb25zdCBjaGFyICpwY2NoYXI7CgoKCgoKCgpj b25zdCBib29sIEZBTFNFID0gMDsKY29uc3QgYm9vbCBUUlVFID0gITA7CiMgNTUxICIvdXNyL2xv Y2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdsb2JhbC5oIgppbmxpbmUgaW50IHFSb3Vu ZCggZG91YmxlIGQgKQp7CiAgICByZXR1cm4gaW50KCBkID49IDAuMCA/IGQgKyAwLjUgOiBkIC0g MC41ICk7Cn0KIyA1NjMgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xv YmFsLmgiCnR5cGVkZWYgc2lnbmVkIGNoYXIgSU5UODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJ TlQ4Owp0eXBlZGVmIHNob3J0IElOVDE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVJTlQxNjsK dHlwZWRlZiBpbnQgSU5UMzI7CnR5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQzMjsKCgp0eXBlZGVm IHNpZ25lZCBjaGFyIFFfSU5UODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFFfVUlOVDg7CnR5cGVk ZWYgc2hvcnQgUV9JTlQxNjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBRX1VJTlQxNjsKdHlwZWRl ZiBpbnQgUV9JTlQzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgUV9VSU5UMzI7CgoKCgoKCnR5cGVk ZWYgbG9uZyBRX0xPTkc7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBRX1VMT05HOwojIDU5OCAiL3Vz ci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FnbG9iYWwuaCIKY2xhc3MgUURhdGFT dHJlYW07CiMgNjI5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdsb2Jh bC5oIgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xY29uZmlnLmgi IDEKIyA2MzAgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgi IDIKIyA2MzkgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgi CiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Ftb2R1bGVzLmgiIDEK IyA2NDAgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgiIDIK IyA2ODggIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgiCiMg MSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FmZWF0dXJlcy5oIiAxCiMg Njg5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdsb2JhbC5oIiAyCiMg NzM0ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdsb2JhbC5oIgogY29u c3QgY2hhciAqcVZlcnNpb24oKTsKIGJvb2wgcVN5c0luZm8oIGludCAqd29yZFNpemUsIGJvb2wg KmJpZ0VuZGlhbiApOwojIDgxNCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRl L3FnbG9iYWwuaCIKIHZvaWQgcURlYnVnKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRy aWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgogdm9pZCBxV2FybmluZyggY29u c3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwg MikpKQoKOwoKIHZvaWQgcUZhdGFsKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1 dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgogdm9pZCBxU3lzdGVtV2FybmluZygg Y29uc3QgY2hhciAqLCBpbnQgY29kZSA9IC0xICk7CgoKCgogdm9pZCBkZWJ1ZyggY29uc3QgY2hh ciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoK OwoKIHZvaWQgd2FybmluZyggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18g KChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKIHZvaWQgZmF0YWwoIGNvbnN0IGNoYXIgKiwg Li4uICkKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKCjsKIyA4 ODAgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgiCiBib29s IHF0X2NoZWNrX3BvaW50ZXIoIGJvb2wgYywgY29uc3QgY2hhciAqLCBpbnQgKTsKIyA4OTYgIi91 c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZ2xvYmFsLmgiCmVudW0gUXRNc2dU eXBlIHsgUXREZWJ1Z01zZywgUXRXYXJuaW5nTXNnLCBRdEZhdGFsTXNnIH07Cgp0eXBlZGVmIHZv aWQgKCpRdE1zZ0hhbmRsZXIpKFF0TXNnVHlwZSwgY29uc3QgY2hhciAqKTsKIFF0TXNnSGFuZGxl ciBxSW5zdGFsbE1zZ0hhbmRsZXIoIFF0TXNnSGFuZGxlciApOwoKCgp0eXBlZGVmIFF0TXNnSGFu ZGxlciBtc2dfaGFuZGxlcjsKCgogdm9pZCBxU3VwcHJlc3NPYnNvbGV0ZVdhcm5pbmdzKCBib29s ID0gVFJVRSApOwoKIHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFyICpvYmosIGNvbnN0IGNoYXIg Km9sZGZ1bmMsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuZXdmdW5jICk7CiB2b2lk IHFPYnNvbGV0ZSggY29uc3QgY2hhciAqb2JqLCBjb25zdCBjaGFyICpvbGRmdW5jICk7CiB2b2lk IHFPYnNvbGV0ZSggY29uc3QgY2hhciAqbWVzc2FnZSApOwojIDQzICIvdXNyL2xvY2FsL3F0LXgx MS1mcmVlLTMuMC42L2luY2x1ZGUvcW9iamVjdGRlZnMuaCIgMgojIDcxICIvdXNyL2xvY2FsL3F0 LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcW9iamVjdGRlZnMuaCIKc3RydWN0IFFVT2JqZWN0Owoj IDE1MSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FvYmplY3RkZWZzLmgi CmNsYXNzIFFPYmplY3Q7CmNsYXNzIFFNZXRhT2JqZWN0OwpjbGFzcyBRU2lnbmFsOwpjbGFzcyBR Q29ubmVjdGlvbjsKY2xhc3MgUUV2ZW50OwpzdHJ1Y3QgUU1ldGFEYXRhOwpjbGFzcyBRQ29ubmVj dGlvbkxpc3Q7CmNsYXNzIFFDb25uZWN0aW9uTGlzdEl0OwpjbGFzcyBRU2lnbmFsVmVjOwpjbGFz cyBRT2JqZWN0TGlzdDsKY2xhc3MgUU9iamVjdExpc3RJdDsKY2xhc3MgUU1lbWJlckRpY3Q7CiMg NDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAy CiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FzdHJpbmcuaCIgMQoj IDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXN0cmluZy5oIgojIDEg Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xY3N0cmluZy5oIiAxCiMgNDMg Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xY3N0cmluZy5oIgojIDEgIi91 c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbWVtYXJyYXkuaCIgMQojIDQyICIv dXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcW1lbWFycmF5LmgiCiMgMSAiL3Vz ci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FnYXJyYXkuaCIgMQojIDQyICIvdXNy L2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdhcnJheS5oIgojIDEgIi91c3IvbG9j YWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xc2hhcmVkLmgiIDEKIyA0NiAiL3Vzci9sb2Nh bC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FzaGFyZWQuaCIKc3RydWN0IFFTaGFyZWQKewog ICAgUVNoYXJlZCgpIHsgY291bnQgPSAxOyB9CiAgICB2b2lkIHJlZigpIHsgY291bnQrKzsgfQog ICAgYm9vbCBkZXJlZigpIHsgcmV0dXJuICEtLWNvdW50OyB9CiAgICB1aW50IGNvdW50Owp9Owoj IDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdhcnJheS5oIiAyCgoK CmNsYXNzIFFHQXJyYXkKewpmcmllbmQgY2xhc3MgUUJ1ZmZlcjsKcHVibGljOgoKICAgIHN0cnVj dCBhcnJheV9kYXRhIDogcHVibGljIFFTaGFyZWQgewogICAgICAgIGFycmF5X2RhdGEoKSB7IGRh dGE9MDsgbGVuPTA7IH0KICAgICAgICBjaGFyICpkYXRhOwogICAgICAgIHVpbnQgbGVuOwogICAg fTsKICAgIFFHQXJyYXkoKTsKcHJvdGVjdGVkOgogICAgUUdBcnJheSggaW50LCBpbnQgKTsKICAg IFFHQXJyYXkoIGludCBzaXplICk7CiAgICBRR0FycmF5KCBjb25zdCBRR0FycmF5ICZhICk7CiAg ICB2aXJ0dWFsIH5RR0FycmF5KCk7CgogICAgUUdBcnJheSAmb3BlcmF0b3I9KCBjb25zdCBRR0Fy cmF5ICZhICkgeyByZXR1cm4gYXNzaWduKCBhICk7IH0KCiAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo KCkgeyBkdXBsaWNhdGUoKnRoaXMpOyB9CgogICAgY2hhciAqZGF0YSgpIGNvbnN0IHsgcmV0dXJu IHNoZC0+ZGF0YTsgfQogICAgdWludCBucmVmcygpIGNvbnN0IHsgcmV0dXJuIHNoZC0+Y291bnQ7 IH0KICAgIHVpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNoZC0+bGVuOyB9CiAgICBib29sIGlz RXF1YWwoIGNvbnN0IFFHQXJyYXkgJmEgKSBjb25zdDsKCiAgICBib29sIHJlc2l6ZSggdWludCBu ZXdzaXplICk7CgogICAgYm9vbCBmaWxsKCBjb25zdCBjaGFyICpkLCBpbnQgbGVuLCB1aW50IHN6 ICk7CgogICAgUUdBcnJheSAmYXNzaWduKCBjb25zdCBRR0FycmF5ICZhICk7CiAgICBRR0FycmF5 ICZhc3NpZ24oIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CiAgICBRR0FycmF5ICZkdXBsaWNh dGUoIGNvbnN0IFFHQXJyYXkgJmEgKTsKICAgIFFHQXJyYXkgJmR1cGxpY2F0ZSggY29uc3QgY2hh ciAqZCwgdWludCBsZW4gKTsKICAgIHZvaWQgc3RvcmUoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVu ICk7CgogICAgYXJyYXlfZGF0YSAqc2hhcmVkQmxvY2soKSBjb25zdCB7IHJldHVybiBzaGQ7IH0K ICAgIHZvaWQgc2V0U2hhcmVkQmxvY2soIGFycmF5X2RhdGEgKnAgKSB7IHNoZD0oYXJyYXlfZGF0 YSopcDsgfQoKICAgIFFHQXJyYXkgJnNldFJhd0RhdGEoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVu ICk7CiAgICB2b2lkIHJlc2V0UmF3RGF0YSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKCiAg ICBpbnQgZmluZCggY29uc3QgY2hhciAqZCwgdWludCBpbmRleCwgdWludCBzeiApIGNvbnN0Owog ICAgaW50IGNvbnRhaW5zKCBjb25zdCBjaGFyICpkLCB1aW50IHN6ICkgY29uc3Q7CgogICAgdm9p ZCBzb3J0KCB1aW50IHN6ICk7CiAgICBpbnQgYnNlYXJjaCggY29uc3QgY2hhciAqZCwgdWludCBz eiApIGNvbnN0OwoKICAgIGNoYXIgKmF0KCB1aW50IGluZGV4ICkgY29uc3Q7CgogICAgYm9vbCBz ZXRFeHBhbmQoIHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKmQsIHVpbnQgc3ogKTsKCnByb3RlY3Rl ZDoKICAgIHZpcnR1YWwgYXJyYXlfZGF0YSAqbmV3RGF0YSgpOwogICAgdmlydHVhbCB2b2lkIGRl bGV0ZURhdGEoIGFycmF5X2RhdGEgKnAgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCBtc2df aW5kZXgoIHVpbnQgKTsKICAgIGFycmF5X2RhdGEgKnNoZDsKfTsKCgppbmxpbmUgY2hhciAqUUdB cnJheTo6YXQoIHVpbnQgaW5kZXggKSBjb25zdAp7CgogICAgaWYgKCBpbmRleCA+PSBzaXplKCkg KSB7CiAgICAgICAgbXNnX2luZGV4KCBpbmRleCApOwogICAgICAgIGluZGV4ID0gMDsKICAgIH0K CiAgICByZXR1cm4gJnNoZC0+ZGF0YVtpbmRleF07Cn0KIyA0MyAiL3Vzci9sb2NhbC9xdC14MTEt ZnJlZS0zLjAuNi9pbmNsdWRlL3FtZW1hcnJheS5oIiAyCgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+ CmNsYXNzIFFNZW1BcnJheQo6IHB1YmxpYyBRR0FycmF5CnsKcHVibGljOgogICAgdHlwZWRlZiB0 eXBlKiBJdGVyYXRvcjsKICAgIHR5cGVkZWYgY29uc3QgdHlwZSogQ29uc3RJdGVyYXRvcjsKICAg IHR5cGVkZWYgdHlwZSBWYWx1ZVR5cGU7Cgpwcm90ZWN0ZWQ6CiAgICBRTWVtQXJyYXkoIGludCwg aW50ICkgOiBRR0FycmF5KCAwLCAwICkge30KCnB1YmxpYzoKICAgIFFNZW1BcnJheSgpIHt9CiAg ICBRTWVtQXJyYXkoIGludCBzaXplICkgOiBRR0FycmF5KHNpemUqc2l6ZW9mKHR5cGUpKSB7fQog ICAgUU1lbUFycmF5KCBjb25zdCBRTWVtQXJyYXk8dHlwZT4gJmEgKSA6IFFHQXJyYXkoYSkge30K ICAgflFNZW1BcnJheSgpIHt9CiAgICBRTWVtQXJyYXk8dHlwZT4gJm9wZXJhdG9yPShjb25zdCBR TWVtQXJyYXk8dHlwZT4gJmEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1 cm4gKFFNZW1BcnJheTx0eXBlPiYpUUdBcnJheTo6YXNzaWduKGEpOyB9CiAgICB0eXBlICpkYXRh KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0FycmF5OjpkYXRhKCk7IH0KICAgIHVpbnQgbnJl ZnMoKSBjb25zdCB7IHJldHVybiBRR0FycmF5OjpucmVmcygpOyB9CiAgICB1aW50IHNpemUoKSBj b25zdCB7IHJldHVybiBRR0FycmF5OjpzaXplKCkvc2l6ZW9mKHR5cGUpOyB9CiAgICB1aW50IGNv dW50KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpOyB9CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7 IHJldHVybiBRR0FycmF5OjpzaXplKCkgPT0gMDsgfQogICAgYm9vbCBpc051bGwoKSBjb25zdCB7 IHJldHVybiBRR0FycmF5OjpkYXRhKCkgPT0gMDsgfQogICAgYm9vbCByZXNpemUoIHVpbnQgc2l6 ZSApIHsgcmV0dXJuIFFHQXJyYXk6OnJlc2l6ZShzaXplKnNpemVvZih0eXBlKSk7IH0KICAgIGJv b2wgdHJ1bmNhdGUoIHVpbnQgcG9zICkgeyByZXR1cm4gUUdBcnJheTo6cmVzaXplKHBvcypzaXpl b2YodHlwZSkpOyB9CiAgICBib29sIGZpbGwoIGNvbnN0IHR5cGUgJmQsIGludCBzaXplID0gLTEg KQogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmZpbGwoKGNoYXIqKSZkLHNpemUsc2l6ZW9mKHR5 cGUpICk7IH0KICAgIHZvaWQgZGV0YWNoKCkgeyBRR0FycmF5OjpkZXRhY2goKTsgfQogICAgUU1l bUFycmF5PHR5cGU+IGNvcHkoKSBjb25zdAogICAgICAgIHsgUU1lbUFycmF5PHR5cGU+IHRtcDsg cmV0dXJuIHRtcC5kdXBsaWNhdGUoKnRoaXMpOyB9CiAgICBRTWVtQXJyYXk8dHlwZT4mIGFzc2ln biggY29uc3QgUU1lbUFycmF5PHR5cGU+JiBhICkKICAgICAgICB7IHJldHVybiAoUU1lbUFycmF5 PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oYSk7IH0KICAgIFFNZW1BcnJheTx0eXBlPiYgYXNzaWdu KCBjb25zdCB0eXBlICphLCB1aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRTWVtQXJyYXk8dHlw ZT4mKVFHQXJyYXk6OmFzc2lnbigoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIFFNZW1B cnJheTx0eXBlPiYgZHVwbGljYXRlKCBjb25zdCBRTWVtQXJyYXk8dHlwZT4mIGEgKQogICAgICAg IHsgcmV0dXJuIChRTWVtQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxpY2F0ZShhKTsgfQogICAg UU1lbUFycmF5PHR5cGU+JiBkdXBsaWNhdGUoIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCiAgICAg ICAgeyByZXR1cm4gKFFNZW1BcnJheTx0eXBlPiYpUUdBcnJheTo6ZHVwbGljYXRlKChjaGFyKilh LG4qc2l6ZW9mKHR5cGUpKTsgfQogICAgUU1lbUFycmF5PHR5cGU+JiBzZXRSYXdEYXRhKCBjb25z dCB0eXBlICphLCB1aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRTWVtQXJyYXk8dHlwZT4mKVFH QXJyYXk6OnNldFJhd0RhdGEoKGNoYXIqKWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbipzaXplb2YodHlwZSkpOyB9CiAgICB2b2lkIHJlc2V0 UmF3RGF0YSggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IFFHQXJyYXk6OnJlc2V0 UmF3RGF0YSgoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIGludCBmaW5kKCBjb25zdCB0 eXBlICZkLCB1aW50IGk9MCApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gUUdBcnJheTo6ZmluZCgo Y2hhciopJmQsaSxzaXplb2YodHlwZSkpOyB9CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IHR5cGUg JmQgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmNvbnRhaW5zKChjaGFyKikmZCxz aXplb2YodHlwZSkpOyB9CiAgICB2b2lkIHNvcnQoKSB7IFFHQXJyYXk6OnNvcnQoc2l6ZW9mKHR5 cGUpKTsgfQogICAgaW50IGJzZWFyY2goIGNvbnN0IHR5cGUgJmQgKSBjb25zdAogICAgICAgIHsg cmV0dXJuIFFHQXJyYXk6OmJzZWFyY2goKGNvbnN0IGNoYXIqKSZkLHNpemVvZih0eXBlKSk7IH0K ICAgIHR5cGUmIG9wZXJhdG9yW10oIGludCBpICkgY29uc3QKICAgICAgICB7IHJldHVybiAodHlw ZSAmKSgqKHR5cGUgKilRR0FycmF5OjphdChpKnNpemVvZih0eXBlKSkpOyB9CiAgICB0eXBlJiBh dCggdWludCBpICkgY29uc3QKICAgICAgICB7IHJldHVybiAodHlwZSAmKSgqKHR5cGUgKilRR0Fy cmF5OjphdChpKnNpemVvZih0eXBlKSkpOyB9CiAgICAgICAgIG9wZXJhdG9yIGNvbnN0IHR5cGUq KCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IHR5cGUgKilRR0FycmF5OjpkYXRhKCk7IH0KICAgIGJv b2wgb3BlcmF0b3I9PSggY29uc3QgUU1lbUFycmF5PHR5cGU+ICZhICkgY29uc3QgeyByZXR1cm4g aXNFcXVhbChhKTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRTWVtQXJyYXk8dHlwZT4g JmEgKSBjb25zdCB7IHJldHVybiAhaXNFcXVhbChhKTsgfQogICAgSXRlcmF0b3IgYmVnaW4oKSB7 IHJldHVybiBkYXRhKCk7IH0KICAgIEl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGRhdGEoKSArIHNp emUoKTsgfQogICAgQ29uc3RJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKTsg fQogICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBkYXRhKCkgKyBzaXplKCk7 IH0KfTsKIyA0NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fjc3RyaW5n LmgiIDIKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk ZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOTEgIi91 c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAx IDMKIyAyOTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTQgIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTUg Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5o IiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv My4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjEzICIvdXNyL2xpYi9nY2MtbGliL2kzODYt bGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXpl X3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqbWVt Y3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g dm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19y ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQg Kl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNp emVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK CmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAo X19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIg Kl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAg dGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNp emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJp Y3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7 CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24p IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u c3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq X19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBz aXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNs dWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1 Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBp bnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQg Kl9fY3R5cGVfdG91cHBlcjsKCgogIGNvbnN0IGNoYXIgKl9fbmFtZXNbMTNdOwp9ICpfX2xvY2Fs ZV90OwojIDExNSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gaW50IHN0cmNv bGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3Qg X19sKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNp emVfdCBzdHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90 IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19j b25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwojIDE2MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKZXh0 ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHNpemVfdCBz dHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNw biAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19j b25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNo YXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9f cmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJv dyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywK ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGlt LAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikg dGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpz dHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVk bGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKCmV4dGVy biB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3Rh Y2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVf dCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29u c3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl eHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21h eGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRl cm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh ciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9f bikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2 b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2 b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25z dCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2Nv bnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50 IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGlu dCBmZnNsIChsb25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQg c3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2Fz ZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24p CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGlu dCBzdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAog ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jYXNlY21wX2wgKF9fY29uc3Qg Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJp Y3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3Qg Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhy b3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hh ciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFy ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0 cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl cm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg Km1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBj aGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNzkg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNDcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUt My4wLjYvaW5jbHVkZS9xY3N0cmluZy5oIiAyCgoKCgoKCiB2b2lkICpxbWVtbW92ZSggdm9pZCAq ZHN0LCBjb25zdCB2b2lkICpzcmMsIHVpbnQgbGVuICk7CgogY2hhciAqcXN0cmR1cCggY29uc3Qg Y2hhciAqICk7CgogaW5saW5lIHVpbnQgcXN0cmxlbiggY29uc3QgY2hhciAqc3RyICkKeyByZXR1 cm4gc3RyID8gKHVpbnQpc3RybGVuKHN0cikgOiAwOyB9CgogaW5saW5lIGNoYXIgKnFzdHJjcHko IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjICkKeyByZXR1cm4gc3JjID8gc3RyY3B5KGRzdCwg c3JjKSA6IDA7IH0KCiBjaGFyICpxc3RybmNweSggY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMs IHVpbnQgbGVuICk7CgogaW5saW5lIGludCBxc3RyY21wKCBjb25zdCBjaGFyICpzdHIxLCBjb25z dCBjaGFyICpzdHIyICkKewogICAgcmV0dXJuICggc3RyMSAmJiBzdHIyICkgPyBzdHJjbXAoIHN0 cjEsIHN0cjIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIHN0cjEgPyAxIDogKCBz dHIyID8gLTEgOiAwICkgKTsKfQoKIGlubGluZSBpbnQgcXN0cm5jbXAoIGNvbnN0IGNoYXIgKnN0 cjEsIGNvbnN0IGNoYXIgKnN0cjIsIHVpbnQgbGVuICkKewogICAgcmV0dXJuICggc3RyMSAmJiBz dHIyICkgPyBzdHJuY21wKCBzdHIxLCBzdHIyLCBsZW4gKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiAoIHN0cjEgPyAxIDogKCBzdHIyID8gLTEgOiAwICkgKTsKfQoKIGludCBxc3RyaWNt cCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKCiBpbnQgcXN0cm5pY21wKCBjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiwgdWludCBsZW4gKTsKCgogaW5saW5lIHVpbnQgY3N0cmxlbigg Y29uc3QgY2hhciAqc3RyICkKeyByZXR1cm4gKHVpbnQpc3RybGVuKHN0cik7IH0KCiBpbmxpbmUg Y2hhciAqY3N0cmNweSggY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMgKQp7IHJldHVybiBzdHJj cHkoZHN0LHNyYyk7IH0KCiBpbmxpbmUgaW50IGNzdHJjbXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNv bnN0IGNoYXIgKnN0cjIgKQp7IHJldHVybiBzdHJjbXAoc3RyMSxzdHIyKTsgfQoKIGlubGluZSBp bnQgY3N0cm5jbXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIsIHVpbnQgbGVu ICkKeyByZXR1cm4gc3RybmNtcChzdHIxLHN0cjIsbGVuKTsgfQoKCgoKCiBRX1VJTlQxNiBxQ2hl Y2tzdW0oIGNvbnN0IGNoYXIgKnMsIHVpbnQgbGVuICk7CiMgMTIwICIvdXNyL2xvY2FsL3F0LXgx MS1mcmVlLTMuMC42L2luY2x1ZGUvcWNzdHJpbmcuaCIKdHlwZWRlZiBRTWVtQXJyYXk8Y2hhcj4g UUJ5dGVBcnJheTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAm LCBjb25zdCBRQnl0ZUFycmF5ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0 cmVhbSAmLCBRQnl0ZUFycmF5ICYgKTsKIyAxMzcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4w LjYvaW5jbHVkZS9xY3N0cmluZy5oIgpjbGFzcyBRUmVnRXhwOwoKY2xhc3MgUUNTdHJpbmcgOiBw dWJsaWMgUUJ5dGVBcnJheQp7CnB1YmxpYzoKICAgIFFDU3RyaW5nKCkge30KICAgIFFDU3RyaW5n KCBpbnQgc2l6ZSApOwogICAgUUNTdHJpbmcoIGNvbnN0IFFDU3RyaW5nICZzICkgOiBRQnl0ZUFy cmF5KCBzICkge30KICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIgKTsKICAgIFFDU3RyaW5n KCBjb25zdCBjaGFyICpzdHIsIHVpbnQgbWF4bGVuICk7CiAgICB+UUNTdHJpbmcoKTsKCiAgICBR Q1N0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyAmcyApOwogICAgUUNTdHJpbmcgJm9w ZXJhdG9yPSggY29uc3QgY2hhciAqc3RyICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAg IGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgdWludCBsZW5ndGgoKSBjb25zdDsKICAgIGJvb2wg cmVzaXplKCB1aW50IG5ld2xlbiApOwogICAgYm9vbCB0cnVuY2F0ZSggdWludCBwb3MgKTsKICAg IGJvb2wgZmlsbCggY2hhciBjLCBpbnQgbGVuID0gLTEgKTsKCiAgICBRQ1N0cmluZyBjb3B5KCkg Y29uc3Q7CgogICAgUUNTdHJpbmcgJnNwcmludGYoIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uICk7 CgogICAgaW50IGZpbmQoIGNoYXIgYywgaW50IGluZGV4PTAsIGJvb2wgY3M9VFJVRSApIGNvbnN0 OwogICAgaW50IGZpbmQoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4PTAsIGJvb2wgY3M9VFJV RSApIGNvbnN0OwoKICAgIGludCBmaW5kKCBjb25zdCBRUmVnRXhwICYsIGludCBpbmRleD0wICkg Y29uc3Q7CgogICAgaW50IGZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4PS0xLCBib29sIGNzPVRS VUUpIGNvbnN0OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4PS0x LCBib29sIGNzPVRSVUUpIGNvbnN0OwoKICAgIGludCBmaW5kUmV2KCBjb25zdCBRUmVnRXhwICYs IGludCBpbmRleD0tMSApIGNvbnN0OwoKICAgIGludCBjb250YWlucyggY2hhciBjLCBib29sIGNz PVRSVUUgKSBjb25zdDsKICAgIGludCBjb250YWlucyggY29uc3QgY2hhciAqc3RyLCBib29sIGNz PVRSVUUgKSBjb25zdDsKCiAgICBpbnQgY29udGFpbnMoIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0 OwoKICAgIFFDU3RyaW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRQ1N0cmluZyByaWdo dCggdWludCBsZW4gKSBjb25zdDsKICAgIFFDU3RyaW5nIG1pZCggdWludCBpbmRleCwgdWludCBs ZW49MHhmZmZmZmZmZikgY29uc3Q7CgogICAgUUNTdHJpbmcgbGVmdEp1c3RpZnkoIHVpbnQgd2lk dGgsIGNoYXIgZmlsbD0nICcsIGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7CiAgICBRQ1N0cmluZyBy aWdodEp1c3RpZnkoIHVpbnQgd2lkdGgsIGNoYXIgZmlsbD0nICcsYm9vbCB0cnVuYz1GQUxTRSlj b25zdDsKCiAgICBRQ1N0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUUNTdHJpbmcgdXBwZXIoKSBj b25zdDsKCiAgICBRQ1N0cmluZyBzdHJpcFdoaXRlU3BhY2UoKSBjb25zdDsKICAgIFFDU3RyaW5n IHNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNvbnN0OwoKICAgIFFDU3RyaW5nICZpbnNlcnQoIHVpbnQg aW5kZXgsIGNvbnN0IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwg Y2hhciApOwogICAgUUNTdHJpbmcgJmFwcGVuZCggY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmlu ZyAmcHJlcGVuZCggY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmcmVtb3ZlKCB1aW50IGlu ZGV4LCB1aW50IGxlbiApOwogICAgUUNTdHJpbmcgJnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVpbnQg bGVuLCBjb25zdCBjaGFyICogKTsKCiAgICBRQ1N0cmluZyAmcmVwbGFjZSggY29uc3QgUVJlZ0V4 cCAmLCBjb25zdCBjaGFyICogKTsKCiAgICBzaG9ydCB0b1Nob3J0KCBib29sICpvaz0wICkgY29u c3Q7CiAgICB1c2hvcnQgdG9VU2hvcnQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIGludCB0b0lu dCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgdWludCB0b1VJbnQoIGJvb2wgKm9rPTAgKSBjb25z dDsKICAgIGxvbmcgdG9Mb25nKCBib29sICpvaz0wICkgY29uc3Q7CiAgICB1bG9uZyB0b1VMb25n KCBib29sICpvaz0wICkgY29uc3Q7CiAgICBmbG9hdCB0b0Zsb2F0KCBib29sICpvaz0wICkgY29u c3Q7CiAgICBkb3VibGUgdG9Eb3VibGUoIGJvb2wgKm9rPTAgKSBjb25zdDsKCiAgICBRQ1N0cmlu ZyAmc2V0U3RyKCBjb25zdCBjaGFyICpzICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBzaG9ydCAp OwogICAgUUNTdHJpbmcgJnNldE51bSggdXNob3J0ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBp bnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHVpbnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0o IGxvbmcgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHVsb25nICk7CiAgICBRQ1N0cmluZyAmc2V0 TnVtKCBmbG9hdCwgY2hhciBmPSdnJywgaW50IHByZWM9NiApOwogICAgUUNTdHJpbmcgJnNldE51 bSggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgYm9vbCBzZXRFeHBhbmQo IHVpbnQgaW5kZXgsIGNoYXIgYyApOwoKICAgICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNo YXIgKigpIGNvbnN0OwogICAgUUNTdHJpbmcgJm9wZXJhdG9yKz0oIGNvbnN0IGNoYXIgKnN0ciAp OwogICAgUUNTdHJpbmcgJm9wZXJhdG9yKz0oIGNoYXIgYyApOwp9OwoKCgoKCgogUURhdGFTdHJl YW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFDU3RyaW5nICYgKTsKIFFEYXRh U3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQ1N0cmluZyAmICk7CgoKCgoKCmlu bGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6Om9wZXJhdG9yPSggY29uc3QgUUNTdHJpbmcgJnMgKQp7 IHJldHVybiAoUUNTdHJpbmcmKWFzc2lnbiggcyApOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3Ry aW5nOjpvcGVyYXRvcj0oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuIChRQ1N0cmluZyYpZHVw bGljYXRlKCBzdHIsIHFzdHJsZW4oc3RyKSsxICk7IH0KCmlubGluZSBib29sIFFDU3RyaW5nOjpp c051bGwoKSBjb25zdAp7IHJldHVybiBkYXRhKCkgPT0gMDsgfQoKaW5saW5lIGJvb2wgUUNTdHJp bmc6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiBkYXRhKCkgPT0gMCB8fCAqZGF0YSgpID09ICdc MCc7IH0KCmlubGluZSB1aW50IFFDU3RyaW5nOjpsZW5ndGgoKSBjb25zdAp7IHJldHVybiBxc3Ry bGVuKCBkYXRhKCkgKTsgfQoKaW5saW5lIGJvb2wgUUNTdHJpbmc6OnRydW5jYXRlKCB1aW50IHBv cyApCnsgcmV0dXJuIHJlc2l6ZShwb3MrMSk7IH0KCmlubGluZSBRQ1N0cmluZyBRQ1N0cmluZzo6 Y29weSgpIGNvbnN0CnsgcmV0dXJuIFFDU3RyaW5nKCBkYXRhKCkgKTsgfQoKaW5saW5lIFFDU3Ry aW5nICZRQ1N0cmluZzo6cHJlcGVuZCggY29uc3QgY2hhciAqcyApCnsgcmV0dXJuIGluc2VydCgw LHMpOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjphcHBlbmQoIGNvbnN0IGNoYXIgKnMg KQp7IHJldHVybiBvcGVyYXRvcis9KHMpOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpz ZXROdW0oIHNob3J0IG4gKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbik7IH0KCmlubGluZSBRQ1N0 cmluZyAmUUNTdHJpbmc6OnNldE51bSggdXNob3J0IG4gKQp7IHJldHVybiBzZXROdW0oKHVsb25n KW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIGludCBuICkKeyByZXR1 cm4gc2V0TnVtKChsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0o IHVpbnQgbiApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmluZyAm UUNTdHJpbmc6OnNldE51bSggZmxvYXQgbiwgY2hhciBmLCBpbnQgcHJlYyApCnsgcmV0dXJuIHNl dE51bSgoZG91YmxlKW4sZixwcmVjKTsgfQoKaW5saW5lIFFDU3RyaW5nOjpvcGVyYXRvciBjb25z dCBjaGFyICooKSBjb25zdAp7IHJldHVybiAoY29uc3QgY2hhciAqKWRhdGEoKTsgfQoKCgoKCgog aW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmlu ZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMi5kYXRhKCkpID09IDA7IH0KCiBp bmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMy ICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpID09IDA7IH0KCiBpbmxpbmUgYm9vbCBv cGVyYXRvcj09KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4g cXN0cmNtcChzMSxzMi5kYXRhKCkpID09IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBj b25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAo czEuZGF0YSgpLHMyLmRhdGEoKSkgIT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNv bnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRh dGEoKSxzMikgIT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IGNoYXIgKnMx LCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgIT0g MDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPCggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBR Q1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMi5kYXRhKCkpIDwgMDsg fQoKIGlubGluZSBib29sIG9wZXJhdG9yPCggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFy ICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSA8IDA7IH0KCiBpbmxpbmUgYm9v bCBvcGVyYXRvcjwoIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVy biBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPCAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I8PSgg Y29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21w KHMxLmRhdGEoKSxzMi5kYXRhKCkpIDw9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBj b25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5k YXRhKCksczIpIDw9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBjaGFyICpz MSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpIDw9 IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3Qg UUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIuZGF0YSgpKSA+IDA7 IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hh ciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPiAwOyB9CgogaW5saW5lIGJv b2wgb3BlcmF0b3I+KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1 cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpID4gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPj0o IGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNt cChzMS5kYXRhKCksczIuZGF0YSgpKSA+PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+PSgg Y29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEu ZGF0YSgpLHMyKSA+PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgY2hhciAq czEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA+ PSAwOyB9CgogaW5saW5lIGNvbnN0IFFDU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJpbmcg JnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxLmRhdGEoKSAp OwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBjb25zdCBRQ1N0cmlu ZyBvcGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7CiAgICBR Q1N0cmluZyB0bXAoIHMxLmRhdGEoKSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsK fQoKIGlubGluZSBjb25zdCBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IGNoYXIgKnMxLCBjb25z dCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gczI7 CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0IFFDU3RyaW5nIG9wZXJhdG9yKyggY29u c3QgUUNTdHJpbmcgJnMxLCBjaGFyIGMyICkKewogICAgUUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkg KTsKICAgIHRtcCArPSBjMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUgY29uc3QgUUNTdHJp bmcgb3BlcmF0b3IrKCBjaGFyIGMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmlu ZyB0bXA7CiAgICB0bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CiMg NDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xc3RyaW5nLmgiIDIKCgoK CgoKCmNsYXNzIFFSZWdFeHA7CmNsYXNzIFFTdHJpbmc7CmNsYXNzIFFDaGFyUmVmOwoKY2xhc3Mg UUNoYXIgewpwdWJsaWM6CiAgICBRQ2hhcigpOwogICAgUUNoYXIoIGNoYXIgYyApOwogICAgUUNo YXIoIHVjaGFyIGMgKTsKICAgIFFDaGFyKCB1Y2hhciBjLCB1Y2hhciByICk7CiAgICBRQ2hhcigg Y29uc3QgUUNoYXImIGMgKTsKICAgIFFDaGFyKCB1c2hvcnQgcmMgKTsKICAgIFFDaGFyKCBzaG9y dCByYyApOwogICAgUUNoYXIoIHVpbnQgcmMgKTsKICAgIFFDaGFyKCBpbnQgcmMgKTsKCiAgICBz dGF0aWMgY29uc3QgUUNoYXIgbnVsbDsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciByZXBsYWNlbWVu dDsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBieXRlT3JkZXJNYXJrOwogICAgc3RhdGljIGNvbnN0 IFFDaGFyIGJ5dGVPcmRlclN3YXBwZWQ7CiAgICBzdGF0aWMgY29uc3QgUUNoYXIgbmJzcDsKCgoK ICAgIGVudW0gQ2F0ZWdvcnkKICAgIHsKICAgICAgICBOb0NhdGVnb3J5LAoKICAgICAgICBNYXJr X05vblNwYWNpbmcsCiAgICAgICAgTWFya19TcGFjaW5nQ29tYmluaW5nLAogICAgICAgIE1hcmtf RW5jbG9zaW5nLAoKICAgICAgICBOdW1iZXJfRGVjaW1hbERpZ2l0LAogICAgICAgIE51bWJlcl9M ZXR0ZXIsCiAgICAgICAgTnVtYmVyX090aGVyLAoKICAgICAgICBTZXBhcmF0b3JfU3BhY2UsCiAg ICAgICAgU2VwYXJhdG9yX0xpbmUsCiAgICAgICAgU2VwYXJhdG9yX1BhcmFncmFwaCwKCiAgICAg ICAgT3RoZXJfQ29udHJvbCwKICAgICAgICBPdGhlcl9Gb3JtYXQsCiAgICAgICAgT3RoZXJfU3Vy cm9nYXRlLAogICAgICAgIE90aGVyX1ByaXZhdGVVc2UsCiAgICAgICAgT3RoZXJfTm90QXNzaWdu ZWQsCgogICAgICAgIExldHRlcl9VcHBlcmNhc2UsCiAgICAgICAgTGV0dGVyX0xvd2VyY2FzZSwK ICAgICAgICBMZXR0ZXJfVGl0bGVjYXNlLAogICAgICAgIExldHRlcl9Nb2RpZmllciwKICAgICAg ICBMZXR0ZXJfT3RoZXIsCgogICAgICAgIFB1bmN0dWF0aW9uX0Nvbm5lY3RvciwKICAgICAgICBQ dW5jdHVhdGlvbl9EYXNoLAogICAgICAgIFB1bmN0dWF0aW9uX0Rhc2sgPSBQdW5jdHVhdGlvbl9E YXNoLAogICAgICAgIFB1bmN0dWF0aW9uX09wZW4sCiAgICAgICAgUHVuY3R1YXRpb25fQ2xvc2Us CiAgICAgICAgUHVuY3R1YXRpb25fSW5pdGlhbFF1b3RlLAogICAgICAgIFB1bmN0dWF0aW9uX0Zp bmFsUXVvdGUsCiAgICAgICAgUHVuY3R1YXRpb25fT3RoZXIsCgogICAgICAgIFN5bWJvbF9NYXRo LAogICAgICAgIFN5bWJvbF9DdXJyZW5jeSwKICAgICAgICBTeW1ib2xfTW9kaWZpZXIsCiAgICAg ICAgU3ltYm9sX090aGVyCiAgICB9OwoKICAgIGVudW0gRGlyZWN0aW9uCiAgICB7CiAgICAgICAg RGlyTCwgRGlyUiwgRGlyRU4sIERpckVTLCBEaXJFVCwgRGlyQU4sIERpckNTLCBEaXJCLCBEaXJT LCBEaXJXUywgRGlyT04sCiAgICAgICAgRGlyTFJFLCBEaXJMUk8sIERpckFMLCBEaXJSTEUsIERp clJMTywgRGlyUERGLCBEaXJOU00sIERpckJOCiAgICB9OwoKICAgIGVudW0gRGVjb21wb3NpdGlv bgogICAgewogICAgICAgIFNpbmdsZSwgQ2Fub25pY2FsLCBGb250LCBOb0JyZWFrLCBJbml0aWFs LCBNZWRpYWwsCiAgICAgICAgRmluYWwsIElzb2xhdGVkLCBDaXJjbGUsIFN1cGVyLCBTdWIsIFZl cnRpY2FsLAogICAgICAgIFdpZGUsIE5hcnJvdywgU21hbGwsIFNxdWFyZSwgQ29tcGF0LCBGcmFj dGlvbgogICAgfTsKCiAgICBlbnVtIEpvaW5pbmcKICAgIHsKICAgICAgICBPdGhlckpvaW5pbmcs IER1YWwsIFJpZ2h0LCBDZW50ZXIKICAgIH07CgogICAgZW51bSBDb21iaW5pbmdDbGFzcwogICAg ewogICAgICAgIENvbWJpbmluZ19CZWxvd0xlZnRBdHRhY2hlZCA9IDIwMCwKICAgICAgICBDb21i aW5pbmdfQmVsb3dBdHRhY2hlZCA9IDIwMiwKICAgICAgICBDb21iaW5pbmdfQmVsb3dSaWdodEF0 dGFjaGVkID0gMjA0LAogICAgICAgIENvbWJpbmluZ19MZWZ0QXR0YWNoZWQgPSAyMDgsCiAgICAg ICAgQ29tYmluaW5nX1JpZ2h0QXR0YWNoZWQgPSAyMTAsCiAgICAgICAgQ29tYmluaW5nX0Fib3Zl TGVmdEF0dGFjaGVkID0gMjEyLAogICAgICAgIENvbWJpbmluZ19BYm92ZUF0dGFjaGVkID0gMjE0 LAogICAgICAgIENvbWJpbmluZ19BYm92ZVJpZ2h0QXR0YWNoZWQgPSAyMTYsCgogICAgICAgIENv bWJpbmluZ19CZWxvd0xlZnQgPSAyMTgsCiAgICAgICAgQ29tYmluaW5nX0JlbG93ID0gMjIwLAog ICAgICAgIENvbWJpbmluZ19CZWxvd1JpZ2h0ID0gMjIyLAogICAgICAgIENvbWJpbmluZ19MZWZ0 ID0gMjI0LAogICAgICAgIENvbWJpbmluZ19SaWdodCA9IDIyNiwKICAgICAgICBDb21iaW5pbmdf QWJvdmVMZWZ0ID0gMjI4LAogICAgICAgIENvbWJpbmluZ19BYm92ZSA9IDIzMCwKICAgICAgICBD b21iaW5pbmdfQWJvdmVSaWdodCA9IDIzMiwKCiAgICAgICAgQ29tYmluaW5nX0RvdWJsZUJlbG93 ID0gMjMzLAogICAgICAgIENvbWJpbmluZ19Eb3VibGVBYm92ZSA9IDIzNCwKICAgICAgICBDb21i aW5pbmdfSW90YVN1YnNjcmlwdCA9IDI0MAogICAgfTsKCgoKICAgIGludCBkaWdpdFZhbHVlKCkg Y29uc3Q7CiAgICBRQ2hhciBsb3dlcigpIGNvbnN0OwogICAgUUNoYXIgdXBwZXIoKSBjb25zdDsK CiAgICBDYXRlZ29yeSBjYXRlZ29yeSgpIGNvbnN0OwogICAgRGlyZWN0aW9uIGRpcmVjdGlvbigp IGNvbnN0OwogICAgSm9pbmluZyBqb2luaW5nKCkgY29uc3Q7CiAgICBib29sIG1pcnJvcmVkKCkg Y29uc3Q7CiAgICBRQ2hhciBtaXJyb3JlZENoYXIoKSBjb25zdDsKICAgIGNvbnN0IFFTdHJpbmcg JmRlY29tcG9zaXRpb24oKSBjb25zdDsKICAgIERlY29tcG9zaXRpb24gZGVjb21wb3NpdGlvblRh ZygpIGNvbnN0OwogICAgdW5zaWduZWQgY2hhciBjb21iaW5pbmdDbGFzcygpIGNvbnN0OwoKICAg IGNoYXIgbGF0aW4xKCkgY29uc3QgeyByZXR1cm4gdWNzID4gMHhmZiA/IDAgOiAoY2hhcikgdWNz OyB9CiAgICB1c2hvcnQgdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJuIHVjczsgfQogICAgdXNob3J0 ICZ1bmljb2RlKCkgeyByZXR1cm4gdWNzOyB9CgoKICAgIG9wZXJhdG9yIGNoYXIoKSBjb25zdCB7 IHJldHVybiBsYXRpbjEoKTsgfQoKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVu aWNvZGUoKT09MDsgfQogICAgYm9vbCBpc1ByaW50KCkgY29uc3Q7CiAgICBib29sIGlzUHVuY3Qo KSBjb25zdDsKICAgIGJvb2wgaXNTcGFjZSgpIGNvbnN0OwogICAgYm9vbCBpc01hcmsoKSBjb25z dDsKICAgIGJvb2wgaXNMZXR0ZXIoKSBjb25zdDsKICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdDsK ICAgIGJvb2wgaXNMZXR0ZXJPck51bWJlcigpIGNvbnN0OwogICAgYm9vbCBpc0RpZ2l0KCkgY29u c3Q7CiAgICBib29sIGlzU3ltYm9sKCkgY29uc3Q7CgogICAgdWNoYXIgY2VsbCgpIGNvbnN0IHsg cmV0dXJuICgodWNoYXIpIHVjcyAmIDB4ZmYpOyB9CiAgICB1Y2hhciByb3coKSBjb25zdCB7IHJl dHVybiAoKHVjaGFyKSAodWNzPj44KSYweGZmKTsgfQogICAgdm9pZCBzZXRDZWxsKCB1Y2hhciBj ZWxsICkgeyB1Y3MgPSAodWNzICYgMHhmZjAwKSArIGNlbGw7IH0KICAgIHZvaWQgc2V0Um93KCB1 Y2hhciByb3cgKSB7IHVjcyA9ICgoKHVzaG9ydCkgcm93KTw8OCkgKyAodWNzJjB4ZmYpOyB9Cgog ICAgc3RhdGljIGJvb2wgbmV0d29ya09yZGVyZWQoKSB7CiAgICAgICAgaW50IHdvcmRTaXplOwog ICAgICAgIGJvb2wgYmlnRW5kaWFuID0gRkFMU0U7CiAgICAgICAgcVN5c0luZm8oICZ3b3JkU2l6 ZSwgJmJpZ0VuZGlhbiApOwogICAgICAgIHJldHVybiBiaWdFbmRpYW47CiAgICB9CgogICAgZnJp ZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNoYXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVu ZCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBRQ2hhciBjLCBjaGFyIGNoICk7CiAgICBmcmllbmQg aW5saW5lIGJvb2wgb3BlcmF0b3I9PSggUUNoYXIgYzEsIFFDaGFyIGMyICk7CiAgICBmcmllbmQg aW5saW5lIGJvb2wgb3BlcmF0b3IhPSggUUNoYXIgYzEsIFFDaGFyIGMyICk7CiAgICBmcmllbmQg aW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY2hhciBjaCwgUUNoYXIgYyApOwogICAgZnJpZW5kIGlu bGluZSBib29sIG9wZXJhdG9yIT0oIFFDaGFyIGMsIGNoYXIgY2ggKTsKICAgIGZyaWVuZCBpbmxp bmUgYm9vbCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5l IGJvb2wgb3BlcmF0b3I8PSggY2hhciBjaCwgUUNoYXIgYyApOwogICAgZnJpZW5kIGlubGluZSBi b29sIG9wZXJhdG9yPD0oIFFDaGFyIGMxLCBRQ2hhciBjMiApOwoKcHJpdmF0ZToKICAgIHVzaG9y dCB1Y3M7CgoKCn0gOwoKaW5saW5lIFFDaGFyOjpRQ2hhcigpCnsKICAgIHVjcyA9IDA7CgoKCn0K aW5saW5lIFFDaGFyOjpRQ2hhciggY2hhciBjICkKewogICAgdWNzID0gKHVjaGFyKWM7CgoKCn0K aW5saW5lIFFDaGFyOjpRQ2hhciggdWNoYXIgYyApCnsKICAgIHVjcyA9IGM7CgoKCn0KaW5saW5l IFFDaGFyOjpRQ2hhciggdWNoYXIgYywgdWNoYXIgciApCnsKICAgIHVjcyA9IChyIDw8IDgpIHwg YzsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBjb25zdCBRQ2hhciYgYyApCnsKICAgIHVjcyA9 IGMudWNzOwoKCgp9CgppbmxpbmUgUUNoYXI6OlFDaGFyKCB1c2hvcnQgcmMgKQp7CiAgICB1Y3Mg PSByYzsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBzaG9ydCByYyApCnsKICAgIHVjcyA9ICh1 c2hvcnQpIHJjOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIHVpbnQgcmMgKQp7CiAgICB1Y3Mg PSAodXNob3J0ICkgKHJjICYgMHhmZmZmKTsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBpbnQg cmMgKQp7CiAgICB1Y3MgPSAodXNob3J0KSAocmMgJiAweGZmZmYpOwoKCgp9CgoKaW5saW5lIGJv b2wgb3BlcmF0b3I9PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiAoKHVjaGFyKSBj aCkgPT0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPT0oIFFDaGFyIGMsIGNoYXIgY2gg KQp7CiAgICByZXR1cm4gKCh1Y2hhcikgY2gpID09IGMudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVy YXRvcj09KCBRQ2hhciBjMSwgUUNoYXIgYzIgKQp7CiAgICByZXR1cm4gYzEudWNzID09IGMyLnVj czsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggUUNoYXIgYzEsIFFDaGFyIGMyICkKewogICAg cmV0dXJuIGMxLnVjcyAhPSBjMi51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yIT0oIGNoYXIg Y2gsIFFDaGFyIGMgKQp7CiAgICByZXR1cm4gKCh1Y2hhciljaCkgIT0gYy51Y3M7Cn0KCmlubGlu ZSBib29sIG9wZXJhdG9yIT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4gKCh1Y2hh cikgY2gpICE9IGMudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFy IGNoICkKewogICAgcmV0dXJuIGMudWNzIDw9ICgodWNoYXIpIGNoKTsKfQoKaW5saW5lIGJvb2wg b3BlcmF0b3I8PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiAoKHVjaGFyKSBjaCkg PD0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPD0oIFFDaGFyIGMxLCBRQ2hhciBjMiAp CnsKICAgIHJldHVybiBjMS51Y3MgPD0gYzIudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcj49 KCBRQ2hhciBjLCBjaGFyIGNoICkgeyByZXR1cm4gY2ggPD0gYzsgfQppbmxpbmUgYm9vbCBvcGVy YXRvcj49KCBjaGFyIGNoLCBRQ2hhciBjICkgeyByZXR1cm4gYyA8PSBjaDsgfQppbmxpbmUgYm9v bCBvcGVyYXRvcj49KCBRQ2hhciBjMSwgUUNoYXIgYzIgKSB7IHJldHVybiBjMiA8PSBjMTsgfQpp bmxpbmUgYm9vbCBvcGVyYXRvcjwoIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVybiAhKGNoPD1j KTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJldHVybiAh KGM8PWNoKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsg cmV0dXJuICEoYzI8PWMxKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIFFDaGFyIGMsIGNoYXIg Y2ggKSB7IHJldHVybiAhKGNoPj1jKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNoYXIgY2gs IFFDaGFyIGMgKSB7IHJldHVybiAhKGM+PWNoKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIFFD aGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJuICEoYzI+PWMxKTsgfQoKCnN0cnVjdCBRU3RyaW5n RGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAgIFFTdHJpbmdEYXRhKCkgOgogICAgICAgIHVuaWNv ZGUoMCksIGFzY2lpKDApLCBsZW4oMCksIHNpbXBsZXRleHQoMSksIG1heGwoMCksIGRpcnR5KDAp IHsgcmVmKCk7IH0KICAgIFFTdHJpbmdEYXRhKFFDaGFyICp1LCB1aW50IGwsIHVpbnQgbSkgOgog ICAgICAgIHVuaWNvZGUodSksIGFzY2lpKDApLCBsZW4obCksIHNpbXBsZXRleHQoMSksIG1heGwo bSksIGRpcnR5KDEpIHsgfQoKICAgIH5RU3RyaW5nRGF0YSgpIHsgaWYgKCB1bmljb2RlICkgZGVs ZXRlW10gKChjaGFyKil1bmljb2RlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCBhc2NpaSAp IGRlbGV0ZVtdIGFzY2lpOyB9CgogICAgdm9pZCBkZWxldGVTZWxmKCk7CiAgICBRQ2hhciAqdW5p Y29kZTsKICAgIGNoYXIgKmFzY2lpOwogICAgdm9pZCBzZXREaXJ0eSgpIHsKICAgICAgICBpZiAo IGFzY2lpICkgewogICAgICAgICAgICBkZWxldGUgW10gYXNjaWk7CiAgICAgICAgICAgIGFzY2lp ID0gMDsKICAgICAgICB9CiAgICAgICAgZGlydHkgPSAxOwogICAgfQoKCgogICAgdWludCBsZW4g OiAzMDsKCiAgICB1aW50IHNpbXBsZXRleHQgOiAxOwoKCgogICAgdWludCBtYXhsIDogMzA7Cgog ICAgdWludCBkaXJ0eSA6IDE7Cn07CgoKY2xhc3MgUVN0cmluZwp7CnB1YmxpYzoKICAgIFFTdHJp bmcoKTsKICAgIFFTdHJpbmcoIFFDaGFyICk7CiAgICBRU3RyaW5nKCBjb25zdCBRU3RyaW5nICYg KTsKICAgIFFTdHJpbmcoIGNvbnN0IFFCeXRlQXJyYXkmICk7CiAgICBRU3RyaW5nKCBjb25zdCBR Q2hhciogdW5pY29kZSwgdWludCBsZW5ndGggKTsKCiAgICBRU3RyaW5nKCBjb25zdCBjaGFyICpz dHIgKTsKCiAgICB+UVN0cmluZygpOwoKICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgUVN0 cmluZyAmICk7CgogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBjaGFyICogKTsKCiAgICBR U3RyaW5nICZvcGVyYXRvcj0oIGNvbnN0IFFDU3RyaW5nJiApOwogICAgUVN0cmluZyAmb3BlcmF0 b3I9KCBRQ2hhciBjICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcj0oIGNoYXIgYyApOwoKICAgIHN0 YXRpYyBjb25zdCBRU3RyaW5nIG51bGw7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgIGJv b2wgaXNFbXB0eSgpIGNvbnN0OwogICAgdWludCBsZW5ndGgoKSBjb25zdDsKICAgIHZvaWQgdHJ1 bmNhdGUoIHVpbnQgcG9zICk7CgogICAgUVN0cmluZyAmIGZpbGwoIFFDaGFyIGMsIGludCBsZW4g PSAtMSApOwoKICAgIFFTdHJpbmcgY29weSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgYXJnKCBsb25n IGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBRU3RyaW5nIGFy ZyggdWxvbmcgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFT dHJpbmcgYXJnKCBpbnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsK ICAgIFFTdHJpbmcgYXJnKCB1aW50IGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwICkg Y29uc3Q7CiAgICBRU3RyaW5nIGFyZyggc2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJh c2U9MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCB1c2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9 MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCBjaGFyIGEsIGludCBmaWVs ZHdpZHRoPTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCBRQ2hhciBhLCBpbnQgZmllbGR3aWR0 aD0wICkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyggY29uc3QgUVN0cmluZyYgYSwgaW50IGZpZWxk d2lkdGg9MCApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoIGRvdWJsZSBhLCBpbnQgZmllbGR3aWR0 aD0wLCBjaGFyIGZtdD0nZycsIGludCBwcmVjPS0xICkgY29uc3Q7CgoKICAgIFFTdHJpbmcgJnNw cmludGYoIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uICkKCiAgICAgICAgX19hdHRyaWJ1dGVfXyAo KGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCgogICAgICAgIDsKCgogICAgaW50IGZpbmQoIFFDaGFy IGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjaGFy IGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjb25z dCBRU3RyaW5nICZzdHIsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKCiAgICBp bnQgZmluZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCApIGNvbnN0OwoKCiAgICBpbnQg ZmluZCggY29uc3QgY2hhciogc3RyLCBpbnQgaW5kZXg9MCApIGNvbnN0OwoKICAgIGludCBmaW5k UmV2KCBRQ2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CiAgICBpbnQg ZmluZFJldiggY2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CiAgICBp bnQgZmluZFJldiggY29uc3QgUVN0cmluZyAmc3RyLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJV RSkgY29uc3Q7CgogICAgaW50IGZpbmRSZXYoIGNvbnN0IFFSZWdFeHAgJiwgaW50IGluZGV4PS0x ICkgY29uc3Q7CgoKICAgIGludCBmaW5kUmV2KCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleD0t MSApIGNvbnN0OwoKICAgIGludCBjb250YWlucyggUUNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29u c3Q7CiAgICBpbnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3QKICAgICAg ICAgICAgICAgICAgICB7IHJldHVybiBjb250YWlucyhRQ2hhcihjKSwgY3MpOyB9CgogICAgaW50 IGNvbnRhaW5zKCBjb25zdCBjaGFyKiBzdHIsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwoKICAgIGlu dCBjb250YWlucyggY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzPVRSVUUgKSBjb25zdDsKCiAg ICBpbnQgY29udGFpbnMoIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0OwoKCiAgICBlbnVtIFNlY3Rp b25GbGFncyB7CiAgICAgICAgU2VjdGlvbkRlZmF1bHQgPSAweDAwLAogICAgICAgIFNlY3Rpb25T a2lwRW1wdHkgPSAweDAxLAogICAgICAgIFNlY3Rpb25JbmNsdWRlTGVhZGluZ1NlcCA9IDB4MDIs CiAgICAgICAgU2VjdGlvbkluY2x1ZGVUcmFpbGluZ1NlcCA9IDB4MDQsCiAgICAgICAgU2VjdGlv bkNhc2VJbnNlbnNpdGl2ZVNlcHMgPSAweDA4CiAgICB9OwogICAgUVN0cmluZyBzZWN0aW9uKCBR Q2hhciBzZXAsIGludCBzdGFydCwgaW50IGVuZCA9IDB4ZmZmZmZmZmYsIGludCBmbGFncyA9IFNl Y3Rpb25EZWZhdWx0ICkgY29uc3Q7CiAgICBRU3RyaW5nIHNlY3Rpb24oIGNoYXIgc2VwLCBpbnQg c3RhcnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCAp IGNvbnN0OwoKICAgIFFTdHJpbmcgc2VjdGlvbiggY29uc3QgY2hhciAqaW5fc2VwLCBpbnQgc3Rh cnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNv bnN0OwoKICAgIFFTdHJpbmcgc2VjdGlvbiggY29uc3QgUVN0cmluZyAmaW5fc2VwLCBpbnQgc3Rh cnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNv bnN0OwoKICAgIFFTdHJpbmcgc2VjdGlvbiggY29uc3QgUVJlZ0V4cCAmcmVnLCBpbnQgc3RhcnQs IGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0 OwoKCiAgICBRU3RyaW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRU3RyaW5nIHJpZ2h0 KCB1aW50IGxlbiApIGNvbnN0OwogICAgUVN0cmluZyBtaWQoIHVpbnQgaW5kZXgsIHVpbnQgbGVu PTB4ZmZmZmZmZmYpIGNvbnN0OwoKICAgIFFTdHJpbmcgbGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgs IFFDaGFyIGZpbGw9JyAnLCBib29sIHRydW5jPUZBTFNFKWNvbnN0OwogICAgUVN0cmluZyByaWdo dEp1c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9JyAnLGJvb2wgdHJ1bmM9RkFMU0UpY29u c3Q7CgogICAgUVN0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUVN0cmluZyB1cHBlcigpIGNvbnN0 OwoKICAgIFFTdHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICBRU3RyaW5nIHNpbXBs aWZ5V2hpdGVTcGFjZSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwg Y29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0 IFFDaGFyKiwgdWludCBsZW4gKTsKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgUUNo YXIgKTsKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY2hhciBjICkgeyByZXR1cm4g aW5zZXJ0KGluZGV4LFFDaGFyKGMpKTsgfQogICAgUVN0cmluZyAmYXBwZW5kKCBjaGFyICk7CiAg ICBRU3RyaW5nICZhcHBlbmQoIFFDaGFyICk7CiAgICBRU3RyaW5nICZhcHBlbmQoIGNvbnN0IFFT dHJpbmcgJiApOwogICAgUVN0cmluZyAmcHJlcGVuZCggY2hhciApOwogICAgUVN0cmluZyAmcHJl cGVuZCggUUNoYXIgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQoIGNvbnN0IFFTdHJpbmcgJiApOwog ICAgUVN0cmluZyAmcmVtb3ZlKCB1aW50IGluZGV4LCB1aW50IGxlbiApOwogICAgUVN0cmluZyAm cmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFTdHJpbmcgJiApOwogICAgUVN0 cmluZyAmcmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFDaGFyKiwgdWludCBj bGVuICk7CgogICAgUVN0cmluZyAmcmVwbGFjZSggY29uc3QgUVJlZ0V4cCAmLCBjb25zdCBRU3Ry aW5nICYgKTsKCiAgICBzaG9ydCB0b1Nob3J0KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNv bnN0OwogICAgdXNob3J0IHRvVVNob3J0KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0 OwogICAgaW50IHRvSW50KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgdWlu dCB0b1VJbnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBsb25nIHRvTG9u ZyggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIHVsb25nIHRvVUxvbmcoIGJv b2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBmbG9hdCB0b0Zsb2F0KCBib29sICpv az0wICkgY29uc3Q7CiAgICBkb3VibGUgdG9Eb3VibGUoIGJvb2wgKm9rPTAgKSBjb25zdDsKCiAg ICBRU3RyaW5nICZzZXROdW0oIHNob3J0LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0 TnVtKCB1c2hvcnQsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGludCwgaW50 IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggdWludCwgaW50IGJhc2U9MTAgKTsKICAg IFFTdHJpbmcgJnNldE51bSggbG9uZywgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51 bSggdWxvbmcsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGZsb2F0LCBjaGFy IGY9J2cnLCBpbnQgcHJlYz02ICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGRvdWJsZSwgY2hhciBm PSdnJywgaW50IHByZWM9NiApOwoKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggbG9uZywgaW50 IGJhc2U9MTAgKTsKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggdWxvbmcsIGludCBiYXNlPTEw KTsKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggaW50LCBpbnQgYmFzZT0xMCApOwogICAgc3Rh dGljIFFTdHJpbmcgbnVtYmVyKCB1aW50LCBpbnQgYmFzZT0xMCk7CiAgICBzdGF0aWMgUVN0cmlu ZyBudW1iZXIoIGRvdWJsZSwgY2hhciBmPSdnJywgaW50IHByZWM9NiApOwoKICAgIHZvaWQgc2V0 RXhwYW5kKCB1aW50IGluZGV4LCBRQ2hhciBjICk7CgogICAgUVN0cmluZyAmb3BlcmF0b3IrPSgg Y29uc3QgUVN0cmluZyAmc3RyICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBRQ2hhciBjICk7 CiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjaGFyIGMgKTsKCiAgICBRQ2hhciBhdCggdWludCBp ICkgY29uc3QKICAgICAgICB7IHJldHVybiBpIDwgZC0+bGVuID8gZC0+dW5pY29kZVtpXSA6IFFD aGFyOjpudWxsOyB9CiAgICBRQ2hhciBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0IHsgcmV0dXJu IGF0KCh1aW50KWkpOyB9CiAgICBRQ2hhclJlZiBhdCggdWludCBpICk7CiAgICBRQ2hhclJlZiBv cGVyYXRvcltdKCBpbnQgaSApOwoKICAgIFFDaGFyIGNvbnN0cmVmKHVpbnQgaSkgY29uc3QKICAg ICAgICB7IHJldHVybiBhdChpKTsgfQogICAgUUNoYXImIHJlZih1aW50IGkpCiAgICAgICAgewog ICAgICAgICAgICBpZiAoIGQtPmNvdW50ICE9IDEgfHwgaSA+PSBkLT5sZW4gKQogICAgICAgICAg ICAgICAgc3ViYXQoIGkgKTsKICAgICAgICAgICAgZC0+c2V0RGlydHkoKTsKICAgICAgICAgICAg cmV0dXJuIGQtPnVuaWNvZGVbaV07CiAgICAgICAgfQoKICAgIGNvbnN0IFFDaGFyKiB1bmljb2Rl KCkgY29uc3QgeyByZXR1cm4gZC0+dW5pY29kZTsgfQogICAgY29uc3QgY2hhciogYXNjaWkoKSBj b25zdCB7IHJldHVybiBsYXRpbjEoKTsgfQogICAgY29uc3QgY2hhciogbGF0aW4xKCkgY29uc3Q7 CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTGF0aW4xKGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0xKTsK CiAgICBRQ1N0cmluZyB1dGY4KCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tVXRmOChj b25zdCBjaGFyKiwgaW50IGxlbj0tMSk7CgogICAgUUNTdHJpbmcgbG9jYWw4Qml0KCkgY29uc3Q7 CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTG9jYWw4Qml0KGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0x KTsKICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgY2hhciAq KCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgogICAgUVN0cmluZyAmc2V0VW5pY29kZSgg Y29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuICk7CiAgICBRU3RyaW5nICZzZXRVbmljb2Rl Q29kZXMoIGNvbnN0IHVzaG9ydCogdW5pY29kZV9hc191c2hvcnRzLCB1aW50IGxlbiApOwogICAg UVN0cmluZyAmc2V0TGF0aW4xKCBjb25zdCBjaGFyKiwgaW50IGxlbj0tMSApOwoKICAgIGludCBj b21wYXJlKCBjb25zdCBRU3RyaW5nJiBzICkgY29uc3Q7CiAgICBzdGF0aWMgaW50IGNvbXBhcmUo IGNvbnN0IFFTdHJpbmcmIHMxLCBjb25zdCBRU3RyaW5nJiBzMiApCiAgICB7IHJldHVybiBzMS5j b21wYXJlKCBzMiApOyB9CgogICAgaW50IGxvY2FsZUF3YXJlQ29tcGFyZSggY29uc3QgUVN0cmlu ZyYgcyApIGNvbnN0OwogICAgc3RhdGljIGludCBsb2NhbGVBd2FyZUNvbXBhcmUoIGNvbnN0IFFT dHJpbmcmIHMxLCBjb25zdCBRU3RyaW5nJiBzMiApCiAgICB7IHJldHVybiBzMS5sb2NhbGVBd2Fy ZUNvbXBhcmUoIHMyICk7IH0KCgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR RGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKCgogICAgdm9pZCBjb21wb3NlKCk7CgoKICAgIGNv bnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBsYXRpbjEoKTsgfQoKCiAgICBib29sIHN0 YXJ0c1dpdGgoIGNvbnN0IFFTdHJpbmcmICkgY29uc3Q7CiAgICBib29sIGVuZHNXaXRoKCBjb25z dCBRU3RyaW5nJiApIGNvbnN0OwoKICAgIHZvaWQgc2V0TGVuZ3RoKCB1aW50IG5ld0xlbmd0aCAp OwoKICAgIGJvb2wgc2ltcGxlVGV4dCgpIGNvbnN0IHsgaWYgKCBkLT5kaXJ0eSApIGNoZWNrU2lt cGxlVGV4dCgpOyByZXR1cm4gKGJvb2wpZC0+c2ltcGxldGV4dDsgfQogICAgYm9vbCBpc1JpZ2h0 VG9MZWZ0KCkgY29uc3Q7Cgpwcml2YXRlOgojIDYwNyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z LjAuNi9pbmNsdWRlL3FzdHJpbmcuaCIKICAgIFFTdHJpbmcmIHJlcGxhY2UoIGNvbnN0IFFTdHJp bmcgJiwgY29uc3QgUVN0cmluZyAmICkgeyByZXR1cm4gKnRoaXM7IH0KCiAgICBRU3RyaW5nKCBp bnQgc2l6ZSwgYm9vbCApOwoKICAgIHZvaWQgZGVyZWYoKTsKICAgIHZvaWQgcmVhbF9kZXRhY2go KTsKICAgIHZvaWQgc3ViYXQoIHVpbnQgKTsKICAgIGJvb2wgZmluZEFyZyhpbnQmIHBvcywgaW50 JiBsZW4pIGNvbnN0OwoKICAgIHZvaWQgY2hlY2tTaW1wbGVUZXh0KCkgY29uc3Q7CgogICAgc3Rh dGljIFFDaGFyKiBhc2NpaVRvVW5pY29kZSggY29uc3QgY2hhciosIHVpbnQgKiBsZW4sIHVpbnQg bWF4bGVuPSh1aW50KS0xICk7CiAgICBzdGF0aWMgUUNoYXIqIGFzY2lpVG9Vbmljb2RlKCBjb25z dCBRQnl0ZUFycmF5JiwgdWludCAqIGxlbiApOwogICAgc3RhdGljIGNoYXIqIHVuaWNvZGVUb0Fz Y2lpKCBjb25zdCBRQ2hhciosIHVpbnQgbGVuICk7CgogICAgUVN0cmluZ0RhdGEgKmQ7CiAgICBz dGF0aWMgUVN0cmluZ0RhdGEqIHNoYXJlZF9udWxsOwogICAgc3RhdGljIFFTdHJpbmdEYXRhKiBt YWtlU2hhcmVkTnVsbCgpOwoKICAgIGZyaWVuZCBjbGFzcyBRQ29uc3RTdHJpbmc7CiAgICBmcmll bmQgY2xhc3MgUVRleHRTdHJlYW07CiAgICBRU3RyaW5nKCBRU3RyaW5nRGF0YSogZGQsIGJvb2wg KSA6IGQoZGQpIHsgfQp9OwoKY2xhc3MgUUNoYXJSZWYgewogICAgZnJpZW5kIGNsYXNzIFFTdHJp bmc7CiAgICBRU3RyaW5nJiBzOwogICAgdWludCBwOwogICAgUUNoYXJSZWYoUVN0cmluZyogc3Ry LCB1aW50IHBvcykgOiBzKCpzdHIpLCBwKHBvcykgeyB9CgpwdWJsaWM6CgoKCgogICAgdXNob3J0 IHVuaWNvZGUoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLnVuaWNvZGUoKTsgfQogICAg Y2hhciBsYXRpbjEoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmxhdGluMSgpOyB9CgoK ICAgIFFDaGFyUmVmIG9wZXJhdG9yPShjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhp czsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHVjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVy biAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KFFDaGFyIGMgKSB7IHMucmVmKHApPWM7 IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KGNvbnN0IFFDaGFyUmVmJiBj ICkgeyBzLnJlZihwKT1jLnVuaWNvZGUoKTsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBv cGVyYXRvcj0odXNob3J0IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBR Q2hhclJlZiBvcGVyYXRvcj0oc2hvcnQgcmMgKSB7IHMucmVmKHApPXJjOyByZXR1cm4gKnRoaXM7 IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPSh1aW50IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJu ICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0oaW50IHJjICkgeyBzLnJlZihwKT1yYzsg cmV0dXJuICp0aGlzOyB9CgogICAgb3BlcmF0b3IgUUNoYXIgKCkgY29uc3QgeyByZXR1cm4gcy5j b25zdHJlZihwKTsgfQoKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVuaWNvZGUo KT09MDsgfQogICAgYm9vbCBpc1ByaW50KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5p c1ByaW50KCk7IH0KICAgIGJvb2wgaXNQdW5jdCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYo cCkuaXNQdW5jdCgpOyB9CiAgICBib29sIGlzU3BhY2UoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0 cmVmKHApLmlzU3BhY2UoKTsgfQogICAgYm9vbCBpc01hcmsoKSBjb25zdCB7IHJldHVybiBzLmNv bnN0cmVmKHApLmlzTWFyaygpOyB9CiAgICBib29sIGlzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4g cy5jb25zdHJlZihwKS5pc0xldHRlcigpOyB9CiAgICBib29sIGlzTnVtYmVyKCkgY29uc3QgeyBy ZXR1cm4gcy5jb25zdHJlZihwKS5pc051bWJlcigpOyB9CiAgICBib29sIGlzTGV0dGVyT3JOdW1i ZXIoKSB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTGV0dGVyT3JOdW1iZXIoKTsgfQogICAgYm9v bCBpc0RpZ2l0KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0RpZ2l0KCk7IH0KCiAg ICBpbnQgZGlnaXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuZGlnaXRWYWx1 ZSgpOyB9CiAgICBRQ2hhciBsb3dlcigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkubG93 ZXIoKTsgfQogICAgUUNoYXIgdXBwZXIoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLnVw cGVyKCk7IH0KCiAgICBRQ2hhcjo6Q2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBz LmNvbnN0cmVmKHApLmNhdGVnb3J5KCk7IH0KICAgIFFDaGFyOjpEaXJlY3Rpb24gZGlyZWN0aW9u KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5kaXJlY3Rpb24oKTsgfQogICAgUUNoYXI6 OkpvaW5pbmcgam9pbmluZygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuam9pbmluZygp OyB9CiAgICBib29sIG1pcnJvcmVkKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5taXJy b3JlZCgpOyB9CiAgICBRQ2hhciBtaXJyb3JlZENoYXIoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0 cmVmKHApLm1pcnJvcmVkQ2hhcigpOyB9CiAgICBjb25zdCBRU3RyaW5nICZkZWNvbXBvc2l0aW9u KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5kZWNvbXBvc2l0aW9uKCk7IH0KICAgIFFD aGFyOjpEZWNvbXBvc2l0aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25zdCB7IHJldHVybiBzLmNv bnN0cmVmKHApLmRlY29tcG9zaXRpb25UYWcoKTsgfQogICAgdW5zaWduZWQgY2hhciBjb21iaW5p bmdDbGFzcygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuY29tYmluaW5nQ2xhc3MoKTsg fQoKCiAgICB1Y2hhciBjZWxsKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5jZWxsKCk7 IH0KICAgIHVjaGFyIHJvdygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkucm93KCk7IH0K Cn07CgppbmxpbmUgUUNoYXJSZWYgUVN0cmluZzo6YXQoIHVpbnQgaSApIHsgcmV0dXJuIFFDaGFy UmVmKHRoaXMsaSk7IH0KaW5saW5lIFFDaGFyUmVmIFFTdHJpbmc6Om9wZXJhdG9yW10oIGludCBp ICkgeyByZXR1cm4gYXQoKHVpbnQpaSk7IH0KCgpjbGFzcyBRQ29uc3RTdHJpbmcgOiBwcml2YXRl IFFTdHJpbmcgewpwdWJsaWM6CiAgICBRQ29uc3RTdHJpbmcoIGNvbnN0IFFDaGFyKiB1bmljb2Rl LCB1aW50IGxlbmd0aCApOwogICAgflFDb25zdFN0cmluZygpOwogICAgY29uc3QgUVN0cmluZyYg c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgoKCgoKIFFEYXRhU3RyZWFtICZv cGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRU3RyaW5nICYgKTsKIFFEYXRhU3RyZWFt ICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKIyA3MTYgIi91c3IvbG9j YWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xc3RyaW5nLmgiCmlubGluZSBRU3RyaW5nOjpR U3RyaW5nKCkgOgogICAgZChzaGFyZWRfbnVsbCA/IHNoYXJlZF9udWxsIDogbWFrZVNoYXJlZE51 bGwoKSkKewogICAgZC0+cmVmKCk7Cn0KCmlubGluZSBRU3RyaW5nOjp+UVN0cmluZygpCnsKICAg IGlmICggZC0+ZGVyZWYoKSApIHsKICAgICAgICBpZiAoIGQgPT0gc2hhcmVkX251bGwgKQogICAg ICAgICAgICBzaGFyZWRfbnVsbCA9IDA7CiAgICAgICAgZC0+ZGVsZXRlU2VsZigpOwogICAgfQp9 CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjpzZWN0aW9uKCBRQ2hhciBzZXAsIGludCBzdGFydCwg aW50IGVuZCwgaW50IGZsYWdzICkgY29uc3QKeyByZXR1cm4gc2VjdGlvbihRU3RyaW5nKHNlcCks IHN0YXJ0LCBlbmQsIGZsYWdzKTsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6c2VjdGlvbigg Y2hhciBzZXAsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGZsYWdzICkgY29uc3QKeyByZXR1cm4g c2VjdGlvbihRQ2hhcihzZXApLCBzdGFydCwgZW5kLCBmbGFncyk7IH0KCgppbmxpbmUgUVN0cmlu ZyBRU3RyaW5nOjpzZWN0aW9uKCBjb25zdCBjaGFyICppbl9zZXAsIGludCBzdGFydCwgaW50IGVu ZCwgaW50IGZsYWdzICkgY29uc3QKeyByZXR1cm4gc2VjdGlvbihRU3RyaW5nKGluX3NlcCksIHN0 YXJ0LCBlbmQsIGZsYWdzKTsgfQoKCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVyYXRvcj0o IFFDaGFyIGMgKQp7IHJldHVybiAqdGhpcyA9IFFTdHJpbmcoYyk7IH0KCmlubGluZSBRU3RyaW5n ICZRU3RyaW5nOjpvcGVyYXRvcj0oIGNoYXIgYyApCnsgcmV0dXJuICp0aGlzID0gUVN0cmluZyhR Q2hhcihjKSk7IH0KCmlubGluZSBib29sIFFTdHJpbmc6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJu IHVuaWNvZGUoKSA9PSAwOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjpvcGVyYXRvciEoKSBjb25z dAp7IHJldHVybiBpc051bGwoKTsgfQoKaW5saW5lIHVpbnQgUVN0cmluZzo6bGVuZ3RoKCkgY29u c3QKeyByZXR1cm4gZC0+bGVuOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjppc0VtcHR5KCkgY29u c3QKeyByZXR1cm4gbGVuZ3RoKCkgPT0gMDsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6Y29w eSgpIGNvbnN0CnsgcmV0dXJuIFFTdHJpbmcoICp0aGlzICk7IH0KCmlubGluZSBRU3RyaW5nICZR U3RyaW5nOjpwcmVwZW5kKCBjb25zdCBRU3RyaW5nICYgcyApCnsgcmV0dXJuIGluc2VydCgwLHMp OyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggUUNoYXIgYyApCnsgcmV0dXJu IGluc2VydCgwLGMpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggY2hhciBj ICkKeyByZXR1cm4gaW5zZXJ0KDAsYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBl bmQoIGNvbnN0IFFTdHJpbmcgJiBzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQoKaW5saW5l IFFTdHJpbmcgJlFTdHJpbmc6OmFwcGVuZCggUUNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0o Yyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNoYXIgYyApCnsgcmV0dXJu IG9wZXJhdG9yKz0oYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIHNob3J0 IG4sIGludCBiYXNlICkKeyByZXR1cm4gc2V0TnVtKChsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUg UVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCB1c2hvcnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBz ZXROdW0oKHVsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVt KCBpbnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbiwgYmFzZSk7IH0KCmlu bGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIHVpbnQgbiwgaW50IGJhc2UgKQp7IHJldHVy biBzZXROdW0oKHVsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0 TnVtKCBmbG9hdCBuLCBjaGFyIGYsIGludCBwcmVjICkKeyByZXR1cm4gc2V0TnVtKChkb3VibGUp bixmLHByZWMpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcoaW50IGEsIGludCBmaWVs ZHdpZHRoLCBpbnQgYmFzZSkgY29uc3QKeyByZXR1cm4gYXJnKChsb25nKWEsIGZpZWxkd2lkdGgs IGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcodWludCBhLCBpbnQgZmllbGR3 aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwg YmFzZSk7IH0KCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6OmFyZyhzaG9ydCBhLCBpbnQgZmllbGR3 aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygobG9uZylhLCBmaWVsZHdpZHRoLCBi YXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6YXJnKHVzaG9ydCBhLCBpbnQgZmllbGR3 aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwg YmFzZSk7IH0KCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZCggY2hhciBjLCBpbnQgaW5kZXgsIGJv b2wgY3MgKSBjb25zdAp7IHJldHVybiBmaW5kKFFDaGFyKGMpLCBpbmRleCwgY3MpOyB9Cgppbmxp bmUgaW50IFFTdHJpbmc6OmZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4LCBib29sIGNzKSBjb25z dAp7IHJldHVybiBmaW5kUmV2KCBRQ2hhcihjKSwgaW5kZXgsIGNzICk7IH0KCgoKaW5saW5lIGlu dCBRU3RyaW5nOjpmaW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0CnsgcmV0 dXJuIGZpbmQoUVN0cmluZzo6ZnJvbUxhdGluMShzdHIpLCBpbmRleCk7IH0KCmlubGluZSBpbnQg UVN0cmluZzo6ZmluZFJldiggY29uc3QgY2hhciogc3RyLCBpbnQgaW5kZXggKSBjb25zdAp7IHJl dHVybiBmaW5kUmV2KFFTdHJpbmc6OmZyb21MYXRpbjEoc3RyKSwgaW5kZXgpOyB9CgoKCgoKCgog Ym9vbCBvcGVyYXRvciE9KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsK IGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsK IGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7 CiBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiAp OwogYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiAp OwogYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIg KTsKCiBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiAp OwogYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwog Ym9vbCBvcGVyYXRvcjw9KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKIGJv b2wgb3BlcmF0b3I9PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiBib29s IG9wZXJhdG9yPiggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiBib29sIG9w ZXJhdG9yPj0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9vbCBvcGVy YXRvciE9KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0 b3I8KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0b3I8 PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJhdG9yPT0o IGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwoKIGJvb2wgb3BlcmF0b3I+PSgg Y29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CgoKIGlubGluZSBjb25zdCBRU3Ry aW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewog ICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgoK IGlubGluZSBjb25zdCBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0 IGNoYXIgKnMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gUVN0cmluZzo6 ZnJvbUxhdGluMShzMik7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0IFFTdHJpbmcg b3BlcmF0b3IrKCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKQp7CiAgICBRU3Ry aW5nIHRtcCA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIHMxICk7CiAgICB0bXAgKz0gczI7CiAgICBy ZXR1cm4gdG1wOwp9CgoKIGlubGluZSBjb25zdCBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUVN0 cmluZyAmczEsIFFDaGFyIGMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0g YzI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0IFFTdHJpbmcgb3BlcmF0b3IrKCBj b25zdCBRU3RyaW5nICZzMSwgY2hhciBjMiApCnsKICAgIFFTdHJpbmcgdG1wKCBzMSApOwogICAg dG1wICs9IGMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBjb25zdCBRU3RyaW5nIG9wZXJh dG9yKyggUUNoYXIgYzEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXA7CiAg ICB0bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNv bnN0IFFTdHJpbmcgb3BlcmF0b3IrKCBjaGFyIGMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsKICAg IFFTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRt cDsKfQojIDQ1ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpbmRvd2Rl ZnMuaCIgMgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbmFtZXNw YWNlLmgiIDEKIyA0NiAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FuYW1l c3BhY2UuaCIKY2xhc3MgUUNvbG9yOwpjbGFzcyBRQ3Vyc29yOwoKCmNsYXNzIFF0IHsKcHVibGlj OgogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGNvbG9yMDsKICAgIHN0YXRpYyBjb25zdCBRQ29s b3IgJiBjb2xvcjE7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgYmxhY2s7CiAgICBzdGF0aWMg Y29uc3QgUUNvbG9yICYgd2hpdGU7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya0dyYXk7 CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZ3JheTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3Ig JiBsaWdodEdyYXk7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgcmVkOwogICAgc3RhdGljIGNv bnN0IFFDb2xvciAmIGdyZWVuOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGJsdWU7CiAgICBz dGF0aWMgY29uc3QgUUNvbG9yICYgY3lhbjsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBtYWdl bnRhOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIHllbGxvdzsKICAgIHN0YXRpYyBjb25zdCBR Q29sb3IgJiBkYXJrUmVkOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtHcmVlbjsKICAg IHN0YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJrQmx1ZTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3Ig JiBkYXJrQ3lhbjsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJrTWFnZW50YTsKICAgIHN0 YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJrWWVsbG93OwoKCiAgICBlbnVtIEJ1dHRvblN0YXRlIHsK ICAgICAgICBOb0J1dHRvbiA9IDB4MDAwMCwKICAgICAgICBMZWZ0QnV0dG9uID0gMHgwMDAxLAog ICAgICAgIFJpZ2h0QnV0dG9uID0gMHgwMDAyLAogICAgICAgIE1pZEJ1dHRvbiA9IDB4MDAwNCwK ICAgICAgICBNb3VzZUJ1dHRvbk1hc2sgPSAweDAwMDcsCiAgICAgICAgU2hpZnRCdXR0b24gPSAw eDAxMDAsCiAgICAgICAgQ29udHJvbEJ1dHRvbiA9IDB4MDIwMCwKICAgICAgICBBbHRCdXR0b24g PSAweDA0MDAsCiAgICAgICAgTWV0YUJ1dHRvbiA9IDB4MDgwMCwKICAgICAgICBLZXlCdXR0b25N YXNrID0gMHgwZjAwLAogICAgICAgIEtleXBhZCA9IDB4NDAwMAogICAgfTsKCgoKICAgIGVudW0g T3JpZW50YXRpb24gewogICAgICAgIEhvcml6b250YWwgPSAwLAogICAgICAgIFZlcnRpY2FsCiAg ICB9OwoKCgoKCgogICAgZW51bSBBbGlnbm1lbnRGbGFncyB7CiAgICAgICAgQWxpZ25BdXRvID0g MHgwMDAwLAogICAgICAgIEFsaWduTGVmdCA9IDB4MDAwMSwKICAgICAgICBBbGlnblJpZ2h0ID0g MHgwMDAyLAogICAgICAgIEFsaWduSENlbnRlciA9IDB4MDAwNCwKICAgICAgICBBbGlnbkp1c3Rp ZnkgPSAweDAwMDgsCiAgICAgICAgQWxpZ25Ib3Jpem9udGFsX01hc2sgPSBBbGlnbkxlZnQgfCBB bGlnblJpZ2h0IHwgQWxpZ25IQ2VudGVyIHwgQWxpZ25KdXN0aWZ5LAogICAgICAgIEFsaWduVG9w ID0gMHgwMDEwLAogICAgICAgIEFsaWduQm90dG9tID0gMHgwMDIwLAogICAgICAgIEFsaWduVkNl bnRlciA9IDB4MDA0MCwKICAgICAgICBBbGlnblZlcnRpY2FsX01hc2sgPSBBbGlnblRvcCB8IEFs aWduQm90dG9tIHwgQWxpZ25WQ2VudGVyLAogICAgICAgIEFsaWduQ2VudGVyID0gQWxpZ25WQ2Vu dGVyIHwgQWxpZ25IQ2VudGVyCiAgICB9OwoKCiAgICBlbnVtIFRleHRGbGFncyB7CiAgICAgICAg U2luZ2xlTGluZSA9IDB4MDA4MCwKICAgICAgICBEb250Q2xpcCA9IDB4MDEwMCwKICAgICAgICBF eHBhbmRUYWJzID0gMHgwMjAwLAogICAgICAgIFNob3dQcmVmaXggPSAweDA0MDAsCiAgICAgICAg V29yZEJyZWFrID0gMHgwODAwLAogICAgICAgIEJyZWFrQW55d2hlcmUgPSAweDEwMDAsCiAgICAg ICAgRG9udFByaW50ID0gMHgyMDAwLAogICAgICAgIE5vQWNjZWwgPSAweDQwMDAKICAgIH07CgoK ICAgIHR5cGVkZWYgdWludCBXU3RhdGU7CgoKICAgIGVudW0gV2lkZ2V0U3RhdGUgewogICAgICAg IFdTdGF0ZV9DcmVhdGVkID0gMHgwMDAwMDAwMSwKICAgICAgICBXU3RhdGVfRGlzYWJsZWQgPSAw eDAwMDAwMDAyLAogICAgICAgIFdTdGF0ZV9WaXNpYmxlID0gMHgwMDAwMDAwNCwKICAgICAgICBX U3RhdGVfRm9yY2VIaWRlID0gMHgwMDAwMDAwOCwKICAgICAgICBXU3RhdGVfT3duQ3Vyc29yID0g MHgwMDAwMDAxMCwKICAgICAgICBXU3RhdGVfTW91c2VUcmFja2luZyA9IDB4MDAwMDAwMjAsCiAg ICAgICAgV1N0YXRlX0NvbXByZXNzS2V5cyA9IDB4MDAwMDAwNDAsCiAgICAgICAgV1N0YXRlX0Js b2NrVXBkYXRlcyA9IDB4MDAwMDAwODAsCiAgICAgICAgV1N0YXRlX0luUGFpbnRFdmVudCA9IDB4 MDAwMDAxMDAsCiAgICAgICAgV1N0YXRlX1JlcGFyZW50ZWQgPSAweDAwMDAwMjAwLAogICAgICAg IFdTdGF0ZV9Db25maWdQZW5kaW5nID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3RhdGVfUmVzaXpl ZCA9IDB4MDAwMDA4MDAsCiAgICAgICAgV1N0YXRlX0F1dG9NYXNrID0gMHgwMDAwMTAwMCwKICAg ICAgICBXU3RhdGVfUG9saXNoZWQgPSAweDAwMDAyMDAwLAogICAgICAgIFdTdGF0ZV9ETkQgPSAw eDAwMDA0MDAwLAogICAgICAgIFdTdGF0ZV9SZXNlcnZlZDAgPSAweDAwMDA4MDAwLAogICAgICAg IFdTdGF0ZV9SZXNlcnZlZDEgPSAweDAwMDEwMDAwLAogICAgICAgIFdTdGF0ZV9SZXNlcnZlZDIg PSAweDAwMDIwMDAwLAogICAgICAgIFdTdGF0ZV9SZXNlcnZlZDMgPSAweDAwMDQwMDAwLAogICAg ICAgIFdTdGF0ZV9NYXhpbWl6ZWQgPSAweDAwMDgwMDAwLAogICAgICAgIFdTdGF0ZV9NaW5pbWl6 ZWQgPSAweDAwMTAwMDAwLAogICAgICAgIFdTdGF0ZV9Gb3JjZURpc2FibGVkID0gMHgwMDIwMDAw MCwKICAgICAgICBXU3RhdGVfRXhwb3NlZCA9IDB4MDA0MDAwMDAsCiAgICAgICAgV1N0YXRlX0hh c01vdXNlID0gMHgwMDgwMDAwMAogICAgfTsKCgogICAgdHlwZWRlZiB1aW50IFdGbGFnczsKCgog ICAgZW51bSBXaWRnZXRGbGFncyB7CiAgICAgICAgV1R5cGVfVG9wTGV2ZWwgPSAweDAwMDAwMDAx LAogICAgICAgIFdUeXBlX0RpYWxvZyA9IDB4MDAwMDAwMDIsCiAgICAgICAgV1R5cGVfUG9wdXAg PSAweDAwMDAwMDA0LAogICAgICAgIFdUeXBlX0Rlc2t0b3AgPSAweDAwMDAwMDA4LAogICAgICAg IFdUeXBlX01hc2sgPSAweDAwMDAwMDBmLAoKICAgICAgICBXU3R5bGVfQ3VzdG9taXplID0gMHgw MDAwMDAxMCwKICAgICAgICBXU3R5bGVfTm9ybWFsQm9yZGVyID0gMHgwMDAwMDAyMCwKICAgICAg ICBXU3R5bGVfRGlhbG9nQm9yZGVyID0gMHgwMDAwMDA0MCwKICAgICAgICBXU3R5bGVfTm9Cb3Jk ZXIgPSAweDAwMDAyMDAwLAogICAgICAgIFdTdHlsZV9UaXRsZSA9IDB4MDAwMDAwODAsCiAgICAg ICAgV1N0eWxlX1N5c01lbnUgPSAweDAwMDAwMTAwLAogICAgICAgIFdTdHlsZV9NaW5pbWl6ZSA9 IDB4MDAwMDAyMDAsCiAgICAgICAgV1N0eWxlX01heGltaXplID0gMHgwMDAwMDQwMCwKICAgICAg ICBXU3R5bGVfTWluTWF4ID0gV1N0eWxlX01pbmltaXplIHwgV1N0eWxlX01heGltaXplLAogICAg ICAgIFdTdHlsZV9Ub29sID0gMHgwMDAwMDgwMCwKICAgICAgICBXU3R5bGVfU3RheXNPblRvcCA9 IDB4MDAwMDEwMDAsCiAgICAgICAgV1N0eWxlX0NvbnRleHRIZWxwID0gMHgwMDAwNDAwMCwKICAg ICAgICBXU3R5bGVfUmVzZXJ2ZWQgPSAweDAwMDA4MDAwLAogICAgICAgIFdTdHlsZV9NYXNrID0g MHgwMDAwZmZmMCwKCiAgICAgICAgV0Rlc3RydWN0aXZlQ2xvc2UgPSAweDAwMDEwMDAwLAogICAg ICAgIFdQYWludERlc2t0b3AgPSAweDAwMDIwMDAwLAogICAgICAgIFdQYWludFVuY2xpcHBlZCA9 IDB4MDAwNDAwMDAsCiAgICAgICAgV1BhaW50Q2xldmVyID0gMHgwMDA4MDAwMCwKICAgICAgICBX UmVzaXplTm9FcmFzZSA9IDB4MDAxMDAwMDAsCiAgICAgICAgV01vdXNlTm9NYXNrID0gMHgwMDIw MDAwMCwKICAgICAgICBXU3RhdGljQ29udGVudHMgPSAweDAwNDAwMDAwLAogICAgICAgIFdSZXBh aW50Tm9FcmFzZSA9IDB4MDA4MDAwMDAsCgogICAgICAgIFdYMTFCeXBhc3NXTSA9IDB4MDEwMDAw MDAsCiAgICAgICAgV1dpbk93bkRDID0gMHgwMDAwMDAwMCwKCgoKCiAgICAgICAgV0dyb3VwTGVh ZGVyID0gMHgwMjAwMDAwMCwKICAgICAgICBXU2hvd01vZGFsID0gMHgwNDAwMDAwMCwKICAgICAg ICBXTm9Nb3VzZVByb3BhZ2F0aW9uID0gMHgwODAwMDAwMCwKICAgICAgICBXU3ViV2luZG93ID0g MHgxMDAwMDAwMAoKICAgICAgICAsCiAgICAgICAgV05vcnRoV2VzdEdyYXZpdHkgPSBXU3RhdGlj Q29udGVudHMsCiAgICAgICAgV1R5cGVfTW9kYWwgPSBXVHlwZV9EaWFsb2cgfCBXU2hvd01vZGFs LAogICAgICAgIFdTdHlsZV9EaWFsb2cgPSBXVHlwZV9EaWFsb2csCiAgICAgICAgV1N0eWxlX05v Qm9yZGVyRXggPSBXU3R5bGVfTm9Cb3JkZXIKCiAgICB9OwoKCgoKCiAgICBlbnVtIEltYWdlQ29u dmVyc2lvbkZsYWdzIHsKICAgICAgICBDb2xvck1vZGVfTWFzayA9IDB4MDAwMDAwMDMsCiAgICAg ICAgQXV0b0NvbG9yID0gMHgwMDAwMDAwMCwKICAgICAgICBDb2xvck9ubHkgPSAweDAwMDAwMDAz LAogICAgICAgIE1vbm9Pbmx5ID0gMHgwMDAwMDAwMiwKCgogICAgICAgIEFscGhhRGl0aGVyX01h c2sgPSAweDAwMDAwMDBjLAogICAgICAgIFRocmVzaG9sZEFscGhhRGl0aGVyID0gMHgwMDAwMDAw MCwKICAgICAgICBPcmRlcmVkQWxwaGFEaXRoZXIgPSAweDAwMDAwMDA0LAogICAgICAgIERpZmZ1 c2VBbHBoYURpdGhlciA9IDB4MDAwMDAwMDgsCiAgICAgICAgTm9BbHBoYSA9IDB4MDAwMDAwMGMs CgogICAgICAgIERpdGhlcl9NYXNrID0gMHgwMDAwMDAzMCwKICAgICAgICBEaWZmdXNlRGl0aGVy ID0gMHgwMDAwMDAwMCwKICAgICAgICBPcmRlcmVkRGl0aGVyID0gMHgwMDAwMDAxMCwKICAgICAg ICBUaHJlc2hvbGREaXRoZXIgPSAweDAwMDAwMDIwLAoKCiAgICAgICAgRGl0aGVyTW9kZV9NYXNr ID0gMHgwMDAwMDBjMCwKICAgICAgICBBdXRvRGl0aGVyID0gMHgwMDAwMDAwMCwKICAgICAgICBQ cmVmZXJEaXRoZXIgPSAweDAwMDAwMDQwLAogICAgICAgIEF2b2lkRGl0aGVyID0gMHgwMDAwMDA4 MAogICAgfTsKCgogICAgZW51bSBCR01vZGUgewogICAgICAgIFRyYW5zcGFyZW50TW9kZSwKICAg ICAgICBPcGFxdWVNb2RlCiAgICB9OwoKCgogICAgZW51bSBQYWludFVuaXQgewogICAgICAgIFBp eGVsVW5pdCwKICAgICAgICBMb01ldHJpY1VuaXQsCiAgICAgICAgSGlNZXRyaWNVbml0LAogICAg ICAgIExvRW5nbGlzaFVuaXQsCiAgICAgICAgSGlFbmdsaXNoVW5pdCwKICAgICAgICBUd2lwc1Vu aXQKICAgIH07CiMgMjY0ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcW5h bWVzcGFjZS5oIgogICAgZW51bSBHVUlTdHlsZSB7CiAgICAgICAgTWFjU3R5bGUsCiAgICAgICAg V2luZG93c1N0eWxlLAogICAgICAgIFdpbjNTdHlsZSwKICAgICAgICBQTVN0eWxlLAogICAgICAg IE1vdGlmU3R5bGUKICAgIH07CgoKCiAgICBlbnVtIE1vZGlmaWVyIHsKICAgICAgICBTSElGVCA9 IDB4MDAyMDAwMDAsCiAgICAgICAgQ1RSTCA9IDB4MDA0MDAwMDAsCiAgICAgICAgQUxUID0gMHgw MDgwMDAwMCwKICAgICAgICBNT0RJRklFUl9NQVNLID0gMHgwMGUwMDAwMCwKICAgICAgICBVTklD T0RFX0FDQ0VMID0gMHgxMDAwMDAwMCwKCiAgICAgICAgQVNDSUlfQUNDRUwgPSBVTklDT0RFX0FD Q0VMCiAgICB9OwoKCiAgICBlbnVtIEtleSB7CiAgICAgICAgS2V5X0VzY2FwZSA9IDB4MTAwMCwK ICAgICAgICBLZXlfVGFiID0gMHgxMDAxLAogICAgICAgIEtleV9CYWNrdGFiID0gMHgxMDAyLCBL ZXlfQmFja1RhYiA9IEtleV9CYWNrdGFiLAogICAgICAgIEtleV9CYWNrc3BhY2UgPSAweDEwMDMs IEtleV9CYWNrU3BhY2UgPSBLZXlfQmFja3NwYWNlLAogICAgICAgIEtleV9SZXR1cm4gPSAweDEw MDQsCiAgICAgICAgS2V5X0VudGVyID0gMHgxMDA1LAogICAgICAgIEtleV9JbnNlcnQgPSAweDEw MDYsCiAgICAgICAgS2V5X0RlbGV0ZSA9IDB4MTAwNywKICAgICAgICBLZXlfUGF1c2UgPSAweDEw MDgsCiAgICAgICAgS2V5X1ByaW50ID0gMHgxMDA5LAogICAgICAgIEtleV9TeXNSZXEgPSAweDEw MGEsCiAgICAgICAgS2V5X0hvbWUgPSAweDEwMTAsCiAgICAgICAgS2V5X0VuZCA9IDB4MTAxMSwK ICAgICAgICBLZXlfTGVmdCA9IDB4MTAxMiwKICAgICAgICBLZXlfVXAgPSAweDEwMTMsCiAgICAg ICAgS2V5X1JpZ2h0ID0gMHgxMDE0LAogICAgICAgIEtleV9Eb3duID0gMHgxMDE1LAogICAgICAg IEtleV9QcmlvciA9IDB4MTAxNiwgS2V5X1BhZ2VVcCA9IEtleV9QcmlvciwKICAgICAgICBLZXlf TmV4dCA9IDB4MTAxNywgS2V5X1BhZ2VEb3duID0gS2V5X05leHQsCiAgICAgICAgS2V5X1NoaWZ0 ID0gMHgxMDIwLAogICAgICAgIEtleV9Db250cm9sID0gMHgxMDIxLAogICAgICAgIEtleV9NZXRh ID0gMHgxMDIyLAogICAgICAgIEtleV9BbHQgPSAweDEwMjMsCiAgICAgICAgS2V5X0NhcHNMb2Nr ID0gMHgxMDI0LAogICAgICAgIEtleV9OdW1Mb2NrID0gMHgxMDI1LAogICAgICAgIEtleV9TY3Jv bGxMb2NrID0gMHgxMDI2LAogICAgICAgIEtleV9GMSA9IDB4MTAzMCwKICAgICAgICBLZXlfRjIg PSAweDEwMzEsCiAgICAgICAgS2V5X0YzID0gMHgxMDMyLAogICAgICAgIEtleV9GNCA9IDB4MTAz MywKICAgICAgICBLZXlfRjUgPSAweDEwMzQsCiAgICAgICAgS2V5X0Y2ID0gMHgxMDM1LAogICAg ICAgIEtleV9GNyA9IDB4MTAzNiwKICAgICAgICBLZXlfRjggPSAweDEwMzcsCiAgICAgICAgS2V5 X0Y5ID0gMHgxMDM4LAogICAgICAgIEtleV9GMTAgPSAweDEwMzksCiAgICAgICAgS2V5X0YxMSA9 IDB4MTAzYSwKICAgICAgICBLZXlfRjEyID0gMHgxMDNiLAogICAgICAgIEtleV9GMTMgPSAweDEw M2MsCiAgICAgICAgS2V5X0YxNCA9IDB4MTAzZCwKICAgICAgICBLZXlfRjE1ID0gMHgxMDNlLAog ICAgICAgIEtleV9GMTYgPSAweDEwM2YsCiAgICAgICAgS2V5X0YxNyA9IDB4MTA0MCwKICAgICAg ICBLZXlfRjE4ID0gMHgxMDQxLAogICAgICAgIEtleV9GMTkgPSAweDEwNDIsCiAgICAgICAgS2V5 X0YyMCA9IDB4MTA0MywKICAgICAgICBLZXlfRjIxID0gMHgxMDQ0LAogICAgICAgIEtleV9GMjIg PSAweDEwNDUsCiAgICAgICAgS2V5X0YyMyA9IDB4MTA0NiwKICAgICAgICBLZXlfRjI0ID0gMHgx MDQ3LAogICAgICAgIEtleV9GMjUgPSAweDEwNDgsCiAgICAgICAgS2V5X0YyNiA9IDB4MTA0OSwK ICAgICAgICBLZXlfRjI3ID0gMHgxMDRhLAogICAgICAgIEtleV9GMjggPSAweDEwNGIsCiAgICAg ICAgS2V5X0YyOSA9IDB4MTA0YywKICAgICAgICBLZXlfRjMwID0gMHgxMDRkLAogICAgICAgIEtl eV9GMzEgPSAweDEwNGUsCiAgICAgICAgS2V5X0YzMiA9IDB4MTA0ZiwKICAgICAgICBLZXlfRjMz ID0gMHgxMDUwLAogICAgICAgIEtleV9GMzQgPSAweDEwNTEsCiAgICAgICAgS2V5X0YzNSA9IDB4 MTA1MiwKICAgICAgICBLZXlfU3VwZXJfTCA9IDB4MTA1MywKICAgICAgICBLZXlfU3VwZXJfUiA9 IDB4MTA1NCwKICAgICAgICBLZXlfTWVudSA9IDB4MTA1NSwKICAgICAgICBLZXlfSHlwZXJfTCA9 IDB4MTA1NiwKICAgICAgICBLZXlfSHlwZXJfUiA9IDB4MTA1NywKICAgICAgICBLZXlfSGVscCA9 IDB4MTA1OCwKICAgICAgICBLZXlfRGlyZWN0aW9uX0wgPSAweDEwNTksCiAgICAgICAgS2V5X0Rp cmVjdGlvbl9SID0gMHgxMDYwLAogICAgICAgIEtleV9TcGFjZSA9IDB4MjAsCiAgICAgICAgS2V5 X0FueSA9IEtleV9TcGFjZSwKICAgICAgICBLZXlfRXhjbGFtID0gMHgyMSwKICAgICAgICBLZXlf UXVvdGVEYmwgPSAweDIyLAogICAgICAgIEtleV9OdW1iZXJTaWduID0gMHgyMywKICAgICAgICBL ZXlfRG9sbGFyID0gMHgyNCwKICAgICAgICBLZXlfUGVyY2VudCA9IDB4MjUsCiAgICAgICAgS2V5 X0FtcGVyc2FuZCA9IDB4MjYsCiAgICAgICAgS2V5X0Fwb3N0cm9waGUgPSAweDI3LAogICAgICAg IEtleV9QYXJlbkxlZnQgPSAweDI4LAogICAgICAgIEtleV9QYXJlblJpZ2h0ID0gMHgyOSwKICAg ICAgICBLZXlfQXN0ZXJpc2sgPSAweDJhLAogICAgICAgIEtleV9QbHVzID0gMHgyYiwKICAgICAg ICBLZXlfQ29tbWEgPSAweDJjLAogICAgICAgIEtleV9NaW51cyA9IDB4MmQsCiAgICAgICAgS2V5 X1BlcmlvZCA9IDB4MmUsCiAgICAgICAgS2V5X1NsYXNoID0gMHgyZiwKICAgICAgICBLZXlfMCA9 IDB4MzAsCiAgICAgICAgS2V5XzEgPSAweDMxLAogICAgICAgIEtleV8yID0gMHgzMiwKICAgICAg ICBLZXlfMyA9IDB4MzMsCiAgICAgICAgS2V5XzQgPSAweDM0LAogICAgICAgIEtleV81ID0gMHgz NSwKICAgICAgICBLZXlfNiA9IDB4MzYsCiAgICAgICAgS2V5XzcgPSAweDM3LAogICAgICAgIEtl eV84ID0gMHgzOCwKICAgICAgICBLZXlfOSA9IDB4MzksCiAgICAgICAgS2V5X0NvbG9uID0gMHgz YSwKICAgICAgICBLZXlfU2VtaWNvbG9uID0gMHgzYiwKICAgICAgICBLZXlfTGVzcyA9IDB4M2Ms CiAgICAgICAgS2V5X0VxdWFsID0gMHgzZCwKICAgICAgICBLZXlfR3JlYXRlciA9IDB4M2UsCiAg ICAgICAgS2V5X1F1ZXN0aW9uID0gMHgzZiwKICAgICAgICBLZXlfQXQgPSAweDQwLAogICAgICAg IEtleV9BID0gMHg0MSwKICAgICAgICBLZXlfQiA9IDB4NDIsCiAgICAgICAgS2V5X0MgPSAweDQz LAogICAgICAgIEtleV9EID0gMHg0NCwKICAgICAgICBLZXlfRSA9IDB4NDUsCiAgICAgICAgS2V5 X0YgPSAweDQ2LAogICAgICAgIEtleV9HID0gMHg0NywKICAgICAgICBLZXlfSCA9IDB4NDgsCiAg ICAgICAgS2V5X0kgPSAweDQ5LAogICAgICAgIEtleV9KID0gMHg0YSwKICAgICAgICBLZXlfSyA9 IDB4NGIsCiAgICAgICAgS2V5X0wgPSAweDRjLAogICAgICAgIEtleV9NID0gMHg0ZCwKICAgICAg ICBLZXlfTiA9IDB4NGUsCiAgICAgICAgS2V5X08gPSAweDRmLAogICAgICAgIEtleV9QID0gMHg1 MCwKICAgICAgICBLZXlfUSA9IDB4NTEsCiAgICAgICAgS2V5X1IgPSAweDUyLAogICAgICAgIEtl eV9TID0gMHg1MywKICAgICAgICBLZXlfVCA9IDB4NTQsCiAgICAgICAgS2V5X1UgPSAweDU1LAog ICAgICAgIEtleV9WID0gMHg1NiwKICAgICAgICBLZXlfVyA9IDB4NTcsCiAgICAgICAgS2V5X1gg PSAweDU4LAogICAgICAgIEtleV9ZID0gMHg1OSwKICAgICAgICBLZXlfWiA9IDB4NWEsCiAgICAg ICAgS2V5X0JyYWNrZXRMZWZ0ID0gMHg1YiwKICAgICAgICBLZXlfQmFja3NsYXNoID0gMHg1YywK ICAgICAgICBLZXlfQnJhY2tldFJpZ2h0ID0gMHg1ZCwKICAgICAgICBLZXlfQXNjaWlDaXJjdW0g PSAweDVlLAogICAgICAgIEtleV9VbmRlcnNjb3JlID0gMHg1ZiwKICAgICAgICBLZXlfUXVvdGVM ZWZ0ID0gMHg2MCwKICAgICAgICBLZXlfQnJhY2VMZWZ0ID0gMHg3YiwKICAgICAgICBLZXlfQmFy ID0gMHg3YywKICAgICAgICBLZXlfQnJhY2VSaWdodCA9IDB4N2QsCiAgICAgICAgS2V5X0FzY2lp VGlsZGUgPSAweDdlLAoKCgogICAgICAgIEtleV9ub2JyZWFrc3BhY2UgPSAweDBhMCwKICAgICAg ICBLZXlfZXhjbGFtZG93biA9IDB4MGExLAogICAgICAgIEtleV9jZW50ID0gMHgwYTIsCiAgICAg ICAgS2V5X3N0ZXJsaW5nID0gMHgwYTMsCiAgICAgICAgS2V5X2N1cnJlbmN5ID0gMHgwYTQsCiAg ICAgICAgS2V5X3llbiA9IDB4MGE1LAogICAgICAgIEtleV9icm9rZW5iYXIgPSAweDBhNiwKICAg ICAgICBLZXlfc2VjdGlvbiA9IDB4MGE3LAogICAgICAgIEtleV9kaWFlcmVzaXMgPSAweDBhOCwK ICAgICAgICBLZXlfY29weXJpZ2h0ID0gMHgwYTksCiAgICAgICAgS2V5X29yZGZlbWluaW5lID0g MHgwYWEsCiAgICAgICAgS2V5X2d1aWxsZW1vdGxlZnQgPSAweDBhYiwKICAgICAgICBLZXlfbm90 c2lnbiA9IDB4MGFjLAogICAgICAgIEtleV9oeXBoZW4gPSAweDBhZCwKICAgICAgICBLZXlfcmVn aXN0ZXJlZCA9IDB4MGFlLAogICAgICAgIEtleV9tYWNyb24gPSAweDBhZiwKICAgICAgICBLZXlf ZGVncmVlID0gMHgwYjAsCiAgICAgICAgS2V5X3BsdXNtaW51cyA9IDB4MGIxLAogICAgICAgIEtl eV90d29zdXBlcmlvciA9IDB4MGIyLAogICAgICAgIEtleV90aHJlZXN1cGVyaW9yID0gMHgwYjMs CiAgICAgICAgS2V5X2FjdXRlID0gMHgwYjQsCiAgICAgICAgS2V5X211ID0gMHgwYjUsCiAgICAg ICAgS2V5X3BhcmFncmFwaCA9IDB4MGI2LAogICAgICAgIEtleV9wZXJpb2RjZW50ZXJlZCA9IDB4 MGI3LAogICAgICAgIEtleV9jZWRpbGxhID0gMHgwYjgsCiAgICAgICAgS2V5X29uZXN1cGVyaW9y ID0gMHgwYjksCiAgICAgICAgS2V5X21hc2N1bGluZSA9IDB4MGJhLAogICAgICAgIEtleV9ndWls bGVtb3RyaWdodCA9IDB4MGJiLAogICAgICAgIEtleV9vbmVxdWFydGVyID0gMHgwYmMsCiAgICAg ICAgS2V5X29uZWhhbGYgPSAweDBiZCwKICAgICAgICBLZXlfdGhyZWVxdWFydGVycyA9IDB4MGJl LAogICAgICAgIEtleV9xdWVzdGlvbmRvd24gPSAweDBiZiwKICAgICAgICBLZXlfQWdyYXZlID0g MHgwYzAsCiAgICAgICAgS2V5X0FhY3V0ZSA9IDB4MGMxLAogICAgICAgIEtleV9BY2lyY3VtZmxl eCA9IDB4MGMyLAogICAgICAgIEtleV9BdGlsZGUgPSAweDBjMywKICAgICAgICBLZXlfQWRpYWVy ZXNpcyA9IDB4MGM0LAogICAgICAgIEtleV9BcmluZyA9IDB4MGM1LAogICAgICAgIEtleV9BRSA9 IDB4MGM2LAogICAgICAgIEtleV9DY2VkaWxsYSA9IDB4MGM3LAogICAgICAgIEtleV9FZ3JhdmUg PSAweDBjOCwKICAgICAgICBLZXlfRWFjdXRlID0gMHgwYzksCiAgICAgICAgS2V5X0VjaXJjdW1m bGV4ID0gMHgwY2EsCiAgICAgICAgS2V5X0VkaWFlcmVzaXMgPSAweDBjYiwKICAgICAgICBLZXlf SWdyYXZlID0gMHgwY2MsCiAgICAgICAgS2V5X0lhY3V0ZSA9IDB4MGNkLAogICAgICAgIEtleV9J Y2lyY3VtZmxleCA9IDB4MGNlLAogICAgICAgIEtleV9JZGlhZXJlc2lzID0gMHgwY2YsCiAgICAg ICAgS2V5X0VUSCA9IDB4MGQwLAogICAgICAgIEtleV9OdGlsZGUgPSAweDBkMSwKICAgICAgICBL ZXlfT2dyYXZlID0gMHgwZDIsCiAgICAgICAgS2V5X09hY3V0ZSA9IDB4MGQzLAogICAgICAgIEtl eV9PY2lyY3VtZmxleCA9IDB4MGQ0LAogICAgICAgIEtleV9PdGlsZGUgPSAweDBkNSwKICAgICAg ICBLZXlfT2RpYWVyZXNpcyA9IDB4MGQ2LAogICAgICAgIEtleV9tdWx0aXBseSA9IDB4MGQ3LAog ICAgICAgIEtleV9Pb2JsaXF1ZSA9IDB4MGQ4LAogICAgICAgIEtleV9VZ3JhdmUgPSAweDBkOSwK ICAgICAgICBLZXlfVWFjdXRlID0gMHgwZGEsCiAgICAgICAgS2V5X1VjaXJjdW1mbGV4ID0gMHgw ZGIsCiAgICAgICAgS2V5X1VkaWFlcmVzaXMgPSAweDBkYywKICAgICAgICBLZXlfWWFjdXRlID0g MHgwZGQsCiAgICAgICAgS2V5X1RIT1JOID0gMHgwZGUsCiAgICAgICAgS2V5X3NzaGFycCA9IDB4 MGRmLAogICAgICAgIEtleV9hZ3JhdmUgPSAweDBlMCwKICAgICAgICBLZXlfYWFjdXRlID0gMHgw ZTEsCiAgICAgICAgS2V5X2FjaXJjdW1mbGV4ID0gMHgwZTIsCiAgICAgICAgS2V5X2F0aWxkZSA9 IDB4MGUzLAogICAgICAgIEtleV9hZGlhZXJlc2lzID0gMHgwZTQsCiAgICAgICAgS2V5X2FyaW5n ID0gMHgwZTUsCiAgICAgICAgS2V5X2FlID0gMHgwZTYsCiAgICAgICAgS2V5X2NjZWRpbGxhID0g MHgwZTcsCiAgICAgICAgS2V5X2VncmF2ZSA9IDB4MGU4LAogICAgICAgIEtleV9lYWN1dGUgPSAw eDBlOSwKICAgICAgICBLZXlfZWNpcmN1bWZsZXggPSAweDBlYSwKICAgICAgICBLZXlfZWRpYWVy ZXNpcyA9IDB4MGViLAogICAgICAgIEtleV9pZ3JhdmUgPSAweDBlYywKICAgICAgICBLZXlfaWFj dXRlID0gMHgwZWQsCiAgICAgICAgS2V5X2ljaXJjdW1mbGV4ID0gMHgwZWUsCiAgICAgICAgS2V5 X2lkaWFlcmVzaXMgPSAweDBlZiwKICAgICAgICBLZXlfZXRoID0gMHgwZjAsCiAgICAgICAgS2V5 X250aWxkZSA9IDB4MGYxLAogICAgICAgIEtleV9vZ3JhdmUgPSAweDBmMiwKICAgICAgICBLZXlf b2FjdXRlID0gMHgwZjMsCiAgICAgICAgS2V5X29jaXJjdW1mbGV4ID0gMHgwZjQsCiAgICAgICAg S2V5X290aWxkZSA9IDB4MGY1LAogICAgICAgIEtleV9vZGlhZXJlc2lzID0gMHgwZjYsCiAgICAg ICAgS2V5X2RpdmlzaW9uID0gMHgwZjcsCiAgICAgICAgS2V5X29zbGFzaCA9IDB4MGY4LAogICAg ICAgIEtleV91Z3JhdmUgPSAweDBmOSwKICAgICAgICBLZXlfdWFjdXRlID0gMHgwZmEsCiAgICAg ICAgS2V5X3VjaXJjdW1mbGV4ID0gMHgwZmIsCiAgICAgICAgS2V5X3VkaWFlcmVzaXMgPSAweDBm YywKICAgICAgICBLZXlfeWFjdXRlID0gMHgwZmQsCiAgICAgICAgS2V5X3Rob3JuID0gMHgwZmUs CiAgICAgICAgS2V5X3lkaWFlcmVzaXMgPSAweDBmZiwKCiAgICAgICAgS2V5X3Vua25vd24gPSAw eGZmZmYKICAgIH07CgoKICAgIGVudW0gQXJyb3dUeXBlIHsKICAgICAgICBVcEFycm93LAogICAg ICAgIERvd25BcnJvdywKICAgICAgICBMZWZ0QXJyb3csCiAgICAgICAgUmlnaHRBcnJvdwogICAg fTsKCgogICAgZW51bSBSYXN0ZXJPcCB7CiAgICAgICAgQ29weVJPUCwKICAgICAgICBPclJPUCwK ICAgICAgICBYb3JST1AsCiAgICAgICAgTm90QW5kUk9QLCBFcmFzZVJPUD1Ob3RBbmRST1AsCiAg ICAgICAgTm90Q29weVJPUCwKICAgICAgICBOb3RPclJPUCwKICAgICAgICBOb3RYb3JST1AsCiAg ICAgICAgQW5kUk9QLCBOb3RFcmFzZVJPUD1BbmRST1AsCiAgICAgICAgTm90Uk9QLAogICAgICAg IENsZWFyUk9QLAogICAgICAgIFNldFJPUCwKICAgICAgICBOb3BST1AsCiAgICAgICAgQW5kTm90 Uk9QLAogICAgICAgIE9yTm90Uk9QLAogICAgICAgIE5hbmRST1AsCiAgICAgICAgTm9yUk9QLCBM YXN0Uk9QPU5vclJPUAogICAgfTsKCgogICAgZW51bSBQZW5TdHlsZSB7CiAgICAgICAgTm9QZW4s CiAgICAgICAgU29saWRMaW5lLAogICAgICAgIERhc2hMaW5lLAogICAgICAgIERvdExpbmUsCiAg ICAgICAgRGFzaERvdExpbmUsCiAgICAgICAgRGFzaERvdERvdExpbmUsCiAgICAgICAgTVBlblN0 eWxlID0gMHgwZgogICAgfTsKCgogICAgZW51bSBQZW5DYXBTdHlsZSB7CiAgICAgICAgRmxhdENh cCA9IDB4MDAsCiAgICAgICAgU3F1YXJlQ2FwID0gMHgxMCwKICAgICAgICBSb3VuZENhcCA9IDB4 MjAsCiAgICAgICAgTVBlbkNhcFN0eWxlID0gMHgzMAogICAgfTsKCgogICAgZW51bSBQZW5Kb2lu U3R5bGUgewogICAgICAgIE1pdGVySm9pbiA9IDB4MDAsCiAgICAgICAgQmV2ZWxKb2luID0gMHg0 MCwKICAgICAgICBSb3VuZEpvaW4gPSAweDgwLAogICAgICAgIE1QZW5Kb2luU3R5bGUgPSAweGMw CiAgICB9OwoKCiAgICBlbnVtIEJydXNoU3R5bGUgewogICAgICAgIE5vQnJ1c2gsCiAgICAgICAg U29saWRQYXR0ZXJuLAogICAgICAgIERlbnNlMVBhdHRlcm4sCiAgICAgICAgRGVuc2UyUGF0dGVy biwKICAgICAgICBEZW5zZTNQYXR0ZXJuLAogICAgICAgIERlbnNlNFBhdHRlcm4sCiAgICAgICAg RGVuc2U1UGF0dGVybiwKICAgICAgICBEZW5zZTZQYXR0ZXJuLAogICAgICAgIERlbnNlN1BhdHRl cm4sCiAgICAgICAgSG9yUGF0dGVybiwKICAgICAgICBWZXJQYXR0ZXJuLAogICAgICAgIENyb3Nz UGF0dGVybiwKICAgICAgICBCRGlhZ1BhdHRlcm4sCiAgICAgICAgRkRpYWdQYXR0ZXJuLAogICAg ICAgIERpYWdDcm9zc1BhdHRlcm4sCiAgICAgICAgQ3VzdG9tUGF0dGVybj0yNAogICAgfTsKCgog ICAgZW51bSBXaW5kb3dzVmVyc2lvbiB7CiAgICAgICAgV1ZfMzJzID0gMHgwMDAxLAogICAgICAg IFdWXzk1ID0gMHgwMDAyLAogICAgICAgIFdWXzk4ID0gMHgwMDAzLAogICAgICAgIFdWX01lID0g MHgwMDA0LAogICAgICAgIFdWX0RPU19iYXNlZCA9IDB4MDAwZiwKCiAgICAgICAgV1ZfTlQgPSAw eDAwMTAsCiAgICAgICAgV1ZfMjAwMCA9IDB4MDAyMCwKICAgICAgICBXVl9YUCA9IDB4MDAzMCwK ICAgICAgICBXVl9OVF9iYXNlZCA9IDB4MDBmMAogICAgfTsKCgogICAgZW51bSBVSUVmZmVjdCB7 CiAgICAgICAgVUlfR2VuZXJhbCwKICAgICAgICBVSV9BbmltYXRlTWVudSwKICAgICAgICBVSV9G YWRlTWVudSwKICAgICAgICBVSV9BbmltYXRlQ29tYm8sCiAgICAgICAgVUlfQW5pbWF0ZVRvb2x0 aXAsCiAgICAgICAgVUlfRmFkZVRvb2x0aXAKICAgIH07CgoKICAgIGVudW0gQ3Vyc29yU2hhcGUg ewogICAgICAgIEFycm93Q3Vyc29yLAogICAgICAgIFVwQXJyb3dDdXJzb3IsCiAgICAgICAgQ3Jv c3NDdXJzb3IsCiAgICAgICAgV2FpdEN1cnNvciwKICAgICAgICBJYmVhbUN1cnNvciwKICAgICAg ICBTaXplVmVyQ3Vyc29yLAogICAgICAgIFNpemVIb3JDdXJzb3IsCiAgICAgICAgU2l6ZUJEaWFn Q3Vyc29yLAogICAgICAgIFNpemVGRGlhZ0N1cnNvciwKICAgICAgICBTaXplQWxsQ3Vyc29yLAog ICAgICAgIEJsYW5rQ3Vyc29yLAogICAgICAgIFNwbGl0VkN1cnNvciwKICAgICAgICBTcGxpdEhD dXJzb3IsCiAgICAgICAgUG9pbnRpbmdIYW5kQ3Vyc29yLAogICAgICAgIEZvcmJpZGRlbkN1cnNv ciwKICAgICAgICBXaGF0c1RoaXNDdXJzb3IsCiAgICAgICAgTGFzdEN1cnNvciA9IFdoYXRzVGhp c0N1cnNvciwKICAgICAgICBCaXRtYXBDdXJzb3IgPSAyNAogICAgfTsKCgoKICAgIHN0YXRpYyBj b25zdCBRQ3Vyc29yICYgYXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHVw QXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGNyb3NzQ3Vyc29yOwogICAg c3RhdGljIGNvbnN0IFFDdXJzb3IgJiB3YWl0Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJz b3IgJiBpYmVhbUN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZVZlckN1cnNv cjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZUhvckN1cnNvcjsKICAgIHN0YXRpYyBj b25zdCBRQ3Vyc29yICYgc2l6ZUJEaWFnQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3Ig JiBzaXplRkRpYWdDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVBbGxDdXJz b3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGJsYW5rQ3Vyc29yOwogICAgc3RhdGljIGNv bnN0IFFDdXJzb3IgJiBzcGxpdFZDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBz cGxpdEhDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBwb2ludGluZ0hhbmRDdXJz b3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGZvcmJpZGRlbkN1cnNvcjsKICAgIHN0YXRp YyBjb25zdCBRQ3Vyc29yICYgd2hhdHNUaGlzQ3Vyc29yOwoKCiAgICBlbnVtIFRleHRGb3JtYXQg ewogICAgICAgIFBsYWluVGV4dCwKICAgICAgICBSaWNoVGV4dCwKICAgICAgICBBdXRvVGV4dAog ICAgfTsKCgogICAgZW51bSBEb2NrIHsKICAgICAgICBEb2NrVW5tYW5hZ2VkLAogICAgICAgIERv Y2tUb3JuT2ZmLAogICAgICAgIERvY2tUb3AsCiAgICAgICAgRG9ja0JvdHRvbSwKICAgICAgICBE b2NrUmlnaHQsCiAgICAgICAgRG9ja0xlZnQsCiAgICAgICAgRG9ja01pbmltaXplZAoKICAgICAg ICAsCiAgICAgICAgVW5tYW5hZ2VkID0gRG9ja1VubWFuYWdlZCwKICAgICAgICBUb3JuT2ZmID0g RG9ja1Rvcm5PZmYsCiAgICAgICAgVG9wID0gRG9ja1RvcCwKICAgICAgICBCb3R0b20gPSBEb2Nr Qm90dG9tLAogICAgICAgIFJpZ2h0ID0gRG9ja1JpZ2h0LAogICAgICAgIExlZnQgPSBEb2NrTGVm dCwKICAgICAgICBNaW5pbWl6ZWQgPSBEb2NrTWluaW1pemVkCgogICAgfTsKCiAgICB0eXBlZGVm IERvY2sgVG9vbEJhckRvY2s7CgoKICAgIGVudW0gRGF0ZUZvcm1hdCB7CiAgICAgICAgVGV4dERh dGUsCiAgICAgICAgSVNPRGF0ZSwKICAgICAgICBMb2NhbERhdGUKICAgIH07CgoKICAgIGVudW0g QmFja2dyb3VuZE1vZGUgewogICAgICAgIEZpeGVkQ29sb3IsCiAgICAgICAgRml4ZWRQaXhtYXAs CiAgICAgICAgTm9CYWNrZ3JvdW5kLAogICAgICAgIFBhbGV0dGVGb3JlZ3JvdW5kLAogICAgICAg IFBhbGV0dGVCdXR0b24sCiAgICAgICAgUGFsZXR0ZUxpZ2h0LAogICAgICAgIFBhbGV0dGVNaWRs aWdodCwKICAgICAgICBQYWxldHRlRGFyaywKICAgICAgICBQYWxldHRlTWlkLAogICAgICAgIFBh bGV0dGVUZXh0LAogICAgICAgIFBhbGV0dGVCcmlnaHRUZXh0LAogICAgICAgIFBhbGV0dGVCYXNl LAogICAgICAgIFBhbGV0dGVCYWNrZ3JvdW5kLAogICAgICAgIFBhbGV0dGVTaGFkb3csCiAgICAg ICAgUGFsZXR0ZUhpZ2hsaWdodCwKICAgICAgICBQYWxldHRlSGlnaGxpZ2h0ZWRUZXh0LAogICAg ICAgIFBhbGV0dGVCdXR0b25UZXh0LAogICAgICAgIFBhbGV0dGVMaW5rLAogICAgICAgIFBhbGV0 dGVMaW5rVmlzaXRlZCwKICAgICAgICBYMTFQYXJlbnRSZWxhdGl2ZQogICAgfTsKCiAgICB0eXBl ZGVmIHVpbnQgQ29tcGFyaXNvbkZsYWdzOwoKCiAgICBlbnVtIFN0cmluZ0NvbXBhcmlzb25Nb2Rl IHsKICAgICAgICBDYXNlU2Vuc2l0aXZlID0gMHgwMDAwMSwKICAgICAgICBCZWdpbnNXaXRoID0g MHgwMDAwMiwKICAgICAgICBFbmRzV2l0aCA9IDB4MDAwMDQsCiAgICAgICAgQ29udGFpbnMgPSAw eDAwMDA4LAogICAgICAgIEV4YWN0TWF0Y2ggPSAweDAwMDEwCiAgICB9OwojIDc0OSAiL3Vzci9s b2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FuYW1lc3BhY2UuaCIKICAgIHR5cGVkZWYg dW5zaWduZWQgbG9uZyBIQU5ETEU7CgoKCn07CgoKY2xhc3MgUUludGVybmFsIHsKcHVibGljOgog ICAgZW51bSBQYWludERldmljZUZsYWdzIHsKICAgICAgICBVbmRlZmluZWREZXZpY2UgPSAweDAw LAogICAgICAgIFdpZGdldCA9IDB4MDEsCiAgICAgICAgUGl4bWFwID0gMHgwMiwKICAgICAgICBQ cmludGVyID0gMHgwMywKICAgICAgICBQaWN0dXJlID0gMHgwNCwKICAgICAgICBTeXN0ZW0gPSAw eDA1LAogICAgICAgIERldmljZVR5cGVNYXNrID0gMHgwZiwKICAgICAgICBFeHRlcm5hbERldmlj ZSA9IDB4MTAsCgogICAgICAgIENvbXBhdGliaWxpdHlNb2RlID0gMHgyMAogICAgfTsKfTsKIyA0 NiAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiIDIK CgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL2xpbWl0cy5o IiAxIDMKIyAxMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvbGlt aXRzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9z eXNsaW1pdHMuaCIgMSAzCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMu Mi4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEzMiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp bnV4LzMuMi4zL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgi IDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0u aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9p bmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRz LmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIv dXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xp bWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwoj IDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1 ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9s aW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAiL3Vz ci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0 cy5oIiAyIDMKIyAxMzMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRl L2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5j bHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z LjIuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA0OSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z LjAuNi9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiIDIKCgoKY2xhc3MgUVBhaW50RGV2aWNlOwpjbGFz cyBRUGFpbnREZXZpY2VNZXRyaWNzOwpjbGFzcyBRV2lkZ2V0OwpjbGFzcyBRV2lkZ2V0TWFwcGVy OwpjbGFzcyBRRGlhbG9nOwpjbGFzcyBRQ29sb3I7CmNsYXNzIFFDb2xvckdyb3VwOwpjbGFzcyBR UGFsZXR0ZTsKY2xhc3MgUUN1cnNvcjsKY2xhc3MgUVBvaW50OwpjbGFzcyBRU2l6ZTsKY2xhc3Mg UVJlY3Q7CmNsYXNzIFFQb2ludEFycmF5OwpjbGFzcyBRUGFpbnRlcjsKY2xhc3MgUVJlZ2lvbjsK Y2xhc3MgUUZvbnQ7CmNsYXNzIFFGb250TWV0cmljczsKY2xhc3MgUUZvbnRJbmZvOwpjbGFzcyBR UGVuOwpjbGFzcyBRQnJ1c2g7CmNsYXNzIFFXTWF0cml4OwpjbGFzcyBRUGl4bWFwOwpjbGFzcyBR Qml0bWFwOwpjbGFzcyBRTW92aWU7CmNsYXNzIFFJbWFnZTsKY2xhc3MgUUltYWdlSU87CmNsYXNz IFFQaWN0dXJlOwpjbGFzcyBRUHJpbnRlcjsKY2xhc3MgUUFjY2VsOwpjbGFzcyBRVGltZXI7CmNs YXNzIFFUaW1lOwpjbGFzcyBRQ2xpcGJvYXJkOwoKCgoKY2xhc3MgUVdpZGdldExpc3Q7CmNsYXNz IFFXaWRnZXRMaXN0SXQ7CiMgMTM5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1 ZGUvcXdpbmRvd2RlZnMuaCIKdHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CnR5cGVk ZWYgdW5pb24gX1hFdmVudCBYRXZlbnQ7CnR5cGVkZWYgc3RydWN0IF9YR0MgKkdDOwp0eXBlZGVm IHN0cnVjdCBfWFJlZ2lvbiAqUmVnaW9uOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV0lkOwoKIERp c3BsYXkgKnF0X3hkaXNwbGF5KCk7CiBpbnQgcXRfeHNjcmVlbigpOwogV0lkIHF0X3hyb290d2lu KCk7CiBHQyBxdF94Z2V0X3JlYWRvbmx5X2djKCBpbnQgc2NybiwgYm9vbCBtb25vY2hyb21lICk7 CiBHQyBxdF94Z2V0X3RlbXBfZ2MoIGludCBzY3JuLCBib29sIG1vbm9jaHJvbWUgKTsKIyAxNjEg Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xd2luZG93ZGVmcy5oIgpjbGFz cyBRQXBwbGljYXRpb247CgoKCgoKCgp0eXBlZGVmIFFfSU5UMzIgUUNPT1JEOwpjb25zdCBRQ09P UkQgUUNPT1JEX01BWCA9IDIxNDc0ODM2NDc7CmNvbnN0IFFDT09SRCBRQ09PUkRfTUlOID0gLVFD T09SRF9NQVggLSAxOwoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgUVJnYjsKCiBjb25zdCBjaGFyICpx QXBwTmFtZSgpOwoKCgp0eXBlZGVmIHZvaWQgKCpRdENsZWFuVXBGdW5jdGlvbikoKTsKIHZvaWQg cUFkZFBvc3RSb3V0aW5lKCBRdENsZWFuVXBGdW5jdGlvbiApOwogdm9pZCBxUmVtb3ZlUG9zdFJv dXRpbmUoIFF0Q2xlYW5VcEZ1bmN0aW9uICk7CgoKCnR5cGVkZWYgUXRDbGVhblVwRnVuY3Rpb24g UV9DbGVhblVwRnVuY3Rpb247CgoKCiB2b2lkICpxdF9maW5kX29ial9jaGlsZCggUU9iamVjdCAq LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwojIDQzICIvdXNyL2xvY2FsL3F0LXgxMS1m cmVlLTMuMC42L2luY2x1ZGUvcXdpZGdldC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJl ZS0zLjAuNi9pbmNsdWRlL3FvYmplY3QuaCIgMQojIDQ1ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVl LTMuMC42L2luY2x1ZGUvcW9iamVjdC5oIgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4w LjYvaW5jbHVkZS9xZXZlbnQuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42 L2luY2x1ZGUvcWV2ZW50LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNs dWRlL3FyZWdpb24uaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1 ZGUvcXJlZ2lvbi5oIgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9x cmVjdC5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcmVj dC5oIgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xc2l6ZS5oIiAx CiMgNDIgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xc2l6ZS5oIgojIDEg Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcG9pbnQuaCIgMQojIDQ2ICIv dXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXBvaW50LmgiCmNsYXNzIFFQb2lu dAp7CnB1YmxpYzoKICAgIFFQb2ludCgpOwogICAgUVBvaW50KCBpbnQgeHBvcywgaW50IHlwb3Mg KTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0OwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQg eSgpIGNvbnN0OwogICAgdm9pZCBzZXRYKCBpbnQgeCApOwogICAgdm9pZCBzZXRZKCBpbnQgeSAp OwoKICAgIGludCBtYW5oYXR0YW5MZW5ndGgoKSBjb25zdDsKCiAgICBRQ09PUkQgJnJ4KCk7CiAg ICBRQ09PUkQgJnJ5KCk7CgogICAgUVBvaW50ICZvcGVyYXRvcis9KCBjb25zdCBRUG9pbnQgJnAg KTsKICAgIFFQb2ludCAmb3BlcmF0b3ItPSggY29uc3QgUVBvaW50ICZwICk7CiAgICBRUG9pbnQg Jm9wZXJhdG9yKj0oIGludCBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yKj0oIGRvdWJsZSBjICk7 CiAgICBRUG9pbnQgJm9wZXJhdG9yLz0oIGludCBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yLz0o IGRvdWJsZSBjICk7CgogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQ b2ludCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9y IT0oIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBj b25zdCBRUG9pbnQgb3BlcmF0b3IrKCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsK ICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYs IGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRv ciooIGNvbnN0IFFQb2ludCAmLCBpbnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50 IG9wZXJhdG9yKiggaW50LCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25z dCBRUG9pbnQgb3BlcmF0b3IqKCBjb25zdCBRUG9pbnQgJiwgZG91YmxlICk7CiAgICBmcmllbmQg aW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGRvdWJsZSwgY29uc3QgUVBvaW50ICYgKTsK ICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYg KTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50 ICYsIGludCApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3IvKCBjb25z dCBRUG9pbnQgJiwgZG91YmxlICk7Cgpwcml2YXRlOgogICAgc3RhdGljIHZvaWQgd2FybmluZ0Rp dkJ5WmVybygpOwoKCgoKCiAgICBRQ09PUkQgeHA7CiAgICBRQ09PUkQgeXA7Cgp9OwoKCgoKCgog UURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFQb2ludCAmICk7 CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVBvaW50ICYgKTsKCgoK CgoKaW5saW5lIFFQb2ludDo6UVBvaW50KCkKeyB4cD0wOyB5cD0wOyB9CgppbmxpbmUgUVBvaW50 OjpRUG9pbnQoIGludCB4cG9zLCBpbnQgeXBvcyApCnsgeHA9KFFDT09SRCl4cG9zOyB5cD0oUUNP T1JEKXlwb3M7IH0KCmlubGluZSBib29sIFFQb2ludDo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4g eHAgPT0gMCAmJiB5cCA9PSAwOyB9CgppbmxpbmUgaW50IFFQb2ludDo6eCgpIGNvbnN0CnsgcmV0 dXJuIHhwOyB9CgppbmxpbmUgaW50IFFQb2ludDo6eSgpIGNvbnN0CnsgcmV0dXJuIHlwOyB9Cgpp bmxpbmUgdm9pZCBRUG9pbnQ6OnNldFgoIGludCB4ICkKeyB4cCA9IChRQ09PUkQpeDsgfQoKaW5s aW5lIHZvaWQgUVBvaW50OjpzZXRZKCBpbnQgeSApCnsgeXAgPSAoUUNPT1JEKXk7IH0KCmlubGlu ZSBRQ09PUkQgJlFQb2ludDo6cngoKQp7IHJldHVybiB4cDsgfQoKaW5saW5lIFFDT09SRCAmUVBv aW50OjpyeSgpCnsgcmV0dXJuIHlwOyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9y Kz0oIGNvbnN0IFFQb2ludCAmcCApCnsgeHArPXAueHA7IHlwKz1wLnlwOyByZXR1cm4gKnRoaXM7 IH0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3ItPSggY29uc3QgUVBvaW50ICZwICkK eyB4cC09cC54cDsgeXAtPXAueXA7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFQb2ludCAmUVBv aW50OjpvcGVyYXRvcio9KCBpbnQgYyApCnsgeHAqPShRQ09PUkQpYzsgeXAqPShRQ09PUkQpYzsg cmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yKj0oIGRvdWJs ZSBjICkKeyB4cD0oUUNPT1JEKSh4cCpjKTsgeXA9KFFDT09SRCkoeXAqYyk7IHJldHVybiAqdGhp czsgfQoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBv aW50ICZwMiApCnsgcmV0dXJuIHAxLnhwID09IHAyLnhwICYmIHAxLnlwID09IHAyLnlwOyB9Cgpp bmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAy ICkKeyByZXR1cm4gcDEueHAgIT0gcDIueHAgfHwgcDEueXAgIT0gcDIueXA7IH0KCmlubGluZSBj b25zdCBRUG9pbnQgb3BlcmF0b3IrKCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAy ICkKeyByZXR1cm4gUVBvaW50KHAxLnhwK3AyLnhwLCBwMS55cCtwMi55cCk7IH0KCmlubGluZSBj b25zdCBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAy ICkKeyByZXR1cm4gUVBvaW50KHAxLnhwLXAyLnhwLCBwMS55cC1wMi55cCk7IH0KCmlubGluZSBj b25zdCBRUG9pbnQgb3BlcmF0b3IqKCBjb25zdCBRUG9pbnQgJnAsIGludCBjICkKeyByZXR1cm4g UVBvaW50KHAueHAqYywgcC55cCpjKTsgfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvcioo IGludCBjLCBjb25zdCBRUG9pbnQgJnAgKQp7IHJldHVybiBRUG9pbnQocC54cCpjLCBwLnlwKmMp OyB9CgppbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yKiggY29uc3QgUVBvaW50ICZwLCBkb3Vi bGUgYyApCnsgcmV0dXJuIFFQb2ludCgoUUNPT1JEKShwLnhwKmMpLCAoUUNPT1JEKShwLnlwKmMp KTsgfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGRvdWJsZSBjLCBjb25zdCBRUG9p bnQgJnAgKQp7IHJldHVybiBRUG9pbnQoKFFDT09SRCkocC54cCpjKSwgKFFDT09SRCkocC55cCpj KSk7IH0KCmlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJnAgKQp7 IHJldHVybiBRUG9pbnQoLXAueHAsIC1wLnlwKTsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50Ojpv cGVyYXRvci89KCBpbnQgYyApCnsKCiAgICBpZiAoIGMgPT0gMCApCiAgICAgICAgd2FybmluZ0Rp dkJ5WmVybygpOwoKICAgIHhwLz0oUUNPT1JEKWM7CiAgICB5cC89KFFDT09SRCljOwogICAgcmV0 dXJuICp0aGlzOwp9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yLz0oIGRvdWJsZSBj ICkKewoKICAgIGlmICggYyA9PSAwLjAgKQogICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAg ICB4cD0oUUNPT1JEKSh4cC9jKTsKICAgIHlwPShRQ09PUkQpKHlwL2MpOwogICAgcmV0dXJuICp0 aGlzOwp9CgppbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICZwLCBp bnQgYyApCnsKCiAgICBpZiAoIGMgPT0gMCApCiAgICAgICAgUVBvaW50Ojp3YXJuaW5nRGl2Qnla ZXJvKCk7CgogICAgcmV0dXJuIFFQb2ludChwLnhwL2MsIHAueXAvYyk7Cn0KCmlubGluZSBjb25z dCBRUG9pbnQgb3BlcmF0b3IvKCBjb25zdCBRUG9pbnQgJnAsIGRvdWJsZSBjICkKewoKICAgIGlm ICggYyA9PSAwLjAgKQogICAgICAgIFFQb2ludDo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJl dHVybiBRUG9pbnQoKFFDT09SRCkocC54cC9jKSwgKFFDT09SRCkocC55cC9jKSk7Cn0KIyA0MyAi L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FzaXplLmgiIDIKCgoKY2xhc3Mg UVNpemUKewpwdWJsaWM6CiAgICBRU2l6ZSgpOwogICAgUVNpemUoIGludCB3LCBpbnQgaCApOwoK ICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgIGJv b2wgaXNWYWxpZCgpIGNvbnN0OwoKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50IGhlaWdo dCgpIGNvbnN0OwogICAgdm9pZCBzZXRXaWR0aCggaW50IHcgKTsKICAgIHZvaWQgc2V0SGVpZ2h0 KCBpbnQgaCApOwogICAgdm9pZCB0cmFuc3Bvc2UoKTsKCiAgICBRU2l6ZSBleHBhbmRlZFRvKCBj b25zdCBRU2l6ZSAmICkgY29uc3Q7CiAgICBRU2l6ZSBib3VuZGVkVG8oIGNvbnN0IFFTaXplICYg KSBjb25zdDsKCiAgICBRQ09PUkQgJnJ3aWR0aCgpOwogICAgUUNPT1JEICZyaGVpZ2h0KCk7Cgog ICAgUVNpemUgJm9wZXJhdG9yKz0oIGNvbnN0IFFTaXplICYgKTsKICAgIFFTaXplICZvcGVyYXRv ci09KCBjb25zdCBRU2l6ZSAmICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IqPSggaW50IGMgKTsKICAg IFFTaXplICZvcGVyYXRvcio9KCBkb3VibGUgYyApOwogICAgUVNpemUgJm9wZXJhdG9yLz0oIGlu dCBjICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IvPSggZG91YmxlIGMgKTsKCiAgICBmcmllbmQgaW5s aW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAg ZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTaXplICYsIGNvbnN0IFFTaXpl ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVNpemUgb3BlcmF0b3IrKCBjb25zdCBRU2l6 ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFTaXplIG9wZXJh dG9yLSggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5kIGlubGluZSBj b25zdCBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICYsIGludCApOwogICAgZnJpZW5kIGlu bGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGludCwgY29uc3QgUVNpemUgJiApOwogICAgZnJp ZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICYsIGRvdWJsZSAp OwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGRvdWJsZSwgY29uc3Qg UVNpemUgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvci8oIGNvbnN0 IFFTaXplICYsIGludCApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvci8o IGNvbnN0IFFTaXplICYsIGRvdWJsZSApOwoKcHJpdmF0ZToKICAgIHN0YXRpYyB2b2lkIHdhcm5p bmdEaXZCeVplcm8oKTsKCiAgICBRQ09PUkQgd2Q7CiAgICBRQ09PUkQgaHQ7Cn07CgoKCgoKCiBR RGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVNpemUgJiApOwog UURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTaXplICYgKTsKCgoKCgoK aW5saW5lIFFTaXplOjpRU2l6ZSgpCnsgd2QgPSBodCA9IC0xOyB9CgppbmxpbmUgUVNpemU6OlFT aXplKCBpbnQgdywgaW50IGggKQp7IHdkPShRQ09PUkQpdzsgaHQ9KFFDT09SRCloOyB9Cgppbmxp bmUgYm9vbCBRU2l6ZTo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4gd2Q9PTAgJiYgaHQ9PTA7IH0K CmlubGluZSBib29sIFFTaXplOjppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4gd2Q8MSB8fCBodDwx OyB9CgppbmxpbmUgYm9vbCBRU2l6ZTo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIHdkPj0wICYm IGh0Pj0wOyB9CgppbmxpbmUgaW50IFFTaXplOjp3aWR0aCgpIGNvbnN0CnsgcmV0dXJuIHdkOyB9 CgppbmxpbmUgaW50IFFTaXplOjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiBodDsgfQoKaW5saW5l IHZvaWQgUVNpemU6OnNldFdpZHRoKCBpbnQgdyApCnsgd2Q9KFFDT09SRCl3OyB9CgppbmxpbmUg dm9pZCBRU2l6ZTo6c2V0SGVpZ2h0KCBpbnQgaCApCnsgaHQ9KFFDT09SRCloOyB9CgppbmxpbmUg UUNPT1JEICZRU2l6ZTo6cndpZHRoKCkKeyByZXR1cm4gd2Q7IH0KCmlubGluZSBRQ09PUkQgJlFT aXplOjpyaGVpZ2h0KCkKeyByZXR1cm4gaHQ7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJh dG9yKz0oIGNvbnN0IFFTaXplICZzICkKeyB3ZCs9cy53ZDsgaHQrPXMuaHQ7IHJldHVybiAqdGhp czsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3ItPSggY29uc3QgUVNpemUgJnMgKQp7 IHdkLT1zLndkOyBodC09cy5odDsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVNpemUgJlFTaXpl OjpvcGVyYXRvcio9KCBpbnQgYyApCnsgd2QqPShRQ09PUkQpYzsgaHQqPShRQ09PUkQpYzsgcmV0 dXJuICp0aGlzOyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvcio9KCBkb3VibGUgYyAp Cnsgd2Q9KFFDT09SRCkod2QqYyk7IGh0PShRQ09PUkQpKGh0KmMpOyByZXR1cm4gKnRoaXM7IH0K CmlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMy ICkKeyByZXR1cm4gczEud2QgPT0gczIud2QgJiYgczEuaHQgPT0gczIuaHQ7IH0KCmlubGluZSBi b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMyICkKeyByZXR1 cm4gczEud2QgIT0gczIud2QgfHwgczEuaHQgIT0gczIuaHQ7IH0KCmlubGluZSBjb25zdCBRU2l6 ZSBvcGVyYXRvcisoIGNvbnN0IFFTaXplICYgczEsIGNvbnN0IFFTaXplICYgczIgKQp7IHJldHVy biBRU2l6ZShzMS53ZCtzMi53ZCwgczEuaHQrczIuaHQpOyB9CgppbmxpbmUgY29uc3QgUVNpemUg b3BlcmF0b3ItKCBjb25zdCBRU2l6ZSAmczEsIGNvbnN0IFFTaXplICZzMiApCnsgcmV0dXJuIFFT aXplKHMxLndkLXMyLndkLCBzMS5odC1zMi5odCk7IH0KCmlubGluZSBjb25zdCBRU2l6ZSBvcGVy YXRvciooIGNvbnN0IFFTaXplICZzLCBpbnQgYyApCnsgcmV0dXJuIFFTaXplKHMud2QqYywgcy5o dCpjKTsgfQoKaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yKiggaW50IGMsIGNvbnN0IFFTaXpl ICZzICkKeyByZXR1cm4gUVNpemUocy53ZCpjLCBzLmh0KmMpOyB9CgppbmxpbmUgY29uc3QgUVNp emUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmcywgZG91YmxlIGMgKQp7IHJldHVybiBRU2l6ZSgo UUNPT1JEKShzLndkKmMpLCAoUUNPT1JEKShzLmh0KmMpKTsgfQoKaW5saW5lIGNvbnN0IFFTaXpl IG9wZXJhdG9yKiggZG91YmxlIGMsIGNvbnN0IFFTaXplICZzICkKeyByZXR1cm4gUVNpemUoKFFD T09SRCkocy53ZCpjKSwgKFFDT09SRCkocy5odCpjKSk7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6 Om9wZXJhdG9yLz0oIGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKICAgICAgICB3YXJuaW5n RGl2QnlaZXJvKCk7CgogICAgd2QvPShRQ09PUkQpYzsgaHQvPShRQ09PUkQpYzsKICAgIHJldHVy biAqdGhpczsKfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IvPSggZG91YmxlIGMgKQp7 CgogICAgaWYgKCBjID09IDAuMCApCiAgICAgICAgd2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHdk PShRQ09PUkQpKHdkL2MpOyBodD0oUUNPT1JEKShodC9jKTsKICAgIHJldHVybiAqdGhpczsKfQoK aW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yLyggY29uc3QgUVNpemUgJnMsIGludCBjICkKewoK ICAgIGlmICggYyA9PSAwICkKICAgICAgICBRU2l6ZTo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAg IHJldHVybiBRU2l6ZShzLndkL2MsIHMuaHQvYyk7Cn0KCmlubGluZSBjb25zdCBRU2l6ZSBvcGVy YXRvci8oIGNvbnN0IFFTaXplICZzLCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkK ICAgICAgICBRU2l6ZTo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRU2l6ZSgoUUNP T1JEKShzLndkL2MpLCAoUUNPT1JEKShzLmh0L2MpKTsKfQoKaW5saW5lIFFTaXplIFFTaXplOjpl eHBhbmRlZFRvKCBjb25zdCBRU2l6ZSAmIG90aGVyU2l6ZSApIGNvbnN0CnsKICAgIHJldHVybiBR U2l6ZSggKChvdGhlclNpemUud2QpIDwgKHdkKSA/ICh3ZCkgOiAob3RoZXJTaXplLndkKSksICgo b3RoZXJTaXplLmh0KSA8IChodCkgPyAoaHQpIDogKG90aGVyU2l6ZS5odCkpICk7Cn0KCmlubGlu ZSBRU2l6ZSBRU2l6ZTo6Ym91bmRlZFRvKCBjb25zdCBRU2l6ZSAmIG90aGVyU2l6ZSApIGNvbnN0 CnsKICAgIHJldHVybiBRU2l6ZSggKCh3ZCkgPCAob3RoZXJTaXplLndkKSA/ICh3ZCkgOiAob3Ro ZXJTaXplLndkKSksICgoaHQpIDwgKG90aGVyU2l6ZS5odCkgPyAoaHQpIDogKG90aGVyU2l6ZS5o dCkpICk7Cn0KIyA0MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FyZWN0 LmgiIDIKCgoKCgoKCmNsYXNzIFFSZWN0CnsKcHVibGljOgogICAgUVJlY3QoKSB7IHgxID0geTEg PSAwOyB4MiA9IHkyID0gLTE7IH0KICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxlZnQsIGNv bnN0IFFQb2ludCAmYm90dG9tcmlnaHQgKTsKICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxl ZnQsIGNvbnN0IFFTaXplICZzaXplICk7CiAgICBRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGlu dCB3aWR0aCwgaW50IGhlaWdodCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29s IGlzRW1wdHkoKSBjb25zdDsKICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgUVJlY3Qgbm9y bWFsaXplKCkgY29uc3Q7CgogICAgaW50IGxlZnQoKSBjb25zdDsKICAgIGludCB0b3AoKSBjb25z dDsKICAgIGludCByaWdodCgpIGNvbnN0OwogICAgaW50IGJvdHRvbSgpIGNvbnN0OwoKICAgIFFD T09SRCAmckxlZnQoKTsKICAgIFFDT09SRCAmclRvcCgpOwogICAgUUNPT1JEICZyUmlnaHQoKTsK ICAgIFFDT09SRCAmckJvdHRvbSgpOwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNv bnN0OwogICAgdm9pZCBzZXRMZWZ0KCBpbnQgcG9zICk7CiAgICB2b2lkIHNldFRvcCggaW50IHBv cyApOwogICAgdm9pZCBzZXRSaWdodCggaW50IHBvcyApOwogICAgdm9pZCBzZXRCb3R0b20oIGlu dCBwb3MgKTsKICAgIHZvaWQgc2V0WCggaW50IHggKTsKICAgIHZvaWQgc2V0WSggaW50IHkgKTsK CiAgICBRUG9pbnQgdG9wTGVmdCgpIGNvbnN0OwogICAgUVBvaW50IGJvdHRvbVJpZ2h0KCkgY29u c3Q7CiAgICBRUG9pbnQgdG9wUmlnaHQoKSBjb25zdDsKICAgIFFQb2ludCBib3R0b21MZWZ0KCkg Y29uc3Q7CiAgICBRUG9pbnQgY2VudGVyKCkgY29uc3Q7CgogICAgdm9pZCByZWN0KCBpbnQgKngs IGludCAqeSwgaW50ICp3LCBpbnQgKmggKSBjb25zdDsKICAgIHZvaWQgY29vcmRzKCBpbnQgKngx LCBpbnQgKnkxLCBpbnQgKngyLCBpbnQgKnkyICkgY29uc3Q7CgogICAgdm9pZCBtb3ZlVG9wTGVm dCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVCb3R0b21SaWdodCggY29uc3QgUVBv aW50ICZwICk7CiAgICB2b2lkIG1vdmVUb3BSaWdodCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2 b2lkIG1vdmVCb3R0b21MZWZ0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZUNlbnRl ciggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVCeSggaW50IGR4LCBpbnQgZHkgKTsK CiAgICB2b2lkIHNldFJlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lk IHNldENvb3JkcyggaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyICk7CiAgICB2b2lkIGFk ZENvb3JkcyggaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyICk7CgogICAgUVNpemUgc2l6 ZSgpIGNvbnN0OwogICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7 CiAgICB2b2lkIHNldFdpZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRIZWlnaHQoIGludCBoICk7 CiAgICB2b2lkIHNldFNpemUoIGNvbnN0IFFTaXplICZzICk7CgogICAgUVJlY3Qgb3BlcmF0b3J8 KGNvbnN0IFFSZWN0ICZyKSBjb25zdDsKICAgIFFSZWN0IG9wZXJhdG9yJihjb25zdCBRUmVjdCAm cikgY29uc3Q7CiAgICBRUmVjdCYgb3BlcmF0b3J8PShjb25zdCBRUmVjdCAmcik7CiAgICBRUmVj dCYgb3BlcmF0b3ImPShjb25zdCBRUmVjdCAmcik7CgogICAgYm9vbCBjb250YWlucyggY29uc3Qg UVBvaW50ICZwLCBib29sIHByb3Blcj1GQUxTRSApIGNvbnN0OwogICAgYm9vbCBjb250YWlucygg aW50IHgsIGludCB5LCBib29sIHByb3Blcj1GQUxTRSApIGNvbnN0OwogICAgYm9vbCBjb250YWlu cyggY29uc3QgUVJlY3QgJnIsIGJvb2wgcHJvcGVyPUZBTFNFICkgY29uc3Q7CiAgICBRUmVjdCB1 bml0ZSggY29uc3QgUVJlY3QgJnIgKSBjb25zdDsKICAgIFFSZWN0IGludGVyc2VjdCggY29uc3Qg UVJlY3QgJnIgKSBjb25zdDsKICAgIGJvb2wgaW50ZXJzZWN0cyggY29uc3QgUVJlY3QgJnIgKSBj b25zdDsKCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUmVjdCAmLCBjb25zdCBR UmVjdCAmICk7CiAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRUmVjdCAmLCBjb25z dCBRUmVjdCAmICk7Cgpwcml2YXRlOgoKCgoKCgogICAgUUNPT1JEIHgxOwogICAgUUNPT1JEIHkx OwogICAgUUNPT1JEIHgyOwogICAgUUNPT1JEIHkyOwoKfTsKCiBib29sIG9wZXJhdG9yPT0oIGNv bnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVJl Y3QgJiwgY29uc3QgUVJlY3QgJiApOwoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFE YXRhU3RyZWFtICYsIGNvbnN0IFFSZWN0ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR RGF0YVN0cmVhbSAmLCBRUmVjdCAmICk7CgoKCgoKCmlubGluZSBRUmVjdDo6UVJlY3QoIGludCBs ZWZ0LCBpbnQgdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQgKQp7CiAgICB4MSA9IChRQ09PUkQp bGVmdDsKICAgIHkxID0gKFFDT09SRCl0b3A7CiAgICB4MiA9IChRQ09PUkQpKGxlZnQrd2lkdGgt MSk7CiAgICB5MiA9IChRQ09PUkQpKHRvcCtoZWlnaHQtMSk7Cn0KCmlubGluZSBib29sIFFSZWN0 Ojppc051bGwoKSBjb25zdAp7IHJldHVybiB4MiA9PSB4MS0xICYmIHkyID09IHkxLTE7IH0KCmlu bGluZSBib29sIFFSZWN0Ojppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4geDEgPiB4MiB8fCB5MSA+ IHkyOyB9CgppbmxpbmUgYm9vbCBRUmVjdDo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIHgxIDw9 IHgyICYmIHkxIDw9IHkyOyB9CgppbmxpbmUgaW50IFFSZWN0OjpsZWZ0KCkgY29uc3QKeyByZXR1 cm4geDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnRvcCgpIGNvbnN0CnsgcmV0dXJuIHkxOyB9Cgpp bmxpbmUgaW50IFFSZWN0OjpyaWdodCgpIGNvbnN0CnsgcmV0dXJuIHgyOyB9CgppbmxpbmUgaW50 IFFSZWN0Ojpib3R0b20oKSBjb25zdAp7IHJldHVybiB5MjsgfQoKaW5saW5lIFFDT09SRCAmUVJl Y3Q6OnJMZWZ0KCkKeyByZXR1cm4geDE7IH0KCmlubGluZSBRQ09PUkQgJiBRUmVjdDo6clRvcCgp CnsgcmV0dXJuIHkxOyB9CgppbmxpbmUgUUNPT1JEICYgUVJlY3Q6OnJSaWdodCgpCnsgcmV0dXJu IHgyOyB9CgppbmxpbmUgUUNPT1JEICYgUVJlY3Q6OnJCb3R0b20oKQp7IHJldHVybiB5MjsgfQoK aW5saW5lIGludCBRUmVjdDo6eCgpIGNvbnN0CnsgcmV0dXJuIHgxOyB9CgppbmxpbmUgaW50IFFS ZWN0Ojp5KCkgY29uc3QKeyByZXR1cm4geTE7IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRMZWZ0 KCBpbnQgcG9zICkKeyB4MSA9IChRQ09PUkQpcG9zOyB9CgppbmxpbmUgdm9pZCBRUmVjdDo6c2V0 VG9wKCBpbnQgcG9zICkKeyB5MSA9IChRQ09PUkQpcG9zOyB9CgppbmxpbmUgdm9pZCBRUmVjdDo6 c2V0UmlnaHQoIGludCBwb3MgKQp7IHgyID0gKFFDT09SRClwb3M7IH0KCmlubGluZSB2b2lkIFFS ZWN0OjpzZXRCb3R0b20oIGludCBwb3MgKQp7IHkyID0gKFFDT09SRClwb3M7IH0KCmlubGluZSB2 b2lkIFFSZWN0OjpzZXRYKCBpbnQgeCApCnsgeDEgPSAoUUNPT1JEKXg7IH0KCmlubGluZSB2b2lk IFFSZWN0OjpzZXRZKCBpbnQgeSApCnsgeTEgPSAoUUNPT1JEKXk7IH0KCmlubGluZSBRUG9pbnQg UVJlY3Q6OnRvcExlZnQoKSBjb25zdAp7IHJldHVybiBRUG9pbnQoeDEsIHkxKTsgfQoKaW5saW5l IFFQb2ludCBRUmVjdDo6Ym90dG9tUmlnaHQoKSBjb25zdAp7IHJldHVybiBRUG9pbnQoeDIsIHky KTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6dG9wUmlnaHQoKSBjb25zdAp7IHJldHVybiBRUG9p bnQoeDIsIHkxKTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6Ym90dG9tTGVmdCgpIGNvbnN0Cnsg cmV0dXJuIFFQb2ludCh4MSwgeTIpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0OjpjZW50ZXIoKSBj b25zdAp7IHJldHVybiBRUG9pbnQoKHgxK3gyKS8yLCAoeTEreTIpLzIpOyB9CgppbmxpbmUgaW50 IFFSZWN0Ojp3aWR0aCgpIGNvbnN0CnsgcmV0dXJuIHgyIC0geDEgKyAxOyB9CgppbmxpbmUgaW50 IFFSZWN0OjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiB5MiAtIHkxICsgMTsgfQoKaW5saW5lIFFT aXplIFFSZWN0OjpzaXplKCkgY29uc3QKeyByZXR1cm4gUVNpemUoeDIteDErMSwgeTIteTErMSk7 IH0KCmlubGluZSBib29sIFFSZWN0Ojpjb250YWlucyggaW50IHgsIGludCB5LCBib29sIHByb3Bl ciApIGNvbnN0CnsKICAgIGlmICggcHJvcGVyICkKICAgICAgICByZXR1cm4geCA+IHgxICYmIHgg PCB4MiAmJgogICAgICAgICAgICAgICB5ID4geTEgJiYgeSA8IHkyOwogICAgZWxzZQogICAgICAg IHJldHVybiB4ID49IHgxICYmIHggPD0geDIgJiYKICAgICAgICAgICAgICAgeSA+PSB5MSAmJiB5 IDw9IHkyOwp9CiMgNDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcmVn aW9uLmgiIDIKCgoKY2xhc3MgUVJlZ2lvbgp7CnB1YmxpYzoKICAgIGVudW0gUmVnaW9uVHlwZSB7 IFJlY3RhbmdsZSwgRWxsaXBzZSB9OwoKICAgIFFSZWdpb24oKTsKICAgIFFSZWdpb24oIGludCB4 LCBpbnQgeSwgaW50IHcsIGludCBoLCBSZWdpb25UeXBlID0gUmVjdGFuZ2xlICk7CiAgICBRUmVn aW9uKCBjb25zdCBRUmVjdCAmLCBSZWdpb25UeXBlID0gUmVjdGFuZ2xlICk7CiAgICBRUmVnaW9u KCBjb25zdCBRUG9pbnRBcnJheSAmLCBib29sIHdpbmRpbmc9RkFMU0UgKTsKICAgIFFSZWdpb24o IGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiggY29uc3QgUUJpdG1hcCAmICk7CiAgIH5R UmVnaW9uKCk7CiAgICBRUmVnaW9uICZvcGVyYXRvcj0oIGNvbnN0IFFSZWdpb24gJiApOwoKICAg IGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKCiAgICBib29s IGNvbnRhaW5zKCBjb25zdCBRUG9pbnQgJnAgKSBjb25zdDsKICAgIGJvb2wgY29udGFpbnMoIGNv bnN0IFFSZWN0ICZyICkgY29uc3Q7CgogICAgdm9pZCB0cmFuc2xhdGUoIGludCBkeCwgaW50IGR5 ICk7CgogICAgUVJlZ2lvbiB1bml0ZSggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVn aW9uIGludGVyc2VjdCggY29uc3QgUVJlZ2lvbiAmKSBjb25zdDsKICAgIFFSZWdpb24gc3VidHJh Y3QoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBlb3IoIGNvbnN0IFFSZWdp b24gJiApIGNvbnN0OwoKICAgIFFSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgUU1lbUFy cmF5PFFSZWN0PiByZWN0cygpIGNvbnN0OwogICAgdm9pZCBzZXRSZWN0cyggY29uc3QgUVJlY3Qg KiwgaW50ICk7CgogICAgY29uc3QgUVJlZ2lvbiBvcGVyYXRvcnwoIGNvbnN0IFFSZWdpb24gJiAp IGNvbnN0OwogICAgY29uc3QgUVJlZ2lvbiBvcGVyYXRvcisoIGNvbnN0IFFSZWdpb24gJiApIGNv bnN0OwogICAgY29uc3QgUVJlZ2lvbiBvcGVyYXRvciYoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0 OwogICAgY29uc3QgUVJlZ2lvbiBvcGVyYXRvci0oIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0Owog ICAgY29uc3QgUVJlZ2lvbiBvcGVyYXRvcl4oIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAg UVJlZ2lvbiYgb3BlcmF0b3J8PSggY29uc3QgUVJlZ2lvbiAmICk7CiAgICBRUmVnaW9uJiBvcGVy YXRvcis9KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24mIG9wZXJhdG9yJj0oIGNvbnN0 IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3BlcmF0b3ItPSggY29uc3QgUVJlZ2lvbiAmICk7 CiAgICBRUmVnaW9uJiBvcGVyYXRvcl49KCBjb25zdCBRUmVnaW9uICYgKTsKCiAgICBib29sIG9w ZXJhdG9yPT0oIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBj b25zdCBRUmVnaW9uICZyICkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4g IShvcGVyYXRvcj09KHIpKTsgfQoKCgoKICAgIFJlZ2lvbiBoYW5kbGUoKSBjb25zdCB7IHJldHVy biBkYXRhLT5yZ247IH0KIyAxMDUgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVk ZS9xcmVnaW9uLmgiCiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3Ry ZWFtICYsIGNvbnN0IFFSZWdpb24gJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRv cj4+KCBRRGF0YVN0cmVhbSAmLCBRUmVnaW9uICYgKTsKCnByaXZhdGU6CiAgICBRUmVnaW9uKCBi b29sICk7CiAgICBRUmVnaW9uIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgZGV0YWNoKCk7CgoKCiAg ICB2b2lkIGV4ZWMoIGNvbnN0IFFCeXRlQXJyYXkgJiwgaW50IHZlciA9IDAgKTsKICAgIHN0cnVj dCBRUmVnaW9uRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKCgoKICAgICAgICBRUmVjdCByZWN0Owog ICAgICAgIFJlZ2lvbiByZ247CgoKCgoKCgogICAgICAgIGJvb2wgaXNfbnVsbDsKICAgIH0gKmRh dGE7CgoKCgoKCgp9OwojIDE1OCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRl L3FyZWdpb24uaCIKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25z dCBRUmVnaW9uICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBR UmVnaW9uICYgKTsKIyA0NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fl dmVudC5oIiAyCgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbWlt ZS5oIiAxCiMgNDMgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbWltZS5o IgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbWFwLmgiIDEKIyA0 NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FtYXAuaCIKIyAxICIvdXNy L2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIgMQojIDQyICIv dXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIKIyAxICIv dXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWlvZGV2aWNlLmgiIDEKIyA5NSAi L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fpb2RldmljZS5oIgpjbGFzcyBR SU9EZXZpY2UKewpwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFfVUxPTkcgT2Zmc2V0OwoKCiAgICBR SU9EZXZpY2UoKTsKICAgIHZpcnR1YWwgflFJT0RldmljZSgpOwoKICAgIGludCBmbGFncygpIGNv bnN0IHsgcmV0dXJuIGlvTW9kZTsgfQogICAgaW50IG1vZGUoKSBjb25zdCB7IHJldHVybiBpb01v ZGUgJiAweDAwZmY7IH0KICAgIGludCBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlvTW9kZSAmIDB4 ZjAwMDsgfQoKICAgIGJvb2wgaXNEaXJlY3RBY2Nlc3MoKSBjb25zdCB7IHJldHVybiAoKGlvTW9k ZSAmIDB4MDEwMCkgPT0gMHgwMTAwKTsgfQogICAgYm9vbCBpc1NlcXVlbnRpYWxBY2Nlc3MoKSBj b25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDIwMCkgPT0gMHgwMjAwKTsgfQogICAgYm9vbCBp c0NvbWJpbmVkQWNjZXNzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAzMDApID09IDB4 MDMwMCk7IH0KICAgIGJvb2wgaXNCdWZmZXJlZCgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYg MHgwMDQwKSAhPSAweDAwNDApOyB9CiAgICBib29sIGlzUmF3KCkgY29uc3QgeyByZXR1cm4gKChp b01vZGUgJiAweDAwNDApID09IDB4MDA0MCk7IH0KICAgIGJvb2wgaXNTeW5jaHJvbm91cygpIGNv bnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDgwKSAhPSAweDAwODApOyB9CiAgICBib29sIGlz QXN5bmNocm9ub3VzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwODApID09IDB4MDA4 MCk7IH0KICAgIGJvb2wgaXNUcmFuc2xhdGVkKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAw eDAwMTApID09IDB4MDAxMCk7IH0KICAgIGJvb2wgaXNSZWFkYWJsZSgpIGNvbnN0IHsgcmV0dXJu ICgoaW9Nb2RlICYgMHgwMDAxKSA9PSAweDAwMDEpOyB9CiAgICBib29sIGlzV3JpdGFibGUoKSBj b25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAwMikgPT0gMHgwMDAyKTsgfQogICAgYm9vbCBp c1JlYWRXcml0ZSgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDAzKSA9PSAweDAwMDMp OyB9CiAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IDA7IH0K ICAgIGJvb2wgaXNPcGVuKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSAweDEwMDA7IH0KCiAg ICBpbnQgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gaW9TdDsgfQogICAgdm9pZCByZXNldFN0YXR1 cygpIHsgaW9TdCA9IDA7IH0KCiAgICB2aXJ0dWFsIGJvb2wgb3BlbiggaW50IG1vZGUgKSA9IDA7 CiAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSA9 IDA7CgogICAgdmlydHVhbCBPZmZzZXQgc2l6ZSgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgT2Zm c2V0IGF0KCkgY29uc3Q7CiAgICB2aXJ0dWFsIGJvb2wgYXQoIE9mZnNldCApOwogICAgdmlydHVh bCBib29sIGF0RW5kKCkgY29uc3Q7CiAgICBib29sIHJlc2V0KCkgeyByZXR1cm4gYXQoMCk7IH0K CiAgICB2aXJ0dWFsIFFfTE9ORyByZWFkQmxvY2soIGNoYXIgKmRhdGEsIFFfVUxPTkcgbWF4bGVu ICkgPSAwOwogICAgdmlydHVhbCBRX0xPTkcgd3JpdGVCbG9jayggY29uc3QgY2hhciAqZGF0YSwg UV9VTE9ORyBsZW4gKSA9IDA7CiAgICB2aXJ0dWFsIFFfTE9ORyByZWFkTGluZSggY2hhciAqZGF0 YSwgUV9VTE9ORyBtYXhsZW4gKTsKICAgIFFfTE9ORyB3cml0ZUJsb2NrKCBjb25zdCBRQnl0ZUFy cmF5JiBkYXRhICk7CiAgICB2aXJ0dWFsIFFCeXRlQXJyYXkgcmVhZEFsbCgpOwoKICAgIHZpcnR1 YWwgaW50IGdldGNoKCkgPSAwOwogICAgdmlydHVhbCBpbnQgcHV0Y2goIGludCApID0gMDsKICAg IHZpcnR1YWwgaW50IHVuZ2V0Y2goIGludCApID0gMDsKCnByb3RlY3RlZDoKICAgIHZvaWQgc2V0 RmxhZ3MoIGludCBmICkgeyBpb01vZGUgPSBmOyB9CiAgICB2b2lkIHNldFR5cGUoIGludCApOwog ICAgdm9pZCBzZXRNb2RlKCBpbnQgKTsKICAgIHZvaWQgc2V0U3RhdGUoIGludCApOwogICAgdm9p ZCBzZXRTdGF0dXMoIGludCApOwogICAgT2Zmc2V0IGlvSW5kZXg7Cgpwcml2YXRlOgogICAgaW50 IGlvTW9kZTsKICAgIGludCBpb1N0OwoKcHJpdmF0ZToKCiAgICBRSU9EZXZpY2UoIGNvbnN0IFFJ T0RldmljZSAmICk7CiAgICBRSU9EZXZpY2UgJm9wZXJhdG9yPSggY29uc3QgUUlPRGV2aWNlICYg KTsKCn07CiMgNDMgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZGF0YXN0 cmVhbS5oIiAyCgoKCgpjbGFzcyBRRGF0YVN0cmVhbQp7CnB1YmxpYzoKICAgIFFEYXRhU3RyZWFt KCk7CiAgICBRRGF0YVN0cmVhbSggUUlPRGV2aWNlICogKTsKICAgIFFEYXRhU3RyZWFtKCBRQnl0 ZUFycmF5LCBpbnQgbW9kZSApOwogICAgdmlydHVhbCB+UURhdGFTdHJlYW0oKTsKCiAgICBRSU9E ZXZpY2UgKmRldmljZSgpIGNvbnN0OwogICAgdm9pZCBzZXREZXZpY2UoIFFJT0RldmljZSAqICk7 CiAgICB2b2lkIHVuc2V0RGV2aWNlKCk7CgogICAgYm9vbCBhdEVuZCgpIGNvbnN0OwogICAgYm9v bCBlb2YoKSBjb25zdDsKCiAgICBlbnVtIEJ5dGVPcmRlciB7IEJpZ0VuZGlhbiwgTGl0dGxlRW5k aWFuIH07CiAgICBpbnQgYnl0ZU9yZGVyKCkgY29uc3Q7CiAgICB2b2lkIHNldEJ5dGVPcmRlcigg aW50ICk7CgogICAgYm9vbCBpc1ByaW50YWJsZURhdGEoKSBjb25zdDsKICAgIHZvaWQgc2V0UHJp bnRhYmxlRGF0YSggYm9vbCApOwoKICAgIGludCB2ZXJzaW9uKCkgY29uc3Q7CiAgICB2b2lkIHNl dFZlcnNpb24oIGludCApOwoKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX0lOVDggJmkg KTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQ4ICZpICk7CiAgICBRRGF0YVN0 cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQxNiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9y Pj4oIFFfVUlOVDE2ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQzMiAm aSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUlOVDMyICZpICk7CiAgICBRRGF0 YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9MT05HICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0 b3I+PiggUV9VTE9ORyAmaSApOwoKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBmbG9hdCAm ZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIGRvdWJsZSAmZiApOwogICAgUURhdGFT dHJlYW0gJm9wZXJhdG9yPj4oIGNoYXIgKiZzdHIgKTsKCiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0 b3I8PCggUV9JTlQ4IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX1VJTlQ4IGkg KTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX0lOVDE2IGkgKTsKICAgIFFEYXRhU3Ry ZWFtICZvcGVyYXRvcjw8KCBRX1VJTlQxNiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8 PCggUV9JTlQzMiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UMzIgaSAp OwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfTE9ORyBpICk7CiAgICBRRGF0YVN0cmVh bSAmb3BlcmF0b3I8PCggUV9VTE9ORyBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCgg ZmxvYXQgZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGRvdWJsZSBmICk7CiAgICBR RGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgY2hhciAqc3RyICk7CgogICAgUURhdGFTdHJl YW0gJnJlYWRCeXRlcyggY2hhciAqJiwgdWludCAmbGVuICk7CiAgICBRRGF0YVN0cmVhbSAmcmVh ZFJhd0J5dGVzKCBjaGFyICosIHVpbnQgbGVuICk7CgogICAgUURhdGFTdHJlYW0gJndyaXRlQnl0 ZXMoIGNvbnN0IGNoYXIgKiwgdWludCBsZW4gKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0ZVJhd0J5 dGVzKCBjb25zdCBjaGFyICosIHVpbnQgbGVuICk7Cgpwcml2YXRlOgogICAgUUlPRGV2aWNlICpk ZXY7CiAgICBib29sIG93bmRldjsKICAgIGludCBieXRlb3JkZXI7CiAgICBib29sIHByaW50YWJs ZTsKICAgIGJvb2wgbm9zd2FwOwogICAgaW50IHZlcjsKCnByaXZhdGU6CgogICAgUURhdGFTdHJl YW0oIGNvbnN0IFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj0oIGNv bnN0IFFEYXRhU3RyZWFtICYgKTsKCn07CgoKCgoKCmlubGluZSBRSU9EZXZpY2UgKlFEYXRhU3Ry ZWFtOjpkZXZpY2UoKSBjb25zdAp7IHJldHVybiBkZXY7IH0KCmlubGluZSBib29sIFFEYXRhU3Ry ZWFtOjphdEVuZCgpIGNvbnN0CnsgcmV0dXJuIGRldiA/IGRldi0+YXRFbmQoKSA6IFRSVUU7IH0K CmlubGluZSBib29sIFFEYXRhU3RyZWFtOjplb2YoKSBjb25zdAp7IHJldHVybiBhdEVuZCgpOyB9 CgppbmxpbmUgaW50IFFEYXRhU3RyZWFtOjpieXRlT3JkZXIoKSBjb25zdAp7IHJldHVybiBieXRl b3JkZXI7IH0KCmlubGluZSBib29sIFFEYXRhU3RyZWFtOjppc1ByaW50YWJsZURhdGEoKSBjb25z dAp7IHJldHVybiBwcmludGFibGU7IH0KCmlubGluZSB2b2lkIFFEYXRhU3RyZWFtOjpzZXRQcmlu dGFibGVEYXRhKCBib29sIHAgKQp7IHByaW50YWJsZSA9IHA7IH0KCmlubGluZSBpbnQgUURhdGFT dHJlYW06OnZlcnNpb24oKSBjb25zdAp7IHJldHVybiB2ZXI7IH0KCmlubGluZSB2b2lkIFFEYXRh U3RyZWFtOjpzZXRWZXJzaW9uKCBpbnQgdiApCnsgdmVyID0gdjsgfQoKaW5saW5lIFFEYXRhU3Ry ZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+PiggUV9VSU5UOCAmaSApCnsgcmV0dXJuICp0aGlz ID4+IChRX0lOVDgmKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJh dG9yPj4oIFFfVUlOVDE2ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UMTYmKWk7IH0KCmlu bGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPj4oIFFfVUlOVDMyICZpICkK eyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UMzImKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURh dGFTdHJlYW06Om9wZXJhdG9yPj4oIFFfVUxPTkcgJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9M T05HJilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcjw8KCBR X1VJTlQ4IGkgKQp7IHJldHVybiAqdGhpcyA8PCAoUV9JTlQ4KWk7IH0KCmlubGluZSBRRGF0YVN0 cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUlOVDE2IGkgKQp7IHJldHVybiAqdGhp cyA8PCAoUV9JTlQxNilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVy YXRvcjw8KCBRX1VJTlQzMiBpICkKeyByZXR1cm4gKnRoaXMgPDwgKFFfSU5UMzIpaTsgfQoKaW5s aW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VTE9ORyBpICkKeyBy ZXR1cm4gKnRoaXMgPDwgKFFfTE9ORylpOyB9CiMgNDUgIi91c3IvbG9jYWwvcXQteDExLWZyZWUt My4wLjYvaW5jbHVkZS9xbWFwLmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42 L2luY2x1ZGUvcXBhaXIuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2lu Y2x1ZGUvcXBhaXIuaCIKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4Kc3RydWN0IFFQYWly CnsKICAgIHR5cGVkZWYgVDEgZmlyc3RfdHlwZTsKICAgIHR5cGVkZWYgVDIgc2Vjb25kX3R5cGU7 CgogICAgUVBhaXIoKQogICAgICAgIDogZmlyc3QoIFQxKCkgKSwgc2Vjb25kKCBUMigpICkKICAg IHt9CiAgICBRUGFpciggY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIgKQogICAgICAgIDogZmly c3QoIHQxICksIHNlY29uZCggdDIgKQogICAge30KCiAgICBUMSBmaXJzdDsKICAgIFQyIHNlY29u ZDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CiBib29sIG9wZXJhdG9yPT0oIGNv bnN0IFFQYWlyPFQxLCBUMj4mIHgsIGNvbnN0IFFQYWlyPFQxLCBUMj4mIHkgKQp7CiAgICByZXR1 cm4geC5maXJzdCA9PSB5LmZpcnN0ICYmIHguc2Vjb25kID09IHkuc2Vjb25kOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgogYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFQYWlyPFQxLCBU Mj4mIHgsIGNvbnN0IFFQYWlyPFQxLCBUMj4mIHkgKQp7CgoKCiAgICByZXR1cm4geC5maXJzdCA8 IHkuZmlyc3QgfHwgKCAhKCB5LmZpcnN0IDwgeC5maXJzdCApICYmIHguc2Vjb25kIDwgeS5zZWNv bmQgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KIFFQYWlyPFQxLCBUMj4gcU1h a2VQYWlyKCBjb25zdCBUMSYgeCwgY29uc3QgVDImIHkgKQp7CiAgICByZXR1cm4gUVBhaXI8VDEs IFQyPiggeCwgeSApOwp9CiMgNDYgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVk ZS9xbWFwLmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXRs LmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F0bC5oIgoj IDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdGV4dHN0cmVhbS5oIiAx CiMgNDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdGV4dHN0cmVhbS5o IgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgi IDEgMwojIDM5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRp by5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z LjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp bnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5 cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBl ZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9f dV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBs b25nIGludCBfX3VfbG9uZzsKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVm IHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQx Nl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25l ZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKX19l eHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRl bnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCgoKCgpf X2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKX19leHRlbnNpb25f XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKIyAxMjggIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlc2l6ZXMu aCIgMSAzCiMgMTI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19kZXZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aWRf dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19naWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu dCBfX2lub190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbm82NF90Owp0eXBl ZGVmIHVuc2lnbmVkIGludCBfX21vZGVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19ubGlua190 Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgbG9uZyBsb25nIGludCBfX29mZjY0 X3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgc3RydWN0IHsgaW50IF9fdmFsWzJdOyB9 IF9fZnNpZF90Owp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBs b25nIGludCBfX3JsaW1fdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmxpbTY0 X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9faWRfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVf dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9f c3VzZWNvbmRzX3Q7Cgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19z d2Jsa190Owp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoK CnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoK CgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19i bGtjbnQ2NF90OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mc2Jsa2NudF90Owp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiB1bnNp Z25lZCBsb25nIGludCBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGlu dCBfX2ZzZmlsY250NjRfdDsKCgoKCnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX29m ZjY0X3QgX19sb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKdHlwZWRlZiBjaGFy ICpfX2NhZGRyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVk IGludCBfX3NvY2tsZW5fdDsKIyA0NiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4z L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJ TEU7CgoKCgoKIyA3MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUv c3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgODEgIi91c3IvbGli L2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o IiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVm LmgiIDEgMwojIDM1NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUv c3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1 ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgi IDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjMgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2Nv dW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAg fSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi IDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19z dGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAg X19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19H X2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI4ICIvdXNyL2lu Y2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4y LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK IyA2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5o IiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0Kewog IF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dD T05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQs CiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAg X19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoK CgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJS T1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0 ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJh bnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0 ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGlu dCwgaW50KTsKCgp0eXBlZGVmIHdpbnRfdCAoKl9fZ2NvbnZfYnRvd2NfZmN0KSAoc3RydWN0IF9f Z2NvbnZfc3RlcCAqLCB1bnNpZ25lZCBjaGFyKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5p dF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2Vu ZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf dHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVu c2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg Kik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0 eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9f Y29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAq KiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAo dm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2Zj dCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4 dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpf X2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3Qg X19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hh bmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hh ciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsK ICBfX2djb252X2J0b3djX2ZjdCBfX2J0b3djX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5p dF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVk X2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAg aW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7 Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRi dWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAg aW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19t YnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9f Z2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9p bmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsK ICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9f Z2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlv bgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBf X2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAg fSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0 cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBf R191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p KSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xp YmlvLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9z dGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNs dWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7 CiMgNTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyAxNjIgIi91c3IvaW5jbHVkZS9saWJp by5oIiAzCnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTcyICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lP X21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAq X3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTk1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoK CmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0 aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CiMgMjYzICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgog IGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3Jl YWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwog IGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19i dWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsK ICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAg c3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwoKCgogIGludCBfZmxhZ3My OwoKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1u OwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgog IF9JT19sb2NrX3QgKl9sb2NrOwojIDMxMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29m ZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQgKl9fcGFkMTsKICB2b2lkICpfX3BhZDI7CgogIGlu dCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2Yg KHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3Qg X0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz IF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk ZXJyXzsKIyAzNTAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9f aW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMp OwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUs IF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tp ZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9m biAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRf ZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90 Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9f aW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewog IF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtf Zm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlv bnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9p bml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lv X2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRl cmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxF ICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhy b3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsK ZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50 X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgdGhyb3cgKCk7CiMgNDMyICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpl eHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVy biB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBf SU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5 bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwojIDQ2MiAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z dCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChf SU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBf SU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6 ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0 ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGlu dCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9f b2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA1MjAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn0K IyA4MiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIg MiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA5NSAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMwoKCnR5cGVk ZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90Owoj IDE0NyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIg MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxNDggIi91c3IvbGli L2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4g c3RydWN0IF9JT19GSUxFICpzdGRpbjsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0Owpl eHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRlcnI7CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAo X19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChf X2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCgoK ZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE4MCAiL3Vzci9saWIvZ2Nj LWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1w bmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lk KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cg KCk7CiMgMjAyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRp by5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0 IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7 CgoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVy biBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZm bHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBm Y2xvc2VhbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVv cGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAg ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjQ4ICIvdXNyL2xp Yi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCgoKZXh0ZXJuIEZJ TEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgp OwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxl bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p IHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hh ciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lk ICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJu IEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpf X21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAq Kl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIHNldGJ1 ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwg Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywg c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVi dWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVy biBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVy biBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJn KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBp bnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywg c2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkp KTsKCgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVj X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVz dHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3Ry aWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgoKZXh0ZXJuIGludCBmc2NhbmYg KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5m IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRl cm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2Nh bmZfXywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNz Y2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDAp KSk7CgoKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRj aGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lk KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoK ZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNo YXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDQ3MCAiL3Vzci9saWIvZ2NjLWxp Yi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90IF9f Z2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo cm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xp bmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9f biwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAo Y2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAg ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVf dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9p ZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp bnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK CgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwg c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwg RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRl X3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0 cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9u ZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2lu ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKIyA1MzcgIi91c3IvbGliL2djYy1saWIvaTM4 Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUg Kl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJu IF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNTUzICIvdXNyL2xp Yi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBp bnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0 IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVh bSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1NzIgIi91c3IvbGliL2djYy1s aWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIGludCBmc2Vl a282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJv dyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0 X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0 IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2Vk IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFy ICpfX3MpIHRocm93ICgpOwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0 LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAzCmV4dGVybiBp bnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsK CgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lz X2Vycmxpc3RbXTsKIyA2MDkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNs dWRlL3N0ZGlvLmgiIDIgMwoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1h bmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xvc2Ug KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hh ciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0 aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmludGYg KHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4 dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29i c3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf X2FyZ3MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm X18sIDIsIDApKSk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwojIDY4NiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3Rk aW8uaCIgMwp9CiMgNDUgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdGV4 dHN0cmVhbS5oIiAyCgoKCmNsYXNzIFFUZXh0Q29kZWM7CmNsYXNzIFFUZXh0RGVjb2RlcjsKCmNs YXNzIFFUZXh0U3RyZWFtUHJpdmF0ZTsKCmNsYXNzIFFUZXh0U3RyZWFtCnsKcHVibGljOgogICAg ZW51bSBFbmNvZGluZyB7IExvY2FsZSwgTGF0aW4xLCBVbmljb2RlLCBVbmljb2RlTmV0d29ya09y ZGVyLAogICAgICAgICAgICAgICAgICAgIFVuaWNvZGVSZXZlcnNlLCBSYXdVbmljb2RlLCBVbmlj b2RlVVRGOCB9OwoKICAgIHZvaWQgc2V0RW5jb2RpbmcoIEVuY29kaW5nICk7CgogICAgdm9pZCBz ZXRDb2RlYyggUVRleHRDb2RlYyogKTsKCgoKCiAgICBRVGV4dFN0cmVhbSgpOwogICAgUVRleHRT dHJlYW0oIFFJT0RldmljZSAqICk7CiAgICBRVGV4dFN0cmVhbSggUVN0cmluZyosIGludCBtb2Rl ICk7CiAgICBRVGV4dFN0cmVhbSggUVN0cmluZyYsIGludCBtb2RlICk7CiAgICBRVGV4dFN0cmVh bSggUUJ5dGVBcnJheSwgaW50IG1vZGUgKTsKICAgIFFUZXh0U3RyZWFtKCBGSUxFICosIGludCBt b2RlICk7CiAgICB2aXJ0dWFsIH5RVGV4dFN0cmVhbSgpOwoKICAgIFFJT0RldmljZSAqZGV2aWNl KCkgY29uc3Q7CiAgICB2b2lkIHNldERldmljZSggUUlPRGV2aWNlICogKTsKICAgIHZvaWQgdW5z ZXREZXZpY2UoKTsKCiAgICBib29sIGF0RW5kKCkgY29uc3Q7CiAgICBib29sIGVvZigpIGNvbnN0 OwoKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBRQ2hhciAmICk7CiAgICBRVGV4dFN0cmVh bSAmb3BlcmF0b3I+PiggY2hhciAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Piggc2ln bmVkIHNob3J0ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCB1bnNpZ25lZCBzaG9y dCAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Piggc2lnbmVkIGludCAmICk7CiAgICBR VGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggdW5zaWduZWQgaW50ICYgKTsKICAgIFFUZXh0U3RyZWFt ICZvcGVyYXRvcj4+KCBzaWduZWQgbG9uZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+ PiggdW5zaWduZWQgbG9uZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggZmxvYXQg JiApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPj4oIGRvdWJsZSAmICk7CiAgICBRVGV4dFN0 cmVhbSAmb3BlcmF0b3I+PiggY2hhciAqICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Pigg UVN0cmluZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUUNTdHJpbmcgJiApOwoK ICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBRQ2hhciApOwogICAgUVRleHRTdHJlYW0gJm9w ZXJhdG9yPDwoIGNoYXIgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBzaWduZWQgc2hv cnQgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCB1bnNpZ25lZCBzaG9ydCApOwogICAg UVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHNpZ25lZCBpbnQgKTsKICAgIFFUZXh0U3RyZWFtICZv cGVyYXRvcjw8KCB1bnNpZ25lZCBpbnQgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBz aWduZWQgbG9uZyApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHVuc2lnbmVkIGxvbmcg KTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBmbG9hdCApOwogICAgUVRleHRTdHJlYW0g Jm9wZXJhdG9yPDwoIGRvdWJsZSApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIGNvbnN0 IGNoYXIqICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgUVN0cmluZyAmICk7 CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgUUNTdHJpbmcgJiApOwogICAgUVRl eHRTdHJlYW0gJm9wZXJhdG9yPDwoIHZvaWQgKiApOwoKICAgIFFUZXh0U3RyZWFtICZyZWFkUmF3 Qnl0ZXMoIGNoYXIgKiwgdWludCBsZW4gKTsKICAgIFFUZXh0U3RyZWFtICZ3cml0ZVJhd0J5dGVz KCBjb25zdCBjaGFyKiAsIHVpbnQgbGVuICk7CgogICAgUVN0cmluZyByZWFkTGluZSgpOwogICAg UVN0cmluZyByZWFkKCk7CiAgICB2b2lkIHNraXBXaGl0ZVNwYWNlKCk7CgogICAgZW51bSB7CiAg ICAgICAgc2tpcHdzID0gMHgwMDAxLAogICAgICAgIGxlZnQgPSAweDAwMDIsCiAgICAgICAgcmln aHQgPSAweDAwMDQsCiAgICAgICAgaW50ZXJuYWwgPSAweDAwMDgsCiAgICAgICAgYmluID0gMHgw MDEwLAogICAgICAgIG9jdCA9IDB4MDAyMCwKICAgICAgICBkZWMgPSAweDAwNDAsCiAgICAgICAg aGV4ID0gMHgwMDgwLAogICAgICAgIHNob3diYXNlID0gMHgwMTAwLAogICAgICAgIHNob3dwb2lu dCA9IDB4MDIwMCwKICAgICAgICB1cHBlcmNhc2UgPSAweDA0MDAsCiAgICAgICAgc2hvd3BvcyA9 IDB4MDgwMCwKICAgICAgICBzY2llbnRpZmljPSAweDEwMDAsCiAgICAgICAgZml4ZWQgPSAweDIw MDAKICAgIH07CgogICAgc3RhdGljIGNvbnN0IGludCBiYXNlZmllbGQ7CiAgICBzdGF0aWMgY29u c3QgaW50IGFkanVzdGZpZWxkOwogICAgc3RhdGljIGNvbnN0IGludCBmbG9hdGZpZWxkOwoKICAg IGludCBmbGFncygpIGNvbnN0OwogICAgaW50IGZsYWdzKCBpbnQgZiApOwogICAgaW50IHNldGYo IGludCBiaXRzICk7CiAgICBpbnQgc2V0ZiggaW50IGJpdHMsIGludCBtYXNrICk7CiAgICBpbnQg dW5zZXRmKCBpbnQgYml0cyApOwoKICAgIHZvaWQgcmVzZXQoKTsKCiAgICBpbnQgd2lkdGgoKSBj b25zdDsKICAgIGludCB3aWR0aCggaW50ICk7CiAgICBpbnQgZmlsbCgpIGNvbnN0OwogICAgaW50 IGZpbGwoIGludCApOwogICAgaW50IHByZWNpc2lvbigpIGNvbnN0OwogICAgaW50IHByZWNpc2lv biggaW50ICk7Cgpwcml2YXRlOgogICAgbG9uZyBpbnB1dF9pbnQoKTsKICAgIHZvaWQgaW5pdCgp OwogICAgUVRleHRTdHJlYW0gJm91dHB1dF9pbnQoIGludCwgdWxvbmcsIGJvb2wgKTsKICAgIFFJ T0RldmljZSAqZGV2OwoKICAgIGludCBmZmxhZ3M7CiAgICBpbnQgZndpZHRoOwogICAgaW50IGZp bGxjaGFyOwogICAgaW50IGZwcmVjOwogICAgYm9vbCBkb1VuaWNvZGVIZWFkZXI7CiAgICBib29s IG93bmRldjsKICAgIFFUZXh0Q29kZWMgKm1hcHBlcjsKICAgIFFUZXh0U3RyZWFtUHJpdmF0ZSAq IGQ7CiAgICBRQ2hhciB1bnVzZWQxOwogICAgYm9vbCBsYXRpbjE7CiAgICBib29sIGludGVybmFs T3JkZXI7CiAgICBib29sIG5ldHdvcmtPcmRlcjsKICAgIHZvaWQgKnVudXNlZDI7CgogICAgUUNo YXIgZWF0X3dzKCk7CiAgICB1aW50IHRzX2dldGxpbmUoIFFDaGFyKiApOwogICAgdm9pZCB0c191 bmdldGMoIFFDaGFyICk7CiAgICBRQ2hhciB0c19nZXRjKCk7CiAgICB1aW50IHRzX2dldGJ1Zigg UUNoYXIqLCB1aW50ICk7CiAgICB2b2lkIHRzX3B1dGMoaW50KTsKICAgIHZvaWQgdHNfcHV0YyhR Q2hhcik7CiAgICBib29sIHRzX2lzc3BhY2UoUUNoYXIpOwogICAgYm9vbCB0c19pc2RpZ2l0KFFD aGFyKTsKICAgIHVsb25nIGlucHV0X2JpbigpOwogICAgdWxvbmcgaW5wdXRfb2N0KCk7CiAgICB1 bG9uZyBpbnB1dF9kZWMoKTsKICAgIHVsb25nIGlucHV0X2hleCgpOwogICAgZG91YmxlIGlucHV0 X2RvdWJsZSgpOwogICAgUVRleHRTdHJlYW0gJndyaXRlQmxvY2soIGNvbnN0IGNoYXIqIHAsIHVp bnQgbGVuICk7CiAgICBRVGV4dFN0cmVhbSAmd3JpdGVCbG9jayggY29uc3QgUUNoYXIqIHAsIHVp bnQgbGVuICk7Cgpwcml2YXRlOgoKICAgIFFUZXh0U3RyZWFtKCBjb25zdCBRVGV4dFN0cmVhbSAm ICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I9KCBjb25zdCBRVGV4dFN0cmVhbSAmICk7Cgp9 OwoKdHlwZWRlZiBRVGV4dFN0cmVhbSBRVFM7CgpjbGFzcyBRVGV4dElTdHJlYW0gOiBwdWJsaWMg UVRleHRTdHJlYW0gewpwdWJsaWM6CiAgICBRVGV4dElTdHJlYW0oIGNvbnN0IFFTdHJpbmcqIHMg KSA6CiAgICAgICAgUVRleHRTdHJlYW0oKFFTdHJpbmcqKXMsMHgwMDAxKSB7IH0KICAgIFFUZXh0 SVN0cmVhbSggUUJ5dGVBcnJheSBiYSApIDoKICAgICAgICBRVGV4dFN0cmVhbShiYSwweDAwMDEp IHsgfQogICAgUVRleHRJU3RyZWFtKCBGSUxFICpmICkgOgogICAgICAgIFFUZXh0U3RyZWFtKGYs MHgwMDAxKSB7IH0KfTsKCmNsYXNzIFFUZXh0T1N0cmVhbSA6IHB1YmxpYyBRVGV4dFN0cmVhbSB7 CnB1YmxpYzoKICAgIFFUZXh0T1N0cmVhbSggUVN0cmluZyogcyApIDoKICAgICAgICBRVGV4dFN0 cmVhbShzLDB4MDAwMikgeyB9CiAgICBRVGV4dE9TdHJlYW0oIFFCeXRlQXJyYXkgYmEgKSA6CiAg ICAgICAgUVRleHRTdHJlYW0oYmEsMHgwMDAyKSB7IH0KICAgIFFUZXh0T1N0cmVhbSggRklMRSAq ZiApIDoKICAgICAgICBRVGV4dFN0cmVhbShmLDB4MDAwMikgeyB9Cn07CgoKCgoKaW5saW5lIFFJ T0RldmljZSAqUVRleHRTdHJlYW06OmRldmljZSgpIGNvbnN0CnsgcmV0dXJuIGRldjsgfQoKaW5s aW5lIGJvb2wgUVRleHRTdHJlYW06OmF0RW5kKCkgY29uc3QKeyByZXR1cm4gZGV2ID8gZGV2LT5h dEVuZCgpIDogRkFMU0U7IH0KCmlubGluZSBib29sIFFUZXh0U3RyZWFtOjplb2YoKSBjb25zdAp7 IHJldHVybiBhdEVuZCgpOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpmbGFncygpIGNvbnN0 CnsgcmV0dXJuIGZmbGFnczsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6ZmxhZ3MoIGludCBm ICkKeyBpbnQgb2xkZiA9IGZmbGFnczsgZmZsYWdzID0gZjsgcmV0dXJuIG9sZGY7IH0KCmlubGlu ZSBpbnQgUVRleHRTdHJlYW06OnNldGYoIGludCBiaXRzICkKeyBpbnQgb2xkZiA9IGZmbGFnczsg ZmZsYWdzIHw9IGJpdHM7IHJldHVybiBvbGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpz ZXRmKCBpbnQgYml0cywgaW50IG1hc2sgKQp7IGludCBvbGRmID0gZmZsYWdzOyBmZmxhZ3MgPSAo ZmZsYWdzICYgfm1hc2spIHwgKGJpdHMgJiBtYXNrKTsgcmV0dXJuIG9sZGY7IH0KCmlubGluZSBp bnQgUVRleHRTdHJlYW06OnVuc2V0ZiggaW50IGJpdHMgKQp7IGludCBvbGRmID0gZmZsYWdzOyBm ZmxhZ3MgJj0gfmJpdHM7IHJldHVybiBvbGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjp3 aWR0aCgpIGNvbnN0CnsgcmV0dXJuIGZ3aWR0aDsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6 d2lkdGgoIGludCB3ICkKeyBpbnQgb2xkdyA9IGZ3aWR0aDsgZndpZHRoID0gdzsgcmV0dXJuIG9s ZHc7IH0KCmlubGluZSBpbnQgUVRleHRTdHJlYW06OmZpbGwoKSBjb25zdAp7IHJldHVybiBmaWxs Y2hhcjsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6ZmlsbCggaW50IGYgKQp7IGludCBvbGRj ID0gZmlsbGNoYXI7IGZpbGxjaGFyID0gZjsgcmV0dXJuIG9sZGM7IH0KCmlubGluZSBpbnQgUVRl eHRTdHJlYW06OnByZWNpc2lvbigpIGNvbnN0CnsgcmV0dXJuIGZwcmVjOyB9CgppbmxpbmUgaW50 IFFUZXh0U3RyZWFtOjpwcmVjaXNpb24oIGludCBwICkKeyBpbnQgb2xkcCA9IGZwcmVjOyBmcHJl YyA9IHA7IHJldHVybiBvbGRwOyB9CgoKCgppbmxpbmUgUUNoYXIgUVRleHRTdHJlYW06OnRzX2dl dGMoKQp7IFFDaGFyIHI7IHJldHVybiAoIHRzX2dldGJ1ZiggJnIsMSApID09IDEgPyByIDogUUNo YXIoKHVzaG9ydCkweGZmZmYpICk7IH0KCgoKCgp0eXBlZGVmIFFUZXh0U3RyZWFtICYgKCpRVFNG VU5DKShRVGV4dFN0cmVhbSAmKTsKdHlwZWRlZiBpbnQgKFFUZXh0U3RyZWFtOjoqUVRTTUZJKShp bnQpOwoKY2xhc3MgUVRTTWFuaXAgewpwdWJsaWM6CiAgICBRVFNNYW5pcCggUVRTTUZJIG0sIGlu dCBhICkgeyBtZj1tOyBhcmc9YTsgfQogICAgdm9pZCBleGVjKCBRVGV4dFN0cmVhbSAmcyApIHsg KHMuKm1mKShhcmcpOyB9CnByaXZhdGU6CiAgICBRVFNNRkkgbWY7CiAgICBpbnQgYXJnOwp9OwoK IGlubGluZSBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUVRleHRTdHJlYW0gJnMsIFFUU0ZVTkMg ZiApCnsgcmV0dXJuICgqZikoIHMgKTsgfQoKIGlubGluZSBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8 PCggUVRleHRTdHJlYW0gJnMsIFFUU0ZVTkMgZiApCnsgcmV0dXJuICgqZikoIHMgKTsgfQoKIGlu bGluZSBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggUVRleHRTdHJlYW0gJnMsIFFUU01hbmlwIG0g KQp7IG0uZXhlYyhzKTsgcmV0dXJuIHM7IH0KCiBRVGV4dFN0cmVhbSAmYmluKCBRVGV4dFN0cmVh bSAmcyApOwogUVRleHRTdHJlYW0gJm9jdCggUVRleHRTdHJlYW0gJnMgKTsKIFFUZXh0U3RyZWFt ICZkZWMoIFFUZXh0U3RyZWFtICZzICk7CiBRVGV4dFN0cmVhbSAmaGV4KCBRVGV4dFN0cmVhbSAm cyApOwogUVRleHRTdHJlYW0gJmVuZGwoIFFUZXh0U3RyZWFtICZzICk7CiBRVGV4dFN0cmVhbSAm Zmx1c2goIFFUZXh0U3RyZWFtICZzICk7CiBRVGV4dFN0cmVhbSAmd3MoIFFUZXh0U3RyZWFtICZz ICk7CiBRVGV4dFN0cmVhbSAmcmVzZXQoIFFUZXh0U3RyZWFtICZzICk7CgogaW5saW5lIFFUU01h bmlwIHFTZXRXKCBpbnQgdyApCnsKICAgIFFUU01GSSBmdW5jID0gJlFUZXh0U3RyZWFtOjp3aWR0 aDsKICAgIHJldHVybiBRVFNNYW5pcChmdW5jLHcpOwp9CgogaW5saW5lIFFUU01hbmlwIHFTZXRG aWxsKCBpbnQgZiApCnsKICAgIFFUU01GSSBmdW5jID0gJlFUZXh0U3RyZWFtOjpmaWxsOwogICAg cmV0dXJuIFFUU01hbmlwKGZ1bmMsZik7Cn0KCiBpbmxpbmUgUVRTTWFuaXAgcVNldFByZWNpc2lv biggaW50IHAgKQp7CiAgICBRVFNNRkkgZnVuYyA9ICZRVGV4dFN0cmVhbTo6cHJlY2lzaW9uOwog ICAgcmV0dXJuIFFUU01hbmlwKGZ1bmMscCk7Cn0KIyA0NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJl ZS0zLjAuNi9pbmNsdWRlL3F0bC5oIiAyCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgUVRl eHRPU3RyZWFtSXRlcmF0b3IKewpwcm90ZWN0ZWQ6CiAgICBRVGV4dE9TdHJlYW0mIHN0cmVhbTsK ICAgIFFTdHJpbmcgc2VwYXJhdG9yOwoKcHVibGljOgogICAgUVRleHRPU3RyZWFtSXRlcmF0b3Io IFFUZXh0T1N0cmVhbSYgcykgOiBzdHJlYW0oIHMgKSB7fQogICAgUVRleHRPU3RyZWFtSXRlcmF0 b3IoIFFUZXh0T1N0cmVhbSYgcywgY29uc3QgUVN0cmluZyYgc2VwICkKICAgICAgICA6IHN0cmVh bSggcyApLCBzZXBhcmF0b3IoIHNlcCApIHt9CiAgICBRVGV4dE9TdHJlYW1JdGVyYXRvcjxUPiYg b3BlcmF0b3I9ICggY29uc3QgVCYgeCApIHsKICAgICAgICBzdHJlYW0gPDwgeDsKICAgICAgICBp ZiAoICFzZXBhcmF0b3IuaXNFbXB0eSgpICkKICAgICAgICAgICAgc3RyZWFtIDw8IHNlcGFyYXRv cjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBRVGV4dE9TdHJlYW1JdGVyYXRvcjxU PiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIFFUZXh0T1N0cmVhbUl0ZXJhdG9y PFQ+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIFFUZXh0T1N0cmVhbUl0ZXJh dG9yPFQ+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+CmlubGluZSBPdXRwdXRJ dGVyYXRvciBxQ29weSggSW5wdXRJdGVyYXRvciBfYmVnaW4sIElucHV0SXRlcmF0b3IgX2VuZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRJdGVyYXRvciBfZGVzdCApCnsKICAg IHdoaWxlKCBfYmVnaW4gIT0gX2VuZCApCiAgICAgICAgKl9kZXN0KysgPSAqX2JlZ2luKys7CiAg ICByZXR1cm4gX2Rlc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBCaUl0ZXJhdG9yLCBjbGFzcyBCaU91 dHB1dEl0ZXJhdG9yPgppbmxpbmUgQmlPdXRwdXRJdGVyYXRvciBxQ29weUJhY2t3YXJkKCBCaUl0 ZXJhdG9yIF9iZWdpbiwgQmlJdGVyYXRvciBfZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCaU91dHB1dEl0ZXJhdG9yIF9kZXN0ICkKewogICAgd2hpbGUgKCBfYmVn aW4gIT0gX2VuZCApCiAgICAgICAgKi0tX2Rlc3QgPSAqLS1fZW5kOwogICAgcmV0dXJuIF9kZXN0 Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcjEsIGNsYXNzIElucHV0SXRlcmF0b3Iy PgppbmxpbmUgYm9vbCBxRXF1YWwoIElucHV0SXRlcmF0b3IxIGZpcnN0MSwgSW5wdXRJdGVyYXRv cjEgbGFzdDEsIElucHV0SXRlcmF0b3IyIGZpcnN0MiApCnsKICAgIGZvciAoIDsgZmlyc3QxICE9 IGxhc3QxOyArK2ZpcnN0MSwgKytmaXJzdDIgKQogICAgICAgIGlmICggKmZpcnN0MSAhPSAqZmly c3QyICkKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgcmV0dXJuIFRSVUU7Cn0KCnRlbXBs YXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFQ+CmlubGluZSB2b2lkIHFGaWxsKCBG b3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRvciBsYXN0LCBjb25zdCBUJiB2YWwg KQp7CiAgICBmb3IgKCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QgKQogICAgICAgICpmaXJzdCA9 IHZhbDsKfQojIDEyMCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F0bC5o Igp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgVD4KaW5saW5lIElucHV0SXRl cmF0b3IgcUZpbmQoIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQmIHZhbCApCnsKICAgIHdoaWxlICggZmly c3QgIT0gbGFzdCAmJiAqZmlyc3QgIT0gdmFsICkKICAgICAgICArK2ZpcnN0OwogICAgcmV0dXJu IGZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgVCwgY2xhc3Mg U2l6ZT4KaW5saW5lIHZvaWQgcUNvdW50KCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJh dG9yIGxhc3QsIGNvbnN0IFQmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgIFNpemUmIG4gKQp7 CiAgICBmb3IgKCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QgKQogICAgICAgIGlmICggKmZpcnN0 ID09IHZhbHVlICkKICAgICAgICAgICAgKytuOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5l IHZvaWQgcVN3YXAoIFQmIF92YWx1ZTEsIFQmIF92YWx1ZTIgKQp7CiAgICBUIHRtcCA9IF92YWx1 ZTE7CiAgICBfdmFsdWUxID0gX3ZhbHVlMjsKICAgIF92YWx1ZTIgPSB0bXA7Cn0KCgp0ZW1wbGF0 ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KIHZvaWQgcUJ1YmJsZVNvcnQoIElucHV0SXRlcmF0b3Ig YiwgSW5wdXRJdGVyYXRvciBlICkKewoKICAgIElucHV0SXRlcmF0b3IgbGFzdCA9IGU7CiAgICAt LWxhc3Q7CgogICAgaWYgKCBsYXN0ID09IGIgKQogICAgICAgIHJldHVybjsKCgogICAgd2hpbGUo IGIgIT0gbGFzdCApIHsKICAgICAgICBib29sIHN3YXBwZWQgPSBGQUxTRTsKICAgICAgICBJbnB1 dEl0ZXJhdG9yIHN3YXBfcG9zID0gYjsKICAgICAgICBJbnB1dEl0ZXJhdG9yIHggPSBlOwogICAg ICAgIElucHV0SXRlcmF0b3IgeSA9IHg7CiAgICAgICAgeS0tOwogICAgICAgIGRvIHsKICAgICAg ICAgICAgLS14OwogICAgICAgICAgICAtLXk7CiAgICAgICAgICAgIGlmICggKnggPCAqeSApIHsK ICAgICAgICAgICAgICAgIHN3YXBwZWQgPSBUUlVFOwogICAgICAgICAgICAgICAgcVN3YXAoICp4 LCAqeSApOwogICAgICAgICAgICAgICAgc3dhcF9wb3MgPSB5OwogICAgICAgICAgICB9CiAgICAg ICAgfSB3aGlsZSggeSAhPSBiICk7CiAgICAgICAgaWYgKCAhc3dhcHBlZCApCiAgICAgICAgICAg IHJldHVybjsKICAgICAgICBiID0gc3dhcF9wb3M7CiAgICAgICAgYisrOwogICAgfQp9CgoKdGVt cGxhdGUgPGNsYXNzIENvbnRhaW5lcj4KaW5saW5lIHZvaWQgcUJ1YmJsZVNvcnQoIENvbnRhaW5l ciAmYyApCnsKICBxQnViYmxlU29ydCggYy5iZWdpbigpLCBjLmVuZCgpICk7Cn0KCgp0ZW1wbGF0 ZSA8Y2xhc3MgVmFsdWU+CiB2b2lkIHFIZWFwU29ydFB1c2hEb3duKCBWYWx1ZSogaGVhcCwgaW50 IGZpcnN0LCBpbnQgbGFzdCApCnsKICAgIGludCByID0gZmlyc3Q7CiAgICB3aGlsZSggciA8PSBs YXN0LzIgKSB7CgogICAgICAgIGlmICggbGFzdCA9PSAyKnIgKSB7CgogICAgICAgICAgICBpZiAo IGhlYXBbcl0gPiBoZWFwWyAyKnIgXSApCiAgICAgICAgICAgICAgICBxU3dhcCggaGVhcFtyXSwg aGVhcFsgMipyIF0gKTsKCiAgICAgICAgICAgIHIgPSBsYXN0OwogICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgIGlmICggaGVhcFtyXSA+IGhlYXBbIDIqciBdICYmIGhlYXBbIDIqciBdIDw9IGhl YXBbIDIqcisxIF0gKSB7CgogICAgICAgICAgICAgICAgcVN3YXAoIGhlYXBbcl0sIGhlYXBbIDIq ciBdICk7CiAgICAgICAgICAgICAgICByICo9IDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIGhl YXBbcl0gPiBoZWFwWyAyKnIrMSBdICYmCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYXBbIDIq cisxIF0gPCBoZWFwWyAyKnIgXSApIHsKCiAgICAgICAgICAgICAgICBxU3dhcCggaGVhcFtyXSwg aGVhcFsgMipyKzEgXSApOwogICAgICAgICAgICAgICAgciA9IDIqcisxOwogICAgICAgICAgICB9 IGVsc2UgewoKICAgICAgICAgICAgICAgIHIgPSBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIFZhbHVlPgog dm9pZCBxSGVhcFNvcnRIZWxwZXIoIElucHV0SXRlcmF0b3IgYiwgSW5wdXRJdGVyYXRvciBlLCBW YWx1ZSwgdWludCBuICkKewoKICAgIElucHV0SXRlcmF0b3IgaW5zZXJ0ID0gYjsKICAgIFZhbHVl KiByZWFsaGVhcCA9IG5ldyBWYWx1ZVsgbiBdOwoKICAgIFZhbHVlKiBoZWFwID0gcmVhbGhlYXAg LSAxOwogICAgaW50IHNpemUgPSAwOwogICAgZm9yKCA7IGluc2VydCAhPSBlOyArK2luc2VydCAp IHsKICAgICAgICBoZWFwWysrc2l6ZV0gPSAqaW5zZXJ0OwogICAgICAgIGludCBpID0gc2l6ZTsK ICAgICAgICB3aGlsZSggaSA+IDEgJiYgaGVhcFtpXSA8IGhlYXBbIGkgLyAyIF0gKSB7CiAgICAg ICAgICAgIHFTd2FwKCBoZWFwW2ldLCBoZWFwWyBpIC8gMiBdICk7CiAgICAgICAgICAgIGkgLz0g MjsKICAgICAgICB9CiAgICB9CgoKICAgIGZvciggdWludCBpID0gbjsgaSA+IDA7IGktLSApIHsK ICAgICAgICAqYisrID0gaGVhcFsxXTsKICAgICAgICBpZiAoIGkgPiAxICkgewogICAgICAgICAg ICBoZWFwWzFdID0gaGVhcFtpXTsKICAgICAgICAgICAgcUhlYXBTb3J0UHVzaERvd24oIGhlYXAs IDEsIChpbnQpaSAtIDEgKTsKICAgICAgICB9CiAgICB9CgogICAgZGVsZXRlW10gcmVhbGhlYXA7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KIHZvaWQgcUhlYXBTb3J0KCBJbnB1 dEl0ZXJhdG9yIGIsIElucHV0SXRlcmF0b3IgZSApCnsKCiAgICBpZiAoIGIgPT0gZSApCiAgICAg ICAgcmV0dXJuOwoKCiAgICBJbnB1dEl0ZXJhdG9yIGl0ID0gYjsKICAgIHVpbnQgbiA9IDA7CiAg ICB3aGlsZSAoIGl0ICE9IGUgKSB7CiAgICAgICAgKytuOwogICAgICAgICsraXQ7CiAgICB9CgoK CiAgICBxSGVhcFNvcnRIZWxwZXIoIGIsIGUsICpiLCBuICk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg Q29udGFpbmVyPgogdm9pZCBxSGVhcFNvcnQoIENvbnRhaW5lciAmYyApCnsKICAgIGlmICggYy5i ZWdpbigpID09IGMuZW5kKCkgKQogICAgICAgIHJldHVybjsKCgoKICAgIHFIZWFwU29ydEhlbHBl ciggYy5iZWdpbigpLCBjLmVuZCgpLCAqKGMuYmVnaW4oKSksICh1aW50KWMuY291bnQoKSApOwp9 CiMgNDcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xbWFwLmgiIDIKIyAx ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAxCiMg NDggIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdmFsdWVsaXN0LmgiCiMg MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0b3IiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9pdGVyYXRvciIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgv Yml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu dXgvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu dXgvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2 LWxpbnV4L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p dGVyYXRvciIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMSAzCiMgNDcg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRkZWYiIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p Mzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE1MSAiL3Vzci9saWIvZ2Nj LWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRy ZGlmZl90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkZGVmIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNjcgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBzdGQK ewojIDgwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVz LmgiIDMKICBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qgb3V0cHV0X2l0 ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlu cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn IDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgcmFuZG9tX2FjY2Vz c19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CiMg MTAwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0gX1Rw KiwgdHlwZW5hbWUgX1JlZmVyZW5jZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IgewoKICAg ICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9U cCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoK ICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNl IHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4K ICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVy YXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewog ICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5 OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBk aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVm IF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3Ry dWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2Fj Y2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZh bHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAg dHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZl cmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGlu ZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAg X19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNjggIi91 c3IvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvY29uY2VwdF9jaGVjay5oIiAzCiMgNjkgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsK dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2Uo X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVy YXRvcl90YWcpCiAgewoKICAgCgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0 ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgICAgKytfX2ZpcnN0OyArK19fbjsKICAgIH0KICAgIHJldHVybiBfX247CiAg fQoKdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogIGlubGluZSB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90 eXBlCiAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf dGFnKQogIHsKCiAgIAogICAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgfQojIDExMSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBkaXN0YW5jZShfSW5wdXRJ dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgewoKICAgIHJldHVybiBf X2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7 CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgog IGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwg aW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICB9 Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlz dGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYg X19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZykKICB7CgogICAKCiAgICBpZiAoX19uID4gMCkKICAgICAgd2hpbGUgKF9fbi0tKSArK19faTsK ICAgIGVsc2UKICAgICAgd2hpbGUgKF9fbisrKSAtLV9faTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9p ZAogIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwK ICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICBfX2kg Kz0gX19uOwogIH0KIyAxNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9y X2Jhc2VfZnVuY3MuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5h bWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19p LCBfRGlzdGFuY2UgX19uKQogIHsKCiAgICBfX2FkdmFuY2UoX19pLCBfX24sIF9faXRlcmF0b3Jf Y2F0ZWdvcnkoX19pKSk7CiAgfQoKfQojIDY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pdGVyYXRv ciIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAz CiMgNjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNw YWNlIHN0ZAp7CiMgODkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFzcyByZXZlcnNlX2l0ZXJh dG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh dG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAg ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUs CiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y Pjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVy YXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0 b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRl ciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIHsgfQoK CgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9f eCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJl dmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7IH0KCgoK CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICByZXZlcnNlX2l0ZXJhdG9y KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAgICAgOiBjdXJyZW50KF9f eC5iYXNlKCkpIHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAgICBiYXNlKCkgY29uc3Qg eyByZXR1cm4gY3VycmVudDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3Iq KCkgY29uc3QKICAgICAgewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICAg ICAgcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIKICAgICAgb3Bl cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoKCiAgICAgIHJl dmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgLS1jdXJy ZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0 ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9pdGVy YXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4gX190 bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3It LSgpCiAgICAgIHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCiAgICAgIHsK ICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytjdXJyZW50 OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJh dG9yCiAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJl dHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVy c2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAg ewogICAgICAgIGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5 cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgKyBf X24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oZGlm ZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgKz0gX19uOwogICAgICAg IHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0 b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsg fQogICAgfTsKIyAyNjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl cmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVy biBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9y PF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv ciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAg ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEo X194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkK ICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZl cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX194IDwgX195KTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgIG9wZXJhdG9yLShj b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5iYXNl KCkgLSBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlu bGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4KICAgIG9wZXJhdG9yKyh0eXBlbmFtZSBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAg ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpCiAgICB7IHJldHVy biByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9fbik7IH0KIyAzMjcg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3IKICAgIDog cHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZv aWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKCiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoKICAg ICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6 IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2l0ZXJhdG9yLmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y PSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewog ICAgICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhp czsKICAgICAgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcioo KSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBv cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRv cgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg0ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFp bmVyPgogICAgYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJldHVybiBiYWNr X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgMzk3ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRh aW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0 b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAg IHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAg ICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBm cm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7 IH0KIyA0MjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAg ICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRh aW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXIt PnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAg ICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp czsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsg cmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJh dG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA0NTMgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFp bmVyPgogICAgaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgZnJv bnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0 ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KIyA0NzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAg Y2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0 b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAg ICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJh dG9yIGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5l cl90eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVu YW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0 ZXIoX19pKSB7fQojIDUxMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3Iu aCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFt ZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGl0 ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICAgICArK2l0ZXI7CiAg ICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAg ICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYK ICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJh dG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNTQ0 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NvbnRhaW5lciwgdHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGluc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRl cmF0b3IgX19pKQogICAgewogICAgICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ KF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBf Q29udGFpbmVyOjppdGVyYXRvcihfX2kpKTsKICAgIH0KfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7 CgoKCgoKCgogIHVzaW5nIHN0ZDo6aXRlcmF0b3JfdHJhaXRzOwogIHVzaW5nIHN0ZDo6aXRlcmF0 b3I7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog ICAgY2xhc3MgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAg ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFs dWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+ CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKICAgIHB1 YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6 ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBw b2ludGVyOwoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9y KCkpIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0 ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChfX2kpIHsgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyPgogICAgICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXIsIF9Db250YWluZXI+JiBfX2kpCiAgICAgICAgOiBfTV9jdXJyZW50KF9f aS5iYXNlKCkpIHsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdCB7 IHJldHVybiAqX01fY3VycmVudDsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkg Y29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAg ICAgIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBf X25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gX19ub3JtYWxf aXRlcmF0b3IoX01fY3VycmVudCsrKTsgfQoKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAg ICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19u b3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0 ZXJhdG9yKF9NX2N1cnJlbnQtLSk7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3Jb XShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vy cmVudFtfX25dOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShj b25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJyZW50ICs9IF9fbjsgcmV0 dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisoY29u c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0 ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAg ICAgb3BlcmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJy ZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAg ICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0 dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CgogICAgICBjb25zdCBf SXRlcmF0b3ImCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CiAgICB9 OwojIDY0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1l IF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0 IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJl dHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y PT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMs CiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVu YW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7 IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh dG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19s aHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250 YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0 eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAg Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQog IHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy YXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19s aHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250 YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7 IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0 b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhz LAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5h bWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg cmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0 b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xo cywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRh aW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3Jt YWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAg Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQog IHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3Bl cmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBf X2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv bnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7 IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRv clIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0o Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAog ICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l cj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5l IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlw ZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5j ZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y LCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KfQojIDcwICIvdXNyL2luY2x1ZGUv YysrLzMuMi9pdGVyYXRvciIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIg MSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDMKCiMgMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvaW9zIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAzCgoj IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9j KysvMy4yL2lvc2Z3ZCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdm d2QuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RyaW5nZndkLmgiIDMK CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3Mg YWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFp dHM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf dHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9D aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFy X3RyYWl0czxjaGFyPjsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCiAg dGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47CgogIHR5cGVkZWYgYmFzaWNf c3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cgp9CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lv c2Z3ZCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mcG9zLmgiIDEgMwojIDQz ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUv YysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9j KysvMy4yL2kzODYtbGludXgvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvY3N0ZGlvIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzCiMgOTcg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6 OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpm Y2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNo OwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAg dXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2lu ZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6 ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRl bGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsK ICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNp bmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpy ZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2Fu ZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRm OwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsK ICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsK ICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8i IDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZm c2NhbmY7CiAgdXNpbmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2 c3NjYW5mOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwog IHVzaW5nIF9fZ251X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1 c2luZyBfX2dudV9jeHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0K IyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2lvLmgiIDIgMwoK IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvZ3Roci5oIiAxIDMKIyA5 OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2d0aHIuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMg MzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvcHRo cmVhZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1 ZGUvc2NoZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDExNiAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7 CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAy IDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDYyICIvdXNyL2luY2x1 ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVk X3ByaW9yaXR5OwogIH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgq X19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAg ICAgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgp9CgoKCgoKCgpzdHJ1Y3Qg X19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMzMgIi91 c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2No ZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpf X3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlk X3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpf X3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRf dCBfX3BpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0p IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxn b3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19w aWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu dCBzY2hlZF9zZXRhZmZpbml0eSAoX19waWRfdCBfX3BpZCwgdW5zaWduZWQgbG9uZyBpbnQgX19s ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ICpfX21h c2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0YWZmaW5pdHkgKF9fcGlkX3QgX19w aWQsIHVuc2lnbmVkIGxvbmcgaW50IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIGludCAqX19tYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjEgIi91c3IvaW5j bHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgoKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAz CiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU4ICIvdXNyL2luY2x1ZGUvdGltZS5o IiAzCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKIyA3NCAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMwoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgojIDkyICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDEwNCAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwojIDEyNyAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMwoKCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwog IGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7 CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBp bnQgdG1fZ210b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgoKCgoKc3Ry dWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBz dHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CgoKCgoKdHlw ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0 aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUw KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGlt ZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90 IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gc2l6 ZV90IHN0cmZ0aW1lX2wgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAog ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmlj dCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93 ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m bXQsIHN0cnVjdCB0bSAqX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg X19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3Qg dGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1l IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0 bSAqZ210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0 cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpf X3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2Nv bnN0IHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2Nv bnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGlt ZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAq Y3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo YXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBf X3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpz ZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBp bnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hl bikgdGhyb3cgKCk7CiMgMzA3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1lX3Qg dGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZWxv Y2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQg X195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJu IGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1l LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwg c3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0 aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2Nv bnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBj bG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93ICgp OwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRf dCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xv Y2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZl bnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpf X3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUg KHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUg KHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQs IHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQg dGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwojIDM3OCAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBz dHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDM5 MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRt ICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKfQojIDIyICIvdXNyL2luY2x1ZGUv cHRocmVhZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi91 c3IvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBl ZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWdu ZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQp KSldOwogIH0gX19zaWdzZXRfdDsKIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA1 MCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsK IyAzNzggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp9CiMgMjUgIi91c3IvaW5jbHVkZS9wdGhy ZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAy MyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9zY2hlZC5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi IDIgMwoKdHlwZWRlZiBpbnQgX19hdG9taWNfbG9ja190OwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0 bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgX19hdG9taWNfbG9ja190IF9fc3BpbmxvY2s7 Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rl c2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFj aHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2No ZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9f Z3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAg c2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7 CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9f Y193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f ZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJl YWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50 IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwog IHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoK CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJf dDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRo cmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBp bnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFk X2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2Fp dGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xv Y2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFy ZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhy ZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBfcHRocmVhZF9mYXN0 bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsK ICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlw ZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9iYXJyaWVyYXR0cl90OwoK CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDI2ICIvdXNyL2luY2x1 ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5oIiAxIDMK IyAyNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMgNTkgIi91 c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUs CgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklU X1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9T Q09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJF QURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVB RF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCiAgLAog IFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFE X01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURf TVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFE X01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVBRF9NVVRF WF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0KewogIFBUSFJF QURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKCmVudW0K ewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJF RkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lW RV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVS X1dSSVRFUl9OUAp9OwojIDEzMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpzdHJ1Y3QgX3B0 aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopOwogIHZv aWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBf YnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAg UFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJS RUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNjMgIi91c3IvaW5jbHVk ZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90ICpfX3Jl c3RyaWN0IF9fdGhyZWFkcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhy ZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHB0aHJlYWRf dCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9lcXVh bCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhyb3cgKCk7CgoK ZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfam9p biAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsKCgoK CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0 cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFj aHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0YWNo c3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0g KHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhyZWFk X2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz Y2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBp bnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0 c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9f cG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVy aXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVz dHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGlu dCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKQog ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0 IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Njb3BlKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1YXJkc2l6ZSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplIChfX2NvbnN0 IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19ndWFyZHNpemUpCiAgICAgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAocHRocmVh ZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0 c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0cmljdCBfX3N0 YWNrYWRkcikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRz dGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90 ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXpl KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgKF9fY29u c3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKICAgICB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAgKHB0aHJlYWRfdCBfX3Ro LCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGlj eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVk X3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRz Y2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0p CiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9p ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQgX19s ZXZlbCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfeWllbGQgKHZvaWQpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRl eF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhf dCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90aW1lZGxv Y2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0 ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0 aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhy ZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJl YWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKICAgICB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0 dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f YXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50 IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICpf X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAq X19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0aHJl YWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jy b2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg cHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9f bXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAo cHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jl c3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2NvbmRh dHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rl c3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3Qg KgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0 dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp Y3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfc2V0 cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBf X3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRf cndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKHB0 aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf cndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3 bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2sg KHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190 ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxv Y2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw dGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBf X3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBz dHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j a191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19h dHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95IChw dGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0 dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRy X3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9y d2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2th dHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3ByZWYpIHRocm93ICgpOwojIDUw OSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9pbml0 IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaywgaW50IF9fcHNoYXJlZCkKICAgICB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9kZXN0cm95IChwdGhyZWFkX3NwaW5sb2NrX3Qg Kl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fbG9jayAocHRocmVh ZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGlu X3RyeWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHB0aHJlYWRfc3Bpbl91bmxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2luaXQgKHB0aHJlYWRfYmFycmll cl90ICpfX3Jlc3RyaWN0IF9fYmFycmllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB1bnNpZ25lZCBpbnQgX19jb3VudCkgdGhyb3cg KCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJf dCAqX19iYXJyaWVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9p bml0IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50 IHB0aHJlYWRfYmFycmllcmF0dHJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0 dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2dldHBzaGFyZWQg KF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cg KCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9i YXJyaWVyYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJy aWVyX3dhaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwojIDU1NiAi L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAo cHRocmVhZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHB0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoK CmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSB0 aHJvdyAoKTsKIyA1NzYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhy ZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoK ZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpfX29s ZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGlu dCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf Y2FuY2VsIChwdGhyZWFkX3QgX19jYW5jZWx0aHJlYWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv aWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2MTAgIi91c3IvaW5jbHVk ZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3Qg X3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2 b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIg Kl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0 ZSkgdGhyb3cgKCk7CiMgNjMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lk IF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVm ZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMgNjQyICIvdXNyL2luY2x1ZGUvcHRo cmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVj dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9nZXRjcHVjbG9ja2lkIChwdGhyZWFkX3QgX190aHJlYWRfaWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93 ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91 c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNr IChpbnQgX19ob3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IF9fc2lnc2V0 X3QgKl9fcmVzdHJpY3QgX19uZXdtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z aWdzZXRfdCAqX19yZXN0cmljdCBfX29sZG1hc2spdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZGlkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMg NjU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA2NzEgIi91c3IvaW5jbHVkZS9wdGhy ZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZv aWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkg dGhyb3cgKCk7Cgp9CiMgMzggIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9n dGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90 Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5cGVkZWYgcHRocmVh ZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdlYWsgcHRocmVhZF9v bmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3ZWFrIHB0aHJlYWRf a2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsg cHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVhdGUKCiNwcmFnbWEg d2VhayBwdGhyZWFkX211dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxv Y2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4MCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUg aW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2b2lkICpjb25zdCBfX2d0 aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsKICByZXR1cm4gX19n dGhyZWFkX2FjdGl2ZV9wdHIgIT0gMDsKfQojIDQzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4 Ni1saW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVh ZF9vbmNlIChfX2d0aHJlYWRfb25jZV90ICpvbmNlLCB2b2lkICgqZnVuYykgKHZvaWQpKQp7CiAg aWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX29uY2UgKG9uY2Us IGZ1bmMpOwogIGVsc2UKICAgIHJldHVybiAtMTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhy ZWFkX2tleV9jcmVhdGUgKF9fZ3RocmVhZF9rZXlfdCAqa2V5LCB2b2lkICgqZHRvcikgKHZvaWQg KikpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfY3JlYXRlIChrZXksIGR0b3IpOwp9CgpzdGF0aWMg aW5saW5lIGludApfX2d0aHJlYWRfa2V5X2R0b3IgKF9fZ3RocmVhZF9rZXlfdCBrZXksIHZvaWQg KnB0cikKewoKICBpZiAocHRyKQogICAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwg MCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9r ZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2Rl bGV0ZSAoa2V5KTsKfQoKc3RhdGljIGlubGluZSB2b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmlj IChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtl eSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFk X2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQp7CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lm aWMgKGtleSwgcHRyKTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sg KF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkp CiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJu IDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJl YWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0 dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9 CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0 ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0 aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5OSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2d0aHIuaCIgMiAzCiMgMzggIi91 c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0 cmVhbXNpemU7CgogIHR5cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZw b3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2Nr OwoKCiAgdHlwZWRlZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewog ICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl IF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Rl YyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0 OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAw eDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAw OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBz dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMg Y29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVy Y2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxk ID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19m YWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgw MTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMg Y29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgx MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMg NDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9jd2NoYXIiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIi IDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMSAzCiMgNDggIi91c3IvaW5j bHVkZS9jKysvMy4yL2N0aW1lIiAzCiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAz Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsKICB1 c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcg Ojpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2luZyA6OmN0 aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6c3Ry ZnRpbWU7Cn0KIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMKCgojIDEgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAx ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAz CiMgNDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2Nj LWxpYi9pMzg2LWxpbnV4LzMuMi4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2lu Y2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgojIDg4ICIv dXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwoK CgojIDExMyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpzdHJ1Y3Qg dG07CgoKCgoKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3 Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoK ZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBz aXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdj aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90 ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9f Y29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2No YXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGludCB3Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j b25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBf X2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHdjc25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJf dCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg d2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRo cm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z MSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z Miwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsX2wgKF9f Y29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAg ICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHdj c3hmcm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoK ZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hyIChf X2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcmNociAoX19jb25zdCB3 Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2No YXJfdCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9f d2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3Qg Kl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2No YXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0 IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3Rv ayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICB3 Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3Ns ZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlz dGFjaywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoX19jb25zdCB3Y2hh cl90ICpfX3MsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90 ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3Zl ICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAg dGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJf dCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtcGNw eSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp OwoKCgoKCgpleHRlcm4gd2ludF90IGJ0b3djIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCB3Y3RvYiAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAo X19jb25zdCBtYnN0YXRlX3QgKl9fcHMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCgpleHRlcm4gc2l6ZV90IG1icnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2Ms CiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6 ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBf X3djLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0 aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9f cmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgbWJz dGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKIyAzMjQgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAzCgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmlj dCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90 ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAo Y2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAg ICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf dCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVf dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJz IChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWJz dGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHdjd2lk dGggKHdjaGFyX3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25z dCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91Ymxl IHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp OwpleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVy biB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lv bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lv bl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNp b25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9u X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQ0MyAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3Rv dWxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19s b2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xs X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg KCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxs X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv Y2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2RfbCAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhy b3cgKCk7CgpleHRlcm4gZmxvYXQgd2NzdG9mX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3Vi bGUgd2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4g ZmxvYXQgX193Y3N0b2ZfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUg X193Y3N0b2xkX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f Z3JvdXApIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoK CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX25wdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0 aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxf aW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg aW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3Y2hhcl90ICoqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA1NjMg Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3Qg Kl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hh cl90ICp3Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNp emVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxF ICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19G SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4g aW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQog ICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2Zndw cmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBf X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRm IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZz d3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4 dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAg IHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoK CgoKCmV4dGVybiBpbnQgdmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0 ZXJuIGludCB2d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAg ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoK ZXh0ZXJuIGludCB2c3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7 CgoKCgoKCgpleHRlcm4gd2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CmV4dGVybiB3aW50X3QgZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVy biB3aW50X3QgZ2V0d2NoYXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IGZwdXR3 YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRf dCBwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl cm4gd2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdj aGFyX3QgKmZnZXR3cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAg ICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK CmV4dGVybiBpbnQgZnB1dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAg ICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK CmV4dGVybiB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gd2ludF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhy b3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2Ms IF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9j a2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2lu dF90IHB1dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4g d2NoYXJfdCAqZmdldHdzX3VubG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBf X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19G SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBzaXplX3Qg d2NzZnRpbWUgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9f dHApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZV9sICh3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKIyA3MzcgIi91c3IvaW5j bHVkZS93Y2hhci5oIiAzCn0KIyA1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMK IyA2OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVz aW5nIDo6bWJzdGF0ZV90Owp9CiMgMTMzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDMK bmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6YnRvd2M7CiAgdXNp bmcgOjpmZ2V0d2M7CiAgdXNpbmcgOjpmZ2V0d3M7CiAgdXNpbmcgOjpmcHV0d2M7CiAgdXNpbmcg OjpmcHV0d3M7CiAgdXNpbmcgOjpmd2lkZTsKICB1c2luZyA6OmZ3cHJpbnRmOwogIHVzaW5nIDo6 ZndzY2FuZjsKICB1c2luZyA6OmdldHdjOwogIHVzaW5nIDo6Z2V0d2NoYXI7CiAgdXNpbmcgOjpt YnJsZW47CiAgdXNpbmcgOjptYnJ0b3djOwogIHVzaW5nIDo6bWJzaW5pdDsKICB1c2luZyA6Om1i c3J0b3djczsKICB1c2luZyA6OnB1dHdjOwogIHVzaW5nIDo6cHV0d2NoYXI7CiAgdXNpbmcgOjpz d3ByaW50ZjsKICB1c2luZyA6OnN3c2NhbmY7CiAgdXNpbmcgOjp1bmdldHdjOwogIHVzaW5nIDo6 dmZ3cHJpbnRmOwogIHVzaW5nIDo6dmZ3c2NhbmY7CiAgdXNpbmcgOjp2c3dwcmludGY7CiAgdXNp bmcgOjp2c3dzY2FuZjsKICB1c2luZyA6OnZ3cHJpbnRmOwogIHVzaW5nIDo6dndzY2FuZjsKICB1 c2luZyA6OndjcnRvbWI7CiAgdXNpbmcgOjp3Y3NjYXQ7CiAgdXNpbmcgOjp3Y3NjbXA7CiAgdXNp bmcgOjp3Y3Njb2xsOwogIHVzaW5nIDo6d2NzY3B5OwogIHVzaW5nIDo6d2NzY3NwbjsKICB1c2lu ZyA6Ondjc2Z0aW1lOwogIHVzaW5nIDo6d2NzbGVuOwogIHVzaW5nIDo6d2NzbmNhdDsKICB1c2lu ZyA6Ondjc25jbXA7CiAgdXNpbmcgOjp3Y3NuY3B5OwogIHVzaW5nIDo6d2NzcnRvbWJzOwogIHVz aW5nIDo6d2Nzc3BuOwogIHVzaW5nIDo6d2NzdG9kOwogIHVzaW5nIDo6d2NzdG9mOwogIHVzaW5n IDo6d2NzdG9rOwogIHVzaW5nIDo6d2NzdG9sOwogIHVzaW5nIDo6d2NzdG91bDsKICB1c2luZyA6 Ondjc3hmcm07CiAgdXNpbmcgOjp3Y3RvYjsKICB1c2luZyA6OndtZW1jbXA7CiAgdXNpbmcgOjp3 bWVtY3B5OwogIHVzaW5nIDo6d21lbW1vdmU7CiAgdXNpbmcgOjp3bWVtc2V0OwogIHVzaW5nIDo6 d3ByaW50ZjsKICB1c2luZyA6OndzY2FuZjsKCiAgdXNpbmcgOjp3Y3NjaHI7CgogIGlubGluZSB3 Y2hhcl90KgogIHdjc2Nocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdj c2Nocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6 d2NzcGJyazsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hh cl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3BicmsoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4o X19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d2NzcmNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAg d2NzcmNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc3JjaHIoY29u c3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3N0cjsK CiAgaW5saW5lIHdjaGFyX3QqCiAgd2Nzc3RyKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIp CiAgeyByZXR1cm4gd2Nzc3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3My KTsgfQoKICB1c2luZyA6OndtZW1jaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdtZW1jaHIod2No YXJfdCogX19wLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiB3bWVtY2hyKGNv bnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYywgX19uKTsgfQp9CgoKCgoKCgpuYW1l c3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6Ondjc3RvbGQ7CiAgdXNpbmcgOjp3Y3N0b2xsOwog IHVzaW5nIDo6d2NzdG91bGw7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6 d2NzdG9sZDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGw7CiAgdXNpbmcgX19nbnVfY3h4Ojp3 Y3N0b3VsbDsKfQojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCgpu YW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3Mg ZnBvcwogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlw ZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5 cGUgX01fc3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBj b25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5 cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFt b2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBf X29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYo X19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0 IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1v ZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3Mm CiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0 dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYp CiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwog ICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0 cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBf X3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAg ICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9v ZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3Qg ZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7 IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9N X29mZjsgfQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsg X01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJl YW1wb3M7CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9m dW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmlu ZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lk KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93 X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAg dm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2lu dmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3Ro X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAog IF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQ4ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9pb3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj bGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh c3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp dHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFy VD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5 cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJp bmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9 IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2Nh dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwK ICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFz cyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1 ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90 cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg ICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3Ry ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsK CgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1 ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07 CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19p b3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBz dHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJl YW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAg dHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYg YmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hh cj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0 eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCgogIHR5cGVkZWYgYmFzaWNfaW9z PHdjaGFyX3Q+IHdpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVh bWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRl ZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJl YW08d2NoYXJfdD4gd2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+ IHdzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3Ry aW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmlu Z3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3Ry ZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVm IGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3Ry ZWFtPHdjaGFyX3Q+IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4g d2ZzdHJlYW07Cgp9CiMgNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBj bGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0K ICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hh ciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDog cHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3co KSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCgogIHR5 cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lkICgqdW5l eHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUo dGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmli dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBl Y3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBf X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgOTggIi91c3IvaW5jbHVkZS9jKysvMy4y L2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKbmFt ZXNwYWNlIF9fZ251X2N4eAp7CiMgMTExICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24i IDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVfaGFuZGxlciAoKTsKfQoKfQojIDQ2ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv Y2hhcl90cmFpdHMuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hhcl90 cmFpdHMuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAxIDMKIyA0OCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMwojIDc3ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9jc3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6 bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpz dHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5nIDo6c3Ry Y21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4 ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2luZyA6OnN0cnRv azsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5nIDo6c3RybGVu OwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwg aW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2 b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBpbmxpbmUgY2hh cioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ry Y2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ry cGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBf X3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+ KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0 cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycmNocihj b25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnN0cjsK CiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAg eyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwg X19zMik7IH0KfQojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NoYXJfdHJhaXRzLmgi IDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0 cnVjdCBjaGFyX3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7Cgog ICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFt cG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlw ZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2ln bihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMg Ym9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19j Mik7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNv bnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoK ICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpOwoK ICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUq IF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpOwoKICAgICAgc3RhdGljIGNo YXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z Miwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJf dHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0 YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwg Y2hhcl90eXBlIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlw ZShjb25zdCBpbnRfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19p bnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBl cV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpOwoK ICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpOwoKICAgICAgc3RhdGljIGludF90eXBl CiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYyk7CiAgICB9OwoKCgogIHRlbXBsYXRl PD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNoYXIg Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJl YW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0 eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNz aWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEg PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9f YzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9 CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0 IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0 YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf dHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIs IF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlw ZSogX19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwg Y29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNo YXJfdHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5 cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp emVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUo X19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHko Y2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24p KTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19z LCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxj aGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90 eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90eXBl CiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0K CiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2Mx LCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9Cgog ICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50 X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25z dCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBfX2M7 IH0KICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90Pgog ICAgewogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdpbnRf dCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVk ZWYgd3N0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlw ZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0 IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJv b2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg cmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg ICAgIHsgcmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNp emVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHdj c2xlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNv bnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAg ICAgeyByZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJf dHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg aW50X3R5cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3MyLCBfX24pOyB9 CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29u c3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY3B5KF9f czEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihj aGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4g d21lbXNldChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0 b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7 IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5 cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAg ICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2My KQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQog ICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKDB4ZmZmZmZmZmZ1KSk7 IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBf X2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9fYzsgfQog IH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBz dHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAgICBf Q2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoKICAg ICAgYm9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJh aXRzOjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDcgIi91c3IvaW5jbHVkZS9jKysvMy4y L2lvcyIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDEg MwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgoKIyAxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvY2xvY2FsZSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDEgMwojIDI5ICIv dXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv My4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1 ZGUvYml0cy9sb2NhbGUuaCIgMwplbnVtCnsKICBfX0xDX0NUWVBFID0gMCwKICBfX0xDX05VTUVS SUMgPSAxLAogIF9fTENfVElNRSA9IDIsCiAgX19MQ19DT0xMQVRFID0gMywKICBfX0xDX01PTkVU QVJZID0gNCwKICBfX0xDX01FU1NBR0VTID0gNSwKICBfX0xDX0FMTCA9IDYsCiAgX19MQ19QQVBF UiA9IDcsCiAgX19MQ19OQU1FID0gOCwKICBfX0xDX0FERFJFU1MgPSA5LAogIF9fTENfVEVMRVBI T05FID0gMTAsCiAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAogIF9fTENfSURFTlRJRklDQVRJT04g PSAxMgp9OwojIDMxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMg NTIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwpzdHJ1Y3QgbGNvbnYKewoKCiAgY2hhciAqZGVj aW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwoKCgoKCiAgY2hhciAqZ3JvdXBpbmc7 CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwog IGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOwogIGNo YXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9zaWduOwogIGNoYXIgKm5lZ2F0aXZl X3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hhciBmcmFjX2RpZ2l0czsKCiAgY2hh ciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5X3NwYWNlOwoKICBjaGFyIG5fY3NfcHJl Y2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBwX3NpZ25fcG9zbjsK ICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBpbnRfcF9jc19wcmVjZWRlczsKCiAgY2hhciBp bnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50X25fY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50 X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50X3Bfc2lnbl9wb3NuOwogIGNoYXIgaW50 X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCn07CgoKCgoKZXh0 ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2Nh bGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRo cm93ICgpOwoKCiMgMTQ4ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKdHlwZWRlZiBfX2xvY2Fs ZV90IGxvY2FsZV90OwoKCgoKCmV4dGVybiBfX2xvY2FsZV90IG5ld2xvY2FsZSAoaW50IF9fY2F0 ZWdvcnlfbWFzaywgX19jb25zdCBjaGFyICpfX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xvY2FsZV90IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTg5ICIvdXNyL2luY2x1ZGUv bG9jYWxlLmgiIDMKZXh0ZXJuIF9fbG9jYWxlX3QgZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0 YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19k YXRhc2V0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fbG9jYWxlX3QgdXNlbG9jYWxlIChfX2xv Y2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCgoKCgp9CiMgNTAgIi91c3IvaW5jbHVkZS9j KysvMy4yL2Nsb2NhbGUiIDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7 CiAgdXNpbmcgOjpzZXRsb2NhbGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9CiMgMzcgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2xhbmdpbmZvLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIg MwojIDEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL25s X3R5cGVzLmgiIDMKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICpubF9jYXRkOwoKCnR5cGVk ZWYgaW50IG5sX2l0ZW07CgoKZXh0ZXJuIG5sX2NhdGQgY2F0b3BlbiAoX19jb25zdCBjaGFyICpf X2NhdF9uYW1lLCBpbnQgX19mbGFnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMg KG5sX2NhdGQgX19jYXRhbG9nLCBpbnQgX19zZXQsIGludCBfX251bWJlciwKICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg Y2F0Y2xvc2UgKG5sX2NhdGQgX19jYXRhbG9nKSB0aHJvdyAoKTsKCn0KIyAyNSAiL3Vzci9pbmNs dWRlL2xhbmdpbmZvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAz CiMgMjcgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAi L3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENf VElNRSkgPDwgMTYpIHwgKDApKSwKCiAgQUJEQVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwK CiAgQUJEQVlfNSwKCiAgQUJEQVlfNiwKCiAgQUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIs CgogIERBWV8zLAoKICBEQVlfNCwKCiAgREFZXzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBB Qk1PTl8xLAoKICBBQk1PTl8yLAoKICBBQk1PTl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoK ICBBQk1PTl82LAoKICBBQk1PTl83LAoKICBBQk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8x MCwKCiAgQUJNT05fMTEsCgogIEFCTU9OXzEyLAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9O XzMsCgogIE1PTl80LAoKICBNT05fNSwKCiAgTU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAg TU9OXzksCgogIE1PTl8xMCwKCiAgTU9OXzExLAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBN X1NUUiwKCgogIERfVF9GTVQsCgogIERfRk1ULAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgog IEVSQSwKCiAgX19FUkFfWUVBUiwKCgoKICBFUkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVS QV9EX1RfRk1ULAoKICBFUkFfVF9GTVQsCgoKICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAg X05MX1RJTUVfRVJBX0VOVFJJRVMsCgogIF9OTF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAg X05MX1dBQkRBWV8zLAogIF9OTF9XQUJEQVlfNCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRB WV82LAogIF9OTF9XQUJEQVlfNywKCgogIF9OTF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxf V0RBWV8zLAogIF9OTF9XREFZXzQsCiAgX05MX1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9X REFZXzcsCgoKICBfTkxfV0FCTU9OXzEsCiAgX05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywK ICBfTkxfV0FCTU9OXzQsCiAgX05MX1dBQk1PTl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FC TU9OXzcsCiAgX05MX1dBQk1PTl84LAogIF9OTF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAog IF9OTF9XQUJNT05fMTEsCiAgX05MX1dBQk1PTl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dN T05fMiwKICBfTkxfV01PTl8zLAogIF9OTF9XTU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01P Tl82LAogIF9OTF9XTU9OXzcsCiAgX05MX1dNT05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9O XzEwLAogIF9OTF9XTU9OXzExLAogIF9OTF9XTU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxf V1BNX1NUUiwKCiAgX05MX1dEX1RfRk1ULAogIF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBf TkxfV1RfRk1UX0FNUE0sCgogIF9OTF9XRVJBX1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05M X1dBTFRfRElHSVRTLAogIF9OTF9XRVJBX0RfVF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9O TF9USU1FX1dFRUtfTkRBWVMsCiAgX05MX1RJTUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VF S18xU1RXRUVLLAogIF9OTF9USU1FX0ZJUlNUX1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09S S0RBWSwKICBfTkxfVElNRV9DQUxfRElSRUNUSU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBf REFURV9GTVQsCgogIF9OTF9XX0RBVEVfRk1ULAoKICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxf TlVNX0xDX1RJTUUsCgoKCgogIF9OTF9DT0xMQVRFX05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkg PDwgMTYpIHwgKDApKSwKICBfTkxfQ09MTEFURV9SVUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJM RU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1CLAogIF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05M X0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxfQ09MTEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dB UDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBfTkxfQ09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xM QVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRFX0VYVFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJF Q1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJf VEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNF UU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFXQywKICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9O TF9OVU1fTENfQ09MTEFURSwKCgoKCiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkg PDwgMTYpIHwgKDApKSwKICBfTkxfQ1RZUEVfVE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBf TkxfQ1RZUEVfVE9MT1dFUiwKICBfTkxfQ1RZUEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwK ICBfTkxfQ1RZUEVfR0FQMywKICBfTkxfQ1RZUEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBf TkxfQ1RZUEVfR0FQNiwKICBfTkxfQ1RZUEVfQ0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9O QU1FUywKICBfTkxfQ1RZUEVfV0lEVEgsCiAgX05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NU WVBFX0NPREVTRVRfTkFNRSwKICBDT0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAg X05MX0NUWVBFX1RPVVBQRVIzMiwKICBfTkxfQ1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9D TEFTU19PRkZTRVQsCiAgX05MX0NUWVBFX01BUF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRT X01CX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFf TUIsCiAgX05MX0NUWVBFX0lORElHSVRTMl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAog IF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxf Q1RZUEVfSU5ESUdJVFM2X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBF X0lORElHSVRTOF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJ R0lUU19XQ19MRU4sCiAgX05MX0NUWVBFX0lORElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJ VFMxX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19X QywKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAg X05MX0NUWVBFX0lORElHSVRTNl9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9D VFlQRV9JTkRJR0lUUzhfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVf T1VURElHSVQwX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJ R0lUMl9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRf TUIsCiAgX05MX0NUWVBFX09VVERJR0lUNV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAog IF9OTF9DVFlQRV9PVVRESUdJVDdfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxf Q1RZUEVfT1VURElHSVQ5X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBF X09VVERJR0lUMV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRE SUdJVDNfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1 X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDZfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywK ICBfTkxfQ1RZUEVfT1VURElHSVQ4X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05M X0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwK ICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9UQkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lE WCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZB VUxUX01JU1NJTkdfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAg X05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRV9MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9S RSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9O TF9DVFlQRV9FWFRSQV9NQVBfMywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBF X0VYVFJBX01BUF81LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFf TUFQXzcsCiAgX05MX0NUWVBFX0VYVFJBX01BUF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwK ICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05M X0NUWVBFX0VYVFJBX01BUF8xMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQ RV9FWFRSQV9NQVBfMTQsCiAgX05MX05VTV9MQ19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1C T0wgPSAoKChfX0xDX01PTkVUQVJZKSA8PCAxNikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lN Qk9MLAoKCgogIF9fTU9OX0RFQ0lNQUxfUE9JTlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwK CgoKICBfX01PTl9HUk9VUElORywKCgoKICBfX1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElW RV9TSUdOLAoKCgogIF9fSU5UX0ZSQUNfRElHSVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAg X19QX0NTX1BSRUNFREVTLAoKCgogIF9fUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNF REVTLAoKCgogIF9fTl9TRVBfQllfU1BBQ0UsCgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05f U0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVD RURFUywKCgoKICBfX0lOVF9QX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVT LAoKCgogIF9fSU5UX05fU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgog IF9fSU5UX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9M LAogIF9OTF9NT05FVEFSWV9EVU9fQ1VSUkVOQ1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9f SU5UX0ZSQUNfRElHSVRTLAogIF9OTF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01P TkVUQVJZX0RVT19QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BB Q0UsCiAgX05MX01PTkVUQVJZX0RVT19OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9f Tl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBf TkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lO VF9OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAog IF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05f UE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllf RFVPX0lOVF9OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05M X01PTkVUQVJZX1VOT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAg X05MX01PTkVUQVJZX0RVT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRF LAogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FO RFNfU0VQX1dDLAogIF9OTF9NT05FVEFSWV9DT0RFU0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlks CgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgoX19MQ19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoK CgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9QT0lOVCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgog IFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAsCgogIF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVS SUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9O TF9OVU1FUklDX0NPREVTRVQsCiAgX05MX05VTV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAo KChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAoMCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIs CgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTUVTU0FHRVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01F U1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hUID0gKCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDAp KSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05MX1BBUEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19Q QVBFUiwKCiAgX05MX05BTUVfTkFNRV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSks CiAgX05MX05BTUVfTkFNRV9HRU4sCiAgX05MX05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1F X01SUywKICBfTkxfTkFNRV9OQU1FX01JU1MsCiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFN RV9DT0RFU0VULAogIF9OTF9OVU1fTENfTkFNRSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9 ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwgKDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05B TUUsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9QT1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIy LAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIzLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAog IF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLAogIF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBf TkxfQUREUkVTU19MQU5HX05BTUUsCiAgX05MX0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVT U19MQU5HX1RFUk0sCiAgX05MX0FERFJFU1NfTEFOR19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNF VCwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgogIF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAo KChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwgKDApKSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01f Rk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NFTEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVG SVgsCiAgX05MX1RFTEVQSE9ORV9DT0RFU0VULAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBf TkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1FTlQgPSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikg fCAoMCkpLAogIF9OTF9NRUFTVVJFTUVOVF9DT0RFU0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1F TlQsCgogIF9OTF9JREVOVElGSUNBVElPTl9USVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04p IDw8IDE2KSB8ICgwKSksCiAgX05MX0lERU5USUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJ RklDQVRJT05fQUREUkVTUywKICBfTkxfSURFTlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURF TlRJRklDQVRJT05fRU1BSUwsCiAgX05MX0lERU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJ RklDQVRJT05fRkFYLAogIF9OTF9JREVOVElGSUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJ RklDQVRJT05fVEVSUklUT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxf SURFTlRJRklDQVRJT05fQVBQTElDQVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklB VElPTiwKICBfTkxfSURFTlRJRklDQVRJT05fUkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9O X0RBVEUsCiAgX05MX0lERU5USUZJQ0FUSU9OX0NBVEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElP Tl9DT0RFU0VULAogIF9OTF9OVU1fTENfSURFTlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMg NTc1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpleHRlcm4gY2hhciAqbmxfbGFuZ2luZm8g KG5sX2l0ZW0gX19pdGVtKSB0aHJvdyAoKTsKIyA1ODYgIi91c3IvaW5jbHVkZS9sYW5naW5mby5o IiAzCmV4dGVybiBjaGFyICpubF9sYW5naW5mb19sIChubF9pdGVtIF9faXRlbSwgX19sb2NhbGVf dCBsKTsKCgp9CiMgMzggIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKyts b2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDI0ICIvdXNyL2lu Y2x1ZGUvaWNvbnYuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9p bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDIgMwoKCmV4 dGVybiAiQyIgewoKCnR5cGVkZWYgdm9pZCAqaWNvbnZfdDsKCgoKCmV4dGVybiBpY29udl90IGlj b252X29wZW4gKF9fY29uc3QgY2hhciAqX190b2NvZGUsIF9fY29uc3QgY2hhciAqX19mcm9tY29k ZSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgX19jZCwg Y2hhciAqKl9fcmVzdHJpY3QgX19pbmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf X3Jlc3RyaWN0IF9faW5ieXRlc2xlZnQsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fb3V0YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3Qg X19vdXRieXRlc2xlZnQpOwoKCmV4dGVybiBpbnQgaWNvbnZfY2xvc2UgKGljb252X3QgX19jZCkg dGhyb3cgKCk7Cgp9CiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9j Kytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMSAzCiMgMzUgIi91 c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpleHRlcm4gY2hhciAqZ2V0 dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmRn ZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lk KQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoX19jb25zdCBjaGFyICpf X2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCmV4dGVybiBjaGFyICpkY2dldHRleHQg KF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg Kl9fZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKCmV4dGVybiBj aGFyICpuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19jb25zdCBjaGFyICpfX21z Z2lkMiwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgxKSkpIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoX19j b25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50 IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkg X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgpleHRlcm4gY2hhciAqZGNu Z2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dp ZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNp Z25lZCBsb25nIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jYXRlZ29y eSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgoKCmV4dGVybiBjaGFyICp0ZXh0 ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBj aGFyICpiaW5kdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Rpcm5hbWUpIHRocm93ICgpOwoK CgpleHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fY29uc3QgY2hhciAqX19k b21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19jb2Rlc2V0KSB0aHJvdyAoKTsKIyAxMjAgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgi IDMKfQojIDQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxl LmgiIDIgMwoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICBleHRlcm4gIkMiIF9fdHlwZW9m KHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7Cn0KCgpuYW1lc3BhY2Ugc3RkCnsKICB0eXBlZGVmIF9f bG9jYWxlX3QgX19jX2xvY2FsZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgaW50CiAg ICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXplLCBjb25zdCBj aGFyKiBfX2ZtdCwKCiAgICAgICAgICAgICAgICAgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2Nh bGUmIF9fY2xvYywgaW50IF9fcHJlYyA9IC0xKQogICAgewogICAgICBfX2NfbG9jYWxlIF9fb2xk ID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOwojIDczICIvdXNyL2luY2x1ZGUvYysr LzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDMKICAgICAgaW50IF9fcmV0OwoKICAg ICAgaWYgKF9fcHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6 ZSwgX19mbXQsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gc25wcmlu dGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fdik7CiMgODcgIi91c3IvaW5jbHVkZS9jKysvMy4y L2kzODYtbGludXgvYml0cy9jKytsb2NhbGUuaCIgMwogICAgICBfX2dudV9jeHg6Ol9fdXNlbG9j YWxlKF9fb2xkKTsKCgoKCiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDQ3ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysr LzMuMi9jbGltaXRzIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xpbWl0cyIgMwoK IyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9saW1pdHMuaCIg MSAzCiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NsaW1pdHMiIDIgMwojIDQ4ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysr LzMuMi9jY3R5cGUiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUiIDMKCgoj IDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi IDMKZXh0ZXJuICJDIiB7CiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFu LmgiIDIgMwojIDQyICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgoKCgoKCmVudW0KewogIF9J U3VwcGVyID0gKCgwKSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgp KSwKICBfSVNsb3dlciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEp KSA+PiA4KSksCiAgX0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgx IDw8ICgyKSkgPj4gOCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4 KSA6ICgoMSA8PCAoMykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAo NCkpIDw8IDgpIDogKCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAo KDEgPDwgKDUpKSA8PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikg PCA4ID8gKCgxIDw8ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGgg PSAoKDcpIDwgOCA/ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9J U2JsYW5rID0gKCg4KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgp KSwKICBfSVNjbnRybCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkp KSA+PiA4KSksCiAgX0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAo KDEgPDwgKDEwKSkgPj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkp IDw8IDgpIDogKCgxIDw8ICgxMSkpID4+IDgpKQp9OwojIDgxICIvdXNyL2luY2x1ZGUvY3R5cGUu aCIgMwpleHRlcm4gX19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKipfX2N0eXBlX2JfbG9jICh2 b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0KSk7CmV4dGVybiBfX2NvbnN0IF9faW50 MzJfdCAqKl9fY3R5cGVfdG9sb3dlcl9sb2MgKHZvaWQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3QpKTsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICoqX19jdHlwZV90b3VwcGVyX2xvYyAo dm9pZCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdCkpOwojIDk2ICIvdXNyL2luY2x1ZGUv Y3R5cGUuaCIgMwoKCgoKCgpleHRlcm4gaW50IGlzYWxudW0gKGludCkgdGhyb3cgKCk7CmV4dGVy biBpbnQgaXNhbHBoYSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIHRo cm93ICgpOwpleHRlcm4gaW50IGlzZGlnaXQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNs b3dlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIHRocm93ICgpOwpl eHRlcm4gaW50IGlzcHJpbnQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50 IGlzdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQgKGludCkgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCB0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGlzYmxhbmsg KGludCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNjdHlwZSAoaW50IF9fYywgaW50IF9f bWFzaykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhy b3cgKCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IGlzYWxudW1f bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhX2wgKGludCwg X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybF9sIChpbnQsIF9fbG9jYWxl X3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv dyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgaXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50 IGlzcHJpbnRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0 X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZV9sIChpbnQs IF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXJfbCAoaW50LCBfX2xvY2Fs ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRo cm93ICgpOwoKZXh0ZXJuIGludCBpc2JsYW5rX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJv dyAoKTsKZXh0ZXJuIGludCB0b2xvd2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkg dGhyb3cgKCk7CiMgMzIzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwp9CiMgNTAgIi91c3IvaW5j bHVkZS9jKysvMy4yL2NjdHlwZSIgMiAzCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NjdHlw ZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07CiAgdXNpbmcgOjppc2FscGhh OwogIHVzaW5nIDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7CiAgdXNpbmcgOjppc2dyYXBo OwogIHVzaW5nIDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7CiAgdXNpbmcgOjppc3B1bmN0 OwogIHVzaW5nIDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7CiAgdXNpbmcgOjppc3hkaWdp dDsKICB1c2luZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVyOwp9CiMgNDkgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysv My4yL3N0cmluZyIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMwoKCgoK IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUv YysrLzMuMi9tZW1vcnkiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNl LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAxIDMKIyA0OCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGli L2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy93YWl0ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2Jp dHMvd2FpdHN0YXR1cy5oIiAzCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBz dHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAg ICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19y ZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRf dGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3df c3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVu c2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDkzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90 OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCBy ZW07CiAgfSBsZGl2X3Q7CgoKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewog ICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90 OwoKCiMgMTM3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBl X2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgYXRvZiAo X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFy ICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCl9fZXh0 ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRy KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBk b3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4 dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4 dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp IHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGlu dCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh c2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50 IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhy b3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRv dXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl KQogICAgIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQg c3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRo cm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0 b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlKQogICAgIHRocm93ICgpOwoKIyAyMjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl cm4gbG9uZyBpbnQgc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf X2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg KCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9f CmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91 YmxlIHN0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xv YykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3Vi bGUgc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3Ry dG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19n cm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5h bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVy biBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0 cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs b25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18K ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25z dCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n cm91cCkKICAgICB0aHJvdyAoKTsKIyA0MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl cm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQg YTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAzCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9j aGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5 cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBf X3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYg X19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYg X19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVm IF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYg X19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRl ZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwojIDEwNSAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBl ZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5 cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEz NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNv bmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi91 c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAx NDggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgdWludDsKIyAxOTEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBl ZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVk ZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk ZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVk ZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJ X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0 X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdp c3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjE2ICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAx IDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9z eXMvc2VsZWN0LmgiIDIgMwojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGlt ZS5oIiAzCnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNl Y29uZHNfdCB0dl91c2VjOwogIH07CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg MwojIDU1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgX19m ZF9tYXNrOwojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYgc3RydWN0 CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9t YXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7 CiMgOTkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKCmV4 dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRz LAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAg ICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRocm93ICgpOwoK CgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9f cmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZk cywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0IF9fdGlt ZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9f c2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxNyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy IDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIyMCAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYgX19ibGtzaXplX3QgYmxrc2l6ZV90 OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2Nu dF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjU4 ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250 NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Zp bGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVh ZHR5cGVzLmgiIDEgMwojIDI2NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgp9CiMg NDE1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFu ZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQg X19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBp bnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAq X19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBp bnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAg aW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGlu dDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21f ZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19y ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWdu ZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRl cm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0 IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAog ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19i dWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9f c3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jl c3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJv dyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoK CgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91Ymxl IGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRl cm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFu ZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAo dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNy YW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9y dCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7 CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJv dyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50 IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQg c2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25l ZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg ZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4 X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg ICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg KCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwK ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3Vs dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19y ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25l ZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFu ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25n IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4 X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAg ICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19z ZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1 ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50 IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X2J1ZmZlcikgdGhyb3cgKCk7CgoKCgoKCgoKCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBf X3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9p ZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2Mg KHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19t YWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYWxsb2NhLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIv dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4g dm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTc3ICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9f c2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBp bnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBz aXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7 CgoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f bm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQp KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQg X19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCmV4dGVybiBjaGFy ICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFy ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBp bnQgX19yZXBsYWNlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29u c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9p ZCkgdGhyb3cgKCk7CiMgNjYxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg Km1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1r c3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY3OCAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAo KTsKIyA2ODggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAo Y2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29u c3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjYW5vbmlj YWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNzEyICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz dHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJf Zm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBh cl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29u c3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIp OwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6 ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoK CgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBp bnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4 dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpfX2V4dGVuc2lvbl9f IGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgojIDc3NiAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq Z2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln aXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFy ICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1Zikg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f cmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0 X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAg ICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAg ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93 ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl c3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25z dCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3Rv bWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVf dCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgp OwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVf dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0 IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDg1OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAg ICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAog ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgp OwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7 CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoK CgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1l IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19m ZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBn ZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91Ymxl IF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDUzICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9jc3RkbGliIiAyIDMKIyA4NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0 ZGxpYiIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90 OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5nIDo6YXRleGl0OwogIHVz aW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9sOwogIHVzaW5nIDo6YnNl YXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1c2luZyA6OmV4aXQ7CiAg dXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6bGFiczsKICB1c2luZyA6 OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsKICB1c2luZyA6Om1ic3Rv d2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAgdXNpbmcgOjpyYW5kOwog IHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5nIDo6c3RydG9kOwogIHVz aW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN5c3RlbTsKICB1c2lu ZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUgbG9uZwogIGFicyhsb25n IF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBf X2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9CiMgMTM2ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9jc3RkbGliIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6 bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcg bG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9u ZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAt X194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBf X2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24g JSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcg X19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19k OyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAg dXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAg dXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6Omxs ZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsK ICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5n IF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2du dV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVf Y3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA2OCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yL25ldyIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL25ldyIgMwpleHRl cm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMg ZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAg IHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7 IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgq bmV3X2hhbmRsZXIpKCk7CgogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxl cikgdGhyb3coKTsKfQojIDc5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9uZXciIDMKdm9pZCogb3Bl cmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVy YXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVy YXRvciBkZWxldGUodm9pZCopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCop IHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Ro cm93X3QmKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qg c3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29u c3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQq LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9y IG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQppbmxp bmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7 IHJldHVybiBfX3A7IH0KCgppbmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQqLCB2b2lk KikgdGhyb3coKSB7IH07CmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCB2b2lk KikgdGhyb3coKSB7IH07Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgi IDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNw YWNlIHN0ZAp7CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7 CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAg X1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgp IHt9CgoKCgogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9f YSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAg cGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29u ZChfX3Auc2Vjb25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5s aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWly PF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194 LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy PgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg cGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwK ICAgICAgICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNl Y29uZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w ZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m IF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg Y2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f eCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29u c3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJl dHVybiAhKF9feSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu bGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFp cjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj bGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIg X195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDcyICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKIyA5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy90eXBlX3RyYWl0cy5oIiAzCnN0cnVjdCBfX3RydWVfdHlwZSB7fTsKc3RydWN0IF9fZmFs c2VfdHlwZSB7fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0Owoj IDExMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVk ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90 eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxi b29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90 cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf X3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9y dD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh aXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVk IGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl X3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90 eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4g ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz PGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBf X2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8 Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl Z2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0 PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj dCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRl bXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl IF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxv bmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25n PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5 cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9y Owp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0 cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsK fTsKIyA3MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoK CgoKbmFtZXNwYWNlIHN0ZAp7CiMgOTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIx IF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVf dHlwZSBfVmFsdWVUeXBlMjsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVl VHlwZTEgX190bXAgPSAqX19hOwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1w OwogICAgfQojIDExOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYg X19hLCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAg IF9fYSA9IF9fYjsKICAgICAgX19iID0gX190bXA7CiAgICB9CiMgMTQ2ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog ICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBf X2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJu IF9fYTsKICAgIH0KIyAxNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNl LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAg bWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBp ZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNv bnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg ICAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMg MjA0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAm CiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9f YTsKICAgIH0KIyAyMjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4K ICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg ICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7 CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVy CiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg X0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBf X24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsr X19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9f Y29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCog X19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihf VHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFz dCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIo X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg X190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBf X2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsg cmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25z dCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogICAgICAgICAgICAgICAgX1RwKiBf X3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25p MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlw ZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwog ICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90 eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmly c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAg ICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAg ICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1h bCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFz dC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0 ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6 X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIGNvcHkoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQp CiAgICB7CgogICAgIAogICAgIAoKCiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxf aXRlcmF0b3I8X0lucHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgICByZXR1cm4gX19j b3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyMj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICBfX2NvcHlf YmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIx IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0 LAogICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewog ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1f X2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGlu ZSBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uOwogICAgICBmb3IgKF9fbiA9 IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgICAgICotLV9fcmVzdWx0ID0g Ki0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl cjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jvb2xUeXBlPgogICAgc3RydWN0IF9fY29weV9iYWNr d2FyZF9kaXNwYXRjaAogICAgewogICAgICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMgogICAg ICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBf X2xhc3QsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkKICAgICAgewog ICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAgfQogICAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxf VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29w eShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQog ICAgICB7CiAgICAgICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0Owog ICAgICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9O dW0pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgICAgIH0KICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8 Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAg ICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jl c3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1Rw KiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdCk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEsIHR5cGVu YW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9f Zmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1 ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3Bh dGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgICAgICA6OmNvcHkoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0 eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRf bm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkK ICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0LmJhc2UoKSkpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBf QkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0 ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJl dHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9Cgog IHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIK ICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBf QkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJ MiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz X25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9f Y29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFzZSgpLCBfX2xh c3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg X0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRf aW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2Vf dHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9C STI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1 dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAg fQojIDQ3NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAg IGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkK ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25v cm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29w eV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19O b3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv YmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+ CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAg IH0KIyA1MzEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9U cD4KICAgIF9PdXRwdXRJdGVyCiAgICBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUg X19uLCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX24g PiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCiAgaW5saW5lIHZvaWQKICBmaWxsKHVuc2lnbmVkIGNo YXIqIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYg X19jKQogIHsKICAgIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJz dCwgX190bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKHNp Z25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LCBjb25zdCBzaWduZWQgY2hh ciYgX19jKQogIHsKICAgIHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmly c3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7 CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBj b25zdCBjaGFyJiBfX2MpCiAgewogICAgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2Zp cnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3Qp OwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgdW5zaWduZWQgY2hh cioKICAgIGZpbGxfbih1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVu c2lnbmVkIGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19u LCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgc2lnbmVkIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19m aXJzdCwgX1NpemUgX19uLCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxs KF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19u OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBjaGFyKgogICAg ZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQogICAgewog ICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2Zp cnN0ICsgX19uOwogICAgfQojIDYwNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w dXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2go X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIp IHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAg cmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIp OwogICAgfQojIDY0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0 ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgIF9CaW5h cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB3aGls ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmly c3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQog ICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2Zp cnN0Mik7CiAgICB9CiMgNjY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFz ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0 ZXIyPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr X19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0 MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDY5 OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0Jp bmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAK ICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytf X2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIp KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBs ZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoK ICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIK ICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2Zp cnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICgqX19m aXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAg cmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0K IyA3NjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgog ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mgog ICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoX19jb21w KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlm IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f bGFzdDI7CiAgICB9CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29u c3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIs IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCiAgewogICAgY29uc3Qgc2l6ZV90IF9fbGVu MSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3Qy IC0gX19maXJzdDI7CiAgICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9f Zmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8g X19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhp Y29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19s YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29u c3QgY2hhciogX19sYXN0MikKICB7CgogICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJl KChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7 CgoKCgoKCiAgfQoKfQojIDU1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg4ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvY2Fzc2VydCIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Nhc3NlcnQiIDMKCiMg MSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2Fzc2VydC5o IiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hh ciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lk IF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlv bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRl cm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9f ZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy bl9fKSk7CgoKfQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAyIDMKIyA4OSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhj ZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVu Y3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4 Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZv aWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlk KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291 dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDkw ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVj dCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgogICAgdm9s YXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZf Y291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50 KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gezAsIDAsIDAsIFBU SFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAgX01fcmVmX2NvdW50X2xvY2sg PSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBf X2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9j b3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwog ICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4 X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAt LV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50 X2xvY2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHRlbXBsYXRlPGludCBfX2R1bW15Pgog ICAgc3RydWN0IF9Td2FwX2xvY2tfc3RydWN0CiAgICB7IHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhf dCBfU19zd2FwX2xvY2s7IH07CgogIHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgX19ndGhyZWFk X211dGV4X3QKICAgIF9Td2FwX2xvY2tfc3RydWN0PF9fZHVtbXk+OjpfU19zd2FwX2xvY2sgPSB7 MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19OwoKCgogIGlubGluZSB1 bnNpZ25lZCBsb25nCiAgX0F0b21pY19zd2FwKHVuc2lnbmVkIGxvbmcgKiBfX3AsIHVuc2lnbmVk IGxvbmcgX19xKQogIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVj dDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHVuc2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwog ICAgKl9fcCA9IF9fcTsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9Td2FwX2xvY2tfc3Ry dWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KIyAxNTEgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX211 dGV4X2xvY2sKICB7CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9p ZAogICAgX01faW5pdGlhbGl6ZSgpCiAgICB7CiMgMTg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF90aHJlYWRzLmgiIDMKICAgIH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2so KQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9Cgog ICAgdm9pZAogICAgX01fcmVsZWFzZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211 dGV4X3VubG9jaygmX01fbG9jayk7CiAgICB9CiAgfTsKIyAyMjAgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX2F1dG9fbG9jawogIHsKICAg IF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgICBfU1RMX2F1dG9fbG9jayhfU1RMX211dGV4 X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01fbG9jay5fTV9hY3F1aXJl X2xvY2soKTsgfQoKICAgIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9jay5fTV9yZWxlYXNlX2xv Y2soKTsgfQoKICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xv Y2smKTsKICAgIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgfTsKCn0K IyA5MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgojIDEgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9hdG9taWNpdHkuaCIgMSAzCiMgOTUg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9hdG9taWNpdHkuaCIgMwp0eXBl ZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0aWMgaW5saW5lIF9BdG9taWNfd29yZApfX2F0dHJp YnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUgX0F0b21p Y193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193b3JkIF9fcmVz dWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIiCiAgICAgICAg ICAgICAgICAgICAgICAgIDogIj1yIiAoX19yZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAg IDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAgICA6ICJt ZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApfX2F0dHJp YnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3Jk KiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRs ICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpf X21lbSkgOiAibWVtb3J5Iik7Cn0KIyA5MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxsb2MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyAxMDQgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsbG9jLmgiIDMKICBjbGFzcyBfX25ld19hbGxvYwogIHsKICBwdWJsaWM6CiAg ICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiA6Om9w ZXJhdG9yIG5ldyhfX24pOyB9CgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCog X19wLCBzaXplX3QpCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KICB9OwojIDEyNyAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGludCBf X2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0 ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKCgogICAgICBzdGF0 aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CgogICAgICBzdGF0aWMgdm9p ZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCiAgICBwdWJsaWM6CiAgICAgIHN0 YXRpYyB2b2lkKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgdm9p ZCogX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChf X3Jlc3VsdCA9PSAwLCAwKSkKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24p OwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAg ICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgoK ICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBz aXplX3QgX19uZXdfc3opCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2Mo X19wLCBfX25ld19zeik7CiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQgPT0g MCwgMCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3op OwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQgKCog X19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICAgICAgewogICAgICAgIHZv aWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBfX21h bGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg IH0KICAgIH07CgoKICB0ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7 CgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2NfdGVt cGxhdGU8X19pbnN0Pjo6CiAgICBfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAg IHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7Cgog ICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBf X21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0 KF9fbXlfbWFsbG9jX2hhbmRsZXIgPT0gMCwgMCkpCiAgICAgICAgICAgIF9fdGhyb3dfYmFkX2Fs bG9jKCk7CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgICBfX3Jl c3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgICAgaWYgKF9fcmVzdWx0KQogICAgICAgICAgICBy ZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8aW50IF9faW5zdD4K ICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjoKICAgIF9TX29v bV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215 X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzsp CiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9j X29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19teV9tYWxsb2Nf aGFuZGxlciA9PSAwLCAwKSkKICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAg ICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gcmVhbGxv YyhfX3AsIF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgICAgICB9CiAgICB9CgoKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2lu dGVyZmFjZTsKIyAyMjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9fc2lt cGxlX2FsbG9jCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGFsbG9j YXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0ID0gMDsKICAgICAgICBp ZiAoX19uKQogICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9j YXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9Cgog ICAgICBzdGF0aWMgX1RwKgogICAgICBhbGxvY2F0ZSgpCiAgICAgIHsgcmV0dXJuIChfVHAqKSBf QWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAg IGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsgaWYgKDAgIT0gX19uKSBf QWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAgICBzdGF0 aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7IF9BbGxvYzo6ZGVhbGxv Y2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KICAgIH07CiMgMjcwICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAg Y2xhc3MgX19kZWJ1Z19hbGxvYwogICAgewogICAgcHJpdmF0ZToKCgogICAgICBlbnVtIHtfU19l eHRyYSA9IDh9OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRl KHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxs b2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgICAqKHNpemVfdCopX19y ZXN1bHQgPSBfX247CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAg ICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl X3QgX19uKQogICAgICB7CiAgICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGlu dCkgX1NfZXh0cmE7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVh bF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0g X19uIiwgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiLCAyOTEsIF9fUFJF VFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxf cCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICB9CgoKICAgICAgc3RhdGljIHZvaWQqCiAg ICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19z eikKICAgICAgewogICAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9T X2V4dHJhOwogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9 PSBfX29sZF9zeikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0g X19vbGRfc3oiLCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDMwMCwg X19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hh ciopIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19z eiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19z ejsKICAgICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgICAgfQogICAg fTsKIyAzNDAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1w bGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNsYXNzIF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0ZToKICAgICAgZW51bSB7X0FMSUdOID0gOH07CiAg ICAgIGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9N QVhfQllURVMgLyBfQUxJR059OwoKICAgICAgdW5pb24gX09iagogICAgICB7CiAgICAgICAgdW5p b24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsx XTsKICAgICAgfTsKCiAgICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbX05G UkVFTElTVFNdOwoKCiAgICAgIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogICAgICBzdGF0 aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgICAgIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwoK ICAgICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKICAg ICAgc3RhdGljIHNpemVfdAogICAgICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgICAg eyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXplX3QpIF9B TElHTiAtIDEpKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBfU19mcmVlbGlzdF9pbmRl eChzaXplX3QgX19ieXRlcykKICAgICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9B TElHTiAtIDEpLyhzaXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAgICAgc3RhdGljIHZvaWQqCiAg ICAgIF9TX3JlZmlsbChzaXplX3QgX19uKTsKCgoKICAgICAgc3RhdGljIGNoYXIqCiAgICAgIF9T X2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKCiAgICAgIHN0cnVj dCBfTG9jawogICAgICB7CiAgICAgICAgX0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVf YWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICAgICAgICB+X0xvY2soKSB7IGlm IChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0K ICAgICAgfSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwogICAgICBmcmllbmQgc3RydWN0 IF9Mb2NrOwoKICAgICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19mb3JjZV9uZXc7CgogICAgcHVi bGljOgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAg IHsKICAgICAgICB2b2lkKiBfX3JldCA9IDA7CgoKCgogICAgICAgIGlmIChfU19mb3JjZV9uZXcg PT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKGdldGVudigiR0xJQkNQUF9GT1JDRV9O RVciKSkKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNlX25ldywgMSk7CiAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNlX25ldywgLTEp OwoKICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoX1NfZm9yY2VfbmV3ICE9IDApID8g MCA6IChfX2Fzc2VydF9mYWlsICgiX1NfZm9yY2VfbmV3ICE9IDAiLCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDQwOSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7 CiAgICAgICAgICB9CgogICAgICAgIGlmICgoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgfHwg KF9TX2ZvcmNlX25ldyA+IDApKQogICAgICAgICAgX19yZXQgPSBfX25ld19hbGxvYzo6YWxsb2Nh dGUoX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0 aWxlKiBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICAgICsgX1NfZnJl ZWxpc3RfaW5kZXgoX19uKTsKCgoKICAgICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwog ICAgICAgICAgICBfT2JqKiBfX3Jlc3RyaWN0X18gX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7 CiAgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmVzdWx0ID09IDAsIDApKQogICAg ICAgICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0g X19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICBfX3JldCA9IF9f cmVzdWx0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3Qo X19yZXQgPT0gMCwgMCkpCiAgICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAg ICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgogICAgICBzdGF0aWMgdm9pZAog ICAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGlm ICgoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgfHwgKF9TX2ZvcmNlX25ldyA+IDApKQogICAg ICAgICAgX19uZXdfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICAgIGVsc2UKICAg ICAgICAgIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0gX1Nf ZnJlZV9saXN0CiAgICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICAg ICAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwoKCgoKICAgICAgICAgICAgX0xvY2sgX19sb2Nr X2luc3RhbmNlOwogICAgICAgICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9m cmVlX2xpc3Q7CiAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAgICAgIH0K ICAgICAgfQoKCiAgICAgIHN0YXRpYyB2b2lkKgogICAgICByZWFsbG9jYXRlKHZvaWQqIF9fcCwg c2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwogICAgfTsKCiAgdGVtcGxhdGU8Ym9v bCBfX3RocmVhZHMsIGludCBfX2luc3Q+IF9BdG9taWNfd29yZAogIF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2ZvcmNlX25ldyA9IDA7CgogIHRlbXBsYXRl PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y PT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+JiwKICAg ICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2lu c3Q+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGlu dCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mKQogICAgeyByZXR1cm4g ZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAg Y2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ogog ICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKQogICAgewogICAg ICBjaGFyKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBf X25vYmpzOwogICAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFy dF9mcmVlOwoKICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKQogICAgICAg IHsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0 X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybiBfX3Jlc3VsdCA7CiAgICAg ICAgfQogICAgICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQogICAgICAgIHsKICAg ICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICAgIF9f dG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19yZXN1bHQgPSBfU19z dGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAg ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAg ICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAgIDIgKiBfX3RvdGFsX2J5 dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICAgIGlmIChfX2J5 dGVzX2xlZnQgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUq IF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVs aXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRf ZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAg ICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICAgIH0K ICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopIF9fbmV3X2FsbG9jOjphbGxvY2F0ZShf X2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoX1Nfc3RhcnRfZnJlZSA9PSAwKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBfT2JqKiB2b2xh dGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAgICAg ICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9IChzaXplX3Qp IF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxp c3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0Owog ICAgICAgICAgICAgICAgICBpZiAoX19wICE9IDApCiAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9s aW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAg ICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7CiAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpz KTsKCgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilf X25ld19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAgICAgICAgICAgIH0KICAg ICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIF9TX2VuZF9m cmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgcmV0dXJuIF9T X2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7CiAgICAgICAgfQogICAgfQoKCgoKCiAgdGVt cGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24p CiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19j aHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVl X2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwog ICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19u b2JqcykKICAgICAgICByZXR1cm4gX19jaHVuazsKICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19m cmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9P YmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiop KF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspCiAgICAgICAgewog ICAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgICBfX25leHRfb2Jq ID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgICBpZiAoX19ub2Jq cyAtIDEgPT0gX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jdXJyZW50X29iaiAt PiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg IH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xp c3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg ICB9CgoKCiAgdGVtcGxhdGU8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4KICAgIHZvaWQqCiAgICBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OgogICAgcmVhbGxvY2F0ZSh2 b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAgICB2 b2lkKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fY29weV9zejsKCiAgICAgIGlmIChfX29sZF9z eiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVT KQogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAgICAgaWYgKF9TX3Jv dW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpCiAgICAgICAgcmV0dXJu KF9fcCk7CiAgICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAgICBfX2NvcHlf c3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgICBtZW1j cHkoX19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xk X3N6KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhy ZWFkcywgaW50IF9faW5zdD4KICAgIF9TVExfbXV0ZXhfbG9jawogICAgX19kZWZhdWx0X2FsbG9j X3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgICA9 IHsgezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fSB9OwoKICB0ZW1w bGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqIF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBs YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhciogX19kZWZhdWx0X2FsbG9j X3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7CgogIHRlbXBsYXRl PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgc2l6ZV90IF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCiAgdGVtcGxhdGU8 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB0eXBlbmFtZSBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAgICBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNU U107CgogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsMD4gX19hbGxvYzsK ICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwwPiBfX3NpbmdsZV9jbGll bnRfYWxsb2M7CiMgNjQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY2xhc3MgYWxsb2NhdG9yCiAgICB7CiAgICAg IHR5cGVkZWYgX19hbGxvYyBfQWxsb2M7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgc2l6ZV90 IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAg ICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3Bv aW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3Qg X1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7 IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OwoKICAgICAgYWxsb2NhdG9yKCkgdGhy b3coKSB7fQogICAgICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0 b3I8X1RwMT4mKSB0aHJvdygpIHt9CiAgICAgIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogICAg ICBwb2ludGVyCiAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9f eDsgfQoKICAgICAgY29uc3RfcG9pbnRlcgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBf X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxvY2F0ZShz aXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0 ID0gMDsKICAgICAgICBpZiAoX19uKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX19uIDw9 IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAq PihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICBfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgfQogICAgICAgIHJl dHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZShwb2ludGVy IF9fcCwgc2l6ZV90eXBlIF9fbikKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24g KiBzaXplb2YoX1RwKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0 IHRocm93KCkgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lk IGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAo X192YWwpOyB9CiAgICAgIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsg fQogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgYWxsb2NhdG9yPHZvaWQ+CiAgICB7CiAg ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBw dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAg ICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2b2lk IHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVj dCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OwogICAg fTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8 X1QyPiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlw ZW5hbWUgX1QyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9y PF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQojIDc0 MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9fYWxsb2NhdG9yCiAgICB7 CiAgICAgIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogICAgICB0eXBlZGVmIHNpemVfdCBz aXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAg dHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2lu dGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IF9U cCYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0 eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CgogICAgICBfX2FsbG9j YXRvcigpIHRocm93KCkge30KICAgICAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9f YSkgdGhyb3coKQogICAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2Fs bG9jKSB7fQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBfX2FsbG9jYXRv cihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgICAgICA6 IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQoKICAgICAgfl9f YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICAgICAgcG9pbnRlcgogICAgICBhZGRyZXNzKHJlZmVy ZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgICAgIGNvbnN0X3BvaW50ZXIKICAg ICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoK CiAgICAgIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAw KQogICAgICB7CiAgICAgICAgX1RwKiBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9fbikKICAgICAg ICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXpl b2YoX1RwKSkpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHZvaWQKICAg ICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgICAgeyBfX3VuZGVy bHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICAgICAg c2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBzaXplX3Qo LTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgICAgIHZvaWQKICAgICAgY29uc3RydWN0KHBvaW50ZXIg X19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KCiAgICAgIHZv aWQKICAgICAgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQogICAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9fYWxsb2NhdG9yPHZvaWQsIF9B bGxvYz4KICAgIHsKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVm IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsK ICAgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZv aWQgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3Ry dWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90 aGVyOyB9OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsX0Fs bG9jPiYgX19hMSwKICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLF9BbGxvYz4m IF9fYTIpCiAgICB7IHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5k ZXJseWluZ19hbGxvYzsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwg X0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxs b2M+JiBfX2EyKQogICAgeyByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5f X3VuZGVybHlpbmdfYWxsb2M7IH0KCgoKCgoKCiAgdGVtcGxhdGU8aW50IGluc3Q+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0 PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikK ICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4m LAogICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikK ICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu bGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsIGNv bnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0 IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpCiAg ICB7IHJldHVybiBmYWxzZTsgfQojIDg5NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4K ICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzCiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9T X2luc3RhbmNlbGVzcyA9IGZhbHNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6 OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIGNvbnN0IGJvb2wg X0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDE+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0 czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9T X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBf X2FsbG9jPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0 b3JfdHlwZTsKICAgIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgaW50IF9faW5zdD4K ICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p bnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy dWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1w bGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9 OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog ICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190 aHJlYWRzLCBfX2luc3Q+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu Y2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVs dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICBfQWxsb2NfdHlwZTsK ICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf X3RocmVhZHMsIF9faW5zdD4gPgogICAgICBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFp dHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9j PF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYg X19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsK ICAgIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIGludCBf X2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAg ICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwog ICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8 X19pbnN0PiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19t YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19p bnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2Rl ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1w bGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAg ICAgIF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICBhbGxvY2F0b3JfdHlwZTsKICAg IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0Fs bG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2Rl YnVnX2FsbG9jPF9BbGxvYz4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2lu c3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2Rl YnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRv cjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoK CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsMD47Cn0KIyA1NiAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvbWVtb3J5IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1 Y3QuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5o IiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U Mj4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9f dmFsdWUpCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMShfX3ZhbHVlKTsg fQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25z dHJ1Y3QoX1QxKiBfX3ApCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMSgp OyB9CiMgOTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAg dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19k ZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s YXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQojIDExMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv cj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9G b3J3YXJkSXRlcmF0b3IsIF9fdHJ1ZV90eXBlKQogICAgeyB9CgoKCgoKCiAgdGVtcGxhdGUgPGNs YXNzIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikKICAg IHsgX19wb2ludGVyLT5+X1RwKCk7IH0KIyAxMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg ICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgICAgICAgICAg ICAgICBfVmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9W YWx1ZV90eXBlPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgICAg IF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwoKICAgICAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBf X2xhc3QsIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yKCkpOwogICAgfQp9CiMgNTcgIi91c3IvaW5j bHVkZS9jKysvMy4yL21lbW9yeSIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0Zvcndh cmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAg ICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJk SXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAg IHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgICAgIHRyeSB7CiAgICAg ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICAg ICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICAgICAgcmV0dXJuIF9fY3VyOwog ICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jl c3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDEwNiAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9G b3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFs dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46 OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9h dXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKICAgIH0KCiAgaW5saW5l IGNoYXIqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3QsIGNvbnN0IGNo YXIqIF9fbGFzdCwgY2hhciogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19m aXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0g X19maXJzdCk7CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1bmluaXRpYWxpemVkX2NvcHkoY29u c3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2Zp cnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgcmV0dXJuIF9f cmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlh bGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBl KQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5pbml0aWFsaXpl ZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQog ICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogICAg ICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVj dCgmKl9fY3VyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg ICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9 CiAgICB9CiMgMTY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVk LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAg IGlubGluZSB2b2lkCiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6 aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9fZmly c3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBf Rm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf VHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHJldHVybiBmaWxsX24oX19maXJzdCwg X19uLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu YW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFs aXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQogICAg ewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogICAgICAg IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYq X19jdXIsIF9feCk7CiAgICAgICAgcmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4u LikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAg ICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMjEwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs IHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAg ICB1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj b25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAg ICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwg X0lzX1BPRCgpKTsKICAgIH0KIyAyMjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Vu aW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJk SXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVy IF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7 CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0Miwg X19sYXN0MiwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg ICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAg fQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5p bml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIg X19taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0KQogICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBf X3gpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz dCwgX19sYXN0LCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAg ICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAg ICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G b3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFs aXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3 YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm IF9feCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29w eShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5p dGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2go Li4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAg ICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKfQojIDU5ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9tZW1vcnkiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Jhd19zdG9y YWdlX2l0ZXIuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Jhd19z dG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvcgog ICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9p ZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfTV9p dGVyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0 b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9CgogICAgICByYXdfc3Rv cmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAg IHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1l bnQpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAg ICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9G b3J3YXJkSXRlcmF0b3IsIF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAg KytfTV9pdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3Jh Z2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVyYXRvcisrKGludCkK ICAgICAgewogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9U cD4gX190bXAgPSAqdGhpczsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuIF9fdG1w OwogICAgICB9CiAgICB9Owp9CiMgNjAgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMiAz CgoKCgpuYW1lc3BhY2Ugc3RkCnsKIyA3NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAz CnRlbXBsYXRlIDx0eXBlbmFtZSBfVHA+CnBhaXI8X1RwKiwgcHRyZGlmZl90PgpfX2dldF90ZW1w b3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRp ZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3IC8g c2l6ZW9mKF9UcCk7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9UcCogX190bXAgPSAoX1Rw Kikgc3RkOjptYWxsb2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYg KF9fdG1wICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9f bGVuKTsKICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+ KChfVHAqKTAsIDApOwp9CiMgMTA2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBwYWlyPF9UcCoscHRyZGlmZl90PgogIGdldF90 ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikKICB7CiAgICByZXR1cm4gX19nZXRfdGVt cG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwogIH0KIyAxMjAgIi91c3IvaW5jbHVkZS9j KysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgdm9pZAogIHJldHVybl90 ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKQogIHsKICAgIHN0ZDo6ZnJlZShfX3ApOwogIH0KIyAx MzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx PgogIHN0cnVjdCBhdXRvX3B0cl9yZWYKewogICBfVHAxKiBfTV9wdHI7CgogICBleHBsaWNpdAog ICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKQogICA6IF9NX3B0cihfX3ApIHt9Cn07CiMgMTc1ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGNs YXNzIGF1dG9fcHRyCnsKcHJpdmF0ZToKICBfVHAqIF9NX3B0cjsKCnB1YmxpYzoKCiAgdHlwZWRl ZiBfVHAgZWxlbWVudF90eXBlOwoKCgoKCgoKICBleHBsaWNpdAogIGF1dG9fcHRyKGVsZW1lbnRf dHlwZSogX19wID0gMCkgdGhyb3coKQogIDogX01fcHRyKF9fcCkgeyB9CiMgMjAyICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBhdXRvX3B0cihhdXRvX3B0ciYgX19hKSB0aHJvdygp CiAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMgMjE0ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgYXV0b19wdHIoYXV0b19w dHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMg MjI2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBhdXRvX3B0ciYKICBvcGVyYXRv cj0oYXV0b19wdHImIF9fYSkgdGhyb3coKQogICAgewogICAgICByZXNldChfX2EucmVsZWFzZSgp KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQojIDI0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv bWVtb3J5IiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcDE+CiAgICBhdXRvX3B0ciYKICAgIG9w ZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICB7CiAgICAgIHJlc2V0KF9f YS5yZWxlYXNlKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgMjYzICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9tZW1vcnkiIDMKICB+YXV0b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KIyAy NzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSYKICBvcGVy YXRvciooKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICpfTV9wdHI7IH0KCgoKCgoKCiAgZWxlbWVu dF90eXBlKgogIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQoj IDI5NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgZWxlbWVudF90eXBlKgogIGdl dCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMzA5ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUqCiAgcmVsZWFzZSgpIHRocm93KCkKICAg IHsKICAgICAgZWxlbWVudF90eXBlKiBfX3RtcCA9IF9NX3B0cjsKICAgICAgX01fcHRyID0gMDsK ICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQojIDMyNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVt b3J5IiAzCiAgdm9pZAogIHJlc2V0KGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQogICAg ewogICAgICBpZiAoX19wICE9IF9NX3B0cikKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgX01f cHRyOwogICAgICAgICAgX01fcHRyID0gX19wOwogICAgICAgIH0KICAgIH0KIyAzNDUgIi91c3Iv aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxlbGVtZW50 X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX3JlZi5fTV9wdHIpIHt9CgogIGF1 dG9fcHRyJgogIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhy b3coKQogICAgewogICAgICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKQogICAgICAg IHsKICAgICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICBfTV9wdHIgPSBfX3JlZi5fTV9w dHI7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcDE+CiAgICBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcDE+CiAgICBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQoKfTsKCn0K IyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyAxMDEgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9B cmcsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJn IGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKCgoKdGVt cGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJp bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5 cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3Vs dF90eXBlOwp9OwojIDEyNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24u aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw LF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAt X194OyB9Cn07CiMgMTczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5o IiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlf ZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194 LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U cCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f eSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K c3RydWN0IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0 dXJuIF9feCA8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVy X2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggPj0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3Io KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBf X3k7IH0KfTsKIyAyMjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgi IDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07CgoKdGVt cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw LGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJu ICFfX3g7IH0KfTsKIyAyNzEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9u LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDog cHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUs IGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxp Y2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9 CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5 cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5v dDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJl ZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJp bmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0 ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h bWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog IGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQo X194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJz dF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9Q cmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJu ICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+ CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYg X19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoj IDM0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0 ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVu Y3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJv dGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn dW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBf X3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50 X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09w ZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp b246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1 ZSwgX194KTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJh dG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29u c3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNz IF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5k MXN0KGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0 dXJuIGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOwp9CgoKdGVt cGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsK cHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlv biYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJn dW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFt ZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09w ZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3Ao X194LCB2YWx1ZSk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBv cGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkg Y29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNs YXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpi aW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwog IHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKfQoj IDQzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0 ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9mdW5j dGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3RlZDoK ICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlfZnVu Y3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAo Kl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBf X3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9B cmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9Bcmcs IF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRl cl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNs YXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19i aW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jl c3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVzdWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpw dWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBw b2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKQog ICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBf QXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07 CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5s aW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+CnB0cl9m dW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2Jp bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw PiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KICBj b25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1 bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICB0eXBl bmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAg ICByZXR1cm4gX194LmZpcnN0OwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlw ZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZp cnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4K ewogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBj b25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6 OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiBfX3guc2Vjb25kOwogIH0KfTsKIyA1MjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3Mg bWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQog IF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7 IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5j dGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5f dChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh dG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnBy aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0 aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9U cDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikg Y29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9N X2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3Rf bWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6 CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0 KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0 IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgp IGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0 PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9Bcmcp KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBj b25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6 Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNz IF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNv bnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90 KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9w ZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9f cC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25z dDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz cyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4g ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0Fy ZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gp IGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6 OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz cyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVm X3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQg b3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3Iu Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1 YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m dW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y KCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChf VHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9m dW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4g ewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkg Y29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkg Y29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkg Y29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lk LCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBs aWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQog IHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZh dGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFz cyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAo X1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChf VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAo X1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAq IF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2 b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0 IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf X3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0 IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJn KSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1f ZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9U cDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBf X3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lk IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJn PgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0 X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19w Zikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7 IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBj b25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVt X2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBt ZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf VHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoq X19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsg fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8 X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1f ZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg X1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1Jl dCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1Jl dCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoq X19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0K CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25z dF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJn KSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7 IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBt ZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2Yp KF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0K CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25z dF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6Oipf X2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1Rw LF9Bcmc+KF9fZik7IH0KCgoKfQojIDUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIg MwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDQ0 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCgoKCm5hbWVzcGFj ZSBzdGQKewojIDg4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBjbGFzcyBiYXNpY19zdHJpbmcKICAgIHsKCiAgICBwdWJsaWM6CiAgICAgIHR5 cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRz OjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2Vf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVm ZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2ludGVyOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVy OwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgYmFz aWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0 ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CiAg ICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJz ZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZl cnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiMgMTIzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0cnVjdCBfUmVwCiAgICAgIHsKCiAgICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6b3RoZXIgX1Jh d19ieXRlc19hbGxvYzsKIyAxNDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3Ry aW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9zaXplOwogICAg ICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7CgogICAgICAgIHNpemVfdHlwZSBf TV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5OwogICAgICAgIF9BdG9taWNf d29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAgICAgICAgX01faXNfbGVha2VkKCkg Y29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoKICAgICAgICBib29s CiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVu Y2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X2xlYWtlZCgpCiAgICAgICAg eyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9zaGFy YWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoKICAgICAgICBfQ2hhclQqCiAg ICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiByZWludGVycHJldF9j YXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAgICAgICAgb3BlcmF0 b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgpIFtf X3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0IF9BbGxvYyYgX19h bGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgewogICAgICAgICAgcmV0dXJu ICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIpCiAgICAgICAgICAgICAg ICAgID8gX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOwogICAgICAgIH0KCgogICAg ICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYp OwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkKICAg ICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAt MSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0KCiAgICAgICAg dm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKCiAgICAgICAg X0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewogICAgICAgICAg X19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVybiBfTV9yZWZk YXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xvbmUoY29uc3Qg X0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoKICAgICAgc3RydWN0IF9B bGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCog X19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3AoX19k YXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07CgogICAgcHVibGljOgoKCgog ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+ KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2NfaGlkZXIgX01fZGF0YXBs dXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVv ZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yo c2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoKSBjb25zdAogICAgICB7 IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEo X0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsgfQoK ICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyByZXR1cm4gJigocmVpbnRl cnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoKICAgICAgaXRlcmF0b3IK ICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoK ICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9N X2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbGVhaygpCiAg ICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICAgIF9N X2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9jaGVjayhzaXpl X3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXpl KCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9jaGVj ayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgoKICAgICAg aXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikg Y29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19vZmYgPCB0aGlzLT5zaXpl KCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29m ZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAoX01faWJlZ2luKCkgKyBf X3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0 b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19w LCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAgewogICAgICAgICAgZm9y ICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAgICAgdHJhaXRzX3R5cGU6 OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAg X1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikK ICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoK ICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3Rf aXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJz KF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAg ICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIp CiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAg ICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0IF9D aGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5 KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX211dGF0ZShz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOwoKICAg ICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBfUmVwJgogICAgICBf U19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4oJl9T X2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAgIGlubGluZQogICAg ICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZyhjb25z dCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6 ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOwog ICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f cG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2Ep OwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLAog ICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJh c2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2Mo KSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBf QWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRl cmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0Fs bG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bv c2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBv cGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXNzaWdu KF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgX0No YXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oMSwg X19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAgewogICAgICAgIF9N X2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsKICAgICAgfQoKICAg ICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25z dF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKQogICAg ICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEo KSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVu ZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMt PnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAgICAg eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIGNvbnN0X3Jl dmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IK ICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4o KSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAg ICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9N X3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBsZW5ndGgoKSBjb25z dCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg bWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQoKICAgICAgdm9p ZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB2b2lkCiAg ICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsg fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01fcmVw KCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9f cmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRo aXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVy biB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBvcGVy YXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKVtf X3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3Bv cykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19f cG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBf X24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAg ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgcmV0 dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgYXQoc2l6 ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQogICAgICAgICAg X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICBfTV9sZWFr KCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0 dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3Bl cmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0K CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVy biB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChj b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAg ICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5k KF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBwZW5k KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7 IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xh c3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7IHRo aXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90 eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBfX3N0cnNp emUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphc3NpZ24i KTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczsK ICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ry c2l6ZSAtIF9fcG9zOwogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIuX01fZGF0YSgp ICsgX19wb3MsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg YXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAg aWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJv cigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3No YXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAg ICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSwgX19z KSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCksIF9NX2llbmQo KSwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCiAgICAgICAgICAg IGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgaWYg KF9fcG9zID49IF9fbikKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9kYXRhKCks IF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19wb3MpCiAgICAgICAgICAgICAgdHJh aXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAgICAgIF9NX3JlcCgp LT5fTV9sZW5ndGggPSBfX247CiAgICAgICAgICAgIF9NX2RhdGEoKVtfX25dID0gX1JlcDo6X1Nf dGVybWluYWw7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAgfQoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAg IHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBf X2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwg X19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg ICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2li ZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAg aW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0 aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0 SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVw bGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAg ICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIsIDAsIF9fc3RyLnNpemUoKSk7 IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBz aXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9 IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgICAg X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgY29u c3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICAgIGNvbnN0 IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3My OwogICAgICAgIHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ci5fTV9kYXRhKCkgKyBf X3BvczIsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5z ZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAg ICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg ICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi YXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfX3NpemUgPiB0aGlzLT5tYXhfc2l6 ZSgpIC0gX19uKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6 aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNv bnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3Qg X0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAgICByZXR1cm4gX01f cmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uKTsKICAgICAgICBl bHNlCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29mZiA9IF9f cyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgX01fbXV0YXRlKF9fcG9zLCAwLCBfX24pOwogICAg ICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKICAgICAgICAgICAgX0NoYXJUKiBfX3Ag PSBfTV9kYXRhKCkgKyBfX3BvczsKICAgICAgICAgICAgaWYgKF9fcyArIF9fbiA8PSBfX3ApCiAg ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fbik7CiAgICAgICAgICAg IGVsc2UgaWYgKF9fcyA+PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19w LCBfX3MgKyBfX24sIF9fbik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19wIC0gX19zKTsKICAgICAg ICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBfX3MpLCBfX3AgKyBfX24s IF9fbiAtIChfX3AgLSBfX3MpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAq dGhpczsKICAgICAgICAgIH0KICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5z ZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRo aXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19w b3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpdGVy YXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkpCiAg ICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKICAgICAg ICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9fYyk7CiAgICAg ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gdGhpcy0+X01faWJl Z2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBlcmFzZShz aXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykKICAgICAgewogICAgICAg IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19u KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAg ICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAg ICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigpOwog ICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIDEsIF9NX2RhdGEo KSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAg IHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAg ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgICB7CiAgICAgICAg c2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBs YWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3Jl cCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAg ICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3Ms IHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJu IHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkp OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwg c2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAg c2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFy VCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAgICAgICAgY29u c3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBf X3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBs YWNlIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMSA9IF9fbjEgPCBfX3NpemUgLSBfX3Bv czsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjEgPSBfX3Rlc3RuMSA/IF9fbjEgOiBf X3NpemUgLSBfX3BvczsKICAgICAgICBpZiAoX19zaXplIC0gX19mb2xkbjEgPiB0aGlzLT5tYXhf c2l6ZSgpIC0gX19uMikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp bmc6OnJlcGxhY2UiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxl c3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVzczxj b25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJldHVy biBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4xLCBfX3MsIF9fcyAr IF9fbjIpOwoKICAgICAgICBlbHNlIHJldHVybgogICAgICAgICAgICAgICBfTV9yZXBsYWNlKF9N X2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2ZvbGRuMSwKICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9DaGFyVCo+OjppdGVyYXRvcl9j YXRlZ29yeSgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7 IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0c190eXBlOjpsZW5n dGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUg X19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgICAg eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9f bjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRl cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAg ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5fTV9kYXRhKCksIF9f c3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRv ciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf X2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25z dCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBf X3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBf Q2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9f aTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBf X2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19rMiwK ICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0 ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj ZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19r MikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19p MiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2syIC0gX19r MSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBp dGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAg ICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9f aTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2syIC0gX19rMSk7IH0K CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv ciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIHRo aXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7CiAgICAgICAgfQoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y IF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgICAg eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsK ICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19p MSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0 ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBf TV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVy YXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2syKTsKCgoK ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg ICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3Qg X0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAg ICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRlcj46 Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9f YmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz IF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4 KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAg ICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgcmV0dXJu IF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQpLCBfX2EpOwog ICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9D aGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwg Y29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf SXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIHJldHVy biBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7CiAgICAg ICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFy VCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNv bnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn KTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFy VCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9Gd2RJdGVyIF9fZW5kLCBj b25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90 YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBf X3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgIHB1YmxpYzoKCiAgICAg IHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5 cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dhcChiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNvbnN0IF9DaGFyVCoKICAg ICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5z aXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19uXSwgX1JlcDo6 X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAgICAgIH0KCiAgICAgIGNv bnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQoKICAg ICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N X2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9f cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlw ZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9 IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0YSgpLCBfX3Bvcywg X19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZp bmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7Cgog ICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6 ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19z dHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg IHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p IGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBz aXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChf X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUK ICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7Cgog ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k X2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNp emVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf Zmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6 Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoX0No YXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19z dHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAg IHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihf X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUK ICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXpl X3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJz dF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6 ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwoK ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2Zp cnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg ICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBl IF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9v Zihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19w b3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90 X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xh c3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0 c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rf bm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAg YmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUg X19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUo KSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0ciIp OwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9zLCBfX24pOwogICAgICB9 CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25z dAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAg ICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19s ZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9fciA9IHRyYWl0c190eXBl Ojpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgICAgaWYgKCFf X3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICAgIHJldHVybiBfX3I7 CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CgogICAgICBpbnQKICAg ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUg X19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykg Y29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21w YXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAog ICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9OwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp bmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCksIF9BbGxv YygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAg ICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1Ry YWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAg ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRv cisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j PiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAg ewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhz KTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAg ICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190 eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX3Jo cyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCogX19s aHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hh clQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jo cy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5j b21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y IT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w YXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwo Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAg ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJl dHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0No YXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywKICAg ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w YXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0o Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJl KF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29u c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xo cykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7 IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1 cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAog ICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7 IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f aXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKICAgICAgICAg ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIp OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGlu ZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQojIDU0ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYWxn b3JpdGhtIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAzCgoKCgoj IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMSAzCiMgNjQgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2hlYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAg dm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBf VHAgX192YWx1ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4 IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19m aXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJ bmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3Bh cmVudDsKICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQog ICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgcHVz aF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0 b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAg ICAgCgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBf X2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVU eXBlKCooX19sYXN0IC0gMSkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcCwKICAgICAgICAg ICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAg ICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAg ICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsg X19wYXJlbnQpLCBfX3ZhbHVlKSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9 ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50Owog ICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAgICAgICoo X19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUg dm9pZAogICAgcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgX19wdXNoX2hl YXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3Rh bmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwg X19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y LCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fYWRqdXN0 X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRl eCwKICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkKICAgIHsK ICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNl IF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNv bmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQp IDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAgICAgICAgICBfX3NlY29uZENo aWxkLS07CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19z ZWNvbmRDaGlsZCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgICAg IF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQogICAgICBp ZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgICAgICooX19maXJzdCArIF9faG9sZUlu ZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogICAgICAgIF9faG9sZUlu ZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgICAgIH0KICAgICAgX19wdXNoX2hlYXAoX19maXJz dCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2 b2lkCiAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX0Rp c3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3RfaGVhcChf X2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1 ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAg IGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFs dWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3Qg LSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2Us CiAgICAgICAgICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg IF9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBf X2hvbGVJbmRleCwKICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1 ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9f aG9sZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRl eCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAo X19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRD aGlsZCAtIDEpKSkpCiAgICAgICAgICBfX3NlY29uZENoaWxkLS07CiAgICAgICAgKihfX2ZpcnN0 ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICAgICAgX19o b2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9f c2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQogICAgICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xl bikgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3Nl Y29uZENoaWxkIC0gMSkpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7 CiAgICAgIH0KICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5k ZXgsIF9fdmFsdWUsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu ZSB2b2lkCiAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46 OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog ICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFz dCAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29tcCk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29t cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK ICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVU eXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRv cj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw ZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2xh c3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gX19s YXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX3BhcmVudCA9IChfX2xlbiAtIDIp LzI7CgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwg X19wYXJlbnQsIF9fbGVuLCBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSkpOwogICAg ICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19wYXJlbnQtLTsKICAgICAg fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVu YW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9W YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsK CgogICAgIAoKCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogICAgICBf RGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlVHlw ZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg IF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLAogICAgICAgICAgICAgICAg ICAgICAgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLCBfX2NvbXApOwogICAgICAg IGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19wYXJlbnQtLTsKICAgICAgfQog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICB2b2lk CiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19s YXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0pOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg PiAxKQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwogICAgfQoK fQojIDY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA3NCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIK ewoKIAoKICBwdHJkaWZmX3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAg X1RwKiBfTV9idWZmZXI7CgoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29y aWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+ IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIx NDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBf TV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYg KF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoK ICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQog IHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkg ewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoK cHVibGljOgoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBw dHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47 IH0KCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsg cmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2Fy ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlwZWRl ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAgdHJ5IHsKICAgICAgX01fbGVuID0gZGlz dGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAg IGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBf VHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIGZyZWUoX01f YnVmZmVyKTsKICAgICAgICBfTV9idWZmZXIgPSAwOwogICAgICAgIF9NX2xlbiA9IDA7CiAgICAg ICAgdGhyb3c7CiAgICAgIH0KICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0 cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsK ICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZl ciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoK fQojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1l c3BhY2Ugc3RkCnsKIyA4NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlh bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKQogICAgewoK ICAgICAKICAgICAgaWYgKF9fYSA8IF9fYikKICAgICAgICBpZiAoX19iIDwgX19jKQogICAgICAg ICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgICByZXR1 cm4gX19jOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYg KF9fYSA8IF9fYykKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2IgPCBfX2Mp CiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9 CiMgMTE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYK ICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBf X2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBf X2IpKQogICAgICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYjsK ICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYzsK ICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAo X19hLCBfX2MpKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2Is IF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7 CiAgICB9CiMgMTUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CiAgICBfRnVu Y3Rpb24KICAgIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs IF9GdW5jdGlvbiBfX2YpCiAgICB7CgogICAgIAogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QpCiAgICAgICAgX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsK ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICBpbnB1dF9p dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpf X2ZpcnN0ID09IF9fdmFsKSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0 OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Q cmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwK ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJz dCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAg ICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAg ICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy Pjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmly c3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3Vu dCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg ICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp cnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9 PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAg ICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKCpf X2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAg IGNhc2UgMjoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Owog ICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmICgqX19maXJzdCA9PSBf X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAg ICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRl PgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9f cHJlZCwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAg IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf dHlwZSBfX3RyaXBfY291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAg ICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBp ZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoK ICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytf X2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAg ICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0g X19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJl dHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlm IChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAg ICAgIGNhc2UgMToKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7 CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAg cmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDI4OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAg ICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAzMDkgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRl IF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZF9pZihfX2ZpcnN0 LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMg MzI5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog ICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7 CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4 dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAg cmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0Jp bmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0Jp bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0Zvcndh cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkg ewogICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAg cmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzODcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBl CiAgICBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBf VHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKICAgICAgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJz dCA9PSBfX3ZhbHVlKQogICAgICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMg NDExICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50X2lmKF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQog ICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf X2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAg ICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwg dHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9y d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0Zv cndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAK ICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3Qy ID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9Gb3J3YXJkSXRl cjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190bXAgPT0gX19s YXN0MikKICAgICAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsK CgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7 ICsrX19wMTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAg ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgIF9fZmlyc3QxID0gZmluZChf X2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19s YXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAg ICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xh c3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdoaWxlICgqX19jdXJyZW50 ID09ICpfX3ApIHsKICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICBy ZXR1cm4gX19maXJzdDE7CiAgICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAg ICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwog ICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgIH0KIyA1MjIgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl cjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0Zv cndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl cjEgX19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19m aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0Zvcndh cmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9 PSBfX2xhc3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJl ZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwg X19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIx IF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEp IHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgICAgaWYgKF9f cHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytf X2ZpcnN0MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVy biBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmly c3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsK CiAgICAgICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgICAg ICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAg ICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xh c3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4g X19maXJzdDE7CiAgICB9CiMgNTk2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2Vy LCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19j b3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAg aWYgKF9fY291bnQgPD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAg ICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAgd2hp bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50 IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytf X2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09 IF9fdmFsKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAg IH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3Zh bCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2NDMg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcCwKICAgICAg ICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNoX24o X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBf SW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgX0JpbmFyeVBy ZWQgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fY291bnQg PD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgd2hpbGUg KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJz dCwgX192YWwpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsrX19maXJzdDsKICAgICAg ICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdl ciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0 OwogICAgICAgICAgKytfX2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24g IT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAgICAgICAgICArK19faTsK ICAgICAgICAgICAgLS1fX247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19uID09IDApCiAg ICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHdo aWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9f aSwgX192YWwpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgKytfX2k7CiAg ICAgICAgICAgIH0KICAgICAgICAgICAgX19maXJzdCA9IF9faTsKICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDY5NyAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjIKICAgIHN3 YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAg IAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytf X2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3Qy KTsKICAgICAgcmV0dXJuIF9fZmlyc3QyOwogICAgfQojIDczMiAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw ZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJ dGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5h cnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX191bmFyeV9v cCgqX19maXJzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3NjUgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAg ICAgICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyCiAgICB0cmFu c2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg ICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAog ICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsr X19maXJzdDIsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9f Zmlyc3QxLCAqX19maXJzdDIpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgNzk2ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2UoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgIGNvbnN0IF9U cCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAg IAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQogICAgICAgICAgKl9fZmlyc3QgPSBf X25ld192YWx1ZTsKICAgIH0KIyA4MjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRp Y2F0ZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf X3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAK CgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYg KF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAg fQojIDg1NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9U cD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3 X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0 dXJuIF9fcmVzdWx0OwogICAgfQojIDg4OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1 dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwPgogICAg X091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog ICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3Zh bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fcHJl ZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICB9CiMgOTE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAg ICB2b2lkCiAgICBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4o KTsKICAgIH0KIyA5NDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg X0dlbmVyYXRvcj4KICAgIF9PdXRwdXRJdGVyCiAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9f Zmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCgoKCiAgICAg IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9f Z2VuKCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDk2OSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICBy ZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsK CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAg ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIHJl bW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAg ICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0 OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCFfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAq X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAg ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7 CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xh c3QsIF9fdmFsdWUpOwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0 dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiByZW1vdmVfY29weSgrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKICAg IH0KIyAxMDczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9y d2FyZEl0ZXIKICAgIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAg ICAgCgoKICAgICAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwog ICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0g X19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVf Y29weV9pZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9P dXRwdXRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg ICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsK ICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xh c3QpCiAgICAgICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFs dWUgPSAqX19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9 CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAg IF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog ICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQg PT0gKl9fZmlyc3QpKQogICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0 dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091 dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0 ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAg ICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVy VHlwZSgpKTsKICAgIH0KIyAxMTcwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl ciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICBfX3VuaXF1 ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJl ZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90 YWcpCiAgICB7CgogICAgIAoKCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqX19yZXN1bHQgPSBf X3ZhbHVlOwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9f YmluYXJ5X3ByZWQoX192YWx1ZSwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9f Zmlyc3Q7CiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICBy ZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMTk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIK ICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIGZvcndh cmRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5h cnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAg ICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTIzMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX091 dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVy YXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl dHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0 LApfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDEyNjMgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAgICAgCiAgICAgICAgIAoK CiAgICAgICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogICAg ICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7CiAgICB9 CiMgMTI5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg X0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAg ewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwg X19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3Qs IF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAg ICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwg X19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7CiAg ICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9p ZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh dG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgICAg ICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7CiAgICB9CiMgMTM0OSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJldmVyc2UoX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAg ICAKCiAgICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn b3J5KF9fZmlyc3QpKTsKICAgIH0KIyAxMzc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu YW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHJldmVyc2VfY29weShfQmlkaXJl Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAg ICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgLS1fX2xhc3Q7 CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9 CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMzk5ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVjbGlkZWFuUmluZ0Vs ZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQKICAgIF9fZ2NkKF9FdWNsaWRlYW5SaW5n RWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCiAgICB7CiAgICAgIHdoaWxl IChfX24gIT0gMCkgewogICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBf X247CiAgICAgICAgX19tID0gX19uOwogICAgICAgIF9fbiA9IF9fdDsKICAgICAgfQogICAgICBy ZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K ICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKChfX2Zp cnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47 CgogICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgZG8gewogICAg ICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09 IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgfSB3aGlsZSAo X19maXJzdDIgIT0gX19sYXN0KTsKCiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CgogICAgICB3 aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICAgICAgc3dhcCgqX19maXJzdCsrLCAqX19m aXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgICAgICBfX21p ZGRsZSA9IF9fZmlyc3QyOwogICAgICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAg ICAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X21pZGRsZSwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlm ICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAg cmV0dXJuOwoKICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZygpKTsKICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGly ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRk bGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAgICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9f bGFzdCk7CgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewogICAgICAgIF9fcmV2ZXJz ZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAg fQogICAgICBlbHNlIHsKICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGly ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk bGUsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKChfX2Zp cnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47 CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoK ICAgICAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBf X2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7 CgogICAgICBpZiAoX19rID09IF9fbCkgewogICAgICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9f bWlkZGxlLCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBfRGlzdGFu Y2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICAgICAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsg X19pIDwgX19kOyBfX2krKykgewogICAgICAgIF9WYWx1ZVR5cGUgX190bXAgPSAqX19maXJzdDsK ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKICAgICAgICBpZiAoX19r IDwgX19sKSB7CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19k OyBfX2orKykgewogICAgICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewogICAgICAg ICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICAgICAgX19wIC09IF9fbDsKICAg ICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAg X19wICs9IF9fazsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAg ICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19fZCAtIDE7IF9faiArKykgewog ICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAgICAgKl9fcCA9 ICooX19wICsgX19rKTsKICAgICAgICAgICAgICBfX3AgKz0gX19rOwogICAgICAgICAgICB9Cgog ICAgICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICAgICAgX19wIC09IF9fbDsK ICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICpfX3AgPSBfX3RtcDsKICAgICAgICArK19f Zmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNTYxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUg dm9pZAogICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRk bGUsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0 ZXJUeXBlOwogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5 cGUoKSk7CiAgICB9CiMgMTU4OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl cj4KICAgIF9PdXRwdXRJdGVyCiAgICByb3RhdGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFz dCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHJldHVy biBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0 KSk7CiAgICB9CiMgMTYxMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIF9EaXN0YW5jZQogICAg X19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICByZXR1cm4gbHJhbmQ0 OCgpICUgX19uOwoKCgogICAgfQojIDE2MzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5s aW5lIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m aXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9f Zmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQojIDE2 NjAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUmFuZG9tTnVtYmVyR2VuZXJhdG9y PgogICAgdm9pZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJl ckdlbmVyYXRvciYgX19yYW5kKQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf X2xhc3QpIHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0 ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJz dCArIF9fcmFuZCgoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJk SXRlcgogICAgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAg IGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybiBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAg aWYgKCsrX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICAgICAgX0ZvcndhcmRJ dGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQog ICAgICAgIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsKICAgICAgICAgIHN3YXAoKl9fZmlyc3QsICpf X25leHQpOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIH0KCiAgICAgIHJldHVybiBfX2Zp cnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19wYXJ0aXRp b24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgIGJpZGly ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg IHdoaWxlICh0cnVlKQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAg ICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAg ICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJz dCA9PSBfX2xhc3QpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBp ZiAoIV9fcHJlZCgqX19sYXN0KSkKICAgICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgICBlbHNl CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwog ICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE3NDggIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHBhcnRpdGlv bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIF9f cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f Zmlyc3QpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIK ICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0 ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiAg ICAgICAgcmV0dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogICAgICBf Rm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBf X2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9zdGFibGVf cGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9y d2FyZEl0ZXIgX19lbmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKTsKICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxl LCBfX2VuZCk7CiAgICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5k KSk7CiAgICAgIHJldHVybiBfX2JlZ2luOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAg ICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3N0YWJs ZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs IF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRl ciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19i dWZmZXJfc2l6ZSkKICAgIHsKICAgICAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKICAgICAgICBfUG9pbnRlciBf X3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsg KytfX2ZpcnN0KQogICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICAg Kl9fcmVzdWx0MSA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MTsKICAgICAgICAg IH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAg ICAgICAgICAgICsrX19yZXN1bHQyOwogICAgICAgICAgfQogICAgICAgIGNvcHkoX19idWZmZXIs IF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQxOwogICAgICB9 CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg ICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgICBfRm9yd2FyZEl0ZXIg X19iZWdpbiA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAg ICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoIF9fbWlk ZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1 ZmZlcl9zaXplKTsKICAgICAgICByb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAg ICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICAg IHJldHVybiBfX2JlZ2luOwogICAgICB9CiAgICB9CiMgMTg0OCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBzdGFibGVfcGFydGl0aW9u KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlCiAg ICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0 ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7 CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1ZhbHVlVHlwZT4gX19i dWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19idWYuc2l6ZSgpID4gMCkKICAgICAg ICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBf X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiAgICAg ICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmly c3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwogICAgICB9CiAg ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l IF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAgewogICAgICB3aGlsZSAodHJ1ZSkg ewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICAgICAgICArK19fZmlyc3Q7 CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0KQogICAg ICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgICAg ICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAg ICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9S YW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlICh0 cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCiAgICAgICAg ICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fY29tcChfX3Bp dm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICghKF9fZmlyc3Qg PCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRlcl9zd2FwKF9f Zmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTkyOSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgZW51bSB7IF9NX3RocmVz aG9sZCA9IDE2IH07CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwpCiAgICB7CiAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChfX3Zh bCA8ICpfX25leHQpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgICAgICBfX2xhc3Qg PSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAgICAgKl9fbGFzdCA9IF9fdmFs OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGlu ZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCwgX0NvbXBhcmUg X19jb21wKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAg ICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkgewogICAg ICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAt LV9fbmV4dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX2luc2VydGlv bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CgogICAgICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19f aSkKICAgICAgewogICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19pOwogICAgICAgIGlmIChfX3ZhbCA8ICpfX2Zp cnN0KSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAg ICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAg ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwpOwogICAgICB9CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w YXJlPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47Cgog ICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19s YXN0OyArK19faSkKICAgICAgewogICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19pOwogICAgICAgIGlmIChfX2Nv bXAoX192YWwsICpfX2ZpcnN0KSkgewogICAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBf X2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsKICAgICAgICB9CiAgICAg ICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFsLCBf X2NvbXApOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg X19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgX191bmd1YXJkZWRf bGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu bGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl OwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19s YXN0OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVl VHlwZSgqX19pKSwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAg ICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIF9faW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9sZCk7CiAgICAgICAgX191bmd1 YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0KTsKICAg ICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qp OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xhc3Qg LSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2Zp cnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2NvbXApOwogICAgICAgIF9fdW5ndWFyZGVk X2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCwgX19jb21wKTsK ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBp bmxpbmUgX1NpemUKICAgIF9fbGcoX1NpemUgX19uKQogICAgewogICAgICBfU2l6ZSBfX2s7CiAg ICAgIGZvciAoX19rID0gMDsgX19uICE9IDE7IF9fbiA+Pj0gMSkgKytfX2s7CiAgICAgIHJldHVy biBfX2s7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9TaXplPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl OwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAg ICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgICAgICBwYXJ0aWFsX3NvcnQoX19maXJz dCwgX19sYXN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAt LV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAg ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9f bGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgICAgICBfX2ludHJvc29ydF9sb29w KF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQpOwogICAgICAgIF9fbGFzdCA9IF9fY3V0Owog ICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW50cm9z b3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29tcGFyZSBf X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgd2hpbGUgKF9fbGFz dCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBpZiAoX19kZXB0aF9saW1pdCA9 PSAwKSB7CiAgICAgICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9f Y29tcCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC0tX19kZXB0aF9saW1p dDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRl ZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz dCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9f aW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCwgX19jb21wKTsKICAg ICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQojIDIxNjYgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw ZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAg IF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3Qp ICogMik7CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwog ICAgICB9CiAgICB9CiMgMjE5NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w YXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVf dHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19s YXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19s YXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3Nv cnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICB9CgoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0 YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9f aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICByZXR1cm47CiAgICAgIH0K ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9f Zmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxl KTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICBf X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAgIF9f aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgIHJldHVybjsK ICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19s YXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwg X19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwg X19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAog ICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9s b29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlz dGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAq IF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3Rl cCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9z aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2Zp cnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsKICAg ICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KCiAgICAgIF9fc3RlcF9zaXplID0g bWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwogICAgICBtZXJn ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwg X19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAg ICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBf X21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBf X3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0 ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsK ICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCAr IF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX3R3b19zdGVwOwog ICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0 KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9z aXplLAogICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICAg ICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIGVudW0geyBfTV9jaHVu a19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpCiAgICB7CiAgICAgIHdo aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiAgICAgICAgX19maXJz dCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0 LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg dHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fY2h1 bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVu a19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp cnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg X19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1 bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwg X19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5 cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcikKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJl bmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19m aXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47Cgog ICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5r X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoKICAgICAgd2hp bGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2Zp cnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3NpemUg Kj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwg X19maXJzdCwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0K ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Q b2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRo X2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9Db21w YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rp c3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJf bGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBf TV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz dCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xl bikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIs IF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAg X19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3Rl cF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0KICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVy LCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1 ZmZlcl9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJz dCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsg X19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0YWJs ZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6 ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1 ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJn ZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAg X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAg ICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9E aXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVy LCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2 b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Bv aW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9 IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p ZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkg ewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVm ZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w KTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm ZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIo X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICAgIF9fbWVyZ2Vfc29y dF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAg fQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0 YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j ZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAg ICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjQzMCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+ CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAg IF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19m aXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBs YWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGVsc2UKICAgICAgICBfX3N0 YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0YW5j ZVR5cGUoYnVmLnNpemUoKSkpOwogICAgfQojIDI0NjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E aXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1Jh bmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBp ZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJz dCwgX19sYXN0LCBfX2NvbXApOwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFw dGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXpl KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNTAy ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIHBhcnRpYWxfc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+ Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBtYWtlX2hlYXAo X19maXJzdCwgX19taWRkbGUpOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f bWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmICgqX19pIDwgKl9fZmlyc3Qp CiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUo Kl9faSkpOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgfQojIDI1NDAg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHBh cnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIG1ha2VfaGVhcChfX2Zp cnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg PSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgICAgICBpZiAoX19jb21wKCpfX2ks ICpfX2ZpcnN0KSkKICAgICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwg X1ZhbHVlVHlwZSgqX19pKSwgX19jb21wKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2NvbXApOwogICAgfQojIDI1NzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5k b21BY2Nlc3NJdGVyPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1dFZh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBl IF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAKCiAgICAgIGlmIChfX3Jl c3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAg ICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jl c3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAg ICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAg ICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHdo aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3Vs dF9maXJzdCkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5j ZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRf cmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfSW5w dXRWYWx1ZVR5cGUoKl9fZmlyc3QpKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAg c29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICByZXR1 cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2MzMgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9SYW5kb21BY2Nl c3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1 bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs dF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlw ZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgoKICAg ICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9s YXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3Vs dF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9s YXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9f Zmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0Owog ICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0 LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAo X19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICAgICAgICAgX19hZGp1c3RfaGVh cChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAg ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCksCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAg IHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwog ICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2ODYgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl VHlwZTsKCgogICAgIAogICAgIAoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7 CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRf cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp LzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KihfX2xhc3QgLSAxKSkpKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgICAgICBf X2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAg ICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQojIDI3 MjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg IG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9 CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmly c3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpCiAg ICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0ID0g X19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f Y29tcCk7CiAgICB9CiMgMjc2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBf Rm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRp ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgoKCgogICAgIAogICAgIAogICAgIAoKICAg ICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg IF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAg ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAg ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsK ICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh bGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsK ICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODE2ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAg IGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1 ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAg ICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0 KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRs ZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAx OwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBf X2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgICAg IF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVu ID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBf X2xlbiA9IF9faGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODU2 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBw ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0 IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0 YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu ID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7 CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsK ICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsK ICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX3ZhbCA8ICpf X21pZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAg ICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19s ZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBf X2ZpcnN0OwogICAgfQojIDI5MDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBf VHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5 cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBl IF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVu ID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBf X2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9f Y29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAg IGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0 OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9 CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5NDggIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFs X3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf VHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFu Y2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9 IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwog ICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxl IChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlk ZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAg IGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwog ICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7 CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICAgICAg X19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQgPSBsb3dlcl9i b3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0 LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19m aXJzdCwgX192YWwpOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2Fy ZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBw YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKICAgIH0K IyAzMDAzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWws CiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKCiAgICAg IF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBf RGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQs IF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19s ZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21p ZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAg ICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAg ICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo X19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAg ICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRs ZSwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAg ICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwg X19jb21wKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy PihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxf Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzA1 MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBib29sCiAgICBiaW5hcnlfc2Vh cmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKCiAgICAgCiAgICAgCgogICAgIAoKICAg ICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwp OwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7CiAgICB9CiMg MzA4MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgog ICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUg X19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgX0ZvcndhcmRJdGVyIF9f aSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJl dHVybiBfX2kgIT0gX19sYXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOwogICAgfQojIDMxMTUg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0 ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1 dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl cjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAK ICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpf X2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytf X2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVz dWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9f Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQojIDMxNjYgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx LCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAg dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEg X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAg IAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh c3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAg ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg fQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAg ICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAg ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg X19yZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9i dWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAgaWYgKF9fbGVu MSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSAr IF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICAg ICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAg ICB9CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3Rh bmNlIF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChf X2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBh ZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dl cl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgIF9fbGVuMjIg PSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBlbHNlIHsK ICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1 dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBf X21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmly c3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlk ZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxl ID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21p ZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xlbjExLCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19t aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9f bGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh cmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAg ICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBp ZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAgIGl0ZXJfc3dhcChf X2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwog ICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsK ICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0 LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwg X19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNl KF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9f bGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIy KTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAq X19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0 LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRs ZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9 IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRk bGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs IF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19sZW4xMSwgX19sZW4yMiwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf X25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CiAgICB9 CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBf QmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0 ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4y LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAg ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVu MiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNv cHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19m aXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9f YnVmZmVyX2VuZCwgX19maXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19sZW4xIDw9IF9f YnVmZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsK ICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xh c3QpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRs ZSwgX19sYXN0KTsKICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9fbWlkZGxlLCBf X2xhc3QpKTsKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlv bmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMz4KICAgIF9C aWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVy MSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQp CiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5 X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0 MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xh c3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3 aGlsZSAodHJ1ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICAg ICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFz dDEpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIs IF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7 CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3Qy ID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCAr K19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAg IH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0 eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwog ICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJl Y3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkK ICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQp OwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNr d2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAg IC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2xh c3QyLCAqX19sYXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAg ICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFj a3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3Qx OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz dDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJu IGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAg LS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9p bnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwK ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAg ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQog ICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVy X3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0 LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZm ZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0KICAgICAgICAg IGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVy IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAg ICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZm ZXJfZW5kLCBfX2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rp c3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg ICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4x MSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9f bGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21p ZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0g ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAg ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAg ICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgICAgICAg ICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29u ZF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19m aXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0 X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21l cmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVy X3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNv bmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAg ICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg dHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAgICB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21p ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAg ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9z aXplLAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgICAg ICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAg ICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBf X2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlk ZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNl IGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1 ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAg X19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2Vu ZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9f bGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAg IGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVu MSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwog ICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19s YXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBk aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAg ICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAg ICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAg ICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25k X2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmly c3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUo X19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAg ICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBf X2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBf X2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3 X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVy X3NpemUsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICB9CiMgMzUwOCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyPgogICAgdm9pZAogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90 eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9E aXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRs ZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3RhbmNl VHlwZSBfX2xlbjEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5j ZVR5cGUgX19sZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9y YXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3Qs IF9fbGFzdCk7CiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19tZXJnZV93 aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7 CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVn aW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpKTsKICAgIH0KIyAzNTU5ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk aXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgaW5wbGFjZV9t ZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZh bHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAg ICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf X21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rp c3RhbmNlVHlwZSBfX2xlbjEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9E aXN0YW5jZVR5cGUgX19sZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBf VGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9f Zmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19t ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9f bGVuMiwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz dCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg ICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCiAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGluY2x1ZGVz KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAog ICAgIAogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg X19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQog ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmly c3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmly c3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog ICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp cnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZihfX2NvbXAoKl9f Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAg ICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09 IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg c2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAK CiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp cnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikgewog ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAg ICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0K ICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19f cmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5 KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91 bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK ICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmly c3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg ICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmly c3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAg ICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmly c3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBj b3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0 SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRl cnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAg CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9f Zmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmICgqX19maXJzdDIg PCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg ICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJu IF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5h bWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1l IF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK ICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0 MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoX19j b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg ZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmly c3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAg fQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBf T3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1 dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGls ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlm ICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0 MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0K ICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmly c3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19m aXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9D b21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRl cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAg ICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg X19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly c3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp cnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9f Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg IGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIs IHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNf ZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBp ZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz dDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9 CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jl c3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAg ICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBf X2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0 ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoK CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy KQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAq X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytf X3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f Zmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytf X2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2Ugewog ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAg ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg X19yZXN1bHQpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog ICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0g X19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpf X3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICBy ZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19m aXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29t cCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4g X19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9G b3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmly c3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19maXJz dCA8ICpfX3Jlc3VsdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJu IF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu YW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJl IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz dCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7 CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9f Zmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJl dHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoK ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUg KCEoKl9faSA8ICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19p LCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJu IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAg cmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg IH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIs IHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJl Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09 IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAg LS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9 IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewog ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxl ICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3 YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXI+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBf X2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgog ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChf X2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0Owog ICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAo ISgqLS1fX2ogPCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ks IF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4g dHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICBy ZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg fQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0g X19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAt LV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0g X19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUg KCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dh cChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAg ICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg ICAgICAgfQogICAgICB9CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihf SW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7CgogICAg IAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m aXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl ciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRl cikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJz dF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAg ICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAK ICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m aXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl ciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAq X19pdGVyKSkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0 MTsKICAgIH0KIyA0MjAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIy PgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3Qx LCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy YXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdDIg PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAg X0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAg ICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9f Zmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAoX19uZXdf cmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAg IGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAg X19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFy eVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVy MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZv cndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAg X0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xh c3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2Fy ZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAg X0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEs IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYgKF9fbmV3 X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAg ICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAg IF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg ICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9CaWRpcmVj dGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwg X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZykKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0Jp ZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0 b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxh c3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAg X1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwg X19ybGFzdDIpOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1 cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jl c3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3Rh bmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0 ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJ dGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp CiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRp cmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y PF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0 MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9S ZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9f cmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogICAg ICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAg ICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0 LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9f bGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAg aW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJz dDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAg ICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0 MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSks CiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zvcndh cmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5l IF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3 YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21w KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19m aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAg ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29tcCk7CiAgICB9Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMiAz CiMgNTcgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0NSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBf UmVwOjpfU19tYXhfc2l6ZSA9ICgoKG5wb3MgLSBzaXplb2YoX1JlcCkpL3NpemVvZihfQ2hhclQp KSAtIDEpIC8gNDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46Om5wb3M7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46Ol9TX2VtcHR5X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVwKSArIHNpemVv ZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAg ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0 cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAg ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGlmIChf X2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1w dHlfcmVwKCkuX01fcmVmY29weSgpOwoKICAgICAgICBfQ2hhclQgX19idWZbMTAwXTsKICAgICAg ICBzaXplX3R5cGUgX19pID0gMDsKICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19p IDwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgewogICAgICAgICAg ICBfX2J1ZltfX2krK10gPSAqX19iZWc7CiAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICB9 CiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19hKTsKICAgICAgICB0 cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9faSk7CiAgICAgICAg X19yLT5fTV9sZW5ndGggPSBfX2k7CiAgICAgICAgdHJ5CiAgICAgICAgICB7CgoKCiAgICAgICAg ICAgIGZvciAoOzspCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX0NoYXJUKiBfX3Ag PSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fbGVuZ3RoOwogICAgICAgICAgICAgICAgX0No YXJUKiBfX2xhc3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fY2FwYWNpdHk7CiAgICAg ICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwog ICAgICAgICAgICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX19wID09IF9fbGFzdCkKICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICpfX3ArKyA9ICpfX2JlZzsK ICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAg ICAgICAgICAgICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBf X2EpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVyLT5fTV9yZWZk YXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX3JlZmRhdGEo KSwgX19sZW4pOwogICAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAg ICAgICAgICBfX3IgPSBfX2Fub3RoZXI7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9 IF9fbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBjYXRjaCguLi4pCiAg ICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl bXBsYXRlIDxjbGFzcyBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBz dGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOwoKICAgICAgICBp ZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9T X2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0 KF9fYmVnID09IF9Jbkl0ZXIoKSwgMCkpCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vycm9yKCJh dHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsKCgogICAgICAgIF9S ZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAg ICAgICB7IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0K ICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJv eShfX2EpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xl bmd0aCA9IF9fZG5ldzsKCiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6 Ol9TX3Rlcm1pbmFsOwogICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OgogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9B bGxvYyYgX19hKQogICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygpKQog ICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgX1JlcCog X19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiAgICAgICAgewogICAg ICAgICAgaWYgKF9fbikKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3Jl ZmRhdGEoKSwgX19uLCBfX2MpOwogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsK ICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAg fQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19u XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBs dXMoX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3Io KSksCiAgICAgICAgICAgICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19z dHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChz aXplX3R5cGUoKSwgX0NoYXJUKCksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAg IDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxv YygpKSwgX0FsbG9jKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29u c3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9j aGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xk KF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVz KF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp bmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1 cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykg OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zICsgbnBvcywgX19hKSwgX19hKQog ICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9j JiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19h KQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9J bnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAg OiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAo KSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2Fs bG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9n cmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9k aXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBf X2EpIHRocm93ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkg KyAoX01fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2Fs bG9jKF9fYSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXpl KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lz X3NoYXJlZCgpKQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9N X3NldF9sZWFrZWQoKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19w b3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVf dHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19u ZXdfc2l6ZSA9IF9fb2xkX3NpemUgKyBfX2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFy VCogX19zcmMgPSBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90 eXBlIF9faG93X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAo X01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAg ICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CgoK ICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgICAgIGNv bnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsK CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9fcGFnZXNpemUg LSBfX21hbGxvY19oZWFkZXJfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICAg ICAgX1JlcCogX19yOwogICAgICAgICAgaWYgKF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpICYmIF9f bmV3X3NpemUgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19j cmVhdGUoX19uZXdfc2l6ZSA+IDIqY2FwYWNpdHkoKSA/CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX25ld19zaXplIDogMipjYXBhY2l0eSgpLCBfX2EpOwogICAgICAgICAgZWxz ZQogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAg ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwg X19wb3MpOwogICAgICAgICAgICAgIGlmIChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJh aXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAg ICAgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19y LT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBf TV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19t dWNoICYmIF9fbGVuMSAhPSBfX2xlbjIpCiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBl Ojptb3ZlKF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAg ICAgICAgfQogICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgp LT5fTV9sZW5ndGggPSBfX25ld19zaXplOwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBf UmVwOjpfU190ZXJtaW5hbDsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7 CiAgICAgIGlmIChfX3JlcyA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3No YXJlZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkp CiAgICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUi KTsKCiAgICAgICAgICBpZiAoX19yZXMgPCB0aGlzLT5zaXplKCkpCiAgICAgICAgICAgIF9fcmVz ID0gdGhpcy0+c2l6ZSgpOwogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9j YXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2Es IF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9f YSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg dm9pZCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0 cmluZyYgX19zKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAg ICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+ X01faXNfbGVha2VkKCkpCiAgICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsK ICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQog ICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAgICAgICBf TV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICAgICAgICAgX19zLl9NX2RhdGEoX190bXApOwogICAg ICAgIH0KCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAx KF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAg YmFzaWNfc3RyaW5nIF9fdG1wMihfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAg ICAqdGhpcyA9IF9fdG1wMjsKICAgICAgICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6X1JlcCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6 OgogICAgX1NfY3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2Mp CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiBfX3N0cmluZ190eXBlOwoKCiAgICAgIGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4X3NpemUpCgoK CiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7 CgoKCgogICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hh clQpICsgc2l6ZW9mKF9SZXApOwojIDQyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNp Y19zdHJpbmcudGNjIiAzCiAgICAgIGNvbnN0IHNpemVfdCBfX3BhZ2VzaXplID0gNDA5NjsKICAg ICAgY29uc3Qgc2l6ZV90IF9fc3VicGFnZXNpemUgPSAxMjg7CiAgICAgIGNvbnN0IHNpemVfdCBf X21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKICAgICAgaWYgKChfX3Np emUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgPiBfX3BhZ2VzaXplKQogICAgICAgIHsKICAgICAg ICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fcGFnZXNpemUgLSAoKF9fc2l6ZSAr IF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fcGFnZXNpemUpKQogICAgICAgICAgICAlIF9fcGFn ZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJUKTsK ICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNp emVvZihfUmVwKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fc2l6ZSA+IF9fc3VicGFnZXNp emUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAgICAgICAgICAoX19z dWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19zdWJwYWdl c2l6ZSkpCiAgICAgICAgICAgICUgX19zdWJwYWdlc2l6ZTsKICAgICAgICAgIF9fY2FwYWNpdHkg Kz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXplID0gKF9fY2FwYWNp dHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAgICAgIH0KCgoKICAg ICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2NhdGUoX19z aXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBfX3AtPl9N X2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUoKTsKICAg ICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6 OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCiAg ICB7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19yZXF1ZXN0ZWRfY2FwID0gX01fbGVuZ3RoICsg X19yZXM7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgIGNv bnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsK CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPQogICAgICAgIChfX3BhZ2Vz aXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUgLSBzaXplb2YoX1JlcCkgLSBzaXplb2YoX0NoYXJU KSkKICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICBfUmVwKiBfX3I7CiAgICAgIGlmIChf X3JlcXVlc3RlZF9jYXAgPiBfTV9jYXBhY2l0eSAmJiBfX3JlcXVlc3RlZF9jYXAgPiBfX3BhZ2Vf Y2FwYWNpdHkpCgogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAg PiAyKl9NX2NhcGFjaXR5ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXF1ZXN0 ZWRfY2FwIDogMipfTV9jYXBhY2l0eSwgX19hbGxvYyk7CiAgICAgIGVsc2UKICAgICAgICBfX3Ig PSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwLCBfX2FsbG9jKTsKCiAgICAgIGlmIChf TV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgdHJhaXRzX3R5 cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgX01fbGVuZ3RoKTsgfQog ICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9k ZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAgICAgcmV0dXJuIF9fci0+ X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQog ICAgewogICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkKICAgICAgICBfX3Rocm93X2xlbmd0aF9l cnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo aXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikKICAgICAgICB0aGlzLT5hcHBlbmQo X19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBfX3NpemUpCiAgICAgICAg dGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYK ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3Jl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlciBfX2sxLAogICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7 CgogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAgcmV0dXJuIF9N X3JlcGxhY2Vfc2FmZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCkp OwogICAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog ICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZV9zYWZlKGl0 ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBfX2sxLAogICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUg X19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2sxLCBfX2syKSk7CiAg ICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBf X2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwoKICAgICAgICBpZiAoX19kbWF4IDw9IF9fZG5ldykK ICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2Ui KTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgICAg X01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgoKICAgICAgICBpZiAoX19kbmV3KQog ICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7Cgog ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNp emVfdHlwZSBfX24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19z dHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgIF9fdGhyb3df b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgY29uc3QgYm9vbCBf X3Rlc3RuMiA9IF9fbjIgPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX2ZvbGRuMiA9IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAg cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBfX24xLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fZm9sZG4yKTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsK ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo X19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwog ICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5f TV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9pZW5kKCkp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p CiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3Bv cywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHko KSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vf c2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBfQ2hh clQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19u ICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAg ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9N X2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBf X2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAg ICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9f bGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf X24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7 CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0 cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlw ZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgo X19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9f bGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9f bGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9w ZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUg X19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0 ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwg X19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVy YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAg IHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9f b2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+ c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFz aWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24y KTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgp ICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90 eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvcHko X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsK ICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh bmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24gPiB0aGlzLT5zaXplKCkg LSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3BvczsKCiAgICAgIHRyYWl0 c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CgogICAgICByZXR1cm4g X19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z aXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29uc3QgX0NoYXJUKiBf X2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyAr K19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX194cG9z LCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBu cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBl IF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsKICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6ZV90eXBl IF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFp dHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAgICAgICAgaWYgKF9f cCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAgICByZXR1 cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAg ICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwogICAgICAgICAgY29uc3Qg X0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3Ms IF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICAgICAgfQog ICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9z OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7 CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUp CiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAg ICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAg ICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAgICAgICBpZiAodHJhaXRz X3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgICAgIHJldHVybiBf X3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9v Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25z dAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9z KQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZp bmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAgaWYgKF9fcCkKICAgICAg ICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp OwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3Np emUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBf TV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAg ICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAgICAgfQogICAgICBy ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90 IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19f eHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb X194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25z dAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3Mg PCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9N X2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0 dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAg ICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAg ICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6 ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJu IF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAg ICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBf X2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9 IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAo LS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBk bwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0 YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAg ICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJu IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u LCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNp emUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh bmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBt aW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3Jz aXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2Rh dGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAg ICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24y KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg ICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9f c2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi YXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9f c2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29z aXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUs IF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEo KSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRh dGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3Jz aXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNv bnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp cy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgo X19zKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc2l6ZSwgX19vc2l6ZSk7CiAgICAg IGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19sZW4pOwog ICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICByZXR1 cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Ro cm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5 cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9f cnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19sZW4g PSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29t cGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAg ICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQq IF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAg ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAg ICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIp OwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAg ICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9f ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsK ICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJl dHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMs IGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAgICAgICAgICAg X0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZzaXopCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAg ICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19i eXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6OmNvcHko X19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0No YXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8Y2hh cj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0 b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXI+ JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNo YXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwgY2hhcik7CiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNp Y19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz aWNfc3RyaW5nPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3 Y2hhcl90PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcm KTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08d2NoYXJfdD4mCiAgICBvcGVy YXRvcjw8KGJhc2ljX29zdHJlYW08d2NoYXJfdD4mLCBjb25zdCB3c3RyaW5nJik7CiAgZXh0ZXJu IHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19p c3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1wbGF0ZQog ICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hh cl90PiYsIHdzdHJpbmcmKTsKCn0KIyA1OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAy IDMKIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhy b3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lk KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19i YWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y dW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBj aGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19z KTsKfQojIDUxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCgpu YW1lc3BhY2Ugc3RkCnsKCiAgY2xhc3MgbG9jYWxlOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQo X0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg aW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJULCBj b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv b2wKICAgIGlzbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2Nh bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9D aGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu bGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCwgY29u c3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hh clQKICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQsIGNvbnN0IGxv Y2FsZSYpOwoKCgogIGNsYXNzIGN0eXBlX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgY2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsKCiAgdGVt cGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hhcl90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgY2xhc3MgY3R5cGVfYnluYW1lOwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlOwogIGNsYXNz IF9fZW5jX3RyYWl0czsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4 dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4g Y2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTw+IGNsYXNz IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3Mg Y29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX2dldDsK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1 Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNs YXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs YXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcwogICAgY29sbGF0 ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNs YXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl ciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5h bWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJl YW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxf Q2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1 Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJv b2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFt ZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3Mg bWVzc2FnZXNfYnluYW1lOwoKCiAgY2xhc3MgbG9jYWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBl ZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsKCgogICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBp ZDsKICAgIGNsYXNzIF9JbXBsOwoKICAgIGZyaWVuZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBj bGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBj b25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25z dCBsb2NhbGUmKSB0aHJvdygpOwoKCgogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAw OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBj b25zdCBjYXRlZ29yeSBudW1lcmljID0gMUwgPDwgMTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29y eSBjb2xsYXRlID0gMUwgPDwgMjsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwg PDwgMzsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBz dGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0 IGNhdGVnb3J5IGFsbCA9IChjdHlwZSB8IG51bWVyaWMgfCBjb2xsYXRlIHwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgfCBtb25ldGFyeSB8IG1lc3NhZ2Vz KTsKCgogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290 aGVyKSB0aHJvdygpOwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zKTsK CiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdv cnkgX19jYXQpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxl JiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4K ICAgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5s b2NhbGUoKSB0aHJvdygpOwoKICAgIGNvbnN0IGxvY2FsZSYKICAgIG9wZXJhdG9yPShjb25zdCBs b2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog ICAgICBsb2NhbGUKICAgICAgY29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0OwoK CiAgICBzdHJpbmcKICAgIG5hbWUoKSBjb25zdDsKCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNv bnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCk7CgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKQogICAgeyBy ZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09KF9fb3RoZXIpKTsgfQoKICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyLCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAgIGJvb2wK ICAgICAgb3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fczEsCiAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJh aXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFs KGNvbnN0IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7 CgogIHByaXZhdGU6CgogICAgX0ltcGwqIF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1Nf Y2xhc3NpYzsKCgogICAgc3RhdGljIF9JbXBsKiBfU19nbG9iYWw7CgoKCgoKCiAgICBzdGF0aWMg Y29uc3Qgc2l6ZV90IF9TX2NhdGVnb3JpZXNfc2l6ZSA9IDY7CgoKCgoKCiAgICBzdGF0aWMgY29u c3Qgc2l6ZV90IF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZSA9IDY7CgoKCgoKICAgIHN0YXRpYyBj b25zdCBjaGFyKiBfU19jYXRlZ29yaWVzW19TX2NhdGVnb3JpZXNfc2l6ZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICsgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXplXTsKCiAg ICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikgdGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5l IHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAgewogICAgICBpZiAoIV9TX2NsYXNzaWMpCiAg ICAgICAgY2xhc3NpYygpOwogICAgfQoKICAgIHN0YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFs aXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBs b2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07 CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBwdWJsaWM6CgogICAgZnJpZW5kIGNsYXNz IGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0 KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJp ZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZh dGU6CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0 czsKICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsKCiAgICBjaGFyKiBfTV9uYW1lc1tfU19jYXRl Z29yaWVzX3NpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICsgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXplXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6 OmlkKiBjb25zdCBfU19pZF9jdHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNv bnN0IF9TX2lkX251bWVyaWNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBf U19pZF9jb2xsYXRlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRf dGltZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5 W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsK ICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdv cmllc1tdOwoKICAgIGlubGluZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQog ICAgeyBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOyB9CgogICAgaW5saW5lIHZvaWQK ICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX2V4Y2hh bmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA9PSAxKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7IGRlbGV0ZSB0aGlzOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAg ICAgICAgICAgIHsgfQogICAgICAgIH0KICAgIH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYsIHNp emVfdCk7CiAgICBfSW1wbChjb25zdCBjaGFyKiwgc2l6ZV90KTsKICAgIF9JbXBsKGZhY2V0Kios IHNpemVfdCwgYm9vbCk7CgogICB+X0ltcGwoKSB0aHJvdygpOwoKICAgIF9JbXBsKGNvbnN0IF9J bXBsJik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IF9JbXBsJik7CgogICAgaW5saW5l IGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJvb2wgX19yZXQgPSB0 cnVlOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOwogICAgICAgICAgIF9fcmV0ICYmIF9faSA8 IF9TX2NhdGVnb3JpZXNfc2l6ZSArIF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZSAtIDE7CiAgICAg ICAgICAgKytfX2kpCiAgICAgICAgX19yZXQgJj0gKHN0cmNtcChfTV9uYW1lc1tfX2ldLCBfTV9u YW1lc1tfX2kgKyAxXSkgPT0gMCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgICB2b2lk CiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29yeSk7CgogICAg dm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6 aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9mYWNldChjb25zdCBfSW1wbCos IGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lkCiAgICBfTV9pbnN0YWxsX2ZhY2V0KGNvbnN0 IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg ICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFjZXQpCiAgICAg IHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KICB9OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBsb2NhbGUmIF9f b3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290 aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6 OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOwogICAgICAgICAgIF9faSA8IF9T X2NhdGVnb3JpZXNfc2l6ZSArIF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZTsgKytfX2kpCiAgICAg ICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX2ltcGwtPl9NX25hbWVzW19faV07CiAgICAgICAg ICBjaGFyKiBfX25ldyA9IG5ldyBjaGFyWzJdOwogICAgICAgICAgc3RyY3B5KF9fbmV3LCAiKiIp OwogICAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9IF9fbmV3OwogICAgICAgIH0KICAg IH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFz cyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgICBfQXRvbWljX3dv cmQgX01fcmVmZXJlbmNlczsKCiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgX19jX2xvY2FsZSBf U19jX2xvY2FsZTsKCgogICAgc3RhdGljIGNoYXIgX1NfY19uYW1lWzJdOwoKICAgIGV4cGxpY2l0 CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsKCiAgICB2aXJ0dWFsCiAgICB+ ZmFjZXQoKTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2Nh bGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY19s b2NhbGUgX19vbGQgPSAwKTsKCiAgICBzdGF0aWMgX19jX2xvY2FsZQogICAgX1NfY2xvbmVfY19s b2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZGVzdHJv eV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICBwcml2YXRlOgogICAgdm9pZAogICAg X01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVy ZW5jZSgpIHRocm93KCk7CgogICAgZmFjZXQoY29uc3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBv cGVyYXRvcj0oY29uc3QgZmFjZXQmKTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAg cHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxl OjpfSW1wbDsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0 IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwogICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9j YWxlJikgdGhyb3cgKCk7CgoKCgogICAgbXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0 YXRpYyBfQXRvbWljX3dvcmQgX1NfaGlnaHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShj b25zdCBpZCYpOwoKICAgIGlkKGNvbnN0IGlkJik7CgogIHB1YmxpYzoKCgogICAgaWQoKTsKCiAg ICBpbmxpbmUgc2l6ZV90CiAgICBfTV9pZCgpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01faW5k ZXgpCiAgICAgICAgX01faW5kZXggPSAxICsgX19leGNoYW5nZV9hbmRfYWRkKCZfU19oaWdod2F0 ZXIsIDEpOwogICAgICByZXR1cm4gX01faW5kZXggLSAxOwogICAgfQogIH07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBs b2NhbGUmIF9fbG9jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAg aGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7Cn0KIyA0OSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lvc19i YXNlLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lvc19iYXNlLmgiIDMK CgoKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lvc19mbXRm bGFnc19lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9y JihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19G bXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9 CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9Jb3NfRm10ZmxhZ3MgX19hLCBf SW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGlu dD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10Zmxh Z3MKICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsg cmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8 aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfD0oX0lvc19G bXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBf X2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3Mm IF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9Cgog IGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JePShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9J b3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUg X0lvc19GbXRmbGFncwogIG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdzIF9fYSkKICB7IHJldHVybiBf SW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfT3Bl bm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3Nf T3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19i KQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGlj X2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfChf SW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVu bW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9Cgog IGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9z X09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4o X19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUK ICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyBy ZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0 b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9f YSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yXj0oX0lv c19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2Eg XiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcn4oX0lvc19PcGVubW9k ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsg fQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0ZV9lbmQgPSAxTCA8PCAxNiB9 OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9Jb3NfSW9zdGF0ZSBfX2EsIF9J b3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4o X19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog IG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJu IF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9f YikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl4oX0lvc19Jb3N0YXRlIF9f YSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8 aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0 YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7 IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJh dG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19h ID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl49KF9Jb3Nf SW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9f YjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+KF9Jb3NfSW9zdGF0ZSBfX2Ep CiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgogIGVu dW0gX0lvc19TZWVrZGlyIHsgX01faW9zX3NlZWtkaXJfZW5kID0gMUwgPDwgMTYgfTsKCgogIGNs YXNzIGlvc19iYXNlCiAgewogIHB1YmxpYzoKCgogICAgY2xhc3MgZmFpbHVyZSA6IHB1YmxpYyBl eGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBleHBsaWNpdAogICAgICBmYWlsdXJl KGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7CgoKCiAgICAgIHZpcnR1YWwKICAgICAgfmZh aWx1cmUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICB3aGF0KCkg Y29uc3QgdGhyb3coKTsKCiAgICBwcml2YXRlOgogICAgICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1 NiB9OwogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07CgogICAgfTsKCgogICAgdHlwZWRl ZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29s YWxwaGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsKICAgIHN0YXRpYyBj b25zdCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZGVjKTsKICAgIHN0 YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhl ZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX2hleCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhf X2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGxlZnQg PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfbGVmdCk7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh Z3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7CiAgICBzdGF0aWMgY29uc3Qg Zm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfcmlnaHQpOwogICAgc3Rh dGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf c2NpZW50aWZpYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFn cyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNo b3dwb2ludCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9pbnQpOwogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIHNob3dwb3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bv cyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxh Z3M6Ol9TX3NraXB3cyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZs YWdzKF9faW9zX2ZsYWdzOjpfU191bml0YnVmKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1 cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRp YyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19h ZGp1c3RmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10Zmxh Z3MoX19pb3NfZmxhZ3M6Ol9TX2Jhc2VmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg ZmxvYXRmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKCgogICAg dHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJh ZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CiAgICBzdGF0aWMgY29uc3Qg aW9zdGF0ZSBlb2ZiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOwogICAgc3Rh dGljIGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxi aXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAg IHR5cGVkZWYgX0lvc19PcGVubW9kZSBvcGVubW9kZTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9k ZSBhcHAgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXBwKTsKICAgIHN0YXRpYyBjb25zdCBv cGVubW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXRlKTsKICAgIHN0YXRpYyBj b25zdCBvcGVubW9kZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKICAg IHN0YXRpYyBjb25zdCBvcGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7 CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9T X291dCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19m bGFnczo6X1NfdHJ1bmMpOwoKCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOwogICAg c3RhdGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vla2RpcigwKTsKICAgIHN0YXRpYyBjb25zdCBz ZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBz ZWVrZGlyKDIpOwojIDIyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pb3NfYmFzZS5oIiAz CiAgICBlbnVtIGV2ZW50CiAgICB7CiAgICAgIGVyYXNlX2V2ZW50LAogICAgICBpbWJ1ZV9ldmVu dCwKICAgICAgY29weWZtdF9ldmVudAogICAgfTsKCiAgICB0eXBlZGVmIHZvaWQgKCpldmVudF9j YWxsYmFjaykgKGV2ZW50LCBpb3NfYmFzZSYsIGludCk7CgogICAgdm9pZAogICAgcmVnaXN0ZXJf Y2FsbGJhY2soZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgpOwoKICBwcm90ZWN0ZWQ6 CgogICAgc3RyZWFtc2l6ZSBfTV9wcmVjaXNpb247CiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOwog ICAgZm10ZmxhZ3MgX01fZmxhZ3M7CiAgICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsKICAgIGlvc3Rh dGUgX01fc3RyZWFtYnVmX3N0YXRlOwoKCgogICAgc3RydWN0IF9DYWxsYmFja19saXN0CiAgICB7 CgogICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50X2Nh bGxiYWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5kZXg7CiAgICAgIF9BdG9taWNfd29yZCBfTV9y ZWZjb3VudDsKCiAgICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBf X2ZuLCBpbnQgX19pbmRleCwKICAgICAgICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9f Y2IpCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgp LCBfTV9yZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgp IHsgX19hdG9taWNfYWRkKCZfTV9yZWZjb3VudCwgMSk7IH0KCgogICAgICBpbnQKICAgICAgX01f cmVtb3ZlX3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmY291 bnQsIC0xKTsgfQogICAgfTsKCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsKCiAg ICB2b2lkCiAgICBfTV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAgIHZv aWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRzCiAg ICB7CiAgICAgIHZvaWQqIF9NX3B3b3JkOwogICAgICBsb25nIF9NX2l3b3JkOwogICAgICBfV29y ZHMoKSA6IF9NX3B3b3JkKDApLCBfTV9pd29yZCgwKSB7IH0KICAgIH07CgoKICAgIF9Xb3JkcyBf TV93b3JkX3plcm87CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZF9zaXplID0g ODsKICAgIF9Xb3JkcyBfTV9sb2NhbF93b3JkW19TX2xvY2FsX3dvcmRfc2l6ZV07CgoKICAgIGlu dCBfTV93b3JkX3NpemU7CiAgICBfV29yZHMqIF9NX3dvcmQ7CgogICAgX1dvcmRzJgogICAgX01f Z3Jvd193b3JkcyhpbnQgX19pbmRleCk7CgoKICAgIGxvY2FsZSBfTV9pb3NfbG9jYWxlOwoKICAg IHZvaWQKICAgIF9NX2luaXQoKTsKCiAgcHVibGljOgoKCgoKCiAgICBjbGFzcyBJbml0CiAgICB7 CiAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFzZTsKICAgIHB1YmxpYzoKICAgICAgSW5pdCgpOwog ICAgICB+SW5pdCgpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2NyZWF0ZShib29s IF9fc3luYyk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfZGVzdHJveSgpOwoKICAg IHByaXZhdGU6CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsKICAgICAgc3RhdGlj IGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87CiAgICB9OwoKCiAgICBpbmxpbmUgZm10ZmxhZ3MK ICAgIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxhZ3M7IH0KCiAgICBpbmxpbmUgZm10Zmxh Z3MKICAgIGZsYWdzKGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xk ID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xk OwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsKQog ICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyB8PSBf X2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAg ICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAgZm10 ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAgICAg X01fZmxhZ3MgfD0gKF9fZm10ZmwgJiBfX21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9 CgogICAgaW5saW5lIHZvaWQKICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3Mg Jj0gfl9fbWFzazsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oKSBjb25z dCB7IHJldHVybiBfTV9wcmVjaXNpb247IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJl Y2lzaW9uKHN0cmVhbXNpemUgX19wcmVjKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0g X01fcHJlY2lzaW9uOwogICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7CiAgICAgIHJldHVybiBf X29sZDsKICAgIH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoKSBjb25zdCB7IHJl dHVybiBfTV93aWR0aDsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aChzdHJlYW1z aXplIF9fd2lkZSkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3dpZHRoOwogICAg ICBfTV93aWR0aCA9IF9fd2lkZTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIHN0YXRp YyBib29sCiAgICBzeW5jX3dpdGhfc3RkaW8oYm9vbCBfX3N5bmMgPSB0cnVlKTsKCgogICAgbG9j YWxlCiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICBpbmxpbmUgbG9jYWxlCiAg ICBnZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxlOyB9CgoKICAgIHN0YXRpYyBp bnQKICAgIHhhbGxvYygpIHRocm93KCk7CgogICAgaW5saW5lIGxvbmcmCiAgICBpd29yZChpbnQg X19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkK ICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3Jkcyhf X2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9p ZComCiAgICBwd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19p eCA8IF9NX3dvcmRfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhd IDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsKICAg IH0KCgogICAgfmlvc19iYXNlKCk7CgogIHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoKCiAg cHJpdmF0ZToKICAgIGlvc19iYXNlKGNvbnN0IGlvc19iYXNlJik7CgogICAgaW9zX2Jhc2UmCiAg ICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jhc2UmKTsKCiAgfTsKCgogIGlubGluZSBpb3NfYmFzZSYK ICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz ZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um CiAgbm9ib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlv c19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf YmFzZSYKICBzaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv c19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i YXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRm KGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv c19iYXNlJgogIHNob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm KGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp b3NfYmFzZSYKICBub3Nob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51 bnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s aW5lIGlvc19iYXNlJgogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu c2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l IGlvc19iYXNlJgogIG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51 bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu ZSBpb3NfYmFzZSYKICBza2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0 Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z X2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRm KGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf YmFzZSYKICB1cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp b3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z X2Jhc2UmCiAgbm91cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5z ZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu ZSBpb3NfYmFzZSYKICB1bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5z ZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l IGlvc19iYXNlJgogIG5vdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uu dW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlu bGluZSBpb3NfYmFzZSYKICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jh c2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJuYWwsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICAg cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBsZWZ0KGlvc19iYXNlJiBf X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1 c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHJp Z2h0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0 LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxp bmUgaW9zX2Jhc2UmCiAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYo aW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwog IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGhleChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f YmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJu IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkK ICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsK ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGZpeGVkKGlvc19i YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFz ZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNl JgogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3Nf YmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFz ZTsKICB9Cgp9CiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv c3RyZWFtYnVmIiAzCgoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFt YnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX2lvcywKICAgICAgICAgICAgICAgICAg ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAg ICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBi YXNpY19zdHJlYW1idWYKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5 cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN0YXRlX3R5cGUgX19zdGF0ZV90eXBlOwoKICAgICAgZnJp ZW5kIGNsYXNzIGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5k IGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVu ZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmll bmQgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAg ICAgZnJpZW5kIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlw ZT47CgogICAgICBmcmllbmQgc3RyZWFtc2l6ZQogICAgICBfX2NvcHlfc3RyZWFtYnVmczw+KGJh c2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiYgX19pb3MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Jv dXQpOwoKICAgIHByb3RlY3RlZDoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgogICAg ICBzaXplX3QgX01fYnVmX3NpemU7CgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXplX29wdDsKCgoK ICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9i ZWc7CiAgICAgIGNoYXJfdHlwZSogX01faW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2Vu ZDsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9j dXI7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1v ZGUgX01fbW9kZTsKCgogICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9N X2J1Zl9sb2NhbGVfaW5pdDsKCgoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19wYmFj a19zaXplID0gMTsKICAgICAgY2hhcl90eXBlIF9NX3BiYWNrW19TX3BiYWNrX3NpemVdOwogICAg ICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNr X2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKICAgICAgZnBvczxfX3N0YXRl X3R5cGU+IF9NX3BvczsKCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfY3JlYXRlKCkKICAg ICAgewogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKICAgICAgICAgICAg c2l6ZV90IF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgICAgc2l6ZV90 IF9fbGVuID0gbWluKF9TX3BiYWNrX3NpemUsIF9fZGlzdCk7CiAgICAgICAgICAgIHRyYWl0c190 eXBlOjpjb3B5KF9NX3BiYWNrLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJh Y2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0g X01faW5fZW5kOwogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9wYmFjaywgX01f cGJhY2sgKyBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOwogICAgICAg ICAgfQogICAgICB9CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKQogICAg ICB7CiAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBz aXplX3QgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJhY2s7CgoKICAgICAgICAgICAgc2l6 ZV90IF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9IF9NX2lu X2VuZCAtIF9NX3BiYWNrOwogICAgICAgICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9NX3BiYWNr X2VuZF9zYXZlIC0gX01fYnVmOwogICAgICAgICAgICBpZiAoX19wYmFja19sZW4gPiBfX3NhdmVf bGVuKQogICAgICAgICAgICAgIF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19zYXZlX2xlbjsK CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJfc2F2ZSArIF9fb2Zm X2N1ciwKICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSArIF9fb2ZmX2Vu ZCk7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX19udWxsOwogICAgICAgICAgICBf TV9wYmFja19lbmRfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IGZh bHNlOwogICAgICAgICAgfQogICAgICB9CgoKCiAgICAgIHZvaWQKICAgICAgX01faW5fY3VyX21v dmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9vdXRf Y3VyOwogICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdG91dCAmJiBf TV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAgICB9CiMgMjAy ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKICAgICAgdm9pZAogICAgICBfTV9v dXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9 IF9NX2luX2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVz dGluICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAg ICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9N X291dF9lbmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAg ICAgICAgIF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9m Zl90eXBlCiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBf X3JldCA9IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAg ICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRf YmVnICsgX01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgIF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAg ICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAogICAgICB+ YmFzaWNfc3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7 CiAgICAgICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAg ICAgICAgX01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgfQoKCiAgICAgIGxv Y2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAg bG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7 CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9j KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fYnVmX2xvY2FsZTsgfQoKCiAgICAgIF9fc3RyZWFt YnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p CiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3MsIF9fbik7IH0KCiAgICAgIHBvc190eXBl CiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5 LAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6 aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBf X3dheSwgX19tb2RlKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla3Bvcyhwb3NfdHlw ZSBfX3NwLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3Nf YmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9f c3AsIF9fbW9kZSk7IH0KCiAgICAgIGludAogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+ c3luYygpOyB9CgoKCiAgICAgIHN0cmVhbXNpemUKICAgICAgaW5fYXZhaWwoKQogICAgICB7CiAg ICAgICAgc3RyZWFtc2l6ZSBfX3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1 ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQp CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9w YmFja19lbmRfc2F2ZSAtIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICAgICAgICAgICAgc2l6ZV90 IF9fcGJhY2tfbGVuID0gX01faW5fY3VyIC0gX01fcGJhY2s7CiAgICAgICAgICAgICAgICBfX3Jl dCA9IF9fc2F2ZV9sZW4gLSBfX3BiYWNrX2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRyKCk7 CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT5zaG93bWFu eWMoKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIGludF90eXBlCiAgICAg IHNuZXh0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl b2YoKTsKICAgICAgICByZXR1cm4gKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT5zYnVt cGMoKSwgX19lb2YpCiAgICAgICAgICAgICAgICA/IF9fZW9mIDogdGhpcy0+c2dldGMoKSk7CiAg ICAgIH0KCiAgICAgIGludF90eXBlCiAgICAgIHNidW1wYygpOwoKICAgICAgaW50X3R5cGUKICAg ICAgc2dldGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9N X2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICBfX3JldCA9IHRyYWl0 c190eXBlOjp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOwogICAgICAgIGVsc2UKICAgICAg ICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAg ICB9CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z aXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19uKTsgfQoKCiAgICAg IGludF90eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIGludF90eXBl CiAgICAgIHN1bmdldGMoKTsKCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUg X19jKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgc3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3Ms IHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9 CgogICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19zdHJlYW1idWYoKQogICAgICA6IF9NX2J1Zihf X251bGwpLCBfTV9idWZfc2l6ZSgwKSwgX01fYnVmX3NpemVfb3B0KDgxOTIpLAogICAgICBfTV9i dWZfdW5pZmllZChmYWxzZSksIF9NX2luX2JlZygwKSwgX01faW5fY3VyKDApLCBfTV9pbl9lbmQo MCksCiAgICAgIF9NX291dF9iZWcoMCksIF9NX291dF9jdXIoMCksIF9NX291dF9lbmQoMCksCiAg ICAgIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5tb2RlKDApKSwgX01fYnVmX2xvY2FsZShsb2NhbGUo KSksCiAgICAgIF9NX3BiYWNrX2N1cl9zYXZlKDApLCBfTV9wYmFja19lbmRfc2F2ZSgwKSwKICAg ICAgX01fcGJhY2tfaW5pdChmYWxzZSkKICAgICAgeyB9CgoKICAgICAgY2hhcl90eXBlKgogICAg ICBlYmFjaygpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgog ICAgICBncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUq CiAgICAgIGVncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9CgogICAgICB2b2lkCiAg ICAgIGdidW1wKGludCBfX24pIHsgX01faW5fY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAg ICBzZXRnKGNoYXJfdHlwZSogX19nYmVnLCBjaGFyX3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSog X19nZW5kKQogICAgICB7CiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOwogICAgICAgIF9NX2lu X2N1ciA9IF9fZ25leHQ7CiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOwogICAgICAgIGlmICgh KF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkK ICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAg ICAgY2hhcl90eXBlKgogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0K CiAgICAgIGNoYXJfdHlwZSoKICAgICAgcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7 IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRf ZW5kOyB9CgogICAgICB2b2lkCiAgICAgIHBidW1wKGludCBfX24pIHsgX01fb3V0X2N1ciArPSBf X247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBl KiBfX3BlbmQpCiAgICAgIHsKICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJl ZzsKICAgICAgICBfTV9vdXRfZW5kID0gX19wZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBp b3NfYmFzZTo6b3V0KSAmJiBfX3BiZWcgJiYgX19wZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9N X21vZGUgfCBpb3NfYmFzZTo6b3V0OwogICAgICB9CgoKCiAgICAgIHZpcnR1YWwgdm9pZAogICAg ICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiAgICAgICAgaWYgKF9NX2J1Zl9s b2NhbGUgIT0gX19sb2MpCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAgICAgIH0K CgogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qCiAgICAg IHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0aGlzOyB9Cgog ICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpz ZWVrZGlyLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8 IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0K CiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwKICAgICAgICAg ICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQog ICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIGlu dAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQog ICAgICBzaG93bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUK ICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0 dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBl Ojplb2YoKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpCiAgICAgIHsK ICAgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29s IF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRlcmZsb3coKSwg X19yZXQpOwogICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9pbl9j dXIgPCBfTV9pbl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0cGVuZGluZykK ICAgICAgICAgIHsKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUo Kl9NX2luX2N1cik7CiAgICAgICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAgICBpZiAoX01f YnVmX3VuaWZpZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICAgICAgKytf TV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAg ICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRzX3R5 cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCgogICAgICB2 aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90 eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9m KCk7IH0KIyA0NzggIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMwogICAgcHJpdmF0 ZToKICAgICAgYmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IH07Cgog ICAgICBfX3N0cmVhbWJ1Zl90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3QgX19zdHJlYW1idWZf dHlwZSYpIHsgcmV0dXJuICp0aGlzOyB9OwoKICAgIH07Cn0KCgoKCgojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RyZWFtYnVmLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY29uc3Qgc2l6ZV90CiAgICBiYXNp Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGJhY2tfc2l6ZTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsK ICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgewog ICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICoodGhpcy0+Z3B0cigpKTsKICAgICAgICAgIF9NX2lu X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUo X19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7 CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAg ICAgIGJvb2wgX190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsK ICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwgIXRyYWl0c190eXBlOjplcShfX2MsIHRoaXMtPmdwdHIo KVstMV0pKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKHRyYWl0c190eXBlOjp0b19p bnRfdHlwZShfX2MpKTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9t b3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlz LT5ncHRyKCkpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19z dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+OjoKICAgIHN1bmdldGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3Jl dDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXIpCiAgICAgICAg ewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNf dHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg ICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGMoY2hhcl90eXBlIF9fYykK ICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9vdXRfYnVmX3NpemUoKSkK ICAgICAgICB7CiAgICAgICAgICAqX01fb3V0X2N1ciA9IF9fYzsKICAgICAgICAgIF9NX291dF9j dXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9f Yyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0 cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFt c2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNnZXRuKGNo YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3Jl dCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBzaXpl X3QgX19idWZfbGVuID0gX01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgaWYgKF9fYnVm X2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19yZW1haW5pbmcg PSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVu LCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9p bl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAg ICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01faW5fY3VyX21vdmUoX19sZW4pOwogICAg ICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsKICAgICAgICAgICAgICBpZiAo IXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysr LCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICArK19f cmV0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9 CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg c3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNw dXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3Ry ZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAg ICAgICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAg IGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUg X19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9 IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6 Y29weShfTV9vdXRfY3VyLCBfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xl bjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9t b3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRy YWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNf dHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgICArK19fczsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFt c2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9f aW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0 cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpp bnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICBzdHJl YW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgc3RyZWFtc2l6ZSBf X3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9fc2JvdXQtPl9NX21vZGUgJiBpb3NfYmFz ZTo6b3V0OwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB3aGlsZSAoX190ZXN0cHV0ICYm IF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX2J1ZnNp emUgIT0gMCAmJiBfX3NiaW4tPmdwdHIoKSAhPSBfX251bGwKICAgICAgICAgICAgICAgICAgJiYg X19zYmluLT5ncHRyKCkgKyBfX2J1ZnNpemUgPD0gX19zYmluLT5lZ3B0cigpKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICBfX3h0cmN0ID0gX19zYm91dC0+c3B1dG4oX19zYmlu LT5ncHRyKCksIF9fYnVmc2l6ZSk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7 CiAgICAgICAgICAgICAgICAgIF9fc2Jpbi0+X01faW5fY3VyX21vdmUoX194dHJjdCk7CiAgICAg ICAgICAgICAgICAgIGlmIChfX3h0cmN0ICE9IF9fYnVmc2l6ZSkKICAgICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPQogICAgICAgICAgICAgICAg ICAgIF9fc2Jpbi0+X01fYnVmX3NpemVfb3B0ID4gMCA/IF9fc2Jpbi0+X01fYnVmX3NpemVfb3B0 IDogMTsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiA9CiAgICAgICAgICAgICAgICAg ICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq IF9fc2l6ZSkpOwogICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fY2hhcnNyZWFkID0gX19z YmluLT5zZ2V0bihfX2J1ZiwgX19zaXplKTsKICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9f c2JvdXQtPnNwdXRuKF9fYnVmLCBfX2NoYXJzcmVhZCk7CiAgICAgICAgICAgICAgICAgIF9fcmV0 ICs9IF9feHRyY3Q7CiAgICAgICAgICAgICAgICAgIGlmIChfX3h0cmN0ICE9IF9fY2hhcnNyZWFk KQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX3NiaW4tPnNnZXRjKCksIF9UcmFpdHM6OmVv ZigpKSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIF9fYnVmc2l6ZSA9IF9f c2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgewogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jh c2U6OmZhaWxiaXQpOwogICAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1 cm4gX19yZXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1i dWY8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3Ry ZWFtYnVmcyhiYXNpY19pb3M8Y2hhcj4mLCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAogICAgICAg ICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPGNoYXI+Kik7CgoKICBleHRlcm4gdGVtcGxh dGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAg c3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPHdjaGFyX3Q+JiwgYmFz aWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVh bWJ1Zjx3Y2hhcl90PiopOwoKfQojIDQ5MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVm IiAyIDMKIyA1MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9iYXNpY19pb3MuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 cmVhbWJ1Zl9pdGVyYXRvci5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dHJlYW1idWZfaXRlcmF0b3IuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0 b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9D aGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoK CgogICAgICBtdXRhYmxlIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBpbnRfdHlwZSBf TV9jOwoKICAgIHB1YmxpYzoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkKICAg ICAgOiBfTV9zYnVmKDApLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3Ry ZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1 ZihfX3MucmRidWYoKSksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCiAgICAgIGlzdHJl YW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3Ni dWYoX19zKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKCiAgICAgIGNoYXJfdHlwZQog ICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6dG9fY2hh cl90eXBlKF9NX2dldCgpKTsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3Bl cmF0b3IrKygpCiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190 eXBlOjplb2YoKTsKICAgICAgICBpZiAoX01fc2J1ZiAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5 cGUoX01fc2J1Zi0+c2J1bXBjKCksIF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYgPSAwOwogICAg ICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg ICAgIH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAg ICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK ICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yIF9fb2xkID0gKnRoaXM7CiAgICAgICAgaWYgKF9N X3NidWYKICAgICAgICAgICAgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX29sZC5fTV9j ID0gX01fc2J1Zi0+c2J1bXBjKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19lb2YpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAg ICAgX01fYyA9IF9fZW9mOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCgoKICAgICAg Ym9vbAogICAgICBlcXVhbChjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0CiAg ICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK ICAgICAgICBib29sIF9fdGhpc2VvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9nZXQo KSwgX19lb2YpOwogICAgICAgIGJvb2wgX19iZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl KF9fYi5fTV9nZXQoKSwgX19lb2YpOwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVv ZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgogICAgcHJpdmF0ZToKICAg ICAgaW50X3R5cGUKICAgICAgX01fZ2V0KCkgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGlu dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGludF90eXBlIF9fcmV0 ID0gX19lb2Y7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlm ICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX2MsIF9fZW9mKSkKICAgICAgICAgICAgICBf X3JldCA9IF9NX2M7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5 cGU6OmVxX2ludF90eXBlKChfX3JldCA9IF9NX3NidWYtPnNnZXRjKCkpLCBfX2VvZikpCiAgICAg ICAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7 CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRl cmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVh bChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0 ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19i KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj bGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRl cmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3Ry ZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1 ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUKICAgICAg b3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkKICAgICAgOiBf TV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJl YW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9z YnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh dG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh dG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9Cgog ICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgdGhyb3coKQog ICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAg b3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGJvb2wK ICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9mYWlsZWQ7IH0K ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19jKQogICAg ewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUo X01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgIF9NX2ZhaWxlZCA9 IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KfQojIDQxICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9j YWxlX2ZhY2V0cy5oIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAxIDMK IyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djdHlwZSIgMwoKCgoKIyAxICIvdXNyL2luY2x1 ZGUvd2N0eXBlLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAxICIvdXNy L2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzYg Ii91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg MwoKCgojIDY0ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBs b25nIGludCB3Y3R5cGVfdDsKCiMgODYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwplbnVtCnsK ICBfX0lTd3VwcGVyID0gMCwKICBfX0lTd2xvd2VyID0gMSwKICBfX0lTd2FscGhhID0gMiwKICBf X0lTd2RpZ2l0ID0gMywKICBfX0lTd3hkaWdpdCA9IDQsCiAgX19JU3dzcGFjZSA9IDUsCiAgX19J U3dwcmludCA9IDYsCiAgX19JU3dncmFwaCA9IDcsCiAgX19JU3dibGFuayA9IDgsCiAgX19JU3dj bnRybCA9IDksCiAgX19JU3dwdW5jdCA9IDEwLAogIF9fSVN3YWxudW0gPSAxMSwKCiAgX0lTd3Vw cGVyID0gKChfX0lTd3VwcGVyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpIDw8 IDI0KSA6ICgoX19JU3d1cHBlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkg PDwgOCkgOiAoKF9fSVN3dXBwZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikp ID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA+PiAyNCkpKSksCiAgX0lTd2xv d2VyID0gKChfX0lTd2xvd2VyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpIDw8 IDI0KSA6ICgoX19JU3dsb3dlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkg PDwgOCkgOiAoKF9fSVN3bG93ZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikp ID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA+PiAyNCkpKSksCiAgX0lTd2Fs cGhhID0gKChfX0lTd2FscGhhKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpIDw8 IDI0KSA6ICgoX19JU3dhbHBoYSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkg PDwgOCkgOiAoKF9fSVN3YWxwaGEpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkp ID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA+PiAyNCkpKSksCiAgX0lTd2Rp Z2l0ID0gKChfX0lTd2RpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpIDw8 IDI0KSA6ICgoX19JU3dkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkg PDwgOCkgOiAoKF9fSVN3ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkp ID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA+PiAyNCkpKSksCiAgX0lTd3hk aWdpdCA9ICgoX19JU3d4ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkp IDw8IDI0KSA6ICgoX19JU3d4ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGln aXQpKSA8PCA4KSA6ICgoX19JU3d4ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4 ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDI0KSkpKSwK ICBfSVN3c3BhY2UgPSAoKF9fSVN3c3BhY2UpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3Nw YWNlKSkgPDwgMjQpIDogKChfX0lTd3NwYWNlKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3 c3BhY2UpKSA8PCA4KSA6ICgoX19JU3dzcGFjZSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT d3NwYWNlKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDI0KSkpKSwK ICBfSVN3cHJpbnQgPSAoKF9fSVN3cHJpbnQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3By aW50KSkgPDwgMjQpIDogKChfX0lTd3ByaW50KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3 cHJpbnQpKSA8PCA4KSA6ICgoX19JU3dwcmludCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT d3ByaW50KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDI0KSkpKSwK ICBfSVN3Z3JhcGggPSAoKF9fSVN3Z3JhcGgpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2dy YXBoKSkgPDwgMjQpIDogKChfX0lTd2dyYXBoKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3 Z3JhcGgpKSA8PCA4KSA6ICgoX19JU3dncmFwaCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2dyYXBoKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDI0KSkpKSwK ICBfSVN3YmxhbmsgPSAoKF9fSVN3YmxhbmspIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2Js YW5rKSkgPDwgMjQpIDogKChfX0lTd2JsYW5rKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3 YmxhbmspKSA8PCA4KSA6ICgoX19JU3dibGFuaykgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2JsYW5rKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDI0KSkpKSwK ICBfSVN3Y250cmwgPSAoKF9fSVN3Y250cmwpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2Nu dHJsKSkgPDwgMjQpIDogKChfX0lTd2NudHJsKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3 Y250cmwpKSA8PCA4KSA6ICgoX19JU3djbnRybCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2NudHJsKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDI0KSkpKSwK ICBfSVN3cHVuY3QgPSAoKF9fSVN3cHVuY3QpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3B1 bmN0KSkgPDwgMjQpIDogKChfX0lTd3B1bmN0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3 cHVuY3QpKSA8PCA4KSA6ICgoX19JU3dwdW5jdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT d3B1bmN0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDI0KSkpKSwK ICBfSVN3YWxudW0gPSAoKF9fSVN3YWxudW0pIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2Fs bnVtKSkgPDwgMjQpIDogKChfX0lTd2FsbnVtKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3 YWxudW0pKSA8PCA4KSA6ICgoX19JU3dhbG51bSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2FsbnVtKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDI0KSkpKQp9 OwoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgpleHRlcm4gaW50IGlzd2FsbnVtICh3aW50X3QgX193 YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dhbHBoYSAod2ludF90IF9fd2MpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmwgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBpc3dkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlz d2dyYXBoICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd2xvd2VyICh3 aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3dwcmludCAod2ludF90IF9fd2Mp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdCAod2ludF90IF9fd2MpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBpc3dzcGFjZSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBpc3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBp c3d4ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2JsYW5r ICh3aW50X3QgX193YykgdGhyb3cgKCk7CiMgMTg2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMK ZXh0ZXJuIHdjdHlwZV90IHdjdHlwZSAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBpc3djdHlwZSAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYykg dGhyb3cgKCk7CgoKCgoKCgoKCgp0eXBlZGVmIF9fY29uc3QgX19pbnQzMl90ICp3Y3RyYW5zX3Q7 CgoKCgoKCgpleHRlcm4gd2ludF90IHRvd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoK ZXh0ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCn0KIyAyMjgg Ii91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKCgoKCmV4dGVybiB3Y3RyYW5z X3Qgd2N0cmFucyAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgpleHRlcm4g d2ludF90IHRvd2N0cmFucyAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MpIHRocm93ICgp OwoKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW1fbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3Qg X19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3YWxwaGFfbCAod2ludF90IF9f d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmxf bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4g aW50IGlzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBpc3dncmFwaF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xv Y2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBf X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3ByaW50X2wgKHdp bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg aXN3cHVuY3RfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBpc3dzcGFjZV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2Fs ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xv Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0X2wgKHdp bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg aXN3YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK CgpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19s b2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3djdHlwZV9s ICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNjLCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAg IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlcl9sICh3aW50X3QgX193Yywg X19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBlcl9s ICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3 Y3RyYW5zX3Qgd2N0cmFuc19sIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3Qg X19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnNfbCAod2lu dF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgp9CiMgNTMgIi91c3IvaW5jbHVkZS9jKysv My4yL2N3Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCm5h bWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OndjdHlwZV90OwogIHVz aW5nIDo6d2N0cmFuc190OwoKICB1c2luZyA6Omlzd2FsbnVtOwogIHVzaW5nIDo6aXN3YWxwaGE7 CiAgdXNpbmcgOjppc3dibGFuazsKICB1c2luZyA6Omlzd2NudHJsOwogIHVzaW5nIDo6aXN3ZGln aXQ7CiAgdXNpbmcgOjppc3dncmFwaDsKICB1c2luZyA6Omlzd2xvd2VyOwogIHVzaW5nIDo6aXN3 cHJpbnQ7CiAgdXNpbmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3B1bmN0OwogIHVzaW5nIDo6 aXN3c3BhY2U7CiAgdXNpbmcgOjppc3d1cHBlcjsKICB1c2luZyA6Omlzd3hkaWdpdDsKICB1c2lu ZyA6Omlzd2N0eXBlOwogIHVzaW5nIDo6dG93bG93ZXI7CiAgdXNpbmcgOjp0b3d1cHBlcjsKICB1 c2luZyA6OnRvd2N0cmFuczsKICB1c2luZyA6OndjdHJhbnM7CiAgdXNpbmcgOjp3Y3R5cGU7Cn0K IyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQ7 CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2N0eXBlX2Jhc2Uu aCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jdHlwZV9i YXNlLmgiIDMKICBzdHJ1Y3QgY3R5cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGNvbnN0IGludCog X190b190eXBlOwoKCgogICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtYXNrOwogICAgc3RhdGlj IGNvbnN0IG1hc2sgdXBwZXIgPSBfSVN1cHBlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2Vy ID0gX0lTbG93ZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbHBoYSA9IF9JU2FscGhhOwogICAg c3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSBfSVNkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNr IHhkaWdpdCA9IF9JU3hkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gX0lTc3Bh Y2U7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwcmludCA9IF9JU3ByaW50OwogICAgc3RhdGljIGNv bnN0IG1hc2sgZ3JhcGggPSBfSVNncmFwaDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0g X0lTY250cmw7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCA9IF9JU3B1bmN0OwogICAgc3Rh dGljIGNvbnN0IG1hc2sgYWxudW0gPSBfSVNhbG51bTsKICB9OwojIDY0ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpm YWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlw ZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAg ICAgY29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0 IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAg ICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8s IF9faGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19t LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAg Y2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAg IHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJf dHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xv d2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUK ICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVu KF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8s IGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFy cm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgog ICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGks CiAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAg IHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNp emVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVh bAogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wK ICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s IGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0g MDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sg X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg ICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs IGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xv LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90 eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg ICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgog ICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAg ICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFy CiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90 eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBf X2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9i YXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgc3Rh dGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19y ZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAg cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBi b29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s IGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVh bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJf dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90 eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0 OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19j KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVy KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUq IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJf dHlwZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0 IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGks IGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19u YXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29u c3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z dCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBf X2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9j YWxlOjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBl PGNoYXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAg ICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsKICAgICAg X190b190eXBlIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwogICAgICBj b25zdCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk IGlkOwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3RhdGljX2Nh c3Q8dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoY29uc3Qg bWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDAp OwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IG1h c2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNpemVfdCBf X3JlZnMgPSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9f YykgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciog X19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5l IGNvbnN0IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNv bnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNj YW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25z dDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3Qg dGhyb3coKQogICAgICB7IHJldHVybiBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IG1h c2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICB+ Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90 eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f aXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9f dmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2Fu X2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o aSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9u b3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29u c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg IGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hh cl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190 b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25z dCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNo YXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlw ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2Rm YXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0 IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBf X2xvYyk7CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMg X19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0 eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tf dHlwZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7 CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp dAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBj dHlwZShfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3Rl ZDoKICAgICAgX193bWFza190eXBlCiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFz ayBfX20pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1 YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBf X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBj aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNo YXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVy KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl CiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgog ICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5 cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNo YXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBj b25zdDsKCiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAg IHVzZV9mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAz CiMgMzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jdHlwZV9pbmxpbmUu aCIgMwogIGJvb2wKICBjdHlwZTxjaGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25z dAogIHsgcmV0dXJuIF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYg X19tOyB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9f bG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxl IChfX2xvdyA8IF9faGlnaCkKICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1 bnNpZ25lZCBjaGFyPigqX19sb3crKyldOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0 IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9f bG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19o aWdoCiAgICAgICAgICAgJiYgIShfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigq X19sb3cpXSAmIF9fbSkpCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQoKICBj b25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hh ciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cg PCBfX2hpZ2gKICAgICAgICAgICAmJiAoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh cj4oKl9fbG93KV0gJiBfX20pICE9IDApCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7 CiAgfQojIDQwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIg MwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lIDog cHVibGljIGN0eXBlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNo YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh bAogICAgICB+Y3R5cGVfYnluYW1lKCkgeyB9OwogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0 eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7 CgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTx3Y2hhcl90Pjo6Y3R5cGVfYnluYW1lKGNv bnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L2NvZGVjdnQuaCIgMSAzCiMgNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5o IiAzCgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSByZXN1bHQK ICAgIHsKICAgICAgb2ssCiAgICAgIHBhcnRpYWwsCiAgICAgIGVycm9yLAogICAgICBub2NvbnYK ICAgIH07CiAgfTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBf RXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9i YXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7 CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsK ICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJu VCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAg cmVzdWx0CiAgICAgIG91dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSog X19mcm9tLAogICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGlu dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0 ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv bnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwg X19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rv LCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hp ZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBf X3RvX2VuZCwKICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9f bmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z dCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t X2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5 cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBf X3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0 ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIGludAogICAg ICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2Rp bmcoKTsgfQoKICAgICAgYm9vbAogICAgICBhbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQog ICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdheXNfbm9jb252KCk7IH0KCiAgICAgIGludAogICAg ICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f ZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4 KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBf X2VuZCwgX19tYXgpOyB9CgogICAgICBpbnQKICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93 KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVk OgogICAgICBleHBsaWNpdAogICAgICBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19y ZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAg IH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAg ICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20s CiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu X3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRl cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90 eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5f dHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAg ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t X2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJu X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5 cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2Vu Y29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9f YWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAg ICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t LAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgp IGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25z dCB0aHJvdygpID0gMDsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5 cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAg OiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3Rh dGVUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3Vs dCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVk ZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBl OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp dAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0 cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAg cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0 dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJu X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5k LCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5 cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBl KiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hp ZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAg ICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7 CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBj b25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSog X19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAg aW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50 ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f ZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fs d2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f bGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAg ICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0 OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7 CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQs IHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRl cm5ULCBfU3RhdGVUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIs IGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNo YXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hh ciBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBl ZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2Fs ZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAw KTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAg IHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBp bnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv bV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRl cm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJu X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9f dW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAg ICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBj b25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3Rh dGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90 eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAg ICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAg ICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAg ICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAg ZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAg ICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20s CiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhy b3coKTsKICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hh ciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8d2NoYXJf dCwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiB3Y2hh cl90IGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5 cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9j YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9 IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAg ICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0 IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19m cm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4 dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRl cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBk b191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5 cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICAgICBleHRlcm5f dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19p bihzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9f ZnJvbSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsCiAgICAgICAgICAgICBjb25zdCBl eHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8s IGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19u ZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRvX2VuY29kaW5nKCkgY29uc3Qg dGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgYm9vbCBkb19hbHdheXNfbm9jb252KCkgY29u c3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRvX2xlbmd0aChjb25zdCBzdGF0 ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgICAgICBj b25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBf U3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJu VCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAg ICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAg OiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKSB7IH0KCiAgICBw cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnRfYnluYW1lKCkgeyB9CiAgICB9 OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvY29kZWN2dF9z cGVjaWFsaXphdGlvbnMuaCIgMSAzCiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu dXgvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAzCiAgY2xhc3MgX19lbmNfdHJhaXRz CiAgewogIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgaWNvbnZfdCBfX2Rlc2NfdHlwZTsKCiAgcHJv dGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX21heF9zaXplID0gMzI7CgogICAgY2hh ciBfTV9pbnRfZW5jW19TX21heF9zaXplXTsKCiAgICBjaGFyIF9NX2V4dF9lbmNbX1NfbWF4X3Np emVdOwoKCiAgICBfX2Rlc2NfdHlwZSBfTV9pbl9kZXNjOwoKICAgIF9fZGVzY190eXBlIF9NX291 dF9kZXNjOwoKCiAgICBpbnQgX01fZXh0X2JvbTsKCgogICAgaW50IF9NX2ludF9ib207CgogIHB1 YmxpYzoKICAgIGV4cGxpY2l0IF9fZW5jX3RyYWl0cygpCiAgICA6IF9NX2luX2Rlc2MoMCksIF9N X291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIG1l bXNldChfTV9pbnRfZW5jLCAwLCBfU19tYXhfc2l6ZSk7CiAgICAgIG1lbXNldChfTV9leHRfZW5j LCAwLCBfU19tYXhfc2l6ZSk7CiAgICB9CgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKGNvbnN0 IGNoYXIqIF9faW50LCBjb25zdCBjaGFyKiBfX2V4dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19pYm9tID0gMCwgaW50IF9fZWJvbSA9IDApCiAgICA6IF9NX2luX2Rlc2MoMCksIF9N X291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIHN0 cm5jcHkoX01faW50X2VuYywgX19pbnQsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9l eHRfZW5jLCBfX2V4dCwgX1NfbWF4X3NpemUpOwogICAgfQoKCgoKCgogICAgX19lbmNfdHJhaXRz KGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygw KQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21h eF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19t YXhfc2l6ZSk7CiAgICAgIF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBfTV9p bnRfYm9tID0gX19vYmouX01faW50X2JvbTsKICAgIH0KCgogICAgX19lbmNfdHJhaXRzJgogICAg b3BlcmF0b3I9KGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopCiAgICB7CiAgICAgIHN0cm5jcHko X01faW50X2VuYywgX19vYmouX01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5 KF9NX2V4dF9lbmMsIF9fb2JqLl9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01faW5f ZGVzYyA9IDA7CiAgICAgIF9NX291dF9kZXNjID0gMDsKICAgICAgX01fZXh0X2JvbSA9IF9fb2Jq Ll9NX2V4dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogICAgfl9fZW5jX3RyYWl0cygpCiAgICB7CiAgICAgIF9fZGVz Y190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmIChf TV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2UoX01f aW5fZGVzYyk7CiAgICAgIGlmIChfTV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycikK ICAgICAgICBpY29udl9jbG9zZShfTV9vdXRfZGVzYyk7CiAgICB9CgogICAgdm9pZAogICAgX01f aW5pdCgpCiAgICB7CiAgICAgIGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRf Y2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmICghX01faW5fZGVzYykKICAgICAgICB7CiAgICAg ICAgICBfTV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRfZW5jKTsKICAg ICAgICAgIGlmIChfTV9pbl9kZXNjID09IF9fZXJyKQogICAgICAgICAgICBfX3Rocm93X3J1bnRp bWVfZXJyb3IoImNyZWF0aW5nIGljb252IGlucHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAg ICAgIH0KICAgICAgaWYgKCFfTV9vdXRfZGVzYykKICAgICAgICB7CiAgICAgICAgICBfTV9vdXRf ZGVzYyA9IGljb252X29wZW4oX01fZXh0X2VuYywgX01faW50X2VuYyk7CiAgICAgICAgICBpZiAo X01fb3V0X2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigi Y3JlYXRpbmcgaWNvbnYgb3V0cHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAgIH0KICAg IH0KCiAgICBib29sCiAgICBfTV9nb29kKCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUg X19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgYm9vbCBfX3Rlc3Qg PSBfTV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnI7CiAgICAgIF9fdGVzdCAmPSBfTV9v dXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycjsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAg IH0KCiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9pbl9kZXNjcmlwdG9yKCkKICAg IHsgcmV0dXJuICZfTV9pbl9kZXNjOyB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9n ZXRfb3V0X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9NX291dF9kZXNjOyB9CgogICAgaW50 CiAgICBfTV9nZXRfZXh0ZXJuYWxfYm9tKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9ib207IH0KCiAg ICBpbnQKICAgIF9NX2dldF9pbnRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01faW50X2JvbTsg fQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfaW50ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJu IF9NX2ludF9lbmM7IH0KCiAgICBjb25zdCBjaGFyKgogICAgX01fZ2V0X2V4dGVybmFsX2VuYygp CiAgICB7IHJldHVybiBfTV9leHRfZW5jOyB9CiAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY2xhc3MgY29kZWN2dDxfSW50ZXJuVCwg X0V4dGVyblQsIF9fZW5jX3RyYWl0cz4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9i YXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYg X0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7 CiAgICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIHN0YXRlX3R5cGU7CiAgICAgIHR5cGVkZWYgX19l bmNfdHJhaXRzOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190 cmFpdHMgX19lbmNfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4 cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0 X2Fic3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3Jl ZnMpCiAgICAgIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChfX2VuY190eXBlKiBf X2VuYywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8 aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCiAgICAgIHsgfQoK ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAgICAg dmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGlu dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9t X2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVy bl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5f dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191 bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAg ICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv bnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0 ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5 cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAg ICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAg IGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBk b19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwK ICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBj b25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJv dygpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl cm5UPgogICAgbG9jYWxlOjppZAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5j X3RyYWl0cz46OmlkOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Q+CiAgICBpbmxpbmUgc2l6 ZV90CiAgICBfX2ljb252X2FkYXB0b3Ioc2l6ZV90KCpfX2Z1bmMpKGljb252X3QsIF9ULCBzaXpl X3QqLCBjaGFyKiosIHNpemVfdCopLAogICAgICAgICAgICAgICAgICAgIGljb252X3QgX19jZCwg Y2hhcioqIF9faW5idWYsIHNpemVfdCogX19pbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgIGNo YXIqKiBfX291dGJ1Ziwgc2l6ZV90KiBfX291dGJ5dGVzKQogICAgeyByZXR1cm4gX19mdW5jKF9f Y2QsIChfVClfX2luYnVmLCBfX2luYnl0ZXMsIF9fb3V0YnVmLCBfX291dGJ5dGVzKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0 X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0 cz46OgogICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBf X2Zyb20sCiAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGlu dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4 dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg Y29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAg ICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3Rh dGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2Nf dHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfb3V0X2Rlc2NyaXB0b3IoKTsKICAgICAgICAg IGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAg ICBzaXplX3QgX19mYnl0ZXMgPSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsK ICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7 CiAgICAgICAgICBzaXplX3QgX190Ynl0ZXMgPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9f dG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihf X3RvKTsKICAgICAgICAgIGNoYXIqIF9fY2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoK CgoKCgogICAgICAgICAgaW50IF9faW50X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2ludGVybmFsX2Jv bSgpOwogICAgICAgICAgaWYgKF9faW50X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAg IHNpemVfdCBfX3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGludGVy bl90eXBlKiBfX2NmaXhlZCA9IHN0YXRpY19jYXN0PGludGVybl90eXBlKj4oX19idWlsdGluX2Fs bG9jYShzaXplb2YoaW50ZXJuX3R5cGUpICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAg X19jZml4ZWRbMF0gPSBzdGF0aWNfY2FzdDxpbnRlcm5fdHlwZT4oX19pbnRfYm9tKTsKICAgICAg ICAgICAgICBjaGFyX3RyYWl0czxpbnRlcm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zy b20sIF9fc2l6ZSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh cio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNv bnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJl9fZmJ5dGVzLCAmX19jdG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhl ZCA9IGNvbnN0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zy b20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19j b252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwgJl9fZmJ5dGVz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RieXRl cyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8 Y29uc3QgaW50ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSBy ZWludGVycHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0 ID0gY29kZWN2dF9iYXNlOjpvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZmJ5dGVzIDwgX19mbXVsdGlwbGUgKiAoX19mcm9t X2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJv bV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwog ICAgICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBl Kj4oX19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6cGFydGlh bDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBf X3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVu YW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVy blQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYg X19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBf X3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3Vs dCBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2Qo KSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9f ZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUu X01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBs ZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVs dGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVp bnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBzaXplX3QgX19jb252ID0gX19p Y29udl9hZGFwdG9yKGljb252LCpfX2Rlc2MsIF9fbnVsbCwgX19udWxsLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RsZW4pOwoKICAgICAgICAg IGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f dG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAg ICAgICAgaWYgKF9fdGxlbiA9PSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pKQogICAg ICAgICAgICAgICAgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6Om5vY29udjsKICAgICAgICAgICAgICBl bHNlIGlmIChfX3RsZW4gPT0gMCkKICAgICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNl OjpvazsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRf YmFzZTo6cGFydGlhbDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBf X3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4K ICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg X19lbmNfdHJhaXRzPjo6CiAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRl cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQs IGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBpbnRlcm5fdHlwZSog X190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3Rv X25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJy b3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBl ZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3Qg X19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAg ICAgICAgIGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAg ICAgICAgICBzaXplX3QgX19mbGVuID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJv bSk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5 cGUpOwogICAgICAgICAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0g X190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+ KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJvbTsKICAgICAgICAgIHNpemVfdCBfX2NvbnY7 CgoKCgoKCiAgICAgICAgICBpbnQgX19leHRfYm9tID0gX19zdGF0ZS5fTV9nZXRfZXh0ZXJuYWxf Ym9tKCk7CiAgICAgICAgICBpZiAoX19leHRfYm9tKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207CiAgICAgICAgICAgICAgZXh0 ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2J1aWx0aW5f YWxsb2NhKHNpemVvZihleHRlcm5fdHlwZSkgKiAoX19zaXplICsgMSkpKTsKICAgICAgICAgICAg ICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGV4dGVybl90eXBlPihfX2V4dF9ib20pOwogICAg ICAgICAgICAgIGNoYXJfdHJhaXRzPGV4dGVybl90eXBlPjo6Y29weShfX2NmaXhlZCArIDEsIF9f ZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxj aGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihp Y29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAg IGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9 IGNvbnN0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20g PSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252 ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAg ICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg ZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVy cHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0gY29k ZWN2dF9iYXNlOjpvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaWYgKF9fZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9tX2Vu ZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9u ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAg ICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4o X19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6cGFydGlhbDsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3Jl dCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l IF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNf dHJhaXRzPjo6CiAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgIHsKICAgICAgaW50 IF9fcmV0ID0gMDsKICAgICAgaWYgKHNpemVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5U KSkKICAgICAgICBfX3JldCA9IHNpemVvZihfSW50ZXJuVCkvc2l6ZW9mKF9FeHRlcm5UKTsKICAg ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw ZW5hbWUgX0V4dGVyblQ+CiAgICBib29sCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg X19lbmNfdHJhaXRzPjo6CiAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAg eyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l IF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNf dHJhaXRzPjo6CiAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90 eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXpl X3QgX19tYXgpIGNvbnN0CiAgICB7IHJldHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVf dD4oX19lbmQgLSBfX2Zyb20pKTsgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0 eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQs IF9fZW5jX3RyYWl0cz46OgogICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsg cmV0dXJuIDE7IH0KIyAzMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAy IDMKIyA0MjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMK CgoKICBjbGFzcyBfX251bV9iYXNlCiAgewogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0 IGNoYXIgX1NfYXRvbXNbXTsKCiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9N X2UgPSBfTV96ZXJvICsgMTAsCiAgICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3Np emUgPSAyMSArIDEKICAgIH07CgoKCiAgICBzdGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0 KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAg ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1Nf Zm9ybWF0X2ludChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9k LCBjaGFyIF9fbW9kbCk7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs YXNzIG51bXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHBy aXZhdGU6CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUg X01fdGhvdXNhbmRzX3NlcDsKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNv bnN0IGNoYXJfdHlwZSogX01fdHJ1ZW5hbWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFs c2VuYW1lOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90 IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6 ZV9udW1wdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxl IF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAg IHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAg ICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxf cG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwog ICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7 IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2Vu YW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBw cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFs IGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4g X01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhv dXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAg ICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1 ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVh bCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBf TV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3Qo X19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgbG9jYWxlOjppZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVtcGxhdGU8 PgogICAgbnVtcHVuY3Q8Y2hhcj46On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lk CiAgICBudW1wdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9f Y2xvYyk7CgoKICB0ZW1wbGF0ZTw+CiAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCk7 CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFs aXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+ CiAgICB7CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX251bXB1bmN0OwoKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0 cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Rf YnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVu Y3Q8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01f Y19sb2NhbGVfbnVtcHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChf TV9jX2xvY2FsZV9udW1wdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfm51bXB1bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShf TV9jX2xvY2FsZV9udW1wdW5jdCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpm YWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAg IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX2dldChzaXpl X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5 cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9f ZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVy X3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z aWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBf X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRl cl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv bmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19l bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsg fQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IGZsb2F0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90 eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVy X3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYg X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8s IF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAg ICB2aXJ0dWFsIH5udW1fZ2V0KCkgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFj dF9mbG9hdChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0 ZSYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBfX3h0cmMpIGNvbnN0OwoKICAgICAg aXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3RfaW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3Nf YmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBf X3h0cmMsIGludCYgX19iYXNlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0 ZSYsIGJvb2wmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQo aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25n JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAg ICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog ICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgaW50JikgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9u ZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5 cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAg ICAgICAgICBsb25nIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdDsKCgogICAg ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZmxvYXQmKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAg ICBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChp dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs CiAgICAgICAgICAgICBsb25nIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHZvaWQqJikgY29uc3Q7CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6Omlk IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CiMgNzIxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQs IHB1YmxpYyBfX251bV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3Rh dGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBf X3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQog ICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwg Ym9vbCBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19m aWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv c19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90 eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19m aWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAg ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBs b25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2Ys IF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19z LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9u ZyBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBf X2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3Ms IGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw ZSBfX2ZpbGwsCiAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUK ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGws CiAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZl cnRfZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAg ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAg X01fY29udmVydF9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmls bCwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCwgX1ZhbHVl VCBfX3YpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2Zsb2F0KGl0ZXJf dHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAg ICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAg X01fd2lkZW5faW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws IGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAg aXRlcl90eXBlCiAgICAgIF9NX2luc2VydChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFy X3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3dzLCBpbnQg X19sZW4pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hh cl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK ICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25n IF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90 eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoK CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNl JiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBf X2ZpbGwsIHVuc2lnbmVkIGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBk b3VibGUgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp dGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBj b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlv c19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07 CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9j YWxlOjppZCBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgog ICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2NvbGxhdGU7CgogICAgcHVibGljOgogICAgICBz dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90 IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19s b2NhbGVfY29sbGF0ZSA9IF9TX2NfbG9jYWxlOyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2xs YXRlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6 OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19s b2NhbGUoX19jbG9jKTsgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBf X2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f bG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19j b21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUK ICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAg ICAgIGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19o aSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAg ICAgIGludAogICAgICBfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNv bnN0OwoKICAgICAgc2l6ZV90CiAgICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hh clQqLCBzaXplX3QpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNv bGxhdGUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7 IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xv MSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f bG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5 cGUKICAgICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBf X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFy VCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRl bXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFy KiwgY29uc3QgY2hhciopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxh dGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgY29uc3Q7 CgoKICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUo Y29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAg c2l6ZV90CiAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCosIGNvbnN0 IHdjaGFyX3QqLCBzaXplX3QpIGNvbnN0OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAg ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBi YXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNv bGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog Y29sbGF0ZTxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2Rlc3Ryb3lfY19sb2Nh bGUoX01fY19sb2NhbGVfY29sbGF0ZSk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf bG9jYWxlX2NvbGxhdGUsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgdGltZV9iYXNl CiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5 bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9f dGltZXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NoYXJUIF9fY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf Q2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgogICAg ICBzdGF0aWMgY29uc3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRdOwoKICAgIHByb3RlY3RlZDoK ICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7CiAgICAgIGNoYXIqIF9NX25h bWVfdGltZXB1bmN0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZm9ybWF0OwogICAgICBj b25zdCBfQ2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90 aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAg IGNvbnN0IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBf TV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsKICAgICAg Y29uc3QgX0NoYXJUKiBfTV9wbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbV9wbV9mb3JtYXQ7 CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2Rh eTI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9k YXk0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f ZGF5NjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCog X01fZGF5X2ExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMjsKICAgICAgY29uc3QgX0No YXJUKiBfTV9kYXlfYTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E0OwogICAgICBjb25z dCBfQ2hhclQqIF9NX2RheV9hNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7CiAgICAg IGNvbnN0IF9DaGFyVCogX01fZGF5X2E3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgw MTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOwogICAgICBjb25zdCBfQ2hhclQqIF9N X21vbnRoMDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNDsKICAgICAgY29uc3QgX0No YXJUKiBfTV9tb250aDA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDY7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fbW9udGgwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA4Owog ICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u dGgxMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOwogICAgICBjb25zdCBfQ2hhclQq IF9NX21vbnRoMTI7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDE7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fbW9udGhfYTAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2Ew MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDQ7CiAgICAgIGNvbnN0IF9DaGFyVCog X01fbW9udGhfYTA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNjsKICAgICAgY29u c3QgX0NoYXJUKiBfTV9tb250aF9hMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA4 OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwOTsKICAgICAgY29uc3QgX0NoYXJUKiBf TV9tb250aF9hMTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTExOwogICAgICBjb25z dCBfQ2hhclQqIF9NX21vbnRoX2ExMjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAg IF9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIF9f dGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3Jl ZnMgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgX01fcHV0KF9DaGFyVCogX19zLCBzaXplX3QgX19t YXhsZW4sIGNvbnN0IF9DaGFyVCogX19mb3JtYXQsCiAgICAgICAgICAgICBjb25zdCB0bSogX190 bSkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVfZm9ybWF0cyhjb25zdCBfQ2hhclQq KiBfX2RhdGUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19kYXRlWzBdID0gX01fZGF0ZV9mb3Jt YXQ7CiAgICAgICAgX19kYXRlWzFdID0gX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAg ICB2b2lkCiAgICAgIF9NX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX3RpbWUpIGNvbnN0 CiAgICAgIHsKCiAgICAgICAgX190aW1lWzBdID0gX01fdGltZV9mb3JtYXQ7CiAgICAgICAgX190 aW1lWzFdID0gX01fdGltZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9N X2FtcG0oY29uc3QgX0NoYXJUKiogX19hbXBtKSBjb25zdAogICAgICB7CiAgICAgICAgX19hbXBt WzBdID0gX01fYW07CiAgICAgICAgX19hbXBtWzFdID0gX01fcG07CiAgICAgIH0KCiAgICAgIHZv aWQKICAgICAgX01fZGF0ZV90aW1lX2Zvcm1hdHMoY29uc3QgX0NoYXJUKiogX19kdCkgY29uc3QK ICAgICAgewoKICAgICAgICBfX2R0WzBdID0gX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgICBf X2R0WzFdID0gX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAg ICAgX01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBf X2RheXNbMF0gPSBfTV9kYXkxOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheTI7CiAgICAgICAg X19kYXlzWzJdID0gX01fZGF5MzsKICAgICAgICBfX2RheXNbM10gPSBfTV9kYXk0OwogICAgICAg IF9fZGF5c1s0XSA9IF9NX2RheTU7CiAgICAgICAgX19kYXlzWzVdID0gX01fZGF5NjsKICAgICAg ICBfX2RheXNbNl0gPSBfTV9kYXk3OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RheXNf YWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19kYXlzKSBjb25zdAogICAgICB7CiAgICAgICAg X19kYXlzWzBdID0gX01fZGF5X2ExOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheV9hMjsKICAg ICAgICBfX2RheXNbMl0gPSBfTV9kYXlfYTM7CiAgICAgICAgX19kYXlzWzNdID0gX01fZGF5X2E0 OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheV9hNTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9k YXlfYTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5X2E3OwogICAgICB9CgogICAgICB2b2lk CiAgICAgIF9NX21vbnRocyhjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewog ICAgICAgIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9N X21vbnRoMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aDAzOwogICAgICAgIF9fbW9u dGhzWzNdID0gX01fbW9udGgwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoMDU7CiAg ICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aDA2OwogICAgICAgIF9fbW9udGhzWzZdID0gX01f bW9udGgwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoMDg7CiAgICAgICAgX19tb250 aHNbOF0gPSBfTV9tb250aDA5OwogICAgICAgIF9fbW9udGhzWzldID0gX01fbW9udGgxMDsKICAg ICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aDExOwogICAgICAgIF9fbW9udGhzWzExXSA9IF9N X21vbnRoMTI7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzX2FiYnJldmlhdGVk KGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNb MF0gPSBfTV9tb250aF9hMDE7CiAgICAgICAgX19tb250aHNbMV0gPSBfTV9tb250aF9hMDI7CiAg ICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aF9hMDM7CiAgICAgICAgX19tb250aHNbM10gPSBf TV9tb250aF9hMDQ7CiAgICAgICAgX19tb250aHNbNF0gPSBfTV9tb250aF9hMDU7CiAgICAgICAg X19tb250aHNbNV0gPSBfTV9tb250aF9hMDY7CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250 aF9hMDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250aF9hMDg7CiAgICAgICAgX19tb250 aHNbOF0gPSBfTV9tb250aF9hMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aF9hMTA7 CiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGhfYTExOwogICAgICAgIF9fbW9udGhzWzEx XSA9IF9NX21vbnRoX2ExMjsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog ICAgICB+X190aW1lcHVuY3QoKTsKCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfdGlt ZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgX190aW1lcHVuY3Q8X0NoYXJUPjo6aWQ7CgoK ICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjaGFyKgogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9TX3Rp bWV6b25lc1sxNF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNoYXI+ OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRlbXBsYXRl PD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9wdXQoY2hhciosIHNpemVfdCwg Y29uc3QgY2hhciosIGNvbnN0IHRtKikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCB3 Y2hhcl90KgogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9TX3RpbWV6b25lc1sxNF07CgogIHRl bXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXpl X3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAg IF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9wdXQod2NoYXJfdCosIHNpemVfdCwgY29uc3Qgd2No YXJfdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtKikgY29uc3Q7 CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY29uc3QgX0NoYXJUKiBfX3RpbWVw dW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXNbMTRdOwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvaTM4Ni1saW51eC9iaXRzL3RpbWVfbWVtYmVycy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL3RpbWVfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90 IF9fcmVmcykKICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICB7CgoKCiAgICAgIF9NX2lu aXRpYWxpemVfdGltZXB1bmN0KCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K ICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19zLCBzaXpl X3QgX19yZWZzKQogICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgIHsKCgoKCiAgICAgIF9N X2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCiAgICB7CgoK CgogICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CiAgICB9 CiMgMTE1OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0 aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg X0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19z dHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK ICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAo X19yZWZzKSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5cGUKICAg ICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfdGltZShfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZ2V0X2RhdGUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAg ICAgIGl0ZXJfdHlwZQogICAgICBnZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF93 ZWVrZGF5KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5 cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X21vbnRobmFt ZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAg ICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9fZW5kLCBfX2lv LCBfX2VyciwgX190bSk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRp bWVfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19kYXRlX29yZGVy KCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVy X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl CiAgICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg dG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21v bnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAg ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCgogICAgICB2b2lk CiAgICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQs IGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4 LCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4m IF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vycikg Y29uc3Q7CgoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJfdHlwZSYgX19i ZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAgICAgdm9pZAog ICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfZ2V0PF9DaGFy VCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9nZXQ8X0NoYXJU LCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAg ICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAg OiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgog ICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1 dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJs aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0 ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp dAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0 KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAg IGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0OwoKICAgICAg aXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90 eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHRtKiBfX3RtLCBjaGFyIF9fZm9ybWF0LCBjaGFy IF9fbW9kID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywg X19maWxsLCBfX3RtLCBfX2Zvcm1hdCwgX19tb2QpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2 aXJ0dWFsCiAgICAgIH50aW1lX3B1dCgpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg X19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQsIGNoYXIg X19tb2QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Omlk OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xh c3MgdGltZV9wdXRfYnluYW1lIDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRf YnluYW1lKGNvbnN0IGNoYXIqICwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj4oX19yZWZzKQogICAgICB7IH07CgogICAgcHJvdGVjdGVkOgogICAg ICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyBt b25leV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1i b2wsIHNpZ24sIHZhbHVlIH07CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07 CgogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3Rh dGljIHBhdHRlcm4KICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hh ciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0 LCBwdWJsaWMgbW9uZXlfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190 eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMg bG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGlu ZzsKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90 aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3ltYm9sOwogICAg ICBjb25zdCBjaGFyX3R5cGUqIF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX01fbmVnYXRpdmVfc2lnbjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0 ZXJuIF9NX3Bvc19mb3JtYXQ7CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJs aWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDog bG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7 IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNv bnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChf X3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYywgX19zKTsgfQoK ICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91 c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgp OyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJv bCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAg IHN0cmluZ190eXBlCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19wb3NpdGl2ZV9zaWduKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0 aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7 IH0KCiAgICAgIGludAogICAgICBmcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0 dGVybgogICAgICBuZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVn X2Zvcm1hdCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1 bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkg Y29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBj aGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N X3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5n KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3Ry aW5nX3R5cGUKICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9j dXJyX3N5bWJvbDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2 ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAg dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAg eyByZXR1cm4gX01fbmVnYXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9f ZnJhY19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAg ICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJl dHVybiBfTV9wb3NfZm9ybWF0OyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVn X2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICAg dm9pZAogICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0g X19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFt ZSA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0lu dGw+CiAgICBsb2NhbGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVu Y3Q8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hh ciwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hh ciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25l eXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwg Y29uc3QgY2hhciopOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIs IGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0IGNoYXIq KTsKCgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1 bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9u ZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3Qs IHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKik7 CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojpf TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9i eW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2Nf bG9jYWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVm IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry aW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CgogICAgICBl eHBsaWNpdAogICAgICBtb25leXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBf X3JlZnMgPSAwKQogICAgICA6IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4oX19yZWZzKQogICAg ICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9f cyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVu Y3QpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1 bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25l eXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRs PgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3Mg bW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlw ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAg IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfZ2V0KHNp emVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJf dHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50 bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv bmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19z LCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlw ZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmlu Z190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywg X19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoK ICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9f aW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl CiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRs LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg c3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfZ2V0PF9DaGFy VCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P dXRJdGVyPgogICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsK ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz dHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK ICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz KSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2lu dGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3Vi bGUgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRs LCBfX2lvLCBfX2ZpbGwsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0 ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJf dHlwZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsg fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9Cgog ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBf X2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgbG9u ZyBkb3VibGUgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk b19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5 cGUgX19maWxsLAogICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25z dDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+ CiAgICBsb2NhbGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgoKICBzdHJ1 Y3QgbWVzc2FnZXNfYmFzZQogIHsKICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7CiAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXMgOiBwdWJsaWMgbG9jYWxl OjpmYWNldCwgcHVibGljIG1lc3NhZ2VzX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU PiBzdHJpbmdfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xv Y2FsZV9tZXNzYWdlczsKICAgICAgY2hhciogX01fbmFtZV9tZXNzYWdlczsKCiAgICBwdWJsaWM6 CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2Fn ZXMoc2l6ZV90IF9fcmVmcyA9IDApOwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9f Y19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAg ICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29u c3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3Ms IF9fbG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8 Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7CgogICAgICBzdHJpbmdf dHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0 IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2Ms IF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cg X19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9CgogICAgcHJv dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpOwoKICAgICAgdmlydHVhbCBj YXRhbG9nCiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9j YWxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2dldChjYXRh bG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdDsKCiAgICAg IHZpcnR1YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25zdDsKCgogICAgICBjaGFy KgogICAgICBfTV9jb252ZXJ0X3RvX2NoYXIoY29uc3Qgc3RyaW5nX3R5cGUmIF9fbXNnKSBjb25z dAogICAgICB7CgogICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdF9j YXN0PF9DaGFyVCo+KF9fbXNnLmNfc3RyKCkpKTsKICAgICAgfQoKCiAgICAgIHN0cmluZ190eXBl CiAgICAgIF9NX2NvbnZlcnRfZnJvbV9jaGFyKGNoYXIqIF9fbXNnKSBjb25zdAogICAgICB7Cgog ICAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPGNoYXI+OjpsZW5ndGgoX19tc2cpIC0g MTsKIyAxNzAzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwog ICAgICAgIHJldHVybiBzdHJpbmdfdHlwZSgpOwogICAgICB9CiAgICAgfTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBtZXNzYWdlczxfQ2hhclQ+OjppZDsKCgog IHRlbXBsYXRlPD4KICAgIHN0cmluZwogICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9n LCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICB3c3Ry aW5nCiAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25z dCB3c3RyaW5nJikgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz cyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAgcHVi bGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdl c19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVj dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlc19ieW5hbWUoKQogICAgICB7IH0KICAg IH07CgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvbWVzc2FnZXNf bWVtYmVycy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRz L21lc3NhZ2VzX21lbWJlcnMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgICBt ZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQogICAgIDogbG9jYWxlOjpm YWNldChfX3JlZnMpCiAgICAgewoKCgogICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19j X2xvY2FsZTsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgICBtZXNzYWdl czxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCiAgICAgOiBsb2Nh bGU6OmZhY2V0KF9fcmVmcykKICAgICB7CgoKCgogICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMg PSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2Fn ZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9j YWxlJiBfX2xvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19kaXIp IGNvbnN0CiAgICB7CiAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CiAg ICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOwogICAgfQoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKICAgIHsK CgoKCiAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hh clQ+OjpjYXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0 cmluZzxjaGFyPiYgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2Nh bGUmKSBjb25zdAogICAgewoKCiAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOwogICAgICBy ZXR1cm4gMDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAg bWVzc2FnZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QKICAgIHsgfQoKCiAgIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVz c2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKICAgICA6IG1lc3Nh Z2VzPF9DaGFyVD4oX19yZWZzKQogICAgIHsKCgoKCgoKICAgICAgIF9TX2Rlc3Ryb3lfY19sb2Nh bGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf bG9jYWxlX21lc3NhZ2VzLCBfX3MpOwogICAgIH0KIyAxNzM5ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxl JiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz KGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K ICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw ZV9iYXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp bmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQog ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFz ZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l IGJvb2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVw cGVyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s IGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2Mp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2Fs cGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChf Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0 eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJU IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19j LCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy VD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNv bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+ KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBs b2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv YykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku dG91cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBf Q2hhclQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9 CiMgNDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U cmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6 OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90 eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAg dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5 cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwog ICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0 ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7 CiAgICAgIG11dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBl KiBfTV9mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAg ICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIG9w ZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNv bnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3Ih KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0YXRlCiAg ICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0K CiAgICAgIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CgogICAg ICB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVh cih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBnb29kKCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGJvb2wK ICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJp dCkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4g KHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgYm9v bAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFk Yml0KSAhPSAwOyB9CgogICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAg ICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0aW9ucyhp b3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7 CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAgICAg IGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAg dmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0K CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9 IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFzaWNfc3Ry ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fc3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PioKICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoK ICAgICAgYmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoK ICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFf TV9maWxsX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRl bignICcpOwogICAgICAgICAgICBfTV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAg ICAgIHJldHVybiBfTV9maWxsOwogICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChj aGFyX3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZp bGwoKTsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg IH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAg ICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsK CiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgcHJvdGVj dGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAgICAgdm9p ZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAg ICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBj b25zdAogICAgICB7CiAgICAgICAgaWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0 KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2Fj aGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLnRjYyIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9z PF9DaGFyVCwgX1RyYWl0cz46OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsKICAgICAgaWYg KHRoaXMtPnJkYnVmKCkpCiAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAg ICAgZWxzZQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsK ICAgICAgaWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAg IF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4 Y2VwdGlvbiIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lv czxfQ2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PiogX19zYikKICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f b2xkID0gX01fc3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlz LT5jbGVhcigpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9z JiBfX3JocykKICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3Jk X3NpemUgPD0gX1NfbG9jYWxfd29yZF9zaXplKSA/CiAgICAgICAgX01fbG9jYWxfd29yZCA6IG5l dyBfV29yZHNbX19yaHMuX01fd29yZF9zaXplXTsKCgogICAgICBfQ2FsbGJhY2tfbGlzdCogX19j YiA9IF9fcmhzLl9NX2NhbGxiYWNrczsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01f YWRkX3JlZmVyZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAg ICAgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVs ZXRlIFtdIF9NX3dvcmQ7CiAgICAgICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9N X2Rpc3Bvc2VfY2FsbGJhY2tzKCk7CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBm b3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogICAgICAg IF9fd29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRbX19pXTsKICAgICAgaWYgKF9NX3dvcmQgIT0g X01fbG9jYWxfd29yZCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAg ICAgICAgIF9NX3dvcmQgPSAwOwogICAgICAgIH0KICAgICAgX01fd29yZCA9IF9fd29yZHM7CiAg ICAgIF9NX3dvcmRfc2l6ZSA9IF9fcmhzLl9NX3dvcmRfc2l6ZTsKCiAgICAgIHRoaXMtPmZsYWdz KF9fcmhzLmZsYWdzKCkpOwogICAgICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAg dGhpcy0+cHJlY2lzaW9uKF9fcmhzLnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhz LnRpZSgpKTsKICAgICAgdGhpcy0+ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhj ZXB0aW9ucyhfX3Jocy5leGNlcHRpb25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29w eWZtdF9ldmVudCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAog ICAgewogICAgICBjaGFyIF9fcmV0ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mY3R5cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2Rm YXVsdCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBf VHJhaXRzPjo6d2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3Jl dCA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAg ICAgICBfX3JldCA9IF9NX2ZjdHlwZS0+d2lkZW4oX19jKTsKICAgICAgcmV0dXJuIF9fcmV0Owog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg bG9jYWxlCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxl JiBfX2xvYykKICAgIHsKICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAg aW9zX2Jhc2U6OmltYnVlKF9fbG9jKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAg ICAgaWYgKHRoaXMtPnJkYnVmKCkgIT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1 ZShfX2xvYyk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwg X1RyYWl0cz46OmluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAg ICB7CgogICAgICBpb3NfYmFzZTo6X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01f aW9zX2xvY2FsZSk7CiAgICAgIF9NX3RpZSA9IDA7CiMgMTU5ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOwogICAgICBf TV9maWxsX2luaXQgPSBmYWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAg IF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBn b29kYml0IDogYmFkYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01f Y2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFj ZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxf X2N0eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7Cgog ICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVt cHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAg ICBfTV9mbnVtcHV0ID0gMDsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xv YykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2Mp OwogICAgICBlbHNlCiAgICAgICAgX01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg YmFzaWNfaW9zPHdjaGFyX3Q+OwoKfQojIDIwOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9i YXNpY19pb3MuaCIgMiAzCiMgNTIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgNDYg Ii91c3IvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2lj X29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz X3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBf X3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+ IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU LCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFy VCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8 X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVh bShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAg ICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50 cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog ICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikp OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpf X3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y PDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg ICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog ICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv cGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBf X2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChf X2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAg cmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o X19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0 YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAg ICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9w ZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0 cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBpb3Nf YmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVs ZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6 OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2ln bmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8 dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMt Pm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0 cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0 dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0K CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsK CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9u ZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBf X2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQog ICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7 IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9f Zik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBf X3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZf dHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUg X19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUq IF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNo KCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBl JgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vl a3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJh c2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4 cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7 CgogICAgICB+c2VudHJ5KCkKICAgICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlv c19iYXNlOjp1bml0YnVmICYmICF1bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAg ICAgICAgICAgIGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9 PSAtMSkKICAgICAgICAgICAgICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg ICAgICAgIH0KICAgICAgfQoKICAgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9N X29rOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0Lndp ZGVuKF9fYykpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAg YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh bTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChf X291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJh aXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAg eyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBj b25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwg X1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1Ry YWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJh c2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19z KQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9f cykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIs IF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYg X19vdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCBy ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgZW5kbChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAg ICB7IHJldHVybiBmbHVzaChfX29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m IF9fb3MpCiAgICB7IHJldHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgZmx1c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29z KQogICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9Cgp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL29zdHJlYW0udGNjIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9vc3RyZWFtLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDEg MwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDMKCgoKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysr LzMuMi9jZXJybm8iIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDMKCiMg MSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZXJybm8uaCIg MwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMKIyAy NSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9l cnJuby5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwojIDUgIi91 c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJy bm8uaCIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKZXh0ZXJuIGludCAq X19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9l cnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1f aW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgp9CiMgNjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAz CnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIg MiAzCiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIg MwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDEgMwojIDQ4ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9jbWF0aCIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwojIDI5 ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9uYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9tYXRo LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAxIDMKIyAyOSAiL3Vz ci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsK CnR5cGVkZWYgbG9uZyBkb3VibGUgZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5jbHVkZS9tYXRoLmgi IDIgMwojIDY1ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGNhbGxzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoK CmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19hY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJvdyAo KTsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19hdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRv dWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRv dWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19zaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJvdyAo KTsKCgoKCmV4dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19jb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luaCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194KSB0 aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX190YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNp bmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAo KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3Vi bGUgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgp OwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19hc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW5oIChk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUgX194KSB0 aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2V4cCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs ZSBmcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4 dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0 aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRy KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19p cHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGRvdWJsZSBwb3cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cx MCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2di IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGV4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRv dWJsZSBsb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBkb3VibGUgcG93IChkb3VibGUgX194 LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdyAoZG91YmxlIF9feCwg ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0IChkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoK CmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fY2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBj ZWlsIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4 dGVybiBkb3VibGUgX19jZWlsIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUg X194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJs ZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gZG91YmxlIF9fZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoZG91YmxlIF9feCwgZG91Ymxl IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0 ZSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJl bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVt IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzaWdu aWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2Fu ZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91 YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gZG91YmxlIF9fY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4g KF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX2lzbmFuIChkb3Vi bGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl cm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgajAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19qMCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2oxIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91 YmxlIGpuIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qbiAoaW50LCBk b3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkwIChkb3VibGUpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9feTAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTEgKGRvdWJs ZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJu IGRvdWJsZSB5biAoaW50LCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feW4gKGlu dCwgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi bGUgZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKGRvdWJsZSkg dGhyb3cgKCk7CmV4dGVybiBkb3VibGUgbGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHRn YW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RnYW1tYSAoZG91YmxlKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUg bGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f cmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGRvdWJsZSBfX25leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGRvdWJsZSBuZXh0dG93 YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpl eHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93 ICgpOwoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgp OwoKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBf X2lsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJsbiAo ZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxi bG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUg bmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX25lYXJieWlu dCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgcm91bmQgKGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgp OwoKCgpleHRlcm4gZG91YmxlIHRydW5jIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX190cnVuYyAoZG91YmxlIF9feCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSByZW1x dW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9u ZyBsb25nIGludCBsbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25n IGludCBfX2xscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBs cm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmQgKGRv dWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3VibGUgX195 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KSB0 aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1pbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkgdGhyb3cg KCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25i aXQgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJs ZSBfX3opIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1hIChkb3VibGUgX194LCBkb3VibGUg X195LCBkb3VibGUgX196KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwojIDY2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAy IDMKIyA4OCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21h dGhjYWxscy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCgpl eHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fj b3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4 dGVybiBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRh bmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ks IGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBm bG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZs b2F0IHNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9h dCBjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0 IHRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQg X194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQg Kl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAo ZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoK ZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f YWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgp OwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9u ZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4 cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gsIGludCBf X2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g ZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBfX3gsIGZs b2F0ICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQgX194LCBm bG9hdCAqX19pcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK CmV4dGVybiBmbG9hdCBwb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X3BvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChm bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2di ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0 IGxvZzJmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQg X194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxv YXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxv YXQgY2JydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NlaWxm IChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl cm4gZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2Zsb29y ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxv YXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy biBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93 ICgpOwoKCgpleHRlcm4gZmxvYXQgc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK CgpleHRlcm4gZmxvYXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFy ICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRl cm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZs b2F0IGoxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJv dyAoKTsKZXh0ZXJuIGZsb2F0IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX2puZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9h dCB5MWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cg KCk7CmV4dGVybiBmbG9hdCB5bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X195bmYgKGludCwgZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoZmxv YXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVy biBmbG9hdCBlcmZjZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxv YXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19sZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCB0 Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdh bW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f bGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy biBmbG9hdCByaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9f eCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy biBmbG9hdCBfX25leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0 IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBmbG9hdCBfX25leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9f eSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQg cmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBm bG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGls b2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGlu dCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25n IGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fcm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNm IChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu IGZsb2F0IF9fdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwg aW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwg ZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxy aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9h dCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBpbnQgX19scm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9u ZyBsb25nIGludCBsbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgX19sbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZk aW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1m IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChm bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gs IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQg X192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIGludCBfX3NpZ25iaXRmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxv YXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBf X3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2Fs YmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJm IChmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7CiMgODkgIi91c3IvaW5jbHVkZS9tYXRo LmgiIDIgMwojIDEwOSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhjYWxscy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgi IDMKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK ZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy biBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u ZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK CgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7Cgpl eHRlcm4gbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX190YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2 b2lkIHNpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBk b3VibGUgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zbCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25l bnQpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9f eCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBs IChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAo KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpl eHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19sb2cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGxvbmcgZG91YmxlIG1vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lw dHIpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBl eHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4 cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBwb3cx MGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3BvdzEw bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhw bTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBt MWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFw bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMmwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzJsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cybCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19wb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2Jy dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBj ZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmFic2wg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2Zsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcgZG91Ymxl IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRl cm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1 ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRv dWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZpY2FuZGwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdu bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFubCAoX19jb25zdCBjaGFyICpfX3Rh Z2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBfX3Zh bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQg aXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAobG9uZyBkb3VibGUpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19qMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJu IGxvbmcgZG91YmxlIGoxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19qMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGpubCAo aW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2pubCAoaW50 LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MGwgKGxvbmcgZG91 YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTBsIChsb25nIGRvdWJsZSkgdGhy b3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9feTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25n IGRvdWJsZSB5bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBk b3VibGUgZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19l cmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9u ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3Vi bGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIHRo cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1w KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwg aW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByaW50 bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmludGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRl cmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHRhZnRlcmwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl cm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1haW5kZXJsIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBz Y2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19zY2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IGlsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBf X2lsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJs ZSBzY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19zY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24p IHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX3JlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQg Kl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kbCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1s IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zt aW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgX19mcGNsYXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25n IGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi bGUgX195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19m bWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7CiMgMTEwICIvdXNyL2lu Y2x1ZGUvbWF0aC5oIiAyIDMKIyAxMjUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGlu dCBzaWduZ2FtOwojIDE2NiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAgewogICAgRlBf TkFOLAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9STUFMLAoK ICAgIEZQX05PUk1BTAoKICB9OwojIDI1MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVm IGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAg X0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUg X0xJQl9WRVJTSU9OOwojIDI3NSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgX19leGNl cHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJn MTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQg bWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgNDIzICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAzCn0KIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIg MwojIDc5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fY21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBp bnQpOwoKICBpbmxpbmUgZG91YmxlCiAgYWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWls dGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUgZmxvYXQKICBhYnMoZmxvYXQgX194KQogIHsgcmV0 dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhs b25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCgogIGlu bGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KCgoK CgogIHVzaW5nIDo6YWNvczsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3Vi bGUgX194KSB7IHJldHVybiA6OmFjb3NsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXNpbjsKCgog IGlubGluZSBmbG9hdAogIGFzaW4oZmxvYXQgX194KSB7IHJldHVybiA6OmFzaW5mKF9feCk7IH0K CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1 cm4gOjphc2lubChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmF0YW47CgoKICBpbmxpbmUgZmxvYXQK ICBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5l IGxvbmcgZG91YmxlCiAgYXRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbmwoX194 KTsgfQoKCgoKCiAgdXNpbmcgOjphdGFuMjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0 IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW4yZihfX3ksIF9feCk7IH0KCgoKCgoKCiAg aW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbjIobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf X3gpIHsgcmV0dXJuIDo6YXRhbjJsKF9feSwgX194KTsgfQoKCgoKCgogIHVzaW5nIDo6Y2VpbDsK CgogIGlubGluZSBmbG9hdAogIGNlaWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNlaWxmKF9feCk7 IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyBy ZXR1cm4gOjpjZWlsbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmNvczsKCiAgaW5saW5lIGZsb2F0 CiAgY29zKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zZihfX3gpOyB9CgogIGlu bGluZSBsb25nIGRvdWJsZQogIGNvcyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWls dGluX2Nvc2woX194KTsgfQoKICB1c2luZyA6OmNvc2g7CgoKICBpbmxpbmUgZmxvYXQKICBjb3No KGZsb2F0IF9feCkgeyByZXR1cm4gOjpjb3NoZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcg ZG91YmxlCiAgY29zaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zaGwoX194KTsgfQoK CgoKCiAgdXNpbmcgOjpleHA7CgoKICBpbmxpbmUgZmxvYXQKICBleHAoZmxvYXQgX194KSB7IHJl dHVybiA6OmV4cGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25n IGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZXhwbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmZhYnM7 CgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9m YWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZhYnMobG9uZyBkb3VibGUgX194 KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoK ICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JmKF9feCk7 IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmbG9vcihsb25nIGRvdWJsZSBfX3gpIHsg cmV0dXJuIDo6Zmxvb3JsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6Zm1vZDsKCgogIGlubGluZSBm bG9hdAogIGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBf X3kpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgoKCgoKCiAg dXNpbmcgOjpmcmV4cDsKCgogIGlubGluZSBmbG9hdAogIGZyZXhwKGZsb2F0IF9feCwgaW50KiBf X2V4cCkgeyByZXR1cm4gOjpmcmV4cGYoX194LCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u ZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJsZSBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6 ZnJleHBsKF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBm bG9hdAogIGxkZXhwKGZsb2F0IF9feCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwZihfX3gs IF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsZGV4cChsb25nIGRvdWJs ZSBfX3gsIGludCBfX2V4cCkgeyByZXR1cm4gOjpsZGV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoK ICB1c2luZyA6OmxvZzsKCgogIGlubGluZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJu IDo6bG9nZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9nKGxvbmcgZG91 YmxlIF9feCkgeyByZXR1cm4gOjpsb2dsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bG9nMTA7CgoK ICBpbmxpbmUgZmxvYXQKICBsb2cxMChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7 IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cxMChsb25nIGRvdWJsZSBfX3gpIHsg cmV0dXJuIDo6bG9nMTBsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bW9kZjsKCgogIGlubGluZSBm bG9hdAogIG1vZGYoZmxvYXQgX194LCBmbG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1vZGZmKF9f eCwgX19pcHRyKTsgfQojIDM3NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICBpbmxp bmUgbG9uZyBkb3VibGUKICBtb2RmKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUqIF9faXB0 cikgeyByZXR1cm4gOjptb2RmbChfX3gsIF9faXB0cik7IH0KIyAzODggIi91c3IvaW5jbHVkZS9j KysvMy4yL2NtYXRoIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAog ICAgX19wb3dfaGVscGVyKF9UcCBfX3gsIGludCBfX24pCiAgICB7CiAgICAgIHJldHVybiBfX24g PCAwCiAgICAgICAgPyBfVHAoMSkvX19jbWF0aF9wb3dlcihfX3gsIC1fX24pCiAgICAgICAgOiBf X2NtYXRoX3Bvd2VyKF9feCwgX19uKTsKICAgIH0KCiAgdXNpbmcgOjpwb3c7CgoKICBpbmxpbmUg ZmxvYXQKICBwb3coZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6cG93ZihfX3gsIF9f eSk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSB7IHJldHVybiA6OnBvd2woX194LCBfX3kpOyB9CgoKCgoKCiAgaW5s aW5lIGRvdWJsZQogIHBvdyhkb3VibGUgX194LCBpbnQgX19pKQogIHsgcmV0dXJuIF9fcG93X2hl bHBlcihfX3gsIF9faSk7IH0KCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgaW50IF9f bikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOyB9CgogIGlubGluZSBsb25nIGRv dWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVs cGVyKF9feCwgX19uKTsgfQoKICB1c2luZyA6OnNpbjsKCiAgaW5saW5lIGZsb2F0CiAgc2luKGZs b2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2luZihfX3gpOyB9CgogIGlubGluZSBsb25n IGRvdWJsZQogIHNpbihsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3Npbmwo X194KTsgfQoKICB1c2luZyA6OnNpbmg7CgoKICBpbmxpbmUgZmxvYXQKICBzaW5oKGZsb2F0IF9f eCkgeyByZXR1cm4gOjpzaW5oZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg c2luaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c2luaGwoX194KTsgfQoKCgoKCiAgdXNp bmcgOjpzcXJ0OwoKICBpbmxpbmUgZmxvYXQKICBzcXJ0KGZsb2F0IF9feCkKICB7IHJldHVybiBf X2J1aWx0aW5fc3FydGYoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzcXJ0KGxvbmcg ZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGwoX194KTsgfQoKICB1c2luZyA6 OnRhbjsKCgogIGlubGluZSBmbG9hdAogIHRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuZihf X3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFuKGxvbmcgZG91YmxlIF9feCkg eyByZXR1cm4gOjp0YW5sKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6dGFuaDsKCgogIGlubGluZSBm bG9hdAogIHRhbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmhmKF9feCk7IH0KCgoKCgoKICBp bmxpbmUgbG9uZyBkb3VibGUKICB0YW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5o bChfX3gpOyB9CgoKCgp9CgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2ZwY2xhc3NpZnkoX1RwIF9fZikgeyBy ZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9f ZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2Yp IDogX19mcGNsYXNzaWZ5bCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW50CiAgICBfX2NhcHR1cmVfaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19m KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZmluaXRlZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBz aXplb2YgKGRvdWJsZSkgPyBfX2Zpbml0ZSAoX19mKSA6IF9fZmluaXRlbCAoX19mKSk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNpbmYoX1RwIF9f ZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNpbmZmIChf X2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9faXNpbmYgKF9fZikgOiBf X2lzaW5mbCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBf X2NhcHR1cmVfaXNuYW4oX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2Yg KGZsb2F0KSA/IF9faXNuYW5mIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91Ymxl KSA/IF9faXNuYW4gKF9fZikgOiBfX2lzbmFubCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4g KChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX2YpIDog c2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX19mKSA6IF9f ZnBjbGFzc2lmeWwgKF9fZikpID09IEZQX05PUk1BTCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfc2lnbmJpdChfVHAgX19mKSB7IHJldHVybiAoc2l6 ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19zaWduYml0ZiAoX19mKSA6IHNpemVvZiAo X19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX3NpZ25iaXQgKF9fZikgOiBfX3NpZ25iaXRsIChf X2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9p c2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18g KHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0g KF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBf X3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9h dCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91Ymxl KSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8 fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6 IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBf X2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPiBfX3k7IH0pKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzZ3JlYXRl cmVxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAo eyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAo X19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9f dHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0 KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUp ID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8 IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDog c2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9f ZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA+PSBfX3k7IH0pKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzcyhf VHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18o X19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4 dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kp IF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNz aWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3Np ZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192 KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikg PT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAo X192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194IDwgX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfVHAgX19mMSwg X1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2Yx KSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5z aW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192 ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlm IChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAo X191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09 IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBz aXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3Yp KSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPD0gX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3NncmVhdGVyKF9UcCBfX2YxLCBf VHAgX19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEp IF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNp b25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3Yg PSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYg KF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChf X3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0g c2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNp emVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikp ID09IEZQX05BTjsgfSkpICYmIChfX3ggPCBfX3kgfHwgX195IDwgX194KTsgfSkpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXN1bm9yZGVyZWQo X1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlw ZW9mX18oX19mMSkgX191ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9fdiA9IChfX2YyKTsg KHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBz aXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19m cGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChm bG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91 YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05B TjsgfSkpOyB9Cn0KIyA1ODAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCm5hbWVzcGFj ZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFz c2lmeShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1 cm4gX19jYXB0dXJlX2lzZmluaXRlKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog ICAgaW50CiAgICBpc2luZihfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsg cmV0dXJuIF9fY2FwdHVyZV9pc25hbihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGludAogICAgaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFs KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9U cCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJl dHVybiBfX2NhcHR1cmVfaXNncmVhdGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgIGludAogICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQog ICAgeyByZXR1cm4gX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19m MikgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikK ICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9U cCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAg X19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwg X19mMik7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5 OwogIHVzaW5nIF9fZ251X2N4eDo6aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsK ICB1c2luZyBfX2dudV9jeHg6OmlzbmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAg dXNpbmcgX19nbnVfY3h4OjpzaWduYml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwog IHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xl c3M7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6Omlz bGVzc2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NtYXRoLnRjYyIgMSAzCiMgMzUgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvY21hdGgudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBp bnQgX19uKQogICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7CgogICAgICB3 aGlsZSAoX19uID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAqIF9feDsKICAg ICAgICAgIGlmIChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7CiAgICAgICAg fQoKICAgICAgcmV0dXJuIF9feTsKICAgIH0KfQojIDY1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Y21hdGgiIDIgMwojIDQyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMu dGNjIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAxIDMKIyA0NyAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kz ODYtbGludXgvYml0cy9jcHVfbGltaXRzLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9saW1pdHMiIDIgMwojIDg4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCm5hbWVz cGFjZSBzdGQKewogIGVudW0gZmxvYXRfcm91bmRfc3R5bGUKICB7CiAgICByb3VuZF9pbmRldGVy bWluYXRlID0gLTEsCiAgICByb3VuZF90b3dhcmRfemVybyA9IDAsCiAgICByb3VuZF90b19uZWFy ZXN0ID0gMSwKICAgIHJvdW5kX3Rvd2FyZF9pbmZpbml0eSA9IDIsCiAgICByb3VuZF90b3dhcmRf bmVnX2luZmluaXR5ID0gMwogIH07CgogIGVudW0gZmxvYXRfZGVub3JtX3N0eWxlCiAgewogICAg ZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAgIGRlbm9ybV9hYnNlbnQgPSAwLAogICAgZGVu b3JtX3ByZXNlbnQgPSAxCiAgfTsKCgoKCiAgc3RydWN0IF9fbnVtZXJpY19saW1pdHNfYmFzZQog IHsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gZmFsc2U7CgogICAgc3Rh dGljIGNvbnN0IGludCBkaWdpdHMgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9 IDA7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4 YWN0ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMDsKCiAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudDEwID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgIHN0 YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz ZTsKICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y bV9hYnNlbnQ7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsK CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2JvdW5kZWQgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs byA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICBzdGF0 aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBm bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogIH07Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0cyA6IHB1Ymxp YyBfX251bWVyaWNfbGltaXRzX2Jhc2UKICAgIHsKICAgICAgc3RhdGljIF9UcCBtaW4oKSB0aHJv dygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBtYXgo KSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9U cCBlcHNpbG9uKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAg IHN0YXRpYyBfVHAgcm91bmRfZXJyb3IoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9U cD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkg eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHNpZ25hbGlu Z19OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3Rh dGljIF9UcCBkZW5vcm1fbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDAp OyB9CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxib29s PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7Cgog ICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9Cgog ICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g MjsKICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFs c2U7IH0KICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg Ym9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3Rh dGljIGJvb2wgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAg ICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxz ZTsgfQogICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy YXBzID0gdHJ1ZQogICAgICAgICAgICAgICB8fCB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5k X3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgogIHRlbXBs YXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyPgogICAgewogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgY2hhciBtaW4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFyKSgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGlj IGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoY2hhcikxMjc7IH0KCiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx MCA9IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAg ICBzdGF0aWMgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0K ICAgICAgc3RhdGljIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNo YXIoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw ID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNoYXIg aW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMg Y2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBz dGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7 IH0KICAgICAgc3RhdGljIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1 OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMDcxICIvdXNyL2luY2x1ZGUvYysr LzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2ln bmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g dHJ1ZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuICgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkK ICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2ls b24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFy IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu Z19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNf ZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y bV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBz dGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25h bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFy PigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf Ym91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTEy OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0 IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1p bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hh ciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx MCA9IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAg ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh dGljIHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1 aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh cj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAg c3RhdGljIHVuc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0 ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdjaGFyX3Qg bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7 IH0KICAgICAgc3RhdGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2No YXJfdCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsK ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkg dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vy cm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g ZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g ZmFsc2U7CgogICAgICBzdGF0aWMgd2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25h bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0 aWMgd2NoYXJfdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96 ZXJvOwogICAgfTsKIyAxMjQxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1w bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2hvcnQ+CiAgICB7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBt aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMzI3NjcgLSAxKTsgfQogICAgICBzdGF0aWMg c2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGlj IGNvbnN0IGludCBkaWdpdHMgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9 IDQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBz dGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz dGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBpbmZpbml0eSgp IHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgcXVp ZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBz aG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAg ICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9y dCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2Fy ZF96ZXJvOwogICAgfTsKIyAxMjk4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0 ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+CiAgICB7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0 YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAg ICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDMy NzY3ICogMiArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE2OwogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxv bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hv cnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f ZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFs aW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh c19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVu b3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgp IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9 CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5z aWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBk ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBz aG9ydD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf dG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj X2xpbWl0czxpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVk ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAo aW50KSgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93KCkK ICAgICAgeyByZXR1cm4gKGludCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu dCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgaW50 IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGludCBy b3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNv bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0X05h TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBz dGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNDEwICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s aW1pdHM8dW5zaWduZWQgaW50PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj aWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuICh1bnNpZ25lZCkoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9 CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk aXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp bml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h YnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoK ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg aW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAg ICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0 ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbWluKCkg dGhyb3coKQogICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGlj IGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp dHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog ICAgICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAg ICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9 CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rl bm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBpbmZpbml0 eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAg c3RhdGljIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBk ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsg fQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy bzsKICAgIH07CiMgMTUyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxh dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+CiAgICB7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0 aWMgdW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3 TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg cm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw b25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhy b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAg ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBs b25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu c2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf bW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv OwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9u ZyBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy dWU7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g KC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgLSAxKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIG1h eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gOTIyMzM3MjAzNjg1NDc3NTgwN0xMOyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDYzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0czEwID0gMTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy OwogICAgICBzdGF0aWMgbG9uZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDA7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg eyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNv bnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGlj IGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0 aWMgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBkZW5vcm1fbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog ICAgfTsKIyAxNjM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+ CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgogICAgewogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMg dW5zaWduZWQgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAg ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4g KDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE5Owog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4 YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRp YyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg fQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9 IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBz dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNp Z25lZCBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n IGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25n IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu dW1lcmljX2xpbWl0czxmbG9hdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gMS4xNzU0OTQzNWUtMzhGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4RjsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMgPSAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDY7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh Y3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRp YyBmbG9hdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE5MjA5MjkwZS0wN0Y7 IH0KICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVy biAxLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMjU7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzc7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTI4OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudDEwID0gMzg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Owog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0 YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAg ICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9 CiAgICAgIHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy biAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAwLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9 IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNzY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9s aW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPgog ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg ICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1 MDcyMDE0ZS0zMDg7IH0KICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0cyA9IDUzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBk b3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMx ZS0xNjsgfQogICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAxLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEw MjE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3OwogICAgICBz dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m aW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAg ICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAg ICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3co KQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFO KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5v cm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7Cgog ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0KICAgICAgICAgICAgICByb3VuZF90b3dhcmRfemVybzsK ICAgIH07CiMgMTg0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8 PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPgogICAgewogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9uZyBk b3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjM2MjEwMzE0MzExMjA5MzUwNjI2 ZS00OTMyTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICB7 IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTDsgfQoKICAgICAgc3RhdGljIGNv bnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4 OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBz dGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wODQy MDIxNzI0ODU1MDQ0MzQwMWUtMTlMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSByb3VuZF9l cnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGludCBtaW5fZXhwb25lbnQgPSAtMTYzODE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50MTAgPSAtNDkzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAx NjM4NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDQ5MzI7CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfc2lnbmFsaW5nX05hTiA9CiAgICAgICAgICAgICAgICBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0KICAgICAgICAgICAgICAgIGRlbm9y bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9CiAgICAg ICAgICAgICAgICBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcXVp ZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25n IGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAg ICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biAwLjBMOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9CiAgICAg ICAgcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE5MjQgIi91c3IvaW5jbHVkZS9jKysvMy4y L2xpbWl0cyIgMwp9CiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0 cy50Y2MiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMSAzCiMgNDAg Ii91c3IvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3Bh Y2UgX19jeHhhYml2MQp7CiAgY2xhc3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1NSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgY2xhc3MgdHlw ZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJp dmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5 cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAq X19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAq X19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUo KSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgOTggIi91c3IvaW5jbHVkZS9jKysvMy4y L3R5cGVpbmZvIiAzCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25z dAogICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJhdG9y PT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9PSBf X2FyZy5fX25hbWU7IH0KCiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2Fy ZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoK ICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9v bCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19j YXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAgdmly dHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZv ICpfX3RhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRy KSBjb25zdDsKICB9OwoKCgogIGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbgogIHsK ICBwdWJsaWM6CiAgICBiYWRfY2FzdCgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9j YXN0KCkgdGhyb3coKTsKICB9OwoKCiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRp b24KICB7CiAgcHVibGljOgogICAgYmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0 dWFsIH5iYWRfdHlwZWlkKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDYgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlCiAgICBsb2NhbGU6OmNvbWJpbmUoY29u c3QgbG9jYWxlJiBfX290aGVyKSBjb25zdAogICAgewogICAgICBfSW1wbCogX190bXAgPSBuZXcg X0ltcGwoKl9NX2ltcGwsIDEpOwogICAgICBfX3RtcC0+X01fcmVwbGFjZV9mYWNldChfX290aGVy Ll9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKICAgICAgcmV0dXJuIGxvY2FsZShfX3RtcCk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYm9vbAogICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QK ICAgIHsKICAgICAgdHlwZWRlZiBzdGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsK ICAgICAgY29uc3QgX19jb2xsYXRlX3R5cGUmIF9fY29sbGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxh dGVfdHlwZT4oKnRoaXMpOwogICAgICByZXR1cm4gKF9fY29sbGF0ZS5jb21wYXJlKF9fczEuZGF0 YSgpLCBfX3MxLmRhdGEoKSArIF9fczEubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zMi5kYXRhKCksIF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAg dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBf RmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9j Ll9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgaWYgKCEoX19pIDwgX19sb2MuX01faW1wbC0+X01f ZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19pXSkpCiAgICAgICAgX190aHJvd19iYWRfY2FzdCgp OwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4oKl9fZmFjZXRzW19faV0p OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFj ZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKQogICAgewogICAgICBzaXplX3QgX19pID0g X0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xv Yy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIHJldHVybiAoX19pIDwgX19sb2MuX01faW1wbC0+ X01fZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19pXSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfZmxvYXQoX0luSXRlciBfX2JlZywgX0lu SXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVk ZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBjb25zdCBsb2NhbGUg X19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBl ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0 PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgog ICAgICBjb25zdCBjaGFyX3R5cGUgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBj b25zdCBjaGFyX3R5cGUgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgaW50IF9f cG9zID0gMDsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgaWYgKChfX3RyYWl0 c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVz KSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9feHRy YyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICArK19fcG9zOwogICAg ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBl IF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNbX01femVyb10pOwogICAgICBib29sIF9f Zm91bmRfemVybyA9IGZhbHNlOwogICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBf X3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9fYyA9ICooKytf X2JlZyk7CiAgICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgIH0KICAgICAgaWYg KF9fZm91bmRfemVybykKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01f emVyb107CiAgICAgICAgICArK19fcG9zOwogICAgICAgIH0KCgogICAgICBjb25zdCBzaXplX3Qg X19sZW4gPSBfTV9FIC0gX01femVybyArIDE7CiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfX2xl bl07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0 b21zKTsKICAgICAgYm9vbCBfX2ZvdW5kX2RlYyA9IGZhbHNlOwogICAgICBib29sIF9fZm91bmRf c2NpID0gZmFsc2U7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9w b2ludCgpOwoKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmlu ZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBp bmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNv bnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwoKICAgICAgd2hpbGUg KF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f cCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMsIDEwLCBfX2MpOwoKCiAgICAgICAgICBp ZiAoX19wICYmICFfX3RyYWl0c190eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAgICAgICAg ICAgewoKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfU19h dG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAg ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAo X190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3NlcCkKICAgICAgICAgICAgICAgICAgICYmIF9fY2hl Y2tfZ3JvdXBpbmcgJiYgIV9fZm91bmRfZGVjKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICBpZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2Zv dW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAg ICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVs c2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19kZWMpICYmICFfX2ZvdW5kX2RlYykKICAg ICAgICAgICAgewoKCgogICAgICAgICAgICAgIGlmIChfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkK ICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19z ZXBfcG9zKTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSAn Lic7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5k X2RlYyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKChfX3RyYWl0c190 eXBlOjplcShfX2MsIF9fd2F0b21zW19NX2VdKQogICAgICAgICAgICAgICAgICAgIHx8IF9fdHJh aXRzX3R5cGU6OmVxKF9fYywgX193YXRvbXNbX01fRV0pKQogICAgICAgICAgICAgICAgICAgJiYg IV9fZm91bmRfc2NpICYmIF9fcG9zKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19w b3M7CiAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsK ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwoKCiAgICAgICAgICAgICAgaWYgKF9fdHJh aXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKQogICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190 eXBlOjplcShfX2MsIF9fbWludXMpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICArK19fcG9zOwogICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19j LCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIF9fZm91bmRfc2NpID0gdHJ1ZTsKICAgICAgICAgICAgfQog ICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAgICBpZiAo X19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7Cgog ICAgICAgICAgaWYgKCFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyAr PSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9n cm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7 CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9m Yml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu SXRlcj46OgogICAgX01fZXh0cmFjdF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRl ZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBf X2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUg PSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8 X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAg ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19i YXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQog ICAgICAgIF9fYmFzZSA9IDg7CiAgICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNl OjpoZXgpCiAgICAgICAgX19iYXNlID0gMTY7CiAgICAgIGVsc2UKICAgICAgICBfX2Jhc2UgPSAx MDsKCgogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwog ICAgICBjb25zdCBjaGFyX3R5cGUgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBj b25zdCBjaGFyX3R5cGUgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKCiAgICAgIGlmICgo X190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg X19taW51cykpCiAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAg ICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgKytfX3Bv czsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNo YXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsKICAgICAg Y29uc3QgY2hhcl90eXBlIF9feCA9IF9fY3R5cGUud2lkZW4oJ3gnKTsKICAgICAgY29uc3QgY2hh cl90eXBlIF9fWCA9IF9fY3R5cGUud2lkZW4oJ1gnKTsKICAgICAgaWYgKF9fYmFzZSA9PSAxMCkK ICAgICAgICB7CiAgICAgICAgICBib29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICAgICAgICAg d2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAg ICAgX19mb3VuZF96ZXJvID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fZm91 bmRfemVybykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tf TV96ZXJvXTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2Jhc2Vm aWVsZCA9PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKF9fdHJh aXRzX3R5cGU6OmVxKF9fYywgX194KQogICAgICAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRz X3R5cGU6OmVxKF9fYywgX19YKSkKICAgICAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9f ZW5kKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9feHRyYyAr PSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgICAgICArK19f cG9zOwogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAg ICAgICAgICAgIF9fYmFzZSA9IDE2OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9IDg7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYmFzZSA9PSAxNikK ICAgICAgICB7CiAgICAgICAgICBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYm IF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9T X2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX19j ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg X194KSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fWCkpCiAgICAgICAgICAgICAgICAgICYm IF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3h0 cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICArK19f cG9zOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICB9CiAgICAgICAgfQoKCgogICAgICBzaXplX3QgX19sZW47CiAgICAgIGlm IChfX2Jhc2UgPT0gMTYpCiAgICAgICAgX19sZW4gPSBfTV9zaXplOwogICAgICBlbHNlCiAgICAg ICAgX19sZW4gPSBfX2Jhc2U7CgoKICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19NX3NpemVdOwog ICAgICBfX2N0eXBlLndpZGVuKF9TX2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7 CiAgICAgIHN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91 cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19n cm91cGluZy5zaXplKCk7CiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFy X3R5cGUgX19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsKICAgICAgd2hpbGUgKF9fYmVnICE9 IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX190cmFp dHNfdHlwZTo6ZmluZChfX3dhdG9tcywgX19sZW4sIF9fYyk7CgoKICAgICAgICAgIGlmIChfX3Ag JiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90eXBlKCkpKQogICAgICAgICAgICB7Cgog ICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAg ICAgICAgKytfX3BvczsKICAgICAgICAgICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAgICBf X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0 c190eXBlOjplcShfX2MsIF9fc2VwKSAmJiBfX2NoZWNrX2dyb3VwaW5nKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bv cyk7CiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9f YyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp dDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0KICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKICAgICAg aWYgKF9fY2hlY2tfZ3JvdXBpbmcgJiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAg ewoKICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBf cG9zKTsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3Vu ZF9ncm91cGluZykpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg ICAgIH0KCgogICAgICBfX3h0cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQp CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwog ICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg IF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90 eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgewoKICAgICAgaWYg KCEoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkpCiAgICAgICAgewoKCiAgICAg ICAgICBzdHJpbmcgX194dHJjOwogICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAgIF9fYmVn ID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jh c2UpOwoKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgICAgIF9fY29udmVydF90 b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAg ICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX3VsIDw9IDEpCiAg ICAgICAgICAgIF9fdiA9IF9fdWw7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9 IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAg ICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgICAg ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICAgICAg bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9D aGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAg ICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUgX190cnVlID0gX19ucC50cnVlbmFtZSgpOwogICAgICAg ICAgY29uc3QgX19zdHJpbmdfdHlwZSBfX2ZhbHNlID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAg ICAgIGNvbnN0IGNoYXJfdHlwZSogX190cnVlcyA9IF9fdHJ1ZS5jX3N0cigpOwogICAgICAgICAg Y29uc3QgY2hhcl90eXBlKiBfX2ZhbHNlcyA9IF9fZmFsc2UuY19zdHIoKTsKICAgICAgICAgIGNv bnN0IHNpemVfdCBfX3RydWVuID0gX190cnVlLnNpemUoKSAtIDE7CiAgICAgICAgICBjb25zdCBz aXplX3QgX19mYWxzZW4gPSBfX2ZhbHNlLnNpemUoKSAtIDE7CgogICAgICAgICAgZm9yIChzaXpl X3QgX19uID0gMDsgX19iZWcgIT0gX19lbmQ7ICsrX19uKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZysrOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0 ZiA9IF9fbiA8PSBfX2ZhbHNlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFp dHNfdHlwZTo6ZXEoX19jLCBfX2ZhbHNlc1tfX25dKSA6IGZhbHNlOwogICAgICAgICAgICAgIGJv b2wgX190ZXN0dCA9IF9fbiA8PSBfX3RydWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PyBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fdHJ1ZXNbX19uXSkgOiBmYWxzZTsKICAgICAgICAg ICAgICBpZiAoIShfX3Rlc3RmIHx8IF9fdGVzdHQpKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZiAm JiBfX24gPT0gX19mYWxzZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f diA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIGVsc2UgaWYgKF9fdGVzdHQgJiYgX19uID09IF9fdHJ1ZW4pCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19l bmQpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgICAgfQogICAg ICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QK ICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcg PSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz ZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19j X2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0 PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7 CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9f dWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1Nf Y19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQp CiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4 KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAg ICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBf X2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy PgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChp dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAg IHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBf TV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7 CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNf c3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19l cnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1p dHM8dW5zaWduZWQgaW50Pjo6bWF4KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls Yml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQg bG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19i YXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19l cnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCks IF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAg ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBz dHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rf aW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19j b252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jh c2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQg bG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGlu dCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lv LCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19z dHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2Jl ZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgIHsKICAgICAg c3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9N X2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAg X19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsK ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46 OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBj b25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7 CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy LCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vy ciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8 X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAg ICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19i ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194 dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVn OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICB0 eXBlZGVmIGlvc19iYXNlOjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQg PSBfX2lvLmZsYWdzKCk7CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNo b3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5m bGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3di YXNlKSk7CgogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2Jl ZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19i YXNlKTsKCgogICAgICBfX2lvLmZsYWdzKF9fZm10KTsKCiAgICAgIHVuc2lnbmVkIGxvbmcgX191 bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19j X2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkp CiAgICAgICAgX192ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX191bCk7CiAgICAgIGVsc2UK ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwog ICAgfQojIDYxOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0PF9DaGFy VCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19i YXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAg ICAgIF9WYWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKCgoKCgogICAgICAgIGNvbnN0IGludCBf X21heF9kaWdpdHMgPSBudW1lcmljX2xpbWl0czxfVmFsdWVUPjo6ZGlnaXRzMTAgKyAyOwogICAg ICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5wcmVjaXNpb24oKTsKCiAgICAgICAgaWYgKF9f cHJlYyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cykpCiAgICAgICAgICBf X3ByZWMgPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX21heF9kaWdpdHMpOwoKCiAgICAgICAg Y2hhciBfX2ZidWZbMTZdOwoKCiAgICAgICAgaW50IF9fbGVuOwoKCgogICAgICAgIGludCBfX2Nz X3NpemUgPSBfX21heF9kaWdpdHMgKiAzOwogICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2Fz dDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKCiAgICAgICAgY29uc3QgYm9v bCBfX2ZwID0gX1NfZm9ybWF0X2Zsb2F0KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fcHJlYyk7CiAg ICAgICAgaWYgKF9fZnApCiAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywg X19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfU19jX2xvY2FsZSwgX19wcmVjKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9f Y29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUp OwoKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAgICAgICAg ICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8 Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIGlmIChfX2Zw KQogICAgICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUs IF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19j X2xvY2FsZSwgX19wcmVjKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fbGVuID0g X19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgICB9CiMg Njg2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAg ICAgcmV0dXJuIF9NX3dpZGVuX2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBfX2NzLCBfX2xlbik7 CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgIF9PdXRJdGVyCiAgICAgIG51bV9w dXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgICBfTV9jb252ZXJ0X2ludChfT3V0SXRlciBfX3Ms IGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAg ICAgICAgICBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBfX3YpIGNvbnN0CiAgICAgIHsKCgoKICAgICAg ICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgICAgX1NfZm9ybWF0X2ludChfX2lvLCBfX2ZidWYsIF9f bW9kLCBfX21vZGwpOwoKCiAgICAgICAgaW50IF9fY3Nfc2l6ZSA9IDY0OwogICAgICAgIGNoYXIq IF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsK ICAgICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19m YnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2Fs ZSk7CgogICAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgICB7CiAgICAgICAg ICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAgICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0 PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgICBfX2xlbiA9 IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KCgoK CgoKICAgICAgICByZXR1cm4gX01fd2lkZW5faW50KF9fcywgX19pbywgX19maWxsLCBfX2NzLCBf X2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0 SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9N X3dpZGVuX2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGws IGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CiAg ICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwoKCiAgICAgIGNv bnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFy VD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0No YXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yo X0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICogX19sZW4pKTsKCgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8 X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikp OwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAg Y29uc3QgX0NoYXJUKiBfX3A7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1 c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgaWYgKF9fcCA9IF9fdHJh aXRzX3R5cGU6OmZpbmQoX193cywgX19sZW4sIF9fY3R5cGUud2lkZW4oJy4nKSkpCiAgICAgICAg X193c1tfX3AgLSBfX3dzXSA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKCgoKICAgICAgY29uc3Qg c3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGlvc19iYXNlOjpmbXRm bGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAg ICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9f cDI7CiAgICAgICAgICBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX3dzIDogX19sZW47CiAg ICAgICAgICBfX3AyID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fbnAudGhvdXNhbmRzX3NlcCgp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3Vw aW5nLnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3dzICsg X19kZWNsZW4pOwogICAgICAgICAgaW50IF9fbmV3bGVuID0gX19wMiAtIF9fd3MyOwoKCiAgICAg ICAgICBpZiAoX19wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6 Y29weShfX3AyLCBfX3AsIF9fbGVuIC0gX19kZWNsZW4pOwogICAgICAgICAgICAgIF9fbmV3bGVu ICs9IF9fbGVuIC0gX19kZWNsZW47CiAgICAgICAgICAgIH0KCgogICAgICAgICAgX193cyA9IF9f d3MyOwogICAgICAgICAgX19sZW4gPSBfX25ld2xlbjsKICAgICAgICB9CgogICAgICByZXR1cm4g X01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX3dzLCBfX2xlbik7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93aWRlbl9pbnQoX091dEl0ZXIgX19z LCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAg ICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0g X19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9m YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNf Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikp OwoKCiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5f YWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lk ZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgogICAgICBjb25zdCBudW1wdW5jdDxfQ2hh clQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNv bnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBjb25zdCBpb3Nf YmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFz ZWZpZWxkOwogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKCgoKCiAgICAg ICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAgICAgICAgIGlmICgoX19pby5mbGFncygpICYg aW9zX2Jhc2U6OnNob3diYXNlKSAmJiBfX2xlbiA+IDEpCiAgICAgICAgICAgIGlmIChfX2Jhc2Vm aWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9f b2ZmID0gMTsKICAgICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0K ICAgICAgICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193 czIgPSAqX193czsKICAgICAgICAgICAgICAgICooX193czIgKyAxKSA9ICooX193cyArIDEpOwog ICAgICAgICAgICAgIH0KICAgICAgICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19wID0gX19h ZGRfZ3JvdXBpbmcoX193czIgKyBfX29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVu KTsKICAgICAgICAgIF9fbGVuID0gX19wIC0gX193czI7CgogICAgICAgICAgX193cyA9IF9fd3My OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193 cywgX19sZW4pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg ICBfTV9pbnNlcnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwg Y29uc3QgX0NoYXJUKiBfX3dzLAogICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsK ICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBz dHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRp Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cp KTsKICAgICAgaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAg ICB7CiAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywg X19maWxsLCBfX3dzMiwgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nh c3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9f aW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19f aiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P dXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5 cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0 CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwog ICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsK ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2Nv bnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No YXJUPiBfX3N0cmluZ190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2Mo KTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVt cHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwog ICAgICAgICAgaWYgKF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwog ICAgICAgICAgZWxzZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAg ICAgICAgX19zID0gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwg X19uYW1lLnNpemUoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAg IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlv c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0 dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091 dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlw ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2ln bmVkIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lv LCBfX2ZpbGwsICd1JywgY2hhcigpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf T3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJf dHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0 X2ludChfX3MsIF9fYiwgX19maWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf X2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3Yp IGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3Un LCAnbCcsIF9fdik7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091 dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBk b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRv dWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywg X19maWxsLCBjaGFyKCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+ OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f ZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j b252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1f cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNv bnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygp OwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwg aW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg aW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxh Z3MoX19mbGFncyAmIF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2Up KTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19z LCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAgIF9faW8u ZmxhZ3MoX19mbGFncyk7CiAgICAgICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAg ICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAg ICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRs LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv bmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsK ICAgICAgX19iZWcgPSB0aGlzLT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9f ZXJyLCBfX3N0cik7CgogICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBk b3VibGU+OjpkaWdpdHMxMDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihf X2J1aWx0aW5fYWxsb2NhKF9fbikpOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdl dGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0 eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5j X3N0cigpOwogICAgICBfX2N0eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkg KyAxLCBjaGFyKCksIF9fY3MpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBf X2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5 X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7Cgog ICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAg IHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0 eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJp bmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9 IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFj ZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBm ID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0No YXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAg Y29uc3QgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0 KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5u ZWdfZm9ybWF0KCk7CgogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwg PyBfX21wdC5wb3NpdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJpbmdfdHlw ZSBfX25lZ19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwog ICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50 KCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5k c19zZXAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91 c2FuZHNfc2VwKCk7CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9f bXB0Lmdyb3VwaW5nKCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9f c2lnbjsKCiAgICAgIHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3Mg PSAwOwoKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9fdGVzdGRl Y2ZvdW5kID0gZmFsc2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAg Y2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nh c3Q8Y2hhcl90eXBlPihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAo aW50IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsr X19pKQogICAgICAgIHsKICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+ KF9fcC5maWVsZFtfX2ldKTsKICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAg ICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAg ICAgICAgICAgICB8fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAgICAgICAg ICAgICAgICB8fCAoKHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFz ZTo6bm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAg ICAgICAgICAgICAgewoKCgoKCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlw ZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5 bWJvbCgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wu c2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAg ICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiBfX2ogPCBfX2xlbiAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2Jl Zyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5m bGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgX190 ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAgICAgICAg ICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAg ICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2ln blswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19z aWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn KTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChf X2MgPT0gX19uZWdfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAg X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6 ZSgpICYmIF9fYyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAg ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAoX19uZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdf c2lnbjsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug bW9uZXlfYmFzZTo6dmFsdWU6CgoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9f ZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpk aWdpdCwgX19jKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0gX19kICYm ICFfX3Rlc3RkZWNmb3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0g X19zZXApKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChf X2MgPT0gX19kKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAg ICAgICAgIF9fdGVzdGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6 ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz dHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAgICAgICAg ICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNl OgogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAgICAgICAg ICAgaWYgKF9faSAhPSAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2Vu ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNw YWNlLCBfX2MpKQogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlm IChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4g PSBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBm b3IgKDsgX19jICE9IF9fZW9mICYmIF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAgICAgd2hp bGUgKF9fYmVnICE9IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAgICAgICBf X2MgPSAqKCsrX19iZWcpOwoKICAgICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAgICAgICAg IF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5p dHNbMF0gPT0gX19jdHlwZS53aWRlbignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShf X3RlbXBfdW5pdHMuYmVnaW4oKSk7CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24g PT0gX19uZWdfc2lnbikKICAgICAgICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5i ZWdpbigpLCBfX2N0eXBlLndpZGVuKCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUo KSAmJiBfX2dyb3VwaW5nX3RtcC5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3Zl cmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9f dGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAg ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlk IHx8ICFfX3RlbXBfdW5pdHMuc2l6ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls Yml0OwogICAgICBlbHNlCgogICAgICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAg ICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVy Pjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0 CiAgICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNv bnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKTsKCgogICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0 aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgaW50IF9f bGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAg IGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19jc19zaXplID0g X19sZW4gKyAxOwogICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5f YWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9f Y3MsIF9fY3Nfc2l6ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCog X193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy VCkgKiBfX2NzX3NpemUpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4s IF9fd3MpOwogICAgICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRo aXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl cgogICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg X19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAg ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBl ZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9f aW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8 c2l6ZV90eXBlPihfX2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hh clQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwg ZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1 c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2Um IF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5 cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoK CgogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBj b25zdCBjaGFyX3R5cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1v bmV5X2Jhc2U6OnBhdHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlm ICgqX19iZWcgIT0gX19jdHlwZS53aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9 IF9faW50bCA/IF9fbXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAg ICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRp dmVfc2lnbigpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9 IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAg ICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRp dmVfc2lnbigpOwogICAgICAgICAgKytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBf X2N0eXBlLnNjYW5fbm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBp ZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19y ZXM7CiAgICAgICAgICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5n X3R5cGUgX19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7 CgoKICAgICAgICAgIGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0 cygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdp dHMoKTsKICAgICAgICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgY29uc3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFs X3BvaW50KCk7CiAgICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19l bmQgLSBfX2ZyYWMsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192 YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAg ICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAg ICAgICAgICAgICAgIGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAg ICAgICAgICAgICAgICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAg ICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywg X196ZXJvKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigp LCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9f bXB0Lmdyb3VwaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IF9fbXBmLmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6 ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUg X19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwog ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7 CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBp bmcuc2l6ZSgpOwogICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19i ZWcpICogMjsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAg ICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJU KSAqIF9fbikpOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3Jv dXBpbmcoX193czIsIF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAg ICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmlu c2VydCgwLCBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAg ICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFk anVzdGZpZWxkOwogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBf X3NpZ24uc2l6ZSgpOwogICAgICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNl OjpzaG93YmFzZSkgPyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3Rp cGFkID0gX19mID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAg ICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19f aV0pOwogICAgICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBp ZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAg IF9fcmVzICs9IF9fc3ltYm9sOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2ln bi5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6 CiAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAg ICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3Ry aW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9u ZToKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAg X19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAg ICBpZiAoX19zaWduLnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBl KF9fc2lnbi5iZWdpbigpICsgMSwgX19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBf X3Jlcy5zaXplKCk7CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAg ICBfX3Jlcy5hcHBlbmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVs c2UKCiAgICAgICAgICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAt IF9fbGVuLCBfX2ZpbGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAg ICAgIH0KCgogICAgICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsr X19qLCArK19fcykKICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAg ICBfX2lvLndpZHRoKDApOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3Jk ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAog ICAgeyByZXR1cm4gdGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9J bkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVy X3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xv YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAg PSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5 cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwog ICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQp OwoKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19s ZW4gJiYgIV9fZXJyOyArK19faSkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9y bWF0W19faV07CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAg ICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9 IDA7CiAgICAgICAgICAgICAgaW50IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09 ICdFJyB8fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf X21vZCA9IF9fYzsKICAgICAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBf Q2hhclQgX193Y3NbMTBdOwogICAgICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAu X01fZGF5c19hYmJyZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj dF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICAgICBjYXNlICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJf dHlwZSogX19kYXlzMls3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIp OwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50 bV93ZGF5LCBfX2RheXMyLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19l cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgog ICAgICAgICAgICAgICAgY2FzZSAnYic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5 cGUqIF9fbW9udGhzMVsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJl dmlhdGVkKF9fbW9udGhzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2Jl ZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICBjYXNlICdCJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19t b250aHMyWzEyXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsK ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1f bW9uLCBfX21vbnRoczIsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19l cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoK ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAg ICAgICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBf TV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAg ICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAg ICAgICAgX19jcyA9ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4o X19jcywgX19jcyArIDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFf Zm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgY2FzZSAnSCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251 bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgY2FzZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0 X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRy YWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9f ZXJyKQogICAgICAgICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAg ICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwg MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAg ICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAg ICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICAgICBjYXNlICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6 JU0iOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3dj cyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQs IF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug J1MnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3Rt LT50bV9zZWMsIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0 eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSAndCc6CiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09 ICdcdCcpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAg ICBfX2NzID0gIiVIOiVNOiVTIjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2Nz LCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3Jt YXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICBjYXNlICd4JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X19kYXRlc1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRl cyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQs IF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19kYXRlc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg Y2FzZSAnWCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07 CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAg ICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy ciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNb MF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoK ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95 ZWFyLCAwLCA5OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwg X19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1kn OgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwg MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6 bWF4KCksIDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJy KTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3Rt LT50bV95ZWFyID0gX19tZW0gLSAxOTAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIGNhc2UgJ1onOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5 cGVfYmFzZTo6dXBwZXIsICpfX2JlZykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgaW50IF9fdG1wOwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u YW1lKF9fYmVnLCBfX2VuZCwgX190bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAg IGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJy ICYmIF9fdG1wID09IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5 cGUud2lkZW4oJy0nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19j dHlwZS53aWRlbignKycpKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vy cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5k LCBfX3RtcCwgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAg ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7Cgog ICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAg ICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAg fQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf SW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9l eHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVt YmVyLAogICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xl biwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAg ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAg IHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0 dmFsaWQgPSB0cnVlOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAo X19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMo Y3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0g X19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg ICAgICArK19faTsKICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewog ICAgICAgICAgaW50IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAg aWYgKF9fbWluIDw9IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19t ZW1iZXIgPSBfX3ZhbHVlOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9 IGZhbHNlOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7 CiAgICAgIGlmICghX190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi aXQ7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy PgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0 X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwK ICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRl eGxlbiwKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0 CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwog ICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eo c2l6ZW9mKGludCkgKiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsK ICAgICAgc2l6ZV90IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAg ICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2Jl ZzsKCiAgICAgIGZvciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kx KQogICAgICAgIGlmIChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hl c1tfX25tYXRjaGVzKytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAg ICAgIHsKCiAgICAgICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6 ZV90IF9faTIgPSAwOyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21p bmxlbiA9IG1pbihfX21pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNf dHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChf X3BvcyA8IF9fbWlubGVuICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAg ICAgIGZvciAoc2l6ZV90IF9faTMgPSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hl c1tfX2kzXV07CiAgICAgICAgICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAg ICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVz XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg ICAgICBicmVhazsKICAgICAgICB9CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAg IHsKCiAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBj b25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAg ICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bv c10gPT0gKl9fYmVnKQogICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlm IChfX2xlbiA9PSBfX3BvcykKICAgICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAg ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQog ICAgICBlbHNlCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2 YWxpZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGlt ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcs IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193 Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2Mg PSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNl X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg X19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu SXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVy X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAg ICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBs b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBf X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUu d2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0 KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVn ID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVy biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n ZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNf dHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVu Y3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4o X19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9k YXlzX2FiYnJldmlhdGVkKF9fZGF5cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4 dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoK CgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9 IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3Rw Ll9NX2RheXMoX19kYXlzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19k YXlzW19fdG1wd2RheV07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAg ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNf dHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4g JiYgX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9 PSAqX19iZWcpCiAgICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAg IGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm YWlsYml0OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBf X3RtLT50bV93ZGF5ID0gX190bXB3ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9f ZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2Jl ZzsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21v bnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAg ICAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0p IGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190 eXBlOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5j dDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihf X2xvYyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9N X21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAg X01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19l cnIpOwoKCgoKCgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3Qg X19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAg ICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X19uYW1lID0gX19tb250aHNbX190bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10g PT0gKl9fYmVnKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xl biA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChf X3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9f bmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsK ICAgICAgICAgICAgICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikK ICAgICAgICAgICAgX190bS0+dG1fbW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYg KF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAg IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg ICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt KSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBj b25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf X2xvYyk7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0g MDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAh PSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsK ICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBf X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19p ID09IDIgfHwgX19pID09IDQpCiAgICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAg ICBfX2NvbnZlcnRfdG9fdihfX2RpZ2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2Fs ZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0g MjE0NzQ4MzY0NykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8g X19sIDogX19sIC0gMTkwMDsKICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nh c3Q8aW50PihfX2wpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0 SXRlcgogICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBf X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNv bnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAg IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3Qm IF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUg KF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5u YXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09 ICclJykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAg ICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAg ICAgICAgICAgICBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAg ICsrX19iZWc7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAg ICAgICAgIF9fZm9ybWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAg ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICBfX2Zvcm1hdCA9IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19w dXQoX19zLCBfX2lvLCBjaGFyX3R5cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19f czsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg ICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hh ciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0g X19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9m YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNv bnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAg ICAgIGNvbnN0IHNpemVfdCBfX21heGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0K ICAgICAgICBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihj aGFyX3R5cGUpICogX19tYXhsZW4pKTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwog ICAgICBfX2ZtdFswXSA9IF9fY3R5cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAg ICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0g PSBjaGFyX3R5cGUoKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBf X2ZtdFsxXSA9IF9fbW9kOwogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAg IF9fZm10WzNdID0gY2hhcl90eXBlKCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19y ZXMsIF9fbWF4bGVuLCBfX2ZtdCwgX190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90 cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0g MDsgX19pIDwgX19sZW47ICsrX19pLCArK19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsK ICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25z dCBfQ2hhclQqKSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgc2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hh clQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAg IGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAg ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29u c3QKICAgIHsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAg ICAgY29uc3Qgc3RyaW5nX3R5cGUgX190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9N X2NvbXBhcmUoX19vbmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlw ZQogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9f bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0g KF9faGkgLSBfX2xvKSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nh c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAg ICAgIHNpemVfdCBfX3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAg IGlmIChfX3JlcyA+PSBfX2xlbikKICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAg ICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog KF9fcmVzICsgMSkpKTsKICAgICAgICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsg MSk7CiAgICAgICAgfQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAg ZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg IHsKICAgICAgdW5zaWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19o aTsgKytfX2xvKQogICAgICAgIF9fdmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAg ICAgICAgICAgICAgICAgICAoX192YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+ OjpkaWdpdHMgLSA3KSkpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwog ICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRf dG9fdihjb25zdCBjaGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jh c2UgPSAxMCk7CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19jb252 ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgY29uc3QgaW50IF9fc2l6ZSwgY29uc3QgY2hhciogX19m bXQsCiAgICAgICAgICAgICAgICAgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQg X19wcmVjID0gLTEpOwojIDE5OTUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh Y2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBzdHJ1Y3QgX19wYWQKICAgIHsKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfcGFkKGlv c19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBfQ2hhclQqIF9fbmV3cywKICAgICAgICAgICAg IGNvbnN0IF9DaGFyVCogX19vbGRzLCBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAogICAgICAg ICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSk7CiAgICB9 OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lk CiAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFy VCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX25l d3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSkKICAg IHsKICAgICAgc2l6ZV90IF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBf X29sZGxlbik7CiAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19i dWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fcGxlbikpOwogICAgICBfVHJhaXRzOjph c3NpZ24oX19wYWRzLCBfX3BsZW4sIF9fZmlsbCk7CgogICAgICBfQ2hhclQqIF9fYmVnOwogICAg ICBfQ2hhclQqIF9fZW5kOwogICAgICBzaXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3QgX19i ZWdsZW47CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxhZ3MoKSAm IGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6 bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9f b2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuOwogICAgICAgICAgX19lbmQgPSBf X3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6aW50 ZXJuYWwgJiYgX19udW0pCiAgICAgICAgewoKCgogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19p by5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX21p bnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAgICAgICAgY29uc3QgX0NoYXJUIF9fcGx1cyA9 IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9IF9UcmFpdHM6 OmVxKF9fb2xkc1swXSwgX19taW51cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9U cmFpdHM6OmVxKF9fb2xkc1swXSwgX19wbHVzKTsKCiAgICAgICAgICBib29sIF9fdGVzdGhleCA9 IF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJzAnKSwgX19vbGRzWzBdKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiAoX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbigneCcpLCBfX29sZHNb MV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX2N0eXBl LndpZGVuKCdYJyksIF9fb2xkc1sxXSkpOwogICAgICAgICAgaWYgKF9fdGVzdGhleCkKICAgICAg ICAgICAgewogICAgICAgICAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKICAgICAgICAgICAg ICBfX25ld3NbMV0gPSBfX29sZHNbMV07CiAgICAgICAgICAgICAgX19tb2QgKz0gMjsKICAgICAg ICAgICAgICBfX25ld3MgKz0gMjsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAg ICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nh c3Q8X0NoYXJUKj4oX19vbGRzICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl IGlmIChfX3Rlc3RzaWduKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX1RyYWl0czo6ZXEo KF9fbmV3c1swXSA9IF9fb2xkc1swXSksIF9fcGx1cykgPyBfX3BsdXMgOiBfX21pbnVzOwogICAg ICAgICAgICAgICsrX19tb2Q7CiAgICAgICAgICAgICAgKytfX25ld3M7CiAgICAgICAgICAgICAg X19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAg ICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAg ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9fYmVn ID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAg IF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAg ICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0No YXJUKj4oX19vbGRzKTsKICAgICAgICB9CiAgICAgIF9UcmFpdHM6OmNvcHkoX19uZXdzLCBfX2Jl ZywgX19iZWdsZW4pOwogICAgICBfVHJhaXRzOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2Vu ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2Qp OwogICAgfQojIDIwOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50 Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBfX3ZlcmlmeV9n cm91cGluZyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZywKICAgICAgICAg ICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nX3RtcCkKICAgIHsK ICAgICAgaW50IF9faSA9IDA7CiAgICAgIGludCBfX2ogPSAwOwogICAgICBjb25zdCBpbnQgX19s ZW4gPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgY29uc3QgaW50IF9fbiA9IF9fZ3JvdXBpbmdf dG1wLnNpemUoKTsKICAgICAgYm9vbCBfX3Rlc3QgPSB0cnVlOwoKCgoKICAgICAgd2hpbGUgKF9f dGVzdCAmJiBfX2kgPCBfX24gLSAxKQogICAgICAgIGZvciAoX19qID0gMDsgX190ZXN0ICYmIF9f aiA8IF9fbGVuICYmIF9faSA8IF9fbiAtIDE7ICsrX19qLCsrX19pKQogICAgICAgICAgX190ZXN0 ICY9IF9fZ3JvdXBpbmdbX19qXSA9PSBfX2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKCgog ICAgICBfX2ogPT0gX19sZW4gPyBfX2ogPSAwIDogX19qOwogICAgICBfX3Rlc3QgJj0gX19ncm91 cGluZ1tfX2pdID49IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwogICAgICByZXR1cm4g X190ZXN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFy VCoKICAgIF9fYWRkX2dyb3VwaW5nKF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAsCiAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcsIGNvbnN0IGNoYXIqIF9fZ2VuZCwKICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19maXJzdCwgY29uc3QgX0NoYXJUKiBfX2xhc3Qp CiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ2JlZykKICAgICAgICB7CiAg ICAgICAgICBfX3MgPSBfX2FkZF9ncm91cGluZyhfX3MsIF9fc2VwLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKF9fZ2JlZyArIDEgPT0gX19nZW5kID8gX19nYmVnIDogX19nYmVnICsg MSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fZmlyc3QsIF9fbGFz dCAtICpfX2diZWcpOwogICAgICAgICAgX19maXJzdCA9IF9fbGFzdCAtICpfX2diZWc7CiAgICAg ICAgICAqX19zKysgPSBfX3NlcDsKICAgICAgICB9CiAgICAgIGRvCiAgICAgICAgKl9fcysrID0g Kl9fZmlyc3QrKzsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAgcmV0dXJu IF9fczsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwg ZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIHRydWU+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT47CiAg ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIHRydWU+OwogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIG1vbmV5X3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8Y2hh cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bnVtX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVuY3Q8Y2hhcj47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRp bWVfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8Y2hh cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPGNoYXI+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IGN0eXBlX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5h bWU8Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0 ZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hhcj47Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ JgogICAgdXNlX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxv Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mCiAgICB1 c2VfZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh dGUKICAgIGNvbnN0IG51bXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PGNoYXI+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDxj aGFyPiYKICAgIHVzZV9mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1f Z2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg bW9uZXlwdW5jdDxjaGFyLCB0cnVlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIHRy dWU+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlw dW5jdDxjaGFyLCBmYWxzZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4g Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8 Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0 PG1vbmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGNvbnN0IF9fdGltZXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8 Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDx0 aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv bnN0IG1lc3NhZ2VzPGNoYXI+JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3Qg bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBl PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAg aGFzX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPGNoYXI+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh Y2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxt b25leXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg Ym9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8 X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8 bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u ZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5j dF9ieW5hbWU8d2NoYXJfdCwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1 bmN0X2J5bmFtZTx3Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlf Z2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8d2NoYXJfdD47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIG51bV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8d2No YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+OwogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg Y2xhc3MgdGltZV9wdXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0 aW1lX2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1l PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczx3Y2hhcl90PjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBjdHlwZV9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIGNvZGVjdnRfYnluYW1lPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIGNvbGxhdGU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNv bGxhdGVfYnluYW1lPHdjaGFyX3Q+OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvZGVj dnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFy X3QsIGNoYXIsIG1ic3RhdGVfdD4gPihsb2NhbGUgY29uc3QmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBjb25zdCBjb2xsYXRlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8d2NoYXJf dD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5j dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2Fs ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9wdXQ8d2NoYXJfdD4mCiAgICB1 c2VfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt cGxhdGUKICAgIGNvbnN0IG51bV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDx3 Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1v bmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90 LCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1v bmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJf dCwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg bW9uZXlfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X2dldDx3Y2hh cl90PiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3RpbWVwdW5jdDx3Y2hhcl90PiYKICAgIHVz ZV9mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g dGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVf cHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29u c3QgdGltZV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczx3Y2hh cl90PiYKICAgIHVzZV9mYWNldDxtZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK IGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0 PGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0 PG51bXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90 PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m YWNldDxtb25leXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w bGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxv Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9n ZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s CiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4g Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj ZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBib29sCiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUm KTsKCn0KIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbG9jYWxlIiAyIDMKIyAzOCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxf Q2hhclQsX1RyYWl0cz4mIF9fb3MpCiAgICA6IF9NX29rKF9fb3MuZ29vZCgpKSwgX01fb3MoX19v cykKICAgIHsKCiAgICAgIGlmIChfTV9vayAmJiBfX29zLnRpZSgpKQogICAgICAgIF9fb3MudGll KCktPmZsdXNoKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAo Kl9fcGYpKF9fb3N0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYg KCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwog ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9f cGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19w ZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhp cyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3Ni aW4pCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp ZiAoIV9fY29weV9zdHJlYW1idWZzKCp0aGlzLCBfX3NiaW4sIHRoaXMtPnJkYnVmKCkpKQogICAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAg ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYg KCFfX3NiaW4pCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJvb2wgX19uKQogICAgewogICAg ICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf TV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0 aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpv cGVyYXRvcjw8KGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9z X2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll bGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAg ICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6 OmhleCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pOwogICAgICAgICAg ICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wp LmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9f YywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9f bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01f Y2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+ cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgp OwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkg JiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf TV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2Ig PSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKChfX2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8 IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2w7CiAgICAgICAgICAgICAgICAgICAg ICBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KF9fbik7CiAgICAgICAgICAg ICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCku ZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19j LCBfX24pLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9u ZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1w dXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1w dXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRo aXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9y PDwobG9uZyBkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAg IGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFp bGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fbikK ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hl Y2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0 KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6cHV0KGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0 ID0gcmRidWYoKS0+c3B1dGMoX19jKTsKICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50 X3R5cGUoX19wdXQsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OndyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAg ICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg ICAgICAgc3RyZWFtc2l6ZSBfX3B1dCA9IHRoaXMtPnJkYnVmKCktPnNwdXRuKF9fcywgX19uKTsK ICAgICAgICAgIGlmICggX19wdXQgIT0gX19uKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjpmbHVzaCgpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVm KCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6dGVsbHAoKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBl KC0xKTsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1 ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwogICAgICBy ZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAgewogICAg ICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJy ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6Om91dCk7CgoKICAg ICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpz ZWVrZGlyIF9fZCkKICAgIHsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAg ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYs IF9fZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90 eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v dXQsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6 c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0 LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hh clQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fdyArIDEpKSk7CiAgICAg ICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4g PSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291 dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19s ZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19w YWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0 OwogICAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNo YXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ JiBfX291dCwgY2hhciBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFy LCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6 OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291 dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIq PihfX2J1aWx0aW5fYWxsb2NhKF9fdyArIDEpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBf X2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYg KF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxj aGFyLCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jLCBfX3csIF9fbGVu LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAg IF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf X291dCwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJl YW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFt c2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0g c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f dykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1z aXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVu KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFp dHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7 CiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4g PSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBf X2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9f b3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAg ICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0 OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAg ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7 CgoKCiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj4gX190cmFpdHNfdHlwZTsKCiAgICAg IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYg KF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fY2xlbiA9IF9fdHJh aXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nh c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX2NsZW4gKyAx KSkpOwogICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19jbGVuOyArK19faSkK ICAgICAgICAgICAgX193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19faV0pOwogICAgICAgICAg X0NoYXJUKiBfX3N0ciA9IF9fd3M7CgogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19jbGVu KTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAg ICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxs b2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xl bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJh aXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MsIF9fdywgX19sZW4sIGZhbHNl KTsKICAgICAgICAgICAgICAgICAgX19zdHIgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9f bGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9f c3RyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9f cykKICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJu IF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19v c3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9f cykKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0 cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMg PSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cpKTsKICAgICAgICAgICAg ICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVu Z3RoKF9fcykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQs IF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAg IF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAgICAgICAg ICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBl ZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAg dHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zID0gX19zdHIuZGF0 YSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg X0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp emVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGlj X2Nhc3Q8c3RyZWFtc2l6ZT4oX19zdHIuc2l6ZSgpKTsKCgoKICAgICAgICAgIGlmIChfX3cgPiBf X2xlbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46 Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsIF9fcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAg ICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAg ICAgfQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9f cywgX19sZW4pOwogICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMg IT0gX19sZW4pCiAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK ICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRl IGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVu ZGwob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mKTsK ICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1w bGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxh dGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgdW5zaWduZWQgY2hhcik7CiAgZXh0ZXJu IHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHNpZ25lZCBjaGFyKTsKICBl eHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgY2hhciop OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCB1 bnNpZ25lZCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0 cmVhbSYsIGNvbnN0IHNpZ25lZCBjaGFyKik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz aWNfb3N0cmVhbTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZGwod29z dHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZHMod29zdHJlYW0mKTsKICBl eHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGZsdXNoKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBs YXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRl bXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRl bXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOwog IGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNo YXIqKTsKCn0KIyAyNzYgIi91c3IvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDIgMwojIDcxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9pdGVyYXRvciIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvaXN0cmVhbSIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lzdHJlYW0iIDMKCgoK Cm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9z PF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAg dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFt YnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp Y19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3Ry ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAg IHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBl OwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3Rl ZDoKCiAgICAgIHN0cmVhbXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxp Y2l0CiAgICAgIGJhc2ljX2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewog ICAgICAgIHRoaXMtPmluaXQoX19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgw KTsKICAgICAgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsg X01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAg ZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBf X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9z X3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFz ZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3Bl cmF0b3I+Pihib29sJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y Pj4oc2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1 bnNpZ25lZCBzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRv cj4+KGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVu c2lnbmVkIGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+ KGxvbmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNp Z25lZCBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+ KGxvbmcgbG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+ KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg b3BlcmF0b3I+PihmbG9hdCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVy YXRvcj4+KGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRv cj4+KGxvbmcgZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPj4odm9pZComIF9fcCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+ PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAg ICBnY291bnQodm9pZCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBp bnRfdHlwZQogICAgICBnZXQodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0 KGNoYXJfdHlwZSYgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90 eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxp bmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykp OyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9f c2IsIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAg ICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChf X3NiLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBn ZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0p OwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9f biwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdu b3JlKHN0cmVhbXNpemUgX19uID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjpl b2YoKSk7CgogICAgICBpbnRfdHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAg IHN0cmVhbXNpemUKICAgICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoK ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAg IHN5bmModm9pZCk7CgogICAgICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9f aXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlw ZSYKICAgICAgc2Vla2cob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAg IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhw bGljaXQKICAgICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywg Ym9vbCBfX25vc2tpcHdzID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJu IF9NX29rOyB9CgogICAgcHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0 cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1 cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8 Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVy YXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBf X2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBf VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+Pihi YXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAg IHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRl bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAg ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNo YXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9f cykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBjbGFzcyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAg ICB7CiAgICBwdWJsaWM6CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRy YWl0c190eXBlOwoKCgogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4gX19vc3RyZWFtX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVh bShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJl YW1fdHlwZShfX3NiKSwgX19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0 dWFsCiAgICAgIH5iYXNpY19pb3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0K CgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lzdHJlYW0udGNjIiAzCgoKCgpuYW1lc3BhY2Ug c3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBib29sIF9fbm9za2lwd3MpCiAgICB7CiAg ICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19pbi50aWUoKSkK ICAgICAgICAgICAgX19pbi50aWUoKS0+Zmx1c2goKTsKICAgICAgICAgIGlmICghX19ub3NraXB3 cyAmJiAoX19pbi5mbGFncygpICYgaW9zX2Jhc2U6OnNraXB3cykpCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog ICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAg ICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBp ZiAoX19pbi5fTV9jaGVja19mYWNldChfX2luLl9NX2ZjdHlwZSkpCiAgICAgICAgICAgICAgICB3 aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAg ICAgICAgICAgICYmIF9faW4uX01fZmN0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OnRvX2No YXJfdHlwZShfX2MpKSkKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CgoK CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkK ICAgICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICAg ICAgICB9CiAgICAgICAgfQoKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIF9NX29rID0g dHJ1ZTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX29rID0gZmFsc2U7CiAgICAg ICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBl JikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAg ewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg b3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBfX3Bm KCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihi b29sJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jh c2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0 KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJy LCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl IF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAg ICAgIGxvbmcgX19sOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0 KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJy LCBfX2wpOwoKCiAgICAgICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkK ICAgICAgICAgICAgICAgICAgJiYgKG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWluKCkgPD0gX19s CiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8c2hvcnQ+Ojpt YXgoKSkpCiAgICAgICAgICAgICAgICBfX24gPSBfX2w7CiAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy YXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVj a19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhp cywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f ZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGludCYgX19u KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k Yml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf ZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMs IDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9z X2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAgICYmIChudW1lcmljX2xpbWl0czxpbnQ+ OjptaW4oKSA8PSBfX2wKICAgICAgICAgICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmljX2xp bWl0czxpbnQ+OjptYXgoKSkpCiAgICAgICAgICAgICAgICBfX24gPSBfX2w7CiAgICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0 LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+ Pihsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z X2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt Z2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9f ZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAg ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbikKICAg IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAg ICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9 IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAo X01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5n ZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5z aWduZWQgbG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlv c3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg KnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsK ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihmbG9hdCYgX19uKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0 KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAg ICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBp b3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9N X2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0 KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9u ZyBkb3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwog ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShp b3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu dW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywg X19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odm9pZComIF9fbikKICAgIHsKICAg ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAg ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAg X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYm91dCkKICAgIHsKICAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgIHsKICAg ICAgICAgICB0cnkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3h0 cmN0ID0gMDsKICAgICAgICAgICAgICAgaWYgKF9fc2JvdXQpCiAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluID0gdGhpcy0+cmRidWYo KTsKICAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywg X19zYmluLCBfX3Nib3V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmICgh X19zYm91dCB8fCAhX194dHJjdCkKICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpCiAgICAgICAgICAgICB7CgoKICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgIH0KICAgICAgICAgfQogICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgZ2V0KHZvaWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9f ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAg ICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYg KCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICBf TV9nY291bnQgPSAxOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9f YzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUmIF9fYykKICAgIHsKICAgICAgX01fZ2Nv dW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj b25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBp bnRfdHlwZSBfX2J1ZnZhbCA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAg ICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2J1ZnZhbCwgX19lb2YpKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAg ICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYnVmdmFsKTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJf dHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0g dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGlu dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFt YnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9f YyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwg X19uCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19j LCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlw ZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9f cysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBf X2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf X2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2Zi aXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6CiAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVs aW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlw ZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19l b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog X190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBf X3RoaXNfc2ItPnNnZXRjKCk7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYzIgPSB0cmFpdHNf dHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CgogICAgICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5 cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFp dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkKICAgICAgICAgICAgICAgICAgICAg JiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLnNwdXRjKF9fYzIpLCBfX2VvZikpCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAg ICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICBfX2My ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9NX2dj b3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVh bXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRf dHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAg ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAg ICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAg ICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAo X01fZ2NvdW50ICsgMSA8IF9fbgogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6 OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNf dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAg ICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsr X01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlw ZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lk ZWxpbSkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zYi0+ c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9 IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01f Z2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf X2NlcmIgJiYgX19uID4gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog ICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAg ICAgICAgICAgIGludF90eXBlIF9fYzsKCiAgICAgICAgICAgICAgX19uID0gbWluKF9fbiwgbnVt ZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpKTsKICAgICAgICAgICAgICB3aGlsZSAoX01f Z2NvdW50IDwgX19uCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50 X3R5cGUoX19jID0gX19zYi0+c2J1bXBjKCksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIGlmICh0cmFpdHNf dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkKICAgICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2lu dF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OgogICAgcGVlayh2b2lkKQogICAgewogICAgICBpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6 ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRy dWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7IF9fYyA9IHRoaXMtPnJkYnVmKCktPnNnZXRjKCk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWQo Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBfTV9nY291bnQgPSAw OwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAg ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX2djb3Vu dCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19uKTsKICAgICAgICAgICAgICBpZiAoX01f Z2NvdW50ICE9IF9fbikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpl b2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZHNvbWUoY2hhcl90eXBlKiBf X3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50 cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0g dGhpcy0+cmRidWYoKS0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPj0gMCkK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9f bik7CiAgICAgICAgICAgICAgICAgIGlmIChfX251bSkKICAgICAgICAgICAgICAgICAgICBfTV9n Y291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh aWxiaXQpOwogICAgICByZXR1cm4gX01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhj aGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAg ICAgICAgIGlmICghX19zYgogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50 X3R5cGUoX19zYi0+c3B1dGJhY2tjKF9fYyksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IHVuZ2V0KHZvaWQpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFp dHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRo aXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8 IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zdW5nZXRjKCksIF9fZW9mKSkKICAgICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9 CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg aW50CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQog ICAgewogICAgICBpbnQgX19yZXQgPSAtMTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf X3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoX19zYikKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fc2ItPnB1YnN5bmMoKSA9PSAtMSkKICAgICAg ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0 ZWxsZyh2b2lkKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAg ICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz ZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CiAgICAgIHJldHVybiBfX3Jl dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgX01f Z2NvdW50ID0gMDsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAg ICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19i YXNlOjppbik7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkp KQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAg IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cob2ZmX3R5cGUgX19v ZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZGlyKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwog ICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9f ZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kaXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsK CgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRv cj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpCiAg ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVh bV90eXBlOwogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2lu LCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg ICAgICAgIHsgX19pbi5nZXQoX19jKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgZWxzZQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp OwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCog X19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBf X2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19z dHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U cmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHN0cmVhbXNp emUgX19leHRyYWN0ZWQgPSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRy eSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSBf X2luLndpZHRoKCk7CiAgICAgICAgICAgICAgaWYgKF9fbnVtID09IDApCiAgICAgICAgICAgICAg ICBfX251bSA9IG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKTsKCiAgICAgICAgICAg ICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4o X19pbi5nZXRsb2MoKSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJh aXRzOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5y ZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg ICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbnVtIC0gMQogICAgICAgICAgICAgICAg ICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAg ICAgICAgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAg KytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9f YywgX19lb2YpKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0 KTsKCgoKICAgICAgICAgICAgICAqX19zID0gY2hhcl90eXBlKCk7CgogICAgICAgICAgICAgIF9f aW4ud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs X1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pbikKICAg IHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFt X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVm X3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f dHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf X2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGNvbnN0IF9fY3R5cGVf dHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwog ICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgIF9fc3Ry ZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgIF9faW50X3R5cGUgX19jID0g X19zYi0+c2dldGMoKTsKCiAgICAgIHdoaWxlICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBf X2VvZikKICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykp CiAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CgogICAgICAgaWYgKF9UcmFpdHM6OmVxX2lu dF90eXBlKF9fYywgX19lb2YpKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJp dCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9faW4sCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJl YW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz dHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwog ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJp bmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUg X19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5 cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAg c3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247 CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykg OiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlw ZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgY29u c3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX19zdHJlYW1i dWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0g X19zYi0+c2dldGMoKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24KICAgICAg ICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAg ICAgICAgICAmJiAhX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwog ICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c25l eHRjKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShf X2MsIF9fZW9mKSkKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsK ICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgfQoKCiAgICAgIGlmICghX19leHRyYWN0 ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgcmV0 dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAg ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hh clQgX19kZWxpbSkKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5 cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFt X3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAg dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6 ZV90eXBlOwoKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwogICAgICBib29sIF9f dGVzdGRlbGltID0gZmFsc2U7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkg X19jZXJiKF9faW4sIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6 ZSgpOwoKICAgICAgICAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRzOjp0b19pbnRfdHlw ZShfX2RlbGltKTsKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVm KCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAg Y29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX190ZXN0 ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKTsKCiAgICAgICAgICB3 aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uCiAgICAgICAgICAgICAgICAgJiYgIV9UcmFpdHM6OmVx X2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgJiYgIV9fdGVzdGRlbGltKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBl KF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBf X3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6OmVxX2lu dF90eXBlKF9fYywgX19pZGVsaW0pOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX1RyYWl0 czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9z X2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkICYmICFfX3Rl c3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg cmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0 cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+ JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAg ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3N0cikKICAgIHsg cmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIsIF9faW4ud2lkZW4oJ1xuJykpOyB9CgoKCgogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0 ZSBpc3RyZWFtJiB3cyhpc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJh dG9yPj4oaXN0cmVhbSYsIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0 b3I+Pihpc3RyZWFtJiwgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRv cj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0m IG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlz dHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNoYXIqKTsKICBleHRlcm4gdGVt cGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXIqKTsKCgogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w bGF0ZSB3aXN0cmVhbSYgd3Mod2lzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0m IG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3Ry ZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgd2NoYXJfdCopOwoKfQojIDI5OCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvaXN0cmVhbSIgMiAzCiMgNzIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2l0ZXJh dG9yIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbV9pdGVyYXRvci5o IiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1faXRlcmF0b3IuaCIg MwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hh clQgPSBjaGFyLAogICAgICAgICAgIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh clQ+LCB0eXBlbmFtZSBfRGlzdCA9IHB0cmRpZmZfdD4KICAgIGNsYXNzIGlzdHJlYW1faXRlcmF0 b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfVHAsIF9EaXN0 LCBjb25zdCBfVHAqLCBjb25zdCBfVHAmPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVm IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAg ICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoK ICAgIHByaXZhdGU6CiAgICAgIGlzdHJlYW1fdHlwZSogX01fc3RyZWFtOwogICAgICBfVHAgX01f dmFsdWU7CiAgICAgIGJvb2wgX01fb2s7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtX2l0ZXJh dG9yKCkgOiBfTV9zdHJlYW0oMCksIF9NX29rKGZhbHNlKSB7fQoKICAgICAgaXN0cmVhbV9pdGVy YXRvcihpc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9yZWFkKCk7IH0K CiAgICAgIGlzdHJlYW1faXRlcmF0b3IoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX19vYmopCiAg ICAgIDogX01fc3RyZWFtKF9fb2JqLl9NX3N0cmVhbSksIF9NX3ZhbHVlKF9fb2JqLl9NX3ZhbHVl KSwKICAgICAgICBfTV9vayhfX29iai5fTV9vaykKICAgICAgeyB9CgogICAgICBjb25zdCBfVHAm CiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CgogICAgICBjb25z dCBfVHAqCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsg fQoKICAgICAgaXN0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsgX01f cmVhZCgpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGlzdHJlYW1faXRlcmF0b3IKICAgICAgb3Bl cmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBpc3RyZWFtX2l0ZXJhdG9yIF9fdG1wID0gKnRo aXM7CiAgICAgICAgX01fcmVhZCgpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAg ICAgYm9vbAogICAgICBfTV9lcXVhbChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiBfX3gpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3Ry ZWFtID09IF9feC5fTV9zdHJlYW0pO30KCiAgICBwcml2YXRlOgogICAgICB2b2lkCiAgICAgIF9N X3JlYWQoKQogICAgICB7CiAgICAgICAgX01fb2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0p ID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIGlmIChfTV9vaykKICAgICAgICAgIHsKICAgICAgICAg ICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgICAgICAgICAgX01fb2sgPSAqX01fc3RyZWFt ID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICAgfQogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0Rpc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJh dG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKICAgICAgICAgICAgICAgY29u c3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpCiAg ICB7IHJldHVybiBfX3guX01fZXF1YWwoX195KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0PgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0 cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1Rw LCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KQogICAgeyByZXR1cm4gIV9feC5fTV9lcXVh bChfX3kpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCA9IGNo YXIsCiAgICAgICAgICAgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog ICAgY2xhc3Mgb3N0cmVhbV9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRf aXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp dHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0 cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIG9zdHJlYW1fdHlwZSogX01fc3RyZWFtOwog ICAgICBjb25zdCBfQ2hhclQqIF9NX3N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG9zdHJlYW1f aXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmco MCkge30KCiAgICAgIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9D aGFyVCogX19jKQogICAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKF9fYykgeyB9Cgog ICAgICBvc3RyZWFtX2l0ZXJhdG9yKGNvbnN0IG9zdHJlYW1faXRlcmF0b3ImIF9fb2JqKQogICAg ICA6IF9NX3N0cmVhbShfX29iai5fTV9zdHJlYW0pLCBfTV9zdHJpbmcoX19vYmouX01fc3RyaW5n KSB7IH0KCiAgICAgIG9zdHJlYW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAm IF9fdmFsdWUpCiAgICAgIHsKICAgICAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICAgICAg aWYgKF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICAgICAgcmV0dXJuICp0 aGlzOwogICAgICB9CgogICAgICBvc3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7 IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Ir KygpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVy YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07Cn0KIyA3MyAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvaXRlcmF0b3IiIDIgMwojIDQ5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42 L2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGlzdCIg MSAzCiMgNjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xpc3QiIDMKCiMgMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0 aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3Rl eGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2Vw dGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQK ICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZv aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9v Zl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK CiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY3ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9saXN0IiAyIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfbGlzdC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfbGlzdC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKICBzdHJ1Y3QgX0xpc3Rfbm9kZV9iYXNlCiAg ewogICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9uZXh0OwogICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9w cmV2OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfTGlzdF9ub2Rl IDogcHVibGljIF9MaXN0X25vZGVfYmFzZQogICAgewogICAgICBfVHAgX01fZGF0YTsKICAgIH07 CgogIHN0cnVjdCBfTGlzdF9pdGVyYXRvcl9iYXNlCiAgewogICAgdHlwZWRlZiBzaXplX3Qgc2l6 ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRl ZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICBfTGlz dF9ub2RlX2Jhc2UqIF9NX25vZGU7CgogICAgX0xpc3RfaXRlcmF0b3JfYmFzZShfTGlzdF9ub2Rl X2Jhc2UqIF9feCkKICAgIDogX01fbm9kZShfX3gpCiAgICB7IH0KCiAgICBfTGlzdF9pdGVyYXRv cl9iYXNlKCkKICAgIHsgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgeyBfTV9ub2RlID0g X01fbm9kZS0+X01fbmV4dDsgfQoKICAgIHZvaWQKICAgIF9NX2RlY3IoKQogICAgeyBfTV9ub2Rl ID0gX01fbm9kZS0+X01fcHJldjsgfQoKICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0xp c3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gX01fbm9kZSA9PSBfX3gu X01fbm9kZTsgfQoKICAgIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0xpc3RfaXRlcmF0b3Jf YmFzZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQog IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0 cj4KICAgIHN0cnVjdCBfTGlzdF9pdGVyYXRvciA6IHB1YmxpYyBfTGlzdF9pdGVyYXRvcl9iYXNl CiAgICB7CiAgICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0 b3I7CiAgICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1Rw Kj4gY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9SZWYs X1B0cj4gX1NlbGY7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVm IF9QdHIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRl ZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7CgogICAgICBfTGlzdF9pdGVyYXRvcihfTm9kZSogX194 KQogICAgICA6IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194KQogICAgICB7IH0KCiAgICAgIF9MaXN0 X2l0ZXJhdG9yKCkKICAgICAgeyB9CgogICAgICBfTGlzdF9pdGVyYXRvcihjb25zdCBpdGVyYXRv ciYgX194KQogICAgICA6IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX25vZGUpCiAgICAgIHsg fQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0dXJu ICgoX05vZGUqKSBfTV9ub2RlKS0+X01fZGF0YTsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVy YXRvci0+KCkgY29uc3QKICAgICAgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgICAgIF9T ZWxmJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIHRoaXMtPl9NX2luY3IoKTsK ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9y KysoaW50KQogICAgICB7CiAgICAgICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICB0aGlz LT5fTV9pbmNyKCk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBfU2VsZiYK ICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsKICAgICAgICB0aGlzLT5fTV9kZWNyKCk7CiAgICAg ICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvci0tKGlu dCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgdGhpcy0+X01f ZGVjcigpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogICAgfTsKIyAxODUgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2xpc3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+CiAgICBjbGFzcyBfTGlzdF9h bGxvY19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgICAgIGFs bG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigp IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvcjsgfQoKICAgICAgX0xpc3RfYWxs b2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9Ob2RlX2FsbG9jYXRv cihfX2EpCiAgICAgIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgX0xpc3Rfbm9kZTxfVHA+Kgog ICAgICBfTV9nZXRfbm9kZSgpCiAgICAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvci5hbGxvY2F0 ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9f cCkKICAgICAgeyBfTm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9CgogICAgcHJv dGVjdGVkOgogICAgICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0Fs bG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgICAgIF9Ob2RlX2FsbG9jYXRvcjsK CiAgICAgIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgY2xhc3MgX0xpc3RfYWxsb2NfYmFz ZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQog ICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAg Z2V0X2FsbG9jYXRvcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K CiAgICAgIF9MaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgICB7IH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlz dF9ub2RlPF9UcD4sIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgICAgIF9BbGxv Y190eXBlOwoKICAgICAgX0xpc3Rfbm9kZTxfVHA+KgogICAgICBfTV9nZXRfbm9kZSgpCiAgICAg IHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBf TV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkKICAgICAgeyBfQWxsb2NfdHlwZTo6ZGVh bGxvY2F0ZShfX3AsIDEpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBfTGlzdF9ub2RlPF9UcD4q IF9NX25vZGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGNsYXNzIF9MaXN0X2Jhc2UKICAgICAgOiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxf VHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz PF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgewogICAgcHVibGljOgogICAgICB0 eXBlZGVmIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgog ICAgICAgICAgICAgIF9CYXNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0 b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIF9MaXN0X2Jhc2UoY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsKICAgICAgICBfTV9ub2RlID0g X01fZ2V0X25vZGUoKTsKICAgICAgICBfTV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICAgICAg ICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9kZTsKICAgICAgfQoKICAgICAgfl9MaXN0X2Jhc2Uo KQogICAgICB7CiAgICAgICAgY2xlYXIoKTsKICAgICAgICBfTV9wdXRfbm9kZShfTV9ub2RlKTsK ICAgICAgfQoKICAgICAgdm9pZCBjbGVhcigpOwogICAgfTsKIyAyODkgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2xpc3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgogICAgY2xhc3MgbGlzdCA6IHByb3RlY3RlZCBf TGlzdF9iYXNlPF9UcCwgX0FsbG9jPgogICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgX0xpc3Rf YmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVkZWYgdm9p ZCogX1ZvaWRfcG9pbnRlcjsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5 cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25z dCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJl ZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7 CiAgICAgIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwogICAgICB0eXBlZGVmIHNpemVf dCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl OwoKICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsK ICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBj b25zdF9pdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh dG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByb3RlY3RlZDoKICAgICAgdXNp bmcgX0Jhc2U6Ol9NX25vZGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICAgICAg dXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwoKICAgIHByb3RlY3RlZDoKICAgICAgX05vZGUqCiAg ICAgIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9UcCYgX194KQogICAgICB7CiAgICAgICAgX05vZGUq IF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9Db25zdHJ1Y3Qo Jl9fcC0+X01fZGF0YSwgX194KTsKICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAg IHsKICAgICAgICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9 CiAgICAgICAgcmV0dXJuIF9fcDsKICAgICAgfQoKICAgICAgX05vZGUqCiAgICAgIF9NX2NyZWF0 ZV9ub2RlKCkKICAgICAgewogICAgICAgIF9Ob2RlKiBfX3AgPSBfTV9nZXRfbm9kZSgpOwogICAg ICAgIHRyeSB7CiAgICAgICAgICBfQ29uc3RydWN0KCZfX3AtPl9NX2RhdGEpOwogICAgICAgIH0K ICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX01fcHV0X25vZGUoX19wKTsK ICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgICByZXR1cm4gX19wOwogICAgICB9Cgog ICAgcHVibGljOgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29u c3QKICAgICAgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICAgICAgZXhwbGlj aXQKICAgICAgbGlzdChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo KSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgYmVn aW4oKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfTm9kZSo+KF9NX25vZGUtPl9NX25leHQp OyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4oX01fbm9kZS0+X01fbmV4dCk7IH0KCiAgICAgIGl0ZXJh dG9yCiAgICAgIGVuZCgpCiAgICAgIHsgcmV0dXJuIF9NX25vZGU7IH0KCiAgICAgIGNvbnN0X2l0 ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25vZGU7IH0KCiAgICAg IHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9p dGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJl Z2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7 IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJl dmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IK ICAgICAgcmVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io YmVnaW4oKSk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdAogICAgICB7IHJldHVy biBfTV9ub2RlLT5fTV9uZXh0ID09IF9NX25vZGU7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBz aXplKCkgY29uc3QKICAgICAgeyByZXR1cm4gZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCkpOyB9Cgog ICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdAogICAgICB7IHJldHVybiBzaXpl X3R5cGUoLTEpOyB9CgogICAgICByZWZlcmVuY2UKICAgICAgZnJvbnQoKQogICAgICB7IHJldHVy biAqYmVnaW4oKTsgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGZyb250KCkgY29uc3QK ICAgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBiYWNrKCkK ICAgICAgeyByZXR1cm4gKigtLWVuZCgpKTsgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAg IGJhY2soKSBjb25zdAogICAgICB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogICAgICB2b2lkCiAg ICAgIHN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKICAgICAgeyBzdGQ6OnN3YXAoX01fbm9k ZSwgX194Ll9NX25vZGUpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3Ig X19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCiAgICAgIHsKICAgICAgICBfTm9kZSogX190bXAg PSBfTV9jcmVhdGVfbm9kZShfX3gpOwogICAgICAgIF9fdG1wLT5fTV9uZXh0ID0gX19wb3NpdGlv bi5fTV9ub2RlOwogICAgICAgIF9fdG1wLT5fTV9wcmV2ID0gX19wb3NpdGlvbi5fTV9ub2RlLT5f TV9wcmV2OwogICAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9f dG1wOwogICAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgICAg IHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0ZXJh dG9yIF9fcG9zaXRpb24pCiAgICAgIHsgcmV0dXJuIGluc2VydChfX3Bvc2l0aW9uLCBfVHAoKSk7 IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KICAgICAgICB2b2lkCiAgICAg ICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRl Z2VyIF9feCwgX190cnVlX3R5cGUpCiAgICAgICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgKHNp emVfdHlwZSkgX19uLCAoX1RwKSBfX3gpOyB9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJh dG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f ZmFsc2VfdHlwZSk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAg ICAgICB2b2lkCiAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBf X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgewogICAgICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdy YWw7CiAgICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwg X0ludGVncmFsKCkpOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9y IF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgICAgeyBfTV9maWxsX2lu c2VydChfX3BvcywgX19uLCBfX3gpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2ZpbGxfaW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogICAgICB2 b2lkCiAgICAgIHB1c2hfZnJvbnQoY29uc3QgX1RwJiBfX3gpCiAgICAgIHsgaW5zZXJ0KGJlZ2lu KCksIF9feCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9mcm9udCgpCiAgICAgIHsgaW5zZXJ0 KGJlZ2luKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkK ICAgICAgeyBpbnNlcnQoZW5kKCksIF9feCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNr KCkKICAgICAgeyBpbnNlcnQoZW5kKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShp dGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7CiAgICAgICAgX0xpc3Rfbm9kZV9iYXNlKiBfX25l eHRfbm9kZSA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01fbmV4dDsKICAgICAgICBfTGlzdF9ub2Rl X2Jhc2UqIF9fcHJldl9ub2RlID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAg IF9Ob2RlKiBfX24gPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcG9zaXRpb24uX01fbm9kZSk7CiAg ICAgICAgX19wcmV2X25vZGUtPl9NX25leHQgPSBfX25leHRfbm9kZTsKICAgICAgICBfX25leHRf bm9kZS0+X01fcHJldiA9IF9fcHJldl9ub2RlOwogICAgICAgIF9EZXN0cm95KCZfX24tPl9NX2Rh dGEpOwogICAgICAgIF9NX3B1dF9ub2RlKF9fbik7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHN0 YXRpY19jYXN0PF9Ob2RlKj4oX19uZXh0X25vZGUpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IK ICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKCiAgICAgIHZv aWQKICAgICAgY2xlYXIoKQogICAgICB7IF9CYXNlOjpjbGVhcigpOyB9CgogICAgICB2b2lkCiAg ICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpOwoKICAgICAg dm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpCiAgICAgIHsgdGhpcy0+cmVz aXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoKICAgICAgdm9pZAogICAgICBwb3BfZnJvbnQoKQog ICAgICB7IGVyYXNlKGJlZ2luKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHBvcF9iYWNrKCkKICAg ICAgewogICAgICAgIGl0ZXJhdG9yIF9fdG1wID0gZW5kKCk7CiAgICAgICAgZXJhc2UoLS1fX3Rt cCk7CiAgICAgIH0KCiAgICAgIGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVl LAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp KQogICAgICA6IF9CYXNlKF9fYSkKICAgICAgeyBpbnNlcnQoYmVnaW4oKSwgX19uLCBfX3ZhbHVl KTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbGlzdChzaXplX3R5cGUgX19uKQogICAgICA6IF9C YXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fbiwgX1RwKCkp OyB9CgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICBsaXN0 KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBf QmFzZShfX2EpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAg ICAgIGxpc3QoY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKICAgICAgOiBfQmFzZShfX3gu Z2V0X2FsbG9jYXRvcigpKQogICAgICB7IGluc2VydChiZWdpbigpLCBfX3guYmVnaW4oKSwgX194 LmVuZCgpKTsgfQoKICAgICAgfmxpc3QoKQogICAgICB7IH0KCiAgICAgIGxpc3Q8X1RwLCBfQWxs b2M+JgogICAgICBvcGVyYXRvcj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCk7CgogICAg cHVibGljOgoKCgoKCiAgICAgIHZvaWQKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0 IF9UcCYgX192YWwpCiAgICAgIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KCiAgICAg IHZvaWQKICAgICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3Zh bCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lk CiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIF9NX2Fzc2lnbl9k aXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgogICAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KICAgICAgICB2b2lkCiAgICAgICAgX01fYXNzaWdu X2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAg ICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAg ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAg ICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpOwoKICAg IHByb3RlY3RlZDoKICAgICAgdm9pZAogICAgICBfTV90cmFuc2ZlcihpdGVyYXRvciBfX3Bvc2l0 aW9uLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBp ZiAoX19wb3NpdGlvbiAhPSBfX2xhc3QpIHsKCiAgICAgICAgICBfX2xhc3QuX01fbm9kZS0+X01f cHJldi0+X01fbmV4dCA9IF9fcG9zaXRpb24uX01fbm9kZTsKICAgICAgICAgIF9fZmlyc3QuX01f bm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fbGFzdC5fTV9ub2RlOwogICAgICAgICAgX19wb3Np dGlvbi5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX19maXJzdC5fTV9ub2RlOwoKCiAgICAg ICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fdG1wID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2 OwogICAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX19sYXN0Ll9NX25vZGUt Pl9NX3ByZXY7CiAgICAgICAgICBfX2xhc3QuX01fbm9kZS0+X01fcHJldiA9IF9fZmlyc3QuX01f bm9kZS0+X01fcHJldjsKICAgICAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldiA9IF9fdG1w OwogICAgICAgIH0KICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgdm9pZAogICAgICBzcGxpY2Uo aXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KQogICAgICB7CiAgICAgICAgaWYgKCFfX3gu ZW1wdHkoKSkKICAgICAgICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdp bigpLCBfX3guZW5kKCkpOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIHNwbGljZShpdGVyYXRv ciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19pKQogICAgICB7CiAgICAgICAgaXRlcmF0 b3IgX19qID0gX19pOwogICAgICAgICsrX19qOwogICAgICAgIGlmIChfX3Bvc2l0aW9uID09IF9f aSB8fCBfX3Bvc2l0aW9uID09IF9faikgcmV0dXJuOwogICAgICAgIHRoaXMtPl9NX3RyYW5zZmVy KF9fcG9zaXRpb24sIF9faSwgX19qKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBzcGxpY2Uo aXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9f bGFzdCkKICAgICAgewogICAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAgIHRo aXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIH0KCiAg ICAgIHZvaWQKICAgICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSk7CgogICAgICB2b2lkCiAg ICAgIHVuaXF1ZSgpOwoKICAgICAgdm9pZAogICAgICBtZXJnZShsaXN0JiBfX3gpOwoKICAgICAg dm9pZAogICAgICByZXZlcnNlKCk7CgogICAgICB2b2lkCiAgICAgIHNvcnQoKTsKCiAgICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICAgICAgdm9pZAogICAgICAgIHJlbW92ZV9p ZihfUHJlZGljYXRlKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+ CiAgICAgICAgdm9pZAogICAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlKTsKCiAgICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgICAgdm9pZAogICAgICAg IG1lcmdlKGxpc3QmLCBfU3RyaWN0V2Vha09yZGVyaW5nKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgICAgdm9pZAogICAgICAgIHNvcnQoX1N0cmlj dFdlYWtPcmRlcmluZyk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxpc3Q8X1RwLF9B bGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJh dG9yOwogICAgICBjb25zdF9pdGVyYXRvciBfX2VuZDEgPSBfX3guZW5kKCk7CiAgICAgIGNvbnN0 X2l0ZXJhdG9yIF9fZW5kMiA9IF9feS5lbmQoKTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9faTEg PSBfX3guYmVnaW4oKTsKICAgICAgY29uc3RfaXRlcmF0b3IgX19pMiA9IF9feS5iZWdpbigpOwog ICAgICB3aGlsZSAoX19pMSAhPSBfX2VuZDEgJiYgX19pMiAhPSBfX2VuZDIgJiYgKl9faTEgPT0g Kl9faTIpIHsKICAgICAgICArK19faTE7CiAgICAgICAgKytfX2kyOwogICAgICB9CiAgICAgIHJl dHVybiBfX2kxID09IF9fZW5kMSAmJiBfX2kyID09IF9fZW5kMjsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3I8KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg X195KQogICAgewogICAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2lu KCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5i ZWdpbigpLCBfX3kuZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGxpc3Q8X1Rw LF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4g IShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg X194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3I8PShjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IGxp c3Q8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj49KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0Fs bG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAobGlzdDxf VHAsIF9BbGxvYz4mIF9feCwgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAo X195KTsgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg dm9pZCBfTGlzdF9iYXNlPF9UcCxfQWxsb2M+OjoKICAgIGNsZWFyKCkKICAgIHsKICAgICAgX0xp c3Rfbm9kZTxfVHA+KiBfX2N1ciA9IHN0YXRpY19jYXN0PF9MaXN0X25vZGU8X1RwPio+KF9NX25v ZGUtPl9NX25leHQpOwogICAgICB3aGlsZSAoX19jdXIgIT0gX01fbm9kZSkgewogICAgICAgIF9M aXN0X25vZGU8X1RwPiogX190bXAgPSBfX2N1cjsKICAgICAgICBfX2N1ciA9IHN0YXRpY19jYXN0 PF9MaXN0X25vZGU8X1RwPio+KF9fY3VyLT5fTV9uZXh0KTsKICAgICAgICBfRGVzdHJveSgmX190 bXAtPl9NX2RhdGEpOwogICAgICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICAgICAgfQogICAgICBf TV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICAgICAgX01fbm9kZS0+X01fcHJldiA9IF9NX25v ZGU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg dGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxv Yz46OgogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3NpdGlvbiwgX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAgIHsKICAgICAgICBmb3IgKCA7 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgICBpbnNlcnQoX19wb3NpdGlv biwgKl9fZmlyc3QpOwoKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgX01fZmlsbF9pbnNlcnQo aXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7 CiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24pCiAgICAgICAgaW5zZXJ0KF9fcG9zaXRpb24s IF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgog ICAgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6aXRlcmF0b3IgbGlzdDxfVHAsIF9BbGxvYz46 OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgewogICAg ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgZXJhc2UoX19maXJzdCsrKTsKICAg ICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIHJlc2l6ZShzaXplX3R5 cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9faSA9 IGJlZ2luKCk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgICAgIGZvciAoIDsgX19pICE9 IGVuZCgpICYmIF9fbGVuIDwgX19uZXdfc2l6ZTsgKytfX2ksICsrX19sZW4pCiAgICAgICAgOwog ICAgICBpZiAoX19sZW4gPT0gX19uZXdfc2l6ZSkKICAgICAgICBlcmFzZShfX2ksIGVuZCgpKTsK ICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGxp c3Q8X1RwLCBfQWxsb2M+JiBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3Qg bGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKICAgIHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkgewog ICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xh c3QxID0gZW5kKCk7CiAgICAgICAgY29uc3RfaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4o KTsKICAgICAgICBjb25zdF9pdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgICAgIHdo aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAg ICAqX19maXJzdDErKyA9ICpfX2ZpcnN0MisrOwogICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xh c3QyKQogICAgICAgICAgZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogICAgICAgIGVsc2UKICAg ICAgICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIH0KICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9B bGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgX01fZmlsbF9hc3NpZ24oc2l6 ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgewogICAgICBpdGVyYXRvciBfX2kgPSBiZWdp bigpOwogICAgICBmb3IgKCA7IF9faSAhPSBlbmQoKSAmJiBfX24gPiAwOyArK19faSwgLS1fX24p CiAgICAgICAgKl9faSA9IF9fdmFsOwogICAgICBpZiAoX19uID4gMCkKICAgICAgICBpbnNlcnQo ZW5kKCksIF9fbiwgX192YWwpOwogICAgICBlbHNlCiAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt cGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46 OgogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0MiwgX0lucHV0SXRl ciBfX2xhc3QyLCBfX2ZhbHNlX3R5cGUpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0 MSA9IGJlZ2luKCk7CiAgICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICAgIGZv ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOyArK19fZmly c3QxLCArK19fZmlyc3QyKQogICAgICAgICAgKl9fZmlyc3QxID0gKl9fZmlyc3QyOwogICAgICAg IGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgZXJhc2UoX19maXJzdDEsIF9fbGFz dDEpOwogICAgICAgIGVsc2UKICAgICAgICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19s YXN0Mik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIHJlbW92ZShjb25zdCBfVHAmIF9fdmFs dWUpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogICAgICBpdGVyYXRv ciBfX2xhc3QgPSBlbmQoKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAg ICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgICArK19fbmV4dDsKICAgICAgICBp ZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkgZXJhc2UoX19maXJzdCk7CiAgICAgICAgX19maXJzdCA9 IF9fbmV4dDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgdW5pcXVlKCkKICAgIHsK ICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9 IGVuZCgpOwogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAgICAgaXRlcmF0 b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewog ICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICAgICAgZXJhc2UoX19uZXh0KTsK ICAgICAgICBlbHNlCiAgICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICAgIF9fbmV4dCA9 IF9fZmlyc3Q7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIG1lcmdlKGxpc3Q8X1Rw LCBfQWxsb2M+JiBfX3gpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsK ICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICBpdGVyYXRvciBfX2ZpcnN0MiA9 IF9feC5iZWdpbigpOwogICAgICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgICB3 aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAg IGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9 IF9fZmlyc3QyOwogICAgICAgICAgX01fdHJhbnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19f bmV4dCk7CiAgICAgICAgICBfX2ZpcnN0MiA9IF9fbmV4dDsKICAgICAgICB9CiAgICAgICAgZWxz ZQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpIF9N X3RyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgIH0KCiAgaW5saW5lIHZv aWQKICBfX0xpc3RfYmFzZV9yZXZlcnNlKF9MaXN0X25vZGVfYmFzZSogX19wKQogIHsKICAgIF9M aXN0X25vZGVfYmFzZSogX190bXAgPSBfX3A7CiAgICBkbyB7CiAgICAgIHN0ZDo6c3dhcChfX3Rt cC0+X01fbmV4dCwgX190bXAtPl9NX3ByZXYpOwogICAgICBfX3RtcCA9IF9fdG1wLT5fTV9wcmV2 OwogICAgfSB3aGlsZSAoX190bXAgIT0gX19wKTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZSB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICBy ZXZlcnNlKCkKICB7IF9fTGlzdF9iYXNlX3JldmVyc2UodGhpcy0+X01fbm9kZSk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1RwLCBf QWxsb2M+OjoKICAgIHNvcnQoKQogICAgewoKICAgICAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0g X01fbm9kZSAmJiBfTV9ub2RlLT5fTV9uZXh0LT5fTV9uZXh0ICE9IF9NX25vZGUpIHsKICAgICAg ICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9f Y291bnRlcls2NF07CiAgICAgICAgaW50IF9fZmlsbCA9IDA7CiAgICAgICAgd2hpbGUgKCFlbXB0 eSgpKSB7CiAgICAgICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBi ZWdpbigpKTsKICAgICAgICAgIGludCBfX2kgPSAwOwogICAgICAgICAgd2hpbGUoX19pIDwgX19m aWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgICAgIF9fY291bnRlcltf X2ldLm1lcmdlKF9fY2FycnkpOwogICAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19f aSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0p OwogICAgICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgICAgIH0KCiAgICAg ICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAgICAgICAgIF9fY291 bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0pOwogICAgICAgIHN3YXAoX19jb3VudGVy W19fZmlsbC0xXSk7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgdm9p ZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkK ICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogICAgICAgIGl0ZXJh dG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog ICAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgICAgICsrX19uZXh0Owog ICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIGVyYXNlKF9fZmlyc3QpOwogICAgICAgICAg X19maXJzdCA9IF9fbmV4dDsKICAgICAgICB9CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JpbmFyeVByZWRp Y2F0ZT4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICAgIHVuaXF1ZShfQmluYXJ5 UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0 ID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICAgICAgICBpZiAo X19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2Zp cnN0OwogICAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChf X2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgICAgICAgZXJhc2UoX19uZXh0 KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgICAg IF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICAgfQogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9TdHJpY3RXZWFr T3JkZXJpbmc+CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgICBtZXJnZShsaXN0 PF9UcCwgX0FsbG9jPiYgX194LCBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKICAgICAgewog ICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xh c3QxID0gZW5kKCk7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICAg ICAgICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgICBpZiAoX19jb21w KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgICBpdGVyYXRvciBfX25leHQgPSBf X2ZpcnN0MjsKICAgICAgICAgICAgX01fdHJhbnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19f bmV4dCk7CiAgICAgICAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgICAgICAgfQogICAgICAg ICAgZWxzZQogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGlmIChfX2ZpcnN0MiAhPSBf X2xhc3QyKSBfTV90cmFuc2ZlcihfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46 OgogICAgc29ydChfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChf TV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYgX01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAh PSBfTV9ub2RlKSB7CiAgICAgICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jYXJyeTsKICAgICAgICBs aXN0PF9UcCwgX0FsbG9jPiBfX2NvdW50ZXJbNjRdOwogICAgICAgIGludCBfX2ZpbGwgPSAwOwog ICAgICAgIHdoaWxlICghZW1wdHkoKSkgewogICAgICAgICAgX19jYXJyeS5zcGxpY2UoX19jYXJy eS5iZWdpbigpLCAqdGhpcywgYmVnaW4oKSk7CiAgICAgICAgICBpbnQgX19pID0gMDsKICAgICAg ICAgIHdoaWxlKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHkoKSkgewogICAg ICAgICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NhcnJ5LCBfX2NvbXApOwogICAgICAgICAg ICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgICBf X2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICAgICAgaWYgKF9faSA9PSBfX2ZpbGwp ICsrX19maWxsOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19m aWxsOyArK19faSkKICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2kt MV0sIF9fY29tcCk7CiAgICAgICAgc3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKICAgICAgfQog ICAgfQoKfQojIDcyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saXN0IiAyIDMKIyA1MCAiL3Vzci9s b2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIgMgojIDU4ICIvdXNy L2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXZhbHVlbGlzdC5oIgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdE5vZGUKewpwdWJsaWM6CiAgICBRVmFsdWVMaXN0Tm9k ZSggY29uc3QgVCYgdCApIDogZGF0YSggdCApIHsgfQogICAgUVZhbHVlTGlzdE5vZGUoKSB7IH0K CgoKCgogICAgUVZhbHVlTGlzdE5vZGU8VD4qIG5leHQ7CiAgICBRVmFsdWVMaXN0Tm9kZTxUPiog cHJldjsKICAgIFQgZGF0YTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3RJ dGVyYXRvcgp7CiBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+KiBOb2Rl UHRyOwoKICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRv cl9jYXRlZ29yeTsKCiAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgc2l6ZV90 IHNpemVfdHlwZTsKCiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgoKCiAg ICB0eXBlZGVmIFQqIHBvaW50ZXI7CiAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKCgoKCiAgICBO b2RlUHRyIG5vZGU7CgoKCgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yKCkgOiBub2RlKCAwICkge30K ICAgIFFWYWx1ZUxpc3RJdGVyYXRvciggTm9kZVB0ciBwICkgOiBub2RlKCBwICkge30KICAgIFFW YWx1ZUxpc3RJdGVyYXRvciggY29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIDogbm9k ZSggaXQubm9kZSApIHt9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVmFsdWVMaXN0SXRl cmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSA9PSBpdC5ub2RlOyB9CiAgICBib29s IG9wZXJhdG9yIT0oIGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgaXQgKSBjb25zdCB7IHJl dHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yKigpIGNvbnN0IHsg cmV0dXJuIG5vZGUtPmRhdGE7IH0KICAgIFQmIG9wZXJhdG9yKigpIHsgcmV0dXJuIG5vZGUtPmRh dGE7IH0KCgoKICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsKICAgICAg ICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZh bHVlTGlzdEl0ZXJhdG9yPFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgUVZhbHVlTGlzdEl0 ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwogICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwogICAgICAg IHJldHVybiB0bXA7CiAgICB9CgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBvcGVyYXRvci0t KCkgewogICAgICAgIG5vZGUgPSBub2RlLT5wcmV2OwogICAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAgICBR VmFsdWVMaXN0SXRlcmF0b3I8VD4gdG1wID0gKnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUtPnBy ZXY7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgIH0KfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNz IFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUVZhbHVl TGlzdE5vZGU8VD4qIE5vZGVQdHI7CgogICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRl cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwog ICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwoKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl cmVuY2VfdHlwZTsKCgoKICAgIHR5cGVkZWYgY29uc3QgVCogcG9pbnRlcjsKICAgIHR5cGVkZWYg Y29uc3QgVCYgcmVmZXJlbmNlOwoKCgoKICAgIE5vZGVQdHIgbm9kZTsKCgoKCiAgICBRVmFsdWVM aXN0Q29uc3RJdGVyYXRvcigpIDogbm9kZSggMCApIHt9CiAgICBRVmFsdWVMaXN0Q29uc3RJdGVy YXRvciggTm9kZVB0ciBwICkgOiBub2RlKCBwICkge30KICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJh dG9yKCBjb25zdCBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5v ZGUgKSB7fQogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3IoIGNvbnN0IFFWYWx1ZUxpc3RJdGVy YXRvcjxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQoKICAgIGJvb2wgb3BlcmF0b3I9PSgg Y29uc3QgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9k ZSA9PSBpdC5ub2RlOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFWYWx1ZUxpc3RDb25z dEl0ZXJhdG9yPFQ+JiBpdCApIGNvbnN0IHsgcmV0dXJuIG5vZGUgIT0gaXQubm9kZTsgfQogICAg Y29uc3QgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbm9kZS0+ZGF0YTsgfQoKCgogICAg UVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4mIG9wZXJhdG9yKysoKSB7CiAgICAgICAgbm9kZSA9 IG5vZGUtPm5leHQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxpc3RD b25zdEl0ZXJhdG9yPFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgUVZhbHVlTGlzdENvbnN0 SXRlcmF0b3I8VD4gdG1wID0gKnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICAg ICAgcmV0dXJuIHRtcDsKICAgIH0KCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYgb3Bl cmF0b3ItLSgpIHsKICAgICAgICBub2RlID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gb3BlcmF0b3ItLShpbnQp IHsKICAgICAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiB0bXAgPSAqdGhpczsKICAgICAg ICBub2RlID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1cm4gdG1wOwogICAgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3RQcml2YXRlCiAgICA6IHB1YmxpYyBRU2hhcmVk CnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gSXRlcmF0b3I7 CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IENvbnN0SXRlcmF0b3I7CiAg ICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+IE5vZGU7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RO b2RlPFQ+KiBOb2RlUHRyOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwoKCgoKICAgIFFW YWx1ZUxpc3RQcml2YXRlKCk7CiAgICBRVmFsdWVMaXN0UHJpdmF0ZSggY29uc3QgUVZhbHVlTGlz dFByaXZhdGU8VD4mIF9wICk7CgogICAgdm9pZCBkZXJlZkFuZERlbGV0ZSgpCiAgICB7CiAgICAg ICAgaWYgKCBkZXJlZigpICkKICAgICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICB9CgoKCgoKICAg IH5RVmFsdWVMaXN0UHJpdmF0ZSgpOwoKICAgIEl0ZXJhdG9yIGluc2VydCggSXRlcmF0b3IgaXQs IGNvbnN0IFQmIHggKTsKICAgIEl0ZXJhdG9yIHJlbW92ZSggSXRlcmF0b3IgaXQgKTsKICAgIE5v ZGVQdHIgZmluZCggTm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0OwogICAgaW50IGZp bmRJbmRleCggTm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0OwogICAgdWludCBjb250 YWlucyggY29uc3QgVCYgeCApIGNvbnN0OwogICAgdWludCByZW1vdmUoIGNvbnN0IFQmIHggKTsK ICAgIE5vZGVQdHIgYXQoIHNpemVfdHlwZSBpICkgY29uc3Q7CiAgICB2b2lkIGNsZWFyKCk7Cgog ICAgTm9kZVB0ciBub2RlOwogICAgc2l6ZV90eXBlIG5vZGVzOwp9OwoKdGVtcGxhdGUgPGNsYXNz IFQ+CiBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6UVZhbHVlTGlzdFByaXZhdGUoKQp7CiAgICBub2Rl ID0gbmV3IE5vZGU7IG5vZGUtPm5leHQgPSBub2RlLT5wcmV2ID0gbm9kZTsgbm9kZXMgPSAwOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpRVmFsdWVMaXN0UHJp dmF0ZSggY29uc3QgUVZhbHVlTGlzdFByaXZhdGU8VD4mIF9wICkKICAgIDogUVNoYXJlZCgpCnsK ICAgIG5vZGUgPSBuZXcgTm9kZTsgbm9kZS0+bmV4dCA9IG5vZGUtPnByZXYgPSBub2RlOyBub2Rl cyA9IDA7CiAgICBJdGVyYXRvciBiKCBfcC5ub2RlLT5uZXh0ICk7CiAgICBJdGVyYXRvciBlKCBf cC5ub2RlICk7CiAgICBJdGVyYXRvciBpKCBub2RlICk7CiAgICB3aGlsZSggYiAhPSBlICkKICAg ICAgICBpbnNlcnQoIGksICpiKysgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiBRVmFsdWVMaXN0 UHJpdmF0ZTxUPjo6flFWYWx1ZUxpc3RQcml2YXRlKCkgewogICAgTm9kZVB0ciBwID0gbm9kZS0+ bmV4dDsKICAgIHdoaWxlKCBwICE9IG5vZGUgKSB7CiAgICAgICAgTm9kZVB0ciB4ID0gcC0+bmV4 dDsKICAgICAgICBkZWxldGUgcDsKICAgICAgICBwID0geDsKICAgIH0KICAgIGRlbGV0ZSBub2Rl Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpJ dGVyYXRvciBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6aW5zZXJ0KCB0eXBlbmFtZSBRVmFsdWVMaXN0 UHJpdmF0ZTxUPjo6SXRlcmF0b3IgaXQsIGNvbnN0IFQmIHggKQp7CiAgICBOb2RlUHRyIHAgPSBu ZXcgTm9kZSggeCApOwogICAgcC0+bmV4dCA9IGl0Lm5vZGU7CiAgICBwLT5wcmV2ID0gaXQubm9k ZS0+cHJldjsKICAgIGl0Lm5vZGUtPnByZXYtPm5leHQgPSBwOwogICAgaXQubm9kZS0+cHJldiA9 IHA7CiAgICBub2RlcysrOwogICAgcmV0dXJuIHA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogdHlw ZW5hbWUgUVZhbHVlTGlzdFByaXZhdGU8VD46Okl0ZXJhdG9yIFFWYWx1ZUxpc3RQcml2YXRlPFQ+ OjpyZW1vdmUoIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpJdGVyYXRvciBpdCApCnsK ICAgICgoaXQubm9kZSAhPSBub2RlKSA/ICh2b2lkKTAgOiBxV2FybmluZygiQVNTRVJUOiBcIiVz XCIgaW4gJXMgKCVkKSIsIml0Lm5vZGUgIT0gbm9kZSIsIi91c3IvbG9jYWwvcXQteDExLWZyZWUt My4wLjYvaW5jbHVkZS9xdmFsdWVsaXN0LmgiLDI4OSkpOwogICAgTm9kZVB0ciBuZXh0ID0gaXQu bm9kZS0+bmV4dDsKICAgIE5vZGVQdHIgcHJldiA9IGl0Lm5vZGUtPnByZXY7CiAgICBwcmV2LT5u ZXh0ID0gbmV4dDsKICAgIG5leHQtPnByZXYgPSBwcmV2OwogICAgZGVsZXRlIGl0Lm5vZGU7CiAg ICBub2Rlcy0tOwogICAgcmV0dXJuIEl0ZXJhdG9yKCBuZXh0ICk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBUPgogdHlwZW5hbWUgUVZhbHVlTGlzdFByaXZhdGU8VD46Ok5vZGVQdHIgUVZhbHVlTGlzdFBy aXZhdGU8VD46OmZpbmQoIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpOb2RlUHRyIHN0 YXJ0LCBjb25zdCBUJiB4ICkgY29uc3QKewogICAgQ29uc3RJdGVyYXRvciBmaXJzdCggc3RhcnQg KTsKICAgIENvbnN0SXRlcmF0b3IgbGFzdCggbm9kZSApOwogICAgd2hpbGUoIGZpcnN0ICE9IGxh c3QpIHsKICAgICAgICBpZiAoICpmaXJzdCA9PSB4ICkKICAgICAgICAgICAgcmV0dXJuIGZpcnN0 Lm5vZGU7CiAgICAgICAgKytmaXJzdDsKICAgIH0KICAgIHJldHVybiBsYXN0Lm5vZGU7Cn0KCnRl bXBsYXRlIDxjbGFzcyBUPgogaW50IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpmaW5kSW5kZXgoIHR5 cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpOb2RlUHRyIHN0YXJ0LCBjb25zdCBUJiB4ICkg Y29uc3QKewogICAgQ29uc3RJdGVyYXRvciBmaXJzdCggc3RhcnQgKTsKICAgIENvbnN0SXRlcmF0 b3IgbGFzdCggbm9kZSApOwogICAgaW50IHBvcyA9IDA7CiAgICB3aGlsZSggZmlyc3QgIT0gbGFz dCkgewogICAgICAgIGlmICggKmZpcnN0ID09IHggKQogICAgICAgICAgICByZXR1cm4gcG9zOwog ICAgICAgICsrZmlyc3Q7CiAgICAgICAgKytwb3M7CiAgICB9CiAgICByZXR1cm4gLTE7Cn0KCnRl bXBsYXRlIDxjbGFzcyBUPgogdWludCBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6Y29udGFpbnMoIGNv bnN0IFQmIHggKSBjb25zdAp7CiAgICB1aW50IHJlc3VsdCA9IDA7CiAgICBJdGVyYXRvciBmaXJz dCA9IEl0ZXJhdG9yKCBub2RlLT5uZXh0ICk7CiAgICBJdGVyYXRvciBsYXN0ID0gSXRlcmF0b3Io IG5vZGUgKTsKICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgaWYgKCAqZmlyc3Qg PT0geCApCiAgICAgICAgICAgICsrcmVzdWx0OwogICAgICAgICsrZmlyc3Q7CiAgICB9CiAgICBy ZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHVpbnQgUVZhbHVlTGlzdFByaXZh dGU8VD46OnJlbW92ZSggY29uc3QgVCYgeCApCnsKICAgIHVpbnQgcmVzdWx0ID0gMDsKICAgIEl0 ZXJhdG9yIGZpcnN0ID0gSXRlcmF0b3IoIG5vZGUtPm5leHQgKTsKICAgIEl0ZXJhdG9yIGxhc3Qg PSBJdGVyYXRvciggbm9kZSApOwogICAgd2hpbGUoIGZpcnN0ICE9IGxhc3QpIHsKICAgICAgICBp ZiAoICpmaXJzdCA9PSB4ICkgewogICAgICAgICAgICBmaXJzdCA9IHJlbW92ZSggZmlyc3QgKTsK ICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICsrZmlyc3Q7 CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHR5cGVuYW1l IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpOb2RlUHRyIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjphdCgg c2l6ZV90eXBlIGkgKSBjb25zdAp7CiAgICAoKGkgPD0gbm9kZXMpID8gKHZvaWQpMCA6IHFXYXJu aW5nKCJBU1NFUlQ6IFwiJXNcIiBpbiAlcyAoJWQpIiwiaSA8PSBub2RlcyIsIi91c3IvbG9jYWwv cXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdmFsdWVsaXN0LmgiLDM2MCkpOwogICAgTm9kZVB0 ciBwID0gbm9kZS0+bmV4dDsKICAgIGZvciggc2l6ZV90eXBlIHggPSAwOyB4IDwgaTsgKyt4ICkK ICAgICAgICBwID0gcC0+bmV4dDsKICAgIHJldHVybiBwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K IHZvaWQgUVZhbHVlTGlzdFByaXZhdGU8VD46OmNsZWFyKCkKewogICAgbm9kZXMgPSAwOwogICAg Tm9kZVB0ciBwID0gbm9kZS0+bmV4dDsKICAgIHdoaWxlKCBwICE9IG5vZGUgKSB7CiAgICAgICAg Tm9kZVB0ciBuZXh0ID0gcC0+bmV4dDsKICAgICAgICBkZWxldGUgcDsKICAgICAgICBwID0gbmV4 dDsKICAgIH0KICAgIG5vZGUtPm5leHQgPSBub2RlLT5wcmV2ID0gbm9kZTsKfQojIDM5MyAiL3Vz ci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIKdGVtcGxhdGUg PGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3QKewpwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFWYWx1 ZUxpc3RJdGVyYXRvcjxUPiBpdGVyYXRvcjsKICAgIHR5cGVkZWYgUVZhbHVlTGlzdENvbnN0SXRl cmF0b3I8VD4gY29uc3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICAgIHR5 cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSog Y29uc3RfcG9pbnRlcjsKICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogICAgdHlw ZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIHNpemVf dCBzaXplX3R5cGU7CgogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgoK CgoKICAgIFFWYWx1ZUxpc3QoKSB7IHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OyB9CiAg ICBRVmFsdWVMaXN0KCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkgeyBzaCA9IGwuc2g7IHNoLT5y ZWYoKTsgfQoKCgoKCiAgICBRVmFsdWVMaXN0KCBjb25zdCB0eXBlbmFtZSBzdGQ6Omxpc3Q8VD4m IGwgKQogICAgewogICAgICAgIHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OwogICAgICAg IHFDb3B5KCBsLmJlZ2luKCksIGwuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlciggKnRoaXMgKSAp OwogICAgfQoKICAgIH5RVmFsdWVMaXN0KCkgeyBzaC0+ZGVyZWZBbmREZWxldGUoKTsgfQoKICAg IFFWYWx1ZUxpc3Q8VD4mIG9wZXJhdG9yPSAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKQogICAg ewogICAgICAgIGwuc2gtPnJlZigpOwogICAgICAgIHNoLT5kZXJlZkFuZERlbGV0ZSgpOwogICAg ICAgIHNoID0gbC5zaDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlz dDxUPiYgb3BlcmF0b3I9ICggY29uc3QgdHlwZW5hbWUgc3RkOjpsaXN0PFQ+JiBsICkKICAgIHsK ICAgICAgICBkZXRhY2goKTsKICAgICAgICBxQ29weSggbC5iZWdpbigpLCBsLmVuZCgpLCBzdGQ6 OmJhY2tfaW5zZXJ0ZXIoICp0aGlzICkgKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAg ICBib29sIG9wZXJhdG9yPT0gKCBjb25zdCB0eXBlbmFtZSBzdGQ6Omxpc3Q8VD4mIGwgKSBjb25z dAogICAgewogICAgICAgIGlmICggc2l6ZSgpICE9IGwuc2l6ZSgpICkKICAgICAgICAgICAgcmV0 dXJuIEZBTFNFOwogICAgICAgIGNvbnN0X2l0ZXJhdG9yIGl0MiA9IGJlZ2luKCk7CgogICAgICAg IHR5cGVuYW1lCgogICAgICAgIHN0ZDo6bGlzdDxUPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsLmJl Z2luKCk7CiAgICAgICAgZm9yICggOyBpdDIgIT0gZW5kKCk7ICsraXQyLCArK2l0ICkKICAgICAg ICBpZiAoICEoKCppdDIpID09ICgqaXQpKSApCiAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAg ICAgICByZXR1cm4gVFJVRTsKICAgIH0KCgoKCgogICAgYm9vbCBvcGVyYXRvcj09ICggY29uc3Qg UVZhbHVlTGlzdDxUPiYgbCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9ICggY29uc3QgUVZh bHVlTGlzdDxUPiYgbCApIGNvbnN0IHsgcmV0dXJuICEoICp0aGlzID09IGwgKTsgfQogICAgaXRl cmF0b3IgYmVnaW4oKSB7IGRldGFjaCgpOyByZXR1cm4gaXRlcmF0b3IoIHNoLT5ub2RlLT5uZXh0 ICk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRl cmF0b3IoIHNoLT5ub2RlLT5uZXh0ICk7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgZGV0YWNoKCk7 IHJldHVybiBpdGVyYXRvciggc2gtPm5vZGUgKTsgfQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkg Y29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5ub2RlICk7IH0KICAgIGl0ZXJhdG9y IGluc2VydCggaXRlcmF0b3IgaXQsIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gc2gt Pmluc2VydCggaXQsIHggKTsgfQogICAgdWludCByZW1vdmUoIGNvbnN0IFQmIHggKSB7IGRldGFj aCgpOyByZXR1cm4gc2gtPnJlbW92ZSggeCApOyB9CiAgICB2b2lkIGNsZWFyKCk7CgogICAgUVZh bHVlTGlzdDxUPiYgb3BlcmF0b3I8PCAoIGNvbnN0IFQmIHggKQogICAgewogICAgICAgIGFwcGVu ZCggeCApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBzaXplX3R5cGUgc2l6ZSgp IGNvbnN0IHsgcmV0dXJuIHNoLT5ub2RlczsgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0 dXJuIHNoLT5ub2RlcyA9PSAwOyB9CiAgICB2b2lkIHB1c2hfZnJvbnQoIGNvbnN0IFQmIHggKSB7 IGRldGFjaCgpOyBzaC0+aW5zZXJ0KCBiZWdpbigpLCB4ICk7IH0KICAgIHZvaWQgcHVzaF9iYWNr KCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgc2gtPmluc2VydCggZW5kKCksIHggKTsgfQogICAg aXRlcmF0b3IgZXJhc2UoIGl0ZXJhdG9yIHBvcyApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+cmVt b3ZlKCBwb3MgKTsgfQogICAgaXRlcmF0b3IgZXJhc2UoIGl0ZXJhdG9yIGZpcnN0LCBpdGVyYXRv ciBsYXN0ICk7CiAgICByZWZlcmVuY2UgZnJvbnQoKSB7IDsgcmV0dXJuICpiZWdpbigpOyB9CiAg ICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IDsgcmV0dXJuICpiZWdpbigpOyB9CiAg ICByZWZlcmVuY2UgYmFjaygpIHsgOyByZXR1cm4gKigtLWVuZCgpKTsgfQogICAgY29uc3RfcmVm ZXJlbmNlIGJhY2soKSBjb25zdCB7IDsgcmV0dXJuICooLS1lbmQoKSk7IH0KICAgIHZvaWQgcG9w X2Zyb250KCkgeyA7IGVyYXNlKCBiZWdpbigpICk7IH0KICAgIHZvaWQgcG9wX2JhY2soKSB7CiAg ICAgICAgOwogICAgICAgIGl0ZXJhdG9yIHRtcCA9IGVuZCgpOwogICAgICAgIGVyYXNlKCAtLXRt cCApOwogICAgfQogICAgdm9pZCBpbnNlcnQoIGl0ZXJhdG9yIHBvcywgc2l6ZV90eXBlIG4sIGNv bnN0IFQmIHggKTsKIyA1MDggIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9x dmFsdWVsaXN0LmgiCiAgICBRVmFsdWVMaXN0PFQ+IG9wZXJhdG9yKyAoIGNvbnN0IFFWYWx1ZUxp c3Q8VD4mIGwgKSBjb25zdDsKICAgIFFWYWx1ZUxpc3Q8VD4mIG9wZXJhdG9yKz0gKCBjb25zdCBR VmFsdWVMaXN0PFQ+JiBsICk7CgogICAgaXRlcmF0b3IgZnJvbUxhc3QoKSB7IGRldGFjaCgpOyBy ZXR1cm4gaXRlcmF0b3IoIHNoLT5ub2RlLT5wcmV2ICk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGZy b21MYXN0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5ub2RlLT5wcmV2ICk7 IH0KCiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAoIHNoLT5ub2RlcyA9PSAwICk7 IH0KCiAgICBpdGVyYXRvciBhcHBlbmQoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4g c2gtPmluc2VydCggZW5kKCksIHggKTsgfQogICAgaXRlcmF0b3IgcHJlcGVuZCggY29uc3QgVCYg eCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+aW5zZXJ0KCBiZWdpbigpLCB4ICk7IH0KCiAgICBp dGVyYXRvciByZW1vdmUoIGl0ZXJhdG9yIGl0ICkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5yZW1v dmUoIGl0ICk7IH0KCiAgICBUJiBmaXJzdCgpIHsgOyBkZXRhY2goKTsgcmV0dXJuIHNoLT5ub2Rl LT5uZXh0LT5kYXRhOyB9CiAgICBjb25zdCBUJiBmaXJzdCgpIGNvbnN0IHsgOyByZXR1cm4gc2gt Pm5vZGUtPm5leHQtPmRhdGE7IH0KICAgIFQmIGxhc3QoKSB7IDsgZGV0YWNoKCk7IHJldHVybiBz aC0+bm9kZS0+cHJldi0+ZGF0YTsgfQogICAgY29uc3QgVCYgbGFzdCgpIGNvbnN0IHsgOyByZXR1 cm4gc2gtPm5vZGUtPnByZXYtPmRhdGE7IH0KCiAgICBUJiBvcGVyYXRvcltdICggc2l6ZV90eXBl IGkgKSB7IDsgZGV0YWNoKCk7IHJldHVybiBzaC0+YXQoaSktPmRhdGE7IH0KICAgIGNvbnN0IFQm IG9wZXJhdG9yW10gKCBzaXplX3R5cGUgaSApIGNvbnN0IHsgOyByZXR1cm4gc2gtPmF0KGkpLT5k YXRhOyB9CiAgICBpdGVyYXRvciBhdCggc2l6ZV90eXBlIGkgKSB7IDsgZGV0YWNoKCk7IHJldHVy biBpdGVyYXRvciggc2gtPmF0KGkpICk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGF0KCBzaXplX3R5 cGUgaSApIGNvbnN0IHsgOyByZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5hdChpKSApOyB9CiAg ICBpdGVyYXRvciBmaW5kICggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBpdGVyYXRv ciggc2gtPmZpbmQoIHNoLT5ub2RlLT5uZXh0LCB4KSApOyB9CiAgICBjb25zdF9pdGVyYXRvciBm aW5kICggY29uc3QgVCYgeCApIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKCBzaC0+Zmlu ZCggc2gtPm5vZGUtPm5leHQsIHgpICk7IH0KICAgIGl0ZXJhdG9yIGZpbmQgKCBpdGVyYXRvciBp dCwgY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBpdGVyYXRvciggc2gtPmZpbmQoIGl0 Lm5vZGUsIHggKSApOyB9CiAgICBjb25zdF9pdGVyYXRvciBmaW5kICggY29uc3RfaXRlcmF0b3Ig aXQsIGNvbnN0IFQmIHggKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvciggc2gtPmZpbmQo IGl0Lm5vZGUsIHggKSApOyB9CiAgICBpbnQgZmluZEluZGV4KCBjb25zdCBUJiB4ICkgY29uc3Qg eyByZXR1cm4gc2gtPmZpbmRJbmRleCggc2gtPm5vZGUtPm5leHQsIHgpIDsgfQogICAgc2l6ZV90 eXBlIGNvbnRhaW5zKCBjb25zdCBUJiB4ICkgY29uc3QgeyByZXR1cm4gc2gtPmNvbnRhaW5zKCB4 ICk7IH0KCiAgICBzaXplX3R5cGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZXM7IH0K CiAgICBRVmFsdWVMaXN0PFQ+JiBvcGVyYXRvcis9ICggY29uc3QgVCYgeCApCiAgICB7CiAgICAg ICAgYXBwZW5kKCB4ICk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgdHlwZWRlZiBR VmFsdWVMaXN0SXRlcmF0b3I8VD4gSXRlcmF0b3I7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RDb25z dEl0ZXJhdG9yPFQ+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwoKcHJv dGVjdGVkOgoKCgogICAgdm9pZCBkZXRhY2goKSB7IGlmICggc2gtPmNvdW50ID4gMSApIGRldGFj aEludGVybmFsKCk7IH0KCgoKCiAgICBRVmFsdWVMaXN0UHJpdmF0ZTxUPiogc2g7Cgpwcml2YXRl OgogICAgdm9pZCBkZXRhY2hJbnRlcm5hbCgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CiBib29s IFFWYWx1ZUxpc3Q8VD46Om9wZXJhdG9yPT0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkgY29u c3QKewogICAgaWYgKCBzaXplKCkgIT0gbC5zaXplKCkgKQogICAgICAgIHJldHVybiBGQUxTRTsK ICAgIGNvbnN0X2l0ZXJhdG9yIGl0MiA9IGJlZ2luKCk7CiAgICBjb25zdF9pdGVyYXRvciBpdCA9 IGwuYmVnaW4oKTsKICAgIGZvciggOyBpdCAhPSBsLmVuZCgpOyArK2l0LCArK2l0MiApCiAgICAg ICAgaWYgKCAhKCAqaXQgPT0gKml0MiApICkKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAg cmV0dXJuIFRSVUU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogdm9pZCBRVmFsdWVMaXN0PFQ+Ojpj bGVhcigpCnsKICAgIGlmICggc2gtPmNvdW50ID09IDEgKSBzaC0+Y2xlYXIoKTsgZWxzZSB7IHNo LT5kZXJlZigpOyBzaCA9IG5ldyBRVmFsdWVMaXN0UHJpdmF0ZTxUPjsgfQp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4KIHR5cGVuYW1lIFFWYWx1ZUxpc3Q8VD46Oml0ZXJhdG9yIFFWYWx1ZUxpc3Q8VD46 OmVyYXNlKCB0eXBlbmFtZSBRVmFsdWVMaXN0PFQ+OjppdGVyYXRvciBmaXJzdCwgdHlwZW5hbWUg UVZhbHVlTGlzdDxUPjo6aXRlcmF0b3IgbGFzdCApCnsKICAgIHdoaWxlICggZmlyc3QgIT0gbGFz dCApCiAgICAgICAgZXJhc2UoIGZpcnN0KysgKTsKICAgIHJldHVybiBsYXN0Owp9CgoKdGVtcGxh dGUgPGNsYXNzIFQ+CiB2b2lkIFFWYWx1ZUxpc3Q8VD46Omluc2VydCggdHlwZW5hbWUgUVZhbHVl TGlzdDxUPjo6aXRlcmF0b3IgcG9zLCBzaXplX3R5cGUgbiwgY29uc3QgVCYgeCApCnsKICAgIGZv ciAoIDsgbiA+IDA7IC0tbiApCiAgICAgICAgaW5zZXJ0KCBwb3MsIHggKTsKfQoKdGVtcGxhdGUg PGNsYXNzIFQ+CiBRVmFsdWVMaXN0PFQ+IFFWYWx1ZUxpc3Q8VD46Om9wZXJhdG9yKyAoIGNvbnN0 IFFWYWx1ZUxpc3Q8VD4mIGwgKSBjb25zdAp7CiAgICBRVmFsdWVMaXN0PFQ+IGwyKCAqdGhpcyAp OwogICAgZm9yKCBjb25zdF9pdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsgaXQgIT0gbC5lbmQoKTsg KytpdCApCiAgICAgICAgbDIuYXBwZW5kKCAqaXQgKTsKICAgIHJldHVybiBsMjsKfQoKdGVtcGxh dGUgPGNsYXNzIFQ+CiBRVmFsdWVMaXN0PFQ+JiBRVmFsdWVMaXN0PFQ+OjpvcGVyYXRvcis9ICgg Y29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIGZvciggY29uc3RfaXRlcmF0b3IgaXQgPSBs LmJlZ2luKCk7IGl0ICE9IGwuZW5kKCk7ICsraXQgKQogICAgICAgIGFwcGVuZCggKml0ICk7CiAg ICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogdm9pZCBRVmFsdWVMaXN0PFQ+ OjpkZXRhY2hJbnRlcm5hbCgpCnsKICAgIHNoLT5kZXJlZigpOyBzaCA9IG5ldyBRVmFsdWVMaXN0 UHJpdmF0ZTxUPiggKnNoICk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIFFEYXRhU3RyZWFtJiBv cGVyYXRvcj4+KCBRRGF0YVN0cmVhbSYgcywgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIGwuY2xl YXIoKTsKICAgIFFfVUlOVDMyIGM7CiAgICBzID4+IGM7CiAgICBmb3IoIFFfVUlOVDMyIGkgPSAw OyBpIDwgYzsgKytpICkKICAgIHsKICAgICAgICBUIHQ7CiAgICAgICAgcyA+PiB0OwogICAgICAg IGwuYXBwZW5kKCB0ICk7CiAgICAgICAgaWYgKCBzLmF0RW5kKCkgKQogICAgICAgICAgICBicmVh azsKICAgIH0KICAgIHJldHVybiBzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIFFEYXRhU3RyZWFt JiBvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSYgcywgY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCnsK ICAgIHMgPDwgKFFfVUlOVDMyKWwuc2l6ZSgpOwogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8 VD4gaXQgPSBsLmJlZ2luKCk7CiAgICBmb3IoIDsgaXQgIT0gbC5lbmQoKTsgKytpdCApCiAgICAg ICAgcyA8PCAqaXQ7CiAgICByZXR1cm4gczsKfQojIDQ4ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVl LTMuMC42L2luY2x1ZGUvcW1hcC5oIiAyCgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL21h cCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21hcCIgMwoKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDkxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF90cmVlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZW51bSBfUmJfdHJlZV9jb2xv ciB7IF9NX3JlZCA9IGZhbHNlLCBfTV9ibGFjayA9IHRydWUgfTsKCiAgc3RydWN0IF9SYl90cmVl X25vZGVfYmFzZQogIHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7 CgogICAgX1JiX3RyZWVfY29sb3IgX01fY29sb3I7CiAgICBfQmFzZV9wdHIgX01fcGFyZW50Owog ICAgX0Jhc2VfcHRyIF9NX2xlZnQ7CiAgICBfQmFzZV9wdHIgX01fcmlnaHQ7CgogICAgc3RhdGlj IF9CYXNlX3B0cgogICAgX1NfbWluaW11bShfQmFzZV9wdHIgX194KQogICAgewogICAgICB3aGls ZSAoX194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKICAgICAgcmV0dXJuIF9f eDsKICAgIH0KCiAgICBzdGF0aWMgX0Jhc2VfcHRyCiAgICBfU19tYXhpbXVtKF9CYXNlX3B0ciBf X3gpCiAgICB7CiAgICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9feC0+X01f cmlnaHQ7CiAgICAgIHJldHVybiBfX3g7CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1ZhbD4KICAgIHN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVlX25vZGVfYmFz ZQogICAgewogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7CiAg ICAgIF9WYWwgX01fdmFsdWVfZmllbGQ7CiAgICB9OwoKICBzdHJ1Y3QgX1JiX3RyZWVfYmFzZV9p dGVyYXRvcgogIHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlOjpfQmFzZV9wdHIgX0Jh c2VfcHRyOwogICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j YXRlZ29yeTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICBfQmFz ZV9wdHIgX01fbm9kZTsKCiAgICB2b2lkCiAgICBfTV9pbmNyZW1lbnQoKQogICAgewogICAgICBp ZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfTV9ub2RlID0g X01fbm9kZS0+X01fcmlnaHQ7CiAgICAgICAgICB3aGlsZSAoX01fbm9kZS0+X01fbGVmdCAhPSAw KQogICAgICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgICB9CiAgICAg IGVsc2UKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFy ZW50OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9yaWdodCkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgICAgICAgX195ID0gX195 LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfTV9ub2RlLT5fTV9yaWdo dCAhPSBfX3kpCiAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgfQogICAgfQoKICAg IHZvaWQKICAgIF9NX2RlY3JlbWVudCgpCiAgICB7CiAgICAgIGlmIChfTV9ub2RlLT5fTV9jb2xv ciA9PSBfTV9yZWQKICAgICAgICAgICYmIF9NX25vZGUtPl9NX3BhcmVudC0+X01fcGFyZW50ID09 IF9NX25vZGUpCiAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgICBlbHNl IGlmIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRy IF9feSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgICAgICB3aGlsZSAoX195LT5fTV9yaWdodCAh PSAwKQogICAgICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICAgICAgX01fbm9kZSA9 IF9feTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIg X195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195 LT5fTV9sZWZ0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fbm9kZSA9IF9feTsKICAg ICAgICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgfQogICAgICAgICAg X01fbm9kZSA9IF9feTsKICAgICAgICB9CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIHN0cnVjdCBfUmJfdHJlZV9p dGVyYXRvciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCiAgICB7CiAgICAgIHR5cGVk ZWYgX1ZhbCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogICAgICB0 eXBlZGVmIF9QdHIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFs LCBfVmFsJiwgX1ZhbCo+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9y PF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4KICAgICAgY29uc3RfaXRlcmF0b3I7CiAg ICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4gX1NlbGY7CiAg ICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiogX0xpbmtfdHlwZTsKCiAgICAgIF9SYl90 cmVlX2l0ZXJhdG9yKCkge30KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoX0xpbmtfdHlwZSBfX3gp IHsgX01fbm9kZSA9IF9feDsgfQogICAgICBfUmJfdHJlZV9pdGVyYXRvcihjb25zdCBpdGVyYXRv ciYgX19pdCkgeyBfTV9ub2RlID0gX19pdC5fTV9ub2RlOyB9CgogICAgICByZWZlcmVuY2UKICAg ICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtfdHlwZShfTV9ub2RlKS0+X01fdmFs dWVfZmllbGQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0 dXJuICYob3BlcmF0b3IqKCkpOyB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3IrKygpCiAg ICAgIHsKICAgICAgICBfTV9pbmNyZW1lbnQoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg IH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgX1Nl bGYgX190bXAgPSAqdGhpczsKICAgICAgICBfTV9pbmNyZW1lbnQoKTsKICAgICAgICByZXR1cm4g X190bXA7CiAgICAgIH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRvci0tKCkgeyBfTV9kZWNy ZW1lbnQoKTsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvci0tKGlu dCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgX01fZGVjcmVt ZW50KCk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+ JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYs IF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0o Y29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYg X194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwg X1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0o Y29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYgX194LAogICAgICAg ICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3Qg X1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1Zh bCwgX1JlZiwgX1B0cj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0 b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9f eS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwg Y29uc3QgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9y PF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9f eS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+ JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0 IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9f eS5fTV9ub2RlOyB9CgogIGlubGluZSB2b2lkCiAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX1JiX3Ry ZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBf UmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcmlnaHQ7CiAgICBfX3gtPl9NX3JpZ2h0 ID0gX195LT5fTV9sZWZ0OwogICAgaWYgKF9feS0+X01fbGVmdCAhPTApCiAgICAgIF9feS0+X01f bGVmdC0+X01fcGFyZW50ID0gX194OwogICAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVu dDsKCiAgICBpZiAoX194ID09IF9fcm9vdCkKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBp ZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgICBfX3gtPl9NX3BhcmVudC0+ X01fbGVmdCA9IF9feTsKICAgIGVsc2UKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0g X195OwogICAgX195LT5fTV9sZWZ0ID0gX194OwogICAgX194LT5fTV9wYXJlbnQgPSBfX3k7CiAg fQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfUmJfdHJlZV9ub2RlX2Jh c2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9SYl90cmVlX25v ZGVfYmFzZSogX195ID0gX194LT5fTV9sZWZ0OwogICAgX194LT5fTV9sZWZ0ID0gX195LT5fTV9y aWdodDsKICAgIGlmIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICAgIF9feS0+X01fcmlnaHQtPl9N X3BhcmVudCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogICAg aWYgKF9feCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2UgaWYgKF9feCA9 PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdo dCA9IF9feTsKICAgIGVsc2UKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAg ICBfX3ktPl9NX3JpZ2h0ID0gX194OwogICAgX194LT5fTV9wYXJlbnQgPSBfX3k7CiAgfQoKICBp bmxpbmUgdm9pZAogIF9SYl90cmVlX3JlYmFsYW5jZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwg X1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9feC0+X01fY29sb3IgPSBfTV9y ZWQ7CiAgICB3aGlsZSAoX194ICE9IF9fcm9vdAogICAgICAgICAgICYmIF9feC0+X01fcGFyZW50 LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgIHsKICAgICAgICBpZiAoX194LT5fTV9wYXJlbnQg PT0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgICAgIHsKICAgICAg ICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50 LT5fTV9yaWdodDsKICAgICAgICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2NvbG9yID09IF9NX3Jl ZCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29s b3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feS0+X01fY29sb3IgPSBfTV9ibGFjazsK ICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01f cmVkOwogICAgICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkKICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAg ICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19yb290KTsKICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxh Y2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9 IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gtPl9NX3Bh cmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAg ICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195 ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgaWYgKF9f eSAmJiBfX3ktPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAg IF9feS0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50 LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgX194ID0gX194 LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50 LT5fTV9sZWZ0KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgX194ID0g X194LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0 KF9feCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX194LT5f TV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3Bh cmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9SYl90 cmVlX3JvdGF0ZV9sZWZ0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAg ICAgICAgICAgfQogICAgICAgICAgfQogICAgICB9CiAgICBfX3Jvb3QtPl9NX2NvbG9yID0gX01f YmxhY2s7CiAgfQoKICBpbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNlKgogIF9SYl90cmVlX3JlYmFs YW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3osCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX2xlZnRtb3N0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yaWdodG1vc3Qp CiAgewogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7CiAgICBfUmJfdHJlZV9ub2Rl X2Jhc2UqIF9feCA9IDA7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feF9wYXJlbnQgPSAwOwog ICAgaWYgKF9feS0+X01fbGVmdCA9PSAwKQogICAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogICAg ZWxzZQogICAgICBpZiAoX195LT5fTV9yaWdodCA9PSAwKQogICAgICAgIF9feCA9IF9feS0+X01f bGVmdDsKICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0 OwogICAgICAgICAgd2hpbGUgKF9feS0+X01fbGVmdCAhPSAwKQogICAgICAgICAgICBfX3kgPSBf X3ktPl9NX2xlZnQ7CiAgICAgICAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogICAgICAgIH0KICAg IGlmIChfX3kgIT0gX196KQogICAgICB7CgogICAgICAgIF9fei0+X01fbGVmdC0+X01fcGFyZW50 ID0gX195OwogICAgICAgIF9feS0+X01fbGVmdCA9IF9fei0+X01fbGVmdDsKICAgICAgICBpZiAo X195ICE9IF9fei0+X01fcmlnaHQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9feF9wYXJlbnQg PSBfX3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBf X3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7 CiAgICAgICAgICAgIF9feS0+X01fcmlnaHQgPSBfX3otPl9NX3JpZ2h0OwogICAgICAgICAgICBf X3otPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQog ICAgICAgICAgX194X3BhcmVudCA9IF9feTsKICAgICAgICBpZiAoX19yb290ID09IF9feikKICAg ICAgICAgIF9fcm9vdCA9IF9feTsKICAgICAgICBlbHNlIGlmIChfX3otPl9NX3BhcmVudC0+X01f bGVmdCA9PSBfX3opCiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAg ICAgICBlbHNlCiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICAg ICAgX195LT5fTV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsKICAgICAgICBzdGQ6OnN3YXAoX195 LT5fTV9jb2xvciwgX196LT5fTV9jb2xvcik7CiAgICAgICAgX195ID0gX196OwoKICAgICAgfQog ICAgZWxzZQogICAgICB7CiAgICAgICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAg ICAgIGlmIChfX3gpCiAgICAgICAgICBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50Owog ICAgICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICAgICAgX19yb290ID0gX194OwogICAgICAg IGVsc2UKICAgICAgICAgIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAg ICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICAgICAgZWxzZQogICAg ICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7CiAgICAgICAgaWYgKF9fbGVm dG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+X01fcmlnaHQgPT0gMCkKICAgICAgICAg ICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgX19sZWZ0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOwogICAg ICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opCiAgICAgICAgICBpZiAoX196LT5fTV9sZWZ0ID09 IDApCiAgICAgICAgICAgIF9fcmlnaHRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICAgICAg ZWxzZQogICAgICAgICAgICBfX3JpZ2h0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4 aW11bShfX3gpOwogICAgICB9CiAgICBpZiAoX195LT5fTV9jb2xvciAhPSBfTV9yZWQpCiAgICAg IHsKICAgICAgICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiAoX194ID09IDAgfHwgX194LT5fTV9j b2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICBpZiAoX194ID09IF9feF9wYXJlbnQtPl9NX2xl ZnQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9 IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09 IF9NX3JlZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xv ciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9N X3JlZDsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwg X19yb290KTsKICAgICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKChfX3ctPl9NX2xlZnQgPT0gMCB8fAog ICAgICAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykgJiYK ICAgICAgICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgICAg ICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAg ICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50ID0gX194 X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQgPT0g MAogICAgICAgICAgICAgICAgICAgICAgfHwgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01f YmxhY2spCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaWYgKF9f dy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAg ICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgICAg IF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3csIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgICAg ICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAg ICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAg ICAgICAgaWYgKF9fdy0+X01fcmlnaHQpCiAgICAgICAgICAgICAgICAgICAgX193LT5fTV9yaWdo dC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRl X2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewoK ICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xl ZnQ7CiAgICAgICAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAg ICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAg ICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAg ICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAg X193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spICYmCiAgICAgICAgICAgICAgICAg IChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5f TV9jb2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9feCA9IF9feF9wYXJl bnQ7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAgfHwgX193LT5fTV9sZWZ0LT5f TV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfTV9i bGFjazsKICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAg ICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3csIF9fcm9vdCk7CiAgICAg ICAgICAgICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9N X2NvbG9yOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNr OwogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KQogICAgICAgICAgICAgICAgICAg IF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX1Ji X3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgaWYgKF9feCkg X194LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICB9CiAgICByZXR1cm4gX195OwogIH0KCgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MsIGJvb2wgX1NfaW5z dGFuY2VsZXNzPgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZQogICAgewogICAgcHVibGlj OgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxsb2Nh dG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRf YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgICAgIF9S Yl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfTV9u b2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oZWFkZXIoMCkge30KCiAgICBwcm90ZWN0ZWQ6CiAgICAg IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjphbGxv Y2F0b3JfdHlwZQogICAgICBfTV9ub2RlX2FsbG9jYXRvcjsKCiAgICAgIF9SYl90cmVlX25vZGU8 X1RwPiogX01faGVhZGVyOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBfTV9nZXRf bm9kZSgpIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9CgogICAgICB2 b2lkCiAgICAgIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAgICB7IF9N X25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQogICAgfTsKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2Nf YmFzZTxfVHAsIF9BbGxvYywgdHJ1ZT4KICAgIHsKICAgIHB1YmxpYzoKICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv cl90eXBlOwogICAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1 cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICAgICAgX1JiX3RyZWVfYWxsb2NfYmFzZShjb25zdCBh bGxvY2F0b3JfdHlwZSYpIDogX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVjdGVkOgogICAgICBf UmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs bG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46Ol9BbGxvY190eXBlCiAgICAg IF9BbGxvY190eXBlOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBfTV9nZXRfbm9k ZSgpIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAg ICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkgeyBfQWxsb2NfdHlwZTo6ZGVh bGxvY2F0ZShfX3AsIDEpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfUmJfdHJlZV9iYXNlIDogcHVibGljIF9SYl90cmVlX2Fs bG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgewogICAgICB0 eXBlZGVmIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLAogICAgICAgIF9BbGxvYywgX0FsbG9jX3Ry YWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4gX0Jhc2U7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgICAgX1Ji X3RyZWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9CYXNlKF9fYSkg eyBfTV9oZWFkZXIgPSBfTV9nZXRfbm9kZSgpOyB9CiAgICAgIH5fUmJfdHJlZV9iYXNlKCkgeyBf TV9wdXRfbm9kZShfTV9oZWFkZXIpOyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tl eSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5h bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsPiA+CiAgICBjbGFz cyBfUmJfdHJlZSA6IHByb3RlY3RlZCBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxvYz4KICAgIHsK ICAgICAgdHlwZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxvYz4gX0Jhc2U7CgogICAgcHJv dGVjdGVkOgogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRyOwogICAg ICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4gX1JiX3RyZWVfbm9kZTsKCiAgICBwdWJsaWM6 CiAgICAgIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICAgICAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5 cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25z dCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJl ZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7 CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZSogX0xpbmtfdHlwZTsKICAgICAgdHlwZWRlZiBz aXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7 CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3Jf dHlwZTsKICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu IF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHVzaW5nIF9C YXNlOjpfTV9nZXRfbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX3B1dF9ub2RlOwogICAgICB1 c2luZyBfQmFzZTo6X01faGVhZGVyOwoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9jcmVhdGVf bm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9f dG1wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX0NvbnN0cnVjdCgm X190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOyB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAg ICAgewogICAgICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAgICAgICAgdGhyb3c7CiAgICAg ICAgICB9CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBfTGlua190eXBlCiAg ICAgIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsKICAgICAgICBfTGlua190 eXBlIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194LT5fTV92YWx1ZV9maWVsZCk7CiAgICAgICAg X190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgICAgICBfX3RtcC0+X01fbGVmdCA9 IDA7CiAgICAgICAgX190bXAtPl9NX3JpZ2h0ID0gMDsKICAgICAgICByZXR1cm4gX190bXA7CiAg ICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVzdHJveV9ub2RlKF9MaW5rX3R5cGUgX19wKQogICAg ICB7CiAgICAgICAgX0Rlc3Ryb3koJl9fcC0+X01fdmFsdWVfZmllbGQpOwogICAgICAgIF9NX3B1 dF9ub2RlKF9fcCk7CiAgICAgIH0KCiAgICAgIHNpemVfdHlwZSBfTV9ub2RlX2NvdW50OwogICAg ICBfQ29tcGFyZSBfTV9rZXlfY29tcGFyZTsKCiAgICAgIF9MaW5rX3R5cGUmCiAgICAgIF9NX3Jv b3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcGFyZW50OyB9 CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9sZWZ0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIChf TGlua190eXBlJikgX01faGVhZGVyLT5fTV9sZWZ0OyB9CgogICAgICBfTGlua190eXBlJgogICAg ICBfTV9yaWdodG1vc3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+ X01fcmlnaHQ7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19sZWZ0KF9MaW5r X3R5cGUgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAgICAg IHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19yaWdodChfTGlua190eXBlIF9feCkgeyByZXR1 cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5 cGUmCiAgICAgIF9TX3BhcmVudChfTGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUm KShfX3gtPl9NX3BhcmVudCk7IH0KCiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFs dWUoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBfS2V5JgogICAgICBfU19rZXkoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJu IF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KCiAgICAgIHN0YXRpYyBfUmJfdHJlZV9j b2xvciYKICAgICAgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fY29s b3I7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19sZWZ0KF9CYXNlX3B0ciBf X3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQoKICAgICAgc3RhdGlj IF9MaW5rX3R5cGUmCiAgICAgIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlu a190eXBlJikoX194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAg ICBfU19wYXJlbnQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9N X3BhcmVudCk7IH0KCiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFsdWUoX0Jhc2Vf cHRyIF9feCkgeyByZXR1cm4gKChfTGlua190eXBlKV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgX0tleSYKICAgICAgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpIHsgcmV0 dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX0xpbmtfdHlwZShfX3gpKSk7fQoKICAgICAgc3Rh dGljIF9SYl90cmVlX2NvbG9yJgogICAgICBfU19jb2xvcihfQmFzZV9wdHIgX194KSB7IHJldHVy biAoX0xpbmtfdHlwZShfX3gpLT5fTV9jb2xvcik7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBl CiAgICAgIF9TX21pbmltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsgcmV0dXJuIChfTGlua190 eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQoKICAgICAgc3RhdGlj IF9MaW5rX3R5cGUKICAgICAgX1NfbWF4aW11bShfTGlua190eXBlIF9feCkKICAgICAgeyByZXR1 cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9Cgog ICAgcHVibGljOgogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIHJl ZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0 b3I8dmFsdWVfdHlwZSwgY29uc3RfcmVmZXJlbmNlLCBjb25zdF9wb2ludGVyPgogICAgICBjb25z dF9pdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRv cj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y PGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiAgICAgIGl0ZXJhdG9y CiAgICAgIF9NX2luc2VydChfQmFzZV9wdHIgX194LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1 ZV90eXBlJiBfX3YpOwoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9jb3B5KF9MaW5rX3R5cGUg X194LCBfTGlua190eXBlIF9fcCk7CgogICAgICB2b2lkCiAgICAgIF9NX2VyYXNlKF9MaW5rX3R5 cGUgX194KTsKCiAgICBwdWJsaWM6CgogICAgICBfUmJfdHJlZSgpCiAgICAgICAgOiBfQmFzZShh bGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoKQogICAg ICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1JiX3RyZWUoY29uc3QgX0NvbXBh cmUmIF9fY29tcCkKICAgICAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2Nv dW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApCiAgICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6 ZSgpOyB9CgogICAgICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25zdCBhbGxv Y2F0b3JfdHlwZSYgX19hKQogICAgICAgIDogX0Jhc2UoX19hKSwgX01fbm9kZV9jb3VudCgwKSwg X01fa2V5X2NvbXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoK ICAgICAgX1JiX3RyZWUoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz4mIF9feCkKICAgICAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpLCBf TV9ub2RlX2NvdW50KDApLAogICAgICAgICAgICAgICAgIF9NX2tleV9jb21wYXJlKF9feC5fTV9r ZXlfY29tcGFyZSkKICAgICAgewogICAgICAgIGlmIChfX3guX01fcm9vdCgpID09IDApCiAgICAg ICAgICBfTV9lbXB0eV9pbml0aWFsaXplKCk7CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAg ICAgICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX01fcmVkOwogICAgICAgICAgICBfTV9yb290 KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgICAgICAgIF9NX2xl ZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgICAgICAgIF9NX3JpZ2h0bW9z dCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgICAgICAgfQogICAgICAgIF9NX25vZGVf Y291bnQgPSBfX3guX01fbm9kZV9jb3VudDsKICAgICAgfQoKICAgICAgfl9SYl90cmVlKCkgeyBj bGVhcigpOyB9CgogICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPiYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpOwoKICAgIHByaXZhdGU6CiAgICAgIHZvaWQgX01f ZW1wdHlfaW5pdGlhbGl6ZSgpCiAgICAgIHsKICAgICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0g X01fcmVkOwoKICAgICAgICBfTV9yb290KCkgPSAwOwogICAgICAgIF9NX2xlZnRtb3N0KCkgPSBf TV9oZWFkZXI7CiAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIH0KCiAg ICBwdWJsaWM6CgogICAgICBfQ29tcGFyZQogICAgICBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJu IF9NX2tleV9jb21wYXJlOyB9CgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpIHsgcmV0dXJu IF9NX2xlZnRtb3N0KCk7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29u c3QgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkg eyByZXR1cm4gX01faGVhZGVyOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBj b25zdCB7IHJldHVybiBfTV9oZWFkZXI7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAg cmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2 ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVu ZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3Jl dmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJl dHVybiBfTV9ub2RlX2NvdW50ID09IDA7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkg Y29uc3QgeyByZXR1cm4gX01fbm9kZV9jb3VudDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1h eF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICAgICAgdm9pZAogICAg ICBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBf X3QpCiAgICAgIHsKICAgICAgICBzdGQ6OnN3YXAoX01faGVhZGVyLCBfX3QuX01faGVhZGVyKTsK ICAgICAgICBzdGQ6OnN3YXAoX01fbm9kZV9jb3VudCwgX190Ll9NX25vZGVfY291bnQpOwogICAg ICAgIHN0ZDo6c3dhcChfTV9rZXlfY29tcGFyZSwgX190Ll9NX2tleV9jb21wYXJlKTsKICAgICAg fQoKCiAgICAgIHBhaXI8aXRlcmF0b3IsYm9vbD4KICAgICAgaW5zZXJ0X3VuaXF1ZShjb25zdCB2 YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X2VxdWFsKGNvbnN0 IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnRfdW5pcXVlKGl0 ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICBpdGVyYXRv cgogICAgICBpbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlw ZSYgX194KTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2 b2lkCiAgICAgIGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0KTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgog ICAgICB2b2lkCiAgICAgIGluc2VydF9lcXVhbChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QpOwoKICAgICAgdm9pZAogICAgICBlcmFzZShpdGVyYXRvciBfX3Bv c2l0aW9uKTsKCiAgICAgIHNpemVfdHlwZQogICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194 KTsKCiAgICAgIHZvaWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s YXN0KTsKCiAgICAgIHZvaWQKICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNv bnN0IGtleV90eXBlKiBfX2xhc3QpOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpCiAgICAgIHsK ICAgICAgICBpZiAoX01fbm9kZV9jb3VudCAhPSAwKQogICAgICAgICAgewogICAgICAgICAgICBf TV9lcmFzZShfTV9yb290KCkpOwogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVy OwogICAgICAgICAgICBfTV9yb290KCkgPSAwOwogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9 IF9NX2hlYWRlcjsKICAgICAgICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICAgICAgICB9CiAg ICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwoK ICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z dDsKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z dDsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp OwoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm IF9feCkgY29uc3Q7CgogICAgICBpdGVyYXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlf dHlwZSYgX194KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIHVwcGVyX2JvdW5kKGNvbnN0 IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKICAgICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KICAg ICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBwYWlyPGNvbnN0X2l0 ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUm IF9feCkgY29uc3Q7CgoKICAgICAgYm9vbAogICAgICBfX3JiX3ZlcmlmeSgpIGNvbnN0OwogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9S Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7 CiAgICAgIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICBlcXVhbChf X3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3I8KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGxleGlj b2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu bGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVl PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVy biAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9W YWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IF9SYl90 cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg ICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPD0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu bGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVl PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4g IShfX3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWws IHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWws X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICBfUmJfdHJlZTxfS2V5 LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyBfX3guc3dhcChf X3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYK ICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAg IG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPiYgX194KQogICAgewogICAgICBpZiAodGhpcyAhPSAmX194KQogICAgICAgIHsKCiAg ICAgICAgICBjbGVhcigpOwogICAgICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICAgICAgICBf TV9rZXlfY29tcGFyZSA9IF9feC5fTV9rZXlfY29tcGFyZTsKICAgICAgICAgIGlmIChfX3guX01f cm9vdCgpID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSAwOwog ICAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgICAgX01f cmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgewogICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3Qo KSwgX01faGVhZGVyKTsKICAgICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShf TV9yb290KCkpOwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9y b290KCkpOwogICAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSBfX3guX01fbm9kZV9jb3VudDsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5h bWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJh dG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6 CiAgICBfTV9pbnNlcnQoX0Jhc2VfcHRyIF9feF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFs JiBfX3YpCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9feF87CiAg ICAgIF9MaW5rX3R5cGUgX195ID0gKF9MaW5rX3R5cGUpIF9feV87CiAgICAgIF9MaW5rX3R5cGUg X196OwoKICAgICAgaWYgKF9feSA9PSBfTV9oZWFkZXIgfHwgX194ICE9IDAgfHwKICAgICAgICAg IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feSkpKQogICAgICAg IHsKICAgICAgICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICAgICAgICBfU19sZWZ0 KF9feSkgPSBfX3o7CgogICAgICAgICAgaWYgKF9feSA9PSBfTV9oZWFkZXIpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSBfX3o7CiAgICAgICAgICAgICAgX01fcmlnaHRt b3N0KCkgPSBfX3o7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9feSA9PSBfTV9s ZWZ0bW9zdCgpKQogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX196OwogICAgICAgIH0KICAg ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAg ICAgICAgICBfU19yaWdodChfX3kpID0gX196OwoKICAgICAgICAgIGlmIChfX3kgPT0gX01fcmln aHRtb3N0KCkpCiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgICAgIH0KICAg ICAgX1NfcGFyZW50KF9feikgPSBfX3k7CiAgICAgIF9TX2xlZnQoX196KSA9IDA7CiAgICAgIF9T X3JpZ2h0KF9feikgPSAwOwogICAgICBfUmJfdHJlZV9yZWJhbGFuY2UoX196LCBfTV9oZWFkZXIt Pl9NX3BhcmVudCk7CiAgICAgICsrX01fbm9kZV9jb3VudDsKICAgICAgcmV0dXJuIGl0ZXJhdG9y KF9feik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5 cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1 ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGluc2VydF9lcXVhbChjb25zdCBfVmFsJiBfX3YpCiAg ICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9f eCA9IF9NX3Jvb3QoKTsKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAg IF9feSA9IF9feDsKICAgICAgICAgIF9feCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCko X192KSwgX1Nfa2V5KF9feCkpID8KICAgICAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQo X194KTsKICAgICAgICB9CiAgICAgIHJldHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+OjppdGVyYXRvciwKICAgIGJvb2w+CiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5pcXVlKGNvbnN0IF9WYWwm IF9fdikKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5r X3R5cGUgX194ID0gX01fcm9vdCgpOwogICAgICBib29sIF9fY29tcCA9IHRydWU7CiAgICAgIHdo aWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfX3kgPSBfX3g7CiAgICAgICAgICBf X2NvbXAgPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKTsK ICAgICAgICAgIF9feCA9IF9fY29tcCA/IF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAg ICAgICAgfQogICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogICAgICBpZiAoX19j b21wKQogICAgICAgIGlmIChfX2ogPT0gYmVnaW4oKSkKICAgICAgICAgIHJldHVybiBwYWlyPGl0 ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICAgICAgZWxz ZQogICAgICAgICAgLS1fX2o7CiAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX19qLl9N X25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9y LGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICAgIHJldHVybiBwYWly PGl0ZXJhdG9yLGJvb2w+KF9faiwgZmFsc2UpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlw ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9L ZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9S Yl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CiAgICBp bnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKICAgIHsK ICAgICAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpCiAgICAg ICAgewoKICAgICAgICAgIGlmIChzaXplKCkgPiAwICYmCiAgICAgICAgICAgICAgX01fa2V5X2Nv bXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAg ICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9u Ll9NX25vZGUsIF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0 X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5f TV9ub2RlID09IF9NX2hlYWRlcikKICAgICAgICB7CgogICAgICAgICAgaWYgKF9NX2tleV9jb21w YXJlKF9TX2tleShfTV9yaWdodG1vc3QoKSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAg ICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bv c2l0aW9uOwogICAgICAgICAgLS1fX2JlZm9yZTsKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFy ZShfU19rZXkoX19iZWZvcmUuX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkKICAgICAgICAg ICAgICAmJiBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksX1Nfa2V5KF9fcG9zaXRp b24uX01fbm9kZSkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9TX3JpZ2h0KF9f YmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAs IF9fYmVmb3JlLl9NX25vZGUsIF9fdik7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9k ZSwgX192KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJu IGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJf dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAg IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGlu c2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAg ICAgIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAg IHsKCiAgICAgICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAgICFfTV9rZXlfY29t cGFyZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAg ICAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24u X01fbm9kZSwgX192KTsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRf ZXF1YWwoX192KTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9 PSBfTV9oZWFkZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tl eU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX01fcmlnaHRtb3N0KCkpKSkKICAgICAgICAgICAgcmV0 dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogICAgICAgIH0KICAgICAgZWxzZQog ICAgICAgIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgICAg ICAgIC0tX19iZWZvcmU7CiAgICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVl KCkoX192KSwgX1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpKQogICAgICAgICAgICAgICYmICFfTV9r ZXlfY29tcGFyZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgICAgICAg ICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9u b2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1Ys CiAgICAgICAgICAgdHlwZW5hbWUgX0NtcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8 Y2xhc3MgX0lJPgogICAgICB2b2lkCiAgICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAs X0FsbG9jPjo6CiAgICAgIGluc2VydF9lcXVhbChfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKICAg ICAgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAg ICAgIGluc2VydF9lcXVhbCgqX19maXJzdCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBf Q21wLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CiAgICB2b2lkCiAg ICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1 ZShfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGluc2VydF91bmlxdWUoKl9fZmlyc3QpOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5 T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+OjplcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgewogICAgICBfTGlua190 eXBlIF9feSA9CiAgICAgICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJh c2UoX19wb3NpdGlvbi5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fcGFyZW50LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fbGVmdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9N X3JpZ2h0KTsKICAgICAgZGVzdHJveV9ub2RlKF9feSk7CiAgICAgIC0tX01fbm9kZV9jb3VudDsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUg X0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf QWxsb2M+OjpzaXplX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+OjplcmFzZShjb25zdCBfS2V5JiBfX3gpCiAgICB7CiAgICAgIHBhaXI8aXRl cmF0b3IsaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgICAgIHNpemVfdHlwZSBf X24gPSBkaXN0YW5jZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogICAgICBlcmFzZShfX3AuZmly c3QsIF9fcC5zZWNvbmQpOwogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVu YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5 LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlwZQogICAgX1JiX3RyZWU8 X0tleSxfVmFsLF9Lb1YsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBfTV9jb3B5KF9MaW5rX3R5cGUg X194LCBfTGlua190eXBlIF9fcCkKICAgIHsKCiAgICAgIF9MaW5rX3R5cGUgX190b3AgPSBfTV9j bG9uZV9ub2RlKF9feCk7CiAgICAgIF9fdG9wLT5fTV9wYXJlbnQgPSBfX3A7CgogICAgICB0cnkK ICAgICAgICB7CiAgICAgICAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgICAgICAgX190b3At Pl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICAgICAgICBfX3Ag PSBfX3RvcDsKICAgICAgICAgIF9feCA9IF9TX2xlZnQoX194KTsKCiAgICAgICAgICB3aGlsZSAo X194ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9N X2Nsb25lX25vZGUoX194KTsKICAgICAgICAgICAgICBfX3AtPl9NX2xlZnQgPSBfX3k7CiAgICAg ICAgICAgICAgX195LT5fTV9wYXJlbnQgPSBfX3A7CiAgICAgICAgICAgICAgaWYgKF9feC0+X01f cmlnaHQpCiAgICAgICAgICAgICAgICBfX3ktPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChf X3gpLCBfX3kpOwogICAgICAgICAgICAgIF9fcCA9IF9feTsKICAgICAgICAgICAgICBfX3ggPSBf U19sZWZ0KF9feCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAg ICAgICB7CiAgICAgICAgICBfTV9lcmFzZShfX3RvcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAg ICB9CiAgICAgIHJldHVybiBfX3RvcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwg dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUg X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1Zh bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfTV9lcmFzZShfTGlua190eXBlIF9feCkK ICAgIHsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfTV9lcmFz ZShfU19yaWdodChfX3gpKTsKICAgICAgICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChfX3gp OwogICAgICAgICAgZGVzdHJveV9ub2RlKF9feCk7CiAgICAgICAgICBfX3ggPSBfX3k7CiAgICAg ICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBl bmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg X0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz46OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0 KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkK ICAgICAgICBjbGVhcigpOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s YXN0KSBlcmFzZShfX2ZpcnN0KyspOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0 eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBf Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFs LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXJhc2UoY29uc3QgX0tleSogX19m aXJzdCwgY29uc3QgX0tleSogX19sYXN0KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpCiAgICAgICAgZXJhc2UoKl9fZmlyc3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAg IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJl ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9S Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0 IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAg IF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAg ICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kg PSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBf U19yaWdodChfX3gpOwoKICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAgICAg cmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9N X25vZGUpKSkgPwogICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0 eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8 X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAg ICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBm aW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBf TV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICB3aGlsZSAo X194ICE9IDApCiAgICAgICB7CiAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9f eCksIF9faykpCiAgICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAg ICAgIGVsc2UKICAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwogICAgICAgfQogICAgIGNv bnN0X2l0ZXJhdG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICAgcmV0dXJuIChfX2og PT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwog ICAgICAgZW5kKCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9W YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBjb3VudChjb25zdCBfS2V5JiBf X2spIGNvbnN0CiAgICB7CiAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9y PiBfX3AgPSBlcXVhbF9yYW5nZShfX2spOwogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2Uo X19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAg ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRv cgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ogog ICAgbG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190eXBlIF9f eSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3 aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwg X19rKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVs c2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gaXRlcmF0b3Io X195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlw ZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgbG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19r KSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xp bmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAg aWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9f eCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3Jp Z2h0KF9feCk7CgogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVu YW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVy YXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46 OgogICAgdXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190eXBl IF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAg ICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5 KF9feCkpKQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAg ZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVyYXRv cihfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0 eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D b21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICB1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBf X2spIGNvbnN0CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBf TGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAg ICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICAgICBfX3kgPSBf X3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19y aWdodChfX3gpOwoKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUKICAgIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz46Oml0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgogICAgX1JiX3RyZWU8 X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXF1YWxfcmFuZ2Uo Y29uc3QgX0tleSYgX19rKQogICAgeyByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxv d2VyX2JvdW5kKF9fayksIHVwcGVyX2JvdW5kKF9faykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUg X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUKICBwYWlyPHR5cGVuYW1lIF9SYl90 cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxs b2M+Ojpjb25zdF9pdGVyYXRvcj4KICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFy ZSwgX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBjb25zdAogIHsKICAg IHJldHVybiBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPihsb3dlcl9ib3VuZChf X2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVy X2JvdW5kKF9faykpOwogIH0KCiAgaW5saW5lIGludAogIF9fYmxhY2tfY291bnQoX1JiX3RyZWVf bm9kZV9iYXNlKiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSogX19yb290KQogIHsKICAgIGlm IChfX25vZGUgPT0gMCkKICAgICAgcmV0dXJuIDA7CiAgICBpbnQgX19zdW0gPSAwOwogICAgZG8K ICAgICAgewogICAgICAgIGlmIChfX25vZGUtPl9NX2NvbG9yID09IF9NX2JsYWNrKQogICAgICAg ICAgKytfX3N1bTsKICAgICAgICBpZiAoX19ub2RlID09IF9fcm9vdCkKICAgICAgICAgIGJyZWFr OwogICAgICAgIF9fbm9kZSA9IF9fbm9kZS0+X01fcGFyZW50OwogICAgICB9CiAgICB3aGlsZSAo MSk7CiAgICByZXR1cm4gX19zdW07CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBl bmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ol9fcmJfdmVyaWZ5KCkgY29uc3QKICAgIHsKICAg IGlmIChfTV9ub2RlX2NvdW50ID09IDAgfHwgYmVnaW4oKSA9PSBlbmQoKSkKICAgICAgcmV0dXJu IF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgICAgX01faGVh ZGVyLT5fTV9sZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hl YWRlcjsKCiAgICBpbnQgX19sZW4gPSBfX2JsYWNrX2NvdW50KF9NX2xlZnRtb3N0KCksIF9NX3Jv b3QoKSk7CiAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQgPSBiZWdpbigpOyBfX2l0ICE9IGVu ZCgpOyArK19faXQpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBl KSBfX2l0Ll9NX25vZGU7CiAgICAgICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAg ICAgICAgX0xpbmtfdHlwZSBfX1IgPSBfU19yaWdodChfX3gpOwoKICAgICAgICBpZiAoX194LT5f TV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9yID09 IF9NX3JlZCkKICAgICAgICAgICAgICB8fCAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX01fcmVk KSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoX19MICYmIF9NX2tleV9j b21wYXJlKF9TX2tleShfX3gpLCBfU19rZXkoX19MKSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7 CiAgICAgICAgaWYgKF9fUiAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX19SKSwgX1Nfa2V5KF9f eCkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoIV9fTCAmJiAhX19SICYm IF9fYmxhY2tfY291bnQoX194LCBfTV9yb290KCkpICE9IF9fbGVuKQogICAgICAgICAgcmV0dXJu IGZhbHNlOwogICAgICB9CgogICAgaWYgKF9NX2xlZnRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9i YXNlOjpfU19taW5pbXVtKF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChf TV9yaWdodG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9vdCgp KSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgICB9Cn0KIyA2NyAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvbWFwIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9tYXAuaCIgMSAzCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5o IiAzCm5hbWVzcGFjZSBzdGQKewojIDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9t YXAuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSA9 IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25z dCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBtYXAKewoKIAogIDsKCnB1YmxpYzoKCiAgdHlwZWRlZiBf S2V5IGtleV90eXBlOwogIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9UcCBtYXBw ZWRfdHlwZTsKICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5 cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CgogIGNsYXNzIHZhbHVlX2NvbXBhcmUKICAgIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAg ZnJpZW5kIGNsYXNzIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZCA6 CiAgICBfQ29tcGFyZSBjb21wOwogICAgdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpIDogY29t cChfX2MpIHt9CiAgcHVibGljOgogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUm IF9feCwgY29uc3QgdmFsdWVfdHlwZSYgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBjb21wKF9f eC5maXJzdCwgX195LmZpcnN0KTsKICAgIH0KICB9OwoKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90 cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2 YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBf TV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRl cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2lu dGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwog IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJl bmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0 eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7 CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9p dGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVy YXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZm ZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtYXAoKSA6IF9NX3QoX0NvbXBh cmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUm IF9fY29tcCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j YXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAg ICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0 SXRlcmF0b3IgX19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICBjb25zdCBhbGxv Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9f YSkgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQogIG1hcChjb25zdCBt YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9Cgog IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtYXA8X0tl eSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3guX01fdDsK ICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7 IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBj b25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0 b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9y KCk7IH0KCgoKCgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoK CgoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsg fQoKCgoKCiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogIGNv bnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgogIHJl dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgog IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVn aW4oKTsgfQoKCgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVu ZCgpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1 cm4gX01fdC5yZW5kKCk7IH0KCgogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVt cHR5KCk7IH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsg fQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7 IH0KIyAyMjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgX1RwJiBv cGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spIHsKICAgIGl0ZXJhdG9yIF9faSA9IGxvd2Vy X2JvdW5kKF9fayk7CgogICAgaWYgKF9faSA9PSBlbmQoKSB8fCBrZXlfY29tcCgpKF9faywgKCpf X2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFsdWVfdHlwZShfX2ssIF9UcCgp KSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CgogIHZvaWQgc3dhcChtYXA8X0tleSxf VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KIyAyNDQg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgcGFpcjxpdGVyYXRvcixi b29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNl cnRfdW5pcXVlKF9feCk7IH0KIyAyNjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21h cC5oIiAzCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90 eXBlJiBfX3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7 IH0KCgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0 KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01f dC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQojIDI4NCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRp b24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQojIDI5NyAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfbWFwLmgiIDMKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9f eCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiMgMzA5ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9tYXAuaCIgMwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0 b3IgX19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKCgoKICB2 b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KIyAzMzIgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX21hcC5oIiAzCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7 IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDM0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfbWFwLmgiIDMKICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gp IGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiMgMzU0ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYg X194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5maW5kKF9feCkgPT0gX01fdC5lbmQoKSA/IDAg OiAxOwogIH0KIyAzNjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAg aXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxv d2VyX2JvdW5kKF9feCk7IH0KIyAzODIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21h cC5oIiAzCiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkg Y29uc3QgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiMgMzkzICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIHVwcGVyX2JvdW5k KGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CiMg NDAzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJh dG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf TV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQojIDQyMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfbWFwLmgiIDMKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25z dCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0K IyA0NDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgcGFpcjxjb25z dF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9f eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBs YXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5k IGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CiAgdGVt cGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmll bmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs bG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9D b21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0Nv bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs b2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0Nv bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSBib29sIG9wZXJhdG9yPihjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg X194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5 LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w ZXJhdG9yPD0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195 KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+ PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICBy ZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBj bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG1hcDxfS2V5LF9U cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbWFwPF9LZXksX1RwLF9D b21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2OCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvbWFwIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9tdWx0aW1hcC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVs dGltYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VHAsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFz cyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBtdWx0 aW1hcDsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxf VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11 bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194 LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs X0FsbG9jPiYgX195KTsKIyA5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGlt YXAuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwg Y2xhc3MgX0FsbG9jPgpjbGFzcyBtdWx0aW1hcAp7CgogCiAgOwoKcHVibGljOgoKCgogIHR5cGVk ZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAg bWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsK ICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2YWx1ZV9jb21wYXJlIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAg ZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVj dGVkOgogICAgX0NvbXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6 IGNvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90 eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QgewogICAgICByZXR1cm4gY29t cChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlwZWRlZiBf UmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgX1NlbGVjdDFz dDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlw ZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9p bnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9w b2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNl OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVm ZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsK ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0 b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJz ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9p dGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpk aWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtdWx0aW1hcCgpIDogX01f dChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7IH0KICBleHBsaWNpdCBtdWx0aW1hcChj b25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRv cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7 IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpbWFwKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFy ZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBf X2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg Y29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmlu c2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbXVsdGltYXAoY29uc3QgbXVsdGltYXA8 X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHsgfQoKICBt dWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0 aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsKICAgIF9NX3QgPSBfX3guX01f dDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25z dCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAo KSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxv Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2Nh dG9yKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9 CgoKCgoKCiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2lu KCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgoK ICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoK CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoK CgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90 LnJiZWdpbigpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01f dC5yZW5kKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7 IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9N X3QuZW1wdHkoKTsgfQoKCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNp emUoKTsgfQoKCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhf c2l6ZSgpOyB9CgogIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+ JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQojIDI0MiAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90 eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7IH0KIyAyNTkgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBpdGVyYXRvciBpbnNlcnQo aXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4g X01fdC5pbnNlcnRfZXF1YWwoX19wb3NpdGlvbiwgX194KTsKICB9CiMgMjcwICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsK ICB9CiMgMjg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAg dm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7 IH0KIyAyOTcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBz aXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5lcmFzZShf X3gpOyB9CiMgMzA5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAz CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9N X3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IF9NX3Qu Y2xlYXIoKTsgfQojIDMzMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAu aCIgMwogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5m aW5kKF9feCk7IH0KIyAzNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFw LmgiIDMKICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsg cmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CgoKCgoKCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtl eV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQojIDM2NSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGxvd2Vy X2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gp OyB9CiMgMzc4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAg Y29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CgoKCgoKCiAgaXRlcmF0b3IgdXBw ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9f eCk7IH0KCgoKCgoKCiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CiMgNDEz ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgcGFpcjxpdGVy YXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0 dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgNDMxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVy YXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJu IF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNz IF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29u c3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFz cyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3Bl cmF0b3I8IChjb25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRl bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs b2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBh cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9L ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3ku X01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXks X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11 bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01f dCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBf Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG11bHRp bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1 cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xh c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG11 bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl dHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbXVs dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl dHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNs YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3Qg bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog IHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAs IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobXVsdGltYXA8 X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG11bHRpbWFw PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0K IyA2OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWFwIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9xdC14 MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FtYXAuaCIgMgoKCgoKc3RydWN0IFFNYXBOb2RlQmFzZQp7 CiAgICBlbnVtIENvbG9yIHsgUmVkLCBCbGFjayB9OwoKICAgIFFNYXBOb2RlQmFzZSogbGVmdDsK ICAgIFFNYXBOb2RlQmFzZSogcmlnaHQ7CiAgICBRTWFwTm9kZUJhc2UqIHBhcmVudDsKCiAgICBD b2xvciBjb2xvcjsKCiAgICBRTWFwTm9kZUJhc2UqIG1pbmltdW0oKSB7CiAgICAgICAgUU1hcE5v ZGVCYXNlKiB4ID0gdGhpczsKICAgICAgICB3aGlsZSAoIHgtPmxlZnQgKQogICAgICAgICAgICB4 ID0geC0+bGVmdDsKICAgICAgICByZXR1cm4geDsKICAgIH0KCiAgICBRTWFwTm9kZUJhc2UqIG1h eGltdW0oKSB7CiAgICAgICAgUU1hcE5vZGVCYXNlKiB4ID0gdGhpczsKICAgICAgICB3aGlsZSAo IHgtPnJpZ2h0ICkKICAgICAgICAgICAgeCA9IHgtPnJpZ2h0OwogICAgICAgIHJldHVybiB4Owog ICAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBLLCBjbGFzcyBUPgpzdHJ1Y3QgUU1hcE5vZGUgOiBw dWJsaWMgUU1hcE5vZGVCYXNlCnsKICAgIFFNYXBOb2RlKCBjb25zdCBLJiBfa2V5LCBjb25zdCBU JiBfZGF0YSApIHsgZGF0YSA9IF9kYXRhOyBrZXkgPSBfa2V5OyB9CiAgICBRTWFwTm9kZSggY29u c3QgSyYgX2tleSApIHsga2V5ID0gX2tleTsgfQogICAgUU1hcE5vZGUoIGNvbnN0IFFNYXBOb2Rl PEssVD4mIF9uICkgeyBrZXkgPSBfbi5rZXk7IGRhdGEgPSBfbi5kYXRhOyB9CiAgICBRTWFwTm9k ZSgpIHsgfQogICAgVCBkYXRhOwogICAgSyBrZXk7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgSywgY2xh c3MgVD4KY2xhc3MgUU1hcEl0ZXJhdG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUU1hcE5v ZGU8IEssIFQgPiogTm9kZVB0cjsKCiAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVy YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7Cgog ICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgogICAgdHlwZWRlZiBUKiBw b2ludGVyOwogICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CgoKCgogICAgUU1hcE5vZGU8SyxUPiog bm9kZTsKCgoKCiAgICBRTWFwSXRlcmF0b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUU1hcEl0ZXJh dG9yKCBRTWFwTm9kZTxLLFQ+KiBwICkgOiBub2RlKCBwICkge30KICAgIFFNYXBJdGVyYXRvcigg Y29uc3QgUU1hcEl0ZXJhdG9yPEssVD4mIGl0ICkgOiBub2RlKCBpdC5ub2RlICkge30KCiAgICBi b29sIG9wZXJhdG9yPT0oIGNvbnN0IFFNYXBJdGVyYXRvcjxLLFQ+JiBpdCApIGNvbnN0IHsgcmV0 dXJuIG5vZGUgPT0gaXQubm9kZTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRTWFwSXRl cmF0b3I8SyxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIFQm IG9wZXJhdG9yKigpIHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9y KigpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KCgoKICAgIGNvbnN0IEsmIGtleSgpIGNv bnN0IHsgcmV0dXJuIG5vZGUtPmtleTsgfQogICAgVCYgZGF0YSgpIHsgcmV0dXJuIG5vZGUtPmRh dGE7IH0KICAgIGNvbnN0IFQmIGRhdGEoKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9Cgpw cml2YXRlOgogICAgaW50IGluYygpOwogICAgaW50IGRlYygpOwoKcHVibGljOgogICAgUU1hcEl0 ZXJhdG9yPEssVD4mIG9wZXJhdG9yKysoKSB7CiAgICAgICAgaW5jKCk7CiAgICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICAgIFFNYXBJdGVyYXRvcjxLLFQ+IG9wZXJhdG9yKysoaW50KSB7CiAg ICAgICAgUU1hcEl0ZXJhdG9yPEssVD4gdG1wID0gKnRoaXM7CiAgICAgICAgaW5jKCk7CiAgICAg ICAgcmV0dXJuIHRtcDsKICAgIH0KCiAgICBRTWFwSXRlcmF0b3I8SyxUPiYgb3BlcmF0b3ItLSgp IHsKICAgICAgICBkZWMoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUU1hcEl0 ZXJhdG9yPEssVD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAgICBRTWFwSXRlcmF0b3I8SyxUPiB0 bXAgPSAqdGhpczsKICAgICAgICBkZWMoKTsKICAgICAgICByZXR1cm4gdG1wOwogICAgfQp9OwoK dGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIFQ+CiBpbnQgUU1hcEl0ZXJhdG9yPEssVD46OmluYygp CnsKICAgIFFNYXBOb2RlQmFzZSogdG1wID0gbm9kZTsKICAgIGlmICggdG1wLT5yaWdodCApIHsK ICAgICAgICB0bXAgPSB0bXAtPnJpZ2h0OwogICAgICAgIHdoaWxlICggdG1wLT5sZWZ0ICkKICAg ICAgICAgICAgdG1wID0gdG1wLT5sZWZ0OwogICAgfSBlbHNlIHsKICAgICAgICBRTWFwTm9kZUJh c2UqIHkgPSB0bXAtPnBhcmVudDsKICAgICAgICB3aGlsZSAodG1wID09IHktPnJpZ2h0KSB7CiAg ICAgICAgICAgIHRtcCA9IHk7CiAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQ7CiAgICAgICAgfQog ICAgICAgIGlmICh0bXAtPnJpZ2h0ICE9IHkpCiAgICAgICAgICAgIHRtcCA9IHk7CiAgICB9CiAg ICBub2RlID0gKE5vZGVQdHIpdG1wOwogICAgcmV0dXJuIDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBL LCBjbGFzcyBUPgogaW50IFFNYXBJdGVyYXRvcjxLLFQ+OjpkZWMoKQp7CiAgICBRTWFwTm9kZUJh c2UqIHRtcCA9IG5vZGU7CiAgICBpZiAodG1wLT5jb2xvciA9PSBRTWFwTm9kZUJhc2U6OlJlZCAm JgogICAgICAgIHRtcC0+cGFyZW50LT5wYXJlbnQgPT0gdG1wICkgewogICAgICAgIHRtcCA9IHRt cC0+cmlnaHQ7CiAgICB9IGVsc2UgaWYgKHRtcC0+bGVmdCAhPSAwKSB7CiAgICAgICAgUU1hcE5v ZGVCYXNlKiB5ID0gdG1wLT5sZWZ0OwogICAgICAgIHdoaWxlICggeS0+cmlnaHQgKQogICAgICAg ICAgICB5ID0geS0+cmlnaHQ7CiAgICAgICAgdG1wID0geTsKICAgIH0gZWxzZSB7CiAgICAgICAg UU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHRtcCA9PSB5LT5s ZWZ0KSB7CiAgICAgICAgICAgIHRtcCA9IHk7CiAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQ7CiAg ICAgICAgfQogICAgICAgIHRtcCA9IHk7CiAgICB9CiAgICBub2RlID0gKE5vZGVQdHIpdG1wOwog ICAgcmV0dXJuIDA7Cn0KCnRlbXBsYXRlPGNsYXNzIEssIGNsYXNzIFQ+CmNsYXNzIFFNYXBDb25z dEl0ZXJhdG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUU1hcE5vZGU8IEssIFQgPiogTm9k ZVB0cjsKCiAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0 b3JfY2F0ZWdvcnk7CgogICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CgogICAgdHlwZWRlZiBwdHJk aWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgogICAgdHlwZWRlZiBjb25zdCBUKiBwb2ludGVyOwog ICAgdHlwZWRlZiBjb25zdCBUJiByZWZlcmVuY2U7CgoKCgoKICAgIFFNYXBOb2RlPEssVD4qIG5v ZGU7CgoKCgogICAgUU1hcENvbnN0SXRlcmF0b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUU1hcENv bnN0SXRlcmF0b3IoIFFNYXBOb2RlPEssVD4qIHAgKSA6IG5vZGUoIHAgKSB7fQogICAgUU1hcENv bnN0SXRlcmF0b3IoIGNvbnN0IFFNYXBDb25zdEl0ZXJhdG9yPEssVD4mIGl0ICkgOiBub2RlKCBp dC5ub2RlICkge30KICAgIFFNYXBDb25zdEl0ZXJhdG9yKCBjb25zdCBRTWFwSXRlcmF0b3I8SyxU PiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3Qg UU1hcENvbnN0SXRlcmF0b3I8SyxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5v ZGU7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiYg aXQgKSBjb25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJh dG9yKigpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KCgoKICAgIGNvbnN0IEsmIGtleSgp IGNvbnN0IHsgcmV0dXJuIG5vZGUtPmtleTsgfQogICAgY29uc3QgVCYgZGF0YSgpIGNvbnN0IHsg cmV0dXJuIG5vZGUtPmRhdGE7IH0KCnByaXZhdGU6CiAgICBpbnQgaW5jKCk7CiAgICBpbnQgZGVj KCk7CgpwdWJsaWM6CiAgICBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+JiBvcGVyYXRvcisrKCkgewog ICAgICAgIGluYygpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRTWFwQ29uc3RJ dGVyYXRvcjxLLFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgUU1hcENvbnN0SXRlcmF0b3I8 SyxUPiB0bXAgPSAqdGhpczsKICAgICAgICBpbmMoKTsKICAgICAgICByZXR1cm4gdG1wOwogICAg fQoKICAgIFFNYXBDb25zdEl0ZXJhdG9yPEssVD4mIG9wZXJhdG9yLS0oKSB7CiAgICAgICAgZGVj KCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFNYXBDb25zdEl0ZXJhdG9yPEss VD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAgICBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+IHRtcCA9 ICp0aGlzOwogICAgICAgIGRlYygpOwogICAgICAgIHJldHVybiB0bXA7CiAgICB9Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgSywgY2xhc3MgVD4KIGludCBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+OjppbmMo KQp7CiAgICBRTWFwTm9kZUJhc2UqIHRtcCA9IG5vZGU7CiAgICBpZiAoIHRtcC0+cmlnaHQgKSB7 CiAgICAgICAgdG1wID0gdG1wLT5yaWdodDsKICAgICAgICB3aGlsZSAoIHRtcC0+bGVmdCApCiAg ICAgICAgICAgIHRtcCA9IHRtcC0+bGVmdDsKICAgIH0gZWxzZSB7CiAgICAgICAgUU1hcE5vZGVC YXNlKiB5ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHRtcCA9PSB5LT5yaWdodCkgewog ICAgICAgICAgICB0bXAgPSB5OwogICAgICAgICAgICB5ID0geS0+cGFyZW50OwogICAgICAgIH0K ICAgICAgICBpZiAodG1wLT5yaWdodCAhPSB5KQogICAgICAgICAgICB0bXAgPSB5OwogICAgfQog ICAgbm9kZSA9IChOb2RlUHRyKXRtcDsKICAgIHJldHVybiAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg SywgY2xhc3MgVD4KIGludCBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+OjpkZWMoKQp7CiAgICBRTWFw Tm9kZUJhc2UqIHRtcCA9IG5vZGU7CiAgICBpZiAodG1wLT5jb2xvciA9PSBRTWFwTm9kZUJhc2U6 OlJlZCAmJgogICAgICAgIHRtcC0+cGFyZW50LT5wYXJlbnQgPT0gdG1wICkgewogICAgICAgIHRt cCA9IHRtcC0+cmlnaHQ7CiAgICB9IGVsc2UgaWYgKHRtcC0+bGVmdCAhPSAwKSB7CiAgICAgICAg UU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5sZWZ0OwogICAgICAgIHdoaWxlICggeS0+cmlnaHQgKQog ICAgICAgICAgICB5ID0geS0+cmlnaHQ7CiAgICAgICAgdG1wID0geTsKICAgIH0gZWxzZSB7CiAg ICAgICAgUU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHRtcCA9 PSB5LT5sZWZ0KSB7CiAgICAgICAgICAgIHRtcCA9IHk7CiAgICAgICAgICAgIHkgPSB5LT5wYXJl bnQ7CiAgICAgICAgfQogICAgICAgIHRtcCA9IHk7CiAgICB9CiAgICBub2RlID0gKE5vZGVQdHIp dG1wOwogICAgcmV0dXJuIDA7Cn0KCmNsYXNzIFFNYXBQcml2YXRlQmFzZSA6IHB1YmxpYyBRU2hh cmVkCnsKcHVibGljOgogICAgUU1hcFByaXZhdGVCYXNlKCkgewogICAgICAgIG5vZGVfY291bnQg PSAwOwogICAgfQogICAgUU1hcFByaXZhdGVCYXNlKCBjb25zdCBRTWFwUHJpdmF0ZUJhc2UqIF9t YXApIHsKICAgICAgICBub2RlX2NvdW50ID0gX21hcC0+bm9kZV9jb3VudDsKICAgIH0KCgoKCiAg ICB2b2lkIHJvdGF0ZUxlZnQoIFFNYXBOb2RlQmFzZSogeCwgUU1hcE5vZGVCYXNlKiYgcm9vdCk7 CiAgICB2b2lkIHJvdGF0ZVJpZ2h0KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSomIHJv b3QgKTsKICAgIHZvaWQgcmViYWxhbmNlKCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSom IHJvb3QgKTsKICAgIFFNYXBOb2RlQmFzZSogcmVtb3ZlQW5kUmViYWxhbmNlKCBRTWFwTm9kZUJh c2UqIHosIFFNYXBOb2RlQmFzZSomIHJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUU1hcE5vZGVCYXNlKiYgbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUU1hcE5vZGVCYXNlKiYgcmlnaHRtb3N0ICk7CgoKCgogICAgaW50IG5v ZGVfY291bnQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KY2xhc3MgUU1hcFBy aXZhdGUgOiBwdWJsaWMgUU1hcFByaXZhdGVCYXNlCnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBR TWFwSXRlcmF0b3I8IEtleSwgVCA+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRTWFwQ29uc3RJdGVy YXRvcjwgS2V5LCBUID4gQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgUU1hcE5vZGU8IEtleSwg VCA+IE5vZGU7CiAgICB0eXBlZGVmIFFNYXBOb2RlPCBLZXksIFQgPiogTm9kZVB0cjsKCgoKCiAg ICBRTWFwUHJpdmF0ZSgpOwogICAgUU1hcFByaXZhdGUoIGNvbnN0IFFNYXBQcml2YXRlPCBLZXks IFQgPiogX21hcCApOwogICAgflFNYXBQcml2YXRlKCkgeyBjbGVhcigpOyBkZWxldGUgaGVhZGVy OyB9CgogICAgTm9kZVB0ciBjb3B5KCBOb2RlUHRyIHAgKTsKICAgIHZvaWQgY2xlYXIoKTsKICAg IHZvaWQgY2xlYXIoIE5vZGVQdHIgcCApOwoKICAgIEl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g SXRlcmF0b3IoIChOb2RlUHRyKShoZWFkZXItPmxlZnQgKSApOyB9CiAgICBJdGVyYXRvciBlbmQo KSB7IHJldHVybiBJdGVyYXRvciggaGVhZGVyICk7IH0KICAgIENvbnN0SXRlcmF0b3IgYmVnaW4o KSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCAoTm9kZVB0cikoaGVhZGVyLT5sZWZ0ICkg KTsgfQogICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9y KCBoZWFkZXIgKTsgfQoKICAgIENvbnN0SXRlcmF0b3IgZmluZChjb25zdCBLZXkmIGspIGNvbnN0 OwoKICAgIHZvaWQgcmVtb3ZlKCBJdGVyYXRvciBpdCApIHsKICAgICAgICBOb2RlUHRyIGRlbCA9 IChOb2RlUHRyKSByZW1vdmVBbmRSZWJhbGFuY2UoIGl0Lm5vZGUsIGhlYWRlci0+cGFyZW50LCBo ZWFkZXItPmxlZnQsIGhlYWRlci0+cmlnaHQgKTsKICAgICAgICBkZWxldGUgZGVsOwogICAgICAg IC0tbm9kZV9jb3VudDsKICAgIH0KIyA0MTQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYv aW5jbHVkZS9xbWFwLmgiCiAgICBJdGVyYXRvciBpbnNlcnRTaW5nbGUoIGNvbnN0IEtleSYgayAp OwogICAgSXRlcmF0b3IgaW5zZXJ0KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSogeSwg Y29uc3QgS2V5JiBrICk7Cgpwcm90ZWN0ZWQ6CgoKCiAgICBjb25zdCBLZXkmIGtleSggUU1hcE5v ZGVCYXNlKiBiICkgY29uc3QgeyByZXR1cm4gKChOb2RlUHRyKWIpLT5rZXk7IH0KCgoKCiAgICBO b2RlUHRyIGhlYWRlcjsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgogUU1hcFBy aXZhdGU8S2V5LFQ+OjpRTWFwUHJpdmF0ZSgpIHsKICAgIGhlYWRlciA9IG5ldyBOb2RlOwogICAg aGVhZGVyLT5jb2xvciA9IFFNYXBOb2RlQmFzZTo6UmVkOwogICAgaGVhZGVyLT5wYXJlbnQgPSAw OwogICAgaGVhZGVyLT5sZWZ0ID0gaGVhZGVyLT5yaWdodCA9IGhlYWRlcjsKfQp0ZW1wbGF0ZSA8 Y2xhc3MgS2V5LCBjbGFzcyBUPgogUU1hcFByaXZhdGU8S2V5LFQ+OjpRTWFwUHJpdmF0ZSggY29u c3QgUU1hcFByaXZhdGU8IEtleSwgVCA+KiBfbWFwICkgOiBRTWFwUHJpdmF0ZUJhc2UoIF9tYXAg KSB7CiAgICBoZWFkZXIgPSBuZXcgTm9kZTsKICAgIGhlYWRlci0+Y29sb3IgPSBRTWFwTm9kZUJh c2U6OlJlZDsKICAgIGlmICggX21hcC0+aGVhZGVyLT5wYXJlbnQgPT0gMCApIHsKICAgICAgICBo ZWFkZXItPnBhcmVudCA9IDA7CiAgICAgICAgaGVhZGVyLT5sZWZ0ID0gaGVhZGVyLT5yaWdodCA9 IGhlYWRlcjsKICAgIH0gZWxzZSB7CiAgICAgICAgaGVhZGVyLT5wYXJlbnQgPSBjb3B5KCAoTm9k ZVB0cikoX21hcC0+aGVhZGVyLT5wYXJlbnQpICk7CiAgICAgICAgaGVhZGVyLT5wYXJlbnQtPnBh cmVudCA9IGhlYWRlcjsKICAgICAgICBoZWFkZXItPmxlZnQgPSBoZWFkZXItPnBhcmVudC0+bWlu aW11bSgpOwogICAgICAgIGhlYWRlci0+cmlnaHQgPSBoZWFkZXItPnBhcmVudC0+bWF4aW11bSgp OwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgogdHlwZW5hbWUgUU1hcFBy aXZhdGU8S2V5LFQ+OjpOb2RlUHRyIFFNYXBQcml2YXRlPEtleSxUPjo6Y29weSggdHlwZW5hbWUg UU1hcFByaXZhdGU8S2V5LFQ+OjpOb2RlUHRyIHAgKQp7CiAgICBpZiAoICFwICkKICAgICAgICBy ZXR1cm4gMDsKICAgIE5vZGVQdHIgbiA9IG5ldyBOb2RlKCAqcCApOwogICAgbi0+Y29sb3IgPSBw LT5jb2xvcjsKICAgIGlmICggcC0+bGVmdCApIHsKICAgICAgICBuLT5sZWZ0ID0gY29weSggKE5v ZGVQdHIpKHAtPmxlZnQpICk7CiAgICAgICAgbi0+bGVmdC0+cGFyZW50ID0gbjsKICAgIH0gZWxz ZSB7CiAgICAgICAgbi0+bGVmdCA9IDA7CiAgICB9CiAgICBpZiAoIHAtPnJpZ2h0ICkgewogICAg ICAgIG4tPnJpZ2h0ID0gY29weSggKE5vZGVQdHIpKHAtPnJpZ2h0KSApOwogICAgICAgIG4tPnJp Z2h0LT5wYXJlbnQgPSBuOwogICAgfSBlbHNlIHsKICAgICAgICBuLT5yaWdodCA9IDA7CiAgICB9 CiAgICByZXR1cm4gbjsKfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIHZvaWQgUU1h cFByaXZhdGU8S2V5LFQ+OjpjbGVhcigpCnsKICAgIGNsZWFyKCAoTm9kZVB0cikoaGVhZGVyLT5w YXJlbnQpICk7CiAgICBoZWFkZXItPmNvbG9yID0gUU1hcE5vZGVCYXNlOjpSZWQ7CiAgICBoZWFk ZXItPnBhcmVudCA9IDA7CiAgICBoZWFkZXItPmxlZnQgPSBoZWFkZXItPnJpZ2h0ID0gaGVhZGVy OwogICAgbm9kZV9jb3VudCA9IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+CiB2 b2lkIFFNYXBQcml2YXRlPEtleSxUPjo6Y2xlYXIoIHR5cGVuYW1lIFFNYXBQcml2YXRlPEtleSxU Pjo6Tm9kZVB0ciBwICkKewogICAgd2hpbGUgKCBwICE9IDAgKSB7CiAgICAgICAgY2xlYXIoIChO b2RlUHRyKXAtPnJpZ2h0ICk7CiAgICAgICAgTm9kZVB0ciB5ID0gKE5vZGVQdHIpcC0+bGVmdDsK ICAgICAgICBkZWxldGUgcDsKICAgICAgICBwID0geTsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNz IEtleSwgY2xhc3MgVD4KIHR5cGVuYW1lIFFNYXBQcml2YXRlPEtleSxUPjo6Q29uc3RJdGVyYXRv ciBRTWFwUHJpdmF0ZTxLZXksVD46OmZpbmQoY29uc3QgS2V5JiBrKSBjb25zdAp7CiAgICBRTWFw Tm9kZUJhc2UqIHkgPSBoZWFkZXI7CiAgICBRTWFwTm9kZUJhc2UqIHggPSBoZWFkZXItPnBhcmVu dDsKCiAgICB3aGlsZSAoIHggIT0gMCApIHsKCiAgICAgICAgaWYgKCAhKCBrZXkoeCkgPCBrICkg KSB7CiAgICAgICAgICAgIHkgPSB4OwogICAgICAgICAgICB4ID0geC0+bGVmdDsKICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICB4ID0geC0+cmlnaHQ7CiAgICAgICAgfQogICAgfQoKCgogICAg aWYgKCB5ID09IGhlYWRlciB8fCBrIDwga2V5KHkpICkKICAgICAgICByZXR1cm4gQ29uc3RJdGVy YXRvciggaGVhZGVyICk7CiAgICByZXR1cm4gQ29uc3RJdGVyYXRvciggKE5vZGVQdHIpeSApOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgogdHlwZW5hbWUgUU1hcFByaXZhdGU8S2V5 LFQ+OjpJdGVyYXRvciBRTWFwUHJpdmF0ZTxLZXksVD46Omluc2VydFNpbmdsZSggY29uc3QgS2V5 JiBrICkKewoKICAgIFFNYXBOb2RlQmFzZSogeSA9IGhlYWRlcjsKICAgIFFNYXBOb2RlQmFzZSog eCA9IGhlYWRlci0+cGFyZW50OwogICAgYm9vbCByZXN1bHQgPSBUUlVFOwogICAgd2hpbGUgKCB4 ICE9IDAgKSB7CiAgICAgICAgcmVzdWx0ID0gKCBrIDwga2V5KHgpICk7CiAgICAgICAgeSA9IHg7 CiAgICAgICAgeCA9IHJlc3VsdCA/IHgtPmxlZnQgOiB4LT5yaWdodDsKICAgIH0KCiAgICBJdGVy YXRvciBqKCAoTm9kZVB0cil5ICk7CiAgICBpZiAoIHJlc3VsdCApIHsKCiAgICAgICAgaWYgKCBq ID09IGJlZ2luKCkgKSB7CiAgICAgICAgICAgIHJldHVybiBpbnNlcnQoeCwgeSwgayApOwogICAg ICAgIH0gZWxzZSB7CgogICAgICAgICAgICAtLWo7CiAgICAgICAgfQogICAgfQoKICAgIGlmICgg KGoubm9kZS0+a2V5KSA8IGsgKQogICAgICAgIHJldHVybiBpbnNlcnQoeCwgeSwgayApOwoKICAg IHJldHVybiBqOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIHR5cGVuYW1lIFFN YXBQcml2YXRlPEtleSxUPjo6SXRlcmF0b3IgUU1hcFByaXZhdGU8S2V5LFQ+OjppbnNlcnQoIFFN YXBOb2RlQmFzZSogeCwgUU1hcE5vZGVCYXNlKiB5LCBjb25zdCBLZXkmIGsgKQp7CiAgICBOb2Rl UHRyIHogPSBuZXcgTm9kZSggayApOwogICAgaWYgKHkgPT0gaGVhZGVyIHx8IHggIT0gMCB8fCBr IDwga2V5KHkpICkgewogICAgICAgIHktPmxlZnQgPSB6OwogICAgICAgIGlmICggeSA9PSBoZWFk ZXIgKSB7CiAgICAgICAgICAgIGhlYWRlci0+cGFyZW50ID0gejsKICAgICAgICAgICAgaGVhZGVy LT5yaWdodCA9IHo7CiAgICAgICAgfSBlbHNlIGlmICggeSA9PSBoZWFkZXItPmxlZnQgKQogICAg ICAgICAgICBoZWFkZXItPmxlZnQgPSB6OwogICAgfSBlbHNlIHsKICAgICAgICB5LT5yaWdodCA9 IHo7CiAgICAgICAgaWYgKCB5ID09IGhlYWRlci0+cmlnaHQgKQogICAgICAgICAgICBoZWFkZXIt PnJpZ2h0ID0gejsKICAgIH0KICAgIHotPnBhcmVudCA9IHk7CiAgICB6LT5sZWZ0ID0gMDsKICAg IHotPnJpZ2h0ID0gMDsKICAgIHJlYmFsYW5jZSggeiwgaGVhZGVyLT5wYXJlbnQgKTsKICAgICsr bm9kZV9jb3VudDsKICAgIHJldHVybiBJdGVyYXRvcih6KTsKfQojIDU4NyAiL3Vzci9sb2NhbC9x dC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FtYXAuaCIKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFz cyBUPgpjbGFzcyBRTWFwCnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBLZXkga2V5X3R5cGU7CiAg ICB0eXBlZGVmIFQgbWFwcGVkX3R5cGU7CiAgICB0eXBlZGVmIFFQYWlyPGNvbnN0IGtleV90eXBl LCBtYXBwZWRfdHlwZT4gdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRl cjsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICAgIHR5cGVk ZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBj b25zdF9yZWZlcmVuY2U7CgogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoK CgogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBRTWFwSXRlcmF0b3I8 S2V5LFQ+IGl0ZXJhdG9yOwogICAgdHlwZWRlZiBRTWFwQ29uc3RJdGVyYXRvcjxLZXksVD4gY29u c3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIFFQYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydF9wYWly OwoKICAgIHR5cGVkZWYgUU1hcEl0ZXJhdG9yPCBLZXksIFQgPiBJdGVyYXRvcjsKICAgIHR5cGVk ZWYgUU1hcENvbnN0SXRlcmF0b3I8IEtleSwgVCA+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVm IFQgVmFsdWVUeXBlOwogICAgdHlwZWRlZiBRTWFwUHJpdmF0ZTwgS2V5LCBUID4gUHJpdjsKCgoK CiAgICBRTWFwKCkKICAgIHsKICAgICAgICBzaCA9IG5ldyBRTWFwUHJpdmF0ZTwgS2V5LCBUID47 CiAgICB9CiAgICBRTWFwKCBjb25zdCBRTWFwPEtleSxUPiYgbSApCiAgICB7CiAgICAgICAgc2gg PSBtLnNoOyBzaC0+cmVmKCk7CiAgICB9CgoKCgoKCiAgICBRTWFwKCBjb25zdCB0eXBlbmFtZSBz dGQ6Om1hcDxLZXksVD4mIG0gKQogICAgewogICAgICAgIHNoID0gbmV3IFFNYXBQcml2YXRlPEtl eSxUPjsKCgoKICAgICAgICBRTWFwQ29uc3RJdGVyYXRvcjxLZXksVD4gaXQgPSBtLmJlZ2luKCk7 CgogICAgICAgIGZvciAoIDsgaXQgIT0gbS5lbmQoKTsgKytpdCApIHsKICAgICAgICAgICAgdmFs dWVfdHlwZSBwKCAoKml0KS5maXJzdCwgKCppdCkuc2Vjb25kICk7CiAgICAgICAgICAgIGluc2Vy dCggcCApOwogICAgICAgIH0KICAgIH0KCiAgICB+UU1hcCgpCiAgICB7CiAgICAgICAgaWYgKCBz aC0+ZGVyZWYoKSApCiAgICAgICAgICAgIGRlbGV0ZSBzaDsKICAgIH0KICAgIFFNYXA8S2V5LFQ+ JiBvcGVyYXRvcj0gKCBjb25zdCBRTWFwPEtleSxUPiYgbSApOwoKICAgIFFNYXA8S2V5LFQ+JiBv cGVyYXRvcj0gKCBjb25zdCB0eXBlbmFtZSBzdGQ6Om1hcDxLZXksVD4mIG0gKQogICAgewogICAg ICAgIGNsZWFyKCk7CgoKCiAgICAgICAgUU1hcENvbnN0SXRlcmF0b3I8S2V5LFQ+IGl0ID0gbS5i ZWdpbigpOwoKICAgICAgICBmb3IgKCA7IGl0ICE9IG0uZW5kKCk7ICsraXQgKSB7CiAgICAgICAg ICAgIHZhbHVlX3R5cGUgcCggKCppdCkuZmlyc3QsICgqaXQpLnNlY29uZCApOwogICAgICAgICAg ICBpbnNlcnQoIHAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoK CgogICAgaXRlcmF0b3IgYmVnaW4oKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmJlZ2luKCk7IH0K ICAgIGl0ZXJhdG9yIGVuZCgpIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+ZW5kKCk7IH0KICAgIGNv bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gKChjb25zdCBQcml2KilzaCktPmJl Z2luKCk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuICgoY29uc3Qg UHJpdiopc2gpLT5lbmQoKTsgfQogICAgaXRlcmF0b3IgcmVwbGFjZSggY29uc3QgS2V5JiBrLCBj b25zdCBUJiB2ICkKICAgIHsKICAgICAgICByZW1vdmUoIGsgKTsKICAgICAgICByZXR1cm4gaW5z ZXJ0KCBrLCB2ICk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAgewogICAg ICAgIHJldHVybiBzaC0+bm9kZV9jb3VudDsKICAgIH0KICAgIGJvb2wgZW1wdHkoKSBjb25zdAog ICAgewogICAgICAgIHJldHVybiBzaC0+bm9kZV9jb3VudCA9PSAwOwogICAgfQogICAgUVBhaXI8 aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KCBjb25zdCB2YWx1ZV90eXBlJiB4ICk7CgogICAgdm9pZCBl cmFzZSggaXRlcmF0b3IgaXQgKQogICAgewogICAgICAgIGRldGFjaCgpOwogICAgICAgIHNoLT5y ZW1vdmUoIGl0ICk7CiAgICB9CiAgICB2b2lkIGVyYXNlKCBjb25zdCBrZXlfdHlwZSYgayApOwog ICAgc2l6ZV90eXBlIGNvdW50KCBjb25zdCBrZXlfdHlwZSYgayApIGNvbnN0OwogICAgVCYgb3Bl cmF0b3JbXSAoIGNvbnN0IEtleSYgayApOwogICAgdm9pZCBjbGVhcigpOwoKICAgIGl0ZXJhdG9y IGZpbmQgKCBjb25zdCBLZXkmIGsgKQogICAgewogICAgICAgIGRldGFjaCgpOwogICAgICAgIHJl dHVybiBpdGVyYXRvciggc2gtPmZpbmQoIGsgKS5ub2RlICk7CiAgICB9CiAgICBjb25zdF9pdGVy YXRvciBmaW5kICggY29uc3QgS2V5JiBrICkgY29uc3QgeyByZXR1cm4gc2gtPmZpbmQoIGsgKTsg fQoKICAgIGNvbnN0IFQmIG9wZXJhdG9yW10gKCBjb25zdCBLZXkmIGsgKSBjb25zdAogICAgICAg IHsgOyByZXR1cm4gc2gtPmZpbmQoIGsgKS5kYXRhKCk7IH0KICAgIGJvb2wgY29udGFpbnMgKCBj b25zdCBLZXkmIGsgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGZpbmQoIGsgKSAhPSBlbmQoKTsg fQoKCiAgICBzaXplX3R5cGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZV9jb3VudDsg fQoKICAgIFFWYWx1ZUxpc3Q8S2V5PiBrZXlzKCkgY29uc3QgewogICAgICAgIFFWYWx1ZUxpc3Q8 S2V5PiByOwogICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaT1iZWdpbigpOyBpIT1lbmQoKTsg KytpKQogICAgICAgICAgICByLmFwcGVuZChpLmtleSgpKTsKICAgICAgICByZXR1cm4gcjsKICAg IH0KCiAgICBRVmFsdWVMaXN0PFQ+IHZhbHVlcygpIGNvbnN0IHsKICAgICAgICBRVmFsdWVMaXN0 PFQ+IHI7CiAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpPWJlZ2luKCk7IGkhPWVuZCgpOyAr K2kpCiAgICAgICAgICAgIHIuYXBwZW5kKCppKTsKICAgICAgICByZXR1cm4gcjsKICAgIH0KCiAg ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZV9jb3VudCA9PSAwOyB9Cgog ICAgaXRlcmF0b3IgaW5zZXJ0KCBjb25zdCBLZXkmIGtleSwgY29uc3QgVCYgdmFsdWUsIGJvb2wg b3ZlcndyaXRlID0gVFJVRSApOwogICAgdm9pZCByZW1vdmUoIGl0ZXJhdG9yIGl0ICkgeyBkZXRh Y2goKTsgc2gtPnJlbW92ZSggaXQgKTsgfQogICAgdm9pZCByZW1vdmUoIGNvbnN0IEtleSYgayAp OwojIDc0NiAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FtYXAuaCIKcHJv dGVjdGVkOgoKCgogICAgdm9pZCBkZXRhY2goKSB7IGlmICggc2gtPmNvdW50ID4gMSApIGRldGFj aEludGVybmFsKCk7IH0KCiAgICBQcml2KiBzaDsKcHJpdmF0ZToKICAgIHZvaWQgZGV0YWNoSW50 ZXJuYWwoKTsKfTsKCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIFFNYXA8S2V5LFQ+JiBR TWFwPEtleSxUPjo6b3BlcmF0b3I9ICggY29uc3QgUU1hcDxLZXksVD4mIG0gKQp7CiAgICBtLnNo LT5yZWYoKTsKICAgIGlmICggc2gtPmRlcmVmKCkgKQogICAgICAgIGRlbGV0ZSBzaDsKICAgIHNo ID0gbS5zaDsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBU PgogdHlwZW5hbWUgUU1hcDxLZXksVD46Omluc2VydF9wYWlyIFFNYXA8S2V5LFQ+OjppbnNlcnQo IGNvbnN0IHR5cGVuYW1lIFFNYXA8S2V5LFQ+Ojp2YWx1ZV90eXBlJiB4ICkKewogICAgZGV0YWNo KCk7CiAgICBzaXplX3R5cGUgbiA9IHNpemUoKTsKICAgIGl0ZXJhdG9yIGl0ID0gc2gtPmluc2Vy dFNpbmdsZSggeC5maXJzdCApOwogICAgYm9vbCBpbnNlcnRlZCA9IEZBTFNFOwogICAgaWYgKCBu IDwgc2l6ZSgpICkgewogICAgICAgIGluc2VydGVkID0gVFJVRTsKICAgICAgICBpdC5kYXRhKCkg PSB4LnNlY29uZDsKICAgIH0KICAgIHJldHVybiBRUGFpcjxpdGVyYXRvcixib29sPiggaXQsIGlu c2VydGVkICk7Cn0KCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIHZvaWQgUU1hcDxLZXks VD46OmVyYXNlKCBjb25zdCBLZXkmIGsgKQp7CiAgICBkZXRhY2goKTsKICAgIGl0ZXJhdG9yIGl0 KCBzaC0+ZmluZCggayApLm5vZGUgKTsKICAgIGlmICggaXQgIT0gZW5kKCkgKQogICAgICAgIHNo LT5yZW1vdmUoIGl0ICk7Cn0KCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIHR5cGVuYW1l IFFNYXA8S2V5LFQ+OjpzaXplX3R5cGUgUU1hcDxLZXksVD46OmNvdW50KCBjb25zdCBLZXkmIGsg KSBjb25zdAp7CiAgICBjb25zdF9pdGVyYXRvciBpdCggc2gtPmZpbmQoIGsgKS5ub2RlICk7CiAg ICBpZiAoIGl0ICE9IGVuZCgpICkgewogICAgICAgIHNpemVfdHlwZSBjID0gMDsKICAgICAgICB3 aGlsZSAoIGl0ICE9IGVuZCgpICkgewogICAgICAgICAgICArK2l0OwogICAgICAgICAgICArK2M7 CiAgICAgICAgfQogICAgICAgIHJldHVybiBjOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCnRlbXBs YXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIFQmIFFNYXA8S2V5LFQ+OjpvcGVyYXRvcltdICggY29u c3QgS2V5JiBrICkKewogICAgZGV0YWNoKCk7CiAgICBRTWFwTm9kZTxLZXksVD4qIHAgPSBzaC0+ ZmluZCggayApLm5vZGU7CiAgICBpZiAoIHAgIT0gc2gtPmVuZCgpLm5vZGUgKQogICAgICAgIHJl dHVybiBwLT5kYXRhOwogICAgcmV0dXJuIGluc2VydCggaywgVCgpICkuZGF0YSgpOwp9Cgp0ZW1w bGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiB2b2lkIFFNYXA8S2V5LFQ+OjpjbGVhcigpCnsKICAg IGlmICggc2gtPmNvdW50ID09IDEgKQogICAgICAgIHNoLT5jbGVhcigpOwogICAgZWxzZSB7CiAg ICAgICAgc2gtPmRlcmVmKCk7CiAgICAgICAgc2ggPSBuZXcgUU1hcFByaXZhdGU8S2V5LFQ+Owog ICAgfQp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiB0eXBlbmFtZSBRTWFwPEtleSxU Pjo6aXRlcmF0b3IgUU1hcDxLZXksVD46Omluc2VydCggY29uc3QgS2V5JiBrZXksIGNvbnN0IFQm IHZhbHVlLCBib29sIG92ZXJ3cml0ZSApCnsKICAgIGRldGFjaCgpOwogICAgc2l6ZV90eXBlIG4g PSBzaXplKCk7CiAgICBpdGVyYXRvciBpdCA9IHNoLT5pbnNlcnRTaW5nbGUoIGtleSApOwogICAg aWYgKCBvdmVyd3JpdGUgfHwgbiA8IHNpemUoKSApCiAgICAgICAgaXQuZGF0YSgpID0gdmFsdWU7 CiAgICByZXR1cm4gaXQ7Cn0KCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIHZvaWQgUU1h cDxLZXksVD46OnJlbW92ZSggY29uc3QgS2V5JiBrICkKewogICAgZGV0YWNoKCk7CiAgICBpdGVy YXRvciBpdCggc2gtPmZpbmQoIGsgKS5ub2RlICk7CiAgICBpZiAoIGl0ICE9IGVuZCgpICkKICAg ICAgICBzaC0+cmVtb3ZlKCBpdCApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiB2 b2lkIFFNYXA8S2V5LFQ+OjpkZXRhY2hJbnRlcm5hbCgpCnsKICAgIHNoLT5kZXJlZigpOyBzaCA9 IG5ldyBRTWFwUHJpdmF0ZTxLZXksVD4oIHNoICk7Cn0KCgoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBj bGFzcyBUPgogUURhdGFTdHJlYW0mIG9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtJiBzLCBRTWFwPEtl eSxUPiYgbSApIHsKICAgIG0uY2xlYXIoKTsKICAgIFFfVUlOVDMyIGM7CiAgICBzID4+IGM7CiAg ICBmb3IoIFFfVUlOVDMyIGkgPSAwOyBpIDwgYzsgKytpICkgewogICAgICAgIEtleSBrOyBUIHQ7 CiAgICAgICAgcyA+PiBrID4+IHQ7CiAgICAgICAgbS5pbnNlcnQoIGssIHQgKTsKICAgICAgICBp ZiAoIHMuYXRFbmQoKSApCiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHM7Cn0K Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiBRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PCgg UURhdGFTdHJlYW0mIHMsIGNvbnN0IFFNYXA8S2V5LFQ+JiBtICkgewogICAgcyA8PCAoUV9VSU5U MzIpbS5zaXplKCk7CiAgICBRTWFwQ29uc3RJdGVyYXRvcjxLZXksVD4gaXQgPSBtLmJlZ2luKCk7 CiAgICBmb3IoIDsgaXQgIT0gbS5lbmQoKTsgKytpdCApCiAgICAgICAgcyA8PCBpdC5rZXkoKSA8 PCBpdC5kYXRhKCk7CiAgICByZXR1cm4gczsKfQojIDQ0ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVl LTMuMC42L2luY2x1ZGUvcW1pbWUuaCIgMgoKCgoKY2xhc3MgUUltYWdlRHJhZzsKY2xhc3MgUVRl eHREcmFnOwoKY2xhc3MgUU1pbWVTb3VyY2UKewogICAgZnJpZW5kIGNsYXNzIFFDbGlwYm9hcmRE YXRhOwoKcHVibGljOgogICAgUU1pbWVTb3VyY2UoKTsKICAgIHZpcnR1YWwgflFNaW1lU291cmNl KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZvcm1hdCggaW50IG4gPSAwICkgY29uc3QgPSAw OwogICAgdmlydHVhbCBib29sIHByb3ZpZGVzKCBjb25zdCBjaGFyKiApIGNvbnN0OwogICAgdmly dHVhbCBRQnl0ZUFycmF5IGVuY29kZWREYXRhKCBjb25zdCBjaGFyKiApIGNvbnN0ID0gMDsKICAg IGludCBzZXJpYWxOdW1iZXIoKSBjb25zdDsKCnByaXZhdGU6CiAgICBpbnQgc2VyX25vOwogICAg ZW51bSB7IE5vQ2FjaGUsIFRleHQsIEdyYXBoaWNzIH0gY2FjaGVUeXBlOwogICAgdW5pb24KICAg IHsKICAgICAgICBzdHJ1Y3QKICAgICAgICB7CiAgICAgICAgICAgIFFTdHJpbmcgKnN0cjsKICAg ICAgICAgICAgUUNTdHJpbmcgKnN1YnR5cGU7CiAgICAgICAgfSB0eHQ7CiAgICAgICAgc3RydWN0 CiAgICAgICAgewogICAgICAgICAgICBRSW1hZ2UgKmltZzsKICAgICAgICAgICAgUVBpeG1hcCAq cGl4OwogICAgICAgIH0gZ2Z4OwogICAgfSBjYWNoZTsKICAgIHZvaWQgY2xlYXJDYWNoZSgpOwoK CiAgICBmcmllbmQgY2xhc3MgUUltYWdlRHJhZzsKICAgIGZyaWVuZCBjbGFzcyBRVGV4dERyYWc7 Cgp9OwoKaW5saW5lIGludCBRTWltZVNvdXJjZTo6c2VyaWFsTnVtYmVyKCkgY29uc3QKeyByZXR1 cm4gc2VyX25vOyB9CgpjbGFzcyBRU3RyaW5nTGlzdDsKY2xhc3MgUU1pbWVTb3VyY2VGYWN0b3J5 RGF0YTsKCmNsYXNzIFFNaW1lU291cmNlRmFjdG9yeSB7CnB1YmxpYzoKICAgIFFNaW1lU291cmNl RmFjdG9yeSgpOwogICAgdmlydHVhbCB+UU1pbWVTb3VyY2VGYWN0b3J5KCk7CgogICAgc3RhdGlj IFFNaW1lU291cmNlRmFjdG9yeSogZGVmYXVsdEZhY3RvcnkoKTsKICAgIHN0YXRpYyB2b2lkIHNl dERlZmF1bHRGYWN0b3J5KCBRTWltZVNvdXJjZUZhY3RvcnkqICk7CiAgICBzdGF0aWMgUU1pbWVT b3VyY2VGYWN0b3J5KiB0YWtlRGVmYXVsdEZhY3RvcnkoKTsKICAgIHN0YXRpYyB2b2lkIGFkZEZh Y3RvcnkoIFFNaW1lU291cmNlRmFjdG9yeSAqZiApOwogICAgc3RhdGljIHZvaWQgcmVtb3ZlRmFj dG9yeSggUU1pbWVTb3VyY2VGYWN0b3J5ICpmICk7CgogICAgdmlydHVhbCBjb25zdCBRTWltZVNv dXJjZSogZGF0YShjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSkgY29uc3Q7CiAgICB2aXJ0dWFsIFFT dHJpbmcgbWFrZUFic29sdXRlKGNvbnN0IFFTdHJpbmcmIGFic19vcl9yZWxfbmFtZSwgY29uc3Qg UVN0cmluZyYgY29udGV4dCkgY29uc3Q7CiAgICBjb25zdCBRTWltZVNvdXJjZSogZGF0YShjb25z dCBRU3RyaW5nJiBhYnNfb3JfcmVsX25hbWUsIGNvbnN0IFFTdHJpbmcmIGNvbnRleHQpIGNvbnN0 OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0KCBjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSwgY29u c3QgUVN0cmluZyYgdGV4dCApOwogICAgdmlydHVhbCB2b2lkIHNldEltYWdlKCBjb25zdCBRU3Ry aW5nJiBhYnNfbmFtZSwgY29uc3QgUUltYWdlJiBpbSApOwogICAgdmlydHVhbCB2b2lkIHNldFBp eG1hcCggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0IFFQaXhtYXAmIHBtICk7CiAgICB2 aXJ0dWFsIHZvaWQgc2V0RGF0YSggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIFFNaW1lU291cmNl KiBkYXRhICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZVBhdGgoIGNvbnN0IFFTdHJpbmdMaXN0 JiApOwogICAgdmlydHVhbCBRU3RyaW5nTGlzdCBmaWxlUGF0aCgpIGNvbnN0OwogICAgdm9pZCBh ZGRGaWxlUGF0aCggY29uc3QgUVN0cmluZyYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRlbnNp b25UeXBlKCBjb25zdCBRU3RyaW5nJiBleHQsIGNvbnN0IGNoYXIqIG1pbWV0eXBlICk7Cgpwcml2 YXRlOgogICAgUU1pbWVTb3VyY2UgKmRhdGFJbnRlcm5hbChjb25zdCBRU3RyaW5nJiBhYnNfbmFt ZSwgY29uc3QgUU1hcDxRU3RyaW5nLCBRU3RyaW5nPiAmZXh0ZW5zaW9ucyApIGNvbnN0OwogICAg UU1pbWVTb3VyY2VGYWN0b3J5RGF0YSogZDsKfTsKIyA0NiAiL3Vzci9sb2NhbC9xdC14MTEtZnJl ZS0zLjAuNi9pbmNsdWRlL3FldmVudC5oIiAyCgoKCmNsYXNzIFFFdmVudDogcHVibGljIFF0CnsK cHVibGljOgogICAgZW51bSBUeXBlIHsKCgoKCgoKICAgICAgICBOb25lID0gMCwKCgogICAgICAg IFRpbWVyID0gMSwKICAgICAgICBNb3VzZUJ1dHRvblByZXNzID0gMiwKICAgICAgICBNb3VzZUJ1 dHRvblJlbGVhc2UgPSAzLAogICAgICAgIE1vdXNlQnV0dG9uRGJsQ2xpY2s9IDQsCiAgICAgICAg TW91c2VNb3ZlID0gNSwKICAgICAgICBLZXlQcmVzcyA9IDYsCiAgICAgICAgS2V5UmVsZWFzZSA9 IDcsCiAgICAgICAgRm9jdXNJbiA9IDgsCiAgICAgICAgRm9jdXNPdXQgPSA5LAogICAgICAgIEVu dGVyID0gMTAsCiAgICAgICAgTGVhdmUgPSAxMSwKICAgICAgICBQYWludCA9IDEyLAogICAgICAg IE1vdmUgPSAxMywKICAgICAgICBSZXNpemUgPSAxNCwKICAgICAgICBDcmVhdGUgPSAxNSwKICAg ICAgICBEZXN0cm95ID0gMTYsCiAgICAgICAgU2hvdyA9IDE3LAogICAgICAgIEhpZGUgPSAxOCwK ICAgICAgICBDbG9zZSA9IDE5LAogICAgICAgIFF1aXQgPSAyMCwKICAgICAgICBSZXBhcmVudCA9 IDIxLAogICAgICAgIFNob3dNaW5pbWl6ZWQgPSAyMiwKICAgICAgICBTaG93Tm9ybWFsID0gMjMs CiAgICAgICAgV2luZG93QWN0aXZhdGUgPSAyNCwKICAgICAgICBXaW5kb3dEZWFjdGl2YXRlID0g MjUsCiAgICAgICAgU2hvd1RvUGFyZW50ID0gMjYsCiAgICAgICAgSGlkZVRvUGFyZW50ID0gMjcs CiAgICAgICAgU2hvd01heGltaXplZCA9IDI4LAogICAgICAgIFNob3dGdWxsU2NyZWVuID0gMjks CiAgICAgICAgQWNjZWwgPSAzMCwKICAgICAgICBXaGVlbCA9IDMxLAogICAgICAgIEFjY2VsQXZh aWxhYmxlID0gMzIsCiAgICAgICAgQ2FwdGlvbkNoYW5nZSA9IDMzLAogICAgICAgIEljb25DaGFu Z2UgPSAzNCwKICAgICAgICBQYXJlbnRGb250Q2hhbmdlID0gMzUsCiAgICAgICAgQXBwbGljYXRp b25Gb250Q2hhbmdlID0gMzYsCiAgICAgICAgUGFyZW50UGFsZXR0ZUNoYW5nZSA9IDM3LAogICAg ICAgIEFwcGxpY2F0aW9uUGFsZXR0ZUNoYW5nZSA9IDM4LAogICAgICAgIFBhbGV0dGVDaGFuZ2Ug PSAzOSwKICAgICAgICBDbGlwYm9hcmQgPSA0MCwKICAgICAgICBTcGVlY2ggPSA0MiwKICAgICAg ICBTb2NrQWN0ID0gNTAsCiAgICAgICAgQWNjZWxPdmVycmlkZSA9IDUxLAogICAgICAgIERlZmVy cmVkRGVsZXRlID0gNTIsCiAgICAgICAgRHJhZ0VudGVyID0gNjAsCiAgICAgICAgRHJhZ01vdmUg PSA2MSwKICAgICAgICBEcmFnTGVhdmUgPSA2MiwKICAgICAgICBEcm9wID0gNjMsCiAgICAgICAg RHJhZ1Jlc3BvbnNlID0gNjQsCiAgICAgICAgQ2hpbGRJbnNlcnRlZCA9IDcwLAogICAgICAgIENo aWxkUmVtb3ZlZCA9IDcxLAogICAgICAgIExheW91dEhpbnQgPSA3MiwKICAgICAgICBTaG93V2lu ZG93UmVxdWVzdCA9IDczLAogICAgICAgIEFjdGl2YXRlQ29udHJvbCA9IDgwLAogICAgICAgIERl YWN0aXZhdGVDb250cm9sID0gODEsCiAgICAgICAgQ29udGV4dE1lbnUgPSA4MiwKICAgICAgICBJ TVN0YXJ0ID0gODMsCiAgICAgICAgSU1Db21wb3NlID0gODQsCiAgICAgICAgSU1FbmQgPSA4NSwK ICAgICAgICBBY2Nlc3NpYmlsaXR5ID0gODYsCiAgICAgICAgVGFibGV0ID0gODcsCiAgICAgICAg VXNlciA9IDEwMDAsCiAgICAgICAgTWF4VXNlciA9IDY1NTM1CiAgICB9OwoKCiAgICBRRXZlbnQo IFR5cGUgdHlwZSApIDogdCh0eXBlKSwgcG9zdGVkKEZBTFNFKSwgc3BvbnQoRkFMU0UpIHt9CiAg ICB2aXJ0dWFsIH5RRXZlbnQoKTsKICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHQ7IH0K ICAgIGJvb2wgc3BvbnRhbmVvdXMoKSBjb25zdCB7IHJldHVybiBzcG9udDsgfQpwcm90ZWN0ZWQ6 CiAgICBUeXBlIHQ7CnByaXZhdGU6CiAgICB1aW50IHBvc3RlZCA6IDE7CiAgICB1aW50IHNwb250 IDogMTsKCgogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBR QmFzZUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFFVFdpZGdldDsKfTsKCgpjbGFzcyBR VGltZXJFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRVGltZXJFdmVudCggaW50 IHRpbWVySWQgKQogICAgICAgIDogUUV2ZW50KFRpbWVyKSwgaWQodGltZXJJZCkge30KICAgIGlu dCB0aW1lcklkKCkgY29uc3QgeyByZXR1cm4gaWQ7IH0KcHJvdGVjdGVkOgogICAgaW50IGlkOwp9 OwoKCmNsYXNzIFFNb3VzZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFNb3Vz ZUV2ZW50KCBUeXBlIHR5cGUsIGNvbnN0IFFQb2ludCAmcG9zLCBpbnQgYnV0dG9uLCBpbnQgc3Rh dGUgKTsKCiAgICBRTW91c2VFdmVudCggVHlwZSB0eXBlLCBjb25zdCBRUG9pbnQgJnBvcywgY29u c3QgUVBvaW50Jmdsb2JhbFBvcywKICAgICAgICAgICAgICAgICBpbnQgYnV0dG9uLCBpbnQgc3Rh dGUgKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCBwKHBvcyksIGcoZ2xvYmFsUG9zKSwgYigodXNo b3J0KWJ1dHRvbikscygodXNob3J0KXN0YXRlKSxhY2NwdChUUlVFKSB7fTsKCiAgICBjb25zdCBR UG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0IFFQb2ludCAmZ2xvYmFs UG9zKCkgY29uc3QgeyByZXR1cm4gZzsgfQogICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBwLngo KTsgfQogICAgaW50IHkoKSBjb25zdCB7IHJldHVybiBwLnkoKTsgfQogICAgaW50IGdsb2JhbFgo KSBjb25zdCB7IHJldHVybiBnLngoKTsgfQogICAgaW50IGdsb2JhbFkoKSBjb25zdCB7IHJldHVy biBnLnkoKTsgfQogICAgQnV0dG9uU3RhdGUgYnV0dG9uKCkgY29uc3QgeyByZXR1cm4gKEJ1dHRv blN0YXRlKSBiOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIChCdXR0 b25TdGF0ZSkgczsgfQogICAgQnV0dG9uU3RhdGUgc3RhdGVBZnRlcigpIGNvbnN0OwogICAgYm9v bCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQ7IH0KICAgIHZvaWQgYWNjZXB0KCkg eyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQgaWdub3JlKCkgeyBhY2NwdCA9IEZBTFNFOyB9CnBy b3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBvaW50IGc7CiAgICB1c2hvcnQgYjsKICAgIHVz aG9ydCBzOwogICAgdWludCBhY2NwdDoxOwp9OwoKCgpjbGFzcyBRV2hlZWxFdmVudCA6IHB1Ymxp YyBRRXZlbnQKewpwdWJsaWM6CiAgICBRV2hlZWxFdmVudCggY29uc3QgUVBvaW50ICZwb3MsIGlu dCBkZWx0YSwgaW50IHN0YXRlLCBPcmllbnRhdGlvbiBvcmllbnQgPSBWZXJ0aWNhbCApOwogICAg UVdoZWVsRXZlbnQoIGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9pbnQmIGdsb2JhbFBvcywg aW50IGRlbHRhLCBpbnQgc3RhdGUsIE9yaWVudGF0aW9uIG9yaWVudCA9IFZlcnRpY2FsICkKICAg ICAgICA6IFFFdmVudChXaGVlbCksIHAocG9zKSwgZyhnbG9iYWxQb3MpLCBkKGRlbHRhKSwgcygo dXNob3J0KXN0YXRlKSwKICAgICAgICAgIGFjY3B0KFRSVUUpLCBvKG9yaWVudCkge30KICAgIGlu dCBkZWx0YSgpIGNvbnN0IHsgcmV0dXJuIGQ7IH0KICAgIGNvbnN0IFFQb2ludCAmcG9zKCkgY29u c3QgeyByZXR1cm4gcDsgfQogICAgY29uc3QgUVBvaW50ICZnbG9iYWxQb3MoKSBjb25zdCB7IHJl dHVybiBnOyB9CiAgICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJuIHAueCgpOyB9CiAgICBpbnQgeSgp IGNvbnN0IHsgcmV0dXJuIHAueSgpOyB9CiAgICBpbnQgZ2xvYmFsWCgpIGNvbnN0IHsgcmV0dXJu IGcueCgpOyB9CiAgICBpbnQgZ2xvYmFsWSgpIGNvbnN0IHsgcmV0dXJuIGcueSgpOyB9CiAgICBC dXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIEJ1dHRvblN0YXRlKHMpOyB9CiAgICBP cmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG87IH0KICAgIGJvb2wgaXNB Y2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0OyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgYWNj cHQgPSBUUlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQgPSBGQUxTRTsgfQpwcm90ZWN0 ZWQ6CiAgICBRUG9pbnQgcDsKICAgIFFQb2ludCBnOwogICAgaW50IGQ7CiAgICB1c2hvcnQgczsK ICAgIGJvb2wgYWNjcHQ7CiAgICBPcmllbnRhdGlvbiBvOwp9OwoKCmNsYXNzIFFUYWJsZXRFdmVu dCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBlbnVtIFRhYmxldERldmljZSB7IE5vRGV2 aWNlID0gLTEsIFB1Y2ssIFN0eWx1cywgRXJhc2VyIH07CiAgICBRVGFibGV0RXZlbnQoIGNvbnN0 IFFQb2ludCAmcG9zLCBpbnQgZGV2aWNlLCBpbnQgcHJlc3N1cmUsIGludCB4VGlsdCwKICAgICAg ICAgICAgICAgICAgaW50IHlUaWx0LCBjb25zdCBRUGFpcjxpbnQsaW50PiAmdUlkICkKICAgICAg ICA6IFFFdmVudCggVGFibGV0ICksIG1Qb3MoIHBvcyApLCBtRGV2KCBkZXZpY2UgKSwgbVByZXNz KCBwcmVzc3VyZSApLAogICAgICAgICAgbVhUKCB4VGlsdCApLCBtWVQoIHlUaWx0ICksIG1UeXBl KCB1SWQuZmlyc3QgKSwgbVBoeSggdUlkLnNlY29uZCApCiAgICB7fQogICAgUVRhYmxldEV2ZW50 KCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50ICZnbG9iYWxQb3MsIGludCBkZXZpY2Us CiAgICAgICAgICAgICAgICAgIGludCBwcmVzc3VyZSwgaW50IHhUaWx0LCBpbnQgeVRpbHQsIGNv bnN0IFFQYWlyPGludCxpbnQ+ICZ1SWQgKQogICAgICAgIDogUUV2ZW50KCBUYWJsZXQgKSwgbVBv cyggcG9zICksIG1HUG9zKCBnbG9iYWxQb3MgKSwgbURldiggZGV2aWNlICksCiAgICAgICAgICBt UHJlc3MoIHByZXNzdXJlICksIG1YVCggeFRpbHQgKSwgbVlUKCB5VGlsdCApLCBtVHlwZSggdUlk LmZpcnN0ICksCiAgICAgICAgICBtUGh5KCB1SWQuc2Vjb25kICkKICAgIHt9CiAgICBpbnQgcHJl c3N1cmUoKSBjb25zdCB7IHJldHVybiBtUHJlc3M7IH0KICAgIGludCB4VGlsdCgpIGNvbnN0IHsg cmV0dXJuIG1YVDsgfQogICAgaW50IHlUaWx0KCkgY29uc3QgeyByZXR1cm4gbVlUOyB9CiAgICBj b25zdCBRUG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIG1Qb3M7IH0KICAgIGNvbnN0IFFQb2lu dCAmZ2xvYmFsUG9zKCkgY29uc3QgeyByZXR1cm4gbUdQb3M7IH0KICAgIGludCB4KCkgY29uc3Qg eyByZXR1cm4gbVBvcy54KCk7IH0KICAgIGludCB5KCkgY29uc3QgeyByZXR1cm4gbVBvcy55KCk7 IH0KICAgIGludCBnbG9iYWxYKCkgY29uc3QgeyByZXR1cm4gbUdQb3MueCgpOyB9CiAgICBpbnQg Z2xvYmFsWSgpIGNvbnN0IHsgcmV0dXJuIG1HUG9zLnkoKTsgfQogICAgVGFibGV0RGV2aWNlIGRl dmljZSgpIGNvbnN0IHsgcmV0dXJuIFRhYmxldERldmljZShtRGV2KTsgfQogICAgaW50IGlzQWNj ZXB0ZWQoKSBjb25zdCB7IHJldHVybiBtYkFjYzsgfQogICAgdm9pZCBhY2NlcHQoKSB7IG1iQWNj ID0gVFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IG1iQWNjID0gRkFMU0U7IH0KICAgIFFQYWly PGludCxpbnQ+IHVuaXF1ZUlkKCkgeyByZXR1cm4gUVBhaXI8aW50LGludD4oIG1UeXBlLCBtUGh5 KTsgfQpwcm90ZWN0ZWQ6CiAgICBRUG9pbnQgbVBvczsKICAgIFFQb2ludCBtR1BvczsKICAgIGlu dCBtRGV2LAogICAgICAgIG1QcmVzcywKICAgICAgICBtWFQsCiAgICAgICAgbVlULAogICAgICAg IG1UeXBlLAogICAgICAgIG1QaHk7CiAgICBib29sIG1iQWNjOwoKfTsKCmNsYXNzIFFLZXlFdmVu dCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRS2V5RXZlbnQoIFR5cGUgdHlwZSwgaW50 IGtleSwgaW50IGFzY2lpLCBpbnQgc3RhdGUsCiAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5n JiB0ZXh0PVFTdHJpbmc6Om51bGwsIGJvb2wgYXV0b3JlcD1GQUxTRSwgdXNob3J0IGNvdW50PTEg KQogICAgICAgIDogUUV2ZW50KHR5cGUpLCB0eHQodGV4dCksIGsoKHVzaG9ydClrZXkpLCBzKCh1 c2hvcnQpc3RhdGUpLAogICAgICAgICAgICBhKCh1Y2hhcilhc2NpaSksIGFjY3B0KFRSVUUpLCBh dXRvcihhdXRvcmVwKSwgYyhjb3VudCkge30KICAgIGludCBrZXkoKSBjb25zdCB7IHJldHVybiBr OyB9CiAgICBpbnQgYXNjaWkoKSBjb25zdCB7IHJldHVybiBhOyB9CiAgICBCdXR0b25TdGF0ZSBz dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIEJ1dHRvblN0YXRlKHMpOyB9CiAgICBCdXR0b25TdGF0ZSBz dGF0ZUFmdGVyKCkgY29uc3Q7CiAgICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBh Y2NwdDsgfQogICAgUVN0cmluZyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gdHh0OyB9CiAgICBib29s IGlzQXV0b1JlcGVhdCgpIGNvbnN0IHsgcmV0dXJuIGF1dG9yOyB9CiAgICBpbnQgY291bnQoKSBj b25zdCB7IHJldHVybiBpbnQoYyk7IH0KICAgIHZvaWQgYWNjZXB0KCkgeyBhY2NwdCA9IFRSVUU7 IH0KICAgIHZvaWQgaWdub3JlKCkgeyBhY2NwdCA9IEZBTFNFOyB9Cgpwcm90ZWN0ZWQ6CiAgICBR U3RyaW5nIHR4dDsKICAgIHVzaG9ydCBrLCBzOwogICAgdWNoYXIgYTsKICAgIHVpbnQgYWNjcHQ6 MTsKICAgIHVpbnQgYXV0b3I6MTsKICAgIHVzaG9ydCBjOwp9OwoKCmNsYXNzIFFGb2N1c0V2ZW50 IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKCiAgICBRRm9jdXNFdmVudCggVHlwZSB0eXBlICkK ICAgICAgICA6IFFFdmVudCh0eXBlKSB7fQoKICAgIGJvb2wgZ290Rm9jdXMoKSBjb25zdCB7IHJl dHVybiB0eXBlKCkgPT0gRm9jdXNJbjsgfQogICAgYm9vbCBsb3N0Rm9jdXMoKSBjb25zdCB7IHJl dHVybiB0eXBlKCkgPT0gRm9jdXNPdXQ7IH0KCiAgICBlbnVtIFJlYXNvbiB7IE1vdXNlLCBUYWIs IEJhY2t0YWIsIEFjdGl2ZVdpbmRvdywgUG9wdXAsIFNob3J0Y3V0LCBPdGhlciB9OwogICAgc3Rh dGljIFJlYXNvbiByZWFzb24oKTsKICAgIHN0YXRpYyB2b2lkIHNldFJlYXNvbiggUmVhc29uIHJl YXNvbiApOwogICAgc3RhdGljIHZvaWQgcmVzZXRSZWFzb24oKTsKCnByaXZhdGU6CiAgICBzdGF0 aWMgUmVhc29uIG1fcmVhc29uOwogICAgc3RhdGljIFJlYXNvbiBwcmV2X3JlYXNvbjsKfTsKCgpj bGFzcyBRUGFpbnRFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRUGFpbnRFdmVu dCggY29uc3QgUVJlZ2lvbiYgcGFpbnRSZWdpb24sIGJvb2wgZXJhc2VkID0gVFJVRSkKICAgICAg ICA6IFFFdmVudChQYWludCksCiAgICAgICAgICByZWMocGFpbnRSZWdpb24uYm91bmRpbmdSZWN0 KCkpLAogICAgICAgICAgcmVnKHBhaW50UmVnaW9uKSwKICAgICAgICAgIGVyYXNlKGVyYXNlZCl7 fQogICAgUVBhaW50RXZlbnQoIGNvbnN0IFFSZWN0ICZwYWludFJlY3QsIGJvb2wgZXJhc2VkID0g VFJVRSApCiAgICAgICAgOiBRRXZlbnQoUGFpbnQpLAogICAgICAgICAgcmVjKHBhaW50UmVjdCks CiAgICAgICAgICByZWcocGFpbnRSZWN0KSwKICAgICAgICAgIGVyYXNlKGVyYXNlZCl7fQogICAg Y29uc3QgUVJlY3QgJnJlY3QoKSBjb25zdCB7IHJldHVybiByZWM7IH0KICAgIGNvbnN0IFFSZWdp b24gJnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIHJlZzsgfQogICAgYm9vbCBlcmFzZWQoKSBjb25z dCB7IHJldHVybiBlcmFzZTsgfQpwcm90ZWN0ZWQ6CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0 aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBRUmVjdCByZWM7CiAg ICBRUmVnaW9uIHJlZzsKICAgIGJvb2wgZXJhc2U7Cn07CgoKY2xhc3MgUU1vdmVFdmVudCA6IHB1 YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRTW92ZUV2ZW50KCBjb25zdCBRUG9pbnQgJnBvcywg Y29uc3QgUVBvaW50ICZvbGRQb3MgKQogICAgICAgIDogUUV2ZW50KE1vdmUpLCBwKHBvcyksIG9s ZHAob2xkUG9zKSB7fQogICAgY29uc3QgUVBvaW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBwOyB9 CiAgICBjb25zdCBRUG9pbnQgJm9sZFBvcygpY29uc3QgeyByZXR1cm4gb2xkcDt9CnByb3RlY3Rl ZDoKICAgIFFQb2ludCBwLCBvbGRwOwogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAg IGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwp9OwoKCmNsYXNzIFFSZXNpemVFdmVudCA6 IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRUmVzaXplRXZlbnQoIGNvbnN0IFFTaXplICZz aXplLCBjb25zdCBRU2l6ZSAmb2xkU2l6ZSApCiAgICAgICAgOiBRRXZlbnQoUmVzaXplKSwgcyhz aXplKSwgb2xkcyhvbGRTaXplKSB7fQogICAgY29uc3QgUVNpemUgJnNpemUoKSBjb25zdCB7IHJl dHVybiBzOyB9CiAgICBjb25zdCBRU2l6ZSAmb2xkU2l6ZSgpY29uc3QgeyByZXR1cm4gb2xkczt9 CnByb3RlY3RlZDoKICAgIFFTaXplIHMsIG9sZHM7CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0 aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247Cn07CgoKY2xhc3MgUUNsb3Nl RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUNsb3NlRXZlbnQoKQogICAgICAg IDogUUV2ZW50KENsb3NlKSwgYWNjcHQoRkFMU0UpIHt9CiAgICBib29sIGlzQWNjZXB0ZWQoKSBj b25zdCB7IHJldHVybiBhY2NwdDsgfQogICAgdm9pZCBhY2NlcHQoKSB7IGFjY3B0ID0gVFJVRTsg fQogICAgdm9pZCBpZ25vcmUoKSB7IGFjY3B0ID0gRkFMU0U7IH0KcHJvdGVjdGVkOgogICAgYm9v bCBhY2NwdDsKfTsKCgpjbGFzcyBRU2hvd0V2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoK ICAgIFFTaG93RXZlbnQoKQogICAgICAgIDogUUV2ZW50KFNob3cpIHt9Cn07CgoKY2xhc3MgUUhp ZGVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRSGlkZUV2ZW50KCkKICAgICAg ICA6IFFFdmVudChIaWRlKSB7fQp9OwoKY2xhc3MgUUNvbnRleHRNZW51RXZlbnQgOiBwdWJsaWMg UUV2ZW50CnsKcHVibGljOgogICAgZW51bSBSZWFzb24geyBNb3VzZSwgS2V5Ym9hcmQsIE90aGVy IH07CiAgICBRQ29udGV4dE1lbnVFdmVudCggUmVhc29uIHJlYXNvbiwgY29uc3QgUVBvaW50ICZw b3MsIGNvbnN0IFFQb2ludCAmZ2xvYmFsUG9zLCBpbnQgc3RhdGUgKQogICAgICAgIDogUUV2ZW50 KCBDb250ZXh0TWVudSApLCBwKCBwb3MgKSwgZ3AoIGdsb2JhbFBvcyApLCBhY2NwdCggRkFMU0Ug KSwgY29uc3VtKEZBTFNFKSwKICAgICAgICByZWFzKCByZWFzb24gKSwgcygodXNob3J0KXN0YXRl KSB7fQogICAgUUNvbnRleHRNZW51RXZlbnQoIFJlYXNvbiByZWFzb24sIGNvbnN0IFFQb2ludCAm cG9zLCBpbnQgc3RhdGUgKTsKCiAgICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJuIHAueCgpOyB9CiAg ICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIHAueSgpOyB9CiAgICBpbnQgZ2xvYmFsWCgpIGNvbnN0 IHsgcmV0dXJuIGdwLngoKTsgfQogICAgaW50IGdsb2JhbFkoKSBjb25zdCB7IHJldHVybiBncC55 KCk7IH0KCiAgICBjb25zdCBRUG9pbnQmIHBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNv bnN0IFFQb2ludCYgZ2xvYmFsUG9zKCkgY29uc3QgeyByZXR1cm4gZ3A7IH0KCiAgICBCdXR0b25T dGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIChCdXR0b25TdGF0ZSkgczsgfQogICAgYm9vbCBp c0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQ7IH0KICAgIGJvb2wgaXNDb25zdW1lZCgp IGNvbnN0IHsgcmV0dXJuIGNvbnN1bTsgfQogICAgdm9pZCBjb25zdW1lKCkgeyBjb25zdW0gPSBU UlVFOyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgYWNjcHQgPSBUUlVFOyBjb25zdW0gPSBUUlVFOyB9 CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQgPSBGQUxTRTsgY29uc3VtID0gRkFMU0U7IH0KCiAg ICBSZWFzb24gcmVhc29uKCkgY29uc3QgeyByZXR1cm4gUmVhc29uKCByZWFzICk7IH0KCnByb3Rl Y3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBvaW50IGdwOwogICAgYm9vbCBhY2NwdDsKICAgIGJv b2wgY29uc3VtOwogICAgdWludCByZWFzOjg7CiAgICB1c2hvcnQgczsKfTsKCgpjbGFzcyBRSU1F dmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRSU1FdmVudCggVHlwZSB0eXBlLCBj b25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgY3Vyc29yUG9zaXRpb24gKQogICAgICAgIDogUUV2ZW50 KHR5cGUpLCB0eHQodGV4dCksIGNwb3MoY3Vyc29yUG9zaXRpb24pLCBhKEZBTFNFKSB7fQogICAg Y29uc3QgUVN0cmluZyAmdGV4dCgpIGNvbnN0IHsgcmV0dXJuIHR4dDsgfQogICAgaW50IGN1cnNv clBvcygpIGNvbnN0IHsgcmV0dXJuIGNwb3M7IH0KICAgIGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0 IHsgcmV0dXJuIGE7IH0KICAgIHZvaWQgYWNjZXB0KCkgeyBhID0gVFJVRTsgfQogICAgdm9pZCBp Z25vcmUoKSB7IGEgPSBGQUxTRTsgfQpwcml2YXRlOgogICAgUVN0cmluZyB0eHQ7CiAgICBpbnQg Y3BvczsKICAgIGJvb2wgYTsKfTsKIyA0NDcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYv aW5jbHVkZS9xZXZlbnQuaCIKY2xhc3MgUURyb3BFdmVudCA6IHB1YmxpYyBRRXZlbnQsIHB1Ymxp YyBRTWltZVNvdXJjZQp7CnB1YmxpYzoKICAgIFFEcm9wRXZlbnQoIGNvbnN0IFFQb2ludCYgcG9z LCBUeXBlIHR5cD1Ecm9wICkKICAgICAgICA6IFFFdmVudCh0eXApLCBwKHBvcyksCiAgICAgICAg ICBhY3QoMCksIGFjY3B0KDApLCBhY2NwdGFjdCgwKSwgcmVzdigwKSwKICAgICAgICAgIGQoMCkK ICAgICAgICB7fQogICAgY29uc3QgUVBvaW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBwOyB9CiAg ICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdCB8fCBhY2NwdGFjdDsgfQog ICAgdm9pZCBhY2NlcHQoYm9vbCB5PVRSVUUpIHsgYWNjcHQgPSB5OyB9CiAgICB2b2lkIGlnbm9y ZSgpIHsgYWNjcHQgPSBGQUxTRTsgfQoKICAgIGJvb2wgaXNBY3Rpb25BY2NlcHRlZCgpIGNvbnN0 IHsgcmV0dXJuIGFjY3B0YWN0OyB9CiAgICB2b2lkIGFjY2VwdEFjdGlvbihib29sIHk9VFJVRSkg eyBhY2NwdGFjdCA9IHk7IH0KICAgIGVudW0gQWN0aW9uIHsgQ29weSwgTGluaywgTW92ZSwgUHJp dmF0ZSwgVXNlckFjdGlvbj0xMDAgfTsKICAgIHZvaWQgc2V0QWN0aW9uKCBBY3Rpb24gYSApIHsg YWN0ID0gKHVpbnQpYTsgfQogICAgQWN0aW9uIGFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIEFjdGlv bihhY3QpOyB9CgogICAgUVdpZGdldCogc291cmNlKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKiBm b3JtYXQoIGludCBuID0gMCApIGNvbnN0OwogICAgUUJ5dGVBcnJheSBlbmNvZGVkRGF0YSggY29u c3QgY2hhciogKSBjb25zdDsKICAgIGJvb2wgcHJvdmlkZXMoIGNvbnN0IGNoYXIqICkgY29uc3Q7 CgogICAgUUJ5dGVBcnJheSBkYXRhKGNvbnN0IGNoYXIqIGYpIGNvbnN0IHsgcmV0dXJuIGVuY29k ZWREYXRhKGYpOyB9CgogICAgdm9pZCBzZXRQb2ludCggY29uc3QgUVBvaW50JiBucCApIHsgcCA9 IG5wOyB9Cgpwcm90ZWN0ZWQ6CiAgICBRUG9pbnQgcDsKICAgIHVpbnQgYWN0Ojg7CiAgICB1aW50 IGFjY3B0OjE7CiAgICB1aW50IGFjY3B0YWN0OjE7CiAgICB1aW50IHJlc3Y6NTsKICAgIHZvaWQg KiBkOwp9OwoKCgpjbGFzcyBRRHJhZ01vdmVFdmVudCA6IHB1YmxpYyBRRHJvcEV2ZW50CnsKcHVi bGljOgogICAgUURyYWdNb3ZlRXZlbnQoIGNvbnN0IFFQb2ludCYgcG9zLCBUeXBlIHR5cD1EcmFn TW92ZSApCiAgICAgICAgOiBRRHJvcEV2ZW50KHBvcyx0eXApLAogICAgICAgICAgcmVjdCggcG9z LCBRU2l6ZSggMSwgMSApICkge30KICAgIFFSZWN0IGFuc3dlclJlY3QoKSBjb25zdCB7IHJldHVy biByZWN0OyB9CiAgICB2b2lkIGFjY2VwdCggYm9vbCB5PVRSVUUgKSB7IFFEcm9wRXZlbnQ6OmFj Y2VwdCh5KTsgfQogICAgdm9pZCBhY2NlcHQoIGNvbnN0IFFSZWN0ICYgcikgeyBhY2NwdCA9IFRS VUU7IHJlY3QgPSByOyB9CiAgICB2b2lkIGlnbm9yZSggY29uc3QgUVJlY3QgJiByKSB7IGFjY3B0 ID1GQUxTRTsgcmVjdCA9IHI7IH0KICAgIHZvaWQgaWdub3JlKCkgeyBRRHJvcEV2ZW50OjppZ25v cmUoKTsgfQoKcHJvdGVjdGVkOgogICAgUVJlY3QgcmVjdDsKfTsKCgpjbGFzcyBRRHJhZ0VudGVy RXZlbnQgOiBwdWJsaWMgUURyYWdNb3ZlRXZlbnQKewpwdWJsaWM6CiAgICBRRHJhZ0VudGVyRXZl bnQoIGNvbnN0IFFQb2ludCYgcG9zICkgOgogICAgICAgIFFEcmFnTW92ZUV2ZW50KHBvcywgRHJh Z0VudGVyKSB7IH0KfTsKCgoKY2xhc3MgUURyYWdSZXNwb25zZUV2ZW50IDogcHVibGljIFFFdmVu dAp7CnB1YmxpYzoKICAgIFFEcmFnUmVzcG9uc2VFdmVudCggYm9vbCBhY2NlcHRlZCApCiAgICAg ICAgOiBRRXZlbnQoRHJhZ1Jlc3BvbnNlKSwgYShhY2NlcHRlZCkge30KICAgIGJvb2wgZHJhZ0Fj Y2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYTsgfQpwcm90ZWN0ZWQ6CiAgICBib29sIGE7Cn07CgoK Y2xhc3MgUURyYWdMZWF2ZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFEcmFn TGVhdmVFdmVudCgpCiAgICAgICAgOiBRRXZlbnQoRHJhZ0xlYXZlKSB7fQp9OwoKCgpjbGFzcyBR Q2hpbGRFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRQ2hpbGRFdmVudCggVHlw ZSB0eXBlLCBRT2JqZWN0ICpjaGlsZCApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIGMoY2hpbGQp IHt9CiAgICBRT2JqZWN0ICpjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIGM7IH0KICAgIGJvb2wgaW5z ZXJ0ZWQoKSBjb25zdCB7IHJldHVybiB0ID09IENoaWxkSW5zZXJ0ZWQ7IH0KICAgIGJvb2wgcmVt b3ZlZCgpIGNvbnN0IHsgcmV0dXJuIHQgPT0gQ2hpbGRSZW1vdmVkOyB9CnByb3RlY3RlZDoKICAg IFFPYmplY3QgKmM7Cn07CgoKY2xhc3MgUUN1c3RvbUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1 YmxpYzoKICAgIFFDdXN0b21FdmVudCggaW50IHR5cGUgKTsKICAgIFFDdXN0b21FdmVudCggVHlw ZSB0eXBlLCB2b2lkICpkYXRhICkKICAgICAgICA6IFFFdmVudCh0eXBlKSwgZChkYXRhKSB7fTsK ICAgIHZvaWQgKmRhdGEoKSBjb25zdCB7IHJldHVybiBkOyB9CiAgICB2b2lkIHNldERhdGEoIHZv aWQqIGRhdGEgKSB7IGQgPSBkYXRhOyB9CnByaXZhdGU6CiAgICB2b2lkICpkOwp9OwojIDQ2ICIv dXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcW9iamVjdC5oIiAyCgoKCgoKCmNs YXNzIFFNZXRhT2JqZWN0OwpjbGFzcyBRVmFyaWFudDsKY2xhc3MgUU1ldGFQcm9wZXJ0eTsKY2xh c3MgUVBvc3RFdmVudExpc3Q7CmNsYXNzIFFPYmplY3RQcml2YXRlOwpzdHJ1Y3QgUVVPYmplY3Q7 CgpjbGFzcyBRT2JqZWN0OiBwdWJsaWMgUXQKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2Jq ZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZp cnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2Fz dCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCog KTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBx dF9wcm9wZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0 YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0 aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg KTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg KTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwogICAKCnB1YmxpYzoKICAg IFFPYmplY3QoIFFPYmplY3QgKnBhcmVudD0wLCBjb25zdCBjaGFyICpuYW1lPTAgKTsKICAgIHZp cnR1YWwgflFPYmplY3QoKTsKIyA3NSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNs dWRlL3FvYmplY3QuaCIKICAgIHZpcnR1YWwgYm9vbCBldmVudCggUUV2ZW50ICogKTsKICAgIHZp cnR1YWwgYm9vbCBldmVudEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQgKiApOwoKICAgIGJvb2wg aXNBKCBjb25zdCBjaGFyICogKSBjb25zdDsKICAgIGJvb2wgaW5oZXJpdHMoIGNvbnN0IGNoYXIg KiApIGNvbnN0OwoKICAgIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIg Km5hbWUoIGNvbnN0IGNoYXIgKiBkZWZhdWx0TmFtZSApIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9p ZCBzZXROYW1lKCBjb25zdCBjaGFyICpuYW1lICk7CiAgICBib29sIGlzV2lkZ2V0VHlwZSgpIGNv bnN0IHsgcmV0dXJuIGlzV2lkZ2V0OyB9CiAgICBib29sIGhpZ2hQcmlvcml0eSgpIGNvbnN0IHsg cmV0dXJuIEZBTFNFOyB9CgogICAgYm9vbCBzaWduYWxzQmxvY2tlZCgpIGNvbnN0IHsgcmV0dXJu IGJsb2NrU2lnOyB9CiAgICB2b2lkIGJsb2NrU2lnbmFscyggYm9vbCBiICk7CgogICAgaW50IHN0 YXJ0VGltZXIoIGludCBpbnRlcnZhbCApOwogICAgdm9pZCBraWxsVGltZXIoIGludCBpZCApOwog ICAgdm9pZCBraWxsVGltZXJzKCk7CgogICAgUU9iamVjdCAqY2hpbGQoIGNvbnN0IGNoYXIgKm9i ak5hbWUsIGNvbnN0IGNoYXIgKmluaGVyaXRzQ2xhc3MgPSAwLCBib29sIHJlY3Vyc2l2ZVNlYXJj aCA9IFRSVUUgKTsKICAgIGNvbnN0IFFPYmplY3RMaXN0ICpjaGlsZHJlbigpIGNvbnN0IHsgcmV0 dXJuIGNoaWxkT2JqZWN0czsgfQoKICAgIHN0YXRpYyBjb25zdCBRT2JqZWN0TGlzdCAqb2JqZWN0 VHJlZXMoKTsKCiAgICBRT2JqZWN0TGlzdCAqcXVlcnlMaXN0KCBjb25zdCBjaGFyICppbmhlcml0 c0NsYXNzID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg Km9iak5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWdl eHBNYXRjaCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJl Y3Vyc2l2ZVNlYXJjaCA9IFRSVUUgKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hp bGQoIFFPYmplY3QgKiApOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKCBRT2JqZWN0ICog KTsKCiAgICB2b2lkIGluc3RhbGxFdmVudEZpbHRlciggY29uc3QgUU9iamVjdCAqICk7CiAgICB2 b2lkIHJlbW92ZUV2ZW50RmlsdGVyKCBjb25zdCBRT2JqZWN0ICogKTsKCiAgICBzdGF0aWMgYm9v bCBjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hh ciAqbWVtYmVyICk7CiAgICBib29sIGNvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29u c3QgY2hhciAqc2lnbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1l bWJlciApIGNvbnN0OwogICAgc3RhdGljIGJvb2wgZGlzY29ubmVjdCggY29uc3QgUU9iamVjdCAq c2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlciApOwogICAgYm9vbCBk aXNjb25uZWN0KCBjb25zdCBjaGFyICpzaWduYWw9MCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlcj0wLCBjb25zdCBjaGFyICptZW1iZXI9MCApOwog ICAgYm9vbCBkaXNjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAq bWVtYmVyPTAgKTsKICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RJbnRlcm5hbCggY29uc3QgUU9iamVj dCAqc2VuZGVyLCBpbnQgc2lnbmFsX2luZGV4LCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZW1iY29kZSwgaW50IG1lbWJlcl9p bmRleCApOwoKICAgIHZvaWQgZHVtcE9iamVjdFRyZWUoKTsKICAgIHZvaWQgZHVtcE9iamVjdElu Zm8oKTsKCgogICAgdmlydHVhbCBib29sIHNldFByb3BlcnR5KCBjb25zdCBjaGFyICpuYW1lLCBj b25zdCBRVmFyaWFudCYgdmFsdWUgKTsKICAgIHZpcnR1YWwgUVZhcmlhbnQgcHJvcGVydHkoIGNv bnN0IGNoYXIgKm5hbWUgKSBjb25zdDsKIyAxMzcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4w LjYvaW5jbHVkZS9xb2JqZWN0LmgiCnByb3RlY3RlZDoKICAgIHZvaWQgZGVzdHJveWVkKCk7CiAg ICB2b2lkIGRlc3Ryb3llZCggUU9iamVjdCogb2JqICk7CgpwdWJsaWM6CiAgICBRT2JqZWN0ICpw YXJlbnQoKSBjb25zdCB7IHJldHVybiBwYXJlbnRPYmo7IH0KCnB1YmxpYyA6CiAgICB2b2lkIGRl bGV0ZUxhdGVyKCk7Cgpwcml2YXRlIDoKICAgIHZvaWQgY2xlYW51cEV2ZW50RmlsdGVyKCBRT2Jq ZWN0KiApOwoKcHJvdGVjdGVkOgogICAgYm9vbCBhY3RpdmF0ZV9maWx0ZXJzKCBRRXZlbnQgKiAp OwogICAgUUNvbm5lY3Rpb25MaXN0ICpyZWNlaXZlcnMoIGNvbnN0IGNoYXIqIHNpZ25hbCApIGNv bnN0OwogICAgUUNvbm5lY3Rpb25MaXN0ICpyZWNlaXZlcnMoIGludCBzaWduYWwgKSBjb25zdDsK ICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsKCBpbnQgc2lnbmFsICk7CiAgICB2b2lkIGFjdGl2YXRl X3NpZ25hbCggaW50IHNpZ25hbCwgaW50ICk7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbCggaW50 IHNpZ25hbCwgZG91YmxlICk7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbCggaW50IHNpZ25hbCwg UVN0cmluZyApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWxfYm9vbCggaW50IHNpZ25hbCwgYm9v bCApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIFFDb25uZWN0aW9uTGlzdCAqY2xpc3QsIFFV T2JqZWN0ICpvICk7CgogICAgY29uc3QgUU9iamVjdCAqc2VuZGVyKCk7CgogICAgdmlydHVhbCB2 b2lkIHRpbWVyRXZlbnQoIFFUaW1lckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBjaGlsZEV2 ZW50KCBRQ2hpbGRFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgY3VzdG9tRXZlbnQoIFFDdXN0 b21FdmVudCAqICk7CgogICAgdmlydHVhbCB2b2lkIGNvbm5lY3ROb3RpZnkoIGNvbnN0IGNoYXIg KnNpZ25hbCApOwogICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3ROb3RpZnkoIGNvbnN0IGNoYXIg KnNpZ25hbCApOwogICAgdmlydHVhbCBib29sIGNoZWNrQ29ubmVjdEFyZ3MoIGNvbnN0IGNoYXIg KnNpZ25hbCwgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqbWVtYmVyICk7CiAgICBzdGF0aWMgUUNTdHJpbmcgbm9y bWFsaXplU2lnbmFsU2xvdCggY29uc3QgY2hhciAqc2lnbmFsU2xvdCApOwoKcHJpdmF0ZToKICAg IHVpbnQgaXNTaWduYWwgOiAxOwogICAgdWludCBpc1dpZGdldCA6IDE7CiAgICB1aW50IHBlbmRU aW1lciA6IDE7CiAgICB1aW50IGJsb2NrU2lnIDogMTsKICAgIHVpbnQgd2FzRGVsZXRlZCA6IDE7 CiAgICB1aW50IGlzVHJlZSA6IDE7CgogICAgY29uc3QgY2hhciAqb2JqbmFtZTsKICAgIFFPYmpl Y3QgKnBhcmVudE9iajsKICAgIFFPYmplY3RMaXN0ICpjaGlsZE9iamVjdHM7CiAgICBRU2lnbmFs VmVjICpjb25uZWN0aW9uczsKICAgIFFPYmplY3RMaXN0ICpzZW5kZXJPYmplY3RzOwogICAgUU9i amVjdExpc3QgKmV2ZW50RmlsdGVyczsKICAgIFFQb3N0RXZlbnRMaXN0ICpwb3N0ZWRFdmVudHM7 CiAgICBRT2JqZWN0UHJpdmF0ZSogZDsKCiAgICBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY1F0 TWV0YU9iamVjdCgpOwoKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQg Y2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRV2lkZ2V0OwogICAgZnJp ZW5kIGNsYXNzIFFTaWduYWw7CiAgICBmcmllbmQgY2xhc3MgUVNlbmRlck9iamVjdDsKCnByaXZh dGU6CgogICAgUU9iamVjdCggY29uc3QgUU9iamVjdCAmICk7CiAgICBRT2JqZWN0ICZvcGVyYXRv cj0oIGNvbnN0IFFPYmplY3QgJiApOwoKfTsKCgppbmxpbmUgYm9vbCBRT2JqZWN0Ojpjb25uZWN0 KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWVtYmVyICkgY29uc3QKewogICAgcmV0dXJu IGNvbm5lY3QoIHNlbmRlciwgc2lnbmFsLCB0aGlzLCBtZW1iZXIgKTsKfQoKCmlubGluZSBib29s IFFPYmplY3Q6OmRpc2Nvbm5lY3QoIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1l bWJlciApCnsKICAgIHJldHVybiBkaXNjb25uZWN0KCB0aGlzLCBzaWduYWwsIHJlY2VpdmVyLCBt ZW1iZXIgKTsKfQoKCmlubGluZSBib29sIFFPYmplY3Q6OmRpc2Nvbm5lY3QoIGNvbnN0IFFPYmpl Y3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKQp7CiAgICByZXR1cm4gZGlzY29ubmVj dCggdGhpcywgMCwgcmVjZWl2ZXIsIG1lbWJlciApOwp9CgoKY2xhc3MgUVNlbmRlck9iamVjdCA6 IHB1YmxpYyBRT2JqZWN0CnsKcHVibGljOgogICAgdm9pZCBzZXRTZW5kZXIoIFFPYmplY3QgKnMg KTsKfTsKIyA0NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F3aWRnZXQu aCIgMgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcGFpbnRkZXZp Y2UuaCIgMQojIDUxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXBhaW50 ZGV2aWNlLmgiCmNsYXNzIFFJT0RldmljZTsKY2xhc3MgUVN0cmluZzsKCgoKc3RydWN0IFFQYWlu dERldmljZVgxMURhdGE7CgoKdW5pb24gUVBEZXZDbWRQYXJhbSB7CiAgICBpbnQgaXZhbDsKICAg IGludCAqaXZlYzsKICAgIFFTdHJpbmcgKnN0cjsKICAgIGNvbnN0IFFQb2ludCAqcG9pbnQ7CiAg ICBjb25zdCBRUmVjdCAqcmVjdDsKICAgIGNvbnN0IFFQb2ludEFycmF5ICpwdGFycjsKICAgIGNv bnN0IFFQaXhtYXAgKnBpeG1hcDsKICAgIGNvbnN0IFFJbWFnZSAqaW1hZ2U7CiAgICBjb25zdCBR Q29sb3IgKmNvbG9yOwogICAgY29uc3QgUUZvbnQgKmZvbnQ7CiAgICBjb25zdCBRUGVuICpwZW47 CiAgICBjb25zdCBRQnJ1c2ggKmJydXNoOwogICAgY29uc3QgUVJlZ2lvbiAqcmduOwogICAgY29u c3QgUVdNYXRyaXggKm1hdHJpeDsKICAgIFFJT0RldmljZSAqZGV2aWNlOwp9OwoKCgpjbGFzcyBR UGFpbnREZXZpY2UKewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5RUGFpbnREZXZpY2UoKTsKCiAgICBp bnQgZGV2VHlwZSgpIGNvbnN0OwogICAgYm9vbCBpc0V4dERldigpIGNvbnN0OwogICAgYm9vbCBw YWludGluZ0FjdGl2ZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNvbHV0aW9uKCBp bnQgKTsKICAgIHZpcnR1YWwgaW50IHJlc29sdXRpb24oKSBjb25zdDsKCgoKCgoKICAgIHZpcnR1 YWwgUXQ6OkhBTkRMRSBoYW5kbGUoKSBjb25zdDsKICAgIHZpcnR1YWwgUXQ6OkhBTkRMRSB4MTFS ZW5kZXJIYW5kbGUoKSBjb25zdDsKCgoKCgoKCiAgICBEaXNwbGF5ICp4MTFEaXNwbGF5KCkgY29u c3Q7CiAgICBpbnQgeDExU2NyZWVuKCkgY29uc3Q7CiAgICBpbnQgeDExRGVwdGgoKSBjb25zdDsK ICAgIGludCB4MTFDZWxscygpIGNvbnN0OwogICAgUXQ6OkhBTkRMRSB4MTFDb2xvcm1hcCgpIGNv bnN0OwogICAgYm9vbCB4MTFEZWZhdWx0Q29sb3JtYXAoKSBjb25zdDsKICAgIHZvaWQgKngxMVZp c3VhbCgpIGNvbnN0OwogICAgYm9vbCB4MTFEZWZhdWx0VmlzdWFsKCkgY29uc3Q7CgogICAgc3Rh dGljIERpc3BsYXkgKngxMUFwcERpc3BsYXkoKTsKICAgIHN0YXRpYyBpbnQgeDExQXBwU2NyZWVu KCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcERlcHRoKCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcENl bGxzKCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcERwaVgoKTsKICAgIHN0YXRpYyBpbnQgeDExQXBw RHBpWSgpOwogICAgc3RhdGljIFF0OjpIQU5ETEUgeDExQXBwQ29sb3JtYXAoKTsKICAgIHN0YXRp YyBib29sIHgxMUFwcERlZmF1bHRDb2xvcm1hcCgpOwogICAgc3RhdGljIHZvaWQgKngxMUFwcFZp c3VhbCgpOwogICAgc3RhdGljIGJvb2wgeDExQXBwRGVmYXVsdFZpc3VhbCgpOwogICAgc3RhdGlj IHZvaWQgeDExU2V0QXBwRHBpWChpbnQpOwogICAgc3RhdGljIHZvaWQgeDExU2V0QXBwRHBpWShp bnQpOwojIDEzNSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FwYWludGRl dmljZS5oIgogICAgZW51bSBQRGV2Q21kIHsKICAgICAgICBQZGNOT1AgPSAwLAogICAgICAgIFBk Y0RyYXdQb2ludCA9IDEsCiAgICAgICAgUGRjRHJhd0ZpcnN0ID0gUGRjRHJhd1BvaW50LAogICAg ICAgIFBkY01vdmVUbyA9IDIsCiAgICAgICAgUGRjTGluZVRvID0gMywKICAgICAgICBQZGNEcmF3 TGluZSA9IDQsCiAgICAgICAgUGRjRHJhd1JlY3QgPSA1LAogICAgICAgIFBkY0RyYXdSb3VuZFJl Y3QgPSA2LAogICAgICAgIFBkY0RyYXdFbGxpcHNlID0gNywKICAgICAgICBQZGNEcmF3QXJjID0g OCwKICAgICAgICBQZGNEcmF3UGllID0gOSwKICAgICAgICBQZGNEcmF3Q2hvcmQgPSAxMCwKICAg ICAgICBQZGNEcmF3TGluZVNlZ21lbnRzID0gMTEsCiAgICAgICAgUGRjRHJhd1BvbHlsaW5lID0g MTIsCiAgICAgICAgUGRjRHJhd1BvbHlnb24gPSAxMywKICAgICAgICBQZGNEcmF3Q3ViaWNCZXpp ZXIgPSAxNCwKICAgICAgICBQZGNEcmF3VGV4dCA9IDE1LAogICAgICAgIFBkY0RyYXdUZXh0Rm9y bWF0dGVkID0gMTYsCiAgICAgICAgUGRjRHJhd1BpeG1hcCA9IDE3LAogICAgICAgIFBkY0RyYXdJ bWFnZSA9IDE4LAogICAgICAgIFBkY0RyYXdUZXh0MiA9IDE5LAogICAgICAgIFBkY0RyYXdUZXh0 MkZvcm1hdHRlZCA9IDIwLAogICAgICAgIFBkY0RyYXdMYXN0ID0gUGRjRHJhd1RleHQyRm9ybWF0 dGVkLAoKCgogICAgICAgIFBkY0JlZ2luID0gMzAsCiAgICAgICAgUGRjRW5kID0gMzEsCiAgICAg ICAgUGRjU2F2ZSA9IDMyLAogICAgICAgIFBkY1Jlc3RvcmUgPSAzMywKICAgICAgICBQZGNTZXRk ZXYgPSAzNCwKICAgICAgICBQZGNTZXRCa0NvbG9yID0gNDAsCiAgICAgICAgUGRjU2V0QmtNb2Rl ID0gNDEsCiAgICAgICAgUGRjU2V0Uk9QID0gNDIsCiAgICAgICAgUGRjU2V0QnJ1c2hPcmlnaW4g PSA0MywKICAgICAgICBQZGNTZXRGb250ID0gNDUsCiAgICAgICAgUGRjU2V0UGVuID0gNDYsCiAg ICAgICAgUGRjU2V0QnJ1c2ggPSA0NywKICAgICAgICBQZGNTZXRUYWJTdG9wcyA9IDQ4LAogICAg ICAgIFBkY1NldFRhYkFycmF5ID0gNDksCiAgICAgICAgUGRjU2V0VW5pdCA9IDUwLAogICAgICAg IFBkY1NldFZYZm9ybSA9IDUxLAogICAgICAgIFBkY1NldFdpbmRvdyA9IDUyLAogICAgICAgIFBk Y1NldFZpZXdwb3J0ID0gNTMsCiAgICAgICAgUGRjU2V0V1hmb3JtID0gNTQsCiAgICAgICAgUGRj U2V0V01hdHJpeCA9IDU1LAogICAgICAgIFBkY1NhdmVXTWF0cml4ID0gNTYsCiAgICAgICAgUGRj UmVzdG9yZVdNYXRyaXggPSA1NywKICAgICAgICBQZGNTZXRDbGlwID0gNjAsCiAgICAgICAgUGRj U2V0Q2xpcFJlZ2lvbiA9IDYxLAoKICAgICAgICBQZGNSZXNlcnZlZFN0YXJ0ID0gMCwKICAgICAg ICBQZGNSZXNlcnZlZFN0b3AgPSAxOTkKICAgIH07Cgpwcm90ZWN0ZWQ6CiAgICBRUGFpbnREZXZp Y2UoIHVpbnQgZGV2ZmxhZ3MgKTsKCgoKCiAgICBRdDo6SEFORExFIGhkOwogICAgUXQ6OkhBTkRM RSByZW5kaGQ7CgogICAgdm9pZCBjb3B5WDExRGF0YSggY29uc3QgUVBhaW50RGV2aWNlICogKTsK ICAgIHZvaWQgY2xvbmVYMTFEYXRhKCBjb25zdCBRUGFpbnREZXZpY2UgKiApOwogICAgdmlydHVh bCB2b2lkIHNldFgxMURhdGEoIGNvbnN0IFFQYWludERldmljZVgxMURhdGEqICk7CiAgICBRUGFp bnREZXZpY2VYMTFEYXRhKiBnZXRYMTFEYXRhKCBib29sIGRlZj1GQUxTRSApIGNvbnN0OwojIDIx MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FwYWludGRldmljZS5oIgog ICAgdmlydHVhbCBib29sIGNtZCggaW50LCBRUGFpbnRlciAqLCBRUERldkNtZFBhcmFtICogKTsK ICAgIHZpcnR1YWwgaW50IG1ldHJpYyggaW50ICkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBmb250 TWV0KCBRRm9udCAqLCBpbnQsIGNvbnN0IGNoYXIgKiA9IDAsIGludCA9IDAgKSBjb25zdDsKICAg IHZpcnR1YWwgaW50IGZvbnRJbmYoIFFGb250ICosIGludCApIGNvbnN0OwoKICAgIHVzaG9ydCBk ZXZGbGFnczsKICAgIHVzaG9ydCBwYWludGVyczsKCiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7 CiAgICBmcmllbmQgY2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsKCgoKCgoKCiAgICBmcmllbmQg dm9pZCBiaXRCbHQoIFFQYWludERldmljZSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUVBhaW50RGV2aWNlICosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGludCwgUXQ6OlJhc3Rlck9wLCBib29sICk7CgoK ICAgIGZyaWVuZCB2b2lkIHF0X2luaXRfaW50ZXJuYWwoIGludCAqLCBjaGFyICoqLCBEaXNwbGF5 ICosIFF0OjpIQU5ETEUsIFF0OjpIQU5ETEUgKTsKCgpwcml2YXRlOgoKICAgIHN0YXRpYyBEaXNw bGF5ICp4X2FwcGRpc3BsYXk7CiAgICBzdGF0aWMgaW50IHhfYXBwc2NyZWVuOwogICAgc3RhdGlj IGludCB4X2FwcGRlcHRoOwogICAgc3RhdGljIGludCB4X2FwcGNlbGxzOwogICAgc3RhdGljIFF0 OjpIQU5ETEUgeF9hcHBjb2xvcm1hcDsKICAgIHN0YXRpYyBib29sIHhfYXBwZGVmY29sb3JtYXA7 CiAgICBzdGF0aWMgdm9pZCAqeF9hcHB2aXN1YWw7CiAgICBzdGF0aWMgYm9vbCB4X2FwcGRlZnZp c3VhbDsKCiAgICBRUGFpbnREZXZpY2VYMTFEYXRhKiB4MTFEYXRhOwoKCnByaXZhdGU6CgogICAg UVBhaW50RGV2aWNlKCBjb25zdCBRUGFpbnREZXZpY2UgJiApOwogICAgUVBhaW50RGV2aWNlICZv cGVyYXRvcj0oIGNvbnN0IFFQYWludERldmljZSAmICk7Cgp9OwoKCgp2b2lkIGJpdEJsdCggUVBh aW50RGV2aWNlICpkc3QsIGludCBkeCwgaW50IGR5LAogICAgICAgICAgICAgY29uc3QgUVBhaW50 RGV2aWNlICpzcmMsIGludCBzeD0wLCBpbnQgc3k9MCwgaW50IHN3PS0xLCBpbnQgc2g9LTEsCiAg ICAgICAgICAgICBRdDo6UmFzdGVyT3AgPSBRdDo6Q29weVJPUCwgYm9vbCBpZ25vcmVNYXNrPUZB TFNFICk7CgoKdm9pZCBiaXRCbHQoIFFQYWludERldmljZSAqZHN0LCBpbnQgZHgsIGludCBkeSwK ICAgICAgICAgICAgIGNvbnN0IFFJbWFnZSAqc3JjLCBpbnQgc3g9MCwgaW50IHN5PTAsIGludCBz dz0tMSwgaW50IHNoPS0xLAogICAgICAgICAgICAgaW50IGNvbnZlcnNpb25fZmxhZ3M9MCApOwoK CgoKc3RydWN0IFFQYWludERldmljZVgxMURhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICBEaXNw bGF5KiB4X2Rpc3BsYXk7CiAgICBpbnQgeF9zY3JlZW47CiAgICBpbnQgeF9kZXB0aDsKICAgIGlu dCB4X2NlbGxzOwogICAgUXQ6OkhBTkRMRSB4X2NvbG9ybWFwOwogICAgYm9vbCB4X2RlZmNvbG9y bWFwOwogICAgdm9pZCogeF92aXN1YWw7CiAgICBib29sIHhfZGVmdmlzdWFsOwp9OwoKCgoKCgoK aW5saW5lIGludCBRUGFpbnREZXZpY2U6OmRldlR5cGUoKSBjb25zdAp7IHJldHVybiBkZXZGbGFn cyAmIFFJbnRlcm5hbDo6RGV2aWNlVHlwZU1hc2s7IH0KCmlubGluZSBib29sIFFQYWludERldmlj ZTo6aXNFeHREZXYoKSBjb25zdAp7IHJldHVybiAoZGV2RmxhZ3MgJiBRSW50ZXJuYWw6OkV4dGVy bmFsRGV2aWNlKSAhPSAwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OnBhaW50aW5nQWN0 aXZlKCkgY29uc3QKeyByZXR1cm4gcGFpbnRlcnMgIT0gMDsgfQoKCmlubGluZSBEaXNwbGF5ICpR UGFpbnREZXZpY2U6OngxMURpc3BsYXkoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0 YS0+eF9kaXNwbGF5IDogeF9hcHBkaXNwbGF5OyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6 eDExU2NyZWVuKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfc2NyZWVuIDog eF9hcHBzY3JlZW47IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFEZXB0aCgpIGNvbnN0 CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2RlcHRoIDogeF9hcHBkZXB0aDsgfQoKaW5s aW5lIGludCBRUGFpbnREZXZpY2U6OngxMUNlbGxzKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/ IHgxMURhdGEtPnhfY2VsbHMgOiB4X2FwcGNlbGxzOyB9CgppbmxpbmUgUXQ6OkhBTkRMRSBRUGFp bnREZXZpY2U6OngxMUNvbG9ybWFwKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEt PnhfY29sb3JtYXAgOiB4X2FwcGNvbG9ybWFwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6 OngxMURlZmF1bHRDb2xvcm1hcCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54 X2RlZmNvbG9ybWFwIDogeF9hcHBkZWZjb2xvcm1hcDsgfQoKaW5saW5lIHZvaWQgKlFQYWludERl dmljZTo6eDExVmlzdWFsKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfdmlz dWFsIDogeF9hcHB2aXN1YWw7IH0KCmlubGluZSBib29sIFFQYWludERldmljZTo6eDExRGVmYXVs dFZpc3VhbCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2RlZnZpc3VhbCA6 IHhfYXBwZGVmdmlzdWFsOyB9CgppbmxpbmUgRGlzcGxheSAqUVBhaW50RGV2aWNlOjp4MTFBcHBE aXNwbGF5KCkKeyByZXR1cm4geF9hcHBkaXNwbGF5OyB9CgppbmxpbmUgaW50IFFQYWludERldmlj ZTo6eDExQXBwU2NyZWVuKCkKeyByZXR1cm4geF9hcHBzY3JlZW47IH0KCmlubGluZSBpbnQgUVBh aW50RGV2aWNlOjp4MTFBcHBEZXB0aCgpCnsgcmV0dXJuIHhfYXBwZGVwdGg7IH0KCmlubGluZSBp bnQgUVBhaW50RGV2aWNlOjp4MTFBcHBDZWxscygpCnsgcmV0dXJuIHhfYXBwY2VsbHM7IH0KCmlu bGluZSBRdDo6SEFORExFIFFQYWludERldmljZTo6eDExQXBwQ29sb3JtYXAoKQp7IHJldHVybiB4 X2FwcGNvbG9ybWFwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OngxMUFwcERlZmF1bHRD b2xvcm1hcCgpCnsgcmV0dXJuIHhfYXBwZGVmY29sb3JtYXA7IH0KCmlubGluZSB2b2lkICpRUGFp bnREZXZpY2U6OngxMUFwcFZpc3VhbCgpCnsgcmV0dXJuIHhfYXBwdmlzdWFsOyB9CgppbmxpbmUg Ym9vbCBRUGFpbnREZXZpY2U6OngxMUFwcERlZmF1bHRWaXN1YWwoKQp7IHJldHVybiB4X2FwcGRl ZnZpc3VhbDsgfQoKCgoKCmlubGluZSB2b2lkIGJpdEJsdCggUVBhaW50RGV2aWNlICpkc3QsIGNv bnN0IFFQb2ludCAmZHAsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBhaW50RGV2aWNlICpz cmMsIGNvbnN0IFFSZWN0ICZzciA9UVJlY3QoMCwwLC0xLC0xKSwKICAgICAgICAgICAgICAgICAg ICBRdDo6UmFzdGVyT3Agcm9wPVF0OjpDb3B5Uk9QLCBib29sIGlnbm9yZU1hc2s9RkFMU0UgKQp7 CiAgICBiaXRCbHQoIGRzdCwgZHAueCgpLCBkcC55KCksIHNyYywgc3IueCgpLCBzci55KCksIHNy LndpZHRoKCksIHNyLmhlaWdodCgpLAogICAgICAgICAgICByb3AsIGlnbm9yZU1hc2sgKTsKfQoj IDQ1ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpZGdldC5oIiAyCiMg MSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FwYWxldHRlLmgiIDEKIyA0 MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FwYWxldHRlLmgiCiMgMSAi L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fjb2xvci5oIiAxCiMgNDUgIi91 c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xY29sb3IuaCIKY29uc3QgUVJnYiBS R0JfTUFTSyA9IDB4MDBmZmZmZmY7CgogaW5saW5lIGludCBxUmVkKCBRUmdiIHJnYiApCnsgcmV0 dXJuIChpbnQpKChyZ2IgPj4gMTYpICYgMHhmZik7IH0KCiBpbmxpbmUgaW50IHFHcmVlbiggUVJn YiByZ2IgKQp7IHJldHVybiAoaW50KSgocmdiID4+IDgpICYgMHhmZik7IH0KCiBpbmxpbmUgaW50 IHFCbHVlKCBRUmdiIHJnYiApCnsgcmV0dXJuIChpbnQpKHJnYiAmIDB4ZmYpOyB9CgogaW5saW5l IGludCBxQWxwaGEoIFFSZ2IgcmdiICkKeyByZXR1cm4gKGludCkoKHJnYiA+PiAyNCkgJiAweGZm KTsgfQoKIGlubGluZSBRUmdiIHFSZ2IoIGludCByLCBpbnQgZywgaW50IGIgKQp7IHJldHVybiAo MHhmZiA8PCAyNCkgfCAoKHIgJiAweGZmKSA8PCAxNikgfCAoKGcgJiAweGZmKSA8PCA4KSB8IChi ICYgMHhmZik7IH0KCiBpbmxpbmUgUVJnYiBxUmdiYSggaW50IHIsIGludCBnLCBpbnQgYiwgaW50 IGEgKQp7IHJldHVybiAoKGEgJiAweGZmKSA8PCAyNCkgfCAoKHIgJiAweGZmKSA8PCAxNikgfCAo KGcgJiAweGZmKSA8PCA4KSB8IChiICYgMHhmZik7IH0KCiBpbmxpbmUgaW50IHFHcmF5KCBpbnQg ciwgaW50IGcsIGludCBiICkKeyByZXR1cm4gKHIqMTErZyoxNitiKjUpLzMyOyB9CgogaW5saW5l IGludCBxR3JheSggUVJnYiByZ2IgKQp7IHJldHVybiBxR3JheSggcVJlZChyZ2IpLCBxR3JlZW4o cmdiKSwgcUJsdWUocmdiKSApOyB9CgoKY2xhc3MgUUNvbG9yCnsKcHVibGljOgogICAgZW51bSBT cGVjIHsgUmdiLCBIc3YgfTsKCiAgICBRQ29sb3IoKTsKICAgIFFDb2xvciggaW50IHIsIGludCBn LCBpbnQgYiApOwogICAgUUNvbG9yKCBpbnQgeCwgaW50IHksIGludCB6LCBTcGVjICk7CiAgICBR Q29sb3IoIFFSZ2IgcmdiLCB1aW50IHBpeGVsPTB4ZmZmZmZmZmYpOwogICAgUUNvbG9yKCBjb25z dCBRU3RyaW5nJiBuYW1lICk7CiAgICBRQ29sb3IoIGNvbnN0IGNoYXIgKm5hbWUgKTsKICAgIFFD b2xvciggY29uc3QgUUNvbG9yICYgKTsKICAgIFFDb2xvciAmb3BlcmF0b3I9KCBjb25zdCBRQ29s b3IgJiApOwoKICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgYm9vbCBpc0RpcnR5KCkgY29u c3Q7CgogICAgUVN0cmluZyBuYW1lKCkgY29uc3Q7CgogICAgdm9pZCBzZXROYW1lZENvbG9yKCBj b25zdCBRU3RyaW5nJiBuYW1lICk7CgogICAgdm9pZCByZ2IoIGludCAqciwgaW50ICpnLCBpbnQg KmIgKSBjb25zdDsKICAgIFFSZ2IgcmdiKCkgY29uc3Q7CiAgICB2b2lkIHNldFJnYiggaW50IHIs IGludCBnLCBpbnQgYiApOwogICAgdm9pZCBzZXRSZ2IoIFFSZ2IgcmdiICk7CgogICAgaW50IHJl ZCgpIGNvbnN0OwogICAgaW50IGdyZWVuKCkgY29uc3Q7CiAgICBpbnQgYmx1ZSgpIGNvbnN0OwoK ICAgIHZvaWQgaHN2KCBpbnQgKmgsIGludCAqcywgaW50ICp2ICkgY29uc3Q7CiAgICB2b2lkIGdl dEhzdiggaW50ICZoLCBpbnQgJnMsIGludCAmdiApIGNvbnN0IHsgaHN2KCAmaCwgJnMsICZ2ICk7 IH0KICAgIHZvaWQgc2V0SHN2KCBpbnQgaCwgaW50IHMsIGludCB2ICk7CgogICAgUUNvbG9yIGxp Z2h0KCBpbnQgZiA9IDE1MCApIGNvbnN0OwogICAgUUNvbG9yIGRhcmsoIGludCBmID0gMjAwICkg Y29uc3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdDsKICAg IGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUNvbG9yICZjICkgY29uc3Q7CgogICAgdWludCBhbGxv YygpOwogICAgdWludCBwaXhlbCgpIGNvbnN0OwoKICAgIHN0YXRpYyBpbnQgbWF4Q29sb3JzKCk7 CiAgICBzdGF0aWMgaW50IG51bUJpdFBsYW5lcygpOwoKICAgIHN0YXRpYyBpbnQgZW50ZXJBbGxv Y0NvbnRleHQoKTsKICAgIHN0YXRpYyB2b2lkIGxlYXZlQWxsb2NDb250ZXh0KCk7CiAgICBzdGF0 aWMgaW50IGN1cnJlbnRBbGxvY0NvbnRleHQoKTsKICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lBbGxv Y0NvbnRleHQoIGludCApOwojIDEzMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNs dWRlL3Fjb2xvci5oIgogICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgc3RhdGljIHZv aWQgY2xlYW51cCgpOwoKICAgIGVudW0geyBEaXJ0ID0gMHg0NDQ5NTI1NCwgSW52YWxpZCA9IDB4 NDkwMDAwMDAgfTsKCnByaXZhdGU6CiAgICB2b2lkIHNldFN5c3RlbU5hbWVkQ29sb3IoIGNvbnN0 IFFTdHJpbmcmIG5hbWUgKTsKICAgIHZvaWQgc2V0UGl4ZWwoIHVpbnQgcGl4ZWwgKTsKICAgIHN0 YXRpYyB2b2lkIGluaXRHbG9iYWxDb2xvcnMoKTsKICAgIHN0YXRpYyB1aW50IGFyZ2JUb1BpeDMy KFFSZ2IpOwogICAgc3RhdGljIFFDb2xvciogZ2xvYmFsQ29sb3JzKCk7CiAgICBzdGF0aWMgYm9v bCBjb2xvcl9pbml0OwogICAgc3RhdGljIGJvb2wgZ2xvYmFsc19pbml0OwoKCgogICAgc3RhdGlj IGVudW0gQ29sb3JNb2RlbCB7IGQ4LCBkMzIgfSBjb2xvcm1vZGVsOwogICAgdW5pb24gewogICAg ICAgIFFSZ2IgYXJnYjsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBRUmdiIGFyZ2I7CiAg ICAgICAgICAgIHVjaGFyIHBpeDsKICAgICAgICAgICAgdWNoYXIgaW52YWxpZDsKICAgICAgICAg ICAgdWNoYXIgZGlydHk7CiAgICAgICAgICAgIHVjaGFyIGRpcmVjdDsKICAgICAgICB9IGQ4Owog ICAgICAgIHN0cnVjdCBEMzIgewogICAgICAgICAgICBRUmdiIGFyZ2I7CiAgICAgICAgICAgIHVp bnQgcGl4OwogICAgICAgICAgICBib29sIGludmFsaWQoKSBjb25zdCB7IHJldHVybiBhcmdiID09 IFFDb2xvcjo6SW52YWxpZCAmJiBwaXggPT0gUUNvbG9yOjpEaXJ0OyB9CiAgICAgICAgICAgIGJv b2wgcHJvYmFibHlEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIHBpeCA9PSBRQ29sb3I6OkRpcnQ7IH0K ICAgICAgICB9IGQzMjsKICAgIH0gZDsKfTsKCgppbmxpbmUgUUNvbG9yOjpRQ29sb3IoKQp7IGQu ZDMyLmFyZ2IgPSBJbnZhbGlkOyBkLmQzMi5waXggPSBEaXJ0OyB9CgppbmxpbmUgUUNvbG9yOjpR Q29sb3IoIGludCByLCBpbnQgZywgaW50IGIgKQp7IHNldFJnYiggciwgZywgYiApOyB9Cgppbmxp bmUgUVJnYiBRQ29sb3I6OnJnYigpIGNvbnN0CnsgcmV0dXJuIGQuYXJnYjsgfQoKaW5saW5lIGlu dCBRQ29sb3I6OnJlZCgpIGNvbnN0CnsgcmV0dXJuIHFSZWQoZC5hcmdiKTsgfQoKaW5saW5lIGlu dCBRQ29sb3I6OmdyZWVuKCkgY29uc3QKeyByZXR1cm4gcUdyZWVuKGQuYXJnYik7IH0KCmlubGlu ZSBpbnQgUUNvbG9yOjpibHVlKCkgY29uc3QKeyByZXR1cm4gcUJsdWUoZC5hcmdiKTsgfQoKaW5s aW5lIGJvb2wgUUNvbG9yOjppc1ZhbGlkKCkgY29uc3QKewogICAgaWYgKCBjb2xvcm1vZGVsID09 IGQ4ICkKICAgICAgICByZXR1cm4gIWQuZDguaW52YWxpZDsKICAgIGVsc2UKICAgICAgICByZXR1 cm4gIWQuZDMyLmludmFsaWQoKTsKfQoKaW5saW5lIGJvb2wgUUNvbG9yOjpvcGVyYXRvcj09KCBj b25zdCBRQ29sb3IgJmMgKSBjb25zdAp7CiAgICByZXR1cm4gZC5hcmdiID09IGMuZC5hcmdiICYm IGlzVmFsaWQoKSA9PSBjLmlzVmFsaWQoKTsKfQoKaW5saW5lIGJvb2wgUUNvbG9yOjpvcGVyYXRv ciE9KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdAp7CiAgICByZXR1cm4gIW9wZXJhdG9yPT0oYyk7 Cn0KCgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3Qg UUNvbG9yICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQ29s b3IgJiApOwojIDQ0ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXBhbGV0 dGUuaCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWJydXNo LmgiIDEKIyA0NyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FicnVzaC5o IgpjbGFzcyBRQnJ1c2g6IHB1YmxpYyBRdAp7CmZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKcHVibGlj OgogICAgUUJydXNoKCk7CiAgICBRQnJ1c2goIEJydXNoU3R5bGUgKTsKICAgIFFCcnVzaCggY29u c3QgUUNvbG9yICYsIEJydXNoU3R5bGU9U29saWRQYXR0ZXJuICk7CiAgICBRQnJ1c2goIGNvbnN0 IFFDb2xvciAmLCBjb25zdCBRUGl4bWFwICYgKTsKICAgIFFCcnVzaCggY29uc3QgUUJydXNoICYg KTsKICAgflFCcnVzaCgpOwogICAgUUJydXNoICZvcGVyYXRvcj0oIGNvbnN0IFFCcnVzaCAmICk7 CgogICAgQnJ1c2hTdHlsZSBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0eWxlOyB9CiAg ICB2b2lkIHNldFN0eWxlKCBCcnVzaFN0eWxlICk7CiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKClj b25zdCB7IHJldHVybiBkYXRhLT5jb2xvcjsgfQogICAgdm9pZCBzZXRDb2xvciggY29uc3QgUUNv bG9yICYgKTsKICAgIFFQaXhtYXAgKnBpeG1hcCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnBpeG1h cDsgfQogICAgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiApOwoKICAgIGJvb2wgb3Bl cmF0b3I9PSggY29uc3QgUUJydXNoICZwICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0oIGNv bnN0IFFCcnVzaCAmYiApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7IHJldHVybiAhKG9wZXJhdG9yPT0oYikpOyB9Cgpwcml2YXRlOgogICAgUUJydXNoIGNv cHkoKSBjb25zdDsKICAgIHZvaWQgZGV0YWNoKCk7CiAgICB2b2lkIGluaXQoIGNvbnN0IFFDb2xv ciAmLCBCcnVzaFN0eWxlICk7CiAgICBzdHJ1Y3QgUUJydXNoRGF0YSA6IHB1YmxpYyBRU2hhcmVk IHsKICAgICAgICBCcnVzaFN0eWxlIHN0eWxlOwogICAgICAgIFFDb2xvciBjb2xvcjsKICAgICAg ICBRUGl4bWFwICpwaXhtYXA7CiAgICB9ICpkYXRhOwp9OwoKCgoKCgoKIFFEYXRhU3RyZWFtICZv cGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQnJ1c2ggJiApOwogUURhdGFTdHJlYW0g Jm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFCcnVzaCAmICk7CiMgNDYgIi91c3IvbG9jYWwv cXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcGFsZXR0ZS5oIiAyCgoKCgpjbGFzcyBRQ29sb3JH cm91cFByaXZhdGU7CgpjbGFzcyBRQ29sb3JHcm91cAp7CnB1YmxpYzoKICAgIFFDb2xvckdyb3Vw KCk7CiAgICBRQ29sb3JHcm91cCggY29uc3QgUUNvbG9yICZmb3JlZ3JvdW5kLCBjb25zdCBRQ29s b3IgJmJ1dHRvbiwKICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3IgJmxpZ2h0LCBjb25zdCBR Q29sb3IgJmRhcmssIGNvbnN0IFFDb2xvciAmbWlkLAogICAgICAgICAgICAgICAgIGNvbnN0IFFD b2xvciAmdGV4dCwgY29uc3QgUUNvbG9yICZiYXNlICk7CiAgICBRQ29sb3JHcm91cCggY29uc3Qg UUJydXNoICZmb3JlZ3JvdW5kLCBjb25zdCBRQnJ1c2ggJmJ1dHRvbiwKICAgICAgICAgICAgICAg ICBjb25zdCBRQnJ1c2ggJmxpZ2h0LCBjb25zdCBRQnJ1c2ggJmRhcmssIGNvbnN0IFFCcnVzaCAm bWlkLAogICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAmdGV4dCwgY29uc3QgUUJydXNoICZi cmlnaHRfdGV4dCwKICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2ggJmJhc2UsIGNvbnN0IFFC cnVzaCAmYmFja2dyb3VuZCk7CiAgICBRQ29sb3JHcm91cCggY29uc3QgUUNvbG9yR3JvdXAgJiAp OwoKICAgflFDb2xvckdyb3VwKCk7CgogICAgUUNvbG9yR3JvdXAmIG9wZXJhdG9yID0oY29uc3Qg UUNvbG9yR3JvdXAmKTsKCgogICAgZW51bSBDb2xvclJvbGUgeyBGb3JlZ3JvdW5kLCBCdXR0b24s IExpZ2h0LCBNaWRsaWdodCwgRGFyaywgTWlkLAogICAgICAgICAgICAgICAgICAgICBUZXh0LCBC cmlnaHRUZXh0LCBCdXR0b25UZXh0LCBCYXNlLCBCYWNrZ3JvdW5kLCBTaGFkb3csCiAgICAgICAg ICAgICAgICAgICAgIEhpZ2hsaWdodCwgSGlnaGxpZ2h0ZWRUZXh0LCBMaW5rLCBMaW5rVmlzaXRl ZCwKICAgICAgICAgICAgICAgICAgICAgTkNvbG9yUm9sZXMgfTsKCiAgICBjb25zdCBRQ29sb3Ig JmNvbG9yKCBDb2xvclJvbGUgKSBjb25zdDsKICAgIGNvbnN0IFFCcnVzaCAmYnJ1c2goIENvbG9y Um9sZSApIGNvbnN0OwogICAgdm9pZCBzZXRDb2xvciggQ29sb3JSb2xlLCBjb25zdCBRQ29sb3Ig JiApOwogICAgdm9pZCBzZXRCcnVzaCggQ29sb3JSb2xlLCBjb25zdCBRQnJ1c2ggJiApOwoKICAg IGNvbnN0IFFDb2xvciAmZm9yZWdyb3VuZCgpIGNvbnN0IHsgcmV0dXJuIGJyW0ZvcmVncm91bmRd LmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmYnV0dG9uKCkgY29uc3QgeyByZXR1cm4gYnJb QnV0dG9uXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmxpZ2h0KCkgY29uc3QgeyByZXR1 cm4gYnJbTGlnaHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmZGFyaygpIGNvbnN0IHsg cmV0dXJuIGJyW0RhcmtdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmbWlkKCkgY29uc3Qg eyByZXR1cm4gYnJbTWlkXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJnRleHQoKSBjb25z dCB7IHJldHVybiBicltUZXh0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJhc2UoKSBj b25zdCB7IHJldHVybiBicltCYXNlXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJhY2tn cm91bmQoKSBjb25zdCB7IHJldHVybiBicltCYWNrZ3JvdW5kXS5jb2xvcigpOyB9CgogICAgY29u c3QgUUNvbG9yICZtaWRsaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJyW01pZGxpZ2h0XS5jb2xvcigp OyB9CiAgICBjb25zdCBRQ29sb3IgJmJyaWdodFRleHQoKSBjb25zdCB7IHJldHVybiBicltCcmln aHRUZXh0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJ1dHRvblRleHQoKSBjb25zdCB7 IHJldHVybiBicltCdXR0b25UZXh0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJnNoYWRv dygpIGNvbnN0IHsgcmV0dXJuIGJyW1NoYWRvd10uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9y ICZoaWdobGlnaHQoKSBjb25zdCB7IHJldHVybiBicltIaWdobGlnaHRdLmNvbG9yKCk7IH0KICAg IGNvbnN0IFFDb2xvciAmaGlnaGxpZ2h0ZWRUZXh0KCkgY29uc3R7cmV0dXJuIGJyW0hpZ2hsaWdo dGVkVGV4dF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZsaW5rKCkgY29uc3QgeyByZXR1 cm4gYnJbTGlua10uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZsaW5rVmlzaXRlZCgpIGNv bnN0IHsgcmV0dXJuIGJyW0xpbmtWaXNpdGVkXS5jb2xvcigpOyB9CgogICAgYm9vbCBvcGVyYXRv cj09KCBjb25zdCBRQ29sb3JHcm91cCAmZyApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBj b25zdCBRQ29sb3JHcm91cCAmZyApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gIShvcGVyYXRvcj09 KGcpKTsgfQoKcHJpdmF0ZToKICAgIFFCcnVzaCAqYnI7CiAgICBRQ29sb3JHcm91cFByaXZhdGUg KiBkOwoKICAgIGZyaWVuZCBjbGFzcyBRUGFsZXR0ZTsKfTsKCgpjbGFzcyBRUGFsZXR0ZQp7CnB1 YmxpYzoKICAgIFFQYWxldHRlKCk7CiAgICBRUGFsZXR0ZSggY29uc3QgUUNvbG9yICZidXR0b24g KTsKICAgIFFQYWxldHRlKCBjb25zdCBRQ29sb3IgJmJ1dHRvbiwgY29uc3QgUUNvbG9yICZiYWNr Z3JvdW5kICk7CiAgICBRUGFsZXR0ZSggY29uc3QgUUNvbG9yR3JvdXAgJmFjdGl2ZSwgY29uc3Qg UUNvbG9yR3JvdXAgJmRpc2FibGVkLAogICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZp bmFjdGl2ZSApOwogICAgUVBhbGV0dGUoIGNvbnN0IFFQYWxldHRlICYgKTsKICAgIH5RUGFsZXR0 ZSgpOwogICAgUVBhbGV0dGUgJm9wZXJhdG9yPSggY29uc3QgUVBhbGV0dGUgJiApOwoKICAgIGVu dW0gQ29sb3JHcm91cCB7IERpc2FibGVkLCBBY3RpdmUsIEluYWN0aXZlLCBOQ29sb3JHcm91cHMs IE5vcm1hbD1BY3RpdmUgfTsKCiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKCBDb2xvckdyb3VwLCBR Q29sb3JHcm91cDo6Q29sb3JSb2xlICkgY29uc3Q7CiAgICBjb25zdCBRQnJ1c2ggJmJydXNoKCBD b2xvckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlICkgY29uc3Q7CiAgICB2b2lkIHNldENv bG9yKCBDb2xvckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlLCBjb25zdCBRQ29sb3IgJiAp OwogICAgdm9pZCBzZXRCcnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwg Y29uc3QgUUJydXNoICYgKTsKCiAgICB2b2lkIHNldENvbG9yKCBRQ29sb3JHcm91cDo6Q29sb3JS b2xlLCBjb25zdCBRQ29sb3IgJiApOwogICAgdm9pZCBzZXRCcnVzaCggUUNvbG9yR3JvdXA6OkNv bG9yUm9sZSwgY29uc3QgUUJydXNoICYgKTsKCiAgICBRUGFsZXR0ZSBjb3B5KCkgY29uc3Q7Cgog ICAgY29uc3QgUUNvbG9yR3JvdXAgJmFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPmFjdGl2 ZTsgfQogICAgY29uc3QgUUNvbG9yR3JvdXAgJmRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gZGF0 YS0+ZGlzYWJsZWQ7IH0KICAgIGNvbnN0IFFDb2xvckdyb3VwICZpbmFjdGl2ZSgpIGNvbnN0IHsg cmV0dXJuIGRhdGEtPmluYWN0aXZlOyB9CgogICAgY29uc3QgUUNvbG9yR3JvdXAgJm5vcm1hbCgp IGNvbnN0IHsgcmV0dXJuIGFjdGl2ZSgpOyB9CgoKICAgIHZvaWQgc2V0QWN0aXZlKCBjb25zdCBR Q29sb3JHcm91cCAmICk7CiAgICB2b2lkIHNldERpc2FibGVkKCBjb25zdCBRQ29sb3JHcm91cCAm ICk7CiAgICB2b2lkIHNldEluYWN0aXZlKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CgogICAgdm9p ZCBzZXROb3JtYWwoIGNvbnN0IFFDb2xvckdyb3VwICYgY2cgKSB7IHNldEFjdGl2ZShjZyk7IH0K CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUGFsZXR0ZSAmcCApIGNvbnN0OwogICAgYm9v bCBvcGVyYXRvciE9KCBjb25zdCBRUGFsZXR0ZSAmcCApIGNvbnN0CiAgICAgICAgICAgICAgeyBy ZXR1cm4gIShvcGVyYXRvcj09KHApKTsgfQogICAgYm9vbCBpc0NvcHlPZiggY29uc3QgUVBhbGV0 dGUgJiApOwoKICAgIGludCBzZXJpYWxOdW1iZXIoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zZXJf bm87IH0KCgogICAgc3RhdGljIFFDb2xvckdyb3VwOjpDb2xvclJvbGUgZm9yZWdyb3VuZFJvbGVG cm9tTW9kZSggUXQ6OkJhY2tncm91bmRNb2RlIG1vZGUgKTsKICAgIHN0YXRpYyBRQ29sb3JHcm91 cDo6Q29sb3JSb2xlIGJhY2tncm91bmRSb2xlRnJvbU1vZGUoIFF0OjpCYWNrZ3JvdW5kTW9kZSBt b2RlKTsKCnByaXZhdGU6CiAgICB2b2lkIGRldGFjaCgpOwogICAgY29uc3QgUUJydXNoICZkaXJl Y3RCcnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSApIGNvbnN0OwogICAg dm9pZCBkaXJlY3RTZXRCcnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwg Y29uc3QgUUJydXNoJiApOwoKICAgIHN0cnVjdCBRUGFsRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsK ICAgICAgICBRQ29sb3JHcm91cCBkaXNhYmxlZDsKICAgICAgICBRQ29sb3JHcm91cCBhY3RpdmU7 CiAgICAgICAgaW50IHNlcl9ubzsKICAgICAgICBRQ29sb3JHcm91cCBpbmFjdGl2ZTsKICAgIH0g KmRhdGE7Cn07CgoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYs IGNvbnN0IFFDb2xvckdyb3VwICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0 cmVhbSAmLCBRQ29sb3JHcm91cCAmICk7CgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRh U3RyZWFtICYsIGNvbnN0IFFQYWxldHRlICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR RGF0YVN0cmVhbSAmLCBRUGFsZXR0ZSAmICk7CiMgNDYgIi91c3IvbG9jYWwvcXQteDExLWZyZWUt My4wLjYvaW5jbHVkZS9xd2lkZ2V0LmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMu MC42L2luY2x1ZGUvcWZvbnQuaCIgMQojIDQ3ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42 L2luY2x1ZGUvcWZvbnQuaCIKY2xhc3MgUUZvbnRQcml2YXRlOwpjbGFzcyBRU3RyaW5nTGlzdDsK CmNsYXNzIFFGb250CnsKcHVibGljOgogICAgZW51bSBTdHlsZUhpbnQgewogICAgICAgIEhlbHZl dGljYSwgU2Fuc1NlcmlmID0gSGVsdmV0aWNhLAogICAgICAgIFRpbWVzLCBTZXJpZiA9IFRpbWVz LAogICAgICAgIENvdXJpZXIsIFR5cGVXcml0ZXIgPSBDb3VyaWVyLAogICAgICAgIE9sZEVuZ2xp c2gsIERlY29yYXRpdmUgPSBPbGRFbmdsaXNoLAogICAgICAgIFN5c3RlbSwKICAgICAgICBBbnlT dHlsZQogICAgfTsKCiAgICBlbnVtIFN0eWxlU3RyYXRlZ3kgewogICAgICAgIFByZWZlckRlZmF1 bHQgPSAweDAwMDEsCiAgICAgICAgUHJlZmVyQml0bWFwID0gMHgwMDAyLAogICAgICAgIFByZWZl ckRldmljZSA9IDB4MDAwNCwKICAgICAgICBQcmVmZXJPdXRsaW5lID0gMHgwMDA4LAogICAgICAg IEZvcmNlT3V0bGluZSA9IDB4MDAxMCwKICAgICAgICBQcmVmZXJNYXRjaCA9IDB4MDAyMCwKICAg ICAgICBQcmVmZXJRdWFsaXR5ID0gMHgwMDQwLAogICAgICAgIFByZWZlckFudGlhbGlhcyA9IDB4 MDA4MCwKICAgICAgICBOb0FudGlhbGlhcyA9IDB4MDEwMAogICAgfTsKCiAgICBlbnVtIFdlaWdo dCB7CiAgICAgICAgTGlnaHQgPSAyNSwKICAgICAgICBOb3JtYWwgPSA1MCwKICAgICAgICBEZW1p Qm9sZCA9IDYzLAogICAgICAgIEJvbGQgPSA3NSwKICAgICAgICBCbGFjayA9IDg3CiAgICB9OwoK CiAgICBRRm9udCgpOwoKICAgIFFGb250KCBjb25zdCBRU3RyaW5nICZmYW1pbHksIGludCBwb2lu dFNpemUgPSAxMiwgaW50IHdlaWdodCA9IE5vcm1hbCwKICAgICAgICAgICBib29sIGl0YWxpYyA9 IEZBTFNFICk7CgogICAgUUZvbnQoIGNvbnN0IFFGb250ICYgKTsKCiAgICB+UUZvbnQoKTsKCiAg ICBRU3RyaW5nIGZhbWlseSgpIGNvbnN0OwogICAgdm9pZCBzZXRGYW1pbHkoIGNvbnN0IFFTdHJp bmcgJik7CgogICAgaW50IHBvaW50U2l6ZSgpIGNvbnN0OwogICAgZmxvYXQgcG9pbnRTaXplRmxv YXQoKSBjb25zdDsKICAgIHZvaWQgc2V0UG9pbnRTaXplKCBpbnQgKTsKICAgIHZvaWQgc2V0UG9p bnRTaXplRmxvYXQoIGZsb2F0ICk7CgogICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0OwogICAgdm9p ZCBzZXRQaXhlbFNpemUoIGludCApOwogICAgdm9pZCBzZXRQaXhlbFNpemVGbG9hdCggZmxvYXQg KTsKCiAgICBpbnQgd2VpZ2h0KCkgY29uc3Q7CiAgICB2b2lkIHNldFdlaWdodCggaW50ICk7Cgog ICAgYm9vbCBib2xkKCkgY29uc3Q7CiAgICB2b2lkIHNldEJvbGQoIGJvb2wgKTsKCiAgICBib29s IGl0YWxpYygpIGNvbnN0OwogICAgdm9pZCBzZXRJdGFsaWMoIGJvb2wgKTsKCiAgICBib29sIHVu ZGVybGluZSgpIGNvbnN0OwogICAgdm9pZCBzZXRVbmRlcmxpbmUoIGJvb2wgKTsKCiAgICBib29s IHN0cmlrZU91dCgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHJpa2VPdXQoIGJvb2wgKTsKCiAgICBi b29sIGZpeGVkUGl0Y2goKSBjb25zdDsKICAgIHZvaWQgc2V0Rml4ZWRQaXRjaCggYm9vbCApOwoK ICAgIFN0eWxlSGludCBzdHlsZUhpbnQoKSBjb25zdDsKICAgIFN0eWxlU3RyYXRlZ3kgc3R5bGVT dHJhdGVneSgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZUhpbnQoIFN0eWxlSGludCwgU3R5bGVT dHJhdGVneSA9IFByZWZlckRlZmF1bHQgKTsKICAgIHZvaWQgc2V0U3R5bGVTdHJhdGVneSggU3R5 bGVTdHJhdGVneSBzICk7CgoKICAgIGJvb2wgcmF3TW9kZSgpIGNvbnN0OwogICAgdm9pZCBzZXRS YXdNb2RlKCBib29sICk7CgoKICAgIGJvb2wgZXhhY3RNYXRjaCgpIGNvbnN0OwoKICAgIFFGb250 ICZvcGVyYXRvcj0oIGNvbnN0IFFGb250ICYgKTsKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3Qg UUZvbnQgJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRRm9udCAmICkgY29u c3Q7CiAgICBib29sIGlzQ29weU9mKCBjb25zdCBRRm9udCAmICkgY29uc3Q7CgoKCgoKICAgIFF0 OjpIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgogICAgdm9pZCBzZXRSYXdOYW1lKCBjb25zdCBR U3RyaW5nICYgKTsKICAgIFFTdHJpbmcgcmF3TmFtZSgpIGNvbnN0OwoKICAgIFFTdHJpbmcga2V5 KCkgY29uc3Q7CgoKICAgIFFTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKICAgIGJvb2wgZnJvbVN0 cmluZyhjb25zdCBRU3RyaW5nICYpOwoKICAgIHN0YXRpYyBRU3RyaW5nIHN1YnN0aXR1dGUoY29u c3QgUVN0cmluZyAmKTsKICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBzdWJzdGl0dXRlcyhjb25zdCBR U3RyaW5nICYpOwogICAgc3RhdGljIFFTdHJpbmdMaXN0IHN1YnN0aXR1dGlvbnMoKTsKICAgIHN0 YXRpYyB2b2lkIGluc2VydFN1YnN0aXR1dGlvbihjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmlu ZyAmKTsKICAgIHN0YXRpYyB2b2lkIGluc2VydFN1YnN0aXR1dGlvbnMoY29uc3QgUVN0cmluZyYs IGNvbnN0IFFTdHJpbmdMaXN0ICYpOwogICAgc3RhdGljIHZvaWQgcmVtb3ZlU3Vic3RpdHV0aW9u KGNvbnN0IFFTdHJpbmcgJik7CgogICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgc3Rh dGljIHZvaWQgY2xlYW51cCgpOwogICAgc3RhdGljIHZvaWQgY2FjaGVTdGF0aXN0aWNzKCk7CgoK CgoKCgogICAgZW51bSBTY3JpcHQgewoKICAgICAgICBMYXRpbiwKICAgICAgICBHcmVlaywKICAg ICAgICBDeXJpbGxpYywKICAgICAgICBBcm1lbmlhbiwKICAgICAgICBHZW9yZ2lhbiwKICAgICAg ICBSdW5pYywKICAgICAgICBPZ2hhbSwKICAgICAgICBTcGFjaW5nTW9kaWZpZXJzLAogICAgICAg IENvbWJpbmluZ01hcmtzLAoKCiAgICAgICAgSGVicmV3LAogICAgICAgIEFyYWJpYywKICAgICAg ICBTeXJpYWMsCiAgICAgICAgVGhhYW5hLAoKCiAgICAgICAgRGV2YW5hZ2FyaSwKICAgICAgICBC ZW5nYWxpLAogICAgICAgIEd1cm11a2hpLAogICAgICAgIEd1amFyYXRpLAogICAgICAgIE9yaXlh LAogICAgICAgIFRhbWlsLAogICAgICAgIFRlbHVndSwKICAgICAgICBLYW5uYWRhLAogICAgICAg IE1hbGF5YWxhbSwKICAgICAgICBTaW5oYWxhLAogICAgICAgIFRoYWksCiAgICAgICAgTGFvLAog ICAgICAgIFRpYmV0YW4sCiAgICAgICAgTXlhbm1hciwKICAgICAgICBLaG1lciwKCgogICAgICAg IEhhbiwKICAgICAgICBIaXJhZ2FuYSwKICAgICAgICBLYXRha2FuYSwKICAgICAgICBIYW5ndWws CiAgICAgICAgQm9wb21vZm8sCiAgICAgICAgWWksCgoKICAgICAgICBFdGhpb3BpYywKICAgICAg ICBDaGVyb2tlZSwKICAgICAgICBDYW5hZGlhbkFib3JpZ2luYWwsCiAgICAgICAgTW9uZ29saWFu LAoKCiAgICAgICAgQ3VycmVuY3lTeW1ib2xzLAogICAgICAgIExldHRlcmxpa2VTeW1ib2xzLAog ICAgICAgIE51bWJlckZvcm1zLAogICAgICAgIE1hdGhlbWF0aWNhbE9wZXJhdG9ycywKICAgICAg ICBUZWNobmljYWxTeW1ib2xzLAogICAgICAgIEdlb21ldHJpY1N5bWJvbHMsCiAgICAgICAgTWlz Y2VsbGFuZW91c1N5bWJvbHMsCiAgICAgICAgRW5jbG9zZWRBbmRTcXVhcmUsCiAgICAgICAgQnJh aWxsZSwKCiAgICAgICAgVW5pY29kZSwKCgogICAgICAgIE5TY3JpcHRzLAogICAgICAgIFVua25v d25TY3JpcHQgPSBOU2NyaXB0cywKCiAgICAgICAgTm9TY3JpcHQsCgoKCgoKCiAgICAgICAgSGFu WDExLAoKICAgICAgICBMYXRpbkJhc2ljID0gTGF0aW4sCiAgICAgICAgTGF0aW5FeHRlbmRlZEFf MiA9IEhhblgxMSArIDEsCiAgICAgICAgTGF0aW5FeHRlbmRlZEFfMywKICAgICAgICBMYXRpbkV4 dGVuZGVkQV80LAogICAgICAgIExhdGluRXh0ZW5kZWRBXzE0LAogICAgICAgIExhdGluRXh0ZW5k ZWRBXzE1LAogICAgICAgIEthdGFrYW5hSGFsZldpZHRoLAoKICAgICAgICBMYXN0UHJpdmF0ZVNj cmlwdAogICAgfTsKCiAgICBRU3RyaW5nIGRlZmF1bHRGYW1pbHkoKSBjb25zdDsKICAgIFFTdHJp bmcgbGFzdFJlc29ydEZhbWlseSgpIGNvbnN0OwogICAgUVN0cmluZyBsYXN0UmVzb3J0Rm9udCgp IGNvbnN0OwoKCgogICAgc3RhdGljIFFGb250IGRlZmF1bHRGb250KCk7CiAgICBzdGF0aWMgdm9p ZCBzZXREZWZhdWx0Rm9udCggY29uc3QgUUZvbnQgJiApOwoKCgoKcHJvdGVjdGVkOgoKICAgIGJv b2wgZGlydHkoKSBjb25zdDsKICAgIGludCBkZWNpUG9pbnRTaXplKCkgY29uc3Q7CgoKcHJpdmF0 ZToKICAgIFFGb250KCBRRm9udFByaXZhdGUgKiwgYm9vbCBkZWVwID0gVFJVRSApOwogICAgUUZv bnQoIFFGb250UHJpdmF0ZSAqLCBRUGFpbnREZXZpY2UgKnBkICk7CgogICAgdm9pZCBkZXRhY2go KTsKIyAyOTQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZm9udC5oIgog ICAgZnJpZW5kIGNsYXNzIFFGb250TWV0cmljczsKICAgIGZyaWVuZCBjbGFzcyBRRm9udEluZm87 CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CiAgICBmcmllbmQgY2xhc3MgUVBTUHJpbnRlckZv bnQ7CgoKICAgIGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwg Y29uc3QgUUZvbnQgJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0 YVN0cmVhbSAmLCBRRm9udCAmICk7CgoKICAgIFFGb250UHJpdmF0ZSAqZDsKfTsKCgppbmxpbmUg Ym9vbCBRRm9udDo6Ym9sZCgpIGNvbnN0CnsgcmV0dXJuIHdlaWdodCgpID4gTm9ybWFsOyB9CgoK aW5saW5lIHZvaWQgUUZvbnQ6OnNldEJvbGQoIGJvb2wgZW5hYmxlICkKeyBzZXRXZWlnaHQoIGVu YWJsZSA/IEJvbGQgOiBOb3JtYWwgKTsgfQojIDMyMyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z LjAuNi9pbmNsdWRlL3Fmb250LmgiCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJl YW0gJiwgY29uc3QgUUZvbnQgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3Ry ZWFtICYsIFFGb250ICYgKTsKIyA0NyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNs dWRlL3F3aWRnZXQuaCIgMgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVk ZS9xZm9udG1ldHJpY3MuaCIgMQojIDQ2ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2lu Y2x1ZGUvcWZvbnRtZXRyaWNzLmgiCmNsYXNzIFFGb250U3RydWN0OwpjbGFzcyBRVGV4dENvZGVj OwpjbGFzcyBRVGV4dFBhcmFnOwoKY2xhc3MgUUZvbnRNZXRyaWNzCnsKcHVibGljOgogICAgUUZv bnRNZXRyaWNzKCBjb25zdCBRRm9udCAmICk7CiAgICBRRm9udE1ldHJpY3MoIGNvbnN0IFFGb250 TWV0cmljcyAmICk7CiAgICB+UUZvbnRNZXRyaWNzKCk7CgogICAgUUZvbnRNZXRyaWNzICZvcGVy YXRvcj0oIGNvbnN0IFFGb250TWV0cmljcyAmICk7CgogICAgaW50IGFzY2VudCgpIGNvbnN0Owog ICAgaW50IGRlc2NlbnQoKSBjb25zdDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIGludCBs ZWFkaW5nKCkgY29uc3Q7CiAgICBpbnQgbGluZVNwYWNpbmcoKSBjb25zdDsKICAgIGludCBtaW5M ZWZ0QmVhcmluZygpIGNvbnN0OwogICAgaW50IG1pblJpZ2h0QmVhcmluZygpIGNvbnN0OwogICAg aW50IG1heFdpZHRoKCkgY29uc3Q7CgogICAgYm9vbCBpbkZvbnQoUUNoYXIpIGNvbnN0OwoKICAg IGludCBsZWZ0QmVhcmluZyhRQ2hhcikgY29uc3Q7CiAgICBpbnQgcmlnaHRCZWFyaW5nKFFDaGFy KSBjb25zdDsKICAgIGludCB3aWR0aCggY29uc3QgUVN0cmluZyAmLCBpbnQgbGVuID0gLTEgKSBj b25zdDsKCiAgICBpbnQgd2lkdGgoIFFDaGFyICkgY29uc3Q7CgogICAgaW50IHdpZHRoKCBjaGFy IGMgKSBjb25zdCB7IHJldHVybiB3aWR0aCggKFFDaGFyKSBjICk7IH0KCgogICAgaW50IGNoYXJX aWR0aCggY29uc3QgUVN0cmluZyAmc3RyLCBpbnQgcG9zICkgY29uc3Q7CiAgICBRUmVjdCBib3Vu ZGluZ1JlY3QoIGNvbnN0IFFTdHJpbmcgJiwgaW50IGxlbiA9IC0xICkgY29uc3Q7CiAgICBRUmVj dCBib3VuZGluZ1JlY3QoIFFDaGFyICkgY29uc3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGlu dCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHN0ciwgaW50IGxlbj0tMSwgaW50IHRhYnN0b3BzPTAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdGFiYXJyYXk9MCwgUVRleHRQYXJh ZyAqKmludGVybj0wICkgY29uc3Q7CiAgICBRU2l6ZSBzaXplKCBpbnQgZmxhZ3MsCiAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBzdHIsIGludCBsZW49LTEsIGludCB0YWJzdG9w cz0wLAogICAgICAgICAgICAgICAgICAgICAgaW50ICp0YWJhcnJheT0wLCBRVGV4dFBhcmFnICoq aW50ZXJuPTAgKSBjb25zdDsKCiAgICBpbnQgdW5kZXJsaW5lUG9zKCkgY29uc3Q7CiAgICBpbnQg c3RyaWtlT3V0UG9zKCkgY29uc3Q7CiAgICBpbnQgbGluZVdpZHRoKCkgY29uc3Q7Cgpwcml2YXRl OgogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBRUGFpbnRlciAqICk7CiAgICBzdGF0aWMgdm9pZCBy ZXNldCggY29uc3QgUVBhaW50ZXIgKiApOwojIDEwNCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z LjAuNi9pbmNsdWRlL3Fmb250bWV0cmljcy5oIgogICAgZnJpZW5kIGNsYXNzIFFXaWRnZXQ7CiAg ICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CiAgICBmcmllbmQgY2xhc3MgUVRleHRGb3JtYXQ7CgoK CgogICAgUUZvbnRQcml2YXRlICpkOwogICAgUVBhaW50ZXIgKnBhaW50ZXI7CiAgICBpbnQgZmxh Z3M7CgogICAgYm9vbCB1bmRlcmxpbmVGbGFnKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgMHgx KSAhPSAwOyB9CiAgICBib29sIHN0cmlrZU91dEZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3Mg JiAweDIpICE9IDA7IH0KICAgIHZvaWQgc2V0VW5kZXJsaW5lRmxhZygpIHsgZmxhZ3MgfD0gMHgx OyB9CiAgICB2b2lkIHNldFN0cmlrZU91dEZsYWcoKSB7IGZsYWdzIHw9IDB4MjsgfQp9OwojIDQ4 ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpZGdldC5oIiAyCiMgMSAi L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fmb250aW5mby5oIiAxCiMgNDYg Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xZm9udGluZm8uaCIKY2xhc3Mg UUZvbnRJbmZvCnsKcHVibGljOgogICAgUUZvbnRJbmZvKCBjb25zdCBRRm9udCAmICk7CiAgICBR Rm9udEluZm8oIGNvbnN0IFFGb250SW5mbyAmICk7CiAgICB+UUZvbnRJbmZvKCk7CgogICAgUUZv bnRJbmZvICZvcGVyYXRvcj0oIGNvbnN0IFFGb250SW5mbyAmICk7CgogICAgUVN0cmluZyBmYW1p bHkoKSBjb25zdDsKICAgIGludCBwaXhlbFNpemUoKSBjb25zdDsKICAgIGludCBwb2ludFNpemUo KSBjb25zdDsKICAgIGJvb2wgaXRhbGljKCkgY29uc3Q7CiAgICBpbnQgd2VpZ2h0KCkgY29uc3Q7 CiAgICBib29sIGJvbGQoKSBjb25zdDsKICAgIGJvb2wgdW5kZXJsaW5lKCkgY29uc3Q7CiAgICBi b29sIHN0cmlrZU91dCgpIGNvbnN0OwogICAgYm9vbCBmaXhlZFBpdGNoKCkgY29uc3Q7CiAgICBR Rm9udDo6U3R5bGVIaW50IHN0eWxlSGludCgpIGNvbnN0OwogICAgYm9vbCByYXdNb2RlKCkgY29u c3Q7CgogICAgYm9vbCBleGFjdE1hdGNoKCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgIFFGb250SW5m byggY29uc3QgUVBhaW50ZXIgKiApOwogICAgc3RhdGljIHZvaWQgcmVzZXQoIGNvbnN0IFFQYWlu dGVyICogKTsKCiAgICBRRm9udFByaXZhdGUgKmQ7CiAgICBRUGFpbnRlciAqcGFpbnRlcjsKICAg IGludCBmbGFnczsKCiAgICBib29sIHVuZGVybGluZUZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxh Z3MgJiAweDEpICE9IDA7IH0KICAgIGJvb2wgc3RyaWtlT3V0RmxhZygpIGNvbnN0IHsgcmV0dXJu IChmbGFncyAmIDB4MikgIT0gMDsgfQogICAgYm9vbCBleGFjdE1hdGNoRmxhZygpIGNvbnN0IHsg cmV0dXJuIChmbGFncyAmIDB4NCkgIT0gMDsgfQogICAgdm9pZCBzZXRVbmRlcmxpbmVGbGFnKCkg eyBmbGFncyB8PSAweDE7IH0KICAgIHZvaWQgc2V0U3RyaWtlT3V0RmxhZygpIHsgZmxhZ3MgfD0g MHgyOyB9CiAgICB2b2lkIHNldEV4YWN0TWF0Y2hGbGFnKCkgeyBmbGFncyB8PSAweDQ7IH0KCiAg ICBmcmllbmQgY2xhc3MgUVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKfTsKCgpp bmxpbmUgYm9vbCBRRm9udEluZm86OmJvbGQoKSBjb25zdAp7IHJldHVybiB3ZWlnaHQoKSA+IFFG b250OjpOb3JtYWw7IH0KIyA0OSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRl L3F3aWRnZXQuaCIgMgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9x c2l6ZXBvbGljeS5oIiAxCiMgNDUgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVk ZS9xc2l6ZXBvbGljeS5oIgpjbGFzcyBRU2l6ZVBvbGljeQp7CnByaXZhdGU6CiAgICBlbnVtIHsg SFNpemUgPSA2LCBITWFzayA9IDB4M2YsIFZNYXNrID0gSE1hc2sgPDwgSFNpemUsCiAgICAgICAg ICAgTWF5R3JvdyA9IDEsIEV4cE1hc2sgPSAyLCBNYXlTaHJpbmsgPSA0IH07CnB1YmxpYzoKICAg IGVudW0gU2l6ZVR5cGUgeyBGaXhlZCA9IDAsCiAgICAgICAgICAgICAgICAgICAgTWluaW11bSA9 IE1heUdyb3csCiAgICAgICAgICAgICAgICAgICAgTWF4aW11bSA9IE1heVNocmluaywKICAgICAg ICAgICAgICAgICAgICBQcmVmZXJyZWQgPSBNYXlHcm93fE1heVNocmluayAsCiAgICAgICAgICAg ICAgICAgICAgTWluaW11bUV4cGFuZGluZyA9IE1heUdyb3d8RXhwTWFzaywKICAgICAgICAgICAg ICAgICAgICBFeHBhbmRpbmcgPSBNYXlHcm93fE1heVNocmlua3xFeHBNYXNrLAogICAgICAgICAg ICAgICAgICAgIElnbm9yZWQgPSBFeHBNYXNrCiAgICB9OwoKICAgIGVudW0gRXhwYW5kRGF0YSB7 IE5vRGlyZWN0aW9uID0gMCwKICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWxseSA9IDEs CiAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbGx5ID0gMiwKICAgICAgICAgICAgICAgICAg ICAgIEJvdGhEaXJlY3Rpb25zID0gSG9yaXpvbnRhbGx5IHwgVmVydGljYWxseQoKICAgICAgICAg ICAgICAgICAgICAgICxIb3Jpem9udGFsID0gSG9yaXpvbnRhbGx5LAogICAgICAgICAgICAgICAg ICAgICAgVmVydGljYWwgPSBWZXJ0aWNhbGx5CgogICAgfTsKCiAgICBRU2l6ZVBvbGljeSgpIDog ZGF0YSggMCApIHt9CgogICAgUVNpemVQb2xpY3koIFNpemVUeXBlIGhvciwgU2l6ZVR5cGUgdmVy LCBib29sIGhmdyA9IEZBTFNFICkKICAgICAgICA6IGRhdGEoIGhvciB8ICh2ZXI8PEhTaXplKSB8 IChoZncgPyAoUV9VSU5UMzIpKDE8PDIqSFNpemUpIDogMCkgKSB7fQogICAgUVNpemVQb2xpY3ko IFNpemVUeXBlIGhvciwgU2l6ZVR5cGUgdmVyLCB1Y2hhciBob3JzLCB1Y2hhciB2ZXJzLCBib29s IGhmdyA9IEZBTFNFICk7CgogICAgU2l6ZVR5cGUgaG9yRGF0YSgpIGNvbnN0IHsgcmV0dXJuIChT aXplVHlwZSkoIGRhdGEgJiBITWFzayApOyB9CiAgICBTaXplVHlwZSB2ZXJEYXRhKCkgY29uc3Qg eyByZXR1cm4gKFNpemVUeXBlKSgoIGRhdGEgJiBWTWFzayApID4+IEhTaXplKTsgfQoKICAgIGJv b2wgbWF5U2hyaW5rSG9yaXpvbnRhbGx5KCkgY29uc3QgeyByZXR1cm4gaG9yRGF0YSgpICYgTWF5 U2hyaW5rIHx8IGhvckRhdGEoKSA9PSBJZ25vcmVkOyB9CiAgICBib29sIG1heVNocmlua1ZlcnRp Y2FsbHkoKSBjb25zdCB7IHJldHVybiB2ZXJEYXRhKCkgJiBNYXlTaHJpbmsgfHwgdmVyRGF0YSgp ID09IElnbm9yZWQ7IH0KICAgIGJvb2wgbWF5R3Jvd0hvcml6b250YWxseSgpIGNvbnN0IHsgcmV0 dXJuIGhvckRhdGEoKSAmIE1heUdyb3cgfHwgaG9yRGF0YSgpID09IElnbm9yZWQ7IH0KICAgIGJv b2wgbWF5R3Jvd1ZlcnRpY2FsbHkoKSBjb25zdCB7IHJldHVybiB2ZXJEYXRhKCkgJiBNYXlHcm93 IHx8IHZlckRhdGEoKSA9PSBJZ25vcmVkOyB9CgogICAgRXhwYW5kRGF0YSBleHBhbmRpbmcoKSBj b25zdAogICAgewogICAgICAgIHJldHVybiAoRXhwYW5kRGF0YSkoIChpbnQpKHZlckRhdGEoKSZF eHBNYXNrID8gVmVydGljYWxseSA6IDApKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChp bnQpKGhvckRhdGEoKSZFeHBNYXNrID8gSG9yaXpvbnRhbGx5IDogMCkgKTsKICAgIH0KCiAgICB2 b2lkIHNldEhvckRhdGEoIFNpemVUeXBlIGQgKSB7IGRhdGEgPSAoUV9VSU5UMzIpKGRhdGEgJiB+ SE1hc2spIHwgZDsgfQogICAgdm9pZCBzZXRWZXJEYXRhKCBTaXplVHlwZSBkICkgeyBkYXRhID0g KFFfVUlOVDMyKShkYXRhICYgfihITWFzazw8SFNpemUpKSB8CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoZDw8SFNpemUpOyB9CgogICAgdm9pZCBzZXRIZWlnaHRG b3JXaWR0aCggYm9vbCBiICkgeyBkYXRhID0gYiA/IChRX1VJTlQzMikoIGRhdGEgfCAoIDEgPDwg MipIU2l6ZSApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDogKFFfVUlOVDMyKSggZGF0YSAmIH4oIDEgPDwgMipIU2l6ZSApICk7IH0KICAgIGJvb2wgaGFz SGVpZ2h0Rm9yV2lkdGgoKSBjb25zdCB7IHJldHVybiBkYXRhICYgKCAxIDw8IDIqSFNpemUgKTsg fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVNpemVQb2xpY3kmIHMgKSBjb25zdCB7IHJl dHVybiBkYXRhID09IHMuZGF0YTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRU2l6ZVBv bGljeSYgcyApIGNvbnN0IHsgcmV0dXJuIGRhdGEgIT0gcy5kYXRhOyB9CgoKICAgIHVpbnQgaG9y U3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEgPj4gMjQ7IH0KICAgIHVpbnQgdmVyU3RyZXRj aCgpIGNvbnN0IHsgcmV0dXJuIChkYXRhID4+IDE2KSAmIDB4ZmY7IH0KICAgIHZvaWQgc2V0SG9y U3RyZXRjaCggdWNoYXIgc2YgKSB7IGRhdGEgPSAoZGF0YSYweDAwZmZmZmZmKSB8ICh1aW50KHNm KTw8MjQpOyB9CiAgICB2b2lkIHNldFZlclN0cmV0Y2goIHVjaGFyIHNmICkgeyBkYXRhID0gKGRh dGEmMHhmZjAwZmZmZikgfCAodWludChzZik8PDE2KTsgfQoKcHJpdmF0ZToKICAgIFFTaXplUG9s aWN5KCBpbnQgaSApOiBkYXRhKCAoUV9VSU5UMzIpaSApIHt9CgogICAgUV9VSU5UMzIgZGF0YTsK fTsKCmlubGluZSBRU2l6ZVBvbGljeTo6UVNpemVQb2xpY3koIFNpemVUeXBlIGhvciwgU2l6ZVR5 cGUgdmVyLCB1Y2hhciBob3JzLCB1Y2hhciB2ZXJzLCBib29sIGhmdyApCiAgICA6IGRhdGEoIGhv ciB8ICh2ZXI8PEhTaXplKSB8IChoZncgPyAoUV9VSU5UMzIpKDE8PDIqSFNpemUpIDogMCkgKSB7 CiAgICAgICAgc2V0SG9yU3RyZXRjaCggaG9ycyApOwogICAgICAgIHNldFZlclN0cmV0Y2goIHZl cnMgKTsKfQojIDUwICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpZGdl dC5oIiAyCgoKY2xhc3MgUUxheW91dDsKc3RydWN0IFFXRXh0cmE7CnN0cnVjdCBRVExXRXh0cmE7 CmNsYXNzIFFGb2N1c0RhdGE7CmNsYXNzIFFDdXJzb3I7CmNsYXNzIFFXU1JlZ2lvbk1hbmFnZXI7 CmNsYXNzIFFTdHlsZTsKCmNsYXNzIFFXaWRnZXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFQ YWludERldmljZQp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3Qo KSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFy ICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiAp OyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wg cXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQs IGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgp OyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFT dHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmlu ZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0 aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAog ICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAg IAogICAKICAgCgogICAKICAgCgoKICAgCiAgIAogICAKCiAgIAogICAKICAgCiAgIAogICAKICAg CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKCnB1YmxpYzoKICAg IFFXaWRnZXQoIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAsIFdGbGFncyBm PTAgKTsKICAgIH5RV2lkZ2V0KCk7CgogICAgV0lkIHdpbklkKCkgY29uc3Q7CiAgICB2b2lkIHNl dE5hbWUoIGNvbnN0IGNoYXIgKm5hbWUgKTsKCgoKICAgIFFTdHlsZSAmc3R5bGUoKSBjb25zdDsK ICAgIHZvaWQgc2V0U3R5bGUoIFFTdHlsZSAqICk7CiAgICBRU3R5bGUqIHNldFN0eWxlKCBjb25z dCBRU3RyaW5nJiApOwoKCgogICAgYm9vbCBpc1RvcExldmVsKCkgY29uc3Q7CiAgICBib29sIGlz RGlhbG9nKCkgY29uc3Q7CiAgICBib29sIGlzUG9wdXAoKSBjb25zdDsKICAgIGJvb2wgaXNEZXNr dG9wKCkgY29uc3Q7CiAgICBib29sIGlzTW9kYWwoKSBjb25zdDsKCiAgICBib29sIGlzRW5hYmxl ZCgpIGNvbnN0OwogICAgYm9vbCBpc0VuYWJsZWRUbyhRV2lkZ2V0KikgY29uc3Q7CiAgICBib29s IGlzRW5hYmxlZFRvVExXKCkgY29uc3Q7CgpwdWJsaWMgOgogICAgdmlydHVhbCB2b2lkIHNldEVu YWJsZWQoIGJvb2wgKTsKICAgIHZvaWQgc2V0RGlzYWJsZWQoIGJvb2wgKTsKCgoKcHVibGljOgog ICAgUVJlY3QgZnJhbWVHZW9tZXRyeSgpIGNvbnN0OwogICAgY29uc3QgUVJlY3QgJmdlb21ldHJ5 KCkgY29uc3Q7CiAgICBpbnQgeCgpIGNvbnN0OwogICAgaW50IHkoKSBjb25zdDsKICAgIFFQb2lu dCBwb3MoKSBjb25zdDsKICAgIFFTaXplIGZyYW1lU2l6ZSgpIGNvbnN0OwogICAgUVNpemUgc2l6 ZSgpIGNvbnN0OwogICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7 CiAgICBRUmVjdCByZWN0KCkgY29uc3Q7CiAgICBRUmVjdCBjaGlsZHJlblJlY3QoKSBjb25zdDsK ICAgIFFSZWdpb24gY2hpbGRyZW5SZWdpb24oKSBjb25zdDsKCiAgICBRU2l6ZSBtaW5pbXVtU2l6 ZSgpIGNvbnN0OwogICAgUVNpemUgbWF4aW11bVNpemUoKSBjb25zdDsKICAgIGludCBtaW5pbXVt V2lkdGgoKSBjb25zdDsKICAgIGludCBtaW5pbXVtSGVpZ2h0KCkgY29uc3Q7CiAgICBpbnQgbWF4 aW11bVdpZHRoKCkgY29uc3Q7CiAgICBpbnQgbWF4aW11bUhlaWdodCgpIGNvbnN0OwogICAgdm9p ZCBzZXRNaW5pbXVtU2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdmlydHVhbCB2b2lkIHNldE1p bmltdW1TaXplKCBpbnQgbWludywgaW50IG1pbmggKTsKICAgIHZvaWQgc2V0TWF4aW11bVNpemUo IGNvbnN0IFFTaXplICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXhpbXVtU2l6ZSggaW50IG1h eHcsIGludCBtYXhoICk7CiAgICB2b2lkIHNldE1pbmltdW1XaWR0aCggaW50IG1pbncgKTsKICAg IHZvaWQgc2V0TWluaW11bUhlaWdodCggaW50IG1pbmggKTsKICAgIHZvaWQgc2V0TWF4aW11bVdp ZHRoKCBpbnQgbWF4dyApOwogICAgdm9pZCBzZXRNYXhpbXVtSGVpZ2h0KCBpbnQgbWF4aCApOwoK ICAgIFFTaXplIHNpemVJbmNyZW1lbnQoKSBjb25zdDsKICAgIHZvaWQgc2V0U2l6ZUluY3JlbWVu dCggY29uc3QgUVNpemUgJiApOwogICAgdmlydHVhbCB2b2lkIHNldFNpemVJbmNyZW1lbnQoIGlu dCB3LCBpbnQgaCApOwogICAgUVNpemUgYmFzZVNpemUoKSBjb25zdDsKICAgIHZvaWQgc2V0QmFz ZVNpemUoIGNvbnN0IFFTaXplICYgKTsKICAgIHZvaWQgc2V0QmFzZVNpemUoIGludCBiYXNldywg aW50IGJhc2VoICk7CgogICAgdm9pZCBzZXRGaXhlZFNpemUoIGNvbnN0IFFTaXplICYgKTsKICAg IHZvaWQgc2V0Rml4ZWRTaXplKCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgc2V0Rml4ZWRXaWR0 aCggaW50IHcgKTsKICAgIHZvaWQgc2V0Rml4ZWRIZWlnaHQoIGludCBoICk7CgoKCiAgICBRUG9p bnQgbWFwVG9HbG9iYWwoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFwRnJv bUdsb2JhbCggY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBUb1BhcmVudCgg Y29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBGcm9tUGFyZW50KCBjb25zdCBR UG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50IG1hcFRvKCBRV2lkZ2V0ICosIGNvbnN0IFFQb2lu dCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFwRnJvbSggUVdpZGdldCAqLCBjb25zdCBRUG9pbnQg JiApIGNvbnN0OwoKICAgIFFXaWRnZXQgKnRvcExldmVsV2lkZ2V0KCkgY29uc3Q7CgoKCiAgICBC YWNrZ3JvdW5kTW9kZSBiYWNrZ3JvdW5kTW9kZSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNl dEJhY2tncm91bmRNb2RlKCBCYWNrZ3JvdW5kTW9kZSApOwogICAgdm9pZCBzZXRCYWNrZ3JvdW5k TW9kZSggQmFja2dyb3VuZE1vZGUsIEJhY2tncm91bmRNb2RlICk7CgogICAgY29uc3QgUUNvbG9y ICYgZm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CgogICAgY29uc3QgUUNvbG9yICYgZXJhc2VDb2xv cigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEVyYXNlQ29sb3IoIGNvbnN0IFFDb2xvciAm ICk7CgogICAgY29uc3QgUVBpeG1hcCAqIGVyYXNlUGl4bWFwKCkgY29uc3Q7CiAgICB2aXJ0dWFs IHZvaWQgc2V0RXJhc2VQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiApOwoKCiAgICBjb25zdCBRQ29s b3JHcm91cCAmIGNvbG9yR3JvdXAoKSBjb25zdDsKICAgIGNvbnN0IFFQYWxldHRlICYgcGFsZXR0 ZSgpIGNvbnN0OwogICAgYm9vbCBvd25QYWxldHRlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQg c2V0UGFsZXR0ZSggY29uc3QgUVBhbGV0dGUgJiApOwogICAgdm9pZCB1bnNldFBhbGV0dGUoKTsK CgogICAgY29uc3QgUUNvbG9yICYgcGFsZXR0ZUZvcmVncm91bmRDb2xvcigpIGNvbnN0OwogICAg dm9pZCBzZXRQYWxldHRlRm9yZWdyb3VuZENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwoKICAgIGNv bnN0IFFDb2xvciAmIHBhbGV0dGVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgIHZpcnR1YWwg dm9pZCBzZXRQYWxldHRlQmFja2dyb3VuZENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwoKICAgIGNv bnN0IFFQaXhtYXAgKiBwYWxldHRlQmFja2dyb3VuZFBpeG1hcCgpIGNvbnN0OwogICAgdmlydHVh bCB2b2lkIHNldFBhbGV0dGVCYWNrZ3JvdW5kUGl4bWFwKCBjb25zdCBRUGl4bWFwICYgKTsKCiAg ICBjb25zdCBRQnJ1c2gmIGJhY2tncm91bmRCcnVzaCgpIGNvbnN0OwoKICAgIFFGb250IGZvbnQo KSBjb25zdDsKICAgIGJvb2wgb3duRm9udCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZv bnQoIGNvbnN0IFFGb250ICYgKTsKICAgIHZvaWQgdW5zZXRGb250KCk7CiAgICBRRm9udE1ldHJp Y3MgZm9udE1ldHJpY3MoKSBjb25zdDsKICAgIFFGb250SW5mbyBmb250SW5mbygpIGNvbnN0OwoK CiAgICBjb25zdCBRQ3Vyc29yICZjdXJzb3IoKSBjb25zdDsKICAgIGJvb2wgb3duQ3Vyc29yKCkg Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKCBjb25zdCBRQ3Vyc29yICYgKTsKICAg IHZpcnR1YWwgdm9pZCB1bnNldEN1cnNvcigpOwoKCiAgICBRU3RyaW5nIGNhcHRpb24oKSBjb25z dDsKICAgIGNvbnN0IFFQaXhtYXAgKmljb24oKSBjb25zdDsKICAgIFFTdHJpbmcgaWNvblRleHQo KSBjb25zdDsKCiAgICBib29sIGhhc01vdXNlVHJhY2tpbmcoKSBjb25zdDsKICAgIGJvb2wgaGFz TW91c2UoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0TWFzayggY29uc3QgUUJpdG1hcCAm ICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWFzayggY29uc3QgUVJlZ2lvbiAmICk7CiAgICB2b2lk IGNsZWFyTWFzaygpOwoKICAgIGNvbnN0IFFDb2xvciAmIGJhY2tncm91bmRDb2xvcigpIGNvbnN0 OwogICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvciggY29uc3QgUUNvbG9yICYgKTsK ICAgIGNvbnN0IFFQaXhtYXAgKiBiYWNrZ3JvdW5kUGl4bWFwKCkgY29uc3Q7CiAgICB2aXJ0dWFs IHZvaWQgc2V0QmFja2dyb3VuZFBpeG1hcCggY29uc3QgUVBpeG1hcCAmICk7CgpwdWJsaWMgOgoK ICAgIHZpcnR1YWwgdm9pZCBzZXRDYXB0aW9uKCBjb25zdCBRU3RyaW5nICYpOwogICAgdmlydHVh bCB2b2lkIHNldEljb24oIGNvbnN0IFFQaXhtYXAgJiApOwogICAgdmlydHVhbCB2b2lkIHNldElj b25UZXh0KCBjb25zdCBRU3RyaW5nICYpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRNb3VzZVRyYWNr aW5nKCBib29sIGVuYWJsZSApOwoKCgogICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7CiAgICB2 b2lkIGNsZWFyRm9jdXMoKTsKCnB1YmxpYzoKICAgIGVudW0gRm9jdXNQb2xpY3kgewogICAgICAg IE5vRm9jdXMgPSAwLAogICAgICAgIFRhYkZvY3VzID0gMHgxLAogICAgICAgIENsaWNrRm9jdXMg PSAweDIsCiAgICAgICAgU3Ryb25nRm9jdXMgPSAweDMsCiAgICAgICAgV2hlZWxGb2N1cyA9IDB4 NwogICAgfTsKCiAgICBib29sIGlzQWN0aXZlV2luZG93KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZv aWQgc2V0QWN0aXZlV2luZG93KCk7CiAgICBib29sIGlzRm9jdXNFbmFibGVkKCkgY29uc3Q7Cgog ICAgRm9jdXNQb2xpY3kgZm9jdXNQb2xpY3koKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRG b2N1c1BvbGljeSggRm9jdXNQb2xpY3kgKTsKICAgIGJvb2wgaGFzRm9jdXMoKSBjb25zdDsKICAg IHN0YXRpYyB2b2lkIHNldFRhYk9yZGVyKCBRV2lkZ2V0ICosIFFXaWRnZXQgKiApOwogICAgdmly dHVhbCB2b2lkIHNldEZvY3VzUHJveHkoIFFXaWRnZXQgKiApOwogICAgUVdpZGdldCAqIGZvY3Vz UHJveHkoKSBjb25zdDsKCgoKICAgIHZvaWQgZ3JhYk1vdXNlKCk7CgogICAgdm9pZCBncmFiTW91 c2UoIGNvbnN0IFFDdXJzb3IgJiApOwoKICAgIHZvaWQgcmVsZWFzZU1vdXNlKCk7CiAgICB2b2lk IGdyYWJLZXlib2FyZCgpOwogICAgdm9pZCByZWxlYXNlS2V5Ym9hcmQoKTsKICAgIHN0YXRpYyBR V2lkZ2V0ICogbW91c2VHcmFiYmVyKCk7CiAgICBzdGF0aWMgUVdpZGdldCAqIGtleWJvYXJkR3Jh YmJlcigpOwoKCgogICAgYm9vbCBpc1VwZGF0ZXNFbmFibGVkKCkgY29uc3Q7CgoKCgpwdWJsaWMg OgogICAgdmlydHVhbCB2b2lkIHNldFVwZGF0ZXNFbmFibGVkKCBib29sIGVuYWJsZSApOwogICAg dm9pZCB1cGRhdGUoKTsKICAgIHZvaWQgdXBkYXRlKCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg aCApOwogICAgdm9pZCB1cGRhdGUoIGNvbnN0IFFSZWN0JiApOwogICAgdm9pZCByZXBhaW50KCk7 CiAgICB2b2lkIHJlcGFpbnQoIGJvb2wgZXJhc2UgKTsKICAgIHZvaWQgcmVwYWludCggaW50IHgs IGludCB5LCBpbnQgdywgaW50IGgsIGJvb2wgZXJhc2U9VFJVRSApOwogICAgdm9pZCByZXBhaW50 KCBjb25zdCBRUmVjdCAmLCBib29sIGVyYXNlID0gVFJVRSApOwogICAgdm9pZCByZXBhaW50KCBj b25zdCBRUmVnaW9uICYsIGJvb2wgZXJhc2UgPSBUUlVFICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQg c2hvdygpOwogICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKCiAgICB2b2lkIGljb25pZnkoKSB7IHNo b3dNaW5pbWl6ZWQoKTsgfQoKICAgIHZpcnR1YWwgdm9pZCBzaG93TWluaW1pemVkKCk7CiAgICB2 aXJ0dWFsIHZvaWQgc2hvd01heGltaXplZCgpOwogICAgdm9pZCBzaG93RnVsbFNjcmVlbigpOwog ICAgdmlydHVhbCB2b2lkIHNob3dOb3JtYWwoKTsKICAgIHZpcnR1YWwgdm9pZCBwb2xpc2goKTsK ICAgIHZvaWQgY29uc3RQb2xpc2goKSBjb25zdDsKICAgIGJvb2wgY2xvc2UoKTsKCiAgICB2b2lk IHJhaXNlKCk7CiAgICB2b2lkIGxvd2VyKCk7CiAgICB2b2lkIHN0YWNrVW5kZXIoIFFXaWRnZXQq ICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZSggaW50IHgsIGludCB5ICk7CiAgICB2b2lkIG1vdmUo IGNvbnN0IFFQb2ludCAmICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKCBpbnQgdywgaW50IGgg KTsKICAgIHZvaWQgcmVzaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0 R2VvbWV0cnkoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2aXJ0dWFsIHZvaWQg c2V0R2VvbWV0cnkoIGNvbnN0IFFSZWN0ICYgKTsKCnB1YmxpYzoKICAgIHZpcnR1YWwgYm9vbCBj bG9zZSggYm9vbCBhbHNvRGVsZXRlICk7CiAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwogICAg Ym9vbCBpc1Zpc2libGVUbyhRV2lkZ2V0KikgY29uc3Q7CiAgICBib29sIGlzVmlzaWJsZVRvVExX KCkgY29uc3Q7CiAgICBRUmVjdCB2aXNpYmxlUmVjdCgpIGNvbnN0OwogICAgYm9vbCBpc0hpZGRl bigpIGNvbnN0OwogICAgYm9vbCBpc01pbmltaXplZCgpIGNvbnN0OwogICAgYm9vbCBpc01heGlt aXplZCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgUVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKICAgIHZp cnR1YWwgUVNpemUgbWluaW11bVNpemVIaW50KCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTaXplUG9s aWN5IHNpemVQb2xpY3koKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplUG9saWN5KCBR U2l6ZVBvbGljeSApOwogICAgdmlydHVhbCBpbnQgaGVpZ2h0Rm9yV2lkdGgoaW50KSBjb25zdDsK CiAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2l6ZSgpOwoKICAgIFFMYXlvdXQgKiBsYXlvdXQoKSBj b25zdCB7IHJldHVybiBsYXlfb3V0OyB9CgogICAgdm9pZCB1cGRhdGVHZW9tZXRyeSgpOwogICAg dmlydHVhbCB2b2lkIHJlcGFyZW50KCBRV2lkZ2V0ICpwYXJlbnQsIFdGbGFncywgY29uc3QgUVBv aW50ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNob3dJdD1GQUxT RSApOwogICAgdm9pZCByZXBhcmVudCggUVdpZGdldCAqcGFyZW50LCBjb25zdCBRUG9pbnQgJiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvd0l0PUZBTFNFICk7Cgog ICAgdm9pZCByZWNyZWF0ZSggUVdpZGdldCAqcGFyZW50LCBXRmxhZ3MgZiwgY29uc3QgUVBvaW50 ICYgcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvd0l0PUZBTFNF ICkgeyByZXBhcmVudChwYXJlbnQsZixwLHNob3dJdCk7IH0KCgogICAgdm9pZCBlcmFzZSgpOwog ICAgdm9pZCBlcmFzZSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgZXJh c2UoIGNvbnN0IFFSZWN0ICYgKTsKICAgIHZvaWQgZXJhc2UoIGNvbnN0IFFSZWdpb24gJiApOwog ICAgdm9pZCBzY3JvbGwoIGludCBkeCwgaW50IGR5ICk7CiAgICB2b2lkIHNjcm9sbCggaW50IGR4 LCBpbnQgZHksIGNvbnN0IFFSZWN0JiApOwoKICAgIHZvaWQgZHJhd1RleHQoIGludCB4LCBpbnQg eSwgY29uc3QgUVN0cmluZyAmKTsKICAgIHZvaWQgZHJhd1RleHQoIGNvbnN0IFFQb2ludCAmLCBj b25zdCBRU3RyaW5nICYpOwoKCgogICAgUVdpZGdldCAqIGZvY3VzV2lkZ2V0KCkgY29uc3Q7CiAg ICBRUmVjdCBtaWNyb0ZvY3VzSGludCgpIGNvbnN0OwoKCgogICAgYm9vbCBhY2NlcHREcm9wcygp IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEFjY2VwdERyb3BzKCBib29sIG9uICk7CgoKCiAg ICB2aXJ0dWFsIHZvaWQgc2V0QXV0b01hc2soYm9vbCk7CiAgICBib29sIGF1dG9NYXNrKCkgY29u c3Q7CgogICAgZW51bSBCYWNrZ3JvdW5kT3JpZ2luIHsgV2lkZ2V0T3JpZ2luLCBQYXJlbnRPcmln aW4sIFdpbmRvd09yaWdpbiB9OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kT3JpZ2lu KCBCYWNrZ3JvdW5kT3JpZ2luICk7CiAgICBCYWNrZ3JvdW5kT3JpZ2luIGJhY2tncm91bmRPcmln aW4oKSBjb25zdDsKCgoKICAgIHZpcnR1YWwgYm9vbCBjdXN0b21XaGF0c1RoaXMoKSBjb25zdDsK CiAgICBRV2lkZ2V0ICogcGFyZW50V2lkZ2V0KCBib29sIHNhbWVXaW5kb3cgPSBGQUxTRSApIGNv bnN0OwogICAgV1N0YXRlIHRlc3RXU3RhdGUoIFdTdGF0ZSBzICkgY29uc3Q7CiAgICBXRmxhZ3Mg dGVzdFdGbGFncyggV0ZsYWdzIGYgKSBjb25zdDsKICAgIHN0YXRpYyBRV2lkZ2V0ICogZmluZCgg V0lkICk7CiAgICBzdGF0aWMgUVdpZGdldE1hcHBlciAqd21hcHBlcigpOwoKICAgIFFXaWRnZXQg KmNoaWxkQXQoIGludCB4LCBpbnQgeSwgYm9vbCBpbmNsdWRlVGhpcyA9IEZBTFNFICkgY29uc3Q7 CiAgICBRV2lkZ2V0ICpjaGlsZEF0KCBjb25zdCBRUG9pbnQgJiwgYm9vbCBpbmNsdWRlVGhpcyA9 IEZBTFNFICkgY29uc3Q7CiMgNDQ3ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1 ZGUvcXdpZGdldC5oIgpwcm90ZWN0ZWQ6CgogICAgYm9vbCBldmVudCggUUV2ZW50ICogKTsKICAg IHZpcnR1YWwgdm9pZCBtb3VzZVByZXNzRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZpcnR1 YWwgdm9pZCBtb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdmlydHVhbCB2 b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdmlydHVhbCB2 b2lkIG1vdXNlTW92ZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CgogICAgdmlydHVhbCB2b2lkIHdo ZWVsRXZlbnQoIFFXaGVlbEV2ZW50ICogKTsKCiAgICB2aXJ0dWFsIHZvaWQga2V5UHJlc3NFdmVu dCggUUtleUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQoIFFLZXlF dmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KCBRRm9jdXNFdmVudCAqICk7 CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdmly dHVhbCB2b2lkIGVudGVyRXZlbnQoIFFFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbGVhdmVF dmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVu dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZUV2ZW50KCBRTW92ZUV2ZW50ICogKTsKICAgIHZp cnR1YWwgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9p ZCBjbG9zZUV2ZW50KCBRQ2xvc2VFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1l bnVFdmVudCggUUNvbnRleHRNZW51RXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGltU3RhcnRF dmVudCggUUlNRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGltQ29tcG9zZUV2ZW50KCBRSU1F dmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgaW1FbmRFdmVudCggUUlNRXZlbnQgKiApOwogICAg dmlydHVhbCB2b2lkIHRhYmxldEV2ZW50KCBRVGFibGV0RXZlbnQgKiApOwoKCiAgICB2aXJ0dWFs IHZvaWQgZHJhZ0VudGVyRXZlbnQoIFFEcmFnRW50ZXJFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZv aWQgZHJhZ01vdmVFdmVudCggUURyYWdNb3ZlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGRy YWdMZWF2ZUV2ZW50KCBRRHJhZ0xlYXZlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGRyb3BF dmVudCggUURyb3BFdmVudCAqICk7CgoKICAgIHZpcnR1YWwgdm9pZCBzaG93RXZlbnQoIFFTaG93 RXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGhpZGVFdmVudCggUUhpZGVFdmVudCAqICk7CiMg NDkwICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXdpZGdldC5oIgogICAg dmlydHVhbCBib29sIHgxMUV2ZW50KCBYRXZlbnQgKiApOwoKCgoKCgoKICAgIHZpcnR1YWwgdm9p ZCB1cGRhdGVNYXNrKCk7CgoKCgogICAgdmlydHVhbCB2b2lkIHN0eWxlQ2hhbmdlKCBRU3R5bGUm ICk7CgogICAgdmlydHVhbCB2b2lkIGVuYWJsZWRDaGFuZ2UoIGJvb2wgb2xkRW5hYmxlZCApOwoK ICAgIHZpcnR1YWwgdm9pZCBwYWxldHRlQ2hhbmdlKCBjb25zdCBRUGFsZXR0ZSAmICk7CgogICAg dmlydHVhbCB2b2lkIGZvbnRDaGFuZ2UoIGNvbnN0IFFGb250ICYgKTsKICAgIHZpcnR1YWwgdm9p ZCB3aW5kb3dBY3RpdmF0aW9uQ2hhbmdlKCBib29sIG9sZEFjdGl2ZSApOwoKICAgIGludCBtZXRy aWMoIGludCApIGNvbnN0OwoKICAgIHZvaWQgcmVzZXRJbnB1dENvbnRleHQoKTsKCiAgICB2aXJ0 dWFsIHZvaWQgY3JlYXRlKCBXSWQgPSAwLCBib29sIGluaXRpYWxpemVXaW5kb3cgPSBUUlVFLAog ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXN0cm95T2xkV2luZG93ID0gVFJVRSApOwog ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koIGJvb2wgZGVzdHJveVdpbmRvdyA9IFRSVUUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXN0cm95U3ViV2luZG93cyA9IFRSVUUgKTsKICAg IHVpbnQgZ2V0V1N0YXRlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0V1N0YXRlKCB1aW50 ICk7CiAgICB2b2lkIGNsZWFyV1N0YXRlKCB1aW50IG4gKTsKICAgIFdGbGFncyBnZXRXRmxhZ3Mo KSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRXRmxhZ3MoIFdGbGFncyApOwogICAgdm9pZCBj bGVhcldGbGFncyggV0ZsYWdzIG4gKTsKCiAgICB2aXJ0dWFsIGJvb2wgZm9jdXNOZXh0UHJldkNo aWxkKCBib29sIG5leHQgKTsKCiAgICBRV0V4dHJhICpleHRyYURhdGEoKTsKICAgIFFUTFdFeHRy YSAqdG9wRGF0YSgpOwogICAgUUZvY3VzRGF0YSAqZm9jdXNEYXRhKCk7CgogICAgdmlydHVhbCB2 b2lkIHNldEtleUNvbXByZXNzaW9uKGJvb2wpOwogICAgdmlydHVhbCB2b2lkIHNldE1pY3JvRm9j dXNIaW50KGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBib29sIHRleHQ9VFJVRSwgUUZvbnQg KmYgPSAwKTsKCgoKCgoKcHJpdmF0ZSA6CiAgICB2b2lkIGZvY3VzUHJveHlEZXN0cm95ZWQoKTsK CnByaXZhdGU6CiAgICB2b2lkIHNldEZvbnRTeXMoIFFGb250ICpmID0gMCApOwoKICAgIHZvaWQg Y3JlYXRlSW5wdXRDb250ZXh0KCk7CiAgICB2b2lkIGRlc3Ryb3lJbnB1dENvbnRleHQoKTsKICAg IHZvaWQgZm9jdXNJbnB1dENvbnRleHQoKTsKICAgIHZvaWQgY2hlY2tDaGlsZHJlbkRuZCgpOwoj IDU2OSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3F3aWRnZXQuaCIKICAg IHZvaWQgc2V0TGF5b3V0KCBRTGF5b3V0ICpsICk7CgogICAgdm9pZCBzZXRXaW5JZCggV0lkICk7 CiAgICB2b2lkIHNob3dXaW5kb3coKTsKICAgIHZvaWQgaGlkZVdpbmRvdygpOwogICAgdm9pZCBz ZW5kU2hvd0V2ZW50c1RvQ2hpbGRyZW4oIGJvb2wgc3BvbnRhbmVvdXMgKTsKICAgIHZvaWQgc2Vu ZEhpZGVFdmVudHNUb0NoaWxkcmVuKCBib29sIHNwb250YW5lb3VzICk7CiAgICB2b2lkIHJlcGFy ZW50U3lzKCBRV2lkZ2V0ICpwYXJlbnQsIFdGbGFncywgY29uc3QgUVBvaW50ICYsIGJvb2wgc2hv d0l0KTsKICAgIHZvaWQgY3JlYXRlVExFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVFeHRyYSgpOwog ICAgdm9pZCBkZWxldGVFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVTeXNFeHRyYSgpOwogICAgdm9p ZCBkZWxldGVTeXNFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVUTFN5c0V4dHJhKCk7CiAgICB2b2lk IGRlbGV0ZVRMU3lzRXh0cmEoKTsKICAgIHZvaWQgZGVhY3RpdmF0ZVdpZGdldENsZWFudXAoKTsK ICAgIHZvaWQgaW50ZXJuYWxTZXRHZW9tZXRyeSggaW50LCBpbnQsIGludCwgaW50LCBib29sICk7 CiAgICB2b2lkIHJlcGFyZW50Rm9jdXNXaWRnZXRzKCBRV2lkZ2V0ICogKTsKICAgIFFGb2N1c0Rh dGEgKmZvY3VzRGF0YSggYm9vbCBjcmVhdGUgKTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZEZyb21N b2RlKCk7CiAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvckRpcmVjdCggY29uc3QgUUNvbG9yICYg KTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZFBpeG1hcERpcmVjdCggY29uc3QgUVBpeG1hcCAmICk7 CiAgICB2b2lkIHNldEJhY2tncm91bmRNb2RlRGlyZWN0KCBCYWNrZ3JvdW5kTW9kZSApOwogICAg dm9pZCBzZXRCYWNrZ3JvdW5kRW1wdHkoKTsKICAgIHZvaWQgdXBkYXRlRnJhbWVTdHJ1dCgpIGNv bnN0OwoKICAgIHZvaWQgc2V0QmFja2dyb3VuZFgxMVJlbGF0aXZlKCk7CgoKICAgIFdJZCB3aW5p ZDsKICAgIHVpbnQgd2lkZ2V0X3N0YXRlOwogICAgdWludCB3aWRnZXRfZmxhZ3M7CiAgICB1aW50 IGZvY3VzX3BvbGljeSA6IDQ7CiAgICB1aW50IG93bl9mb250IDoxOwogICAgdWludCBvd25fcGFs ZXR0ZSA6MTsKICAgIHVpbnQgc2l6ZWhpbnRfZm9yY2VkIDoxOwogICAgdWludCBpc19jbG9zaW5n IDoxOwogICAgdWludCBpbl9zaG93IDogMTsKICAgIHVpbnQgaW5fc2hvd19tYXhpbWl6ZWQgOiAx OwogICAgdWludCBmc3RydXRfZGlydHkgOiAxOwogICAgUVJlY3QgY3JlY3Q7CiAgICBRQ29sb3Ig YmdfY29sOwoKICAgIFFQYWxldHRlIHBhbDsKCiAgICBRRm9udCBmbnQ7CgogICAgUUxheW91dCAq bGF5X291dDsKCiAgICBRV0V4dHJhICpleHRyYTsKIyA2NDMgIi91c3IvbG9jYWwvcXQteDExLWZy ZWUtMy4wLjYvaW5jbHVkZS9xd2lkZ2V0LmgiCiAgICBzdGF0aWMgdm9pZCBjcmVhdGVNYXBwZXIo KTsKICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lNYXBwZXIoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TGlz dCAqd0xpc3QoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqdGx3TGlzdCgpOwogICAgc3RhdGlj IFFXaWRnZXRNYXBwZXIgKm1hcHBlcjsKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAg ICBmcmllbmQgY2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRl cjsKICAgIGZyaWVuZCBjbGFzcyBRRm9udE1ldHJpY3M7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRJ bmZvOwogICAgZnJpZW5kIGNsYXNzIFFFVFdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRTGF5b3V0 OwoKcHJpdmF0ZToKCiAgICBRV2lkZ2V0KCBjb25zdCBRV2lkZ2V0ICYgKTsKICAgIFFXaWRnZXQg Jm9wZXJhdG9yPSggY29uc3QgUVdpZGdldCAmICk7CgoKcHVibGljOgoKICAgIHZvaWQgc2V0UGFs ZXR0ZSggY29uc3QgUVBhbGV0dGUgJnAsIGJvb2wgKSB7IHNldFBhbGV0dGUoIHAgKTsgfQoKICAg IHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQgJmYsIGJvb2wgKSB7IHNldEZvbnQoIGYgKTsgfQp9 OwoKCmlubGluZSBRdDo6V1N0YXRlIFFXaWRnZXQ6OnRlc3RXU3RhdGUoIFdTdGF0ZSBzICkgY29u c3QKeyByZXR1cm4gKHdpZGdldF9zdGF0ZSAmIHMpOyB9CgppbmxpbmUgUXQ6OldGbGFncyBRV2lk Z2V0Ojp0ZXN0V0ZsYWdzKCBXRmxhZ3MgZiApIGNvbnN0CnsgcmV0dXJuICh3aWRnZXRfZmxhZ3Mg JiBmKTsgfQoKCmlubGluZSBXSWQgUVdpZGdldDo6d2luSWQoKSBjb25zdAp7IHJldHVybiB3aW5p ZDsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNUb3BMZXZlbCgpIGNvbnN0CnsgcmV0dXJuIHRl c3RXRmxhZ3MoV1R5cGVfVG9wTGV2ZWwpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0RpYWxv ZygpIGNvbnN0CnsgcmV0dXJuIHRlc3RXRmxhZ3MoV1R5cGVfRGlhbG9nKTsgfQoKaW5saW5lIGJv b2wgUVdpZGdldDo6aXNQb3B1cCgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXRmxhZ3MoV1R5cGVfUG9w dXApOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0Rlc2t0b3AoKSBjb25zdAp7IHJldHVybiB0 ZXN0V0ZsYWdzKFdUeXBlX0Rlc2t0b3ApOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0VuYWJs ZWQoKSBjb25zdAp7IHJldHVybiAhdGVzdFdTdGF0ZShXU3RhdGVfRGlzYWJsZWQpOyB9Cgppbmxp bmUgYm9vbCBRV2lkZ2V0Ojppc01vZGFsKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXU2hv d01vZGFsKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNFbmFibGVkVG9UTFcoKSBjb25zdAp7 IHJldHVybiBpc0VuYWJsZWQoKTsgfQoKaW5saW5lIGNvbnN0IFFSZWN0ICZRV2lkZ2V0OjpnZW9t ZXRyeSgpIGNvbnN0CnsgcmV0dXJuIGNyZWN0OyB9CgppbmxpbmUgUVNpemUgUVdpZGdldDo6c2l6 ZSgpIGNvbnN0CnsgcmV0dXJuIGNyZWN0LnNpemUoKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0Ojp3 aWR0aCgpIGNvbnN0CnsgcmV0dXJuIGNyZWN0LndpZHRoKCk7IH0KCmlubGluZSBpbnQgUVdpZGdl dDo6aGVpZ2h0KCkgY29uc3QKeyByZXR1cm4gY3JlY3QuaGVpZ2h0KCk7IH0KCmlubGluZSBRUmVj dCBRV2lkZ2V0OjpyZWN0KCkgY29uc3QKeyByZXR1cm4gUVJlY3QoMCwwLGNyZWN0LndpZHRoKCks Y3JlY3QuaGVpZ2h0KCkpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6Om1pbmltdW1XaWR0aCgpIGNv bnN0CnsgcmV0dXJuIG1pbmltdW1TaXplKCkud2lkdGgoKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0 OjptaW5pbXVtSGVpZ2h0KCkgY29uc3QKeyByZXR1cm4gbWluaW11bVNpemUoKS5oZWlnaHQoKTsg fQoKaW5saW5lIGludCBRV2lkZ2V0OjptYXhpbXVtV2lkdGgoKSBjb25zdAp7IHJldHVybiBtYXhp bXVtU2l6ZSgpLndpZHRoKCk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6bWF4aW11bUhlaWdodCgp IGNvbnN0CnsgcmV0dXJuIG1heGltdW1TaXplKCkuaGVpZ2h0KCk7IH0KCmlubGluZSB2b2lkIFFX aWRnZXQ6OnNldE1pbmltdW1TaXplKCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0TWluaW11bVNpemUo cy53aWR0aCgpLHMuaGVpZ2h0KCkpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRNYXhpbXVt U2l6ZSggY29uc3QgUVNpemUgJnMgKQp7IHNldE1heGltdW1TaXplKHMud2lkdGgoKSxzLmhlaWdo dCgpKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0U2l6ZUluY3JlbWVudCggY29uc3QgUVNp emUgJnMgKQp7IHNldFNpemVJbmNyZW1lbnQocy53aWR0aCgpLHMuaGVpZ2h0KCkpOyB9Cgppbmxp bmUgdm9pZCBRV2lkZ2V0OjpzZXRCYXNlU2l6ZSggY29uc3QgUVNpemUgJnMgKQp7IHNldEJhc2VT aXplKHMud2lkdGgoKSxzLmhlaWdodCgpKTsgfQoKaW5saW5lIGNvbnN0IFFDb2xvciAmUVdpZGdl dDo6ZXJhc2VDb2xvcigpIGNvbnN0CnsgcmV0dXJuIGJnX2NvbDsgfQoKCmlubGluZSBjb25zdCBR UGFsZXR0ZSAmUVdpZGdldDo6cGFsZXR0ZSgpIGNvbnN0CnsgcmV0dXJuIHBhbDsgfQoKCmlubGlu ZSBRRm9udCBRV2lkZ2V0Ojpmb250KCkgY29uc3QKeyByZXR1cm4gZm50OyB9CgppbmxpbmUgUUZv bnRNZXRyaWNzIFFXaWRnZXQ6OmZvbnRNZXRyaWNzKCkgY29uc3QKeyByZXR1cm4gUUZvbnRNZXRy aWNzKGZvbnQoKSk7IH0KCmlubGluZSBRRm9udEluZm8gUVdpZGdldDo6Zm9udEluZm8oKSBjb25z dAp7IHJldHVybiBRRm9udEluZm8oZm9udCgpKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aGFz TW91c2VUcmFja2luZygpIGNvbnN0CnsgcmV0dXJuIHRlc3RXU3RhdGUoV1N0YXRlX01vdXNlVHJh Y2tpbmcpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0OjpoYXNNb3VzZSgpIGNvbnN0CnsgcmV0dXJu IHRlc3RXU3RhdGUoV1N0YXRlX0hhc01vdXNlKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNG b2N1c0VuYWJsZWQoKSBjb25zdAp7IHJldHVybiAoRm9jdXNQb2xpY3kpZm9jdXNfcG9saWN5ICE9 IE5vRm9jdXM7IH0KCmlubGluZSBRV2lkZ2V0OjpGb2N1c1BvbGljeSBRV2lkZ2V0Ojpmb2N1c1Bv bGljeSgpIGNvbnN0CnsgcmV0dXJuIChGb2N1c1BvbGljeSlmb2N1c19wb2xpY3k7IH0KCmlubGlu ZSBib29sIFFXaWRnZXQ6OmlzVXBkYXRlc0VuYWJsZWQoKSBjb25zdAp7IHJldHVybiAhdGVzdFdT dGF0ZShXU3RhdGVfQmxvY2tVcGRhdGVzKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6dXBkYXRl KCBjb25zdCBRUmVjdCAmciApCnsgdXBkYXRlKCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5o ZWlnaHQoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpyZXBhaW50KCkKeyByZXBhaW50KCAw LCAwLCBjcmVjdC53aWR0aCgpLCBjcmVjdC5oZWlnaHQoKSwgVFJVRSApOyB9CgppbmxpbmUgdm9p ZCBRV2lkZ2V0OjpyZXBhaW50KCBib29sIGVyYXNlICkKeyByZXBhaW50KCAwLCAwLCBjcmVjdC53 aWR0aCgpLCBjcmVjdC5oZWlnaHQoKSwgZXJhc2UgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6 cmVwYWludCggY29uc3QgUVJlY3QgJnIsIGJvb2wgZXJhc2UgKQp7IHJlcGFpbnQoIHIueCgpLCBy LnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpLCBlcmFzZSApOyB9CgppbmxpbmUgdm9pZCBRV2lk Z2V0OjplcmFzZSgpCnsgZXJhc2UoIDAsIDAsIGNyZWN0LndpZHRoKCksIGNyZWN0LmhlaWdodCgp ICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmVyYXNlKCBjb25zdCBRUmVjdCAmciApCnsgZXJh c2UoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7IH0KCmlubGluZSBib29s IFFXaWRnZXQ6OmNsb3NlKCkKeyByZXR1cm4gY2xvc2UoIEZBTFNFICk7IH0KCmlubGluZSBib29s IFFXaWRnZXQ6OmlzVmlzaWJsZSgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXU3RhdGUoV1N0YXRlX1Zp c2libGUpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc1Zpc2libGVUb1RMVygpIGNvbnN0Cnsg cmV0dXJuIGlzVmlzaWJsZSgpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0hpZGRlbigpIGNv bnN0CnsgcmV0dXJuIHRlc3RXU3RhdGUoV1N0YXRlX0ZvcmNlSGlkZSk7IH0KCmlubGluZSB2b2lk IFFXaWRnZXQ6Om1vdmUoIGNvbnN0IFFQb2ludCAmcCApCnsgbW92ZSggcC54KCksIHAueSgpICk7 IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnJlc2l6ZSggY29uc3QgUVNpemUgJnMgKQp7IHJlc2l6 ZSggcy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0R2Vv bWV0cnkoIGNvbnN0IFFSZWN0ICZyICkKeyBzZXRHZW9tZXRyeSggci5sZWZ0KCksIHIudG9wKCks IHIud2lkdGgoKSwgci5oZWlnaHQoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpkcmF3VGV4 dCggY29uc3QgUVBvaW50ICZwLCBjb25zdCBRU3RyaW5nICZzICkKeyBkcmF3VGV4dCggcC54KCks IHAueSgpLCBzICk7IH0KCmlubGluZSBRV2lkZ2V0ICpRV2lkZ2V0OjpwYXJlbnRXaWRnZXQoIGJv b2wgc2FtZVdpbmRvdyApIGNvbnN0CnsKICAgIGlmICggc2FtZVdpbmRvdyApCiAgICAgICAgcmV0 dXJuIGlzVG9wTGV2ZWwoKSA/IDAgOiAoUVdpZGdldCAqKVFPYmplY3Q6OnBhcmVudCgpOwogICAg cmV0dXJuIChRV2lkZ2V0ICopUU9iamVjdDo6cGFyZW50KCk7Cn0KCmlubGluZSBRV2lkZ2V0TWFw cGVyICpRV2lkZ2V0Ojp3bWFwcGVyKCkKeyByZXR1cm4gbWFwcGVyOyB9CgppbmxpbmUgdWludCBR V2lkZ2V0OjpnZXRXU3RhdGUoKSBjb25zdAp7IHJldHVybiB3aWRnZXRfc3RhdGU7IH0KCmlubGlu ZSB2b2lkIFFXaWRnZXQ6OnNldFdTdGF0ZSggdWludCBmICkKeyB3aWRnZXRfc3RhdGUgfD0gZjsg fQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y2xlYXJXU3RhdGUoIHVpbnQgZiApCnsgd2lkZ2V0X3N0 YXRlICY9IH5mOyB9CgppbmxpbmUgUXQ6OldGbGFncyBRV2lkZ2V0OjpnZXRXRmxhZ3MoKSBjb25z dAp7IHJldHVybiB3aWRnZXRfZmxhZ3M7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldFdGbGFn cyggV0ZsYWdzIGYgKQp7IHdpZGdldF9mbGFncyB8PSBmOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0 OjpjbGVhcldGbGFncyggV0ZsYWdzIGYgKQp7IHdpZGdldF9mbGFncyAmPSB+ZjsgfQoKaW5saW5l IHZvaWQgUVdpZGdldDo6Y29uc3RQb2xpc2goKSBjb25zdAp7CiAgICBpZiAoICF0ZXN0V1N0YXRl KFdTdGF0ZV9Qb2xpc2hlZCkgKSB7CiAgICAgICAgUVdpZGdldCogdGhhdCA9IChRV2lkZ2V0Kikg dGhpczsKICAgICAgICB0aGF0LT5wb2xpc2goKTsKICAgICAgICB0aGF0LT5zZXRXU3RhdGUoV1N0 YXRlX1BvbGlzaGVkKTsKICAgIH0KfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6b3duQ3Vyc29yKCkg Y29uc3QKewogICAgcmV0dXJuIHRlc3RXU3RhdGUoIFdTdGF0ZV9Pd25DdXJzb3IgKTsKfQoKaW5s aW5lIGJvb2wgUVdpZGdldDo6b3duRm9udCgpIGNvbnN0CnsKICAgIHJldHVybiBvd25fZm9udDsK fQoKaW5saW5lIGJvb2wgUVdpZGdldDo6b3duUGFsZXR0ZSgpIGNvbnN0CnsKICAgIHJldHVybiBv d25fcGFsZXR0ZTsKfQoKCgoKCgpjbGFzcyBRRm9jdXNEYXRhOwpjbGFzcyBRV1NNYW5hZ2VyOwoK CgoKCgoKc3RydWN0IFFUTFdFeHRyYSB7CgogICAgUVN0cmluZyBjYXB0aW9uOwogICAgUVN0cmlu ZyBpY29uVGV4dDsKICAgIFFQaXhtYXAgKmljb247CgogICAgUUZvY3VzRGF0YSAqZm9jdXNEYXRh OwogICAgc2hvcnQgaW5jdywgaW5jaDsKCiAgICB1bG9uZyBmbGVmdCwgZnJpZ2h0LCBmdG9wLCBm Ym90dG9tOwogICAgdWludCBpY29uaWM6IDE7CiAgICB1aW50IGZ1bGxzY3JlZW4gOiAxOwogICAg dWludCBzaG93TW9kZTogMjsKICAgIHVpbnQgc2F2ZWRGbGFnczsKICAgIHNob3J0IGJhc2V3LCBi YXNlaDsKCiAgICBXSWQgcGFyZW50V2luSWQ7CiAgICB1aW50IGVtYmVkZGVkIDogMTsKICAgIHVp bnQgcmVzZXJ2ZWQ6IDI7CiAgICB1aW50IGRuZCA6IDE7CiAgICB1aW50IHVzcG9zIDogMTsKICAg IHVpbnQgdXNzaXplIDogMTsKICAgIHZvaWQgKnhpYzsKIyA5MTQgIi91c3IvbG9jYWwvcXQteDEx LWZyZWUtMy4wLjYvaW5jbHVkZS9xd2lkZ2V0LmgiCiAgICBRUmVjdCBub3JtYWxHZW9tZXRyeTsK fTsKCgoKCgoKc3RydWN0IFFXRXh0cmEgewogICAgUV9JTlQxNiBtaW53LCBtaW5oOwogICAgUV9J TlQxNiBtYXh3LCBtYXhoOwogICAgUVBpeG1hcCAqYmdfcGl4OwogICAgUVdpZGdldCAqZm9jdXNf cHJveHk7CgogICAgUUN1cnNvciAqY3VyczsKCiAgICBRVExXRXh0cmEgKnRvcGV4dHJhOwoKCgoK ICAgIFdJZCB4RG5kUHJveHk7CiMgOTQ4ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2lu Y2x1ZGUvcXdpZGdldC5oIgogICAgdWludCBiZ19vcmlnaW4gOiAyOwoKICAgIHVpbnQgY2hpbGRy ZW5fdXNlX2RuZCA6IDE7CgoKCgogICAgY2hhciBiZ19tb2RlOwogICAgY2hhciBiZ19tb2RlX3Zp c3VhbDsKCiAgICBRU3R5bGUqIHN0eWxlOwoKICAgIFFSZWN0IG1pY3JvX2ZvY3VzX2hpbnQ7CiAg ICBRU2l6ZVBvbGljeSBzaXplX3BvbGljeTsKfTsKIyA0MCAiL3Vzci9sb2NhbC9xdC14MTEtZnJl ZS0zLjAuNi9pbmNsdWRlL3FoYm94LmgiIDIKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJl ZS0zLjAuNi9pbmNsdWRlL3FmcmFtZS5oIiAxCiMgNDcgIi91c3IvbG9jYWwvcXQteDExLWZyZWUt My4wLjYvaW5jbHVkZS9xZnJhbWUuaCIKY2xhc3MgUUZyYW1lIDogcHVibGljIFFXaWRnZXQKewog ICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1 cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkg Y29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29s IHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwg UVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50 KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9i amVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0 ICptZXRhT2JqOwogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVibGljOgog ICAgUUZyYW1lKCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wLCBXRmxhZ3Mg Zj0wICk7CgogICAgaW50IGZyYW1lU3R5bGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRG cmFtZVN0eWxlKCBpbnQgKTsKCiAgICBpbnQgZnJhbWVXaWR0aCgpIGNvbnN0OwogICAgUVJlY3Qg Y29udGVudHNSZWN0KCkgY29uc3Q7CgoKICAgIGJvb2wgbGluZVNoYXBlc09rKCkgY29uc3QgeyBy ZXR1cm4gVFJVRTsgfQoKCiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwoKICAgIGVudW0gU2hh cGUgeyBOb0ZyYW1lID0gMCwKICAgICAgICAgICAgICAgICBCb3ggPSAweDAwMDEsCiAgICAgICAg ICAgICAgICAgUGFuZWwgPSAweDAwMDIsCiAgICAgICAgICAgICAgICAgV2luUGFuZWwgPSAweDAw MDMsCiAgICAgICAgICAgICAgICAgSExpbmUgPSAweDAwMDQsCiAgICAgICAgICAgICAgICAgVkxp bmUgPSAweDAwMDUsCiAgICAgICAgICAgICAgICAgU3R5bGVkUGFuZWwgPSAweDAwMDYsCiAgICAg ICAgICAgICAgICAgUG9wdXBQYW5lbCA9IDB4MDAwNywKICAgICAgICAgICAgICAgICBNZW51QmFy UGFuZWwgPSAweDAwMDgsCiAgICAgICAgICAgICAgICAgVG9vbEJhclBhbmVsID0gMHgwMDA5LAog ICAgICAgICAgICAgICAgIExpbmVFZGl0UGFuZWwgPSAweDAwMGEsCiAgICAgICAgICAgICAgICAg VGFiV2lkZ2V0UGFuZWwgPSAweDAwMGIsCiAgICAgICAgICAgICAgICAgTVNoYXBlID0gMHgwMDBm CiAgICB9OwogICAgZW51bSBTaGFkb3cgeyBQbGFpbiA9IDB4MDAxMCwKICAgICAgICAgICAgICAg ICAgUmFpc2VkID0gMHgwMDIwLAogICAgICAgICAgICAgICAgICBTdW5rZW4gPSAweDAwMzAsCiAg ICAgICAgICAgICAgICAgIE1TaGFkb3cgPSAweDAwZjAgfTsKCiAgICBTaGFwZSBmcmFtZVNoYXBl KCkgY29uc3Q7CiAgICB2b2lkIHNldEZyYW1lU2hhcGUoIFNoYXBlICk7CiAgICBTaGFkb3cgZnJh bWVTaGFkb3coKSBjb25zdDsKICAgIHZvaWQgc2V0RnJhbWVTaGFkb3coIFNoYWRvdyApOwoKICAg IGludCBsaW5lV2lkdGgoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lV2lkdGgoIGlu dCApOwoKICAgIGludCBtYXJnaW4oKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXJnaW4o IGludCApOwoKICAgIGludCBtaWRMaW5lV2lkdGgoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBz ZXRNaWRMaW5lV2lkdGgoIGludCApOwoKICAgIFFSZWN0IGZyYW1lUmVjdCgpIGNvbnN0OwogICAg dmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdCggY29uc3QgUVJlY3QgJiApOwoKcHJvdGVjdGVkOgog ICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAqICk7CiAgICB2b2lkIHJlc2l6ZUV2ZW50 KCBRUmVzaXplRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZSggUVBhaW50ZXIg KiApOwogICAgdmlydHVhbCB2b2lkIGRyYXdDb250ZW50cyggUVBhaW50ZXIgKiApOwogICAgdmly dHVhbCB2b2lkIGZyYW1lQ2hhbmdlZCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgdXBkYXRlRnJhbWVX aWR0aCgpOwogICAgUVJlY3QgZnJlY3Q7CiAgICBpbnQgZnN0eWxlOwogICAgc2hvcnQgbHdpZHRo OwogICAgc2hvcnQgbXdpZHRoOwogICAgc2hvcnQgbWx3aWR0aDsKICAgIHNob3J0IGZ3aWR0aDsK CiAgICB2b2lkICogZDsKcHJpdmF0ZToKCiAgICBRRnJhbWUoIGNvbnN0IFFGcmFtZSAmICk7CiAg ICBRRnJhbWUgJm9wZXJhdG9yPSggY29uc3QgUUZyYW1lICYgKTsKCn07CgoKaW5saW5lIGludCBR RnJhbWU6OmZyYW1lU3R5bGUoKSBjb25zdAp7IHJldHVybiBmc3R5bGU7IH0KCmlubGluZSBRRnJh bWU6OlNoYXBlIFFGcmFtZTo6ZnJhbWVTaGFwZSgpIGNvbnN0CnsgcmV0dXJuIChTaGFwZSkgKCBm c3R5bGUgJiBNU2hhcGUgKTsgfQoKaW5saW5lIFFGcmFtZTo6U2hhZG93IFFGcmFtZTo6ZnJhbWVT aGFkb3coKSBjb25zdAp7IHJldHVybiAoU2hhZG93KSAoIGZzdHlsZSAmIE1TaGFkb3cgKTsgfQoK aW5saW5lIHZvaWQgUUZyYW1lOjpzZXRGcmFtZVNoYXBlKCBRRnJhbWU6OlNoYXBlIHMgKQp7IHNl dEZyYW1lU3R5bGUoICggZnN0eWxlICYgTVNoYWRvdyApIHwgcyApOyB9CgppbmxpbmUgdm9pZCBR RnJhbWU6OnNldEZyYW1lU2hhZG93KCBRRnJhbWU6OlNoYWRvdyBzICkKeyBzZXRGcmFtZVN0eWxl KCAoIGZzdHlsZSAmIE1TaGFwZSApIHwgcyApOyB9CgppbmxpbmUgaW50IFFGcmFtZTo6bGluZVdp ZHRoKCkgY29uc3QKeyByZXR1cm4gbHdpZHRoOyB9CgppbmxpbmUgaW50IFFGcmFtZTo6bWlkTGlu ZVdpZHRoKCkgY29uc3QKeyByZXR1cm4gbWx3aWR0aDsgfQoKaW5saW5lIGludCBRRnJhbWU6Om1h cmdpbigpIGNvbnN0CnsgcmV0dXJuIG13aWR0aDsgfQoKaW5saW5lIGludCBRRnJhbWU6OmZyYW1l V2lkdGgoKSBjb25zdAp7IHJldHVybiBmd2lkdGg7IH0KIyA0NSAiL3Vzci9sb2NhbC9xdC14MTEt ZnJlZS0zLjAuNi9pbmNsdWRlL3FoYm94LmgiIDIKCmNsYXNzIFFCb3hMYXlvdXQ7CgpjbGFzcyBR SEJveCA6IHB1YmxpYyBRRnJhbWUKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICpt ZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwg Y29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29u c3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmly dHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9w ZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01l dGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9 IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3Rh dGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJp dmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJsaWM6CiAgICBRSEJveCggUVdp ZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwgV0ZsYWdzIGY9MCApOwoKICAgIHZv aWQgc2V0U3BhY2luZyggaW50ICk7CiAgICBib29sIHNldFN0cmV0Y2hGYWN0b3IoIFFXaWRnZXQq LCBpbnQgc3RyZXRjaCApOwogICAgUVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKCnByb3RlY3RlZDoK ICAgIFFIQm94KCBib29sIGhvcml6b250YWwsIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFy KiBuYW1lPTAsIFdGbGFncyBmPTAgKTsKICAgIHZvaWQgZnJhbWVDaGFuZ2VkKCk7Cgpwcml2YXRl OgogICAgUUJveExheW91dCAqbGF5Owp9OwojIDE5ICIvaG9tZS93aWxsaWFzcC9wYXlsb2FkL2dl bmVyaWMtc3cvc3JjL2dzdGFjaS1mcmFtZXdvcmsvaW5jbHVkZS90aW1lbGFiZWwuaCIgMgoKY2xh c3MgUURhdGVUaW1lOwpjbGFzcyBRTGFiZWw7CgpjbGFzcyBUaW1lTGFiZWwgOiBwdWJsaWMgUUhC b3gKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3Qg eyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NO YW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVh bCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQo IGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50LCBpbnQsIFFW YXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVj dCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRy KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4 KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRh T2JqZWN0ICptZXRhT2JqOwoKcHVibGljOgogICAgVGltZUxhYmVsKCBjb25zdCBjaGFyICogbGFi ZWwsIFFXaWRnZXQgKiBwYXJlbnQgPSAwLCBjb25zdCBjaGFyICogbmFtZSA9IDAsIFdGbGFncyBm ID0gMCApOwoKcHVibGljIDoKICAgIHZvaWQgc2xvdFVwZGF0ZSggUURhdGVUaW1lICk7Cgpwcml2 YXRlOgogICAgUUxhYmVsKiBfdGltZXpvbmVMYWJlbDsKICAgIFFMYWJlbCogX3RpbWU7Cn07CiMg MTIgIm1vY190aW1lbGFiZWwuY3BwIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAu Ni9pbmNsdWRlL3FtZXRhb2JqZWN0LmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z LjAuNi9pbmNsdWRlL3FtZXRhb2JqZWN0LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z LjAuNi9pbmNsdWRlL3Fjb25uZWN0aW9uLmgiIDEKIyA0NSAiL3Vzci9sb2NhbC9xdC14MTEtZnJl ZS0zLjAuNi9pbmNsdWRlL3Fjb25uZWN0aW9uLmgiCmNsYXNzIFFDb25uZWN0aW9uCnsKcHVibGlj OgogICAgUUNvbm5lY3Rpb24oIGNvbnN0IFFPYmplY3QgKiwgaW50LCBjb25zdCBjaGFyICptZW1i ZXJOYW1lLCBpbnQgbWVtYmVyVHlwZSApOwogICB+UUNvbm5lY3Rpb24oKSB7fQoKICAgIGJvb2wg aXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiBvYmogIT0gMDsgfQoKICAgIFFPYmplY3QgKm9i amVjdCgpIGNvbnN0IHsgcmV0dXJuIG9iajsgfQogICAgaW50IG1lbWJlcigpIGNvbnN0IHsgcmV0 dXJuIG1icjsgfQogICAgY29uc3QgY2hhciAqbWVtYmVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1i cl9uYW1lOyB9CiAgICBpbnQgbWVtYmVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1icl90eXBlOyB9 CiAgICBpbnQgbnVtQXJncygpIGNvbnN0IHsgcmV0dXJuIG5hcmdzOyB9Cgpwcml2YXRlOgogICAg UU9iamVjdCAqb2JqOwogICAgaW50IG1icjsKICAgIGNvbnN0IGNoYXIgKm1icl9uYW1lOwogICAg aW50IG1icl90eXBlOwogICAgaW50IG5hcmdzOwoKcHJpdmF0ZToKCiAgICBRQ29ubmVjdGlvbigg Y29uc3QgUUNvbm5lY3Rpb24gJiApOwogICAgUUNvbm5lY3Rpb24gJm9wZXJhdG9yPSggY29uc3Qg UUNvbm5lY3Rpb24gJiApOwoKfTsKIyA0MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9p bmNsdWRlL3FtZXRhb2JqZWN0LmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42 L2luY2x1ZGUvcXN0cmxpc3QuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42 L2luY2x1ZGUvcXN0cmxpc3QuaCIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2lu Y2x1ZGUvcXB0cmxpc3QuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2lu Y2x1ZGUvcXB0cmxpc3QuaCIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1 ZGUvcWdsaXN0LmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRl L3FnbGlzdC5oIgojIDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xcHRy Y29sbGVjdGlvbi5oIiAxCiMgNDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVk ZS9xcHRyY29sbGVjdGlvbi5oIgpjbGFzcyBRR1ZlY3RvcjsKY2xhc3MgUUdMaXN0OwpjbGFzcyBR R0RpY3Q7CgoKY2xhc3MgUVB0ckNvbGxlY3Rpb24KewpwdWJsaWM6CiAgICBib29sIGF1dG9EZWxl dGUoKSBjb25zdCB7IHJldHVybiBkZWxfaXRlbTsgfQogICAgdm9pZCBzZXRBdXRvRGVsZXRlKCBi b29sIGVuYWJsZSApIHsgZGVsX2l0ZW0gPSBlbmFibGU7IH0KCiAgICB2aXJ0dWFsIHVpbnQgY291 bnQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CgogICAgdHlwZWRl ZiB2b2lkICpJdGVtOwoKcHJvdGVjdGVkOgogICAgUVB0ckNvbGxlY3Rpb24oKSB7IGRlbF9pdGVt ID0gRkFMU0U7IH0KICAgIFFQdHJDb2xsZWN0aW9uKGNvbnN0IFFQdHJDb2xsZWN0aW9uICYpIHsg ZGVsX2l0ZW0gPSBGQUxTRTsgfQogICAgdmlydHVhbCB+UVB0ckNvbGxlY3Rpb24oKSB7fQoKICAg IGJvb2wgZGVsX2l0ZW07CgogICAgdmlydHVhbCBJdGVtIG5ld0l0ZW0oIEl0ZW0gKTsKICAgIHZp cnR1YWwgdm9pZCBkZWxldGVJdGVtKCBJdGVtICkgPSAwOwp9OwojIDQzICIvdXNyL2xvY2FsL3F0 LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdsaXN0LmgiIDIKCgpjbGFzcyBRTE5vZGUKewpmcmll bmQgY2xhc3MgUUdMaXN0OwpmcmllbmQgY2xhc3MgUUdMaXN0SXRlcmF0b3I7CnB1YmxpYzoKICAg IFFQdHJDb2xsZWN0aW9uOjpJdGVtIGdldERhdGEoKSB7IHJldHVybiBkYXRhOyB9CnByaXZhdGU6 CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBkYXRhOwogICAgUUxOb2RlICpwcmV2OwogICAgUUxO b2RlICpuZXh0OwogICAgUUxOb2RlKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBkICkgeyBkYXRhID0g ZDsgfQp9OwoKY2xhc3MgUUdMaXN0SXRlcmF0b3JMaXN0OwoKY2xhc3MgUUdMaXN0IDogcHVibGlj IFFQdHJDb2xsZWN0aW9uCnsKZnJpZW5kIGNsYXNzIFFHTGlzdEl0ZXJhdG9yOwpmcmllbmQgY2xh c3MgUUdMaXN0SXRlcmF0b3JMaXN0OwpmcmllbmQgY2xhc3MgUUdWZWN0b3I7CnB1YmxpYzoKICAg IHVpbnQgY291bnQoKSBjb25zdDsKCgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFt ICYgKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJv dGVjdGVkOgogICAgUUdMaXN0KCk7CiAgICBRR0xpc3QoIGNvbnN0IFFHTGlzdCAmICk7CiAgICB2 aXJ0dWFsIH5RR0xpc3QoKTsKCiAgICBRR0xpc3QgJm9wZXJhdG9yPSggY29uc3QgUUdMaXN0ICYg KTsKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUdMaXN0JiApIGNvbnN0OwoKICAgIHZvaWQg aW5Tb3J0KCBRUHRyQ29sbGVjdGlvbjo6SXRlbSApOwogICAgdm9pZCBhcHBlbmQoIFFQdHJDb2xs ZWN0aW9uOjpJdGVtICk7CiAgICBib29sIGluc2VydEF0KCB1aW50IGluZGV4LCBRUHRyQ29sbGVj dGlvbjo6SXRlbSApOwogICAgdm9pZCByZWxpbmtOb2RlKCBRTE5vZGUgKiApOwogICAgYm9vbCBy ZW1vdmVOb2RlKCBRTE5vZGUgKiApOwogICAgYm9vbCByZW1vdmUoIFFQdHJDb2xsZWN0aW9uOjpJ dGVtID0gMCApOwogICAgYm9vbCByZW1vdmVSZWYoIFFQdHJDb2xsZWN0aW9uOjpJdGVtID0gMCAp OwogICAgYm9vbCByZW1vdmVGaXJzdCgpOwogICAgYm9vbCByZW1vdmVMYXN0KCk7CiAgICBib29s IHJlbW92ZUF0KCB1aW50IGluZGV4ICk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlTm9k ZSggUUxOb2RlICogKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRha2UoKTsKICAgIFFQdHJD b2xsZWN0aW9uOjpJdGVtIHRha2VBdCggdWludCBpbmRleCApOwogICAgUVB0ckNvbGxlY3Rpb246 Okl0ZW0gdGFrZUZpcnN0KCk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlTGFzdCgpOwoK ICAgIHZvaWQgc29ydCgpOwogICAgdm9pZCBjbGVhcigpOwoKICAgIGludCBmaW5kUmVmKCBRUHRy Q29sbGVjdGlvbjo6SXRlbSwgYm9vbCA9IFRSVUUgKTsKICAgIGludCBmaW5kKCBRUHRyQ29sbGVj dGlvbjo6SXRlbSwgYm9vbCA9IFRSVUUgKTsKCiAgICB1aW50IGNvbnRhaW5zUmVmKCBRUHRyQ29s bGVjdGlvbjo6SXRlbSApIGNvbnN0OwogICAgdWludCBjb250YWlucyggUVB0ckNvbGxlY3Rpb246 Okl0ZW0gKSBjb25zdDsKCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBhdCggdWludCBpbmRleCAp OwogICAgaW50IGF0KCkgY29uc3Q7CiAgICBRTE5vZGUgKmN1cnJlbnROb2RlKCkgY29uc3Q7Cgog ICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZ2V0KCkgY29uc3Q7CgogICAgUVB0ckNvbGxlY3Rpb246 Okl0ZW0gY2ZpcnN0KCkgY29uc3Q7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBjbGFzdCgpIGNv bnN0OwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZmlyc3QoKTsKICAgIFFQdHJDb2xsZWN0aW9u OjpJdGVtIGxhc3QoKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIG5leHQoKTsKICAgIFFQdHJD b2xsZWN0aW9uOjpJdGVtIHByZXYoKTsKCiAgICB2b2lkIHRvVmVjdG9yKCBRR1ZlY3RvciAqICkg Y29uc3Q7CgogICAgdmlydHVhbCBpbnQgY29tcGFyZUl0ZW1zKCBRUHRyQ29sbGVjdGlvbjo6SXRl bSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gKTsKCgogICAgdmlydHVhbCBRRGF0YVN0cmVhbSAmcmVh ZCggUURhdGFTdHJlYW0gJiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gJiApOwogICAgdmlydHVhbCBR RGF0YVN0cmVhbSAmd3JpdGUoIFFEYXRhU3RyZWFtICYsIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkg Y29uc3Q7Cgpwcml2YXRlOgogICAgdm9pZCBwcmVwZW5kKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSAp OwoKICAgIHZvaWQgaGVhcFNvcnRQdXNoRG93biggUVB0ckNvbGxlY3Rpb246Okl0ZW0qIGhlYXAs IGludCBmaXJzdCwgaW50IGxhc3QgKTsKCiAgICBRTE5vZGUgKmZpcnN0Tm9kZTsKICAgIFFMTm9k ZSAqbGFzdE5vZGU7CiAgICBRTE5vZGUgKmN1ck5vZGU7CiAgICBpbnQgY3VySW5kZXg7CiAgICB1 aW50IG51bU5vZGVzOwogICAgUUdMaXN0SXRlcmF0b3JMaXN0ICppdGVyYXRvcnM7CgogICAgUUxO b2RlICpsb2NhdGUoIHVpbnQgKTsKICAgIFFMTm9kZSAqdW5saW5rKCk7Cn07CgoKaW5saW5lIHVp bnQgUUdMaXN0Ojpjb3VudCgpIGNvbnN0CnsKICAgIHJldHVybiBudW1Ob2RlczsKfQoKaW5saW5l IGJvb2wgUUdMaXN0OjpyZW1vdmVGaXJzdCgpCnsKICAgIGZpcnN0KCk7CiAgICByZXR1cm4gcmVt b3ZlKCk7Cn0KCmlubGluZSBib29sIFFHTGlzdDo6cmVtb3ZlTGFzdCgpCnsKICAgIGxhc3QoKTsK ICAgIHJldHVybiByZW1vdmUoKTsKfQoKaW5saW5lIGludCBRR0xpc3Q6OmF0KCkgY29uc3QKewog ICAgcmV0dXJuIGN1ckluZGV4Owp9CgppbmxpbmUgUVB0ckNvbGxlY3Rpb246Okl0ZW0gUUdMaXN0 OjphdCggdWludCBpbmRleCApCnsKICAgIFFMTm9kZSAqbiA9IGxvY2F0ZSggaW5kZXggKTsKICAg IHJldHVybiBuID8gbi0+ZGF0YSA6IDA7Cn0KCmlubGluZSBRTE5vZGUgKlFHTGlzdDo6Y3VycmVu dE5vZGUoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZTsKfQoKaW5saW5lIFFQdHJDb2xsZWN0 aW9uOjpJdGVtIFFHTGlzdDo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJO b2RlLT5kYXRhIDogMDsKfQoKaW5saW5lIFFQdHJDb2xsZWN0aW9uOjpJdGVtIFFHTGlzdDo6Y2Zp cnN0KCkgY29uc3QKewogICAgcmV0dXJuIGZpcnN0Tm9kZSA/IGZpcnN0Tm9kZS0+ZGF0YSA6IDA7 Cn0KCmlubGluZSBRUHRyQ29sbGVjdGlvbjo6SXRlbSBRR0xpc3Q6OmNsYXN0KCkgY29uc3QKewog ICAgcmV0dXJuIGxhc3ROb2RlID8gbGFzdE5vZGUtPmRhdGEgOiAwOwp9CgoKCgoKCgogUURhdGFT dHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFHTGlzdCAmICk7CiBRRGF0YVN0cmVh bSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUdMaXN0ICYgKTsKCgoKCgoKY2xh c3MgUUdMaXN0SXRlcmF0b3IKewpmcmllbmQgY2xhc3MgUUdMaXN0OwpmcmllbmQgY2xhc3MgUUdM aXN0SXRlcmF0b3JMaXN0Owpwcm90ZWN0ZWQ6CiAgICBRR0xpc3RJdGVyYXRvciggY29uc3QgUUdM aXN0ICYgKTsKICAgIFFHTGlzdEl0ZXJhdG9yKCBjb25zdCBRR0xpc3RJdGVyYXRvciAmICk7CiAg ICBRR0xpc3RJdGVyYXRvciAmb3BlcmF0b3I9KCBjb25zdCBRR0xpc3RJdGVyYXRvciAmICk7CiAg IH5RR0xpc3RJdGVyYXRvcigpOwoKICAgIGJvb2wgYXRGaXJzdCgpIGNvbnN0OwogICAgYm9vbCBh dExhc3QoKSBjb25zdDsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRvRmlyc3QoKTsKICAgIFFQ dHJDb2xsZWN0aW9uOjpJdGVtIHRvTGFzdCgpOwoKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGdl dCgpIGNvbnN0OwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3IoKSgpOwogICAgUVB0 ckNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3IrKygpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0g b3BlcmF0b3IrPSh1aW50KTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIG9wZXJhdG9yLS0oKTsK ICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIG9wZXJhdG9yLT0odWludCk7Cgpwcm90ZWN0ZWQ6CiAg ICBRR0xpc3QgKmxpc3Q7Cgpwcml2YXRlOgogICAgUUxOb2RlICpjdXJOb2RlOwp9OwoKCmlubGlu ZSBib29sIFFHTGlzdEl0ZXJhdG9yOjphdEZpcnN0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5v ZGUgPT0gbGlzdC0+Zmlyc3ROb2RlOwp9CgppbmxpbmUgYm9vbCBRR0xpc3RJdGVyYXRvcjo6YXRM YXN0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPT0gbGlzdC0+bGFzdE5vZGU7Cn0KCmlu bGluZSBRUHRyQ29sbGVjdGlvbjo6SXRlbSBRR0xpc3RJdGVyYXRvcjo6Z2V0KCkgY29uc3QKewog ICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5kYXRhIDogMDsKfQojIDQzICIvdXNyL2xvY2Fs L3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXB0cmxpc3QuaCIgMgoKCgp0ZW1wbGF0ZTxjbGFz cyB0eXBlPgpjbGFzcyBRUHRyTGlzdAoKCgogICAgICAgIDogcHVibGljIFFHTGlzdAoKewpwdWJs aWM6CiAgICBRUHRyTGlzdCgpIHt9CiAgICBRUHRyTGlzdCggY29uc3QgUVB0ckxpc3Q8dHlwZT4g JmwgKSA6IFFHTGlzdChsKSB7fQogICAgflFQdHJMaXN0KCkgeyBjbGVhcigpOyB9CiAgICBRUHRy TGlzdDx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0IFFQdHJMaXN0PHR5cGU+ICZsKQogICAgICAgICAg ICAgICAgICAgICAgICB7IHJldHVybiAoUVB0ckxpc3Q8dHlwZT4mKVFHTGlzdDo6b3BlcmF0b3I9 KGwpOyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQdHJMaXN0PHR5cGU+ICZsaXN0ICkg Y29uc3QKICAgIHsgcmV0dXJuIFFHTGlzdDo6b3BlcmF0b3I9PSggbGlzdCApOyB9CiAgICB1aW50 IGNvdW50KCkgY29uc3QgeyByZXR1cm4gUUdMaXN0Ojpjb3VudCgpOyB9CiAgICBib29sIGlzRW1w dHkoKSBjb25zdCB7IHJldHVybiBRR0xpc3Q6OmNvdW50KCkgPT0gMDsgfQogICAgYm9vbCBpbnNl cnQoIHVpbnQgaSwgY29uc3QgdHlwZSAqZCl7IHJldHVybiBRR0xpc3Q6Omluc2VydEF0KGksKFFQ dHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB2b2lkIGluU29ydCggY29uc3QgdHlwZSAqZCAp IHsgUUdMaXN0OjppblNvcnQoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB2b2lkIHBy ZXBlbmQoIGNvbnN0IHR5cGUgKmQgKSB7IFFHTGlzdDo6aW5zZXJ0QXQoMCwoUVB0ckNvbGxlY3Rp b246Okl0ZW0pZCk7IH0KICAgIHZvaWQgYXBwZW5kKCBjb25zdCB0eXBlICpkICkgeyBRR0xpc3Q6 OmFwcGVuZCgoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIGJvb2wgcmVtb3ZlKCB1aW50 IGkgKSB7IHJldHVybiBRR0xpc3Q6OnJlbW92ZUF0KGkpOyB9CiAgICBib29sIHJlbW92ZSgpIHsg cmV0dXJuIFFHTGlzdDo6cmVtb3ZlKChRUHRyQ29sbGVjdGlvbjo6SXRlbSkwKTsgfQogICAgYm9v bCByZW1vdmUoIGNvbnN0IHR5cGUgKmQgKSB7IHJldHVybiBRR0xpc3Q6OnJlbW92ZSgoUVB0ckNv bGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIGJvb2wgcmVtb3ZlUmVmKCBjb25zdCB0eXBlICpkICkg eyByZXR1cm4gUUdMaXN0OjpyZW1vdmVSZWYoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAg ICB2b2lkIHJlbW92ZU5vZGUoIFFMTm9kZSAqbiApIHsgUUdMaXN0OjpyZW1vdmVOb2RlKG4pOyB9 CiAgICBib29sIHJlbW92ZUZpcnN0KCkgeyByZXR1cm4gUUdMaXN0OjpyZW1vdmVGaXJzdCgpOyB9 CiAgICBib29sIHJlbW92ZUxhc3QoKSB7IHJldHVybiBRR0xpc3Q6OnJlbW92ZUxhc3QoKTsgfQog ICAgdHlwZSAqdGFrZSggdWludCBpICkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OnRha2VBdChp KTsgfQogICAgdHlwZSAqdGFrZSgpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0Ojp0YWtlKCk7IH0K ICAgIHR5cGUgKnRha2VOb2RlKCBRTE5vZGUgKm4gKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6 dGFrZU5vZGUobik7IH0KICAgIHZvaWQgY2xlYXIoKSB7IFFHTGlzdDo6Y2xlYXIoKTsgfQogICAg dm9pZCBzb3J0KCkgeyBRR0xpc3Q6OnNvcnQoKTsgfQogICAgaW50IGZpbmQoIGNvbnN0IHR5cGUg KmQgKSB7IHJldHVybiBRR0xpc3Q6OmZpbmQoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAg ICBpbnQgZmluZE5leHQoIGNvbnN0IHR5cGUgKmQgKSB7IHJldHVybiBRR0xpc3Q6OmZpbmQoKFFQ dHJDb2xsZWN0aW9uOjpJdGVtKWQsRkFMU0UpOyB9CiAgICBpbnQgZmluZFJlZiggY29uc3QgdHlw ZSAqZCApIHsgcmV0dXJuIFFHTGlzdDo6ZmluZFJlZigoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCk7 IH0KICAgIGludCBmaW5kTmV4dFJlZiggY29uc3QgdHlwZSAqZCApeyByZXR1cm4gUUdMaXN0Ojpm aW5kUmVmKChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkLEZBTFNFKTt9CiAgICB1aW50IGNvbnRhaW5z KCBjb25zdCB0eXBlICpkICkgY29uc3QgeyByZXR1cm4gUUdMaXN0Ojpjb250YWlucygoUVB0ckNv bGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIHVpbnQgY29udGFpbnNSZWYoIGNvbnN0IHR5cGUgKmQg KSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4g UUdMaXN0Ojpjb250YWluc1JlZigoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIHR5cGUg KmF0KCB1aW50IGkgKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6YXQoaSk7IH0KICAgIGludCBh dCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6YXQoKTsgfQogICAgdHlwZSAqY3VycmVudCgpIGNv bnN0IHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpnZXQoKTsgfQogICAgUUxOb2RlICpjdXJyZW50 Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6Y3VycmVudE5vZGUoKTsgfQogICAgdHlwZSAq Z2V0Rmlyc3QoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6Y2ZpcnN0KCk7IH0KICAg IHR5cGUgKmdldExhc3QoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6Y2xhc3QoKTsg fQogICAgdHlwZSAqZmlyc3QoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6Zmlyc3QoKTsgfQog ICAgdHlwZSAqbGFzdCgpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpsYXN0KCk7IH0KICAgIHR5 cGUgKm5leHQoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6bmV4dCgpOyB9CiAgICB0eXBlICpw cmV2KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OnByZXYoKTsgfQogICAgdm9pZCB0b1ZlY3Rv ciggUUdWZWN0b3IgKnZlYyApY29uc3R7IFFHTGlzdDo6dG9WZWN0b3IodmVjKTsgfQojIDEwNiAi L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FwdHJsaXN0LmgiCnByaXZhdGU6 CiAgICB2b2lkIGRlbGV0ZUl0ZW0oIEl0ZW0gZCApOwp9OwoKCnRlbXBsYXRlPD4gaW5saW5lIHZv aWQgUVB0ckxpc3Q8dm9pZD46OmRlbGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkKewp9 CgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4gaW5saW5lIHZvaWQgUVB0ckxpc3Q8dHlwZT46OmRlbGV0 ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQgKQp7CiAgICBpZiAoIGRlbF9pdGVtICkgZGVs ZXRlICh0eXBlICopZDsKfQoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4KY2xhc3MgUVB0ckxpc3RJdGVy YXRvcgo6IHB1YmxpYyBRR0xpc3RJdGVyYXRvcgp7CnB1YmxpYzoKICAgIFFQdHJMaXN0SXRlcmF0 b3IoY29uc3QgUVB0ckxpc3Q8dHlwZT4gJmwpIDpRR0xpc3RJdGVyYXRvcigoUUdMaXN0ICYpbCkg e30KICAgflFQdHJMaXN0SXRlcmF0b3IoKSB7fQogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0 dXJuIGxpc3QtPmNvdW50KCk7IH0KICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGxp c3QtPmNvdW50KCkgPT0gMDsgfQogICAgYm9vbCBhdEZpcnN0KCkgY29uc3QgeyByZXR1cm4gUUdM aXN0SXRlcmF0b3I6OmF0Rmlyc3QoKTsgfQogICAgYm9vbCBhdExhc3QoKSBjb25zdCB7IHJldHVy biBRR0xpc3RJdGVyYXRvcjo6YXRMYXN0KCk7IH0KICAgIHR5cGUgKnRvRmlyc3QoKSB7IHJldHVy biAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjp0b0ZpcnN0KCk7IH0KICAgIHR5cGUgKnRvTGFzdCgp IHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6OnRvTGFzdCgpOyB9CiAgICBvcGVyYXRv ciB0eXBlICooKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpnZXQoKTsg fQogICAgdHlwZSAqb3BlcmF0b3IqKCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6 Z2V0KCk7IH0KCgoKCgoKCiAgICB0eXBlICpjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gKHR5cGUg KilRR0xpc3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKCkoKSB7IHJldHVy biAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRvcigpKCk7fQogICAgdHlwZSAqb3BlcmF0 b3IrKygpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yKysoKTsgfQog ICAgdHlwZSAqb3BlcmF0b3IrPSh1aW50IGopIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0 b3I6Om9wZXJhdG9yKz0oaik7fQogICAgdHlwZSAqb3BlcmF0b3ItLSgpIHsgcmV0dXJuICh0eXBl ICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yLS0oKTsgfQogICAgdHlwZSAqb3BlcmF0b3ItPSh1 aW50IGopIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yLT0oaik7fQog ICAgUVB0ckxpc3RJdGVyYXRvcjx0eXBlPiYgb3BlcmF0b3I9KGNvbnN0IFFQdHJMaXN0SXRlcmF0 b3I8dHlwZT4maXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdMaXN0SXRlcmF0 b3I6Om9wZXJhdG9yPShpdCk7IHJldHVybiAqdGhpczsgfQp9OwojIDQ0ICIvdXNyL2xvY2FsL3F0 LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXN0cmxpc3QuaCIgMgojIDU4ICIvdXNyL2xvY2FsL3F0 LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXN0cmxpc3QuaCIKdHlwZWRlZiBRUHRyTGlzdEl0ZXJh dG9yPGNoYXI+IFFTdHJMaXN0SXRlcmF0b3I7CgoKY2xhc3MgUVN0ckxpc3QgOiBwdWJsaWMgUVB0 ckxpc3Q8Y2hhcj4KewpwdWJsaWM6CiAgICBRU3RyTGlzdCggYm9vbCBkZWVwQ29waWVzPVRSVUUg KSB7IGRjID0gZGVlcENvcGllczsgZGVsX2l0ZW0gPSBkZWVwQ29waWVzOyB9CiAgICBRU3RyTGlz dCggY29uc3QgUVN0ckxpc3QgJiApOwogICAgflFTdHJMaXN0KCkgeyBjbGVhcigpOyB9CiAgICBR U3RyTGlzdCYgb3BlcmF0b3I9KCBjb25zdCBRU3RyTGlzdCAmICk7Cgpwcml2YXRlOgogICAgUVB0 ckNvbGxlY3Rpb246Okl0ZW0gbmV3SXRlbSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCApIHsgcmV0 dXJuIGRjID8gcXN0cmR1cCggKGNvbnN0IGNoYXIqKWQgKSA6IGQ7IH0KICAgIHZvaWQgZGVsZXRl SXRlbSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCApIHsgaWYgKCBkZWxfaXRlbSApIGRlbGV0ZVtd IChjaGFyKilkOyB9CiAgICBpbnQgY29tcGFyZUl0ZW1zKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBz MSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gczIgKSB7IHJldHVybiBxc3RyY21wKChjb25zdCBjaGFy KilzMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbnN0IGNoYXIqKXMyKTsgfQoKICAgIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0 cmVhbSAmcywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gJmQgKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsgcyA+PiAoY2hhciAqJilkOyByZXR1cm4gczsgfQogICAgUURhdGFTdHJlYW0g JndyaXRlKCBRRGF0YVN0cmVhbSAmcywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCApIGNvbnN0CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gcyA8PCAoY29uc3QgY2hhciAq KWQ7IH0KCiAgICBib29sIGRjOwp9OwoKCmNsYXNzIFFTdHJJTGlzdCA6IHB1YmxpYyBRU3RyTGlz dAp7CnB1YmxpYzoKICAgIFFTdHJJTGlzdCggYm9vbCBkZWVwQ29waWVzPVRSVUUgKSA6IFFTdHJM aXN0KCBkZWVwQ29waWVzICkge30KICAgIH5RU3RySUxpc3QoKSB7IGNsZWFyKCk7IH0KcHJpdmF0 ZToKICAgIGludCBjb21wYXJlSXRlbXMoIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHMxLCBRUHRyQ29s bGVjdGlvbjo6SXRlbSBzMiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1 cm4gcXN0cmljbXAoKGNvbnN0IGNoYXIqKXMxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIqKXMyKTsgfQp9OwoKCmlubGluZSBR U3RyTGlzdCAmIFFTdHJMaXN0OjpvcGVyYXRvcj0oIGNvbnN0IFFTdHJMaXN0ICZzdHJMaXN0ICkK ewogICAgY2xlYXIoKTsKICAgIGRjID0gc3RyTGlzdC5kYzsKICAgIGRlbF9pdGVtID0gZGM7CiAg ICBRUHRyTGlzdDxjaGFyPjo6b3BlcmF0b3I9KCBzdHJMaXN0ICk7CiAgICByZXR1cm4gKnRoaXM7 Cn0KCmlubGluZSBRU3RyTGlzdDo6UVN0ckxpc3QoIGNvbnN0IFFTdHJMaXN0ICZzdHJMaXN0ICkK ICAgIDogUVB0ckxpc3Q8Y2hhcj4oIHN0ckxpc3QgKQp7CiAgICBkYyA9IEZBTFNFOwogICAgb3Bl cmF0b3I9KCBzdHJMaXN0ICk7Cn0KIyA0NCAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9p bmNsdWRlL3FtZXRhb2JqZWN0LmgiIDIKCgoKCgoKY2xhc3MgUU9iamVjdDsKc3RydWN0IFFVTWV0 aG9kOwpjbGFzcyBRTWV0YU9iamVjdFByaXZhdGU7CgpzdHJ1Y3QgUU1ldGFEYXRhCnsKICAgIGNv bnN0IGNoYXIgKm5hbWU7CiAgICBjb25zdCBRVU1ldGhvZCogbWV0aG9kOwogICAgZW51bSBBY2Nl c3MgeyBQcml2YXRlLCBQcm90ZWN0ZWQsIFB1YmxpYyB9OwogICAgQWNjZXNzIGFjY2VzczsKfTsK CgpzdHJ1Y3QgUU1ldGFFbnVtCnsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICB1aW50IGNvdW50 OwogICAgc3RydWN0IEl0ZW0KICAgIHsKICAgICAgICBjb25zdCBjaGFyICprZXk7CiAgICAgICAg aW50IHZhbHVlOwogICAgfTsKICAgIGNvbnN0IEl0ZW0gKml0ZW1zOwogICAgYm9vbCBzZXQ7Cn07 CgoKCgpjbGFzcyBRTWV0YVByb3BlcnR5CnsKcHVibGljOgogICAgY29uc3QgY2hhciogdHlwZSgp IGNvbnN0IHsgcmV0dXJuIHQ7IH0KICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVy biBuOyB9CgogICAgYm9vbCB3cml0YWJsZSgpIGNvbnN0OwogICAgYm9vbCBpc1ZhbGlkKCkgY29u c3Q7CgogICAgYm9vbCBpc1NldFR5cGUoKSBjb25zdDsKICAgIGJvb2wgaXNFbnVtVHlwZSgpIGNv bnN0OwogICAgUVN0ckxpc3QgZW51bUtleXMoKSBjb25zdDsKCiAgICBpbnQga2V5VG9WYWx1ZSgg Y29uc3QgY2hhcioga2V5ICkgY29uc3Q7CiAgICBjb25zdCBjaGFyKiB2YWx1ZVRvS2V5KCBpbnQg dmFsdWUgKSBjb25zdDsKICAgIGludCBrZXlzVG9WYWx1ZSggY29uc3QgUVN0ckxpc3QmIGtleXMg KSBjb25zdDsKICAgIFFTdHJMaXN0IHZhbHVlVG9LZXlzKCBpbnQgdmFsdWUgKSBjb25zdDsKCiAg ICBib29sIGRlc2lnbmFibGUoIFFPYmplY3QqICkgY29uc3Q7CiAgICBib29sIHNjcmlwdGFibGUo IFFPYmplY3QqICkgY29uc3Q7CiAgICBib29sIHN0b3JlZCggUU9iamVjdCogKSBjb25zdDsKCiAg ICBib29sIHJlc2V0KCBRT2JqZWN0KiApIGNvbnN0OwoKICAgIGNvbnN0IGNoYXIqIHQ7CiAgICBj b25zdCBjaGFyKiBuOwoKICAgIGVudW0gRmxhZ3MgewogICAgICAgIEludmFsaWQgPSAweDAwMDAw MDAwLAogICAgICAgIFJlYWRhYmxlID0gMHgwMDAwMDAwMSwKICAgICAgICBXcml0YWJsZSA9IDB4 MDAwMDAwMDIsCiAgICAgICAgRW51bU9yU2V0ID0gMHgwMDAwMDAwNCwKICAgICAgICBTdGRTZXQg PSAweDAwMDAwMTAwLAogICAgICAgIE92ZXJyaWRlID0gMHgwMDAwMDIwMAogICAgfTsKCiAgICB1 aW50IGZsYWdzOwogICAgYm9vbCB0ZXN0RmxhZ3MoIHVpbnQgZiApIGNvbnN0OwogICAgYm9vbCBz dGRTZXQoKSBjb25zdDsKICAgIGludCBpZCgpIGNvbnN0OwoKICAgIFFNZXRhT2JqZWN0KiogbWV0 YTsKICAgIGNvbnN0IFFNZXRhRW51bSogZW51bURhdGE7CiAgICBpbnQgX2lkOwogICAgdm9pZCBj bGVhcigpOwp9OwoKaW5saW5lIGJvb2wgUU1ldGFQcm9wZXJ0eTo6dGVzdEZsYWdzKCB1aW50IGYg KSBjb25zdAp7IHJldHVybiAoZmxhZ3MgJiAodWludClmKSAhPSAodWludCkwOyB9CgoKCnN0cnVj dCBRQ2xhc3NJbmZvCnsKICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICBjb25zdCBjaGFyKiB2YWx1 ZTsKfTsKCmNsYXNzIFFNZXRhT2JqZWN0CnsKcHVibGljOgogICAgUU1ldGFPYmplY3QoIGNvbnN0 IGNoYXIgKiBjb25zdCBjbGFzc19uYW1lLCBRTWV0YU9iamVjdCAqc3VwZXJjbGFzcywKICAgICAg ICAgICAgICAgICBjb25zdCBRTWV0YURhdGEgKiBjb25zdCBzbG90X2RhdGEsIGludCBuX3Nsb3Rz LAogICAgICAgICAgICAgICAgIGNvbnN0IFFNZXRhRGF0YSAqIGNvbnN0IHNpZ25hbF9kYXRhLCBp bnQgbl9zaWduYWxzLAoKICAgICAgICAgICAgICAgICBjb25zdCBRTWV0YVByb3BlcnR5ICpjb25z dCBwcm9wX2RhdGEsIGludCBuX3Byb3BzLAogICAgICAgICAgICAgICAgIGNvbnN0IFFNZXRhRW51 bSAqY29uc3QgZW51bV9kYXRhLCBpbnQgbl9lbnVtcywKCiAgICAgICAgICAgICAgICAgY29uc3Qg UUNsYXNzSW5mbyAqY29uc3QgY2xhc3NfaW5mbywgaW50IG5faW5mbyApOwoKCiAgICB2aXJ0dWFs IH5RTWV0YU9iamVjdCgpOwoKICAgIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0IHsgcmV0 dXJuIGNsYXNzbmFtZTsgfQogICAgY29uc3QgY2hhciAqc3VwZXJDbGFzc05hbWUoKSBjb25zdCB7 IHJldHVybiBzdXBlcmNsYXNzbmFtZTsgfQoKICAgIFFNZXRhT2JqZWN0ICpzdXBlckNsYXNzKCkg Y29uc3QgeyByZXR1cm4gc3VwZXJjbGFzczsgfQoKICAgIGJvb2wgaW5oZXJpdHMoIGNvbnN0IGNo YXIqIGNsbmFtZSApIGNvbnN0OwoKICAgIGludCBudW1TbG90cyggYm9vbCBzdXBlciA9IEZBTFNF ICkgY29uc3Q7CiAgICBpbnQgbnVtU2lnbmFscyggYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7 CgogICAgaW50IGZpbmRTbG90KCBjb25zdCBjaGFyICosIGJvb2wgc3VwZXIgPSBGQUxTRSApIGNv bnN0OwogICAgaW50IGZpbmRTaWduYWwoIGNvbnN0IGNoYXIgKiwgYm9vbCBzdXBlciA9IEZBTFNF ICkgY29uc3Q7CgogICAgY29uc3QgUU1ldGFEYXRhICpzbG90KCBpbnQgaW5kZXgsIGJvb2wgc3Vw ZXIgPSBGQUxTRSApIGNvbnN0OwogICAgY29uc3QgUU1ldGFEYXRhICpzaWduYWwoIGludCBpbmRl eCwgYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7CgogICAgUVN0ckxpc3Qgc2xvdE5hbWVzKCBi b29sIHN1cGVyID0gRkFMU0UgKSBjb25zdDsKICAgIFFTdHJMaXN0IHNpZ25hbE5hbWVzKCBib29s IHN1cGVyID0gRkFMU0UgKSBjb25zdDsKCiAgICBpbnQgc2xvdE9mZnNldCgpIGNvbnN0OwogICAg aW50IHNpZ25hbE9mZnNldCgpIGNvbnN0OwogICAgaW50IHByb3BlcnR5T2Zmc2V0KCkgY29uc3Q7 CgogICAgaW50IG51bUNsYXNzSW5mbyggYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7CiAgICBj b25zdCBRQ2xhc3NJbmZvICpjbGFzc0luZm8oIGludCBpbmRleCwgYm9vbCBzdXBlciA9IEZBTFNF ICkgY29uc3Q7CiAgICBjb25zdCBjaGFyICpjbGFzc0luZm8oIGNvbnN0IGNoYXIqIG5hbWUsIGJv b2wgc3VwZXIgPSBGQUxTRSApIGNvbnN0OwoKCiAgICBjb25zdCBRTWV0YVByb3BlcnR5ICpwcm9w ZXJ0eSggaW50IGluZGV4LCBib29sIHN1cGVyID0gRkFMU0UgKSBjb25zdDsKICAgIGludCBmaW5k UHJvcGVydHkoIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgc3VwZXIgPSBGQUxTRSApIGNvbnN0Owog ICAgaW50IGluZGV4T2ZQcm9wZXJ0eSggY29uc3QgUU1ldGFQcm9wZXJ0eSosIGJvb2wgc3VwZXIg PSBGQUxTRSApIGNvbnN0OwogICAgY29uc3QgUU1ldGFQcm9wZXJ0eSogcmVzb2x2ZVByb3BlcnR5 KCBjb25zdCBRTWV0YVByb3BlcnR5KiApIGNvbnN0OwogICAgaW50IHJlc29sdmVQcm9wZXJ0eSgg aW50ICkgY29uc3Q7CiAgICBRU3RyTGlzdCBwcm9wZXJ0eU5hbWVzKCBib29sIHN1cGVyID0gRkFM U0UgKSBjb25zdDsKICAgIGludCBudW1Qcm9wZXJ0aWVzKCBib29sIHN1cGVyID0gRkFMU0UgKSBj b25zdDsKCgoKCgogICAgc3RhdGljIFFNZXRhT2JqZWN0ICpuZXdfbWV0YW9iamVjdCggY29uc3Qg Y2hhciAqLCBRTWV0YU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUU1ldGFEYXRhICpjb25zdCwgaW50LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgUU1ldGFEYXRhICpjb25zdCwgaW50LAoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFNZXRhUHJvcGVydHkgKmNvbnN0 IHByb3BfZGF0YSwgaW50IG5fcHJvcHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBRTWV0YUVudW0gKmNvbnN0IGVudW1fZGF0YSwgaW50IG5fZW51bXMsCgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNsYXNzSW5mbyAq Y29uc3QgY2xhc3NfaW5mbywgaW50IG5faW5mbyApOwoKICAgIGNvbnN0IFFNZXRhRW51bSAqZW51 bWVyYXRvciggY29uc3QgY2hhciogbmFtZSwgYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7CgoK ICAgIHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCggY29uc3QgY2hhciAqY2xhc3NfbmFt ZSApOwoKcHJpdmF0ZToKICAgIFFNZW1iZXJEaWN0ICppbml0KCBjb25zdCBRTWV0YURhdGEgKiwg aW50ICk7CgogICAgY29uc3QgY2hhciAqY2xhc3NuYW1lOwogICAgY29uc3QgY2hhciAqc3VwZXJj bGFzc25hbWU7CiAgICBRTWV0YU9iamVjdCAqc3VwZXJjbGFzczsKICAgIFFNZXRhT2JqZWN0UHJp dmF0ZSAqZDsKICAgIHZvaWQgKnJlc2VydmVkOwogICAgY29uc3QgUU1ldGFEYXRhICpzbG90RGF0 YTsKICAgIFFNZW1iZXJEaWN0ICpzbG90RGljdDsKICAgIGNvbnN0IFFNZXRhRGF0YSAqc2lnbmFs RGF0YTsKICAgIFFNZW1iZXJEaWN0ICpzaWduYWxEaWN0OwogICAgaW50IHNpZ25hbG9mZnNldDsK ICAgIGludCBzbG90b2Zmc2V0OwoKICAgIGludCBwcm9wZXJ0eW9mZnNldDsKCgpwcml2YXRlOgoK ICAgIFFNZXRhT2JqZWN0KCBjb25zdCBRTWV0YU9iamVjdCAmICk7CiAgICBRTWV0YU9iamVjdCAm b3BlcmF0b3I9KCBjb25zdCBRTWV0YU9iamVjdCAmICk7Cgp9OwoKaW5saW5lIGludCBRTWV0YU9i amVjdDo6c2xvdE9mZnNldCgpIGNvbnN0CnsgcmV0dXJuIHNsb3RvZmZzZXQ7IH0KCmlubGluZSBp bnQgUU1ldGFPYmplY3Q6OnNpZ25hbE9mZnNldCgpIGNvbnN0CnsgcmV0dXJuIHNpZ25hbG9mZnNl dDsgfQoKCmlubGluZSBpbnQgUU1ldGFPYmplY3Q6OnByb3BlcnR5T2Zmc2V0KCkgY29uc3QKeyBy ZXR1cm4gcHJvcGVydHlvZmZzZXQ7IH0KCgpjbGFzcyBRTWV0YU9iamVjdENsZWFuVXAKewpwdWJs aWM6CiAgICBRTWV0YU9iamVjdENsZWFuVXAoKTsKICAgIH5RTWV0YU9iamVjdENsZWFuVXAoKTsK CiAgICB2b2lkIHNldE1ldGFPYmplY3QoIFFNZXRhT2JqZWN0ICombW8gKTsKCnByaXZhdGU6CiAg ICBRTWV0YU9iamVjdCAqKm1ldGFPYmplY3Q7Cn07CiMgMTMgIm1vY190aW1lbGFiZWwuY3BwIiAy CiMgMSAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FhcHBsaWNhdGlvbi5o IiAxCiMgNDIgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xYXBwbGljYXRp b24uaCIKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWRlc2t0b3B3 aWRnZXQuaCIgMQojIDQ1ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWRl c2t0b3B3aWRnZXQuaCIKY2xhc3MgUURlc2t0b3BXaWRnZXRQcml2YXRlOwoKY2xhc3MgUURlc2t0 b3BXaWRnZXQgOiBwdWJsaWMgUVdpZGdldAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmpl Y3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmly dHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0 KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiAp OyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0 X3Byb3BlcnR5KCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3Rh dGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRo aXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp OyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp OyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CnB1YmxpYzoKICAgIFFEZXNr dG9wV2lkZ2V0KCk7CiAgICB+UURlc2t0b3BXaWRnZXQoKTsKCiAgICBib29sIGlzVmlydHVhbERl c2t0b3AoKSBjb25zdDsKCiAgICBpbnQgbnVtU2NyZWVucygpIGNvbnN0OwogICAgaW50IHByaW1h cnlTY3JlZW4oKSBjb25zdDsKCiAgICBpbnQgc2NyZWVuTnVtYmVyKCBRV2lkZ2V0ICp3aWRnZXQg PSAwICkgY29uc3Q7CiAgICBpbnQgc2NyZWVuTnVtYmVyKCBjb25zdCBRUG9pbnQgJiApIGNvbnN0 OwoKICAgIFFXaWRnZXQgKnNjcmVlbiggaW50IHNjcmVlbiA9IC0xICk7CgogICAgY29uc3QgUVJl Y3QmIHNjcmVlbkdlb21ldHJ5KCBpbnQgc2NyZWVuID0gLTEgKSBjb25zdDsKIyA3NCAiL3Vzci9s b2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FkZXNrdG9wd2lkZ2V0LmgiCnByaXZhdGU6 CiAgICBRRGVza3RvcFdpZGdldFByaXZhdGUgKmQ7Cn07CiMgNDMgIi91c3IvbG9jYWwvcXQteDEx LWZyZWUtMy4wLjYvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMgojIDEgIi91c3IvbG9jYWwvcXQt eDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xYXNjaWlkaWN0LmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9x dC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3Fhc2NpaWRpY3QuaCIKIyAxICIvdXNyL2xvY2FsL3F0 LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcWdkaWN0LmgiIDEKIyA0NiAiL3Vzci9sb2NhbC9xdC14 MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FnZGljdC5oIgpjbGFzcyBRR0RpY3RJdGVyYXRvcjsKY2xh c3MgUUdESXRMaXN0OwoKCmNsYXNzIFFCYXNlQnVja2V0CnsKcHVibGljOgogICAgUVB0ckNvbGxl Y3Rpb246Okl0ZW0gZ2V0RGF0YSgpIHsgcmV0dXJuIGRhdGE7IH0KICAgIFFQdHJDb2xsZWN0aW9u OjpJdGVtIHNldERhdGEoIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYXRhID0g ZDsgfQogICAgUUJhc2VCdWNrZXQgKmdldE5leHQoKSB7IHJldHVybiBuZXh0OyB9CiAgICB2b2lk IHNldE5leHQoIFFCYXNlQnVja2V0ICpuKSB7IG5leHQgPSBuOyB9CnByb3RlY3RlZDoKICAgIFFC YXNlQnVja2V0KCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBkLCBRQmFzZUJ1Y2tldCAqbiApIDogZGF0 YShkKSwgbmV4dChuKSB7fQogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZGF0YTsKICAgIFFCYXNl QnVja2V0ICpuZXh0Owp9OwoKY2xhc3MgUVN0cmluZ0J1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tl dAp7CnB1YmxpYzoKICAgIFFTdHJpbmdCdWNrZXQoIGNvbnN0IFFTdHJpbmcgJmssIFFQdHJDb2xs ZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQs biksIGtleShrKSB7fQogICAgY29uc3QgUVN0cmluZyAmZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4g a2V5OyB9CnByaXZhdGU6CiAgICBRU3RyaW5nIGtleTsKfTsKCmNsYXNzIFFBc2NpaUJ1Y2tldCA6 IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFBc2NpaUJ1Y2tldCggY29uc3QgY2hh ciAqaywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCwgUUJhc2VCdWNrZXQgKm4gKQogICAgICAgIDog UUJhc2VCdWNrZXQoZCxuKSwga2V5KGspIHt9CiAgICBjb25zdCBjaGFyICpnZXRLZXkoKSBjb25z dCB7IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIGNvbnN0IGNoYXIgKmtleTsKfTsKCmNsYXNz IFFJbnRCdWNrZXQgOiBwdWJsaWMgUUJhc2VCdWNrZXQKewpwdWJsaWM6CiAgICBRSW50QnVja2V0 KCBsb25nIGssIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAg ICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgbG9uZyBnZXRLZXkoKSBjb25zdCB7 IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIGxvbmcga2V5Owp9OwoKY2xhc3MgUVB0ckJ1Y2tl dCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFQdHJCdWNrZXQoIHZvaWQgKmss IFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNl QnVja2V0KGQsbiksIGtleShrKSB7fQogICAgdm9pZCAqZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4g a2V5OyB9CnByaXZhdGU6CiAgICB2b2lkICprZXk7Cn07CgoKY2xhc3MgUUdEaWN0IDogcHVibGlj IFFQdHJDb2xsZWN0aW9uCnsKcHVibGljOgogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJu IG51bUl0ZW1zOyB9CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiB2bGVuOyB9CiAgICBR UHRyQ29sbGVjdGlvbjo6SXRlbSBsb29rX3N0cmluZyggY29uc3QgUVN0cmluZyYga2V5LCBRUHRy Q29sbGVjdGlvbjo6SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg KTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGxvb2tfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwg UVB0ckNvbGxlY3Rpb246Okl0ZW0sIGludCApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gbG9v a19pbnQoIGxvbmcga2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CiAgICBRUHRyQ29s bGVjdGlvbjo6SXRlbSBsb29rX3B0ciggdm9pZCAqa2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwg aW50ICk7CgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRh U3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgZW51 bSBLZXlUeXBlIHsgU3RyaW5nS2V5LCBBc2NpaUtleSwgSW50S2V5LCBQdHJLZXkgfTsKCiAgICBR R0RpY3QoIHVpbnQgbGVuLCBLZXlUeXBlIGt0LCBib29sIGNzLCBib29sIGNrICk7CiAgICBRR0Rp Y3QoIGNvbnN0IFFHRGljdCAmICk7CiAgIH5RR0RpY3QoKTsKCiAgICBRR0RpY3QgJm9wZXJhdG9y PSggY29uc3QgUUdEaWN0ICYgKTsKCiAgICBib29sIHJlbW92ZV9zdHJpbmcoIGNvbnN0IFFTdHJp bmcgJmtleSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbT0wICk7CiAgICBib29sIHJlbW92ZV9h c2NpaSggY29uc3QgY2hhciAqa2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAg IGJvb2wgcmVtb3ZlX2ludCggbG9uZyBrZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCAp OwogICAgYm9vbCByZW1vdmVfcHRyKCB2b2lkICprZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0 ZW09MCApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZV9zdHJpbmcoIGNvbnN0IFFTdHJp bmcgJmtleSApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZV9hc2NpaSggY29uc3QgY2hh ciAqa2V5ICk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlX2ludCggbG9uZyBrZXkgKTsK ICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRha2VfcHRyKCB2b2lkICprZXkgKTsKCiAgICB2b2lk IGNsZWFyKCk7CiAgICB2b2lkIHJlc2l6ZSggdWludCApOwoKICAgIGludCBoYXNoS2V5U3RyaW5n KCBjb25zdCBRU3RyaW5nICYgKTsKICAgIGludCBoYXNoS2V5QXNjaWkoIGNvbnN0IGNoYXIgKiAp OwoKICAgIHZvaWQgc3RhdGlzdGljcygpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFt ICZyZWFkKCBRRGF0YVN0cmVhbSAmLCBRUHRyQ29sbGVjdGlvbjo6SXRlbSAmICk7CiAgICB2aXJ0 dWFsIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiwgUVB0ckNvbGxlY3Rpb246Okl0 ZW0gKSBjb25zdDsKCnByaXZhdGU6CiAgICBRQmFzZUJ1Y2tldCAqKnZlYzsKICAgIHVpbnQgdmxl bjsKICAgIHVpbnQgbnVtSXRlbXM7CiAgICB1aW50IGtleXR5cGUgOiAyOwogICAgdWludCBjYXNl cyA6IDE7CiAgICB1aW50IGNvcHlrIDogMTsKICAgIFFHREl0TGlzdCAqaXRlcmF0b3JzOwogICAg dm9pZCB1bmxpbmtfY29tbW9uKCBpbnQsIFFCYXNlQnVja2V0ICosIFFCYXNlQnVja2V0ICogKTsK ICAgIFFTdHJpbmdCdWNrZXQgKnVubGlua19zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW0gPSAw ICk7CiAgICBRQXNjaWlCdWNrZXQgKnVubGlua19hc2NpaSggY29uc3QgY2hhciAqLCBRUHRyQ29s bGVjdGlvbjo6SXRlbSBpdGVtID0gMCApOwogICAgUUludEJ1Y2tldCAqdW5saW5rX2ludCggbG9u ZywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIFFQdHJCdWNrZXQgKnVubGlu a19wdHIoIHZvaWQgKiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIHZvaWQg aW5pdCggdWludCwgS2V5VHlwZSwgYm9vbCwgYm9vbCApOwogICAgZnJpZW5kIGNsYXNzIFFHRGlj dEl0ZXJhdG9yOwp9OwoKCmNsYXNzIFFHRGljdEl0ZXJhdG9yCnsKZnJpZW5kIGNsYXNzIFFHRGlj dDsKcHVibGljOgogICAgUUdEaWN0SXRlcmF0b3IoIGNvbnN0IFFHRGljdCAmICk7CiAgICBRR0Rp Y3RJdGVyYXRvciggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICAgUUdEaWN0SXRlcmF0b3Ig Jm9wZXJhdG9yPSggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICB+UUdEaWN0SXRlcmF0b3Io KTsKCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0b0ZpcnN0KCk7CgogICAgUVB0ckNvbGxlY3Rp b246Okl0ZW0gZ2V0KCkgY29uc3Q7CiAgICBRU3RyaW5nIGdldEtleVN0cmluZygpIGNvbnN0Owog ICAgY29uc3QgY2hhciAqZ2V0S2V5QXNjaWkoKSBjb25zdDsKICAgIGxvbmcgZ2V0S2V5SW50KCkg Y29uc3Q7CiAgICB2b2lkICpnZXRLZXlQdHIoKSBjb25zdDsKCiAgICBRUHRyQ29sbGVjdGlvbjo6 SXRlbSBvcGVyYXRvcigpKCk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcisrKCk7 CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcis9KHVpbnQpOwoKcHJvdGVjdGVkOgog ICAgUUdEaWN0ICpkaWN0OwoKcHJpdmF0ZToKICAgIFFCYXNlQnVja2V0ICpjdXJOb2RlOwogICAg dWludCBjdXJJbmRleDsKfTsKCmlubGluZSBRUHRyQ29sbGVjdGlvbjo6SXRlbSBRR0RpY3RJdGVy YXRvcjo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5nZXREYXRh KCkgOiAwOwp9CgppbmxpbmUgUVN0cmluZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5U3RyaW5nKCkg Y29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFTdHJpbmdCdWNrZXQqKWN1ck5vZGUpLT5n ZXRLZXkoKSA6IFFTdHJpbmc6Om51bGw7Cn0KCmlubGluZSBjb25zdCBjaGFyICpRR0RpY3RJdGVy YXRvcjo6Z2V0S2V5QXNjaWkoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/ICgoUUFzY2lp QnVja2V0KiljdXJOb2RlKS0+Z2V0S2V5KCkgOiAwOwp9CgppbmxpbmUgbG9uZyBRR0RpY3RJdGVy YXRvcjo6Z2V0S2V5SW50KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFJbnRCdWNr ZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KCmlubGluZSB2b2lkICpRR0RpY3RJdGVyYXRv cjo6Z2V0S2V5UHRyKCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFQdHJCdWNrZXQq KWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KIyA0MyAiL3Vzci9sb2NhbC9xdC14MTEtZnJlZS0z LjAuNi9pbmNsdWRlL3Fhc2NpaWRpY3QuaCIgMgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+CmNsYXNz IFFBc2NpaURpY3QKCgoKICAgICAgICA6IHB1YmxpYyBRR0RpY3QKCnsKcHVibGljOgogICAgUUFz Y2lpRGljdChpbnQgc2l6ZT0xNywgYm9vbCBjYXNlU2Vuc2l0aXZlPVRSVUUsIGJvb2wgY29weUtl eXM9VFJVRSApCiAgICAgICAgOiBRR0RpY3Qoc2l6ZSxBc2NpaUtleSxjYXNlU2Vuc2l0aXZlLGNv cHlLZXlzKSB7fQogICAgUUFzY2lpRGljdCggY29uc3QgUUFzY2lpRGljdDx0eXBlPiAmZCApIDog UUdEaWN0KGQpIHt9CiAgIH5RQXNjaWlEaWN0KCkgeyBjbGVhcigpOyB9CiAgICBRQXNjaWlEaWN0 PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUUFzY2lpRGljdDx0eXBlPiAmZCkKICAgICAgICAgICAg ICAgICAgICAgICAgeyByZXR1cm4gKFFBc2NpaURpY3Q8dHlwZT4mKVFHRGljdDo6b3BlcmF0b3I9 KGQpOyB9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpOyB9 CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OnNpemUoKTsgfQogICAgYm9v bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpID09IDA7IH0KCiAgICB2 b2lkIGluc2VydCggY29uc3QgY2hhciAqaywgY29uc3QgdHlwZSAqZCApCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7IFFHRGljdDo6bG9va19hc2NpaShrLChJdGVtKWQs MSk7IH0KICAgIHZvaWQgcmVwbGFjZSggY29uc3QgY2hhciAqaywgY29uc3QgdHlwZSAqZCApCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFFHRGljdDo6bG9va19hc2Np aShrLChJdGVtKWQsMik7IH0KICAgIGJvb2wgcmVtb3ZlKCBjb25zdCBjaGFyICprICkgeyByZXR1 cm4gUUdEaWN0OjpyZW1vdmVfYXNjaWkoayk7IH0KICAgIHR5cGUgKnRha2UoIGNvbnN0IGNoYXIg KmsgKSB7IHJldHVybiAodHlwZSAqKVFHRGljdDo6dGFrZV9hc2NpaShrKTsgfQogICAgdHlwZSAq ZmluZCggY29uc3QgY2hhciAqayApIGNvbnN0CiAgICAgICAgICAgICAgICB7IHJldHVybiAodHlw ZSAqKSgoUUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX2FzY2lpKGssMCwwKTsgfQogICAgdHlw ZSAqb3BlcmF0b3JbXSggY29uc3QgY2hhciAqayApIGNvbnN0CiAgICAgICAgICAgICAgICB7IHJl dHVybiAodHlwZSAqKSgoUUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX2FzY2lpKGssMCwwKTsg fQoKICAgIHZvaWQgY2xlYXIoKSB7IFFHRGljdDo6Y2xlYXIoKTsgfQogICAgdm9pZCByZXNpemUo IHVpbnQgbiApIHsgUUdEaWN0OjpyZXNpemUobik7IH0KICAgIHZvaWQgc3RhdGlzdGljcygpIGNv bnN0IHsgUUdEaWN0OjpzdGF0aXN0aWNzKCk7IH0KCgoKCgoKCnByaXZhdGU6CiAgICB2b2lkIGRl bGV0ZUl0ZW0oIEl0ZW0gZCApOwp9OwoKCnRlbXBsYXRlPD4gaW5saW5lIHZvaWQgUUFzY2lpRGlj dDx2b2lkPjo6ZGVsZXRlSXRlbSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gKQp7Cn0KCgp0ZW1wbGF0 ZTxjbGFzcyB0eXBlPiBpbmxpbmUgdm9pZCBRQXNjaWlEaWN0PHR5cGU+OjpkZWxldGVJdGVtKCBR UHRyQ29sbGVjdGlvbjo6SXRlbSBkICkKewogICAgaWYgKCBkZWxfaXRlbSApIGRlbGV0ZSAodHlw ZSAqKWQ7Cn0KCnRlbXBsYXRlPGNsYXNzIHR5cGU+CmNsYXNzIFFBc2NpaURpY3RJdGVyYXRvcgo6 IHB1YmxpYyBRR0RpY3RJdGVyYXRvcgp7CnB1YmxpYzoKICAgIFFBc2NpaURpY3RJdGVyYXRvcihj b25zdCBRQXNjaWlEaWN0PHR5cGU+ICZkKQogICAgICAgIDogUUdEaWN0SXRlcmF0b3IoKFFHRGlj dCAmKWQpIHt9CiAgIH5RQXNjaWlEaWN0SXRlcmF0b3IoKSB7fQogICAgdWludCBjb3VudCgpIGNv bnN0IHsgcmV0dXJuIGRpY3QtPmNvdW50KCk7IH0KICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg cmV0dXJuIGRpY3QtPmNvdW50KCkgPT0gMDsgfQogICAgdHlwZSAqdG9GaXJzdCgpIHsgcmV0dXJu ICh0eXBlICopUUdEaWN0SXRlcmF0b3I6OnRvRmlyc3QoKTsgfQogICAgb3BlcmF0b3IgdHlwZSAq KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5 cGUgKmN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQo KTsgfQogICAgY29uc3QgY2hhciAqY3VycmVudEtleSgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdEl0 ZXJhdG9yOjpnZXRLZXlBc2NpaSgpOyB9CiAgICB0eXBlICpvcGVyYXRvcigpKCkgeyByZXR1cm4g KHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IoKSgpOyB9CiAgICB0eXBlICpvcGVyYXRv cisrKCkgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IrKygpOyB9CiAg ICB0eXBlICpvcGVyYXRvcis9KHVpbnQgaikgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRv cjo6b3BlcmF0b3IrPShqKTt9Cn07CiMgNDQgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYv aW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMu MC42L2luY2x1ZGUvcXRyYW5zbGF0b3IuaCIgMQojIDQ5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVl LTMuMC42L2luY2x1ZGUvcXRyYW5zbGF0b3IuaCIKY2xhc3MgUVRyYW5zbGF0b3JQcml2YXRlOwoK Y2xhc3MgUVRyYW5zbGF0b3JNZXNzYWdlCnsKcHVibGljOgogICAgUVRyYW5zbGF0b3JNZXNzYWdl KCk7CiAgICBRVHJhbnNsYXRvck1lc3NhZ2UoIGNvbnN0IGNoYXIgKiBjb250ZXh0LAogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogc291cmNlVGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqIGNvbW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFFTdHJpbmcmIHRyYW5zbGF0aW9uID0gUVN0cmluZzo6bnVsbCApOwogICAgUVRyYW5zbGF0 b3JNZXNzYWdlKCBRRGF0YVN0cmVhbSAmICk7CiAgICBRVHJhbnNsYXRvck1lc3NhZ2UoIGNvbnN0 IFFUcmFuc2xhdG9yTWVzc2FnZSAmIG0gKTsKCiAgICBRVHJhbnNsYXRvck1lc3NhZ2UgJiBvcGVy YXRvcj0oIGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSAmIG0gKTsKCiAgICB1aW50IGhhc2goKSBj b25zdCB7IHJldHVybiBoOyB9CiAgICBjb25zdCBjaGFyICpjb250ZXh0KCkgY29uc3QgeyByZXR1 cm4gY3g7IH0KICAgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQoKSBjb25zdCB7IHJldHVybiBzdDsg fQogICAgY29uc3QgY2hhciAqY29tbWVudCgpIGNvbnN0IHsgcmV0dXJuIGNtOyB9CgogICAgdm9p ZCBzZXRUcmFuc2xhdGlvbiggY29uc3QgUVN0cmluZyAmIHRyYW5zbGF0aW9uICkgeyB0biA9IHRy YW5zbGF0aW9uOyB9CiAgICBRU3RyaW5nIHRyYW5zbGF0aW9uKCkgY29uc3QgeyByZXR1cm4gdG47 IH0KCiAgICBlbnVtIFByZWZpeCB7IE5vUHJlZml4LCBIYXNoLCBIYXNoQ29udGV4dCwgSGFzaENv bnRleHRTb3VyY2VUZXh0LAogICAgICAgICAgICAgICAgICBIYXNoQ29udGV4dFNvdXJjZVRleHRD b21tZW50IH07CiAgICB2b2lkIHdyaXRlKCBRRGF0YVN0cmVhbSAmIHMsIGJvb2wgc3RyaXAgPSBG QUxTRSwKICAgICAgICAgICAgICAgIFByZWZpeCBwcmVmaXggPSBIYXNoQ29udGV4dFNvdXJjZVRl eHRDb21tZW50ICkgY29uc3Q7CiAgICBQcmVmaXggY29tbW9uUHJlZml4KCBjb25zdCBRVHJhbnNs YXRvck1lc3NhZ2UmICkgY29uc3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVHJhbnNs YXRvck1lc3NhZ2UmIG0gKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVRyYW5z bGF0b3JNZXNzYWdlJiBtICkgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KCBtICk7IH0K ICAgIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmIG0gKSBjb25zdDsK ICAgIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3QK ICAgIHsgcmV0dXJuICFtLm9wZXJhdG9yPCggKnRoaXMgKTsgfQogICAgYm9vbCBvcGVyYXRvcj4o IGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgbSApIGNvbnN0CiAgICB7IHJldHVybiBtLm9wZXJh dG9yPCggKnRoaXMgKTsgfQogICAgYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRVHJhbnNsYXRvck1l c3NhZ2UmIG0gKSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPCggbSApOyB9Cgpwcml2YXRl OgogICAgdWludCBoOwogICAgUUNTdHJpbmcgY3g7CiAgICBRQ1N0cmluZyBzdDsKICAgIFFDU3Ry aW5nIGNtOwogICAgUVN0cmluZyB0bjsKCiAgICBlbnVtIFRhZyB7IFRhZ19FbmQgPSAxLCBUYWdf U291cmNlVGV4dDE2LCBUYWdfVHJhbnNsYXRpb24sIFRhZ19Db250ZXh0MTYsCiAgICAgICAgICAg ICAgIFRhZ19IYXNoLCBUYWdfU291cmNlVGV4dCwgVGFnX0NvbnRleHQsIFRhZ19Db21tZW50LAog ICAgICAgICAgICAgICBUYWdfT2Jzb2xldGUxIH07Cn07CgoKY2xhc3MgUVRyYW5zbGF0b3I6IHB1 YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVj dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNo YXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIq ICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9v bCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGlu dCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0 KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMg UVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3Ry aW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0 YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUVRyYW5zbGF0b3IoIFFPYmpl Y3QgKiBwYXJlbnQsIGNvbnN0IGNoYXIgKiBuYW1lID0gMCApOwogICAgflFUcmFuc2xhdG9yKCk7 CgoKICAgIFFTdHJpbmcgZmluZCggY29uc3QgY2hhciAqY29udGV4dCwgY29uc3QgY2hhciAqc291 cmNlVGV4dCwgY29uc3QgY2hhciAqIGNvbW1lbnQgPSAwICkgY29uc3QgewogICAgICAgIHJldHVy biBmaW5kTWVzc2FnZSggY29udGV4dCwgc291cmNlVGV4dCwgY29tbWVudCApLnRyYW5zbGF0aW9u KCk7CiAgICB9CgogICAgdmlydHVhbCBRVHJhbnNsYXRvck1lc3NhZ2UgZmluZE1lc3NhZ2UoIGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICogKSBjb25zdDsKCiAgICBib29sIGxvYWQoIGNvbnN0IFFTdHJpbmcg JiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmIGRpcmVjdG9yeSA9IFFT dHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJiBzZWFyY2hfZGVsaW1p dGVycyA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJiBzdWZm aXggPSBRU3RyaW5nOjpudWxsICk7CgogICAgdm9pZCBjbGVhcigpOwoKCiAgICBlbnVtIFNhdmVN b2RlIHsgRXZlcnl0aGluZywgU3RyaXBwZWQgfTsKCiAgICBib29sIHNhdmUoIGNvbnN0IFFTdHJp bmcgJiBmaWxlbmFtZSwgU2F2ZU1vZGUgbW9kZSA9IEV2ZXJ5dGhpbmcgKTsKCiAgICB2b2lkIGlu c2VydCggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiApOwogICAgdm9pZCBpbnNlcnQoIGNvbnN0 IGNoYXIgKmNvbnRleHQsIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsIGNvbnN0IFFTdHJpbmcgJnRy YW5zbGF0aW9uICkgewogICAgICAgIGluc2VydCggUVRyYW5zbGF0b3JNZXNzYWdlKGNvbnRleHQs IHNvdXJjZVRleHQsICIiLCB0cmFuc2xhdGlvbikgKTsKICAgIH0KICAgIHZvaWQgcmVtb3ZlKCBj b25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmICk7CiAgICB2b2lkIHJlbW92ZSggY29uc3QgY2hhciAq Y29udGV4dCwgY29uc3QgY2hhciAqc291cmNlVGV4dCApIHsKICAgICAgICByZW1vdmUoIFFUcmFu c2xhdG9yTWVzc2FnZShjb250ZXh0LCBzb3VyY2VUZXh0LCAiIikgKTsKICAgIH0KICAgIGJvb2wg Y29udGFpbnMoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogY29tbWVu dCA9IDAgKSBjb25zdDsKCiAgICB2b2lkIHNxdWVlemUoIFNhdmVNb2RlID0gRXZlcnl0aGluZyAp OwogICAgdm9pZCB1bnNxdWVlemUoKTsKCiAgICBRVmFsdWVMaXN0PFFUcmFuc2xhdG9yTWVzc2Fn ZT4gbWVzc2FnZXMoKSBjb25zdDsKCgpwcml2YXRlOgogICAgUVRyYW5zbGF0b3JQcml2YXRlICog ZDsKCnByaXZhdGU6CgogICAgUVRyYW5zbGF0b3IoIGNvbnN0IFFUcmFuc2xhdG9yICYgKTsKICAg IFFUcmFuc2xhdG9yICZvcGVyYXRvcj0oIGNvbnN0IFFUcmFuc2xhdG9yICYgKTsKCn07CiMgNDYg Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMgoK IyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXN0cmluZ2xpc3QuaCIg MQojIDQ5ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcXN0cmluZ2xpc3Qu aCIKY2xhc3MgUVJlZ0V4cDsKCmNsYXNzIFFTdHJpbmdMaXN0IDogcHVibGljIFFWYWx1ZUxpc3Q8 UVN0cmluZz4KewpwdWJsaWM6CiAgICBRU3RyaW5nTGlzdCgpIHsgfQogICAgUVN0cmluZ0xpc3Qo IGNvbnN0IFFTdHJpbmdMaXN0JiBsICkgOiBRVmFsdWVMaXN0PFFTdHJpbmc+KGwpIHsgfQogICAg UVN0cmluZ0xpc3QoIGNvbnN0IFFWYWx1ZUxpc3Q8UVN0cmluZz4mIGwgKSA6IFFWYWx1ZUxpc3Q8 UVN0cmluZz4obCkgeyB9CiAgICBRU3RyaW5nTGlzdCggY29uc3QgUVN0cmluZyYgaSApIHsgYXBw ZW5kKGkpOyB9CgogICAgUVN0cmluZ0xpc3QoIGNvbnN0IGNoYXIqIGkgKSB7IGFwcGVuZChpKTsg fQoKCiAgICBzdGF0aWMgUVN0cmluZ0xpc3QgZnJvbVN0ckxpc3QoY29uc3QgUVN0ckxpc3QmKTsK CiAgICB2b2lkIHNvcnQoKTsKCiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFT dHJpbmcgJnNlcCwgY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0g RkFMU0UgKTsKICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBzcGxpdCggY29uc3QgUUNoYXIgJnNlcCwg Y29uc3QgUVN0cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKCiAg ICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFSZWdFeHAgJnNlcCwgY29uc3QgUVN0 cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKCiAgICBRU3RyaW5n IGpvaW4oIGNvbnN0IFFTdHJpbmcgJnNlcCApIGNvbnN0OwoKICAgIFFTdHJpbmdMaXN0IGdyZXAo IGNvbnN0IFFTdHJpbmcgJnN0ciwgYm9vbCBjcyA9IFRSVUUgKSBjb25zdDsKCiAgICBRU3RyaW5n TGlzdCBncmVwKCBjb25zdCBRUmVnRXhwICZleHByICkgY29uc3Q7Cgp9OwoKCmNsYXNzIFFEYXRh U3RyZWFtOwpleHRlcm4gUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFT dHJpbmdMaXN0JiApOwpleHRlcm4gUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFt ICYsIGNvbnN0IFFTdHJpbmdMaXN0JiApOwojIDQ4ICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMu MC42L2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiIDIKCgpjbGFzcyBRU2Vzc2lvbk1hbmFnZXI7CmNs YXNzIFFTdHlsZTsKY2xhc3MgUVRyYW5zbGF0b3I7CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgdHlwZT4g Y2xhc3MgUVB0ckxpc3Q7CgpjbGFzcyBRQXBwbGljYXRpb247CmV4dGVybiBRQXBwbGljYXRpb24g KnFBcHA7CgoKCgoKCmNsYXNzIFFBcHBsaWNhdGlvbiA6IHB1YmxpYyBRT2JqZWN0CnsKICAgIHB1 YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0 YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0 OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9p bnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2Jq ZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCwgaW50LCBRVmFyaWFudCogKTsg c3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3Qo KSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0 YU9iajsKcHVibGljOgogICAgUUFwcGxpY2F0aW9uKCBpbnQgJmFyZ2MsIGNoYXIgKiphcmd2KTsK ICAgIFFBcHBsaWNhdGlvbiggaW50ICZhcmdjLCBjaGFyICoqYXJndiwgYm9vbCBHVUllbmFibGVk ICk7CiAgICBlbnVtIFR5cGUgeyBUdHksIEd1aUNsaWVudCwgR3VpU2VydmVyIH07CiAgICBRQXBw bGljYXRpb24oIGludCAmYXJnYywgY2hhciAqKmFyZ3YsIFR5cGUgKTsKCiAgICBRQXBwbGljYXRp b24oIERpc3BsYXkqIGRweSwgSEFORExFIHZpc3VhbCA9IDAsIEhBTkRMRSBjbWFwID0gMCApOwog ICAgUUFwcGxpY2F0aW9uKCBEaXNwbGF5ICpkcHksIGludCBhcmdjLCBjaGFyICoqYXJndiwKICAg ICAgICAgICAgICAgICAgSEFORExFIHZpc3VhbCA9IDAsIEhBTkRMRSBjbWFwPSAwICk7CgogICAg dmlydHVhbCB+UUFwcGxpY2F0aW9uKCk7CgogICAgaW50IGFyZ2MoKSBjb25zdDsKICAgIGNoYXIg Kiphcmd2KCkgY29uc3Q7CgogICAgVHlwZSB0eXBlKCkgY29uc3Q7CgoKICAgIHN0YXRpYyBRU3R5 bGUgJnN0eWxlKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRTdHlsZSggUVN0eWxlKiApOwogICAgc3Rh dGljIFFTdHlsZSogc2V0U3R5bGUoIGNvbnN0IFFTdHJpbmcmICk7CgoKICAgIGVudW0gQ29sb3JN b2RlIHsgTm9ybWFsQ29sb3JzLCBDdXN0b21Db2xvcnMgfTsKICAgIHN0YXRpYyBDb2xvck1vZGUg Y29sb3JNb2RlKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRDb2xvck1vZGUoIFFBcHBsaWNhdGlvbjo6 Q29sb3JNb2RlICk7CgoKICAgIGVudW0gQ29sb3JTcGVjIHsgTm9ybWFsQ29sb3I9MCwgQ3VzdG9t Q29sb3I9MSwgTWFueUNvbG9yPTIgfTsKICAgIHN0YXRpYyBpbnQgY29sb3JTcGVjKCk7CiAgICBz dGF0aWMgdm9pZCBzZXRDb2xvclNwZWMoIGludCApOwoKICAgIHN0YXRpYyBRQ3Vyc29yICpvdmVy cmlkZUN1cnNvcigpOwogICAgc3RhdGljIHZvaWQgc2V0T3ZlcnJpZGVDdXJzb3IoIGNvbnN0IFFD dXJzb3IgJiwgYm9vbCByZXBsYWNlPUZBTFNFICk7CiAgICBzdGF0aWMgdm9pZCByZXN0b3JlT3Zl cnJpZGVDdXJzb3IoKTsKCiAgICBzdGF0aWMgYm9vbCBoYXNHbG9iYWxNb3VzZVRyYWNraW5nKCk7 CiAgICBzdGF0aWMgdm9pZCBzZXRHbG9iYWxNb3VzZVRyYWNraW5nKCBib29sIGVuYWJsZSApOwoK ICAgIHN0YXRpYyBRUGFsZXR0ZSBwYWxldHRlKCBjb25zdCBRV2lkZ2V0KiA9IDAgKTsKICAgIHN0 YXRpYyB2b2lkIHNldFBhbGV0dGUoIGNvbnN0IFFQYWxldHRlICYsIGJvb2wgaW5mb3JtV2lkZ2V0 cz1GQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY2xh c3NOYW1lID0gMCApOwoKICAgIHN0YXRpYyBRRm9udCBmb250KCBjb25zdCBRV2lkZ2V0KiA9IDAg KTsKICAgIHN0YXRpYyB2b2lkIHNldEZvbnQoIGNvbnN0IFFGb250ICYsIGJvb2wgaW5mb3JtV2lk Z2V0cz1GQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY2xh c3NOYW1lID0gMCApOwogICAgc3RhdGljIFFGb250TWV0cmljcyBmb250TWV0cmljcygpOwoKICAg IFFXaWRnZXQgKm1haW5XaWRnZXQoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluV2lk Z2V0KCBRV2lkZ2V0ICogKTsKICAgIHZpcnR1YWwgdm9pZCBwb2xpc2goIFFXaWRnZXQgKiApOwoK ICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqYWxsV2lkZ2V0cygpOwogICAgc3RhdGljIFFXaWRnZXRM aXN0ICp0b3BMZXZlbFdpZGdldHMoKTsKCiAgICBzdGF0aWMgUURlc2t0b3BXaWRnZXQgKmRlc2t0 b3AoKTsKCiAgICBzdGF0aWMgUVdpZGdldCAqYWN0aXZlUG9wdXBXaWRnZXQoKTsKICAgIHN0YXRp YyBRV2lkZ2V0ICphY3RpdmVNb2RhbFdpZGdldCgpOwoKICAgIHN0YXRpYyBRQ2xpcGJvYXJkICpj bGlwYm9hcmQoKTsKCiAgICBRV2lkZ2V0ICpmb2N1c1dpZGdldCgpIGNvbnN0OwogICAgUVdpZGdl dCAqYWN0aXZlV2luZG93KCkgY29uc3Q7CgogICAgc3RhdGljIFFXaWRnZXQgKndpZGdldEF0KCBp bnQgeCwgaW50IHksIGJvb2wgY2hpbGQ9RkFMU0UgKTsKICAgIHN0YXRpYyBRV2lkZ2V0ICp3aWRn ZXRBdCggY29uc3QgUVBvaW50ICYsIGJvb2wgY2hpbGQ9RkFMU0UgKTsKCiAgICBpbnQgZXhlYygp OwogICAgdm9pZCBwcm9jZXNzRXZlbnRzKCk7CiAgICB2b2lkIHByb2Nlc3NFdmVudHMoIGludCBt YXh0aW1lICk7CiAgICB2b2lkIHByb2Nlc3NPbmVFdmVudCgpOwogICAgYm9vbCBoYXNQZW5kaW5n RXZlbnRzKCk7CiAgICBpbnQgZW50ZXJfbG9vcCgpOwogICAgdm9pZCBleGl0X2xvb3AoKTsKICAg IGludCBsb29wTGV2ZWwoKSBjb25zdDsKICAgIHN0YXRpYyB2b2lkIGV4aXQoIGludCByZXRjb2Rl PTAgKTsKCiAgICBzdGF0aWMgYm9vbCBzZW5kRXZlbnQoIFFPYmplY3QgKnJlY2VpdmVyLCBRRXZl bnQgKmV2ZW50ICk7CiAgICBzdGF0aWMgdm9pZCBwb3N0RXZlbnQoIFFPYmplY3QgKnJlY2VpdmVy LCBRRXZlbnQgKmV2ZW50ICk7CiAgICBzdGF0aWMgdm9pZCBzZW5kUG9zdGVkRXZlbnRzKCBRT2Jq ZWN0ICpyZWNlaXZlciwgaW50IGV2ZW50X3R5cGUgKTsKICAgIHN0YXRpYyB2b2lkIHNlbmRQb3N0 ZWRFdmVudHMoKTsKCiAgICBzdGF0aWMgdm9pZCByZW1vdmVQb3N0ZWRFdmVudHMoIFFPYmplY3Qg KnJlY2VpdmVyICk7CgogICAgdmlydHVhbCBib29sIG5vdGlmeSggUU9iamVjdCAqLCBRRXZlbnQg KiApOwoKICAgIHN0YXRpYyBib29sIHN0YXJ0aW5nVXAoKTsKICAgIHN0YXRpYyBib29sIGNsb3Np bmdEb3duKCk7CgogICAgc3RhdGljIHZvaWQgZmx1c2hYKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVz aCgpOwogICAgc3RhdGljIHZvaWQgc3luY1goKTsKCiAgICBzdGF0aWMgdm9pZCBiZWVwKCk7CgoK ICAgIHZvaWQgc2V0RGVmYXVsdENvZGVjKCBRVGV4dENvZGVjICogKTsKICAgIFFUZXh0Q29kZWMq IGRlZmF1bHRDb2RlYygpIGNvbnN0OwogICAgdm9pZCBpbnN0YWxsVHJhbnNsYXRvciggUVRyYW5z bGF0b3IgKiApOwogICAgdm9pZCByZW1vdmVUcmFuc2xhdG9yKCBRVHJhbnNsYXRvciAqICk7Cgog ICAgZW51bSBFbmNvZGluZyB7IERlZmF1bHRDb2RlYywgVW5pY29kZVVURjggfTsKICAgIFFTdHJp bmcgdHJhbnNsYXRlKCBjb25zdCBjaGFyICogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICoga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKiBjb21tZW50ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFbmNvZGluZyBlbmNvZGluZyA9IERlZmF1bHRDb2RlYyApIGNvbnN0OwoKCiAgICBzdGF0 aWMgdm9pZCBzZXRXaW5TdHlsZUhpZ2hsaWdodENvbG9yKCBjb25zdCBRQ29sb3IgJmMgKSB7CiAg ICAgICAgUVBhbGV0dGUgcCggcGFsZXR0ZSgpICk7CiAgICAgICAgcC5zZXRDb2xvciggUUNvbG9y R3JvdXA6OkhpZ2hsaWdodCwgYyApOwogICAgICAgIHNldFBhbGV0dGUoIHAsIFRSVUUpOwogICAg fQogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmd2luU3R5bGVIaWdobGlnaHRDb2xvcigpIHsKICAg ICAgICByZXR1cm4gcGFsZXR0ZSgpLmFjdGl2ZSgpLmhpZ2hsaWdodCgpOwogICAgfQoKICAgIHN0 YXRpYyB2b2lkIHNldERlc2t0b3BTZXR0aW5nc0F3YXJlKCBib29sICk7CiAgICBzdGF0aWMgYm9v bCBkZXNrdG9wU2V0dGluZ3NBd2FyZSgpOwoKICAgIHN0YXRpYyB2b2lkIHNldEN1cnNvckZsYXNo VGltZSggaW50ICk7CiAgICBzdGF0aWMgaW50IGN1cnNvckZsYXNoVGltZSgpOwoKICAgIHN0YXRp YyB2b2lkIHNldERvdWJsZUNsaWNrSW50ZXJ2YWwoIGludCApOwogICAgc3RhdGljIGludCBkb3Vi bGVDbGlja0ludGVydmFsKCk7CgogICAgc3RhdGljIHZvaWQgc2V0V2hlZWxTY3JvbGxMaW5lcygg aW50ICk7CiAgICBzdGF0aWMgaW50IHdoZWVsU2Nyb2xsTGluZXMoKTsKCiAgICBzdGF0aWMgdm9p ZCBzZXRHbG9iYWxTdHJ1dCggY29uc3QgUVNpemUgJiApOwogICAgc3RhdGljIFFTaXplIGdsb2Jh bFN0cnV0KCk7CgoKICAgIHN0YXRpYyB2b2lkIHNldExpYnJhcnlQYXRocyhjb25zdCBRU3RyaW5n TGlzdCAmKTsKICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBsaWJyYXJ5UGF0aHMoKTsKICAgIHN0YXRp YyB2b2lkIGFkZExpYnJhcnlQYXRoKGNvbnN0IFFTdHJpbmcgJik7CiAgICBzdGF0aWMgdm9pZCBy ZW1vdmVMaWJyYXJ5UGF0aChjb25zdCBRU3RyaW5nICYpOwoKICAgIHN0YXRpYyB2b2lkIHNldFN0 YXJ0RHJhZ1RpbWUoIGludCBtcyApOwogICAgc3RhdGljIGludCBzdGFydERyYWdUaW1lKCk7CiAg ICBzdGF0aWMgdm9pZCBzZXRTdGFydERyYWdEaXN0YW5jZSggaW50IGwgKTsKICAgIHN0YXRpYyBp bnQgc3RhcnREcmFnRGlzdGFuY2UoKTsKCiAgICBzdGF0aWMgdm9pZCBzZXRSZXZlcnNlTGF5b3V0 KCBib29sIGIgKTsKICAgIHN0YXRpYyBib29sIHJldmVyc2VMYXlvdXQoKTsKCiAgICBzdGF0aWMg aW50IGhvcml6b250YWxBbGlnbm1lbnQoIGludCBhbGlnbiApOwoKICAgIHN0YXRpYyBib29sIGlz RWZmZWN0RW5hYmxlZCggUXQ6OlVJRWZmZWN0ICk7CiAgICBzdGF0aWMgdm9pZCBzZXRFZmZlY3RF bmFibGVkKCBRdDo6VUlFZmZlY3QsIGJvb2wgZW5hYmxlID0gVFJVRSApOwojIDIyOSAiL3Vzci9s b2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3FhcHBsaWNhdGlvbi5oIgogICAgdmlydHVh bCBib29sIHgxMUV2ZW50RmlsdGVyKCBYRXZlbnQgKiApOwogICAgdmlydHVhbCBpbnQgeDExQ2xp ZW50TWVzc2FnZSggUVdpZGdldCosIFhFdmVudCosIGJvb2wgcGFzc2l2ZV9vbmx5KTsKICAgIGlu dCB4MTFQcm9jZXNzRXZlbnQoIFhFdmVudCogKTsKIyAyNTMgIi91c3IvbG9jYWwvcXQteDExLWZy ZWUtMy4wLjYvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIKICAgIGJvb2wgaXNTZXNzaW9uUmVzdG9y ZWQoKSBjb25zdDsKICAgIFFTdHJpbmcgc2Vzc2lvbklkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZv aWQgY29tbWl0RGF0YSggUVNlc3Npb25NYW5hZ2VyJiBzbSApOwogICAgdmlydHVhbCB2b2lkIHNh dmVTdGF0ZSggUVNlc3Npb25NYW5hZ2VyJiBzbSApOwoKCiAgICBzdGF0aWMgdm9pZCBjcmVhdGVf eGltKCk7CiAgICBzdGF0aWMgdm9pZCBjbG9zZV94aW0oKTsKICAgIHN0YXRpYyBib29sIHgxMV9h cHBseV9zZXR0aW5ncygpOwoKICAgIHZvaWQgd2FrZVVwR3VpVGhyZWFkKCk7CgoKCgoKCgpwcm90 ZWN0ZWQ6CiAgICB2b2lkIGxhc3RXaW5kb3dDbG9zZWQoKTsKICAgIHZvaWQgYWJvdXRUb1F1aXQo KTsKICAgIHZvaWQgZ3VpVGhyZWFkQXdha2UoKTsKCnB1YmxpYyA6CiAgICB2b2lkIHF1aXQoKTsK ICAgIHZvaWQgY2xvc2VBbGxXaW5kb3dzKCk7Cgpwcml2YXRlOgogICAgdm9pZCBjb25zdHJ1Y3Qo IGludCAmYXJnYywgY2hhciAqKmFyZ3YsIFR5cGUgKTsKICAgIGJvb2wgcHJvY2Vzc05leHRFdmVu dCggYm9vbCApOwogICAgdm9pZCBpbml0aWFsaXplKCBpbnQsIGNoYXIgKiogKTsKICAgIHZvaWQg aW5pdF9wcmVjbWRsaW5lKCk7CiAgICB2b2lkIHByb2Nlc3NfY21kbGluZSggaW50KiBhcmdjcHRy LCBjaGFyICoqIGFyZ3YgKTsKICAgIGJvb2wgaW50ZXJuYWxOb3RpZnkoIFFPYmplY3QgKiwgUUV2 ZW50ICogKTsKIyAzMDggIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xYXBw bGljYXRpb24uaCIKICAgIGludCBhcHBfYXJnYzsKICAgIGNoYXIgKiphcHBfYXJndjsKICAgIGJv b2wgcXVpdF9ub3c7CiAgICBpbnQgcXVpdF9jb2RlOwogICAgc3RhdGljIFFTdHlsZSAqYXBwX3N0 eWxlOwogICAgc3RhdGljIGludCBhcHBfY3NwZWM7CgogICAgc3RhdGljIFFQYWxldHRlICphcHBf cGFsOwoKICAgIHN0YXRpYyBRRm9udCAqYXBwX2ZvbnQ7CgogICAgc3RhdGljIFFDdXJzb3IgKmFw cF9jdXJzb3I7CgogICAgc3RhdGljIGludCBhcHBfdHJhY2tpbmc7CiAgICBzdGF0aWMgYm9vbCBp c19hcHBfcnVubmluZzsKICAgIHN0YXRpYyBib29sIGlzX2FwcF9jbG9zaW5nOwogICAgc3RhdGlj IGJvb2wgYXBwX2V4aXRfbG9vcDsKICAgIHN0YXRpYyBpbnQgbG9vcF9sZXZlbDsKICAgIHN0YXRp YyBRV2lkZ2V0ICptYWluX3dpZGdldDsKICAgIHN0YXRpYyBRV2lkZ2V0ICpmb2N1c193aWRnZXQ7 CiAgICBzdGF0aWMgUVdpZGdldCAqYWN0aXZlX3dpbmRvdzsKICAgIHN0YXRpYyBib29sIG9iZXlf ZGVza3RvcF9zZXR0aW5nczsKICAgIHN0YXRpYyBpbnQgY3Vyc29yX2ZsYXNoX3RpbWU7CiAgICBz dGF0aWMgaW50IG1vdXNlX2RvdWJsZV9jbGlja190aW1lOwogICAgc3RhdGljIGludCB3aGVlbF9z Y3JvbGxfbGluZXM7CgogICAgc3RhdGljIGJvb2wgYW5pbWF0ZV91aTsKICAgIHN0YXRpYyBib29s IGFuaW1hdGVfbWVudTsKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfdG9vbHRpcDsKICAgIHN0YXRp YyBib29sIGFuaW1hdGVfY29tYm87CiAgICBzdGF0aWMgYm9vbCBmYWRlX21lbnU7CiAgICBzdGF0 aWMgYm9vbCBmYWRlX3Rvb2x0aXA7CgogICAgUVB0ckxpc3Q8UVRyYW5zbGF0b3I+ICp0cmFuc2xh dG9yczsKCiAgICBRU2Vzc2lvbk1hbmFnZXIgKnNlc3Npb25fbWFuYWdlcjsKICAgIFFTdHJpbmcg c2Vzc2lvbl9pZDsKICAgIGJvb2wgaXNfc2Vzc2lvbl9yZXN0b3JlZDsKCgogICAgc3RhdGljIHZv aWQgeDExX2luaXRpYWxpemVfc3R5bGUoKTsKCgogICAgc3RhdGljIFFTaXplIGFwcF9zdHJ1dDsK CiAgICBzdGF0aWMgUVN0cmluZ0xpc3QgKmFwcF9saWJwYXRoczsKCiAgICBzdGF0aWMgUUFzY2lp RGljdDxRUGFsZXR0ZT4gKmFwcF9wYWxldHRlczsKICAgIHN0YXRpYyBRQXNjaWlEaWN0PFFGb250 PiAqYXBwX2ZvbnRzOwoKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqcG9wdXBXaWRnZXRzOwogICAg Ym9vbCBpblBvcHVwTW9kZSgpIGNvbnN0OwogICAgdm9pZCBjbG9zZVBvcHVwKCBRV2lkZ2V0ICpw b3B1cCApOwogICAgdm9pZCBvcGVuUG9wdXAoIFFXaWRnZXQgKnBvcHVwICk7CiAgICB2b2lkIHNl dEFjdGl2ZVdpbmRvdyggUVdpZGdldCogYWN0ICk7CgogICAgc3RhdGljIGJvb2wgc2VuZFNwb250 YW5lb3VzRXZlbnQoIFFPYmplY3QgKnJlY2VpdmVyLCBRRXZlbnQgKmV2ZW50ICk7CiAgICBzdGF0 aWMgdm9pZCByZW1vdmVQb3N0ZWRFdmVudCggUUV2ZW50ICogKTsKCiAgICBmcmllbmQgY2xhc3Mg UVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRRVRXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUUV2 ZW50OwogICAgZnJpZW5kIHZvaWQgcXRfdWNtX2luaXRpYWxpemUoIFFBcHBsaWNhdGlvbiAqICk7 CgoKCgpwcml2YXRlOgoKICAgIFFBcHBsaWNhdGlvbiggY29uc3QgUUFwcGxpY2F0aW9uICYgKTsK ICAgIFFBcHBsaWNhdGlvbiAmb3BlcmF0b3I9KCBjb25zdCBRQXBwbGljYXRpb24gJiApOwoKfTsK CmlubGluZSBpbnQgUUFwcGxpY2F0aW9uOjphcmdjKCkgY29uc3QKewogICAgcmV0dXJuIGFwcF9h cmdjOwp9CgppbmxpbmUgY2hhciAqKlFBcHBsaWNhdGlvbjo6YXJndigpIGNvbnN0CnsKICAgIHJl dHVybiBhcHBfYXJndjsKfQoKaW5saW5lIFFDdXJzb3IgKlFBcHBsaWNhdGlvbjo6b3ZlcnJpZGVD dXJzb3IoKQp7CiAgICByZXR1cm4gYXBwX2N1cnNvcjsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0 aW9uOjpoYXNHbG9iYWxNb3VzZVRyYWNraW5nKCkKewogICAgcmV0dXJuIGFwcF90cmFja2luZyA+ IDA7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246Om1haW5XaWRnZXQoKSBjb25zdAp7 CiAgICByZXR1cm4gbWFpbl93aWRnZXQ7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246 OmZvY3VzV2lkZ2V0KCkgY29uc3QKewogICAgcmV0dXJuIGZvY3VzX3dpZGdldDsKfQoKaW5saW5l IFFXaWRnZXQgKlFBcHBsaWNhdGlvbjo6YWN0aXZlV2luZG93KCkgY29uc3QKewogICAgcmV0dXJu IGFjdGl2ZV93aW5kb3c7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246OndpZGdldEF0 KCBjb25zdCBRUG9pbnQgJnAsIGJvb2wgY2hpbGQgKQp7CiAgICByZXR1cm4gd2lkZ2V0QXQoIHAu eCgpLCBwLnkoKSwgY2hpbGQgKTsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0aW9uOjppblBvcHVw TW9kZSgpIGNvbnN0CnsKICAgIHJldHVybiBwb3B1cFdpZGdldHMgIT0gMDsKfQoKaW5saW5lIGJv b2wgUUFwcGxpY2F0aW9uOjppc1Nlc3Npb25SZXN0b3JlZCgpIGNvbnN0CnsKICAgIHJldHVybiBp c19zZXNzaW9uX3Jlc3RvcmVkOwp9CgppbmxpbmUgUVN0cmluZyBRQXBwbGljYXRpb246OnNlc3Np b25JZCgpIGNvbnN0CnsKICAgIHJldHVybiBzZXNzaW9uX2lkOwp9CgppbmxpbmUgUVNpemUgUUFw cGxpY2F0aW9uOjpnbG9iYWxTdHJ1dCgpCnsKICAgIHJldHVybiBhcHBfc3RydXQ7Cn0KCmlubGlu ZSBib29sIFFBcHBsaWNhdGlvbjo6c2VuZEV2ZW50KCBRT2JqZWN0ICpyZWNlaXZlciwgUUV2ZW50 ICpldmVudCApCnsgcmV0dXJuIHFBcHAgPyBxQXBwLT5ub3RpZnkoIHJlY2VpdmVyLCBldmVudCAp IDogRkFMU0U7IH0KCmlubGluZSBib29sIFFBcHBsaWNhdGlvbjo6c2VuZFNwb250YW5lb3VzRXZl bnQoIFFPYmplY3QgKnJlY2VpdmVyLCBRRXZlbnQgKmV2ZW50ICkKeyBpZiAoIGV2ZW50ICkgZXZl bnQtPnNwb250ID0gVFJVRTsgcmV0dXJuIHFBcHAgPyBxQXBwLT5ub3RpZnkoIHJlY2VpdmVyLCBl dmVudCApIDogRkFMU0U7IH0KIyA0NjIgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5j bHVkZS9xYXBwbGljYXRpb24uaCIKaW5saW5lIGludCBRQXBwbGljYXRpb246Omhvcml6b250YWxB bGlnbm1lbnQoIGludCBhbGlnbiApCnsKICAgIGFsaWduICY9IEFsaWduSG9yaXpvbnRhbF9NYXNr OwogICAgaWYgKCBhbGlnbiA9PSBBbGlnbkF1dG8gKSB7CiAgICAgICAgaWYgKCByZXZlcnNlTGF5 b3V0KCkgKQogICAgICAgICAgICBhbGlnbiA9IEFsaWduUmlnaHQ7CiAgICAgICAgZWxzZQogICAg ICAgICAgICBhbGlnbiA9IEFsaWduTGVmdDsKICAgIH0KICAgIHJldHVybiBhbGlnbjsKfQojIDE0 ICJtb2NfdGltZWxhYmVsLmNwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0LXgxMS1mcmVlLTMuMC42 L2luY2x1ZGUvcHJpdmF0ZS9xdWNvbWV4dHJhX3AuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LXgx MS1mcmVlLTMuMC42L2luY2x1ZGUvcHJpdmF0ZS9xdWNvbWV4dHJhX3AuaCIKIyAxICIvdXNyL2xv Y2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcHJpdmF0ZS9xdWNvbV9wLmgiIDEKIyA0MyAi L3Vzci9sb2NhbC9xdC14MTEtZnJlZS0zLjAuNi9pbmNsdWRlL3ByaXZhdGUvcXVjb21fcC5oIgoj IDEgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdXVpZC5oIiAxCiMgNjAg Ii91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9xdXVpZC5oIgpzdHJ1Y3QgUVV1 aWQKewogICAgUVV1aWQoKQogICAgewogICAgICAgIG1lbXNldCggdGhpcywgMCwgc2l6ZW9mKFFV dWlkKSApOwogICAgfQogICAgUVV1aWQoIHVpbnQgbCwgdXNob3J0IHcxLCB1c2hvcnQgdzIsIHVj aGFyIGIxLCB1Y2hhciBiMiwgdWNoYXIgYjMsIHVjaGFyIGI0LCB1Y2hhciBiNSwgdWNoYXIgYjYs IHVjaGFyIGI3LCB1Y2hhciBiOCApCiAgICB7CiAgICAgICAgZGF0YTEgPSBsOwogICAgICAgIGRh dGEyID0gdzE7CiAgICAgICAgZGF0YTMgPSB3MjsKICAgICAgICBkYXRhNFswXSA9IGIxOwogICAg ICAgIGRhdGE0WzFdID0gYjI7CiAgICAgICAgZGF0YTRbMl0gPSBiMzsKICAgICAgICBkYXRhNFsz XSA9IGI0OwogICAgICAgIGRhdGE0WzRdID0gYjU7CiAgICAgICAgZGF0YTRbNV0gPSBiNjsKICAg ICAgICBkYXRhNFs2XSA9IGI3OwogICAgICAgIGRhdGE0WzddID0gYjg7CiAgICB9CiAgICBRVXVp ZCggY29uc3QgUVV1aWQgJnV1aWQgKQogICAgewogICAgICAgIG1lbWNweSggdGhpcywgJnV1aWQs IHNpemVvZihRVXVpZCkgKTsKICAgIH0KCiAgICBRVXVpZCggY29uc3QgUVN0cmluZyAmICk7CiAg ICBRU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAgICBvcGVyYXRvciBRU3RyaW5nKCkgY29uc3Qg eyByZXR1cm4gdG9TdHJpbmcoKTsgfQoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CgogICAgUVV1 aWQgJm9wZXJhdG9yPShjb25zdCBRVXVpZCAmb3JpZyApCiAgICB7CiAgICAgICAgbWVtY3B5KCB0 aGlzLCAmb3JpZywgc2l6ZW9mKFFVdWlkKSApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUVV1aWQgJm9yaWcgKSBjb25zdAogICAgewogICAg ICAgIHVpbnQgaTsKICAgICAgICBpZiAoIGRhdGExICE9IG9yaWcuZGF0YTEgfHwgZGF0YTIgIT0g b3JpZy5kYXRhMiB8fAogICAgICAgICAgICAgZGF0YTMgIT0gb3JpZy5kYXRhMyApCiAgICAgICAg ICAgIHJldHVybiBGQUxTRTsKCiAgICAgICAgZm9yKCBpID0gMDsgaSA8IDg7IGkrKyApCiAgICAg ICAgICAgIGlmICggZGF0YTRbaV0gIT0gb3JpZy5kYXRhNFtpXSApCiAgICAgICAgICAgICAgICBy ZXR1cm4gRkFMU0U7CgogICAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIGJvb2wgb3BlcmF0 b3IhPShjb25zdCBRVXVpZCAmb3JpZyApIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuICEoICp0 aGlzID09IG9yaWcgKTsKICAgIH0KIyAxNTYgIi91c3IvbG9jYWwvcXQteDExLWZyZWUtMy4wLjYv aW5jbHVkZS9xdXVpZC5oIgogICAgdWludCBkYXRhMTsKICAgIHVzaG9ydCBkYXRhMjsKICAgIHVz aG9ydCBkYXRhMzsKICAgIHVjaGFyIGRhdGE0WyA4IF07Cn07CiMgNDQgIi91c3IvbG9jYWwvcXQt eDExLWZyZWUtMy4wLjYvaW5jbHVkZS9wcml2YXRlL3F1Y29tX3AuaCIgMgojIDYyICIvdXNyL2xv Y2FsL3F0LXgxMS1mcmVlLTMuMC42L2luY2x1ZGUvcHJpdmF0ZS9xdWNvbV9wLmgiCnN0cnVjdCBR VU9iamVjdDsKc3RydWN0IFFVSW50ZXJmYWNlRGVzY3JpcHRpb247CnN0cnVjdCBRVW5rbm93bklu dGVyZmFjZTsKc3RydWN0IFFEaXNwYXRjaEludGVyZmFjZTsKCgpzdHJ1Y3QgUVVCdWZmZXIKewog ICAgdmlydHVhbCBsb25nIHJlYWQoIGNoYXIgKmRhdGEsIHVsb25nIG1heGxlbiApID0gMDsKICAg IHZpcnR1YWwgbG9uZyB3cml0ZSggY29uc3QgY2hhciAqZGF0YSwgdWxvbmcgbGVuICkgPSAwOwp9 OwoKCgpzdHJ1Y3QgUVVUeXBlCnsKICAgIHZpcnR1YWwgY29uc3QgUVV1aWQgKnV1aWQoKSBjb25z dCA9IDA7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKmRlc2MoKSBjb25zdCA9IDA7CgoKICAgIHZp cnR1YWwgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKSA9IDA7Cgog ICAgdmlydHVhbCBib29sIGNhbkNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKSA9IDA7 CgoKICAgIHZpcnR1YWwgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKSA9 IDA7CgogICAgdmlydHVhbCBib29sIGNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKSA9 IDA7CgogICAgdmlydHVhbCB2b2lkIGNsZWFyKCBRVU9iamVjdCAqICkgPSAwOwoKICAgIHZpcnR1 YWwgaW50IHNlcmlhbGl6ZVRvKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICkgPSAwOwogICAgdmly dHVhbCBpbnQgc2VyaWFsaXplRnJvbSggUVVPYmplY3QgKiwgUVVCdWZmZXIgKiApID0gMDsKCiAg ICBzdGF0aWMgYm9vbCBpc0VxdWFsKCBjb25zdCBRVVR5cGUgKnQxLCBjb25zdCBRVVR5cGUgKnQy ICk7CiAgICBzdGF0aWMgYm9vbCBjaGVjayggUVVPYmplY3QqIG8sIFFVVHlwZSogdCApOwp9OwoK CgpleHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9OdWxsOwpzdHJ1Y3QgUVVUeXBlX051bGwg OiBwdWJsaWMgUVVUeXBlCnsKICAgIGNvbnN0IFFVdWlkICp1dWlkKCkgY29uc3Q7CiAgICBjb25z dCBjaGFyICpkZXNjKCkgY29uc3Q7CgogICAgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3Qg KiwgUVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUg KiApOwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJv b2wgY29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgdm9pZCBjbGVhciggUVVP YmplY3QgKiApOwogICAgaW50IHNlcmlhbGl6ZVRvKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7 CiAgICBpbnQgc2VyaWFsaXplRnJvbSggUVVPYmplY3QgKiwgUVVCdWZmZXIgKiApOwp9OwpleHRl cm4gUVVUeXBlX051bGwgc3RhdGljX1FVVHlwZV9OdWxsOwoKCgpzdHJ1Y3QgUVVPYmplY3QKewpw dWJsaWM6CiAgICBRVU9iamVjdCgpIDogdHlwZSggJnN0YXRpY19RVVR5cGVfTnVsbCApIHt9CiAg ICB+UVVPYmplY3QoKSB7IHR5cGUtPmNsZWFyKCB0aGlzICk7IH0KCiAgICBRVVR5cGUgKnR5cGU7 CgoKICAgIHVuaW9uCiAgICB7CiAgICAgICAgYm9vbCBiOwoKICAgICAgICBjaGFyIGM7CiAgICAg ICAgc2hvcnQgczsKICAgICAgICBpbnQgaTsKICAgICAgICBsb25nIGw7CgogICAgICAgIHVuc2ln bmVkIGNoYXIgdWM7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdXM7CiAgICAgICAgdW5zaWduZWQg aW50IHVpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdWw7CgogICAgICAgIGZsb2F0IGY7CiAgICAg ICAgZG91YmxlIGQ7CgogICAgICAgIGNoYXIgYnl0ZVsxNl07CgogICAgICAgIHN0cnVjdCB7CiAg ICAgICAgICAgY2hhciogZGF0YTsKICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemU7CiAgICAg ICAgfSBieXRlYXJyYXk7CgogICAgICAgIHZvaWQqIHB0cjsKCiAgICAgICAgc3RydWN0IHsKICAg ICAgICAgICAgdm9pZCAqcHRyOwogICAgICAgICAgICBib29sIG93bmVyOwogICAgICAgIH0gdm9p ZHN0YXI7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgIGNoYXIgKnB0cjsKICAgICAgICAg ICAgYm9vbCBvd25lcjsKICAgICAgICB9IGNoYXJzdGFyOwoKICAgICAgICBzdHJ1Y3QgewogICAg ICAgICAgICBjaGFyICpwdHI7CiAgICAgICAgICAgIGJvb2wgb3duZXI7CiAgICAgICAgfSB1dGY4 OwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBjaGFyICpwdHI7CiAgICAgICAgICAgIGJv b2wgb3duZXI7CiAgICAgICAgfSBsb2NhbDhiaXQ7CgogICAgICAgIFFVbmtub3duSW50ZXJmYWNl KiBpZmFjZTsKICAgICAgICBRRGlzcGF0Y2hJbnRlcmZhY2UqIGlkaXNwOwoKICAgIH0gcGF5bG9h ZDsKCn07CgoKCgoKc3RydWN0IFFVUGFyYW1ldGVyCnsKICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAg ICBRVVR5cGUgKnR5cGU7CiAgICBjb25zdCB2b2lkKiB0eXBlRXh0cmE7CiAgICBlbnVtIHsgSW4g PSAxLCBPdXQgPSAyLCBJbk91dCA9IEluIHwgT3V0IH07CiAgICBpbnQgaW5PdXQ7Cn07CgoKCnN0 cnVjdCBRVU1ldGhvZAp7CiAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgaW50IGNvdW50OwogICAg Y29uc3QgUVVQYXJhbWV0ZXIqIHBhcmFtZXRlcnM7Cn07CgoKc3RydWN0IFFVUHJvcGVydHkKewog ICAgY29uc3QgY2hhciogbmFtZTsKICAgIFFVVHlwZSogdHlwZTsKICAgIGNvbnN0IHZvaWQqIHR5 cGVFeHRyYTsKCiAgICBpbnQgc2V0OwogICAgaW50IGdldDsKCiAgICBpbnQgZGVzaWduYWJsZTsK ICAgIGludCBzdG9yZWQ7Cn07CgoKCnN0cnVjdCBRVUludGVyZmFjZURlc2NyaXB0aW9uCnsKICAg IGludCBtZXRob2RDb3VudDsKICAgIGNvbnN0IFFVTWV0aG9kKiBtZXRob2RzOwogICAgaW50IHBy b3BlcnR5Q291bnQ7CiAgICBjb25zdCBRVVByb3BlcnR5KiBwcm9wZXJ0aWVzOwp9OwoKCgoKCnN0 cnVjdCBRVUNvbXBvbmVudERlc2NyaXB0aW9uCnsKICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICBj b25zdCBjaGFyKiB2ZW5kb3I7CiAgICBjb25zdCBjaGFyKiByZWxlYXNlOwogICAgY29uc3QgY2hh ciogaW5mbzsKICAgIFFVdWlkIGNpZDsKICAgIGludCBjb3VudDsKICAgIGNvbnN0IFFVdWlkKiBp bnRlcmZhY2VzOwp9OwoKCgoKCnN0cnVjdCBRVUNvbXBvbmVudFNlcnZlckRlc2NyaXB0aW9uCnsK ICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICBjb25zdCBjaGFyKiB2ZW5kb3I7CiAgICBjb25zdCBj aGFyKiByZWxlYXNlOwogICAgY29uc3QgY2hhciogaW5mbzsKICAgIGludCBjb3VudDsKICAgIGNv bnN0IFFVQ29tcG9uZW50RGVzY3JpcHRpb24qIGNvbXBvbmVudHM7Cn07CgoKCnN0cnVjdCBRVUVu dW1JdGVtCnsKICAgIGNvbnN0IGNoYXIgKmtleTsKICAgIGludCB2YWx1ZTsKfTsKCnN0cnVjdCBR VUVudW0KewogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIHVuc2lnbmVkIGludCBjb3VudDsKICAg IGNvbnN0IFFVRW51bUl0ZW0gKml0ZW1zOwogICAgYm9vbCBzZXQ7Cn07CgppbmxpbmUgYm9vbCBR VVR5cGU6OmlzRXF1YWwoIGNvbnN0IFFVVHlwZSAqdDEsIGNvbnN0IFFVVHlwZSAqdDIgKSB7CiAg ICByZXR1cm4gdDEgPT0gdDIgfHwgdDEtPnV1aWQoKSA9PSB0Mi0+dXVpZCgpIHx8CiAgICAgICAg Kih0MS0+dXVpZCgpKSA9PSAqKHQyLT51dWlkKCkpOwp9CgppbmxpbmUgYm9vbCBRVVR5cGU6OmNo ZWNrKCBRVU9iamVjdCogbywgUVVUeXBlKiB0ICkgewogICAgcmV0dXJuIGlzRXF1YWwoIG8tPnR5 cGUsIHQgKSB8fCB0LT5jb252ZXJ0RnJvbSggbywgby0+dHlwZSApOwp9CgoKCgpleHRlcm4gY29u c3QgUVV1aWQgVElEX1FVVHlwZV9lbnVtOwpzdHJ1Y3QgUVVUeXBlX2VudW0gOiBwdWJsaWMgUVVU eXBlCnsKICAgIGNvbnN0IFFVdWlkICp1dWlkKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyICpkZXNj KCkgY29uc3Q7CgogICAgdm9pZCBzZXQoIFFVT2JqZWN0ICosIGludCApOwogICAgaW50ICZnZXQo IFFVT2JqZWN0ICogbyApIHsgcmV0dXJuIG8tPnBheWxvYWQuaTsgfQogICAgYm9vbCBjYW5Db252 ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVydFRvKCBR VU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwg UVVUeXBlICogKTsKICAgIGJvb2wgY29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwog ICAgdm9pZCBjbGVhciggUVVPYmplY3QgKiApIHt9CiAgICBpbnQgc2VyaWFsaXplVG8oIFFVT2Jq ZWN0ICosIFFVQnVmZmVyICogKTsKICAgIGludCBzZXJpYWxpemVGcm9tKCBRVU9iamVjdCAqLCBR VUJ1ZmZlciAqICk7Cn07CmV4dGVybiBRVVR5cGVfZW51bSBzdGF0aWNfUVVUeXBlX2VudW07CgoK CmV4dGVybiBjb25zdCBRVXVpZCBUSURfUVVUeXBlX3B0cjsKc3RydWN0IFFVVHlwZV9wdHIgOiBw dWJsaWMgUVVUeXBlCnsKICAgIGNvbnN0IFFVdWlkICp1dWlkKCkgY29uc3Q7CiAgICBjb25zdCBj aGFyICpkZXNjKCkgY29uc3Q7CgogICAgdm9pZCBzZXQoIFFVT2JqZWN0ICosIGNvbnN0IHZvaWQq ICk7CiAgICB2b2lkKiAmZ2V0KCBRVU9iamVjdCAqIG8gKSB7IHJldHVybiBvLT5wYXlsb2FkLnB0 cjsgfQogICAgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAg IGJvb2wgY2FuQ29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgYm9vbCBjb252 ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY29udmVydFRvKCBRVU9i amVjdCAqLCBRVVR5cGUgKiApOwogICAgdm9pZCBjbGVhciggUVVPYmplY3QgKiApIHt9CiAgICBp bnQgc2VyaWFsaXplVG8oIFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsKICAgIGludCBzZXJpYWxp emVGcm9tKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7Cn07CmV4dGVybiBRVVR5cGVfcHRyIHN0 YXRpY19RVVR5cGVfcHRyOwoKCmV4dGVybiBjb25zdCBRVXVpZCBUSURfUVVUeXBlX2lmYWNlOwpz dHJ1Y3QgUVVUeXBlX2lmYWNlIDogcHVibGljIFFVVHlwZQp7CiAgICBjb25zdCBRVXVpZCAqdXVp ZCgpIGNvbnN0OwogICAgY29uc3QgY2hhciAqZGVzYygpIGNvbnN0OwoKICAgIHZvaWQgc2V0KCBR VU9iamVjdCAqLCBRVW5rbm93bkludGVyZmFjZSogKTsKICAgIFFVbmtub3duSW50ZXJmYWNlKiAm Z2V0KCBRVU9iamVjdCAqbyApeyByZXR1cm4gby0+cGF5bG9hZC5pZmFjZTsgfQogICAgYm9vbCBj YW5Db252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVy dFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmpl Y3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUg KiApOwogICAgdm9pZCBjbGVhciggUVVPYmplY3QgKiApIHt9CiAgICBpbnQgc2VyaWFsaXplVG8o IFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsKICAgIGludCBzZXJpYWxpemVGcm9tKCBRVU9iamVj dCAqLCBRVUJ1ZmZlciAqICk7Cn07CmV4dGVybiBRVVR5cGVfaWZhY2Ugc3RhdGljX1FVVHlwZV9p ZmFjZTsKCgpleHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9pZGlzcDsKc3RydWN0IFFVVHlw ZV9pZGlzcCA6IHB1YmxpYyBRVVR5cGUKewogICAgY29uc3QgUVV1aWQgKnV1aWQoKSBjb25zdDsK ICAgIGNvbnN0IGNoYXIgKmRlc2MoKSBjb25zdDsKCiAgICB2b2lkIHNldCggUVVPYmplY3QgKiwg UURpc3BhdGNoSW50ZXJmYWNlKiApOwogICAgUURpc3BhdGNoSW50ZXJmYWNlKiAmZ2V0KCBRVU9i amVjdCAqbyApeyByZXR1cm4gby0+cGF5bG9hZC5pZGlzcDsgfQogICAgYm9vbCBjYW5Db252ZXJ0 RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVydFRvKCBRVU9i amVjdCAqLCBRVVR5cGUgKiApOwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVU eXBlICogKTsKICAgIGJvb2wgY29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAg dm9pZCBjbGVhciggUVVPYmplY3QgKiApIHt9CiAgICBpbnQgc2VyaWFsaXplVG8oIFFVT2JqZWN0 ICosIFFVQnVmZmVyICogKTsKICAgIGludCBzZXJpYWxpemVGcm9tKCBRVU9iamVjdCAqLCBRVUJ1 ZmZlciAqICk7Cn07CmV4dGVybiBRVVR5cGVfaWRpc3Agc3RhdGljX1FVVHlwZV9pZGlzcDsKCgpl eHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9ib29sOwpzdHJ1Y3QgUVVUeXBlX2Jvb2wgOiBw dWJsaWMgUVVUeXBlCnsKICAgIGNvbnN0IFFVdWlkICp1dWlkKCkgY29uc3Q7CiAgICBjb25zdCBj aGFyICpkZXNjKCkgY29uc3Q7CgogICAgdm9pZCBzZXQoIFFVT2JqZWN0ICosIGJvb2wgKTsKICAg IGJvb2wgJmdldCggUVVPYmplY3QgKm8gKSB7IHJldHVybiBvLT5wYXlsb2FkLmI7IH0KICAgIGJv b2wgY2FuQ29udmVydEZyb20oIFFVT2JqZWN0ICosIFFVVHlwZSAqICk7CiAgICBib29sIGNhbkNv bnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY29udmVydEZyb20oIFFV T2JqZWN0ICosIFFVVHlwZSAqICk7CiAgICBib29sIGNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVU eXBlICogKTsKICAgIHZvaWQgY2xlYXIoIFFVT2JqZWN0ICogKSB7fQogICAgaW50IHNlcmlhbGl6 ZVRvKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7CiAgICBpbnQgc2VyaWFsaXplRnJvbSggUVVP YmplY3QgKiwgUVVCdWZmZXIgKiApOwp9OwpleHRlcm4gUVVUeXBlX2Jvb2wgc3RhdGljX1FVVHlw ZV9ib29sOwoKCgpleHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9pbnQ7CnN0cnVjdCBRVVR5 cGVfaW50IDogcHVibGljIFFVVHlwZQp7CiAgICBjb25zdCBRVXVpZCAqdXVpZCgpIGNvbnN0Owog ICAgY29uc3QgY2hhciAqZGVzYygpIGNvbnN0OwoKICAgIHZvaWQgc2V0KCBRVU9iamVjdCAqLCBp bnQgKTsKICAgIGludCAmZ2V0KCBRVU9iamVjdCAqbyApIHsgcmV0dXJuIG8tPnBheWxvYWQuaTsg fQogICAgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJv b2wgY2FuQ29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgYm9vbCBjb252ZXJ0 RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wgY29udmVydFRvKCBRVU9iamVj dCAqLCBRVVR5cGUgKiApOwogICAgdm9pZCBjbGVhciggUVVPYmplY3QgKiApIHt9CiAgICBpbnQg c2VyaWFsaXplVG8oIFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsKICAgIGludCBzZXJpYWxpemVG cm9tKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7Cn07CmV4dGVybiBRVVR5cGVfaW50IHN0YXRp Y19RVVR5cGVfaW50OwoKCgpleHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9kb3VibGU7CnN0 cnVjdCBRVVR5cGVfZG91YmxlIDogcHVibGljIFFVVHlwZQp7CiAgICBjb25zdCBRVXVpZCAqdXVp ZCgpIGNvbnN0OwogICAgY29uc3QgY2hhciAqZGVzYygpIGNvbnN0OwoKICAgIHZvaWQgc2V0KCBR VU9iamVjdCAqLCBkb3VibGUgKTsKICAgIGRvdWJsZSAmZ2V0KCBRVU9iamVjdCAqbyApIHsgcmV0 dXJuIG8tPnBheWxvYWQuZDsgfQogICAgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3QgKiwg UVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiAp OwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJvb2wg Y29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgdm9pZCBjbGVhciggUVVPYmpl Y3QgKiApIHt9CiAgICBpbnQgc2VyaWFsaXplVG8oIFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsK ICAgIGludCBzZXJpYWxpemVGcm9tKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7Cn07CmV4dGVy biBRVVR5cGVfZG91YmxlIHN0YXRpY19RVVR5cGVfZG91YmxlOwoKCgpleHRlcm4gY29uc3QgUVV1 aWQgVElEX1FVVHlwZV9jaGFyc3RhcjsKc3RydWN0IFFVVHlwZV9jaGFyc3RhciA6IHB1YmxpYyBR VVR5cGUKewogICAgY29uc3QgUVV1aWQgKnV1aWQoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIgKmRl c2MoKSBjb25zdDsKCiAgICB2b2lkIHNldCggUVVPYmplY3QgKiwgY29uc3QgY2hhciosIGJvb2wg dGFrZSA9IEZBTFNFICk7CiAgICBjaGFyKiBnZXQoIFFVT2JqZWN0ICpvICl7IHJldHVybiBvLT5w YXlsb2FkLmNoYXJzdGFyLnB0cjsgfQogICAgYm9vbCBjYW5Db252ZXJ0RnJvbSggUVVPYmplY3Qg KiwgUVVUeXBlICogKTsKICAgIGJvb2wgY2FuQ29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUg KiApOwogICAgYm9vbCBjb252ZXJ0RnJvbSggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIGJv b2wgY29udmVydFRvKCBRVU9iamVjdCAqLCBRVVR5cGUgKiApOwogICAgdm9pZCBjbGVhciggUVVP YmplY3QgKiApOwogICAgaW50IHNlcmlhbGl6ZVRvKCBRVU9iamVjdCAqLCBRVUJ1ZmZlciAqICk7 CiAgICBpbnQgc2VyaWFsaXplRnJvbSggUVVPYmplY3QgKiwgUVVCdWZmZXIgKiApOwoKfTsKZXh0 ZXJuIFFVVHlwZV9jaGFyc3RhciBzdGF0aWNfUVVUeXBlX2NoYXJzdGFyOwoKCgpleHRlcm4gY29u c3QgUVV1aWQgVElEX1FVVHlwZV9RU3RyaW5nOwoKc3RydWN0IFFVVHlwZV9RU3RyaW5nIDogcHVi bGljIFFVVHlwZQp7CiAgICBjb25zdCBRVXVpZCAqdXVpZCgpIGNvbnN0OwogICAgY29uc3QgY2hh ciAqZGVzYygpIGNvbnN0OwoKICAgIHZvaWQgc2V0KCBRVU9iamVjdCAqLCBjb25zdCBRU3RyaW5n ICYgKTsKICAgIFFTdHJpbmcgJmdldCggUVVPYmplY3QgKiBvICkgeyByZXR1cm4gKihRU3RyaW5n KilvLT5wYXlsb2FkLnB0cjsgfQoKICAgIGJvb2wgY2FuQ29udmVydEZyb20oIFFVT2JqZWN0ICos IFFVVHlwZSAqICk7CiAgICBib29sIGNhbkNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICog KTsKICAgIGJvb2wgY29udmVydEZyb20oIFFVT2JqZWN0ICosIFFVVHlwZSAqICk7CiAgICBib29s IGNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIHZvaWQgY2xlYXIoIFFVT2Jq ZWN0ICogKTsKICAgIGludCBzZXJpYWxpemVUbyggUVVPYmplY3QgKiwgUVVCdWZmZXIgKiApOwog ICAgaW50IHNlcmlhbGl6ZUZyb20oIFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsKCn07CmV4dGVy biBRVVR5cGVfUVN0cmluZyBzdGF0aWNfUVVUeXBlX1FTdHJpbmc7CiMgNDMgIi91c3IvbG9jYWwv cXQteDExLWZyZWUtMy4wLjYvaW5jbHVkZS9wcml2YXRlL3F1Y29tZXh0cmFfcC5oIiAyCgoKCmNs YXNzIFFWYXJpYW50OwoKCgpleHRlcm4gY29uc3QgUVV1aWQgVElEX1FVVHlwZV9RVmFyaWFudDsK CnN0cnVjdCBRVVR5cGVfUVZhcmlhbnQgOiBwdWJsaWMgUVVUeXBlCnsKICAgIGNvbnN0IFFVdWlk ICp1dWlkKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyICpkZXNjKCkgY29uc3Q7CgogICAgdm9pZCBz ZXQoIFFVT2JqZWN0ICosIGNvbnN0IFFWYXJpYW50ICYgKTsKICAgIFFWYXJpYW50ICZnZXQoIFFV T2JqZWN0ICogbyApOwoKICAgIGJvb2wgY2FuQ29udmVydEZyb20oIFFVT2JqZWN0ICosIFFVVHlw ZSAqICk7CiAgICBib29sIGNhbkNvbnZlcnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAg IGJvb2wgY29udmVydEZyb20oIFFVT2JqZWN0ICosIFFVVHlwZSAqICk7CiAgICBib29sIGNvbnZl cnRUbyggUVVPYmplY3QgKiwgUVVUeXBlICogKTsKICAgIHZvaWQgY2xlYXIoIFFVT2JqZWN0ICog KTsKICAgIGludCBzZXJpYWxpemVUbyggUVVPYmplY3QgKiwgUVVCdWZmZXIgKiApOwogICAgaW50 IHNlcmlhbGl6ZUZyb20oIFFVT2JqZWN0ICosIFFVQnVmZmVyICogKTsKfTsKZXh0ZXJuIFFVVHlw ZV9RVmFyaWFudCBzdGF0aWNfUVVUeXBlX1FWYXJpYW50OwojIDE2ICJtb2NfdGltZWxhYmVsLmNw cCIgMgoKCgoKCgpjb25zdCBjaGFyICpUaW1lTGFiZWw6OmNsYXNzTmFtZSgpIGNvbnN0CnsKICAg IHJldHVybiAiVGltZUxhYmVsIjsKfQoKUU1ldGFPYmplY3QgKlRpbWVMYWJlbDo6bWV0YU9iaiA9 IDA7CnN0YXRpYyBRTWV0YU9iamVjdENsZWFuVXAgY2xlYW5VcF9UaW1lTGFiZWw7CgoKUVN0cmlu ZyBUaW1lTGFiZWw6OnRyKCBjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpjICkKewogICAgaWYg KCBxQXBwICkKICAgICAgICByZXR1cm4gcUFwcC0+dHJhbnNsYXRlKCAiVGltZUxhYmVsIiwgcywg YywgUUFwcGxpY2F0aW9uOjpEZWZhdWx0Q29kZWMgKTsKICAgIGVsc2UKICAgICAgICByZXR1cm4g UVN0cmluZzo6ZnJvbUxhdGluMSggcyApOwp9CgpRU3RyaW5nIFRpbWVMYWJlbDo6dHJVdGY4KCBj b25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpjICkKewogICAgaWYgKCBxQXBwICkKICAgICAgICBy ZXR1cm4gcUFwcC0+dHJhbnNsYXRlKCAiVGltZUxhYmVsIiwgcywgYywgUUFwcGxpY2F0aW9uOjpV bmljb2RlVVRGOCApOwogICAgZWxzZQogICAgICAgIHJldHVybiBRU3RyaW5nOjpmcm9tVXRmOCgg cyApOwp9CgoKCgpRTWV0YU9iamVjdCogVGltZUxhYmVsOjpzdGF0aWNNZXRhT2JqZWN0KCkKewog ICAgaWYgKCBtZXRhT2JqICkKICAgICAgICByZXR1cm4gbWV0YU9iajsKICAgIFFNZXRhT2JqZWN0 KiBwYXJlbnRPYmplY3QgPSBRSEJveDo6c3RhdGljTWV0YU9iamVjdCgpOwogICAgc3RhdGljIGNv bnN0IFFVUGFyYW1ldGVyIHBhcmFtX3Nsb3RfMFtdID0gewogICAgICAgIHsgMCwgJnN0YXRpY19R VVR5cGVfcHRyLCAiUURhdGVUaW1lIiwgUVVQYXJhbWV0ZXI6OkluIH0KICAgIH07CiAgICBzdGF0 aWMgY29uc3QgUVVNZXRob2Qgc2xvdF8wID0geyJzbG90VXBkYXRlIiwgMSwgcGFyYW1fc2xvdF8w IH07CiAgICBzdGF0aWMgY29uc3QgUU1ldGFEYXRhIHNsb3RfdGJsW10gPSB7CiAgICAgICAgeyAi c2xvdFVwZGF0ZShRRGF0ZVRpbWUpIiwgJnNsb3RfMCwgUU1ldGFEYXRhOjpQdWJsaWMgfQogICAg fTsKICAgIG1ldGFPYmogPSBRTWV0YU9iamVjdDo6bmV3X21ldGFvYmplY3QoCiAgICAgICAgIlRp bWVMYWJlbCIsIHBhcmVudE9iamVjdCwKICAgICAgICBzbG90X3RibCwgMSwKICAgICAgICAwLCAw LAoKICAgICAgICAwLCAwLAogICAgICAgIDAsIDAsCgogICAgICAgIDAsIDAgKTsKICAgIGNsZWFu VXBfVGltZUxhYmVsLnNldE1ldGFPYmplY3QoIG1ldGFPYmogKTsKICAgIHJldHVybiBtZXRhT2Jq Owp9Cgp2b2lkKiBUaW1lTGFiZWw6OnF0X2Nhc3QoIGNvbnN0IGNoYXIqIGNsbmFtZSApCnsKICAg IGlmICggIXFzdHJjbXAoIGNsbmFtZSwgIlRpbWVMYWJlbCIgKSApIHJldHVybiAoVGltZUxhYmVs Kil0aGlzOwogICAgcmV0dXJuIFFIQm94OjpxdF9jYXN0KCBjbG5hbWUgKTsKfQoKYm9vbCBUaW1l TGFiZWw6OnF0X2ludm9rZSggaW50IF9pZCwgUVVPYmplY3QqIF9vICkKewogICAgc3dpdGNoICgg X2lkIC0gc3RhdGljTWV0YU9iamVjdCgpLT5zbG90T2Zmc2V0KCkgKSB7CiAgICBjYXNlIDA6IHNs b3RVcGRhdGUoKFFEYXRlVGltZSkoKigoUURhdGVUaW1lKilzdGF0aWNfUVVUeXBlX3B0ci5nZXQo X28rMSkpKSk7IGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gUUhCb3g6OnF0X2lu dm9rZSggX2lkLCBfbyApOwogICAgfQogICAgcmV0dXJuIFRSVUU7Cn0KCmJvb2wgVGltZUxhYmVs OjpxdF9lbWl0KCBpbnQgX2lkLCBRVU9iamVjdCogX28gKQp7CiAgICByZXR1cm4gUUhCb3g6OnF0 X2VtaXQoX2lkLF9vKTsKfQoKCmJvb2wgVGltZUxhYmVsOjpxdF9wcm9wZXJ0eSggaW50IF9pZCwg aW50IF9mLCBRVmFyaWFudCogX3YpCnsKICAgIHJldHVybiBRSEJveDo6cXRfcHJvcGVydHkoIF9p ZCwgX2YsIF92KTsKfQo=