From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20813 invoked by alias); 13 Feb 2003 22:56:00 -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 20790 invoked by uid 71); 13 Feb 2003 22:56:00 -0000 Resent-Date: 13 Feb 2003 22:56:00 -0000 Resent-Message-ID: <20030213225600.20789.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, bfriesen@simple.dallas.tx.us Received: (qmail 13017 invoked by uid 48); 13 Feb 2003 22:49:26 -0000 Message-Id: <20030213224926.13016.qmail@sources.redhat.com> Date: Thu, 13 Feb 2003 22:56:00 -0000 From: bfriesen@simple.dallas.tx.us Reply-To: bfriesen@simple.dallas.tx.us To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: target/9698: Bad ultrasparc code for va_list/vsnprintf X-SW-Source: 2003-02/txt/msg00600.txt.bz2 List-Id: >Number: 9698 >Category: target >Synopsis: Bad ultrasparc code for va_list/vsnprintf >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Feb 13 22:56:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Bob Friesenhahn >Release: 3.2.2 >Organization: >Environment: gcc -v -save-temps -DHAVE_CONFIG_H -I../ -I. -I/home/bfriesen/src/graphics/GraphicsMagick/magick -I. -I/home/bfriesen/src/graphics/GraphicsMagick -I/home/bfriesen/src/graphics/GraphicsMagick/ltdl -I/u sr/local/include/freetype2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_REENTRANT -I/usr/openwin/in clude -I/usr/openwin/include/X11 -I/usr/local/include/libxml2 -O2 -g -Wall -Winline -Wall -MT draw.l o -MD -MP -MF .deps/draw.Tpo -c /home/bfriesen/src/graphics/GraphicsMagick/magick/draw.c -fPIC -DPI C -o .libs/draw.oESC[K Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.2.2/specs Configured with: /home/bfriesen/src/gnu/gcc-3.2.2/configure --enable-shared --enable-threads --with- cpu=ultrasparc --enable-version-specific-runtime-libs --enable-languages=c,c++ --disable-nls Thread model: posix gcc version 3.2.2 /usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.2.2/cpp0 -lang-c -v -I../ -I. -I/home/bfriesen/src/gr aphics/GraphicsMagick/magick -I. -I/home/bfriesen/src/graphics/GraphicsMagick -I/home/bfriesen/src/g raphics/GraphicsMagick/ltdl -I/usr/local/include/freetype2 -I/usr/openwin/include -I/usr/openwin/inc lude/X11 -I/usr/local/include/libxml2 -MD .libs/draw.d -MF .deps/draw.Tpo -MP -MT draw.lo -MQ .libs/ draw.o -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__PRAGMA_REDEFINE_EXTNAME -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__PRAGMA_REDEFINE_EXTNAME -D__sparc -D__sun -D__unix -Asystem=unix -Asystem=svr4 -D__OPTI MIZE__ -D__STDC_HOSTED__=1 -D__SIZE_TYPE__=unsigned int -D__PTRDIFF_TYPE__=int -D__WCHAR_TYPE__=long int -D__WINT_TYPE__=long int -D__GCC_NEW_VARARGS__ -Acpu=sparc -Amachine=sparc -DHAVE_CONFIG_H -D_L ARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DPIC /home/bfriesen/src/graphics/GraphicsMagick /magick/draw.c -Wall -Winline -Wall draw.i GNU CPP version 3.2.2 (cpplib) (sparc ELF) ignoring nonexistent directory "/usr/local/sparc-sun-solaris2.9/include" ignoring duplicate directory "." #include "..." search starts here: #include <...> search starts here: .. . /home/bfriesen/src/graphics/GraphicsMagick/magick /home/bfriesen/src/graphics/GraphicsMagick /home/bfriesen/src/graphics/GraphicsMagick/ltdl /usr/local/include/freetype2 /usr/openwin/include /usr/openwin/include/X11 /usr/local/include/libxml2 /usr/local/include /usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.2.2/include /usr/include End of search list. /usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.2.2/cc1 -fpreprocessed draw.i -quiet -dumpbase draw.c -g -O2 -Wall -Winline -Wall -version -fPIC -o draw.s GNU CPP version 3.2.2 (cpplib) (sparc ELF) GNU C version 3.2.2 (sparc-sun-solaris2.9) compiled by GNU C version 3.2.2. /usr/ccs/bin/as -V -Qy -s -K PIC -xarch=v8plusa -o .libs/draw.o draw.s /usr/ccs/bin/as: Sun WorkShop 6 update 2 Compiler Common 6.2 Solaris_9_CBE 2001/04/02 >Description: The last argument to vsnprintf (a double) is consistently corrupted when the target CPU is ultrasparc and -O2 is requested. The corruption does not appear for -mcpu=v7 >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="draw.i-3.2.2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="draw.i-3.2.2" IyAxICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2Ry YXcuYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEgIi9ob21lL2Jm cmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgojIDU2ICIv aG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIK IyAxICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL3N0 dWRpby5oIiAxCiMgMjggIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2lj ay9tYWdpY2svc3R1ZGlvLmgiCiMgMSAiLi4vbWFnaWNrL21hZ2lja19jb25maWcuaCIgMQojIDI5 ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL3N0dWRp by5oIiAyCiMgOTggIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svc3R1ZGlvLmgiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOS8zLjIuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMgNAojIDQzICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDMg NAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDkwICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvc3RkYXJn LmgiIDMgNAp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgOTkgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svc3R1ZGlvLmgiIDIKIyAxICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUv c3RkaW8uaCIgMSAzIDQKIyAzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3Rk aW8uaAkxLjc5CTAxLzA0LzE2IFNNSSIgCgojIDEgIi91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNv LmgiIDEgMyA0CiMgMzIgIi91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDMgNAojcHJhZ21h IGlkZW50ICJAKCMpc3RkaW9faXNvLmgJMS4yCTk5LzEwLzI1IFNNSSIKCgojIDEgIi91c3IvaW5j bHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDEzICIvdXNyL2luY2x1ZGUvc3lzL2Zl YXR1cmVfdGVzdHMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylmZWF0dXJlX3Rlc3RzLmgJMS4x OAk5OS8wNy8yNiBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQK IyA5ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMp aXNhX2RlZnMuaAkxLjIwCTk5LzA1LzA0IFNNSSIKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0 dXJlX3Rlc3RzLmgiIDIgMyA0CiMgMzYgIi91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDIg MyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNs dWRlL3N5cy92YV9saXN0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdmFfbGlzdC5oCTEuMTMJ MDEvMDIvMDggU01JIgojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3ZhX2xpc3QuaCIgMyA0CnR5cGVk ZWYgdm9pZCAqX192YV9saXN0OwojIDM3ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAy IDMgNAojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4y LjIvaW5jbHVkZS9zdGRpb190YWcuaCIgMSAzIDQKIyAxOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9pbmNsdWRlL3N0ZGlvX3RhZy5oIiAzIDQKI3By YWdtYSBpZGVudCAiQCgjKXN0ZGlvX3RhZy5oCTEuMwk5OC8wNC8yMCBTTUkiCiMgMzAgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zdGRp b190YWcuaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9fRklMRSBfX0ZJTEU7CiMgMzggIi91c3IvaW5j bHVkZS9pc28vc3RkaW9faXNvLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwu aCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAzIDQKI3ByYWdtYSBpZGVu dCAiQCgjKXN0ZGlvX2ltcGwuaAkxLjEzCTAxLzExLzE2IFNNSSIKIyAyMiAiL3Vzci9pbmNsdWRl L3N0ZGlvX2ltcGwuaCIgMyA0CnR5cGVkZWYgaW50IHNzaXplX3Q7CiMgMzggIi91c3IvaW5jbHVk ZS9zdGRpb19pbXBsLmgiIDMgNApzdHJ1Y3QgX19GSUxFCnsKCgoKCiAgICAgICAgc3NpemVfdCBf Y250OwogICAgICAgIHVuc2lnbmVkIGNoYXIgKl9wdHI7CgogICAgICAgIHVuc2lnbmVkIGNoYXIg Kl9iYXNlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgX2ZsYWc7CiAgICAgICAgdW5zaWduZWQgY2hh ciBfZmlsZTsKICAgICAgICB1bnNpZ25lZCBfX29yaWVudGF0aW9uOjI7CiAgICAgICAgdW5zaWdu ZWQgX19pb25vbG9jazoxOwogICAgICAgIHVuc2lnbmVkIF9fc2Vla2FibGU6MTsKICAgICAgICB1 bnNpZ25lZCBfX2ZpbGxlcjo0Owp9OwojIDM5ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5o IiAyIDMgNAojIDU5ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKdHlwZWRlZiBs b25nIGxvbmcgX19sb25nbG9uZ190OwojIDc1ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5o IiAzIDQKdHlwZWRlZiBfX0ZJTEUgRklMRTsKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHNp emVfdDsKCgoKCgoKdHlwZWRlZiBfX2xvbmdsb25nX3QgZnBvc190OwojIDE0NyAiL3Vzci9pbmNs dWRlL2lzby9zdGRpb19pc28uaCIgMyA0CmV4dGVybiBfX0ZJTEUgX19pb2JbMjBdOwojIDE2NCAi L3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0CmV4dGVybiBpbnQgcmVtb3ZlKGNvbnN0 IGNoYXIgKik7CmV4dGVybiBpbnQgcmVuYW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK ZXh0ZXJuIEZJTEUgKnRtcGZpbGUodm9pZCk7CmV4dGVybiBjaGFyICp0bXBuYW0oY2hhciAqKTsK ZXh0ZXJuIGludCBmY2xvc2UoRklMRSAqKTsKZXh0ZXJuIGludCBmZmx1c2goRklMRSAqKTsKZXh0 ZXJuIEZJTEUgKmZvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIEZJTEUg KmZyZW9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7CmV4dGVybiB2b2lk IHNldGJ1ZihGSUxFICosIGNoYXIgKik7CmV4dGVybiBpbnQgc2V0dmJ1ZihGSUxFICosIGNoYXIg KiwgaW50LCBzaXplX3QpOwoKZXh0ZXJuIGludCBmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAq LCAuLi4pOwoKZXh0ZXJuIGludCBmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7Cgpl eHRlcm4gaW50IHByaW50Zihjb25zdCBjaGFyICosIC4uLik7CgpleHRlcm4gaW50IHNjYW5mKGNv bnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIg KiwgLi4uKTsKCmV4dGVybiBpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAu Li4pOwpleHRlcm4gaW50IHZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3Qp OwpleHRlcm4gaW50IHZwcmludGYoY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50 IHZzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50IGZn ZXRjKEZJTEUgKik7CmV4dGVybiBjaGFyICpmZ2V0cyhjaGFyICosIGludCwgRklMRSAqKTsKZXh0 ZXJuIGludCBmcHV0YyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQgZnB1dHMoY29uc3QgY2hhciAq LCBGSUxFICopOwoKCmV4dGVybiBpbnQgZ2V0YyhGSUxFICopOwpleHRlcm4gaW50IHB1dGMoaW50 LCBGSUxFICopOwoKCgpleHRlcm4gaW50IGdldGNoYXIodm9pZCk7CmV4dGVybiBpbnQgcHV0Y2hh cihpbnQpOwoKZXh0ZXJuIGNoYXIgKmdldHMoY2hhciAqKTsKZXh0ZXJuIGludCBwdXRzKGNvbnN0 IGNoYXIgKik7CmV4dGVybiBpbnQgdW5nZXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIHNpemVfdCBm cmVhZCh2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOwpleHRlcm4gc2l6ZV90IGZ3cml0 ZShjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOwpleHRlcm4gaW50IGZnZXRw b3MoRklMRSAqLCBmcG9zX3QgKik7CmV4dGVybiBpbnQgZnNlZWsoRklMRSAqLCBsb25nLCBpbnQp OwpleHRlcm4gaW50IGZzZXRwb3MoRklMRSAqLCBjb25zdCBmcG9zX3QgKik7CmV4dGVybiBsb25n IGZ0ZWxsKEZJTEUgKik7CmV4dGVybiB2b2lkIHJld2luZChGSUxFICopOwoKCmV4dGVybiB2b2lk IGNsZWFyZXJyKEZJTEUgKik7CmV4dGVybiBpbnQgZmVvZihGSUxFICopOwpleHRlcm4gaW50IGZl cnJvcihGSUxFICopOwoKZXh0ZXJuIHZvaWQgcGVycm9yKGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJu IGludCBfX2ZpbGJ1ZihGSUxFICopOwpleHRlcm4gaW50IF9fZmxzYnVmKGludCwgRklMRSAqKTsK IyAzNyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9p bmNsdWRlL3N0ZGlvLmgiIDIgMyA0CiMgMTA3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMyA0CnR5cGVkZWYgX19sb25n bG9uZ190IG9mZl90OwoKCgoKCnR5cGVkZWYgX19sb25nbG9uZ190IG9mZjY0X3Q7CiMgMTIzICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUv c3RkaW8uaCIgMyA0CnR5cGVkZWYgX19sb25nbG9uZ190IGZwb3M2NF90OwojIDEzNCAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9pbmNsdWRlL3N0ZGlv LmgiIDMgNAp0eXBlZGVmIF9fdmFfbGlzdCBfX25vdF92YV9saXN0X187CiMgMTUxICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvc3RkaW8u aCIgMyA0CmV4dGVybiB1bnNpZ25lZCBjaGFyIF9zaWJ1ZltdLCBfc29idWZbXTsKCgoKCgojcHJh Z21hIHJlZGVmaW5lX2V4dG5hbWUgZm9wZW4gZm9wZW42NAojcHJhZ21hIHJlZGVmaW5lX2V4dG5h bWUgZnJlb3BlbiBmcmVvcGVuNjQKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIHRtcGZpbGUgdG1w ZmlsZTY0CiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBmZ2V0cG9zIGZnZXRwb3M2NAojcHJhZ21h IHJlZGVmaW5lX2V4dG5hbWUgZnNldHBvcyBmc2V0cG9zNjQKCiNwcmFnbWEgcmVkZWZpbmVfZXh0 bmFtZSBmc2Vla28gZnNlZWtvNjQKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIGZ0ZWxsbyBmdGVs bG82NAojIDE5MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8z LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gdW5zaWduZWQgY2hhciAqX2J1ZmVuZHRh YltdOwpleHRlcm4gRklMRSAqX2xhc3RidWY7CiMgMjI1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBj aGFyICp0bXBuYW1fcihjaGFyICopOwoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBj aGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgc2V0bGluZWJ1ZihGSUxFICopOwoKCgoKCmV4dGVy biBpbnQgdmZzY2FuZihGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwpleHRl cm4gaW50IHZzY2FuZihjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKZXh0ZXJuIGludCB2 c3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CgoKCgoK ZXh0ZXJuIGludCBzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwoK CgoKZXh0ZXJuIGludCB2c25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX19n bnVjX3ZhX2xpc3QpOwojIDI1OCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAqZmRvcGVuKGlu dCwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoY2hhciAqKTsKZXh0ZXJuIGlu dCBmaWxlbm8oRklMRSAqKTsKIyAyNjkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIHZvaWQgZmxvY2tm aWxlKEZJTEUgKik7CmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiB2b2lk IGZ1bmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZChGSUxFICopOwpl eHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQodm9pZCk7CmV4dGVybiBpbnQgcHV0Y191bmxvY2tl ZChpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZChpbnQpOwojIDI4NCAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9pbmNsdWRl L3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAqcG9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICopOwpleHRlcm4gY2hhciAqY3VzZXJpZChjaGFyICopOwpleHRlcm4gY2hhciAqdGVtcG5hbShj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0b3B0KGludCwgY2hhciAq Y29uc3QgKiwgY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKZXh0ZXJuIGlu dCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OwpleHRlcm4gaW50IGdldHcoRklMRSAqKTsKZXh0ZXJu IGludCBwdXR3KGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBwY2xvc2UoRklMRSAqKTsKCgoKCgoK CmV4dGVybiBpbnQgZnNlZWtvKEZJTEUgKiwgb2ZmX3QsIGludCk7CmV4dGVybiBvZmZfdCBmdGVs bG8oRklMRSAqKTsKIyAzMTMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjkvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIEZJTEUgKmZvcGVuNjQoY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0KGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gRklMRSAqdG1wZmlsZTY0KHZvaWQp OwpleHRlcm4gaW50IGZnZXRwb3M2NChGSUxFICosIGZwb3M2NF90ICopOwpleHRlcm4gaW50IGZz ZXRwb3M2NChGSUxFICosIGNvbnN0IGZwb3M2NF90ICopOwpleHRlcm4gaW50IGZzZWVrbzY0KEZJ TEUgKiwgb2ZmNjRfdCwgaW50KTsKZXh0ZXJuIG9mZjY0X3QgZnRlbGxvNjQoRklMRSAqKTsKIyAx MDAgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svc3R1 ZGlvLmgiIDIKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMyA0CiMgMTYgIi91c3Iv aW5jbHVkZS9zdGRsaWIuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdGRsaWIuaAkxLjQ4CTAw LzA0LzEzIFNNSSIgCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjkvMy4yLjIvaW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAxIDMgNAojIDM3ICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvaXNvL3N0 ZGxpYl9pc28uaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdGRsaWJfaXNvLmgJMS4zCTAxLzAz LzA5IFNNSSIgCiMgNDYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjkvMy4yLjIvaW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAzIDQKZXh0ZXJuIHVuc2lnbmVkIGNo YXIgX19jdHlwZVtdOwojIDU3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi45LzMuMi4yL2luY2x1ZGUvaXNvL3N0ZGxpYl9pc28uaCIgMyA0CnR5cGVkZWYgc3RydWN0 IHsKICAgICAgICBpbnQgcXVvdDsKICAgICAgICBpbnQgcmVtOwp9IGRpdl90OwoKdHlwZWRlZiBz dHJ1Y3QgewogICAgICAgIGxvbmcgcXVvdDsKICAgICAgICBsb25nIHJlbTsKfSBsZGl2X3Q7CiMg OTYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5j bHVkZS9pc28vc3RkbGliX2lzby5oIiAzIDQKdHlwZWRlZiBsb25nIHdjaGFyX3Q7CgoKCgoKCmV4 dGVybiB2b2lkIGFib3J0KHZvaWQpOwpleHRlcm4gaW50IGFicyhpbnQpOwpleHRlcm4gaW50IGF0 ZXhpdCh2b2lkICgqKSh2b2lkKSk7CmV4dGVybiBkb3VibGUgYXRvZihjb25zdCBjaGFyICopOwpl eHRlcm4gaW50IGF0b2koY29uc3QgY2hhciAqKTsKZXh0ZXJuIGxvbmcgaW50IGF0b2woY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIHZvaWQgKmJzZWFyY2goY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICos IHNpemVfdCwgc2l6ZV90LAogICAgICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lk ICopKTsKZXh0ZXJuIHZvaWQgKmNhbGxvYyhzaXplX3QsIHNpemVfdCk7CmV4dGVybiBkaXZfdCBk aXYoaW50LCBpbnQpOwpleHRlcm4gdm9pZCBleGl0KGludCk7CmV4dGVybiB2b2lkIGZyZWUodm9p ZCAqKTsKZXh0ZXJuIGNoYXIgKmdldGVudihjb25zdCBjaGFyICopOwpleHRlcm4gbG9uZyBpbnQg bGFicyhsb25nKTsKZXh0ZXJuIGxkaXZfdCBsZGl2KGxvbmcsIGxvbmcpOwpleHRlcm4gdm9pZCAq bWFsbG9jKHNpemVfdCk7CmV4dGVybiBpbnQgbWJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QpOwpl eHRlcm4gc2l6ZV90IG1ic3Rvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpl eHRlcm4gaW50IG1idG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJu IHZvaWQgcXNvcnQodm9pZCAqLCBzaXplX3QsIHNpemVfdCwKICAgICAgICBpbnQgKCopKGNvbnN0 IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CmV4dGVybiBpbnQgcmFuZCh2b2lkKTsKZXh0ZXJuIHZv aWQgKnJlYWxsb2Modm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCBzcmFuZCh1bnNpZ25lZCBp bnQpOwpleHRlcm4gZG91YmxlIHN0cnRvZChjb25zdCBjaGFyICosIGNoYXIgKiopOwpleHRlcm4g bG9uZyBpbnQgc3RydG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIHVuc2ln bmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4g aW50IHN5c3RlbShjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHdjdG9tYihjaGFyICosIHdjaGFy X3QpOwpleHRlcm4gc2l6ZV90IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXpl X3QpOwojIDE5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy93YWl0LmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQK I3ByYWdtYSBpZGVudCAiQCgjKXdhaXQuaAkxLjIxCTk3LzA0LzA4IFNNSSIgCgoKCiMgMSAiL3Vz ci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9pbmNsdWRlL3N5 cy90eXBlcy5oIiAxIDMgNAojIDI1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojcHJhZ21hIGlkZW50ICJA KCMpdHlwZXMuaAkxLjcyCTAyLzAzLzIzIFNNSSIKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5 cy9tYWNodHlwZXMuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNodHlwZXMuaCIg MyA0CiNwcmFnbWEgaWRlbnQgIkAoIyltYWNodHlwZXMuaAkxLjEzCTk5LzA1LzA0IFNNSSIKIyAz MyAiL3Vzci9pbmNsdWRlL3N5cy9tYWNodHlwZXMuaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9sYWJl bF90IHsgbG9uZyB2YWxbMl07IH0gbGFiZWxfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGxv Y2tfdDsKIyAzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8z LjIuMi9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAojIDQ1ICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAoj IDEgIi91c3IvaW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRl L3N5cy9pbnRfdHlwZXMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylpbnRfdHlwZXMuaAkxLjYJ OTcvMDgvMjAgU01JIgojIDYyICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQKdHlw ZWRlZiBjaGFyIGludDhfdDsKCgoKCgp0eXBlZGVmIHNob3J0IGludDE2X3Q7CnR5cGVkZWYgaW50 IGludDMyX3Q7CgoKCgp0eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90OwoKCgp0eXBlZGVmIHVuc2ln bmVkIGNoYXIgdWludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1 aW50NjRfdDsKIyA5NCAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYg aW50NjRfdCBpbnRtYXhfdDsKdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7CiMgMTEwICIvdXNy L2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQKdHlwZWRlZiBpbnQgaW50cHRyX3Q7CnR5cGVk ZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsKCgoKCgoKCnR5cGVkZWYgY2hhciBpbnRfbGVhc3Q4 X3Q7CgoKCgoKdHlwZWRlZiBzaG9ydCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBpbnRfbGVh c3QzMl90OwoKCgoKdHlwZWRlZiBsb25nIGxvbmcgaW50X2xlYXN0NjRfdDsKCgoKdHlwZWRlZiB1 bnNpZ25lZCBjaGFyIHVpbnRfbGVhc3Q4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludF9s ZWFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfbGVhc3QzMl90OwoKCgoKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludF9sZWFzdDY0X3Q7CiMgNDYgIi91c3IvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MiAzIDQKIyA2MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8z LjIuMi9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nIGxvbmcgbG9uZ2xvbmdf dDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9sb25nbG9uZ190OwojIDg1ICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25n IHRfdXNjYWxhcl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcl90Owp0eXBlZGVm IHVuc2lnbmVkIHNob3J0IHVzaG9ydF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X3Q7CnR5 cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZ190OwoKdHlwZWRlZiBjaGFyICpjYWRkcl90Owp0eXBl ZGVmIGxvbmcgZGFkZHJfdDsKdHlwZWRlZiBzaG9ydCBjbnRfdDsKIyAxMTIgIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMyA0CnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAxMjEgIi91c3IvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5 cGVkZWYgdWxvbmdfdCBwZm5fdDsKdHlwZWRlZiB1bG9uZ190IHBnY250X3Q7CnR5cGVkZWYgbG9u ZyBzcGdjbnRfdDsKCnR5cGVkZWYgdWNoYXJfdCB1c2VfdDsKdHlwZWRlZiBzaG9ydCBzeXNpZF90 Owp0eXBlZGVmIHNob3J0IGluZGV4X3Q7CnR5cGVkZWYgdm9pZCAqdGltZW91dF9pZF90Owp0eXBl ZGVmIHZvaWQgKmJ1ZmNhbGxfaWRfdDsKIyAxNjQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYg dV9sb25nbG9uZ190IGlub190Owp0eXBlZGVmIGxvbmdsb25nX3QgYmxrY250X3Q7CnR5cGVkZWYg dV9sb25nbG9uZ190IGZzYmxrY250X3Q7CnR5cGVkZWYgdV9sb25nbG9uZ190IGZzZmlsY250X3Q7 CiMgMTc3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4y L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBpbm82NF90Owp0 eXBlZGVmIGxvbmdsb25nX3QgYmxrY250NjRfdDsKdHlwZWRlZiB1X2xvbmdsb25nX3QgZnNibGtj bnQ2NF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBmc2ZpbGNudDY0X3Q7CgoKCgoKCnR5cGVkZWYg bG9uZyBibGtzaXplX3Q7CgoKCnR5cGVkZWYgZW51bSB7IF9CX0ZBTFNFLCBfQl9UUlVFIH0gYm9v bGVhbl90OwojIDIwNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OS8zLjIuMi9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBpbnQ2NF90IHBhZDY0X3Q7 CnR5cGVkZWYgdWludDY0X3QgdXBhZDY0X3Q7CiMgMjE3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBl ZGVmIGxvbmdsb25nX3Qgb2Zmc2V0X3Q7CnR5cGVkZWYgdV9sb25nbG9uZ190IHVfb2Zmc2V0X3Q7 CnR5cGVkZWYgdV9sb25nbG9uZ190IGxlbl90Owp0eXBlZGVmIGxvbmdsb25nX3QgZGlza2FkZHJf dDsKIyAyMzggIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4y LjIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5pb24gewogICAgICAgIG9mZnNl dF90IF9mOwogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICBpbnQzMl90IF91OwogICAg ICAgICAgICAgICAgaW50MzJfdCBfbDsKICAgICAgICB9IF9wOwp9IGxsb2ZmX3Q7CiMgMjU4ICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVuaW9uIHsKICAgICAgICBkaXNrYWRkcl90IF9mOwog ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICBpbnQzMl90IF91OwogICAgICAgICAgICAg ICAgaW50MzJfdCBfbDsKICAgICAgICB9IF9wOwp9IGxsZGFkZHJfdDsKCgp0eXBlZGVmIHVpbnRf dCBrX2ZsdHNldF90OwojIDI4MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOS8zLjIuMi9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nIGlkX3Q7 CgoKCgoKCnR5cGVkZWYgdWludF90IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgbG9uZyBzdXNlY29u ZHNfdDsKIyAzMDIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkv My4yLjIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdWxvbmdfdCBtYWpvcl90Owp0 eXBlZGVmIHVsb25nX3QgbWlub3JfdDsKCgoKCgp0eXBlZGVmIHNob3J0IHByaV90OwojIDMyMiAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9pbmNsdWRl L3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1c2hvcnRfdCBvX21vZGVfdDsKdHlwZWRlZiBzaG9y dCBvX2Rldl90Owp0eXBlZGVmIHVzaG9ydF90IG9fdWlkX3Q7CnR5cGVkZWYgb191aWRfdCBvX2dp ZF90Owp0eXBlZGVmIHNob3J0IG9fbmxpbmtfdDsKdHlwZWRlZiBzaG9ydCBvX3BpZF90Owp0eXBl ZGVmIHVzaG9ydF90IG9faW5vX3Q7CgoKCgoKdHlwZWRlZiBpbnQga2V5X3Q7CgoKCnR5cGVkZWYg dWxvbmdfdCBtb2RlX3Q7CgoKCgoKCgp0eXBlZGVmIGxvbmcgdWlkX3Q7CgoKCnR5cGVkZWYgdWlk X3QgZ2lkX3Q7Cgp0eXBlZGVmIGlkX3QgdGFza2lkX3Q7CnR5cGVkZWYgaWRfdCBwcm9qaWRfdDsK CgoKCgoKdHlwZWRlZiB1aW50X3QgcHRocmVhZF90Owp0eXBlZGVmIHVpbnRfdCBwdGhyZWFkX2tl eV90OwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfbXV0ZXggewogICAgICAgIHN0cnVj dCB7CiAgICAgICAgICAgICAgICB1aW50MTZfdCBfX3B0aHJlYWRfbXV0ZXhfZmxhZzE7CiAgICAg ICAgICAgICAgICB1aW50OF90IF9fcHRocmVhZF9tdXRleF9mbGFnMjsKICAgICAgICAgICAgICAg IHVpbnQ4X3QgX19wdGhyZWFkX211dGV4X2NlaWxpbmc7CiAgICAgICAgICAgICAgICB1aW50MTZf dCBfX3B0aHJlYWRfbXV0ZXhfdHlwZTsKICAgICAgICAgICAgICAgIHVpbnQxNl90IF9fcHRocmVh ZF9tdXRleF9tYWdpYzsKICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9mbGFnczsKICAgICAgICB1 bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB1 aW50OF90IF9fcHRocmVhZF9tdXRleF9wYWRbOF07CiAgICAgICAgICAgICAgICB9IF9fcHRocmVh ZF9tdXRleF9sb2NrNjQ7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAg ICAgICAgICB1aW50MzJfdCBfX3B0aHJlYWRfb3duZXJwaWQ7CiAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQzMl90IF9fcHRocmVhZF9sb2Nrd29yZDsKICAgICAgICAgICAgICAgIH0gX19wdGhy ZWFkX211dGV4X2xvY2szMjsKICAgICAgICAgICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9tdXRl eF9vd25lcjY0OwogICAgICAgIH0gX19wdGhyZWFkX211dGV4X2xvY2s7CiAgICAgICAgdXBhZDY0 X3QgX19wdGhyZWFkX211dGV4X2RhdGE7Cn0gcHRocmVhZF9tdXRleF90OwoKdHlwZWRlZiBzdHJ1 Y3QgX3B0aHJlYWRfY29uZCB7CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVpbnQ4 X3QgX19wdGhyZWFkX2NvbmRfZmxhZ1s0XTsKICAgICAgICAgICAgICAgIHVpbnQxNl90IF9fcHRo cmVhZF9jb25kX3R5cGU7CiAgICAgICAgICAgICAgICB1aW50MTZfdCBfX3B0aHJlYWRfY29uZF9t YWdpYzsKICAgICAgICB9IF9fcHRocmVhZF9jb25kX2ZsYWdzOwogICAgICAgIHVwYWQ2NF90IF9f cHRocmVhZF9jb25kX2RhdGE7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBf cHRocmVhZF9yd2xvY2sgewogICAgICAgIGludDMyX3QgX19wdGhyZWFkX3J3bG9ja19yZWFkZXJz OwogICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9yd2xvY2tfdHlwZTsKICAgICAgICB1aW50MTZf dCBfX3B0aHJlYWRfcndsb2NrX21hZ2ljOwogICAgICAgIHB0aHJlYWRfbXV0ZXhfdCBfX3B0aHJl YWRfcndsb2NrX211dGV4OwogICAgICAgIHB0aHJlYWRfY29uZF90IF9fcHRocmVhZF9yd2xvY2tf cmVhZGVyY3Y7CiAgICAgICAgcHRocmVhZF9jb25kX3QgX19wdGhyZWFkX3J3bG9ja193cml0ZXJj djsKfSBwdGhyZWFkX3J3bG9ja190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfYXR0ciB7 CiAgICAgICAgdm9pZCAqX19wdGhyZWFkX2F0dHJwOwp9IHB0aHJlYWRfYXR0cl90OwoKCgoKdHlw ZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfbXV0ZXhhdHRyIHsKICAgICAgICB2b2lkICpfX3B0aHJlYWRf bXV0ZXhhdHRycDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0 aHJlYWRfY29uZGF0dHIgewogICAgICAgIHZvaWQgKl9fcHRocmVhZF9jb25kYXR0cnA7Cn0gcHRo cmVhZF9jb25kYXR0cl90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX29uY2UgewogICAgICAgIHVwYWQ2 NF90IF9fcHRocmVhZF9vbmNlX3BhZFs0XTsKfSBwdGhyZWFkX29uY2VfdDsKCgoKCgp0eXBlZGVm IHN0cnVjdCBfcHRocmVhZF9yd2xvY2thdHRyIHsKICAgICAgICB2b2lkICpfX3B0aHJlYWRfcnds b2NrYXR0cnA7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7Cgp0eXBlZGVmIHVsb25nX3QgZGV2X3Q7 CgoKCgoKdHlwZWRlZiB1bG9uZ190IG5saW5rX3Q7CnR5cGVkZWYgbG9uZyBwaWRfdDsKIyA0ODUg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgbG9uZyB0aW1lX3Q7CgoKCgp0eXBlZGVmIGxvbmcg Y2xvY2tfdDsKCgoKCnR5cGVkZWYgaW50IGNsb2NraWRfdDsKCgoKCnR5cGVkZWYgaW50IHRpbWVy X3Q7CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1bmNoYXI7CnR5cGVkZWYgdW5zaWduZWQg c2hvcnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50Owp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgdWxvbmc7CiMgNTYxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi45LzMuMi4yL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGNo YXIgdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVfc2hvcnQ7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IHVfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdV9sb25nOwp0eXBlZGVmIHN0cnVj dCBfcXVhZCB7IGludCB2YWxbMl07IH0gcXVhZF90Owp0eXBlZGVmIHF1YWRfdCBxdWFkOwoKCgoK CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiMgMTUgIi91c3IvaW5jbHVk ZS9zeXMvc2VsZWN0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc2VsZWN0LmgJMS4xNwkwMS8w OC8xNSBTTUkiIAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAzIDQKIyAyMiAi L3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdGltZS5oCTIu NzAJMDIvMDEvMjggU01JIiAKIyA0OSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNApzdHJ1 Y3QgdGltZXZhbCB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAgICBzdXNlY29uZHNfdCB0 dl91c2VjOwp9OwojIDgyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1l em9uZSB7CiAgICAgICAgaW50IHR6X21pbnV0ZXN3ZXN0OwogICAgICAgIGludCB0el9kc3R0aW1l Owp9OwojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAojIDEgIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMSAzIDQKIyAxMDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMgNAojIDE1MyAiL3Vz ci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNApzdHJ1Y3QgaXRpbWVydmFsIHsKICAgICAgICBzdHJ1 Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsK fTsKIyAyMDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKdHlwZWRlZiBsb25nbG9uZ190 IGhydGltZV90OwojIDMxOSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAppbnQgYWRqdGlt ZShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKIyAzMjkgIi91c3IvaW5jbHVk ZS9zeXMvdGltZS5oIiAzIDQKaW50IGZ1dGltZXNhdChpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qg c3RydWN0IHRpbWV2YWwgKik7CiMgMzQwICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0Cmlu dCBnZXRpdGltZXIoaW50LCBzdHJ1Y3QgaXRpbWVydmFsICopOwppbnQgdXRpbWVzKGNvbnN0IGNo YXIgKiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKik7CgppbnQgc2V0aXRpbWVyKGludCwgY29uc3Qg c3RydWN0IGl0aW1lcnZhbCAqLCBzdHJ1Y3QgaXRpbWVydmFsICopOwojIDM3NyAiL3Vzci9pbmNs dWRlL3N5cy90aW1lLmgiIDMgNAppbnQgc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICosIHZv aWQgKik7CgpocnRpbWVfdCBnZXRocnRpbWUodm9pZCk7CmhydGltZV90IGdldGhydnRpbWUodm9p ZCk7CiMgMzk3ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CmludCBnZXR0aW1lb2ZkYXko c3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKIyA0MTggIi91c3IvaW5jbHVkZS9zeXMvdGltZS5o IiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXRpbWUuaAkxLjM5CTk5LzA4LzEwIFNNSSIg CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby90aW1lX2lzby5oIiAxIDMgNAojIDI4ICIvdXNyL2lu Y2x1ZGUvaXNvL3RpbWVfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdGltZV9pc28uaAkx LjEJOTkvMDgvMDkgU01JIiAKIyA2OSAiL3Vzci9pbmNsdWRlL2lzby90aW1lX2lzby5oIiAzIDQK c3RydWN0IHRtIHsKICAgICAgICBpbnQgdG1fc2VjOwogICAgICAgIGludCB0bV9taW47CiAgICAg ICAgaW50IHRtX2hvdXI7CiAgICAgICAgaW50IHRtX21kYXk7CiAgICAgICAgaW50IHRtX21vbjsK ICAgICAgICBpbnQgdG1feWVhcjsKICAgICAgICBpbnQgdG1fd2RheTsKICAgICAgICBpbnQgdG1f eWRheTsKICAgICAgICBpbnQgdG1faXNkc3Q7Cn07CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZShj b25zdCBzdHJ1Y3QgdG0gKik7CmV4dGVybiBjbG9ja190IGNsb2NrKHZvaWQpOwpleHRlcm4gY2hh ciAqY3RpbWUoY29uc3QgdGltZV90ICopOwpleHRlcm4gZG91YmxlIGRpZmZ0aW1lKHRpbWVfdCwg dGltZV90KTsKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJu IHN0cnVjdCB0bSAqbG9jYWx0aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIHRpbWVfdCBta3Rp bWUoc3RydWN0IHRtICopOwpleHRlcm4gdGltZV90IHRpbWUodGltZV90ICopOwpleHRlcm4gc2l6 ZV90IHN0cmZ0aW1lKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0 bSAqKTsKIyAyMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQKIyA2MCAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMyA0CmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqLCBz dHJ1Y3QgdG0gKik7CmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAq LCBzdHJ1Y3QgdG0gKik7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lKGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqLCBzdHJ1Y3QgdG0gKik7CiMgODMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMg NAojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDEgMyA0CiMgMTkgIi91c3IvaW5j bHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdGltZV9pbXBsLmgJ MS43CTAxLzA5LzA2IFNNSSIKIyAzOCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0 CnR5cGVkZWYgc3RydWN0IHRpbWVzcGVjIHsKICAgICAgICB0aW1lX3QgdHZfc2VjOwogICAgICAg IGxvbmcgdHZfbnNlYzsKfSB0aW1lc3BlY190OwojIDYyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVf aW1wbC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgdGltZXNwZWMgdGltZXN0cnVjX3Q7CiMgNzcgIi91 c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBpdGltZXJzcGVj IHsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IHRp bWVzcGVjIGl0X3ZhbHVlOwp9IGl0aW1lcnNwZWNfdDsKIyA4NCAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMiAzIDQKIyA5OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnVuaW9uIHNpZ3ZhbCB7CiAg ICAgICAgaW50IHNpdmFsX2ludDsKICAgICAgICB2b2lkICpzaXZhbF9wdHI7Cn07CgoKCgpzdHJ1 Y3Qgc2lnZXZlbnQgewogICAgICAgIGludCBzaWdldl9ub3RpZnk7CiAgICAgICAgaW50IHNpZ2V2 X3NpZ25vOwogICAgICAgIHVuaW9uIHNpZ3ZhbCBzaWdldl92YWx1ZTsKICAgICAgICB2b2lkICgq c2lnZXZfbm90aWZ5X2Z1bmN0aW9uKSh1bmlvbiBzaWd2YWwpOwogICAgICAgIHB0aHJlYWRfYXR0 cl90ICpzaWdldl9ub3RpZnlfYXR0cmlidXRlczsKICAgICAgICBpbnQgX19zaWdldl9wYWQyOwp9 OwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVjICop OwpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7 CmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZShjbG9ja2lkX3QsIGNvbnN0IHN0cnVjdCB0aW1lc3Bl YyAqKTsKZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUoY2xvY2tpZF90LCBzdHJ1Y3Qgc2lnZXZlbnQg KiwgdGltZXJfdCAqKTsKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUodGltZXJfdCk7CmV4dGVybiBp bnQgdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90KTsKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lKHRp bWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjICopOwpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUodGlt ZXJfdCwgaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqLAogICAgICAgICAgICAgICAgc3Ry dWN0IGl0aW1lcnNwZWMgKik7CmV4dGVybiBpbnQgbmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1l c3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CgoKCgpleHRlcm4gdm9pZCB0enNldCh2b2lkKTsK CmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsKCgoK CgoKZXh0ZXJuIGxvbmcgdGltZXpvbmU7CmV4dGVybiBpbnQgZGF5bGlnaHQ7CiMgMTU2ICIvdXNy L2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZShjb25zdCBjaGFy ICopOwoKCgoKZXh0ZXJuIGludCAqX2dldGRhdGVfZXJyX2FkZHIodm9pZCk7CiMgMjUwICIvdXNy L2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfcihjb25zdCBzdHJ1Y3Qg dG0gKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmN0aW1lX3IoY29uc3QgdGltZV90ICosIGNoYXIg Kik7CiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBjdGltZV9yIF9fcG9zaXhfY3RpbWVfcgojcHJh Z21hIHJlZGVmaW5lX2V4dG5hbWUgYXNjdGltZV9yIF9fcG9zaXhfYXNjdGltZV9yCiMgNDE5ICIv dXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQKIyA0MzEgIi91c3IvaW5jbHVkZS9zeXMvdGlt ZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMgNAojIDQzMiAiL3Vz ci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0CiMgMjEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0 LmgiIDIgMyA0CiMgNDggIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAp0eXBlZGVmIGxv bmcgZmRfbWFzazsKCnR5cGVkZWYgbG9uZyBmZHNfbWFzazsKIyA3NiAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMyA0CnR5cGVkZWYgc3RydWN0IGZkX3NldCB7CgoKCiAgICAgICAgbG9uZyBm ZHNfYml0c1soKCgxMDI0KSsoKChzaXplb2YgKGZkc19tYXNrKSAqIDgpKS0xKSkvKChzaXplb2Yg KGZkc19tYXNrKSAqIDgpKSldOwp9IGZkX3NldDsKIyAxMDAgIi91c3IvaW5jbHVkZS9zeXMvc2Vs ZWN0LmgiIDMgNApleHRlcm4gaW50IHNlbGVjdChpbnQsIGZkX3NldCAqLCBmZF9zZXQgKiwgZmRf c2V0ICosIHN0cnVjdCB0aW1ldmFsICopOwojIDU3NCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAojIDIx ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lz L3Jlc291cmNlLmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0 CiNwcmFnbWEgaWRlbnQgIkAoIylyZXNvdXJjZS5oCTEuMjcJMDEvMDQvMDUgU01JIiAKIyA3NyAi L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKdHlwZWRlZiB1X2xvbmdsb25nX3Qgcmxp bV90OwojIDEwNCAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKc3RydWN0IHJsaW1p dCB7CiAgICAgICAgcmxpbV90IHJsaW1fY3VyOwogICAgICAgIHJsaW1fdCBybGltX21heDsKfTsK CgoKCnR5cGVkZWYgdV9sb25nbG9uZ190IHJsaW02NF90OwoKCgoKCnN0cnVjdCBybGltaXQ2NCB7 CiAgICAgICAgcmxpbTY0X3QgcmxpbV9jdXI7CiAgICAgICAgcmxpbTY0X3QgcmxpbV9tYXg7Cn07 CiMgMTQxICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNApzdHJ1Y3QgcnVzYWdlIHsK ICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCBy dV9zdGltZTsKICAgICAgICBsb25nIHJ1X21heHJzczsKICAgICAgICBsb25nIHJ1X2l4cnNzOwog ICAgICAgIGxvbmcgcnVfaWRyc3M7CiAgICAgICAgbG9uZyBydV9pc3JzczsKICAgICAgICBsb25n IHJ1X21pbmZsdDsKICAgICAgICBsb25nIHJ1X21hamZsdDsKICAgICAgICBsb25nIHJ1X25zd2Fw OwogICAgICAgIGxvbmcgcnVfaW5ibG9jazsKICAgICAgICBsb25nIHJ1X291YmxvY2s7CiAgICAg ICAgbG9uZyBydV9tc2dzbmQ7CiAgICAgICAgbG9uZyBydV9tc2dyY3Y7CiAgICAgICAgbG9uZyBy dV9uc2lnbmFsczsKICAgICAgICBsb25nIHJ1X252Y3N3OwogICAgICAgIGxvbmcgcnVfbml2Y3N3 Owp9OwoKCgoKCgojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUgc2V0cmxpbWl0IHNldHJsaW1pdDY0 CiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBnZXRybGltaXQgZ2V0cmxpbWl0NjQKIyAxOTEgIi91 c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CmV4dGVybiBpbnQgc2V0cmxpbWl0KGludCwg Y29uc3Qgc3RydWN0IHJsaW1pdCAqKTsKZXh0ZXJuIGludCBnZXRybGltaXQoaW50LCBzdHJ1Y3Qg cmxpbWl0ICopOwoKCgoKZXh0ZXJuIGludCBzZXRybGltaXQ2NChpbnQsIGNvbnN0IHN0cnVjdCBy bGltaXQ2NCAqKTsKZXh0ZXJuIGludCBnZXRybGltaXQ2NChpbnQsIHN0cnVjdCBybGltaXQ2NCAq KTsKCgpleHRlcm4gaW50IGdldHByaW9yaXR5KGludCwgaWRfdCk7CmV4dGVybiBpbnQgc2V0cHJp b3JpdHkoaW50LCBpZF90LCBpbnQpOwpleHRlcm4gaW50IGdldHJ1c2FnZShpbnQsIHN0cnVjdCBy dXNhZ2UgKik7CiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMgNAojIDEgIi91c3Iv aW5jbHVkZS9zeXMvc2lnaW5mby5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2lu Zm8uaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzaWdpbmZvLmgJMS41NQkwMS8wNC8wNSBTTUki IAojIDEyNyAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMgNAojIDEgIi91c3IvaW5jbHVk ZS9zeXMvbWFjaHNpZy5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL21hY2hzaWcuaCIg MyA0CiNwcmFnbWEgaWRlbnQgIkAoIyltYWNoc2lnLmgJMS4xNQk5OS8wOC8xNSBTTUkiCiMgMTI4 ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMiAzIDQKIyAyMjIgIi91c3IvaW5jbHVkZS9z eXMvc2lnaW5mby5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CgoKCiAgICAgICAgaW50 IHNpX3NpZ25vOwogICAgICAgIGludCBzaV9jb2RlOwogICAgICAgIGludCBzaV9lcnJubzsKCgoK ICAgICAgICB1bmlvbiB7CgogICAgICAgICAgICAgICAgaW50IF9fcGFkWygoMTI4IC8gc2l6ZW9m IChpbnQpKSAtIDMpXTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAg ICAgICAgICBwaWRfdCBfX3BpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsKCgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5pb24gc2lndmFsIF9fdmFsdWU7CgoKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfSBfX2tpbGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2Nr X3QgX191dGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X3N0YXR1czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3Qg X19zdGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF9fY2xkOwogICAgICAg ICAgICAgICAgICAgICAgICB9IF9fcGRhdGE7CiAgICAgICAgICAgICAgICB9IF9fcHJvYzsKCiAg ICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Fk ZHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsKICAgICAgICAgICAgICAg ICAgICAgICAgY2FkZHJfdCBfX3BjOwogICAgICAgICAgICAgICAgfSBfX2ZhdWx0OwoKICAgICAg ICAgICAgICAgIHN0cnVjdCB7CgogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19mZDsKICAg ICAgICAgICAgICAgICAgICAgICAgbG9uZyBfX2JhbmQ7CiAgICAgICAgICAgICAgICB9IF9fZmls ZTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBjYWRk cl90IF9fZmFkZHI7CgoKICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0cnVjX3QgX190c3Rh bXA7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IF9fc3lzY2FsbDsKICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciBfX25zeXNhcmc7CiAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgX19mYXVsdDsKICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfX3N5c2FyZ1s4XTsKICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fbXN0YXRlWzEwXTsKICAgICAgICAgICAgICAgIH0g X19wcm9mOwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAg IGludDMyX3QgX19lbnRpdHk7CiAgICAgICAgICAgICAgICB9IF9fcmN0bDsKICAgICAgICB9IF9f ZGF0YTsKCn0gc2lnaW5mb190OwojIDM2MiAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMg NAp0eXBlZGVmIHN0cnVjdCBrX3NpZ2luZm8gewogICAgICAgIGludCBzaV9zaWdubzsKICAgICAg ICBpbnQgc2lfY29kZTsKICAgICAgICBpbnQgc2lfZXJybm87CgoKCiAgICAgICAgdW5pb24gewog ICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19w aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWlkX3QgX191aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bmlvbiBzaWd2YWwgX192YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF9f a2lsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfdCBfX3V0aW1lOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fc3RhdHVzOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfdCBfX3N0aW1lOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0gX19jbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gX19w ZGF0YTsKICAgICAgICAgICAgICAgIH0gX19wcm9jOwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7 CiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYWRkcjsKICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fdHJhcG5vOwogICAgICAgICAgICAgICAgICAgICAgICBjYWRkcl90IF9fcGM7 CiAgICAgICAgICAgICAgICB9IF9fZmF1bHQ7CgogICAgICAgICAgICAgICAgc3RydWN0IHsKCiAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2ZkOwogICAgICAgICAgICAgICAgICAgICAgICBs b25nIF9fYmFuZDsKICAgICAgICAgICAgICAgIH0gX19maWxlOwoKICAgICAgICAgICAgICAgIHN0 cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19mYWRkcjsKCgoKICAgICAg ICAgICAgICAgICAgICAgICAgdGltZXN0cnVjX3QgX190c3RhbXA7CgoKCiAgICAgICAgICAgICAg ICAgICAgICAgIHNob3J0IF9fc3lzY2FsbDsKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBf X25zeXNhcmc7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19mYXVsdDsKCgoKICAgICAg ICAgICAgICAgIH0gX19wcm9mOwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg ICAgICAgICAgICAgIGludDMyX3QgX19lbnRpdHk7CiAgICAgICAgICAgICAgICB9IF9fcmN0bDsK CiAgICAgICAgfSBfX2RhdGE7Cgp9IGtfc2lnaW5mb190OwoKdHlwZWRlZiBzdHJ1Y3Qgc2lncXVl dWUgewogICAgICAgIHN0cnVjdCBzaWdxdWV1ZSAqc3FfbmV4dDsKICAgICAgICBrX3NpZ2luZm9f dCBzcV9pbmZvOwogICAgICAgIHZvaWQgKCpzcV9mdW5jKShzdHJ1Y3Qgc2lncXVldWUgKik7CiAg ICAgICAgdm9pZCAqc3FfYmFja3B0cjsKCn0gc2lncXVldWVfdDsKIyAyNiAiL3Vzci9pbmNsdWRl L3N5cy93YWl0LmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDEgMyA0 CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgj KXByb2NzZXQuaAkxLjIwCTAwLzAxLzExIFNNSSIgCiMgNDEgIi91c3IvaW5jbHVkZS9zeXMvcHJv Y3NldC5oIiAzIDQKdHlwZWRlZiBlbnVtCgogICAgICAgIGlkdHlwZQoKICAgICAgICAgICAgICAg IHsKICAgICAgICBQX1BJRCwKICAgICAgICBQX1BQSUQsCiAgICAgICAgUF9QR0lELAoKICAgICAg ICBQX1NJRCwKICAgICAgICBQX0NJRCwKICAgICAgICBQX1VJRCwKICAgICAgICBQX0dJRCwKICAg ICAgICBQX0FMTCwKICAgICAgICBQX0xXUElELAogICAgICAgIFBfVEFTS0lELAogICAgICAgIFBf UFJPSklECn0gaWR0eXBlX3Q7CiMgNjcgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAzIDQK dHlwZWRlZiBlbnVtIGlkb3AgewogICAgICAgIFBPUF9ESUZGLAoKCiAgICAgICAgUE9QX0FORCwK CgogICAgICAgIFBPUF9PUiwKCgogICAgICAgIFBPUF9YT1IKCgp9IGlkb3BfdDsKCgoKCgoKCnR5 cGVkZWYgc3RydWN0IHByb2NzZXQgewogICAgICAgIGlkb3BfdCBwX29wOwoKCgoKICAgICAgICBp ZHR5cGVfdCBwX2xpZHR5cGU7CgoKICAgICAgICBpZF90IHBfbGlkOwoKICAgICAgICBpZHR5cGVf dCBwX3JpZHR5cGU7CgoKICAgICAgICBpZF90IHBfcmlkOwp9IHByb2NzZXRfdDsKIyAyNyAiL3Vz ci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CiMgODYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5o IiAzIDQKZXh0ZXJuIHBpZF90IHdhaXQoaW50ICopOwpleHRlcm4gcGlkX3Qgd2FpdHBpZChwaWRf dCwgaW50ICosIGludCk7CgoKZXh0ZXJuIGludCB3YWl0aWQoaWR0eXBlX3QsIGlkX3QsIHNpZ2lu Zm9fdCAqLCBpbnQpOwpleHRlcm4gcGlkX3Qgd2FpdDMoaW50ICosIGludCwgc3RydWN0IHJ1c2Fn ZSAqKTsKCgoKCmV4dGVybiBwaWRfdCB3YWl0NChwaWRfdCwgaW50ICosIGludCwgc3RydWN0IHJ1 c2FnZSAqKTsKIyAyMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAojIDY4ICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgbG9uZyBsb25nIHF1 b3Q7CiAgICAgICAgbG9uZyBsb25nIHJlbTsKfSBsbGRpdl90OwojIDg5ICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDMgNAojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUgbWtzdGVtcCBta3N0ZW1wNjQK IyAxMDkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBpbnQgcmFuZF9yKHVuc2ln bmVkIGludCAqKTsKCgpleHRlcm4gdm9pZCBfZXhpdGhhbmRsZSh2b2lkKTsKCgoKCmV4dGVybiBk b3VibGUgZHJhbmQ0OCh2b2lkKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0 ICopOwpleHRlcm4gbG9uZyBqcmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gdm9pZCBs Y29uZzQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gbG9uZyBscmFuZDQ4KHZvaWQpOwpleHRl cm4gbG9uZyBtcmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVkIHNob3J0 ICopOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0 ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsKZXh0ZXJuIGludCBwdXRlbnYoY2hhciAqKTsKZXh0ZXJu IHZvaWQgc2V0a2V5KGNvbnN0IGNoYXIgKik7CiMgMTUwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMgNApleHRlcm4gaW50IG1rc3RlbXAoY2hhciAqKTsKCgoKCmV4dGVybiBpbnQgbWtzdGVtcDY0 KGNoYXIgKik7CgoKCgoKZXh0ZXJuIGxvbmcgYTY0bChjb25zdCBjaGFyICopOwpleHRlcm4gY2hh ciAqZWN2dChkb3VibGUsIGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKmZjdnQoZG91 YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpnY3Z0KGRvdWJsZSwgaW50LCBj aGFyICopOwpleHRlcm4gaW50IGdldHN1Ym9wdChjaGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFy ICoqKTsKZXh0ZXJuIGludCBncmFudHB0KGludCk7CmV4dGVybiBjaGFyICppbml0c3RhdGUodW5z aWduZWQsIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CmV4dGVybiBj aGFyICpta3RlbXAoY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnB0c25hbWUoaW50KTsKZXh0ZXJuIGxv bmcgcmFuZG9tKHZvaWQpOwpleHRlcm4gY2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqLCBjaGFy ICopOwpleHRlcm4gY2hhciAqc2V0c3RhdGUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgc3Jh bmRvbSh1bnNpZ25lZCk7CmV4dGVybiBpbnQgdHR5c2xvdCh2b2lkKTsKZXh0ZXJuIGludCB1bmxv Y2twdChpbnQpOwpleHRlcm4gdm9pZCAqdmFsbG9jKHNpemVfdCk7CgoKCgpleHRlcm4gdm9pZCBj bG9zZWZyb20oaW50KTsKZXh0ZXJuIGludCBkdXAyKGludCwgaW50KTsKZXh0ZXJuIGludCBmZHdh bGsoaW50ICgqKSh2b2lkICosIGludCksIHZvaWQgKik7CmV4dGVybiBjaGFyICpxZWN2dChsb25n IGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWZjdnQobG9uZyBkb3Vi bGUsIGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0KGxvbmcgZG91YmxlLCBp bnQsIGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRjd2QoY2hhciAqLCBzaXplX3QpOwpleHRlcm4g Y29uc3QgY2hhciAqZ2V0ZXhlY25hbWUodm9pZCk7CmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lk KTsKZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25zdCBjaGFyICopOwpl eHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CmV4 dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRwYXNzcGhy YXNlKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0cHcodWlkX3QsIGNoYXIgKik7CmV4dGVy biBpbnQgaXNhdHR5KGludCk7CmV4dGVybiB2b2lkICptZW1hbGlnbihzaXplX3QsIHNpemVfdCk7 CmV4dGVybiBjaGFyICp0dHluYW1lKGludCk7CgoKZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25z dCBjaGFyICopOwpleHRlcm4gbG9uZyBsb25nIGxsYWJzKGxvbmcgbG9uZyk7CmV4dGVybiBsbGRp dl90IGxsZGl2KGxvbmcgbG9uZywgbG9uZyBsb25nKTsKZXh0ZXJuIGNoYXIgKmxsdG9zdHIobG9u ZyBsb25nLCBjaGFyICopOwpleHRlcm4gbG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBj aGFyICoqLCBpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHN0cnRvdWxsKGNvbnN0IGNo YXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIGNoYXIgKnVsbHRvc3RyKHVuc2lnbmVkIGxvbmcg bG9uZywgY2hhciAqKTsKIyAxMDQgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svc3R1ZGlvLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAx IDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMp dW5pc3RkLmgJMS42MAkwMS8wNy8yOSBTTUkiIAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Vu aXN0ZC5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAzIDQKI3ByYWdt YSBpZGVudCAiQCgjKXVuaXN0ZC5oCTEuMzkJMDEvMDcvMjkgU01JIiAKIyAyMiAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAyIDMgNAojIDEzMCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKI3By YWdtYSByZWRlZmluZV9leHRuYW1lIGZ0cnVuY2F0ZSBmdHJ1bmNhdGU2NAojcHJhZ21hIHJlZGVm aW5lX2V4dG5hbWUgbHNlZWsgbHNlZWs2NAojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUgcHJlYWQg cHJlYWQ2NAojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUgcHdyaXRlIHB3cml0ZTY0CiNwcmFnbWEg cmVkZWZpbmVfZXh0bmFtZSB0cnVuY2F0ZSB0cnVuY2F0ZTY0CiNwcmFnbWEgcmVkZWZpbmVfZXh0 bmFtZSBsb2NrZiBsb2NrZjY0CiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSB0ZWxsIHRlbGw2NAoj IDE3MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBhY2Nlc3MoY29uc3Qg Y2hhciAqLCBpbnQpOwoKCmV4dGVybiBpbnQgYWNjdChjb25zdCBjaGFyICopOwoKZXh0ZXJuIHVu c2lnbmVkIGFsYXJtKHVuc2lnbmVkKTsKCgpleHRlcm4gaW50IGJyayh2b2lkICopOwoKZXh0ZXJu IGludCBjaGRpcihjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGNob3duKGNvbnN0IGNoYXIgKiwg dWlkX3QsIGdpZF90KTsKCgpleHRlcm4gaW50IGNocm9vdChjb25zdCBjaGFyICopOwoKZXh0ZXJu IGludCBjbG9zZShpbnQpOwoKCmV4dGVybiBzaXplX3QgY29uZnN0cihpbnQsIGNoYXIgKiwgc2l6 ZV90KTsKZXh0ZXJuIGNoYXIgKmNyeXB0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKCgoK ZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoY2hhciAqKTsKCgpleHRlcm4gY2hhciAqY3Rlcm1pZF9yKGNo YXIgKik7CgpleHRlcm4gY2hhciAqY3VzZXJpZChjaGFyICopOwpleHRlcm4gaW50IGR1cChpbnQp OwpleHRlcm4gaW50IGR1cDIoaW50LCBpbnQpOwoKCmV4dGVybiB2b2lkIGVuY3J5cHQoY2hhciAq LCBpbnQpOwoKZXh0ZXJuIGludCBleGVjbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4u KTsKZXh0ZXJuIGludCBleGVjbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmV4 dGVybiBpbnQgZXhlY2xwKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4g aW50IGV4ZWN2KGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKik7CmV4dGVybiBpbnQgZXhlY3Zl KGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKiwgY2hhciAqY29uc3QgKik7CmV4dGVybiBpbnQg ZXhlY3ZwKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKik7CmV4dGVybiB2b2lkIF9leGl0KGlu dCk7CgoKCgoKCgpleHRlcm4gaW50IGZhdHRhY2goaW50LCBjb25zdCBjaGFyICopOwoKCgpleHRl cm4gaW50IGZjaGRpcihpbnQpOwpleHRlcm4gaW50IGZjaG93bihpbnQsIHVpZF90LCBnaWRfdCk7 CgoKZXh0ZXJuIGludCBmY2hvd25hdChpbnQsIGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90LCBp bnQpOwoKCgoKZXh0ZXJuIGludCBmY2hyb290KGludCk7CgoKCmV4dGVybiBpbnQgZmRhdGFzeW5j KGludCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gaW50IGZkZXRh Y2goY29uc3QgY2hhciAqKTsKCmV4dGVybiBwaWRfdCBmb3JrKHZvaWQpOwoKCmV4dGVybiBwaWRf dCBmb3JrMSh2b2lkKTsKCmV4dGVybiBsb25nIGZwYXRoY29uZihpbnQsIGludCk7CgoKZXh0ZXJu IGludCBmc3luYyhpbnQpOwoKCgoKZXh0ZXJuIGludCBmdHJ1bmNhdGUoaW50LCBvZmZfdCk7Cgpl eHRlcm4gY2hhciAqZ2V0Y3dkKGNoYXIgKiwgc2l6ZV90KTsKCgpleHRlcm4gaW50IGdldGR0YWJs ZXNpemUodm9pZCk7CgpleHRlcm4gZ2lkX3QgZ2V0ZWdpZCh2b2lkKTsKZXh0ZXJuIHVpZF90IGdl dGV1aWQodm9pZCk7CmV4dGVybiBnaWRfdCBnZXRnaWQodm9pZCk7CmV4dGVybiBpbnQgZ2V0Z3Jv dXBzKGludCwgZ2lkX3QgKik7CgoKZXh0ZXJuIGxvbmcgZ2V0aG9zdGlkKHZvaWQpOwoKCmV4dGVy biBpbnQgZ2V0aG9zdG5hbWUoY2hhciAqLCBzaXplX3QpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGxv Z2luKHZvaWQpOwoKCmV4dGVybiBpbnQgZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwgY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKZXh0ZXJuIGludCBvcHRlcnIsIG9wdGluZCwg b3B0b3B0OwpleHRlcm4gY2hhciAqZ2V0cGFzcyhjb25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50 IGdldHBhZ2VzaXplKHZvaWQpOwpleHRlcm4gcGlkX3QgZ2V0cGdpZChwaWRfdCk7CgpleHRlcm4g cGlkX3QgZ2V0cGlkKHZvaWQpOwpleHRlcm4gcGlkX3QgZ2V0cHBpZCh2b2lkKTsKZXh0ZXJuIHBp ZF90IGdldHBncnAodm9pZCk7CgoKY2hhciAqZ2V0dHh0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqKTsKCgoKZXh0ZXJuIHBpZF90IGdldHNpZChwaWRfdCk7CgpleHRlcm4gdWlkX3QgZ2V0dWlk KHZvaWQpOwoKCmV4dGVybiBjaGFyICpnZXR3ZChjaGFyICopOwojIDMxOSAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBpb2N0bChpbnQsIGludCwgLi4uKTsKCgoKZXh0ZXJu IGludCBpc2FleGVjKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKiwgY2hhciAqY29uc3QgKik7 CmV4dGVybiBpbnQgaXNzZXR1Z2lkKHZvaWQpOwoKZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKZXh0 ZXJuIGludCBsaW5rKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKCgpleHRlcm4gaW50IGxj aG93bihjb25zdCBjaGFyICosIHVpZF90LCBnaWRfdCk7CgoKCgpleHRlcm4gaW50IGxvY2tmKGlu dCwgaW50LCBvZmZfdCk7CgoKCmV4dGVybiBpbnQgcmVhZGxpbmsoY29uc3QgY2hhciAqLCBjaGFy ICosIHNpemVfdCk7CgpleHRlcm4gb2ZmX3QgbHNlZWsoaW50LCBvZmZfdCwgaW50KTsKCgpleHRl cm4gaW50IG5pY2UoaW50KTsKCmV4dGVybiBsb25nIHBhdGhjb25mKGNvbnN0IGNoYXIgKiwgaW50 KTsKZXh0ZXJuIGludCBwYXVzZSh2b2lkKTsKZXh0ZXJuIGludCBwaXBlKGludCAqKTsKCgpleHRl cm4gb2Zmc2V0X3QgbGxzZWVrKGludCwgb2Zmc2V0X3QsIGludCk7CgoKCgpleHRlcm4gb2ZmX3Qg dGVsbChpbnQpOwoKCgpleHRlcm4gaW50IG1pbmNvcmUoY2FkZHJfdCwgc2l6ZV90LCBjaGFyICop OwoKCgoKZXh0ZXJuIHNzaXplX3QgcHJlYWQoaW50LCB2b2lkICosIHNpemVfdCwgb2ZmX3QpOwoK CgpleHRlcm4gdm9pZCBwcm9maWwodW5zaWduZWQgc2hvcnQgKiwgc2l6ZV90LCB1bnNpZ25lZCBs b25nLCB1bnNpZ25lZCBpbnQpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrKHZvaWQgKCop ICh2b2lkKSwgdm9pZCAoKikgKHZvaWQpLCB2b2lkICgqKSAodm9pZCkpOwoKCgpleHRlcm4gbG9u ZyBwdHJhY2UoaW50LCBwaWRfdCwgbG9uZywgbG9uZyk7CgoKCgpleHRlcm4gc3NpemVfdCBwd3Jp dGUoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwgb2ZmX3QpOwoKZXh0ZXJuIHNzaXplX3QgcmVh ZChpbnQsIHZvaWQgKiwgc2l6ZV90KTsKCgpleHRlcm4gaW50IHJlbmFtZShjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIGludCByZW5hbWVhdChpbnQsIGNvbnN0IGNoYXIgKiwg aW50LCBjb25zdCBjaGFyICopOwoKCgoKZXh0ZXJuIGludCByZXNvbHZlcGF0aChjb25zdCBjaGFy ICosIGNoYXIgKiwgc2l6ZV90KTsKCmV4dGVybiBpbnQgcm1kaXIoY29uc3QgY2hhciAqKTsKCgpl eHRlcm4gdm9pZCAqc2JyayhpbnRwdHJfdCk7CgpleHRlcm4gaW50IHNldGdpZChnaWRfdCk7CgoK ZXh0ZXJuIGludCBzZXRlZ2lkKGdpZF90KTsKCgoKZXh0ZXJuIGludCBzZXRncm91cHMoaW50LCBj b25zdCBnaWRfdCAqKTsKCmV4dGVybiBpbnQgc2V0cGdpZChwaWRfdCwgcGlkX3QpOwoKCmV4dGVy biBwaWRfdCBzZXRwZ3JwKHZvaWQpOwpleHRlcm4gaW50IHNldHJlZ2lkKGdpZF90LCBnaWRfdCk7 CmV4dGVybiBpbnQgc2V0cmV1aWQodWlkX3QsIHVpZF90KTsKCmV4dGVybiBwaWRfdCBzZXRzaWQo dm9pZCk7CmV4dGVybiBpbnQgc2V0dWlkKHVpZF90KTsKCgpleHRlcm4gaW50IHNldGV1aWQodWlk X3QpOwoKZXh0ZXJuIHVuc2lnbmVkIHNsZWVwKHVuc2lnbmVkKTsKCgpleHRlcm4gaW50IHN0aW1l KGNvbnN0IHRpbWVfdCAqKTsKCgoKZXh0ZXJuIHZvaWQgc3dhYihjb25zdCB2b2lkICosIHZvaWQg Kiwgc3NpemVfdCk7CgoKCmV4dGVybiBpbnQgc3ltbGluayhjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CmV4dGVybiB2b2lkIHN5bmModm9pZCk7CgpleHRlcm4gbG9uZyBzeXNjb25mKGludCk7 CgoKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIHN5c2NvbmYgX19zeXNjb25mX3hwZzUKCgoKCgpl eHRlcm4gcGlkX3QgdGNnZXRwZ3JwKGludCk7CmV4dGVybiBpbnQgdGNzZXRwZ3JwKGludCwgcGlk X3QpOwoKCmV4dGVybiBvZmZfdCB0ZWxsKGludCk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlKGNv bnN0IGNoYXIgKiwgb2ZmX3QpOwoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50KTsKCgpleHRlcm4g dXNlY29uZHNfdCB1YWxhcm0odXNlY29uZHNfdCwgdXNlY29uZHNfdCk7CgpleHRlcm4gaW50IHVu bGluayhjb25zdCBjaGFyICopOwoKCmV4dGVybiBpbnQgdW5saW5rYXQoaW50LCBjb25zdCBjaGFy ICosIGludCk7CgoKCmV4dGVybiBpbnQgdXNsZWVwKHVzZWNvbmRzX3QpOwoKCgpleHRlcm4gcGlk X3QgdmZvcmsodm9pZCk7CgoKCmV4dGVybiB2b2lkIHZoYW5ndXAodm9pZCk7CgpleHRlcm4gc3Np emVfdCB3cml0ZShpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKCgpleHRlcm4gdm9pZCB5aWVs ZCh2b2lkKTsKCgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZTY0KGludCwgb2ZmNjRfdCk7CmV4dGVy biBvZmY2NF90IGxzZWVrNjQoaW50LCBvZmY2NF90LCBpbnQpOwpleHRlcm4gc3NpemVfdCBwcmVh ZDY0KGludCwgdm9pZCAqLCBzaXplX3QsIG9mZjY0X3QpOwpleHRlcm4gc3NpemVfdCBwd3JpdGU2 NChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBvZmY2NF90KTsKZXh0ZXJuIG9mZjY0X3QgdGVs bDY0KGludCk7CmV4dGVybiBpbnQgdHJ1bmNhdGU2NChjb25zdCBjaGFyICosIG9mZjY0X3QpOwpl eHRlcm4gaW50IGxvY2tmNjQoaW50LCBpbnQsIG9mZjY0X3QpOwojIDgwOCAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAzIDQKI3ByYWdtYSB1bmtub3duX2NvbnRyb2xfZmxvdyh2Zm9yaykKIyA4NTQg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgZ2V0bG9naW5fcihjaGFyICos IGludCk7CmV4dGVybiBpbnQgdHR5bmFtZV9yKGludCwgY2hhciAqLCBzaXplX3QpOwojcHJhZ21h IHJlZGVmaW5lX2V4dG5hbWUgZ2V0bG9naW5fciBfX3Bvc2l4X2dldGxvZ2luX3IKI3ByYWdtYSBy ZWRlZmluZV9leHRuYW1lIHR0eW5hbWVfciBfX3Bvc2l4X3R0eW5hbWVfcgojIDEwNiAiL2hvbWUv YmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9zdHVkaW8uaCIgMgoj IDExOCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9z dHVkaW8uaCIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMTYgIi91c3IvaW5j bHVkZS9zdHJpbmcuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdHJpbmcuaAkxLjI0CTk5LzA4 LzEwIFNNSSIgCgojIDEgIi91c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5oIiAxIDMgNAojIDI4 ICIvdXNyL2luY2x1ZGUvaXNvL3N0cmluZ19pc28uaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylz dHJpbmdfaXNvLmgJMS4yCTk5LzExLzA5IFNNSSIKIyA2MCAiL3Vzci9pbmNsdWRlL2lzby9zdHJp bmdfaXNvLmgiIDMgNApleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQg Kiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6 ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7 CmV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4dGVybiBjaGFyICpz dHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cmNtcChjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJjcHkoY2hhciAqLCBjb25zdCBjaGFy ICopOwpleHRlcm4gaW50IHN0cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRl cm4gc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hh ciAqc3RyZXJyb3IoaW50KTsKZXh0ZXJuIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsKZXh0 ZXJuIGNoYXIgKnN0cm5jYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBp bnQgc3RybmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNo YXIgKnN0cm5jcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qg c3Ryc3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cnRvayhj aGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBzaXplX3Qgc3RyeGZybShjaGFyICosIGNvbnN0 IGNoYXIgKiwgc2l6ZV90KTsKIyAxMTIgIi91c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5oIiAz IDQKZXh0ZXJuIHZvaWQgKm1lbWNocihjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJu IGNoYXIgKnN0cmNocihjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBjaGFyICpzdHJwYnJrKGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cnJjaHIoY29uc3QgY2hh ciAqLCBpbnQpOwpleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq KTsKIyAxOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMgNAojIDU4ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDMgNApleHRlcm4gY2hhciAqc3RydG9rX3IoY2hhciAqLCBjb25zdCBjaGFyICos IGNoYXIgKiopOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkodm9pZCAqLCBjb25zdCB2b2lkICos IGludCwgc2l6ZV90KTsKCgoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwoaW50KTsKZXh0ZXJuIGlu dCBmZnMoaW50KTsKZXh0ZXJuIGludCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqKTsKZXh0ZXJuIGludCBzdHJuY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg c2l6ZV90KTsKZXh0ZXJuIHNpemVfdCBzdHJsY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXpl X3QpOwpleHRlcm4gc2l6ZV90IHN0cmxjYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7 CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cChjb25zdCBjaGFyICopOwojIDExOSAiL2hvbWUvYmZy aWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9zdHVkaW8uaCIgMgojIDEg Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg MyA0CiNwcmFnbWEgaWRlbnQgIkAoIyljdHlwZS5oCTEuMzMJOTkvMDgvMTAgU01JIiAKCiMgMSAi L3Vzci9pbmNsdWRlL2lzby9jdHlwZV9pc28uaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL2lz by9jdHlwZV9pc28uaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyljdHlwZV9pc28uaAkxLjEJOTkv MDgvMDkgU01JIiAKIyA2MyAiL3Vzci9pbmNsdWRlL2lzby9jdHlwZV9pc28uaCIgMyA0CmV4dGVy biBpbnQgaXNhbG51bShpbnQpOwpleHRlcm4gaW50IGlzYWxwaGEoaW50KTsKZXh0ZXJuIGludCBp c2NudHJsKGludCk7CmV4dGVybiBpbnQgaXNkaWdpdChpbnQpOwpleHRlcm4gaW50IGlzZ3JhcGgo aW50KTsKZXh0ZXJuIGludCBpc2xvd2VyKGludCk7CmV4dGVybiBpbnQgaXNwcmludChpbnQpOwpl eHRlcm4gaW50IGlzcHVuY3QoaW50KTsKZXh0ZXJuIGludCBpc3NwYWNlKGludCk7CmV4dGVybiBp bnQgaXN1cHBlcihpbnQpOwpleHRlcm4gaW50IGlzeGRpZ2l0KGludCk7CgoKCgoKCgpleHRlcm4g aW50IHRvbG93ZXIoaW50KTsKZXh0ZXJuIGludCB0b3VwcGVyKGludCk7CgoKCgoKZXh0ZXJuIHVu c2lnbmVkIGNoYXIgX19jdHlwZVtdOwpleHRlcm4gdW5zaWduZWQgaW50ICpfX2N0eXBlX21hc2s7 CmV4dGVybiBpbnQgKl9fdHJhbnNfdXBwZXI7CmV4dGVybiBpbnQgKl9fdHJhbnNfbG93ZXI7CiMg MTkgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMgNAojIDQ5ICIvdXNyL2luY2x1ZGUvY3R5cGUu aCIgMyA0CmV4dGVybiBpbnQgaXNhc2NpaShpbnQpOwpleHRlcm4gaW50IHRvYXNjaWkoaW50KTsK ZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IF90b3VwcGVyKGludCk7CiMgMTIw ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL3N0dWRp by5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMgNAojIDkgIi91c3IvaW5jbHVk ZS9sb2NhbGUuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylsb2NhbGUuaAkxLjE5CTk5LzA4LzEw IFNNSSIKIyA0NiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv aXNvL2xvY2FsZV9pc28uaCIgMSAzIDQKIyA0NSAiL3Vzci9pbmNsdWRlL2lzby9sb2NhbGVfaXNv LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpbG9jYWxlX2lzby5oCTEuMQk5OS8wOC8wOSBTTUki CiMgNTcgIi91c3IvaW5jbHVkZS9pc28vbG9jYWxlX2lzby5oIiAzIDQKc3RydWN0IGxjb252IHsK ICAgICAgICBjaGFyICpkZWNpbWFsX3BvaW50OwogICAgICAgIGNoYXIgKnRob3VzYW5kc19zZXA7 CiAgICAgICAgY2hhciAqZ3JvdXBpbmc7CiAgICAgICAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwog ICAgICAgIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICAgICAgICBjaGFyICptb25fZGVjaW1hbF9w b2ludDsKICAgICAgICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKICAgICAgICBjaGFyICptb25f Z3JvdXBpbmc7CiAgICAgICAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICAgICAgICBjaGFyICpuZWdh dGl2ZV9zaWduOwogICAgICAgIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogICAgICAgIGNoYXIgZnJh Y19kaWdpdHM7CiAgICAgICAgY2hhciBwX2NzX3ByZWNlZGVzOwogICAgICAgIGNoYXIgcF9zZXBf Ynlfc3BhY2U7CiAgICAgICAgY2hhciBuX2NzX3ByZWNlZGVzOwogICAgICAgIGNoYXIgbl9zZXBf Ynlfc3BhY2U7CiAgICAgICAgY2hhciBwX3NpZ25fcG9zbjsKICAgICAgICBjaGFyIG5fc2lnbl9w b3NuOwp9OwojIDk1ICIvdXNyL2luY2x1ZGUvaXNvL2xvY2FsZV9pc28uaCIgMyA0CmV4dGVybiBj aGFyICpzZXRsb2NhbGUoaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gc3RydWN0IGxjb252ICps b2NhbGVjb252KHZvaWQpOwojIDQ3ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMyA0CgoKCgoj IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5j bHVkZS9saWJpbnRsLmgiIDEgMyA0CiMgMjAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9saWJpbnRsLmgiIDMgNAojcHJhZ21hIGlkZW50 ICJAKCMpbGliaW50bC5oCTEuMTMJMDEvMDgvMDEgU01JIgojIDQ0ICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvbGliaW50bC5oIiAzIDQK ZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qg aW50KTsKZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK ZXh0ZXJuIGNoYXIgKmdldHRleHQoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnRleHRkb21h aW4oY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqKTsKCgoKCgpleHRlcm4gY2hhciAqZGNuZ2V0dGV4dChjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiwKICAgICAgICBjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcgaW50 LCBpbnQpOwpleHRlcm4gY2hhciAqZG5nZXR0ZXh0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq LAogICAgICAgIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyBpbnQpOwpleHRlcm4gY2hhciAq bmdldHRleHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcgaW50KTsK ZXh0ZXJuIGNoYXIgKmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsKCgoKZXh0ZXJuIGludCB3ZGluaXQodm9pZCk7CmV4dGVybiBpbnQgd2RjaGtpbmQo d2NoYXJfdCk7CmV4dGVybiBpbnQgd2RiaW5kZih3Y2hhcl90LCB3Y2hhcl90LCBpbnQpOwpleHRl cm4gd2NoYXJfdCAqd2RkZWxpbSh3Y2hhcl90LCB3Y2hhcl90LCBpbnQpOwpleHRlcm4gd2NoYXJf dCBtY2ZpbGxlcih2b2lkKTsKZXh0ZXJuIGludCBtY3dyYXAodm9pZCk7CiMgNTIgIi91c3IvaW5j bHVkZS9sb2NhbGUuaCIgMiAzIDQKIyAxMjEgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svc3R1ZGlvLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8u aCIgMSAzIDQKIyAxNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMgNAojcHJhZ21hIGlkZW50ICJA KCMpZXJybm8uaAkxLjE2CTk5LzA3LzI2IFNNSSIgCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lz L2Vycm5vLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3N5cy9lcnJuby5oIiAzIDQKI3ByYWdt YSBpZGVudCAiQCgjKWVycm5vLmgJMS4yMAkwMC8wMS8xMiBTTUkiCiMgMjQgIi91c3IvaW5jbHVk ZS9lcnJuby5oIiAyIDMgNAojIDM4ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0CmV4dGVybiBp bnQgKl9fX2Vycm5vKCk7CiMgMTIyICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhp Y3NNYWdpY2svbWFnaWNrL3N0dWRpby5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDEg MyA0CiMgMTYgIi91c3IvaW5jbHVkZS9mY250bC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWZj bnRsLmgJMS4xNQkwMS8wNy8yOSBTTUkiIAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQu aCIgMSAzIDQKIyAxOCAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMgNAojcHJhZ21hIGlkZW50 ICJAKCMpc3RhdC5oCTEuMwkwMS8wNy8yOSBTTUkiCiMgMTYzICIvdXNyL2luY2x1ZGUvc3lzL3N0 YXQuaCIgMyA0CiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBmc3RhdCBmc3RhdDY0CiNwcmFnbWEg cmVkZWZpbmVfZXh0bmFtZSBzdGF0IHN0YXQ2NAoKCiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBm c3RhdGF0IGZzdGF0YXQ2NAoKCgoKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIGxzdGF0IGxzdGF0 NjQKIyAyNTAgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzIDQKc3RydWN0IHN0YXQgewogICAg ICAgIGRldl90IHN0X2RldjsKICAgICAgICBsb25nIHN0X3BhZDFbM107CiAgICAgICAgaW5vX3Qg c3RfaW5vOwogICAgICAgIG1vZGVfdCBzdF9tb2RlOwogICAgICAgIG5saW5rX3Qgc3Rfbmxpbms7 CiAgICAgICAgdWlkX3Qgc3RfdWlkOwogICAgICAgIGdpZF90IHN0X2dpZDsKICAgICAgICBkZXZf dCBzdF9yZGV2OwogICAgICAgIGxvbmcgc3RfcGFkMlsyXTsKICAgICAgICBvZmZfdCBzdF9zaXpl OwoKCgoKCiAgICAgICAgdGltZXN0cnVjX3Qgc3RfYXRpbTsKICAgICAgICB0aW1lc3RydWNfdCBz dF9tdGltOwogICAgICAgIHRpbWVzdHJ1Y190IHN0X2N0aW07CgoKCgoKICAgICAgICBibGtzaXpl X3Qgc3RfYmxrc2l6ZTsKICAgICAgICBibGtjbnRfdCBzdF9ibG9ja3M7CiAgICAgICAgY2hhciBz dF9mc3R5cGVbMTZdOwogICAgICAgIGxvbmcgc3RfcGFkNFs4XTsKfTsKIyAzMTMgIi91c3IvaW5j bHVkZS9zeXMvc3RhdC5oIiAzIDQKc3RydWN0IHN0YXQ2NCB7CiAgICAgICAgZGV2X3Qgc3RfZGV2 OwogICAgICAgIGxvbmcgc3RfcGFkMVszXTsKICAgICAgICBpbm82NF90IHN0X2lubzsKICAgICAg ICBtb2RlX3Qgc3RfbW9kZTsKICAgICAgICBubGlua190IHN0X25saW5rOwogICAgICAgIHVpZF90 IHN0X3VpZDsKICAgICAgICBnaWRfdCBzdF9naWQ7CiAgICAgICAgZGV2X3Qgc3RfcmRldjsKICAg ICAgICBsb25nIHN0X3BhZDJbMl07CiAgICAgICAgb2ZmNjRfdCBzdF9zaXplOwoKCiAgICAgICAg dGltZXN0cnVjX3Qgc3RfYXRpbTsKICAgICAgICB0aW1lc3RydWNfdCBzdF9tdGltOwogICAgICAg IHRpbWVzdHJ1Y190IHN0X2N0aW07CgoKCgoKICAgICAgICBibGtzaXplX3Qgc3RfYmxrc2l6ZTsK ICAgICAgICBibGtjbnQ2NF90IHN0X2Jsb2NrczsKICAgICAgICBjaGFyIHN0X2ZzdHlwZVsxNl07 CiAgICAgICAgbG9uZyBzdF9wYWQ0WzhdOwp9OwojIDQ4NiAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0 LmgiIDMgNApleHRlcm4gaW50IGZjaG1vZChpbnQsIG1vZGVfdCk7CgoKZXh0ZXJuIGludCBjaG1v ZChjb25zdCBjaGFyICosIG1vZGVfdCk7CmV4dGVybiBpbnQgbWtkaXIoY29uc3QgY2hhciAqLCBt b2RlX3QpOwpleHRlcm4gaW50IG1rZmlmbyhjb25zdCBjaGFyICosIG1vZGVfdCk7CmV4dGVybiBt b2RlX3QgdW1hc2sobW9kZV90KTsKCgoKCmV4dGVybiBpbnQgZnN0YXQ2NChpbnQsIHN0cnVjdCBz dGF0NjQgKik7CmV4dGVybiBpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQ2NCAq KTsKZXh0ZXJuIGludCBsc3RhdDY0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQ2NCAqKTsKCgpl eHRlcm4gaW50IGZzdGF0YXQ2NChpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQ2NCAqLCBp bnQpOwojIDUzMyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMgNAojIDEgIi91c3IvaW5jbHVk ZS9zeXMvc3RhdF9pbXBsLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0X2ltcGwu aCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdGF0X2ltcGwuaAkxLjIJMDEvMDcvMjkgU01JIgoj IDI2ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXRfaW1wbC5oIiAzIDQKZXh0ZXJuIGludCBmc3RhdChp bnQsIHN0cnVjdCBzdGF0ICopOwpleHRlcm4gaW50IHN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qg c3RhdCAqKTsKCgpleHRlcm4gaW50IGZzdGF0YXQoaW50LCBjb25zdCBjaGFyICosIHN0cnVjdCBz dGF0ICosIGludCk7CgoKCgpleHRlcm4gaW50IGxzdGF0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0 YXQgKik7CmV4dGVybiBpbnQgbWtub2QoY29uc3QgY2hhciAqLCBtb2RlX3QsIGRldl90KTsKIyA1 MzQgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMgNAojIDIyICIvdXNyL2luY2x1ZGUvZmNu dGwuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmNudGwuaCIgMSAzIDQKIyAxNiAi L3Vzci9pbmNsdWRlL3N5cy9mY250bC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWZjbnRsLmgJ MS40OAkwMS8xMi8xNyBTTUkiIAojIDE3MiAiL3Vzci9pbmNsdWRlL3N5cy9mY250bC5oIiAzIDQK dHlwZWRlZiBzdHJ1Y3QgZmxvY2sgewogICAgICAgIHNob3J0IGxfdHlwZTsKICAgICAgICBzaG9y dCBsX3doZW5jZTsKICAgICAgICBvZmZfdCBsX3N0YXJ0OwogICAgICAgIG9mZl90IGxfbGVuOwog ICAgICAgIGludCBsX3N5c2lkOwogICAgICAgIHBpZF90IGxfcGlkOwogICAgICAgIGxvbmcgbF9w YWRbNF07Cn0gZmxvY2tfdDsKIyAyMDIgIi91c3IvaW5jbHVkZS9zeXMvZmNudGwuaCIgMyA0CnR5 cGVkZWYgc3RydWN0IGZsb2NrNjQgewogICAgICAgIHNob3J0IGxfdHlwZTsKICAgICAgICBzaG9y dCBsX3doZW5jZTsKICAgICAgICBvZmY2NF90IGxfc3RhcnQ7CiAgICAgICAgb2ZmNjRfdCBsX2xl bjsKICAgICAgICBpbnQgbF9zeXNpZDsKICAgICAgICBwaWRfdCBsX3BpZDsKICAgICAgICBsb25n IGxfcGFkWzRdOwp9IGZsb2NrNjRfdDsKIyAyODAgIi91c3IvaW5jbHVkZS9zeXMvZmNudGwuaCIg MyA0CnR5cGVkZWYgc3RydWN0IGZzaGFyZSB7CiAgICAgICAgc2hvcnQgZl9hY2Nlc3M7CiAgICAg ICAgc2hvcnQgZl9kZW55OwogICAgICAgIGludCBmX2lkOwp9IGZzaGFyZV90OwojIDI1ICIvdXNy L2luY2x1ZGUvZmNudGwuaCIgMiAzIDQKIyA1MiAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMgNAoj cHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUgb3BlbiBvcGVuNjQKI3ByYWdtYSByZWRlZmluZV9leHRu YW1lIGNyZWF0IGNyZWF0NjQKCgojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUgb3BlbmF0IG9wZW5h dDY0CiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBhdHRyb3BlbiBhdHRyb3BlbjY0CiMgOTIgIi91 c3IvaW5jbHVkZS9mY250bC5oIiAzIDQKZXh0ZXJuIGludCBmY250bChpbnQsIGludCwgLi4uKTsK ZXh0ZXJuIGludCBvcGVuKGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pOwpleHRlcm4gaW50IGNyZWF0 KGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKCgpleHRlcm4gaW50IG9wZW5hdChpbnQsIGNvbnN0IGNo YXIgKiwgaW50LCAuLi4pOwpleHRlcm4gaW50IGF0dHJvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqLCBpbnQsIC4uLik7CgoKCmV4dGVybiBpbnQgZGlyZWN0aW8oaW50LCBpbnQpOwoKCgoK CmV4dGVybiBpbnQgb3BlbjY0KGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pOwpleHRlcm4gaW50IGNy ZWF0NjQoY29uc3QgY2hhciAqLCBtb2RlX3QpOwoKCmV4dGVybiBpbnQgb3BlbmF0NjQoaW50LCBj b25zdCBjaGFyICosIGludCwgLi4uKTsKZXh0ZXJuIGludCBhdHRyb3BlbjY0KGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqLCBpbnQsIC4uLik7CiMgMTIzICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3Jh cGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL3N0dWRpby5oIiAyCiMgMSAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9pbmNsdWRlL21hdGguaCIgMSAz IDQKIyAyMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIu Mi9pbmNsdWRlL21hdGguaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyltYXRoLmgJMi4xMQkwMC8w OS8wNyBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9pc28vbWF0aF9pc28uaCIgMSAzIDQKCgoKCgoK CiNwcmFnbWEgaWRlbnQgIkAoIyltYXRoX2lzby5oCTEuMgkwMC8wOS8wNyBTTUkiCiMgMjAgIi91 c3IvaW5jbHVkZS9pc28vbWF0aF9pc28uaCIgMyA0CnR5cGVkZWYgdW5pb24gX2hfdmFsIHsKICAg ICAgICB1bnNpZ25lZCBsb25nIF9pW3NpemVvZihkb3VibGUpIC8gc2l6ZW9mKHVuc2lnbmVkIGxv bmcpXTsKICAgICAgICBkb3VibGUgX2Q7Cn0gX2hfdmFsOwoKCmV4dGVybiBjb25zdCBfaF92YWwg X19odWdlX3ZhbDsKIyAzNyAiL3Vzci9pbmNsdWRlL2lzby9tYXRoX2lzby5oIiAzIDQKZXh0ZXJu IGRvdWJsZSBhY29zIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSk7CmV4dGVy biBkb3VibGUgYXRhbiAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlLCBkb3Vi bGUpOwpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJs ZSk7CmV4dGVybiBkb3VibGUgdGFuIChkb3VibGUpOwoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3Vi bGUpOwpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgdGFuaCAoZG91 YmxlKTsKCmV4dGVybiBkb3VibGUgZXhwIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGZyZXhwIChk b3VibGUsIGludCAqKTsKZXh0ZXJuIGRvdWJsZSBsZGV4cCAoZG91YmxlLCBpbnQpOwpleHRlcm4g ZG91YmxlIGxvZyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlKTsKZXh0ZXJu IGRvdWJsZSBtb2RmIChkb3VibGUsIGRvdWJsZSAqKTsKCmV4dGVybiBkb3VibGUgcG93IChkb3Vi bGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgc3FydCAoZG91YmxlKTsKCmV4dGVybiBkb3VibGUg Y2VpbCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUpOwpleHRlcm4gZG91Ymxl IGZsb29yIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSwgZG91YmxlKTsKIyAy NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9pbmNs dWRlL21hdGguaCIgMiAzIDQKIyA4OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOS8zLjIuMi9pbmNsdWRlL21hdGguaCIgMyA0CmV4dGVybiBpbnQgc2lnbmdhbTsK CgoKCgoKCmVudW0gdmVyc2lvbiB7bGlibV9pZWVlID0gLTEsIGNfaXNzdWVfNCwgYW5zaV8xLCBz dHJpY3RfYW5zaX07CgoKZXh0ZXJuIGNvbnN0IGVudW0gdmVyc2lvbiBfbGliX3ZlcnNpb247CgoK CgpzdHJ1Y3QgZXhjZXB0aW9uIHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICBjaGFyICpuYW1l OwogICAgICAgIGRvdWJsZSBhcmcxOwogICAgICAgIGRvdWJsZSBhcmcyOwogICAgICAgIGRvdWJs ZSByZXR2YWw7Cn07CiMgMTQ1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi45LzMuMi4yL2luY2x1ZGUvbWF0aC5oIiAzIDQKZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJs ZSk7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91 YmxlKTsKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlLCBkb3VibGUpOwpleHRlcm4gaW50IGlz bmFuIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGowIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGox IChkb3VibGUpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUg bGdhbW1hIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHkwIChkb3VibGUpOwpleHRlcm4gZG91Ymxl IHkxIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSk7CiMgMTcyICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvbWF0 aC5oIiAzIDQKZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhc2lu aCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBj YnJ0IChkb3VibGUpOwpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUg bmV4dGFmdGVyIChkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3Vi bGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSwgZG91YmxlKTsKIyAxOTIg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVk ZS9tYXRoLmgiIDMgNApleHRlcm4gZG91YmxlIGV4cG0xIChkb3VibGUpOwpleHRlcm4gaW50IGls b2diIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUpOwpleHRlcm4gZG91Ymxl IHJpbnQgKGRvdWJsZSk7CiMgMjA4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvbWF0aC5oIiAzIDQKZXh0ZXJuIGludCBtYXRoZXJyIChz dHJ1Y3QgZXhjZXB0aW9uICopOwoKCgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91Ymxl KTsKCgoKCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIGRv dWJsZSBzY2FsYm4gKGRvdWJsZSwgaW50KTsKIyAyMzEgIi91c3IvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9tYXRoLmgiIDMgNApleHRlcm4gZG91 YmxlIGdhbW1hX3IgKGRvdWJsZSwgaW50ICopOwpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3Vi bGUsIGludCAqKTsKIyAyNDIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjkvMy4yLjIvaW5jbHVkZS9tYXRoLmgiIDMgNApleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0 LCBmbG9hdCAqKTsKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9mbG9hdGluZ3BvaW50LmgiIDEgMyA0CiMgMjAgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9mbG9h dGluZ3BvaW50LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpZmxvYXRpbmdwb2ludC5oCTIuNQk5 OS8wNi8yMiBTTUkiCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zeXMvaWVlZWZwLmgiIDEgMyA0CiMgMTcgIi91c3IvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zeXMvaWVl ZWZwLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpaWVlZWZwLmgJMi44IDk5LzEwLzI5IgojIDI3 ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1 ZGUvc3lzL2llZWVmcC5oIiAzIDQKZW51bSBmcF9kaXJlY3Rpb25fdHlwZSB7CiAgICAgICAgZnBf bmVhcmVzdCA9IDAsCiAgICAgICAgZnBfdG96ZXJvID0gMSwKICAgICAgICBmcF9wb3NpdGl2ZSA9 IDIsCiAgICAgICAgZnBfbmVnYXRpdmUgPSAzCn07CgplbnVtIGZwX3ByZWNpc2lvbl90eXBlIHsK ICAgICAgICBmcF9leHRlbmRlZCA9IDAsCiAgICAgICAgZnBfc2luZ2xlID0gMSwKICAgICAgICBm cF9kb3VibGUgPSAyLAogICAgICAgIGZwX3ByZWNpc2lvbl8zID0gMwp9OwoKZW51bSBmcF9leGNl cHRpb25fdHlwZSB7CiAgICAgICAgZnBfaW5leGFjdCA9IDAsCiAgICAgICAgZnBfZGl2aXNpb24g PSAxLAogICAgICAgIGZwX3VuZGVyZmxvdyA9IDIsCiAgICAgICAgZnBfb3ZlcmZsb3cgPSAzLAog ICAgICAgIGZwX2ludmFsaWQgPSA0Cn07CgplbnVtIGZwX3RyYXBfZW5hYmxlX3R5cGUgewogICAg ICAgIGZwX3RyYXBfaW5leGFjdCA9IDAsCiAgICAgICAgZnBfdHJhcF9kaXZpc2lvbiA9IDEsCiAg ICAgICAgZnBfdHJhcF91bmRlcmZsb3cgPSAyLAogICAgICAgIGZwX3RyYXBfb3ZlcmZsb3cgPSAz LAogICAgICAgIGZwX3RyYXBfaW52YWxpZCA9IDQKfTsKIyAxMzMgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zeXMvaWVlZWZwLmgiIDMg NAplbnVtIGZwX2NsYXNzX3R5cGUgewogICAgICAgIGZwX3plcm8gPSAwLAogICAgICAgIGZwX3N1 Ym5vcm1hbCA9IDEsCiAgICAgICAgZnBfbm9ybWFsID0gMiwKICAgICAgICBmcF9pbmZpbml0eSA9 IDMsCiAgICAgICAgZnBfcXVpZXQgPSA0LAogICAgICAgIGZwX3NpZ25hbGluZyA9IDUKfTsKIyAy NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9pbmNs dWRlL2Zsb2F0aW5ncG9pbnQuaCIgMiAzIDQKIyA2MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9pbmNsdWRlL2Zsb2F0aW5ncG9pbnQuaCIgMyA0CnR5 cGVkZWYgaW50IHNpZ2ZwZV9jb2RlX3R5cGU7Cgp0eXBlZGVmIHZvaWQgKCpzaWdmcGVfaGFuZGxl cl90eXBlKSgpOwoKCgoKCmV4dGVybiBzaWdmcGVfaGFuZGxlcl90eXBlIHNpZ2ZwZSAoc2lnZnBl X2NvZGVfdHlwZSwgc2lnZnBlX2hhbmRsZXJfdHlwZSk7CgoKCgp0eXBlZGVmIGZsb2F0IHNpbmds ZTsKCgoKdHlwZWRlZiB1bnNpZ25lZCBleHRlbmRlZFszXTsKCgp0eXBlZGVmIGxvbmcgZG91Ymxl IHF1YWRydXBsZTsKCnR5cGVkZWYgdW5zaWduZWQgZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGU7CiMg OTQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5j bHVkZS9mbG9hdGluZ3BvaW50LmgiIDMgNAp0eXBlZGVmIGNoYXIgZGVjaW1hbF9zdHJpbmdbNTEy XTsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgZW51bSBmcF9jbGFzc190eXBlIGZwY2xhc3M7 CiAgICAgICAgaW50IHNpZ247CiAgICAgICAgaW50IGV4cG9uZW50OwogICAgICAgIGRlY2ltYWxf c3RyaW5nIGRzOwoKCiAgICAgICAgaW50IG1vcmU7CgoKICAgICAgICBpbnQgbmRpZ2l0czsKCgp9 IGRlY2ltYWxfcmVjb3JkOwoKZW51bSBkZWNpbWFsX2Zvcm0gewogICAgICAgIGZpeGVkX2Zvcm0s CgoKICAgICAgICBmbG9hdGluZ19mb3JtCgp9OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGVu dW0gZnBfZGlyZWN0aW9uX3R5cGUgcmQ7CgogICAgICAgIGVudW0gZGVjaW1hbF9mb3JtIGRmOwoK ICAgICAgICBpbnQgbmRpZ2l0czsKfSBkZWNpbWFsX21vZGU7CgplbnVtIGRlY2ltYWxfc3RyaW5n X2Zvcm0gewogICAgICAgIGludmFsaWRfZm9ybSwKICAgICAgICB3aGl0ZXNwYWNlX2Zvcm0sCiAg ICAgICAgZml4ZWRfaW50X2Zvcm0sCiAgICAgICAgZml4ZWRfaW50ZG90X2Zvcm0sCiAgICAgICAg Zml4ZWRfZG90ZnJhY19mb3JtLAogICAgICAgIGZpeGVkX2ludGRvdGZyYWNfZm9ybSwKICAgICAg ICBmbG9hdGluZ19pbnRfZm9ybSwKICAgICAgICBmbG9hdGluZ19pbnRkb3RfZm9ybSwKICAgICAg ICBmbG9hdGluZ19kb3RmcmFjX2Zvcm0sCiAgICAgICAgZmxvYXRpbmdfaW50ZG90ZnJhY19mb3Jt LAogICAgICAgIGluZl9mb3JtLAogICAgICAgIGluZmluaXR5X2Zvcm0sCiAgICAgICAgbmFuX2Zv cm0sCiAgICAgICAgbmFuc3RyaW5nX2Zvcm0KfTsKCmV4dGVybiB2b2lkIHNpbmdsZV90b19kZWNp bWFsIChzaW5nbGUgKiwgZGVjaW1hbF9tb2RlICosIGRlY2ltYWxfcmVjb3JkICosIGZwX2V4Y2Vw dGlvbl9maWVsZF90eXBlICopOwoKZXh0ZXJuIHZvaWQgZG91YmxlX3RvX2RlY2ltYWwgKGRvdWJs ZSAqLCBkZWNpbWFsX21vZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwgZnBfZXhjZXB0aW9uX2ZpZWxk X3R5cGUgKik7CgpleHRlcm4gdm9pZCBleHRlbmRlZF90b19kZWNpbWFsIChleHRlbmRlZCAqLCBk ZWNpbWFsX21vZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwgZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUg Kik7CgpleHRlcm4gdm9pZCBxdWFkcnVwbGVfdG9fZGVjaW1hbCAocXVhZHJ1cGxlICosIGRlY2lt YWxfbW9kZSAqLCBkZWNpbWFsX3JlY29yZCAqLCBmcF9leGNlcHRpb25fZmllbGRfdHlwZSAqKTsK CgpleHRlcm4gdm9pZCBkZWNpbWFsX3RvX3NpbmdsZSAoc2luZ2xlICosIGRlY2ltYWxfbW9kZSAq LCBkZWNpbWFsX3JlY29yZCAqLCBmcF9leGNlcHRpb25fZmllbGRfdHlwZSAqKTsKCmV4dGVybiB2 b2lkIGRlY2ltYWxfdG9fZG91YmxlIChkb3VibGUgKiwgZGVjaW1hbF9tb2RlICosIGRlY2ltYWxf cmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopOwoKZXh0ZXJuIHZvaWQgZGVjaW1h bF90b19leHRlbmRlZCAoZXh0ZW5kZWQgKiwgZGVjaW1hbF9tb2RlICosIGRlY2ltYWxfcmVjb3Jk ICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopOwoKZXh0ZXJuIHZvaWQgZGVjaW1hbF90b19x dWFkcnVwbGUgKHF1YWRydXBsZSAqLCBkZWNpbWFsX21vZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwg ZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKik7CgoKZXh0ZXJuIHZvaWQgc3RyaW5nX3RvX2RlY2lt YWwgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29yZCAqLCBlbnVtIGRlY2ltYWxfc3Ry aW5nX2Zvcm0gKiwgY2hhciAqKik7CgpleHRlcm4gdm9pZCBmdW5jX3RvX2RlY2ltYWwgKGNoYXIg KiosIGludCwgaW50LCBkZWNpbWFsX3JlY29yZCAqLCBlbnVtIGRlY2ltYWxfc3RyaW5nX2Zvcm0g KiwgY2hhciAqKiwgaW50ICgqKSh2b2lkKSwgaW50ICosIGludCAoKikoaW50KSk7CgoKZXh0ZXJu IHZvaWQgZmlsZV90b19kZWNpbWFsIChjaGFyICoqLCBpbnQsIGludCwgZGVjaW1hbF9yZWNvcmQg KiwgZW51bSBkZWNpbWFsX3N0cmluZ19mb3JtICosIGNoYXIgKiosIEZJTEUgKiwgaW50ICopOwoK CgpleHRlcm4gY2hhciAqc2Vjb252ZXJ0IChzaW5nbGUgKiwgaW50LCBpbnQgKiwgaW50ICosIGNo YXIgKik7CmV4dGVybiBjaGFyICpzZmNvbnZlcnQgKHNpbmdsZSAqLCBpbnQsIGludCAqLCBpbnQg KiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNnY29udmVydCAoc2luZ2xlICosIGludCwgaW50LCBj aGFyICopOwpleHRlcm4gY2hhciAqZWNvbnZlcnQgKGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICos IGNoYXIgKik7CmV4dGVybiBjaGFyICpmY29udmVydCAoZG91YmxlLCBpbnQsIGludCAqLCBpbnQg KiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmdjb252ZXJ0IChkb3VibGUsIGludCwgaW50LCBjaGFy ICopOwpleHRlcm4gY2hhciAqcWVjb252ZXJ0IChxdWFkcnVwbGUgKiwgaW50LCBpbnQgKiwgaW50 ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpxZmNvbnZlcnQgKHF1YWRydXBsZSAqLCBpbnQsIGlu dCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnFnY29udmVydCAocXVhZHJ1cGxlICos IGludCwgaW50LCBjaGFyICopOwoKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSwgaW50LCBpbnQg KiwgaW50ICopOwpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7 CmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUsIGludCwgY2hhciAqKTsKCgoKCgpleHRlcm4gZG91 YmxlIGF0b2YgKGNvbnN0IGNoYXIgKik7CmV4dGVybiBkb3VibGUgc3RydG9kIChjb25zdCBjaGFy ICosIGNoYXIgKiopOwojIDI0OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOS8zLjIuMi9pbmNsdWRlL21hdGguaCIgMiAzIDQKIyAxMjQgIi9ob21lL2Jmcmllc2Vu L3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svc3R1ZGlvLmgiIDIKCiMgMSAiL3Vz ci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIuMi9pbmNsdWRlL2xp bWl0cy5oIiAxIDMgNAojIDExICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi45LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAz IDQKIyAyNSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjIu Mi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWxpbWl0cy5oCTEu NTIJMDIvMDEvMDggU01JIiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvaXNvL2xpbWl0c19pc28uaCIg MSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL2lzby9saW1pdHNfaXNvLmgiIDMgNAojcHJhZ21hIGlk ZW50ICJAKCMpbGltaXRzX2lzby5oCTEuMQk5OS8wOC8wOSBTTUkiIAojIDMwICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMi4yL2luY2x1ZGUvc3lzbGltaXRz LmgiIDIgMyA0CiMgNDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjkvMy4yLjIvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9p bnRfbGltaXRzLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfbGltaXRzLmgiIDMg NAojcHJhZ21hIGlkZW50ICJAKCMpaW50X2xpbWl0cy5oCTEuNgk5OS8wOC8wNiBTTUkiCiMgNDIg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVk ZS9zeXNsaW1pdHMuaCIgMiAzIDQKIyAyNzggIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0CmV4dGVybiBsb25n IF9zeXNjb25mKGludCk7CiMgMTIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjkvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyAxMjYgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svc3R1ZGlvLmgiIDIKIyAxICIv dXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMyA0CiMgMTcgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIg MyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzaWduYWwuaAkxLjM5CTAxLzExLzA3IFNNSSIgCiMgMjYg Ii91c3IvaW5jbHVkZS9zaWduYWwuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2lzby9zaWduYWxf aXNvLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9pc28vc2lnbmFsX2lzby5oIiAzIDQKI3By YWdtYSBpZGVudCAiQCgjKXNpZ25hbF9pc28uaAkxLjEJOTkvMDgvMDkgU01JIgoKCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy9pc28vc2lnbmFsX2lzby5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUv c3lzL2lzby9zaWduYWxfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc2lnbmFsX2lzby5o CTEuMgkwMS8wNC8wNSBTTUkiIAojIDgxICIvdXNyL2luY2x1ZGUvc3lzL2lzby9zaWduYWxfaXNv LmgiIDMgNApleHRlcm4gbG9uZyBfc3lzY29uZihpbnQpOwojIDMyICIvdXNyL2luY2x1ZGUvaXNv L3NpZ25hbF9pc28uaCIgMiAzIDQKIyA0MSAiL3Vzci9pbmNsdWRlL2lzby9zaWduYWxfaXNvLmgi IDMgNAp0eXBlZGVmIGludCBzaWdfYXRvbWljX3Q7CgoKCgoKCmV4dGVybiB2b2lkICgqc2lnbmFs KGludCwgdm9pZCAoKikoaW50KSkpKGludCk7CgpleHRlcm4gaW50IHJhaXNlKGludCk7CiMgMjcg Ii91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25h bC5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKI3ByYWdtYSBp ZGVudCAiQCgjKXNpZ25hbC5oCTEuNTYJMDEvMDUvMjggU01JIiAKIyA0MiAiL3Vzci9pbmNsdWRl L3N5cy9zaWduYWwuaCIgMyA0CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBpbnQg X19zaWdiaXRzWzRdOwp9IHNpZ3NldF90OwojIDU4ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5o IiAzIDQKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGludCBfX3NpZ2JpdHNbMl07 Cn0ga19zaWdzZXRfdDsKIyA3NiAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CnN0cnVj dCBzaWdhY3Rpb24gewogICAgICAgIGludCBzYV9mbGFnczsKICAgICAgICB1bmlvbiB7CgoKCiAg ICAgICAgICAgICAgICB2b2lkICgqX2hhbmRsZXIpKCk7CgoKCgogICAgICAgICAgICAgICAgdm9p ZCAoKl9zaWdhY3Rpb24pKGludCwgc2lnaW5mb190ICosIHZvaWQgKik7CgogICAgICAgIH0gX2Z1 bmNwdHI7CiAgICAgICAgc2lnc2V0X3Qgc2FfbWFzazsKCiAgICAgICAgaW50IHNhX3Jlc3ZbMl07 Cgp9OwojIDE3MCAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CnR5cGVkZWYgc3RydWN0 IHNpZ2FsdHN0YWNrIHsKCgoKICAgICAgICB2b2lkICpzc19zcDsKICAgICAgICBzaXplX3Qgc3Nf c2l6ZTsKICAgICAgICBpbnQgc3NfZmxhZ3M7Cn0gc3RhY2tfdDsKIyAxOTkgIi91c3IvaW5jbHVk ZS9zeXMvc2lnbmFsLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBzaWdub3RpZnlfaWQgewogICAgICAg IHBpZF90IHNuX3BpZDsKICAgICAgICBpbnQgc25faW5kZXg7CiAgICAgICAgaW50IHNuX3BhZDsK fSBzaWdub3RpZnlfaWRfdDsKIyAyMjkgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNApz dHJ1Y3Qgc2lnc3RhY2sgewogICAgICAgIHZvaWQgKnNzX3NwOwogICAgICAgIGludCBzc19vbnN0 YWNrOwp9OwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDEgMyA0CiMg MTYgIi91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl1 Y29udGV4dC5oCTEuMjYJOTkvMDUvMDQgU01JIiAKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9y ZWdzZXQuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9yZWdzZXQuaCIgMyA0CiNwcmFn bWEgaWRlbnQgIkAoIylyZWdzZXQuaAkxLjI1CTAwLzA5LzE0IFNNSSIgCiMgODAgIi91c3IvaW5j bHVkZS9zeXMvcmVnc2V0LmgiIDMgNAp0eXBlZGVmIGludCBncmVnX3Q7CiMgMTA3ICIvdXNyL2lu Y2x1ZGUvc3lzL3JlZ3NldC5oIiAzIDQKdHlwZWRlZiBncmVnX3QgZ3JlZ3NldF90WzE5XTsKIyAx MjkgIi91c3IvaW5jbHVkZS9zeXMvcmVnc2V0LmgiIDMgNApzdHJ1Y3QgcndpbmRvdyB7CiAgICAg ICAgZ3JlZ190IHJ3X2xvY2FsWzhdOwogICAgICAgIGdyZWdfdCByd19pbls4XTsKfTsKIyAxNTYg Ii91c3IvaW5jbHVkZS9zeXMvcmVnc2V0LmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBnd2luZG93cyB7 CiAgICAgICAgaW50IHdiY250OwogICAgICAgIGdyZWdfdCAqc3BidWZbMzFdOwogICAgICAgIHN0 cnVjdCByd2luZG93IHdidWZbMzFdOwp9IGd3aW5kb3dzX3Q7CiMgMTkzICIvdXNyL2luY2x1ZGUv c3lzL3JlZ3NldC5oIiAzIDQKc3RydWN0IGZwcSB7CiAgICAgICAgdW5zaWduZWQgaW50ICpmcHFf YWRkcjsKICAgICAgICB1bnNpZ25lZCBpbnQgZnBxX2luc3RyOwp9OwoKc3RydWN0IGZxIHsKICAg ICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBkb3VibGUgd2hvbGU7CiAgICAgICAgICAgICAg ICBzdHJ1Y3QgZnBxIGZwcTsKICAgICAgICB9IEZRdTsKfTsKIyAyNjMgIi91c3IvaW5jbHVkZS9z eXMvcmVnc2V0LmgiIDMgNApzdHJ1Y3QgZnB1IHsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAg ICAgICB1aW50MzJfdCBmcHVfcmVnc1szMl07CiAgICAgICAgICAgICAgICBkb3VibGUgZnB1X2Ry ZWdzWzE2XTsKICAgICAgICB9IGZwdV9mcjsKICAgICAgICBzdHJ1Y3QgZnEgKmZwdV9xOwogICAg ICAgIHVpbnQzMl90IGZwdV9mc3I7CiAgICAgICAgdWludDhfdCBmcHVfcWNudDsKICAgICAgICB1 aW50OF90IGZwdV9xX2VudHJ5c2l6ZTsKICAgICAgICB1aW50OF90IGZwdV9lbjsKfTsKCgoKdHlw ZWRlZiBzdHJ1Y3QgZnB1IGZwcmVnc2V0X3Q7CiMgMzUwICIvdXNyL2luY2x1ZGUvc3lzL3JlZ3Nl dC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGludCB4cnNfaWQ7CiAg ICAgICAgY2FkZHJfdCB4cnNfcHRyOwp9IHhyc190OwojIDM5NCAiL3Vzci9pbmNsdWRlL3N5cy9y ZWdzZXQuaCIgMyA0CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBncmVnc2V0X3QgZ3JlZ3M7CiAg ICAgICAgZ3dpbmRvd3NfdCAqZ3dpbnM7CiAgICAgICAgZnByZWdzZXRfdCBmcHJlZ3M7CiAgICAg ICAgeHJzX3QgeHJzOwoKCgoKICAgICAgICBsb25nIGZpbGxlclsxOV07Cgp9IG1jb250ZXh0X3Q7 CiMgNDQzICIvdXNyL2luY2x1ZGUvc3lzL3JlZ3NldC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv djcvc3lzL3ByaXZyZWdzLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3Y3L3N5cy9wcml2cmVn cy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXByaXZyZWdzLmgJMS41CTk5LzA2LzA1IFNNSSIg CiMgMjQgIi91c3IvaW5jbHVkZS92Ny9zeXMvcHJpdnJlZ3MuaCIgMyA0CiMgMSAiL3Vzci9pbmNs dWRlL3Y3L3N5cy9wc3IuaCIgMSAzIDQKCgoKCgoKCiNwcmFnbWEgaWRlbnQgIkAoIylwc3IuaAkx LjMJOTYvMDkvMTIgU01JIiAKIyA0NSAiL3Vzci9pbmNsdWRlL3Y3L3N5cy9wc3IuaCIgMyA0CnR5 cGVkZWYgaW50IHBzd190OwojIDI1ICIvdXNyL2luY2x1ZGUvdjcvc3lzL3ByaXZyZWdzLmgiIDIg MyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mc3IuaCIgMSAzIDQKCgoKCgoKCiNwcmFnbWEgaWRl bnQgIkAoIylmc3IuaAkxLjMJOTcvMDIvMTEgU01JIiAKIyAyNiAiL3Vzci9pbmNsdWRlL3Y3L3N5 cy9wcml2cmVncy5oIiAyIDMgNAoKCgpzdHJ1Y3QgcmVncyB7CiAgICAgICAgbG9uZyByX3BzcjsK ICAgICAgICBsb25nIHJfcGM7CiAgICAgICAgbG9uZyByX25wYzsKICAgICAgICBsb25nIHJfeTsK ICAgICAgICBsb25nIHJfZzE7CiAgICAgICAgbG9uZyByX2cyOwogICAgICAgIGxvbmcgcl9nMzsK ICAgICAgICBsb25nIHJfZzQ7CiAgICAgICAgbG9uZyByX2c1OwogICAgICAgIGxvbmcgcl9nNjsK ICAgICAgICBsb25nIHJfZzc7CiAgICAgICAgbG9uZyByX28wOwogICAgICAgIGxvbmcgcl9vMTsK ICAgICAgICBsb25nIHJfbzI7CiAgICAgICAgbG9uZyByX28zOwogICAgICAgIGxvbmcgcl9vNDsK ICAgICAgICBsb25nIHJfbzU7CiAgICAgICAgbG9uZyByX282OwogICAgICAgIGxvbmcgcl9vNzsK fTsKIyA0NDQgIi91c3IvaW5jbHVkZS9zeXMvcmVnc2V0LmgiIDIgMyA0CiMgMjIgIi91c3IvaW5j bHVkZS9zeXMvdWNvbnRleHQuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwu aCIgMSAzIDQKIyAyNCAiL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oIiAyIDMgNAojIDU2ICIv dXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDMgNAp0eXBlZGVmIHN0cnVjdCB1Y29udGV4dCB1 Y29udGV4dF90OwoKCgoKCnN0cnVjdCB1Y29udGV4dCB7CgoKCiAgICAgICAgdWludF90IHVjX2Zs YWdzOwogICAgICAgIHVjb250ZXh0X3QgKnVjX2xpbms7CiAgICAgICAgc2lnc2V0X3QgdWNfc2ln bWFzazsKICAgICAgICBzdGFja190IHVjX3N0YWNrOwogICAgICAgIG1jb250ZXh0X3QgdWNfbWNv bnRleHQ7CgoKCiAgICAgICAgbG9uZyB1Y19maWxsZXJbMjNdOwoKfTsKIyAyNDEgIi91c3IvaW5j bHVkZS9zeXMvc2lnbmFsLmgiIDIgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAz IDQKIyA0NiAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzIDQKZXh0ZXJuIGNvbnN0IGNoYXIgKipf c3lzX3NpZ2xpc3RwOwpleHRlcm4gY29uc3QgaW50IF9zeXNfc2lnbGlzdG47CiMgNTcgIi91c3Iv aW5jbHVkZS9zaWduYWwuaCIgMyA0CmV4dGVybiBpbnQga2lsbChwaWRfdCwgaW50KTsKZXh0ZXJu IGludCBzaWdhY3Rpb24oaW50LCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICosIHN0cnVjdCBzaWdh Y3Rpb24gKik7CgpleHRlcm4gaW50IHNpZ2FkZHNldChzaWdzZXRfdCAqLCBpbnQpOwpleHRlcm4g aW50IHNpZ2RlbHNldChzaWdzZXRfdCAqLCBpbnQpOwpleHRlcm4gaW50IHNpZ2VtcHR5c2V0KHNp Z3NldF90ICopOwpleHRlcm4gaW50IHNpZ2ZpbGxzZXQoc2lnc2V0X3QgKik7CmV4dGVybiBpbnQg c2lnaXNtZW1iZXIoY29uc3Qgc2lnc2V0X3QgKiwgaW50KTsKCmV4dGVybiBpbnQgc2lncGVuZGlu ZyhzaWdzZXRfdCAqKTsKZXh0ZXJuIGludCBzaWdwcm9jbWFzayhpbnQsIGNvbnN0IHNpZ3NldF90 ICosIHNpZ3NldF90ICopOwpleHRlcm4gaW50IHNpZ3N1c3BlbmQoY29uc3Qgc2lnc2V0X3QgKik7 CgoKCgoKZXh0ZXJuIGludCBnc2lnbmFsKGludCk7CmV4dGVybiBpbnQgKCpzc2lnbmFsKGludCwg aW50ICgqKShpbnQpKSkoaW50KTsKZXh0ZXJuIGludCBzaWdzZW5kKGlkdHlwZV90LCBpZF90LCBp bnQpOwpleHRlcm4gaW50IHNpZ3NlbmRzZXQoY29uc3QgcHJvY3NldF90ICosIGludCk7CmV4dGVy biBpbnQgc2lnMnN0cihpbnQsIGNoYXIgKik7CmV4dGVybiBpbnQgc3RyMnNpZyhjb25zdCBjaGFy ICosIGludCAqKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKCpic2Rfc2lnbmFsKGludCwgdm9pZCAoKiko aW50KSkpKGludCk7CmV4dGVybiBpbnQga2lsbHBnKHBpZF90LCBpbnQpOwpleHRlcm4gaW50IHNp Z2ludGVycnVwdChpbnQsIGludCk7CmV4dGVybiBpbnQgc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tf dCAqLCBzdGFja190ICopOwpleHRlcm4gaW50IHNpZ2hvbGQoaW50KTsKZXh0ZXJuIGludCBzaWdp Z25vcmUoaW50KTsKZXh0ZXJuIGludCBzaWdwYXVzZShpbnQpOwpleHRlcm4gaW50IHNpZ3JlbHNl KGludCk7CmV4dGVybiB2b2lkICgqc2lnc2V0KGludCwgdm9pZCAoKikoaW50KSkpKGludCk7CmV4 dGVybiBpbnQgc2lnc3RhY2soc3RydWN0IHNpZ3N0YWNrICosIHN0cnVjdCBzaWdzdGFjayAqKTsK CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsKHB0aHJlYWRfdCwgaW50KTsKZXh0ZXJuIGlu dCBwdGhyZWFkX3NpZ21hc2soaW50LCBjb25zdCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqKTsKZXh0 ZXJuIGludCBzaWd3YWl0aW5mbyhjb25zdCBzaWdzZXRfdCAqLCBzaWdpbmZvX3QgKik7CmV4dGVy biBpbnQgc2lndGltZWR3YWl0KGNvbnN0IHNpZ3NldF90ICosIHNpZ2luZm9fdCAqLCBjb25zdCBz dHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgc2lncXVldWUocGlkX3QsIGludCwgY29uc3Qg dW5pb24gc2lndmFsKTsKIyAxOTUgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMyA0CmV4dGVybiBp bnQgc2lnd2FpdChjb25zdCBzaWdzZXRfdCAqLCBpbnQgKik7CiNwcmFnbWEgcmVkZWZpbmVfZXh0 bmFtZSBzaWd3YWl0IF9fcG9zaXhfc2lnd2FpdAojIDEyNyAiL2hvbWUvYmZyaWVzZW4vc3JjL2dy YXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9zdHVkaW8uaCIgMgojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9hc3NlcnQuaCIgMSAzCiMgMjkgIi91c3IvbG9jYWwvaW5jbHVkZS9hc3NlcnQuaCIg MwpleHRlcm4gdm9pZCBfX2VwcmludGYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNp Z25lZCwgY29uc3QgY2hhciAqKTsKIyAxMjggIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svc3R1ZGlvLmgiIDIKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9z eXMvdGltZWIuaCIgMSAzIDQKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lYi5oIiAzIDQKI3By YWdtYSBpZGVudCAiQCgjKXRpbWViLmgJMS4xMgk5Ni8wNC8yNiBTTUkiIAojIDMzICIvdXNyL2lu Y2x1ZGUvc3lzL3RpbWViLmgiIDMgNApzdHJ1Y3QgdGltZWIgewogICAgICAgIHRpbWVfdCB0aW1l OwogICAgICAgIHVuc2lnbmVkIHNob3J0IG1pbGxpdG07CiAgICAgICAgc2hvcnQgdGltZXpvbmU7 CiAgICAgICAgc2hvcnQgZHN0ZmxhZzsKfTsKCgpleHRlcm4gaW50IGZ0aW1lKHN0cnVjdCB0aW1l YiAqKTsKIyAxMzQgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svc3R1ZGlvLmgiIDIKIyAxNDkgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFw aGljc01hZ2ljay9tYWdpY2svc3R1ZGlvLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAx IDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMp ZGlyZW50LmgJMS4zMQkwMS8wNy8yOSBTTUkiIAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Rp cmVudC5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL2RpcmVudC5oIiAzIDQKI3ByYWdt YSBpZGVudCAiQCgjKWRpcmVudC5oCTEuMzIJOTkvMDUvMDQgU01JIiAKIyAyOCAiL3Vzci9pbmNs dWRlL3N5cy9kaXJlbnQuaCIgMyA0CnR5cGVkZWYgc3RydWN0IGRpcmVudCB7CiAgICAgICAgaW5v X3QgZF9pbm87CiAgICAgICAgb2ZmX3QgZF9vZmY7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZF9y ZWNsZW47CiAgICAgICAgY2hhciBkX25hbWVbMV07Cn0gZGlyZW50X3Q7CiMgNTcgIi91c3IvaW5j bHVkZS9zeXMvZGlyZW50LmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBkaXJlbnQ2NCB7CiAgICAgICAg aW5vNjRfdCBkX2lubzsKICAgICAgICBvZmY2NF90IGRfb2ZmOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IGRfcmVjbGVuOwogICAgICAgIGNoYXIgZF9uYW1lWzFdOwp9IGRpcmVudDY0X3Q7CiMgOTAg Ii91c3IvaW5jbHVkZS9zeXMvZGlyZW50LmgiIDMgNAojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUg Z2V0ZGVudHMgZ2V0ZGVudHM2NAojIDEwNiAiL3Vzci9pbmNsdWRlL3N5cy9kaXJlbnQuaCIgMyA0 CmV4dGVybiBpbnQgZ2V0ZGVudHMoaW50LCBzdHJ1Y3QgZGlyZW50ICosIHNpemVfdCk7CiMgMjIg Ii91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzIDQKIyA0NyAiL3Vzci9pbmNsdWRlL2RpcmVudC5o IiAzIDQKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCBkX2ZkOwogICAgICAgIGludCBkX2xv YzsKICAgICAgICBpbnQgZF9zaXplOwogICAgICAgIGNoYXIgKmRfYnVmOwp9IERJUjsKIyA2MSAi L3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzIDQKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIHJlYWRk aXIgcmVhZGRpcjY0CiMgNzYgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMyA0CmV4dGVybiBESVIg Km9wZW5kaXIoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gRElSICpmZG9wZW5kaXIoaW50KTsKCmV4 dGVybiBzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyKERJUiAqKTsKCgpleHRlcm4gbG9uZyB0ZWxsZGly KERJUiAqKTsKZXh0ZXJuIHZvaWQgc2Vla2RpcihESVIgKiwgbG9uZyk7CgpleHRlcm4gdm9pZCBy ZXdpbmRkaXIoRElSICopOwpleHRlcm4gaW50IGNsb3NlZGlyKERJUiAqKTsKCgoKCmV4dGVybiBz dHJ1Y3QgZGlyZW50NjQgKnJlYWRkaXI2NChESVIgKik7CiMgMTc4ICIvdXNyL2luY2x1ZGUvZGly ZW50LmgiIDMgNAojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUgcmVhZGRpcl9yIHJlYWRkaXI2NF9y CgoKCgpleHRlcm4gaW50IHJlYWRkaXJfcihESVIgKiwgc3RydWN0IGRpcmVudCAqLCBzdHJ1Y3Qg ZGlyZW50ICoqKTsKCgoKCgoKZXh0ZXJuIGludCByZWFkZGlyNjRfcihESVIgKiwgc3RydWN0IGRp cmVudDY0ICosIHN0cnVjdCBkaXJlbnQ2NCAqKik7CiMgMTUwICIvaG9tZS9iZnJpZXNlbi9zcmMv Z3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL3N0dWRpby5oIiAyCgoKIyAxICIvdXNyL2lu Y2x1ZGUvcHdkLmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9wd2QuaCIgMyA0CiNwcmFnbWEg aWRlbnQgIkAoIylwd2QuaAkxLjE5CTk2LzAzLzEyIFNNSSIgCiMgMzEgIi91c3IvaW5jbHVkZS9w d2QuaCIgMyA0CnN0cnVjdCBwYXNzd2QgewogICAgICAgIGNoYXIgKnB3X25hbWU7CiAgICAgICAg Y2hhciAqcHdfcGFzc3dkOwogICAgICAgIHVpZF90IHB3X3VpZDsKICAgICAgICBnaWRfdCBwd19n aWQ7CiAgICAgICAgY2hhciAqcHdfYWdlOwogICAgICAgIGNoYXIgKnB3X2NvbW1lbnQ7CiAgICAg ICAgY2hhciAqcHdfZ2Vjb3M7CiAgICAgICAgY2hhciAqcHdfZGlyOwogICAgICAgIGNoYXIgKnB3 X3NoZWxsOwp9OwoKCgpzdHJ1Y3QgY29tbWVudCB7CiAgICAgICAgY2hhciAqY19kZXB0OwogICAg ICAgIGNoYXIgKmNfbmFtZTsKICAgICAgICBjaGFyICpjX2FjY3Q7CiAgICAgICAgY2hhciAqY19i aW47Cn07CgoKCgpleHRlcm4gc3RydWN0IHBhc3N3ZCAqZ2V0cHd1aWQodWlkX3QpOwpleHRlcm4g c3RydWN0IHBhc3N3ZCAqZ2V0cHduYW0oY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIHN0cnVjdCBw YXNzd2QgKmdldHB3ZW50X3Ioc3RydWN0IHBhc3N3ZCAqLCBjaGFyICosIGludCk7CmV4dGVybiBz dHJ1Y3QgcGFzc3dkICpmZ2V0cHdlbnRfcihGSUxFICosIHN0cnVjdCBwYXNzd2QgKiwgY2hhciAq LCBpbnQpOwpleHRlcm4gc3RydWN0IHBhc3N3ZCAqZmdldHB3ZW50KEZJTEUgKik7CmV4dGVybiBp bnQgcHV0cHdlbnQoY29uc3Qgc3RydWN0IHBhc3N3ZCAqLCBGSUxFICopOwoKCgoKCmV4dGVybiB2 b2lkIGVuZHB3ZW50KHZvaWQpOwpleHRlcm4gc3RydWN0IHBhc3N3ZCAqZ2V0cHdlbnQodm9pZCk7 CmV4dGVybiB2b2lkIHNldHB3ZW50KHZvaWQpOwojIDE0MSAiL3Vzci9pbmNsdWRlL3B3ZC5oIiAz IDQKZXh0ZXJuIGludCBnZXRwd3VpZF9yKHVpZF90LCBzdHJ1Y3QgcGFzc3dkICosIGNoYXIgKiwg aW50LCBzdHJ1Y3QgcGFzc3dkICoqKTsKZXh0ZXJuIGludCBnZXRwd25hbV9yKGNvbnN0IGNoYXIg Kiwgc3RydWN0IHBhc3N3ZCAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBzdHJ1Y3QgcGFzc3dkICoqKTsKI3ByYWdt YSByZWRlZmluZV9leHRuYW1lIGdldHB3dWlkX3IgX19wb3NpeF9nZXRwd3VpZF9yCiNwcmFnbWEg cmVkZWZpbmVfZXh0bmFtZSBnZXRwd25hbV9yIF9fcG9zaXhfZ2V0cHduYW1fcgojIDE1MyAiL2hv bWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9zdHVkaW8uaCIg MgoKCgoKCgoKIyAxICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2ludGVncmFsX3R5cGVzLmgiIDEKIyA1MSAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBo aWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9pbnRlZ3JhbF90eXBlcy5oIgogIHR5cGVkZWYgc2hv cnQgZ21faW50MTZfdDsKCgoKCgogIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgZ21fdWludDE2X3Q7 CgoKCgoKICB0eXBlZGVmIGludCBnbV9pbnQzMl90OwoKCgoKCiAgdHlwZWRlZiB1bnNpZ25lZCBp bnQgZ21fdWludDMyX3Q7CgoKCgoKCgogIHR5cGVkZWYgbG9uZyBsb25nIGdtX2ludDY0X3Q7CiMg ODcgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svaW50 ZWdyYWxfdHlwZXMuaCIKICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBnbV91aW50NjRfdDsK IyAxNjEgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2sv c3R1ZGlvLmgiIDIKIyAxICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdp Y2svbWFnaWNrL2ltYWdlLmgiIDEKIyAxNCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dy YXBoaWNzTWFnaWNrL21hZ2ljay9pbWFnZS5oIgojIDEgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFw aGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svc2VtYXBob3JlLmgiIDEKIyAxMSAiL2hvbWUvYmZy aWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9zZW1hcGhvcmUuaCIKdHlw ZWRlZiBzdHJ1Y3QgU2VtYXBob3JlSW5mbyBTZW1hcGhvcmVJbmZvOwoKZXh0ZXJuIFNlbWFwaG9y ZUluZm8KICAqQWxsb2NhdGVTZW1hcGhvcmVJbmZvKHZvaWQpOwoKZXh0ZXJuIHVuc2lnbmVkIGlu dAogIExvY2tTZW1hcGhvcmVJbmZvKFNlbWFwaG9yZUluZm8gKiksCiAgVW5sb2NrU2VtYXBob3Jl SW5mbyhTZW1hcGhvcmVJbmZvICopOwoKZXh0ZXJuIHZvaWQKICBBY3F1aXJlU2VtYXBob3JlSW5m byhTZW1hcGhvcmVJbmZvICoqKSwKICBEZXN0cm95U2VtYXBob3JlKHZvaWQpLAogIERlc3Ryb3lT ZW1hcGhvcmVJbmZvKFNlbWFwaG9yZUluZm8gKiopLAogIEluaXRpYWxpemVTZW1hcGhvcmUodm9p ZCksCiAgTGliZXJhdGVTZW1hcGhvcmVJbmZvKFNlbWFwaG9yZUluZm8gKiopOwojIDE1ICIvaG9t ZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2ltYWdlLmgiIDIK IyAxICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2Vy cm9yLmgiIDEKIyA1NyAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNr L21hZ2ljay9lcnJvci5oIgp0eXBlZGVmIGVudW0KewogIFVuZGVmaW5lZEV4Y2VwdGlvbiwKICBX YXJuaW5nRXhjZXB0aW9uID0gMzAwLAogIFJlc291cmNlTGltaXRXYXJuaW5nID0gMzAwLAogIFR5 cGVXYXJuaW5nID0gMzA1LAogIE9wdGlvbldhcm5pbmcgPSAzMTAsCiAgRGVsZWdhdGVXYXJuaW5n ID0gMzE1LAogIE1pc3NpbmdEZWxlZ2F0ZVdhcm5pbmcgPSAzMjAsCiAgQ29ycnVwdEltYWdlV2Fy bmluZyA9IDMyNSwKICBGaWxlT3Blbldhcm5pbmcgPSAzMzAsCiAgQmxvYldhcm5pbmcgPSAzMzUs CiAgU3RyZWFtV2FybmluZyA9IDM0MCwKICBDYWNoZVdhcm5pbmcgPSAzNDUsCiAgQ29kZXJXYXJu aW5nID0gMzUwLAogIE1vZHVsZVdhcm5pbmcgPSAzNTUsCiAgRHJhd1dhcm5pbmcgPSAzNjAsCiAg SW1hZ2VXYXJuaW5nID0gMzY1LAogIFhTZXJ2ZXJXYXJuaW5nID0gMzgwLAogIE1vbml0b3JXYXJu aW5nID0gMzg1LAogIFJlZ2lzdHJ5V2FybmluZyA9IDM5MCwKICBDb25maWd1cmVXYXJuaW5nID0g Mzk1LAogIEVycm9yRXhjZXB0aW9uID0gNDAwLAogIFJlc291cmNlTGltaXRFcnJvciA9IDQwMCwK ICBUeXBlRXJyb3IgPSA0MDUsCiAgT3B0aW9uRXJyb3IgPSA0MTAsCiAgRGVsZWdhdGVFcnJvciA9 IDQxNSwKICBNaXNzaW5nRGVsZWdhdGVFcnJvciA9IDQyMCwKICBDb3JydXB0SW1hZ2VFcnJvciA9 IDQyNSwKICBGaWxlT3BlbkVycm9yID0gNDMwLAogIEJsb2JFcnJvciA9IDQzNSwKICBTdHJlYW1F cnJvciA9IDQ0MCwKICBDYWNoZUVycm9yID0gNDQ1LAogIENvZGVyRXJyb3IgPSA0NTAsCiAgTW9k dWxlRXJyb3IgPSA0NTUsCiAgRHJhd0Vycm9yID0gNDYwLAogIEltYWdlRXJyb3IgPSA0NjUsCiAg WFNlcnZlckVycm9yID0gNDgwLAogIE1vbml0b3JFcnJvciA9IDQ4NSwKICBSZWdpc3RyeUVycm9y ID0gNDkwLAogIENvbmZpZ3VyZUVycm9yID0gNDk1LAogIEZhdGFsRXJyb3JFeGNlcHRpb24gPSA3 MDAsCiAgUmVzb3VyY2VMaW1pdEZhdGFsRXJyb3IgPSA3MDAsCiAgVHlwZUZhdGFsRXJyb3IgPSA3 MDUsCiAgT3B0aW9uRmF0YWxFcnJvciA9IDcxMCwKICBEZWxlZ2F0ZUZhdGFsRXJyb3IgPSA3MTUs CiAgTWlzc2luZ0RlbGVnYXRlRmF0YWxFcnJvciA9IDcyMCwKICBDb3JydXB0SW1hZ2VGYXRhbEVy cm9yID0gNzI1LAogIEZpbGVPcGVuRmF0YWxFcnJvciA9IDczMCwKICBCbG9iRmF0YWxFcnJvciA9 IDczNSwKICBTdHJlYW1GYXRhbEVycm9yID0gNzQwLAogIENhY2hlRmF0YWxFcnJvciA9IDc0NSwK ICBDb2RlckZhdGFsRXJyb3IgPSA3NTAsCiAgTW9kdWxlRmF0YWxFcnJvciA9IDc1NSwKICBEcmF3 RmF0YWxFcnJvciA9IDc2MCwKICBJbWFnZUZhdGFsRXJyb3IgPSA3NjUsCiAgWFNlcnZlckZhdGFs RXJyb3IgPSA3ODAsCiAgTW9uaXRvckZhdGFsRXJyb3IgPSA3ODUsCiAgUmVnaXN0cnlGYXRhbEVy cm9yID0gNzkwLAogIENvbmZpZ3VyZUZhdGFsRXJyb3IgPSA3OTUKfSBFeGNlcHRpb25UeXBlOwoK CgoKdHlwZWRlZiBzdHJ1Y3QgX0V4Y2VwdGlvbkluZm8KewogIGNoYXIKICAgICpyZWFzb24sCiAg ICAqZGVzY3JpcHRpb247CgogIEV4Y2VwdGlvblR5cGUKICAgIHNldmVyaXR5OwoKICB1bnNpZ25l ZCBsb25nCiAgICBzaWduYXR1cmU7Cn0gRXhjZXB0aW9uSW5mbzsKCgoKCnR5cGVkZWYgdm9pZAog ICgqRXJyb3JIYW5kbGVyKShjb25zdCBFeGNlcHRpb25UeXBlLGNvbnN0IGNoYXIgKixjb25zdCBj aGFyICopOwoKdHlwZWRlZiB2b2lkCiAgKCpGYXRhbEVycm9ySGFuZGxlcikoY29uc3QgRXhjZXB0 aW9uVHlwZSxjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKCnR5cGVkZWYgdm9pZAogICgqV2Fy bmluZ0hhbmRsZXIpKGNvbnN0IEV4Y2VwdGlvblR5cGUsY29uc3QgY2hhciAqLGNvbnN0IGNoYXIg Kik7CgoKCgpleHRlcm4gY29uc3QgY2hhcgogICpHZXRMb2NhbGVFeGNlcHRpb25NZXNzYWdlKGNv bnN0IEV4Y2VwdGlvblR5cGUsY29uc3QgY2hhciAqKSwKICAqR2V0TG9jYWxlTWVzc2FnZShjb25z dCBjaGFyICopOwoKZXh0ZXJuIEVycm9ySGFuZGxlcgogIFNldEVycm9ySGFuZGxlcihFcnJvckhh bmRsZXIpOwoKZXh0ZXJuIEZhdGFsRXJyb3JIYW5kbGVyCiAgU2V0RmF0YWxFcnJvckhhbmRsZXIo RmF0YWxFcnJvckhhbmRsZXIpOwoKZXh0ZXJuIHZvaWQKICBDYXRjaEV4Y2VwdGlvbihjb25zdCBF eGNlcHRpb25JbmZvICopLAogIERlc3Ryb3lFeGNlcHRpb25JbmZvKEV4Y2VwdGlvbkluZm8gKiks CiAgR2V0RXhjZXB0aW9uSW5mbyhFeGNlcHRpb25JbmZvICopLAogIE1hZ2lja0Vycm9yKGNvbnN0 IEV4Y2VwdGlvblR5cGUsY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKiksCiAgTWFnaWNrRmF0YWxF cnJvcihjb25zdCBFeGNlcHRpb25UeXBlLGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopLAogIE1h Z2lja1dhcm5pbmcoY29uc3QgRXhjZXB0aW9uVHlwZSxjb25zdCBjaGFyICosY29uc3QgY2hhciAq KSwKICBTZXRFeGNlcHRpb25JbmZvKEV4Y2VwdGlvbkluZm8gKixFeGNlcHRpb25UeXBlKSwKICBU aHJvd0V4Y2VwdGlvbihFeGNlcHRpb25JbmZvICosY29uc3QgRXhjZXB0aW9uVHlwZSxjb25zdCBj aGFyICosY29uc3QgY2hhciAqKTsKCmV4dGVybiBXYXJuaW5nSGFuZGxlcgogIFNldFdhcm5pbmdI YW5kbGVyKFdhcm5pbmdIYW5kbGVyKTsKIyAxNiAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNz L0dyYXBoaWNzTWFnaWNrL21hZ2ljay9pbWFnZS5oIiAyCiMgMSAiL2hvbWUvYmZyaWVzZW4vc3Jj L2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay90aW1lci5oIiAxCiMgMTQgIi9ob21lL2Jm cmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svdGltZXIuaCIKdHlwZWRl ZiBlbnVtCnsKICBVbmRlZmluZWRUaW1lclN0YXRlLAogIFN0b3BwZWRUaW1lclN0YXRlLAogIFJ1 bm5pbmdUaW1lclN0YXRlCn0gVGltZXJTdGF0ZTsKCgoKCnR5cGVkZWYgc3RydWN0IF9UaW1lcgp7 CiAgZG91YmxlCiAgICBzdGFydCwKICAgIHN0b3AsCiAgICB0b3RhbDsKfSBUaW1lcjsKCnR5cGVk ZWYgc3RydWN0IF9UaW1lckluZm8KewogIFRpbWVyCiAgICB1c2VyLAogICAgZWxhcHNlZDsKCiAg VGltZXJTdGF0ZQogICAgc3RhdGU7CgogIHVuc2lnbmVkIGxvbmcKICAgIHNpZ25hdHVyZTsKfSBU aW1lckluZm87CgoKCgpleHRlcm4gZG91YmxlCiAgR2V0RWxhcHNlZFRpbWUoVGltZXJJbmZvICop LAogIEdldFVzZXJUaW1lKFRpbWVySW5mbyAqKTsKCmV4dGVybiB1bnNpZ25lZCBpbnQKICBDb250 aW51ZVRpbWVyKFRpbWVySW5mbyAqKTsKCmV4dGVybiB2b2lkCiAgR2V0VGltZXJJbmZvKFRpbWVy SW5mbyAqKSwKICBSZXNldFRpbWVyKFRpbWVySW5mbyAqKTsKIyAxNyAiL2hvbWUvYmZyaWVzZW4v c3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9pbWFnZS5oIiAyCiMgNTIgIi9ob21l L2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svaW1hZ2UuaCIKdHlw ZWRlZiB1bnNpZ25lZCBjaGFyIFF1YW50dW07CnR5cGVkZWYgZ21faW50MzJfdCBRdWFudHVtQXJp dGhUeXBlOwp0eXBlZGVmIGdtX2ludDY0X3QgUXVhbnR1bVN1bVR5cGU7CiMgMTM2ICIvaG9tZS9i ZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2ltYWdlLmgiCnR5cGVk ZWYgZW51bQp7CiAgVW5kZWZpbmVkQ2hhbm5lbCwKICBSZWRDaGFubmVsLAogIEN5YW5DaGFubmVs LAogIEdyZWVuQ2hhbm5lbCwKICBNYWdlbnRhQ2hhbm5lbCwKICBCbHVlQ2hhbm5lbCwKICBZZWxs b3dDaGFubmVsLAogIE9wYWNpdHlDaGFubmVsLAogIEJsYWNrQ2hhbm5lbCwKICBNYXR0ZUNoYW5u ZWwKfSBDaGFubmVsVHlwZTsKCnR5cGVkZWYgZW51bQp7CiAgVW5kZWZpbmVkQ2xhc3MsCiAgRGly ZWN0Q2xhc3MsCiAgUHNldWRvQ2xhc3MKfSBDbGFzc1R5cGU7Cgp0eXBlZGVmIGVudW0KewogIFVu ZGVmaW5lZENvbG9yc3BhY2UsCiAgUkdCQ29sb3JzcGFjZSwKICBHUkFZQ29sb3JzcGFjZSwKICBU cmFuc3BhcmVudENvbG9yc3BhY2UsCiAgT0hUQUNvbG9yc3BhY2UsCiAgWFlaQ29sb3JzcGFjZSwK ICBZQ2JDckNvbG9yc3BhY2UsCiAgWUNDQ29sb3JzcGFjZSwKICBZSVFDb2xvcnNwYWNlLAogIFlQ YlByQ29sb3JzcGFjZSwKICBZVVZDb2xvcnNwYWNlLAogIENNWUtDb2xvcnNwYWNlLAogIHNSR0JD b2xvcnNwYWNlLAogIEhTTENvbG9yc3BhY2UsCiAgSFdCQ29sb3JzcGFjZQp9IENvbG9yc3BhY2VU eXBlOwoKdHlwZWRlZiBlbnVtCnsKICBVbmRlZmluZWRDb21wbGlhbmNlID0gMHgwMDAwLAogIE5v Q29tcGxpYW5jZSA9IDB4MDAwMCwKICBTVkdDb21wbGlhbmNlID0gMHgwMDAxLAogIFgxMUNvbXBs aWFuY2UgPSAweDAwMDIsCiAgWFBNQ29tcGxpYW5jZSA9IDB4MDAwNCwKICBBbGxDb21wbGlhbmNl ID0gMHhmZmZmCn0gQ29tcGxpYW5jZVR5cGU7Cgp0eXBlZGVmIGVudW0KewogIFVuZGVmaW5lZENv bXBvc2l0ZU9wID0gMCwKICBPdmVyQ29tcG9zaXRlT3AsCiAgSW5Db21wb3NpdGVPcCwKICBPdXRD b21wb3NpdGVPcCwKICBBdG9wQ29tcG9zaXRlT3AsCiAgWG9yQ29tcG9zaXRlT3AsCiAgUGx1c0Nv bXBvc2l0ZU9wLAogIE1pbnVzQ29tcG9zaXRlT3AsCiAgQWRkQ29tcG9zaXRlT3AsCiAgU3VidHJh Y3RDb21wb3NpdGVPcCwKICBEaWZmZXJlbmNlQ29tcG9zaXRlT3AsCiAgTXVsdGlwbHlDb21wb3Np dGVPcCwKICBCdW1wbWFwQ29tcG9zaXRlT3AsCiAgQ29weUNvbXBvc2l0ZU9wLAogIENvcHlSZWRD b21wb3NpdGVPcCwKICBDb3B5R3JlZW5Db21wb3NpdGVPcCwKICBDb3B5Qmx1ZUNvbXBvc2l0ZU9w LAogIENvcHlPcGFjaXR5Q29tcG9zaXRlT3AsCiAgQ2xlYXJDb21wb3NpdGVPcCwKICBEaXNzb2x2 ZUNvbXBvc2l0ZU9wLAogIERpc3BsYWNlQ29tcG9zaXRlT3AsCiAgTW9kdWxhdGVDb21wb3NpdGVP cCwKICBUaHJlc2hvbGRDb21wb3NpdGVPcCwKICBOb0NvbXBvc2l0ZU9wLAogIERhcmtlbkNvbXBv c2l0ZU9wLAogIExpZ2h0ZW5Db21wb3NpdGVPcCwKICBIdWVDb21wb3NpdGVPcCwKICBTYXR1cmF0 ZUNvbXBvc2l0ZU9wLAogIENvbG9yaXplQ29tcG9zaXRlT3AsCiAgTHVtaW5pemVDb21wb3NpdGVP cCwKICBTY3JlZW5Db21wb3NpdGVPcCwKICBPdmVybGF5Q29tcG9zaXRlT3AKfSBDb21wb3NpdGVP cGVyYXRvcjsKCnR5cGVkZWYgZW51bQp7CiAgVW5kZWZpbmVkQ29tcHJlc3Npb24sCiAgTm9Db21w cmVzc2lvbiwKICBCWmlwQ29tcHJlc3Npb24sCiAgRmF4Q29tcHJlc3Npb24sCiAgR3JvdXA0Q29t cHJlc3Npb24sCiAgSlBFR0NvbXByZXNzaW9uLAogIExvc3NsZXNzSlBFR0NvbXByZXNzaW9uLAog IExaV0NvbXByZXNzaW9uLAogIFJMRUNvbXByZXNzaW9uLAogIFppcENvbXByZXNzaW9uCn0gQ29t cHJlc3Npb25UeXBlOwoKdHlwZWRlZiBlbnVtCnsKICBVbmRlZmluZWREaXNwb3NlLAogIE5vbmVE aXNwb3NlLAogIEJhY2tncm91bmREaXNwb3NlLAogIFByZXZpb3VzRGlzcG9zZQp9IERpc3Bvc2VU eXBlOwoKdHlwZWRlZiBlbnVtCnsKICBVbmRlZmluZWRFbmRpYW4sCiAgTFNCRW5kaWFuLAogIE1T QkVuZGlhbgp9IEVuZGlhblR5cGU7Cgp0eXBlZGVmIGVudW0KewogIFVuZGVmaW5lZEZpbHRlciwK ICBQb2ludEZpbHRlciwKICBCb3hGaWx0ZXIsCiAgVHJpYW5nbGVGaWx0ZXIsCiAgSGVybWl0ZUZp bHRlciwKICBIYW5uaW5nRmlsdGVyLAogIEhhbW1pbmdGaWx0ZXIsCiAgQmxhY2ttYW5GaWx0ZXIs CiAgR2F1c3NpYW5GaWx0ZXIsCiAgUXVhZHJhdGljRmlsdGVyLAogIEN1YmljRmlsdGVyLAogIENh dHJvbUZpbHRlciwKICBNaXRjaGVsbEZpbHRlciwKICBMYW5jem9zRmlsdGVyLAogIEJlc3NlbEZp bHRlciwKICBTaW5jRmlsdGVyCn0gRmlsdGVyVHlwZXM7Cgp0eXBlZGVmIGVudW0KewoKICBOb1Zh bHVlID0gMHgwMDAwLAoKICBYVmFsdWUgPSAweDAwMDEsCgogIFlWYWx1ZSA9IDB4MDAwMiwKCiAg V2lkdGhWYWx1ZSA9IDB4MDAwNCwKCiAgSGVpZ2h0VmFsdWUgPSAweDAwMDgsCgogIEFsbFZhbHVl cyA9IDB4MDAwRiwKCiAgWE5lZ2F0aXZlID0gMHgwMDEwLAoKICBZTmVnYXRpdmUgPSAweDAwMjAs CiAgUGVyY2VudFZhbHVlID0gMHgxMDAwLAogIEFzcGVjdFZhbHVlID0gMHgyMDAwLAogIExlc3NW YWx1ZSA9IDB4NDAwMCwKICBHcmVhdGVyVmFsdWUgPSAweDgwMDAsCiAgQXJlYVZhbHVlID0gMHgx MDAwMAp9IEdlb21ldHJ5RmxhZ3M7Cgp0eXBlZGVmIGVudW0KewoKICBGb3JnZXRHcmF2aXR5LAoK ICBOb3J0aFdlc3RHcmF2aXR5LAoKICBOb3J0aEdyYXZpdHksCgogIE5vcnRoRWFzdEdyYXZpdHks CgogIFdlc3RHcmF2aXR5LAoKICBDZW50ZXJHcmF2aXR5LAoKICBFYXN0R3Jhdml0eSwKCiAgU291 dGhXZXN0R3Jhdml0eSwKCiAgU291dGhHcmF2aXR5LAoKICBTb3V0aEVhc3RHcmF2aXR5LAoKICBT dGF0aWNHcmF2aXR5Cn0gR3Jhdml0eVR5cGU7Cgp0eXBlZGVmIGVudW0KewogIFVuZGVmaW5lZFR5 cGUsCiAgQmlsZXZlbFR5cGUsCiAgR3JheXNjYWxlVHlwZSwKICBHcmF5c2NhbGVNYXR0ZVR5cGUs CiAgUGFsZXR0ZVR5cGUsCiAgUGFsZXR0ZU1hdHRlVHlwZSwKICBUcnVlQ29sb3JUeXBlLAogIFRy dWVDb2xvck1hdHRlVHlwZSwKICBDb2xvclNlcGFyYXRpb25UeXBlLAogIENvbG9yU2VwYXJhdGlv bk1hdHRlVHlwZSwKICBPcHRpbWl6ZVR5cGUKfSBJbWFnZVR5cGU7Cgp0eXBlZGVmIGVudW0Kewog IFVuZGVmaW5lZEludGVybGFjZSwKICBOb0ludGVybGFjZSwKICBMaW5lSW50ZXJsYWNlLAogIFBs YW5lSW50ZXJsYWNlLAogIFBhcnRpdGlvbkludGVybGFjZQp9IEludGVybGFjZVR5cGU7Cgp0eXBl ZGVmIGVudW0KewogIFVuZGVmaW5lZE1vZGUsCiAgRnJhbWVNb2RlLAogIFVuZnJhbWVNb2RlLAog IENvbmNhdGVuYXRlTW9kZQp9IE1vbnRhZ2VNb2RlOwoKdHlwZWRlZiBlbnVtCnsKICBVbmlmb3Jt Tm9pc2UsCiAgR2F1c3NpYW5Ob2lzZSwKICBNdWx0aXBsaWNhdGl2ZUdhdXNzaWFuTm9pc2UsCiAg SW1wdWxzZU5vaXNlLAogIExhcGxhY2lhbk5vaXNlLAogIFBvaXNzb25Ob2lzZQp9IE5vaXNlVHlw ZTsKCnR5cGVkZWYgZW51bQp7CiAgVW5kZWZpbmVkUHJvZmlsZSwKICBJQ01Qcm9maWxlLAogIElQ VENQcm9maWxlCn0gUHJvZmlsZVR5cGU7Cgp0eXBlZGVmIGVudW0KewogIFVuZGVmaW5lZFByZXZp ZXcgPSAwLAogIFJvdGF0ZVByZXZpZXcsCiAgU2hlYXJQcmV2aWV3LAogIFJvbGxQcmV2aWV3LAog IEh1ZVByZXZpZXcsCiAgU2F0dXJhdGlvblByZXZpZXcsCiAgQnJpZ2h0bmVzc1ByZXZpZXcsCiAg R2FtbWFQcmV2aWV3LAogIFNwaWZmUHJldmlldywKICBEdWxsUHJldmlldywKICBHcmF5c2NhbGVQ cmV2aWV3LAogIFF1YW50aXplUHJldmlldywKICBEZXNwZWNrbGVQcmV2aWV3LAogIFJlZHVjZU5v aXNlUHJldmlldywKICBBZGROb2lzZVByZXZpZXcsCiAgU2hhcnBlblByZXZpZXcsCiAgQmx1clBy ZXZpZXcsCiAgVGhyZXNob2xkUHJldmlldywKICBFZGdlRGV0ZWN0UHJldmlldywKICBTcHJlYWRQ cmV2aWV3LAogIFNvbGFyaXplUHJldmlldywKICBTaGFkZVByZXZpZXcsCiAgUmFpc2VQcmV2aWV3 LAogIFNlZ21lbnRQcmV2aWV3LAogIFN3aXJsUHJldmlldywKICBJbXBsb2RlUHJldmlldywKICBX YXZlUHJldmlldywKICBPaWxQYWludFByZXZpZXcsCiAgQ2hhcmNvYWxEcmF3aW5nUHJldmlldywK ICBKUEVHUHJldmlldwp9IFByZXZpZXdUeXBlOwoKdHlwZWRlZiBlbnVtCnsKICBJbmRleFF1YW50 dW0sCiAgR3JheVF1YW50dW0sCiAgSW5kZXhBbHBoYVF1YW50dW0sCiAgR3JheUFscGhhUXVhbnR1 bSwKICBSZWRRdWFudHVtLAogIEN5YW5RdWFudHVtLAogIEdyZWVuUXVhbnR1bSwKICBZZWxsb3dR dWFudHVtLAogIEJsdWVRdWFudHVtLAogIE1hZ2VudGFRdWFudHVtLAogIEFscGhhUXVhbnR1bSwK ICBCbGFja1F1YW50dW0sCiAgUkdCUXVhbnR1bSwKICBSR0JBUXVhbnR1bSwKICBDTVlLUXVhbnR1 bSwKICBDTVlLQVF1YW50dW0KfSBRdWFudHVtVHlwZTsKCnR5cGVkZWYgZW51bQp7CiAgVW5kZWZp bmVkSW50ZW50LAogIFNhdHVyYXRpb25JbnRlbnQsCiAgUGVyY2VwdHVhbEludGVudCwKICBBYnNv bHV0ZUludGVudCwKICBSZWxhdGl2ZUludGVudAp9IFJlbmRlcmluZ0ludGVudDsKCnR5cGVkZWYg ZW51bQp7CiAgVW5kZWZpbmVkUmVzb2x1dGlvbiwKICBQaXhlbHNQZXJJbmNoUmVzb2x1dGlvbiwK ICBQaXhlbHNQZXJDZW50aW1ldGVyUmVzb2x1dGlvbgp9IFJlc29sdXRpb25UeXBlOwoKdHlwZWRl ZiBlbnVtCnsKICBDaGFyUGl4ZWwsCiAgU2hvcnRQaXhlbCwKICBJbnRlZ2VyUGl4ZWwsCiAgTG9u Z1BpeGVsLAogIEZsb2F0UGl4ZWwsCiAgRG91YmxlUGl4ZWwKfSBTdG9yYWdlVHlwZTsKCnR5cGVk ZWYgZW51bQp7CiAgVW5kZWZpbmVkVHJhbnNtaXRUeXBlLAogIEZpbGVUcmFuc21pdFR5cGUsCiAg QmxvYlRyYW5zbWl0VHlwZSwKICBTdHJlYW1UcmFuc21pdFR5cGUsCiAgSW1hZ2VUcmFuc21pdFR5 cGUKfSBUcmFuc21pdFR5cGU7CgoKCgp0eXBlZGVmIHN0cnVjdCBfQWZmaW5lTWF0cml4CnsKICBk b3VibGUKICAgIHN4LAogICAgcngsCiAgICByeSwKICAgIHN5LAogICAgdHgsCiAgICB0eTsKfSBB ZmZpbmVNYXRyaXg7Cgp0eXBlZGVmIHN0cnVjdCBfUHJpbWFyeUluZm8KewogIGRvdWJsZQogICAg eCwKICAgIHksCiAgICB6Owp9IFByaW1hcnlJbmZvOwoKdHlwZWRlZiBzdHJ1Y3QgX0Nocm9tYXRp Y2l0eUluZm8KewogIFByaW1hcnlJbmZvCiAgICByZWRfcHJpbWFyeSwKICAgIGdyZWVuX3ByaW1h cnksCiAgICBibHVlX3ByaW1hcnksCiAgICB3aGl0ZV9wb2ludDsKfSBDaHJvbWF0aWNpdHlJbmZv OwoKdHlwZWRlZiBzdHJ1Y3QgX1BpeGVsUGFja2V0CnsKCiAgUXVhbnR1bQogICAgcmVkLAogICAg Z3JlZW4sCiAgICBibHVlLAogICAgb3BhY2l0eTsKIyA1MTQgIi9ob21lL2Jmcmllc2VuL3NyYy9n cmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svaW1hZ2UuaCIKfSBQaXhlbFBhY2tldDsKCnR5 cGVkZWYgc3RydWN0IF9Db2xvckluZm8KewogIGNvbnN0IGNoYXIKICAgICpwYXRoLAogICAgKm5h bWU7CgogIENvbXBsaWFuY2VUeXBlCiAgICBjb21wbGlhbmNlOwoKICBQaXhlbFBhY2tldAogICAg Y29sb3I7CgogIHVuc2lnbmVkIGludAogICAgc3RlYWx0aDsKCiAgdW5zaWduZWQgbG9uZwogICAg c2lnbmF0dXJlOwoKICBzdHJ1Y3QgX0NvbG9ySW5mbwogICAgKnByZXZpb3VzLAogICAgKm5leHQ7 Cn0gQ29sb3JJbmZvOwoKdHlwZWRlZiBzdHJ1Y3QgX0RvdWJsZVBpeGVsUGFja2V0CnsKICBkb3Vi bGUKICAgIHJlZCwKICAgIGdyZWVuLAogICAgYmx1ZSwKICAgIG9wYWNpdHk7Cn0gRG91YmxlUGl4 ZWxQYWNrZXQ7Cgp0eXBlZGVmIHN0cnVjdCBfRXJyb3JJbmZvCnsKICBkb3VibGUKICAgIG1lYW5f ZXJyb3JfcGVyX3BpeGVsLAogICAgbm9ybWFsaXplZF9tZWFuX2Vycm9yLAogICAgbm9ybWFsaXpl ZF9tYXhpbXVtX2Vycm9yOwp9IEVycm9ySW5mbzsKCgp0eXBlZGVmIG9mZl90IEV4dGVuZGVkU2ln bmVkSW50ZWdyYWxUeXBlOwp0eXBlZGVmIHNpemVfdCBFeHRlbmRlZFVuc2lnbmVkSW50ZWdyYWxU eXBlOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9GcmFtZUluZm8KewogIHVuc2lnbmVkIGxvbmcKICAg IHdpZHRoLAogICAgaGVpZ2h0OwoKICBsb25nCiAgICB4LAogICAgeSwKICAgIGlubmVyX2JldmVs LAogICAgb3V0ZXJfYmV2ZWw7Cn0gRnJhbWVJbmZvOwoKdHlwZWRlZiBRdWFudHVtIEluZGV4UGFj a2V0OwoKdHlwZWRlZiBzdHJ1Y3QgX0xvbmdQaXhlbFBhY2tldAp7CiAgdW5zaWduZWQgbG9uZwog ICAgcmVkLAogICAgZ3JlZW4sCiAgICBibHVlLAogICAgb3BhY2l0eTsKfSBMb25nUGl4ZWxQYWNr ZXQ7Cgp0eXBlZGVmIHN0cnVjdCBfTW9udGFnZUluZm8KewogIGNoYXIKICAgICpnZW9tZXRyeSwK ICAgICp0aWxlLAogICAgKnRpdGxlLAogICAgKmZyYW1lLAogICAgKnRleHR1cmUsCiAgICAqZm9u dDsKCiAgZG91YmxlCiAgICBwb2ludHNpemU7CgogIHVuc2lnbmVkIGxvbmcKICAgIGJvcmRlcl93 aWR0aDsKCiAgdW5zaWduZWQgaW50CiAgICBzaGFkb3c7CgogIFBpeGVsUGFja2V0CiAgICBmaWxs LAogICAgc3Ryb2tlLAogICAgYmFja2dyb3VuZF9jb2xvciwKICAgIGJvcmRlcl9jb2xvciwKICAg IG1hdHRlX2NvbG9yOwoKICBHcmF2aXR5VHlwZQogICAgZ3Jhdml0eTsKCiAgY2hhcgogICAgZmls ZW5hbWVbMjA1M107CgogIHVuc2lnbmVkIGxvbmcKICAgIHNpZ25hdHVyZTsKfSBNb250YWdlSW5m bzsKCnR5cGVkZWYgc3RydWN0IF9Qcm9maWxlSW5mbwp7CiAgc2l6ZV90CiAgICBsZW5ndGg7Cgog IGNoYXIKICAgICpuYW1lOwoKICB1bnNpZ25lZCBjaGFyCiAgICAqaW5mbzsKfSBQcm9maWxlSW5m bzsKCnR5cGVkZWYgc3RydWN0IF9SZWN0YW5nbGVJbmZvCnsKICB1bnNpZ25lZCBsb25nCiAgICB3 aWR0aCwKICAgIGhlaWdodDsKCiAgbG9uZwogICAgeCwKICAgIHk7Cn0gUmVjdGFuZ2xlSW5mbzsK CnR5cGVkZWYgc3RydWN0IF9TZWdtZW50SW5mbwp7CiAgZG91YmxlCiAgICB4MSwKICAgIHkxLAog ICAgeDIsCiAgICB5MjsKfSBTZWdtZW50SW5mbzsKCnR5cGVkZWYgc3RydWN0IF9Bc2NpaTg1SW5m byBfQXNjaWk4NUluZm9fOwoKdHlwZWRlZiBzdHJ1Y3QgX0Jsb2JJbmZvIF9CbG9iSW5mb187Cgp0 eXBlZGVmIHN0cnVjdCBfSW1hZ2VBdHRyaWJ1dGUgX0ltYWdlQXR0cmlidXRlXzsKCnR5cGVkZWYg c3RydWN0IF9JbWFnZQp7CiAgQ2xhc3NUeXBlCiAgICBjbGFzczsKCiAgQ29sb3JzcGFjZVR5cGUK ICAgIGNvbG9yc3BhY2U7CgogIENvbXByZXNzaW9uVHlwZQogICAgY29tcHJlc3Npb247CgogIHVu c2lnbmVkIGludAogICAgZGl0aGVyLAogICAgdGFpbnQsCiAgICBtYXR0ZTsKCiAgdW5zaWduZWQg bG9uZwogICAgY29sdW1ucywKICAgIHJvd3M7CgogIHVuc2lnbmVkIGxvbmcKICAgIGRlcHRoLAog ICAgY29sb3JzOwoKICBQaXhlbFBhY2tldAogICAgKmNvbG9ybWFwOwoKICBQaXhlbFBhY2tldAog ICAgYmFja2dyb3VuZF9jb2xvciwKICAgIGJvcmRlcl9jb2xvciwKICAgIG1hdHRlX2NvbG9yOwoK ICBkb3VibGUKICAgIGdhbW1hOwoKICBDaHJvbWF0aWNpdHlJbmZvCiAgICBjaHJvbWF0aWNpdHk7 CgogIFByb2ZpbGVJbmZvCiAgICBjb2xvcl9wcm9maWxlLAogICAgaXB0Y19wcm9maWxlLAogICAg KmdlbmVyaWNfcHJvZmlsZTsKCiAgdW5zaWduZWQgbG9uZwogICAgZ2VuZXJpY19wcm9maWxlczsK CiAgUmVuZGVyaW5nSW50ZW50CiAgICByZW5kZXJpbmdfaW50ZW50OwoKICBSZXNvbHV0aW9uVHlw ZQogICAgdW5pdHM7CgogIGNoYXIKICAgICptb250YWdlLAogICAgKmRpcmVjdG9yeSwKICAgICpn ZW9tZXRyeTsKCiAgbG9uZwogICAgb2Zmc2V0OwoKICBkb3VibGUKICAgIHhfcmVzb2x1dGlvbiwK ICAgIHlfcmVzb2x1dGlvbjsKCiAgUmVjdGFuZ2xlSW5mbwogICAgcGFnZSwKICAgIHRpbGVfaW5m bzsKCiAgZG91YmxlCiAgICBibHVyLAogICAgZnV6ejsKCiAgRmlsdGVyVHlwZXMKICAgIGZpbHRl cjsKCiAgSW50ZXJsYWNlVHlwZQogICAgaW50ZXJsYWNlOwoKICBFbmRpYW5UeXBlCiAgICBlbmRp YW47CgogIEdyYXZpdHlUeXBlCiAgICBncmF2aXR5OwoKICBDb21wb3NpdGVPcGVyYXRvcgogICAg Y29tcG9zZTsKCiAgRGlzcG9zZVR5cGUKICAgIGRpc3Bvc2U7CgogIHN0cnVjdCBfSW1hZ2UKICAg ICpjbGlwX21hc2s7CgogIHVuc2lnbmVkIGxvbmcKICAgIHNjZW5lLAogICAgZGVsYXksCiAgICBp dGVyYXRpb25zLAogICAgdG90YWxfY29sb3JzOwoKICBsb25nCiAgICBzdGFydF9sb29wOwoKICBF cnJvckluZm8KICAgIGVycm9yOwoKICBUaW1lckluZm8KICAgIHRpbWVyOwoKICB2b2lkCiAgICAq Y2xpZW50X2RhdGE7CgogIHZvaWQKICAgICpjYWNoZTsKCiAgX0ltYWdlQXR0cmlidXRlXwogICAg KmF0dHJpYnV0ZXM7CgogIF9Bc2NpaTg1SW5mb18KICAgICphc2NpaTg1OwoKICBfQmxvYkluZm9f CiAgICAqYmxvYjsKCiAgY2hhcgogICAgZmlsZW5hbWVbMjA1M10sCiAgICBtYWdpY2tfZmlsZW5h bWVbMjA1M10sCiAgICBtYWdpY2tbMjA1M107CgogIHVuc2lnbmVkIGxvbmcKICAgIG1hZ2lja19j b2x1bW5zLAogICAgbWFnaWNrX3Jvd3M7CgogIEV4Y2VwdGlvbkluZm8KICAgIGV4Y2VwdGlvbjsK CiAgbG9uZwogICAgcmVmZXJlbmNlX2NvdW50OwoKICBTZW1hcGhvcmVJbmZvCiAgICAqc2VtYXBo b3JlOwoKICB1bnNpZ25lZCBsb25nCiAgICBzaWduYXR1cmU7CgogIHN0cnVjdCBfSW1hZ2UKICAg ICpwcmV2aW91cywKICAgICpsaXN0LAogICAgKm5leHQ7Cn0gSW1hZ2U7Cgp0eXBlZGVmIHVuc2ln bmVkIGludAogICgqU3RyZWFtSGFuZGxlcikoY29uc3QgSW1hZ2UgKixjb25zdCB2b2lkICosY29u c3Qgc2l6ZV90KTsKCnR5cGVkZWYgc3RydWN0IF9JbWFnZUluZm8KewogIENvbXByZXNzaW9uVHlw ZQogICAgY29tcHJlc3Npb247CgogIHVuc2lnbmVkIGludAogICAgdGVtcG9yYXJ5LAogICAgYWRq b2luLAogICAgYWZmaXJtLAogICAgYW50aWFsaWFzOwoKICB1bnNpZ25lZCBsb25nCiAgICBzdWJp bWFnZSwKICAgIHN1YnJhbmdlLAogICAgZGVwdGg7CgogIGNoYXIKICAgICpzaXplLAogICAgKnRp bGUsCiAgICAqcGFnZTsKCiAgSW50ZXJsYWNlVHlwZQogICAgaW50ZXJsYWNlOwoKICBFbmRpYW5U eXBlCiAgICBlbmRpYW47CgogIFJlc29sdXRpb25UeXBlCiAgICB1bml0czsKCiAgdW5zaWduZWQg bG9uZwogICAgcXVhbGl0eTsKCiAgY2hhcgogICAgKnNhbXBsaW5nX2ZhY3RvciwKICAgICpzZXJ2 ZXJfbmFtZSwKICAgICpmb250LAogICAgKnRleHR1cmUsCiAgICAqZGVuc2l0eTsKCiAgZG91Ymxl CiAgICBwb2ludHNpemU7CgogIGRvdWJsZQogICAgZnV6ejsKCiAgUGl4ZWxQYWNrZXQKICAgIHBl biwKICAgIGJhY2tncm91bmRfY29sb3IsCiAgICBib3JkZXJfY29sb3IsCiAgICBtYXR0ZV9jb2xv cjsKCiAgdW5zaWduZWQgaW50CiAgICBkaXRoZXIsCiAgICBtb25vY2hyb21lOwoKICBDb2xvcnNw YWNlVHlwZQogICAgY29sb3JzcGFjZTsKCiAgSW1hZ2VUeXBlCiAgICB0eXBlOwoKICBQcmV2aWV3 VHlwZQogICAgcHJldmlld190eXBlOwoKICBsb25nCiAgICBncm91cDsKCiAgdW5zaWduZWQgaW50 CiAgICBwaW5nLAogICAgdmVyYm9zZTsKCiAgY2hhcgogICAgKnZpZXcsCiAgICAqYXV0aGVudGlj YXRlOwoKICBJbWFnZQogICAgKmF0dHJpYnV0ZXM7CgogIHZvaWQKICAgICpjbGllbnRfZGF0YTsK CiAgdm9pZAogICAgKmNhY2hlOwoKICBTdHJlYW1IYW5kbGVyCiAgICBzdHJlYW07CgogIEZJTEUK ICAgICpmaWxlOwoKICB2b2lkCiAgICAqYmxvYjsKCiAgc2l6ZV90CiAgICBsZW5ndGg7CgogIGNo YXIKICAgIG1hZ2lja1syMDUzXSwKICAgIHVuaXF1ZVsyMDUzXSwKICAgIHplcm9bMjA1M10sCiAg ICBmaWxlbmFtZVsyMDUzXTsKCiAgdW5zaWduZWQgbG9uZwogICAgc2lnbmF0dXJlOwp9IEltYWdl SW5mbzsKCgoKCmV4dGVybiBjb25zdCBjaGFyCiAgKkJhY2tncm91bmRDb2xvciwKICAqQm9yZGVy Q29sb3IsCiAgKkRlZmF1bHRUaWxlRnJhbWUsCiAgKkRlZmF1bHRUaWxlR2VvbWV0cnksCiAgKkRl ZmF1bHRUaWxlTGFiZWwsCiAgKkZvcmVncm91bmRDb2xvciwKICAqTWF0dGVDb2xvciwKICAqTG9h ZEltYWdlVGV4dCwKICAqTG9hZEltYWdlc1RleHQsCiAgKlBTRGVuc2l0eUdlb21ldHJ5LAogICpQ U1BhZ2VHZW9tZXRyeSwKICAqU2F2ZUltYWdlVGV4dCwKICAqU2F2ZUltYWdlc1RleHQ7CgpleHRl cm4gY29uc3QgdW5zaWduZWQgbG9uZwogIERlZmF1bHRDb21wcmVzc2lvblF1YWxpdHk7CgoKCgoK ZXh0ZXJuIEV4Y2VwdGlvblR5cGUKICBDYXRjaEltYWdlRXhjZXB0aW9uKEltYWdlICopOwoKZXh0 ZXJuIEltYWdlCiAgKkFsbG9jYXRlSW1hZ2UoY29uc3QgSW1hZ2VJbmZvICopLAogICpBcHBlbmRJ bWFnZXMoY29uc3QgSW1hZ2UgKixjb25zdCB1bnNpZ25lZCBpbnQsRXhjZXB0aW9uSW5mbyAqKSwK ICAqQXZlcmFnZUltYWdlcyhjb25zdCBJbWFnZSAqLEV4Y2VwdGlvbkluZm8gKiksCiAgKkNsb25l SW1hZ2UoY29uc3QgSW1hZ2UgKixjb25zdCB1bnNpZ25lZCBsb25nLGNvbnN0IHVuc2lnbmVkIGxv bmcsCiAgIGNvbnN0IHVuc2lnbmVkIGludCxFeGNlcHRpb25JbmZvICopLAogICpSZWZlcmVuY2VJ bWFnZShJbWFnZSAqKTsKCmV4dGVybiBJbWFnZUluZm8KICAqQ2xvbmVJbWFnZUluZm8oY29uc3Qg SW1hZ2VJbmZvICopOwoKZXh0ZXJuIEltYWdlVHlwZQogIEdldEltYWdlVHlwZShjb25zdCBJbWFn ZSAqLEV4Y2VwdGlvbkluZm8gKik7CgpleHRlcm4gaW50CiAgR2V0SW1hZ2VHZW9tZXRyeShjb25z dCBJbWFnZSAqLGNvbnN0IGNoYXIgKixjb25zdCB1bnNpZ25lZCBpbnQsCiAgUmVjdGFuZ2xlSW5m byAqKTsKCgpleHRlcm4gUmVjdGFuZ2xlSW5mbwogIEdldEltYWdlQm91bmRpbmdCb3goY29uc3Qg SW1hZ2UgKixFeGNlcHRpb25JbmZvICpleGNlcHRpb24pOwoKZXh0ZXJuIHVuc2lnbmVkIGludAog IEFsbG9jYXRlSW1hZ2VDb2xvcm1hcChJbWFnZSAqLGNvbnN0IHVuc2lnbmVkIGxvbmcpLAogIEFu aW1hdGVJbWFnZXMoY29uc3QgSW1hZ2VJbmZvICppbWFnZV9pbmZvLEltYWdlICppbWFnZSksCiAg Q2hhbm5lbEltYWdlKEltYWdlICosY29uc3QgQ2hhbm5lbFR5cGUpLAogIENsaXBJbWFnZShJbWFn ZSAqKSwKICBEaXNwbGF5SW1hZ2VzKGNvbnN0IEltYWdlSW5mbyAqaW1hZ2VfaW5mbyxJbWFnZSAq aW1hZ2UpLAogIEdyYWRpZW50SW1hZ2UoSW1hZ2UgKixjb25zdCBQaXhlbFBhY2tldCAqLGNvbnN0 IFBpeGVsUGFja2V0ICopLAogIElzSW1hZ2VzRXF1YWwoSW1hZ2UgKixjb25zdCBJbWFnZSAqKSwK ICBJc1RhaW50SW1hZ2UoY29uc3QgSW1hZ2UgKiksCiAgSXNTdWJpbWFnZShjb25zdCBjaGFyICos Y29uc3QgdW5zaWduZWQgaW50KSwKICBQbGFzbWFJbWFnZShJbWFnZSAqLGNvbnN0IFNlZ21lbnRJ bmZvICosdW5zaWduZWQgbG9uZyx1bnNpZ25lZCBsb25nKSwKICBSR0JUcmFuc2Zvcm1JbWFnZShJ bWFnZSAqLGNvbnN0IENvbG9yc3BhY2VUeXBlKSwKICBTZXRJbWFnZUNsaXBNYXNrKEltYWdlICos SW1hZ2UgKiksCiAgU2V0SW1hZ2VEZXB0aChJbWFnZSAqLGNvbnN0IHVuc2lnbmVkIGxvbmcpLAog IFNldEltYWdlSW5mbyhJbWFnZUluZm8gKixjb25zdCB1bnNpZ25lZCBpbnQsRXhjZXB0aW9uSW5m byAqKSwKICBTb3J0Q29sb3JtYXBCeUludGVuc2l0eShJbWFnZSAqKSwKICBUcmFuc2Zvcm1SR0JJ bWFnZShJbWFnZSAqLGNvbnN0IENvbG9yc3BhY2VUeXBlKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n CiAgR2V0SW1hZ2VEZXB0aChjb25zdCBJbWFnZSAqLEV4Y2VwdGlvbkluZm8gKik7CgpleHRlcm4g dm9pZAogIEFsbG9jYXRlTmV4dEltYWdlKGNvbnN0IEltYWdlSW5mbyAqLEltYWdlICopLAogIEN5 Y2xlQ29sb3JtYXBJbWFnZShJbWFnZSAqLGNvbnN0IGludCksCiAgRGVzY3JpYmVJbWFnZShJbWFn ZSAqLEZJTEUgKixjb25zdCB1bnNpZ25lZCBpbnQpLAogIERlc3Ryb3lJbWFnZShJbWFnZSAqKSwK ICBEZXN0cm95SW1hZ2VJbmZvKEltYWdlSW5mbyAqKSwKICBHZXRJbWFnZUV4Y2VwdGlvbihJbWFn ZSAqLEV4Y2VwdGlvbkluZm8gKiksCiAgR2V0SW1hZ2VJbmZvKEltYWdlSW5mbyAqKSwKICBNb2Rp ZnlJbWFnZShJbWFnZSAqKixFeGNlcHRpb25JbmZvICopLAogIFNldEltYWdlKEltYWdlICosY29u c3QgUXVhbnR1bSksCiAgU2V0SW1hZ2VPcGFjaXR5KEltYWdlICosY29uc3QgdW5zaWduZWQgaW50 KSwKICBTZXRJbWFnZVR5cGUoSW1hZ2UgKixjb25zdCBJbWFnZVR5cGUpLAogIFN5bmNJbWFnZShJ bWFnZSAqKSwKICBUZXh0dXJlSW1hZ2UoSW1hZ2UgKixjb25zdCBJbWFnZSAqKSwKICBUcmFuc2Zv cm1Db2xvcnNwYWNlKEltYWdlICosY29uc3QgQ29sb3JzcGFjZVR5cGUpOwojIDE2MiAiL2hvbWUv YmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9zdHVkaW8uaCIgMgoj IDEgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svbGlz dC5oIiAxCiMgMTEgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svbGlzdC5oIgpleHRlcm4gSW1hZ2UKICAqQ2xvbmVJbWFnZUxpc3QoY29uc3QgSW1hZ2Ug KixFeGNlcHRpb25JbmZvICopLAogICpHZXRGaXJzdEltYWdlSW5MaXN0KGNvbnN0IEltYWdlICop LAogICpHZXRJbWFnZUZyb21MaXN0KGNvbnN0IEltYWdlICosY29uc3QgbG9uZyksCiAgKkdldExh c3RJbWFnZUluTGlzdChjb25zdCBJbWFnZSAqKSwKICAqR2V0TmV4dEltYWdlSW5MaXN0KGNvbnN0 IEltYWdlICopLAogICpHZXRQcmV2aW91c0ltYWdlSW5MaXN0KGNvbnN0IEltYWdlICopLAogICoq SW1hZ2VMaXN0VG9BcnJheShjb25zdCBJbWFnZSAqLEV4Y2VwdGlvbkluZm8gKiksCiAgKk5ld0lt YWdlTGlzdCh2b2lkKSwKICAqUmVtb3ZlTGFzdEltYWdlRnJvbUxpc3QoSW1hZ2UgKiopLAogICpS ZW1vdmVGaXJzdEltYWdlRnJvbUxpc3QoSW1hZ2UgKiopLAogICpTcGxpdEltYWdlTGlzdChJbWFn ZSAqKSwKICAqU3luY05leHRJbWFnZUluTGlzdChjb25zdCBJbWFnZSAqKTsKCmV4dGVybiBsb25n CiAgR2V0SW1hZ2VJbmRleEluTGlzdChjb25zdCBJbWFnZSAqKTsKCmV4dGVybiB1bnNpZ25lZCBs b25nCiAgR2V0SW1hZ2VMaXN0TGVuZ3RoKGNvbnN0IEltYWdlICopOwoKZXh0ZXJuIHZvaWQKICBB cHBlbmRJbWFnZVRvTGlzdChJbWFnZSAqKixJbWFnZSAqKSwKICBEZWxldGVJbWFnZUZyb21MaXN0 KEltYWdlICoqKSwKICBEZXN0cm95SW1hZ2VMaXN0KEltYWdlICopLAogIEluc2VydEltYWdlSW5M aXN0KEltYWdlICoqLEltYWdlICopLAogIFByZXBlbmRJbWFnZVRvTGlzdChJbWFnZSAqKixJbWFn ZSAqKSwKICBSZXZlcnNlSW1hZ2VMaXN0KEltYWdlICoqKSwKICBTcGxpY2VJbWFnZUludG9MaXN0 KEltYWdlICoqLGNvbnN0IHVuc2lnbmVkIGxvbmcsSW1hZ2UgKik7CiMgMTYzICIvaG9tZS9iZnJp ZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL3N0dWRpby5oIiAyCgoKCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lcy5oIiAxIDMgNAojIDExICIvdXNyL2luY2x1ZGUvc3lz L3RpbWVzLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdGltZXMuaAkxLjEwCTk3LzA4LzEyIFNN SSIgCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdGltZXMuaCIgMyA0CnN0cnVjdCB0bXMgewogICAg ICAgIGNsb2NrX3QgdG1zX3V0aW1lOwogICAgICAgIGNsb2NrX3QgdG1zX3N0aW1lOwogICAgICAg IGNsb2NrX3QgdG1zX2N1dGltZTsKICAgICAgICBjbG9ja190IHRtc19jc3RpbWU7Cn07CiMgNDQg Ii91c3IvaW5jbHVkZS9zeXMvdGltZXMuaCIgMyA0CmNsb2NrX3QgdGltZXMoc3RydWN0IHRtcyAq KTsKIyAxNjcgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdp Y2svc3R1ZGlvLmgiIDIKIyAxOTIgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svc3R1ZGlvLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDEg MyA0CiMgMzQgIi91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgj KW1tYW4uaAkxLjQxCTAxLzEyLzEyIFNNSSIKIyAxMTggIi91c3IvaW5jbHVkZS9zeXMvbW1hbi5o IiAzIDQKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIG1tYXAgbW1hcDY0CiMgMTM4ICIvdXNyL2lu Y2x1ZGUvc3lzL21tYW4uaCIgMyA0CmV4dGVybiB2b2lkICptbWFwKHZvaWQgKiwgc2l6ZV90LCBp bnQsIGludCwgaW50LCBvZmZfdCk7CmV4dGVybiBpbnQgbXVubWFwKHZvaWQgKiwgc2l6ZV90KTsK ZXh0ZXJuIGludCBtcHJvdGVjdCh2b2lkICosIHNpemVfdCwgaW50KTsKZXh0ZXJuIGludCBtc3lu Yyh2b2lkICosIHNpemVfdCwgaW50KTsKCmV4dGVybiBpbnQgbWxvY2soY29uc3Qgdm9pZCAqLCBz aXplX3QpOwpleHRlcm4gaW50IG11bmxvY2soY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4g aW50IHNobV9vcGVuKGNvbnN0IGNoYXIgKiwgaW50LCBtb2RlX3QpOwpleHRlcm4gaW50IHNobV91 bmxpbmsoY29uc3QgY2hhciAqKTsKCgoKCmV4dGVybiB2b2lkICptbWFwNjQodm9pZCAqLCBzaXpl X3QsIGludCwgaW50LCBpbnQsIG9mZjY0X3QpOwojIDE3OSAiL3Vzci9pbmNsdWRlL3N5cy9tbWFu LmgiIDMgNApleHRlcm4gaW50IG1sb2NrYWxsKGludCk7CmV4dGVybiBpbnQgbXVubG9ja2FsbCh2 b2lkKTsKIyAyMTYgIi91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAzIDQKc3RydWN0IG1lbWNudGxf bWhhIHsKICAgICAgICB1aW50X3QgbWhhX2NtZDsKICAgICAgICB1aW50X3QgbWhhX2ZsYWdzOwog ICAgICAgIHNpemVfdCBtaGFfcGFnZXNpemU7Cn07CiMgMjg2ICIvdXNyL2luY2x1ZGUvc3lzL21t YW4uaCIgMyA0CnR5cGVkZWYgc3RydWN0IG1lbWluZm8gewogICAgICAgIGNvbnN0IHVpbnQ2NF90 ICptaV9pbmFkZHI7CiAgICAgICAgY29uc3QgdWludF90ICptaV9pbmZvX3JlcTsKICAgICAgICB1 aW50NjRfdCAqbWlfb3V0ZGF0YTsKICAgICAgICB1aW50X3QgKm1pX3ZhbGlkaXR5OwogICAgICAg IGludCBtaV9pbmZvX2NvdW50Owp9IG1lbWluZm9fdDsKIyAxOTMgIi9ob21lL2Jmcmllc2VuL3Ny Yy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svc3R1ZGlvLmgiIDIKCgojIDEgIi91c3Iv aW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0 CiNwcmFnbWEgaWRlbnQgIkAoIylwdGhyZWFkLmgJMS4zMgkwMS8xMS8xMCBTTUkiCgoKCgojIDEg Ii91c3IvaW5jbHVkZS9zY2hlZC5oIiAxIDMgNAojIDExICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIg MyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzY2hlZC5oCTEuOQk5OC8wMS8xNiBTTUkiCiMgMjAgIi91 c3IvaW5jbHVkZS9zY2hlZC5oIiAzIDQKc3RydWN0IHNjaGVkX3BhcmFtIHsKICAgICAgICBpbnQg c2NoZWRfcHJpb3JpdHk7CiAgICAgICAgaW50IHNjaGVkX25pY2VsaW07CiAgICAgICAgaW50IHNj aGVkX25pY2U7CiAgICAgICAgaW50IHNjaGVkX3BhZFs2XTsKCgoKfTsKIyA0NCAiL3Vzci9pbmNs dWRlL3NjaGVkLmgiIDMgNAppbnQgc2NoZWRfZ2V0cGFyYW0ocGlkX3QgcGlkLCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKnBhcmFtKTsKaW50IHNjaGVkX3NldHBhcmFtKHBpZF90IHBpZCwgY29uc3Qgc3Ry dWN0IHNjaGVkX3BhcmFtICpwYXJhbSk7CmludCBzY2hlZF9nZXRzY2hlZHVsZXIocGlkX3QgcGlk KTsKaW50IHNjaGVkX3NldHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksCiAgICAgICAg ICAgICAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsKaW50IHNjaGVkX3lpZWxk KHZvaWQpOwppbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9saWN5KTsKaW50IHNjaGVk X2dldF9wcmlvcml0eV9taW4oaW50IHBvbGljeSk7CmludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwo cGlkX3QgcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKmludGVydmFsKTsKIyAxNSAiL3Vzci9pbmNsdWRl L3B0aHJlYWQuaCIgMiAzIDQKIyAxMTEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNAp0eXBl ZGVmIHN0cnVjdCBfY2xlYW51cCB7CiAgICAgICAgdWludHB0cl90IHB0aHJlYWRfY2xlYW51cF9w YWRbNF07Cn0gX2NsZWFudXBfdDsKCgoKdm9pZCBfX3B0aHJlYWRfY2xlYW51cF9wdXNoKHZvaWQg KCpyb3V0aW5lKSh2b2lkICopLCB2b2lkICphcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FkZHJfdCBmcCwgX2NsZWFudXBfdCAqaW5mbyk7CnZvaWQgX19wdGhy ZWFkX2NsZWFudXBfcG9wKGludCBleCwgX2NsZWFudXBfdCAqaW5mbyk7CmNhZGRyX3QgX2dldGZw KHZvaWQpOwojIDEzNCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CnR5cGVkZWYgdm9pZCAo Kl9Wb2lkZnApKHZvaWQqKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRl cm4gaW50IHB0aHJlYWRfYXR0cl9pbml0KHB0aHJlYWRfYXR0cl90ICopOwpleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9kZXN0cm95KHB0aHJlYWRfYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9zZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBw dGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCAq KTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90ICos IHZvaWQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihjb25zdCBwdGhy ZWFkX2F0dHJfdCAqLCB2b2lkICoqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNo c3RhdGUocHRocmVhZF9hdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0 ZGV0YWNoc3RhdGUoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9zZXRzY29wZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9nZXRzY29wZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4dGVy biBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZChwdGhyZWFkX2F0dHJfdCAqLCBpbnQp OwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQoY29uc3QgcHRocmVhZF9h dHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeShw dGhyZWFkX2F0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBv bGljeShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9h dHRyX3NldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKZXh0ZXJuIGlu dCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICop OwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqLCBjb25zdCBwdGhyZWFkX2F0 dHJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiAoKikodm9pZCAq KSwgdm9pZCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UocHRocmVhZF9vbmNlX3QgKiwgdm9p ZCAoKikodm9pZCkpOwpleHRlcm4gaW50IHB0aHJlYWRfam9pbihwdGhyZWFkX3QsIHZvaWQgKiop OwpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoKHB0aHJlYWRfdCk7CmV4dGVybiB2b2lkIHB0aHJl YWRfZXhpdCh2b2lkICopOwpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsKHB0aHJlYWRfdCk7CmV4 dGVybiBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCwgaW50LCBjb25zdCBzdHJ1 Y3Qgc2NoZWRfcGFyYW0gKik7CmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJl YWRfdCwgaW50ICosIHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3Nl dGNhbmNlbHN0YXRlKGludCwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlw ZShpbnQsIGludCAqKTsKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsKHZvaWQpOwpleHRl cm4gaW50IHB0aHJlYWRfZXF1YWwocHRocmVhZF90LCBwdGhyZWFkX3QpOwpleHRlcm4gaW50IHB0 aHJlYWRfa2V5X2NyZWF0ZShwdGhyZWFkX2tleV90ICosIHZvaWQgKCopKHZvaWQgKikpOwpleHRl cm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZShwdGhyZWFkX2tleV90KTsKZXh0ZXJuIGludCBwdGhy ZWFkX3NldHNwZWNpZmljKHB0aHJlYWRfa2V5X3QsIGNvbnN0IHZvaWQgKik7CmV4dGVybiB2b2lk ICpwdGhyZWFkX2dldHNwZWNpZmljKHB0aHJlYWRfa2V5X3QpOwpleHRlcm4gcHRocmVhZF90IHB0 aHJlYWRfc2VsZih2b2lkKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdChw dGhyZWFkX211dGV4YXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ry b3kocHRocmVhZF9tdXRleGF0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9z ZXRwc2hhcmVkKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFk X211dGV4YXR0cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICop OwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByb3RvY29sKHB0aHJlYWRfbXV0ZXhh dHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwcm90b2NvbChj b25zdCBwdGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211 dGV4YXR0cl9zZXRwcmlvY2VpbGluZyhwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7CmV4dGVy biBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHJpb2NlaWxpbmcoY29uc3QgcHRocmVhZF9tdXRl eGF0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cm9idXN0 X25wKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4 YXR0cl9nZXRyb2J1c3RfbnAoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7CmV4 dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0KHB0aHJlYWRfbXV0ZXhfdCAqLCBjb25zdCBwdGhy ZWFkX211dGV4YXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfY29uc2lzdGVudF9u cChwdGhyZWFkX211dGV4X3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0 aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2socHRocmVhZF9t dXRleF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhf dCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICop OwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfc2V0cHJpb2NlaWxpbmcocHRocmVhZF9tdXRleF90 ICosIGludCwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZ2V0cHJpb2NlaWxpbmco Y29uc3QgcHRocmVhZF9tdXRleF90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRh dHRyX2luaXQocHRocmVhZF9jb25kYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0 dHJfZGVzdHJveShwdGhyZWFkX2NvbmRhdHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25k YXR0cl9zZXRwc2hhcmVkKHB0aHJlYWRfY29uZGF0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0 aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZChjb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKiwgaW50 ICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0KHB0aHJlYWRfY29uZF90ICosIGNvbnN0 IHB0aHJlYWRfY29uZGF0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveShw dGhyZWFkX2NvbmRfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KHB0aHJl YWRfY29uZF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwocHRocmVhZF9jb25k X3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKiwgcHRo cmVhZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVh ZF9jb25kX3QgKiwgcHRocmVhZF9tdXRleF90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgcHRocmVh ZF9jb25kX3JlbHRpbWVkd2FpdF9ucChwdGhyZWFkX2NvbmRfdCAqLCBwdGhyZWFkX211dGV4X3Qg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0 aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplKGNvbnN0IHB0 aHJlYWRfYXR0cl90ICosIHNpemVfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3Vh cmRzaXplKHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCk7CmV4dGVybiBpbnQgcHRocmVhZF9nZXRj b25jdXJyZW5jeSh2b2lkKTsKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5KGludCBu ZXd2YWwpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUocHRocmVhZF9tdXRl eGF0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUoY29u c3QgcHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9yd2xv Y2tfaW5pdChwdGhyZWFkX3J3bG9ja190ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9yd2xv Y2tfZGVzdHJveShwdGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr X3JkbG9jayhwdGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3Ry eXJkbG9jayhwdGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3dy bG9jayhwdGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdy bG9jayhwdGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3VubG9j ayhwdGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0 KHB0aHJlYWRfcndsb2NrYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9k ZXN0cm95KHB0aHJlYWRfcndsb2NrYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr YXR0cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICosIGludCAqKTsKZXh0 ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJlZChwdGhyZWFkX3J3bG9ja2F0dHJf dCAqLCBpbnQpOwojIDE5NiAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9zdHVkaW8uaCIgMgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9wb2xsLmgiIDEg MyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvcG9sbC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgj KXBvbGwuaAkxLjI4CTk4LzExLzIzIFNNSSIgCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvcG9sbC5o IiAzIDQKdHlwZWRlZiBzdHJ1Y3QgcG9sbGZkIHsKICAgICAgICBpbnQgZmQ7CiAgICAgICAgc2hv cnQgZXZlbnRzOwogICAgICAgIHNob3J0IHJldmVudHM7Cn0gcG9sbGZkX3Q7Cgp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgbmZkc190OwojIDEyNCAiL3Vzci9pbmNsdWRlL3N5cy9wb2xsLmgiIDMgNApp bnQgcG9sbChzdHJ1Y3QgcG9sbGZkICosIG5mZHNfdCwgaW50KTsKIyAxOTkgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svc3R1ZGlvLmgiIDIKIyA1NyAi L2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMi IDIKIyAxICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNr L2F0dHJpYnV0ZS5oIiAxCiMgMTEgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svYXR0cmlidXRlLmgiCnR5cGVkZWYgc3RydWN0IF9JbWFnZUF0dHJpYnV0 ZQp7CiAgY2hhcgogICAgKmtleSwKICAgICp2YWx1ZTsKCiAgdW5zaWduZWQgaW50CiAgICBjb21w cmVzc2lvbjsKCiAgc3RydWN0IF9JbWFnZUF0dHJpYnV0ZQogICAgKnByZXZpb3VzLAogICAgKm5l eHQ7Cn0gSW1hZ2VBdHRyaWJ1dGU7CgoKCgpleHRlcm4gY29uc3QgSW1hZ2VBdHRyaWJ1dGUKICAq R2V0SW1hZ2VBdHRyaWJ1dGUoY29uc3QgSW1hZ2UgKixjb25zdCBjaGFyICopLAogICpHZXRJbWFn ZUNsaXBwaW5nUGF0aEF0dHJpYnV0ZShjb25zdCBJbWFnZSAqKSwKICAqR2V0SW1hZ2VJbmZvQXR0 cmlidXRlKGNvbnN0IEltYWdlSW5mbyAqLGNvbnN0IEltYWdlICosY29uc3QgY2hhciAqKTsKCmV4 dGVybiB1bnNpZ25lZCBpbnQKICBTZXRJbWFnZUF0dHJpYnV0ZShJbWFnZSAqLGNvbnN0IGNoYXIg Kixjb25zdCBjaGFyICopOwoKZXh0ZXJuIHZvaWQKICBEZXN0cm95SW1hZ2VBdHRyaWJ1dGVzKElt YWdlICopOwojIDU4ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2RyYXcuYyIgMgojIDEgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svYmxvYi5oIiAxCiMgMjEgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGlj cy9HcmFwaGljc01hZ2ljay9tYWdpY2svYmxvYi5oIgp0eXBlZGVmIGVudW0KewogIFVuZGVmaW5l ZEJsb2JNb2RlLAogIFJlYWRCbG9iTW9kZSwKICBSZWFkQmluYXJ5QmxvYk1vZGUsCiAgV3JpdGVC bG9iTW9kZSwKICBXcml0ZUJpbmFyeUJsb2JNb2RlLAogIElPQmluYXJ5QmxvYk1vZGUKfSBCbG9i TW9kZTsKCnR5cGVkZWYgZW51bQp7CiAgUmVhZE1vZGUsCiAgV3JpdGVNb2RlLAogIElPTW9kZQp9 IE1hcE1vZGU7Cgp0eXBlZGVmIGVudW0KewogIFVuZGVmaW5lZFN0cmVhbSwKICBGaWxlU3RyZWFt LAogIFN0YW5kYXJkU3RyZWFtLAogIFBpcGVTdHJlYW0sCiAgWmlwU3RyZWFtLAogIEJaaXBTdHJl YW0sCiAgRmlmb1N0cmVhbSwKICBCbG9iU3RyZWFtCn0gU3RyZWFtVHlwZTsKCgoKCnR5cGVkZWYg aW50CiAgKigqQmxvYkZpZm8pKGNvbnN0IEltYWdlICosY29uc3Qgdm9pZCAqLGNvbnN0IHNpemVf dCk7Cgp0eXBlZGVmIHN0cnVjdCBfQmxvYkluZm8KewogIHNpemVfdAogICAgbGVuZ3RoLAogICAg ZXh0ZW50LAogICAgcXVhbnR1bTsKCiAgdW5zaWduZWQgaW50CiAgICBtYXBwZWQsCiAgICBlb2Y7 CgogIEV4dGVuZGVkU2lnbmVkSW50ZWdyYWxUeXBlCiAgICBvZmZzZXQsCiAgICBzaXplOwoKICB1 bnNpZ25lZCBpbnQKICAgIGV4ZW1wdCwKICAgIHN0YXR1cywKICAgIHRlbXBvcmFyeTsKCiAgU3Ry ZWFtVHlwZQogICAgdHlwZTsKCiAgRklMRQogICAgKmZpbGU7CgogIFN0cmVhbUhhbmRsZXIKICAg IHN0cmVhbTsKCiAgdW5zaWduZWQgY2hhcgogICAgKmRhdGE7CgogIFNlbWFwaG9yZUluZm8KICAg ICpzZW1hcGhvcmU7CgogIGxvbmcKICAgIHJlZmVyZW5jZV9jb3VudDsKCiAgdW5zaWduZWQgbG9u ZwogICAgc2lnbmF0dXJlOwp9IEJsb2JJbmZvOwoKCgoKZXh0ZXJuIEJsb2JJbmZvCiAgKkNsb25l QmxvYkluZm8oY29uc3QgQmxvYkluZm8gKiksCiAgKlJlZmVyZW5jZUJsb2IoQmxvYkluZm8gKik7 CgpleHRlcm4gY2hhcgogICpSZWFkQmxvYlN0cmluZyhJbWFnZSAqLGNoYXIgKik7CgpleHRlcm4g RXh0ZW5kZWRTaWduZWRJbnRlZ3JhbFR5cGUKICBHZXRCbG9iU2l6ZShjb25zdCBJbWFnZSAqaW1h Z2UpLAogIFNlZWtCbG9iKEltYWdlICosY29uc3QgRXh0ZW5kZWRTaWduZWRJbnRlZ3JhbFR5cGUs Y29uc3QgaW50KSwKICBUZWxsQmxvYihjb25zdCBJbWFnZSAqaW1hZ2UpOwoKZXh0ZXJuIEltYWdl CiAgKkJsb2JUb0ltYWdlKGNvbnN0IEltYWdlSW5mbyAqLGNvbnN0IHZvaWQgKixjb25zdCBzaXpl X3QsRXhjZXB0aW9uSW5mbyAqKSwKICAqUGluZ0Jsb2IoY29uc3QgSW1hZ2VJbmZvICosY29uc3Qg dm9pZCAqLGNvbnN0IHNpemVfdCxFeGNlcHRpb25JbmZvICopOwoKZXh0ZXJuIGludAogIEVPRkJs b2IoY29uc3QgSW1hZ2UgKiksCiAgUmVhZEJsb2JCeXRlKEltYWdlICopLAogIFN5bmNCbG9iKElt YWdlICopOwoKZXh0ZXJuIHNpemVfdAogIFJlYWRCbG9iKEltYWdlICosY29uc3Qgc2l6ZV90LHZv aWQgKiksCiAgUmVhZEJsb2JaQyhJbWFnZSAqLGNvbnN0IHNpemVfdCx2b2lkICoqKSwKICBXcml0 ZUJsb2IoSW1hZ2UgKixjb25zdCBzaXplX3QsY29uc3Qgdm9pZCAqKSwKICBXcml0ZUJsb2JCeXRl KEltYWdlICosY29uc3QgdW5zaWduZWQgbG9uZyksCiAgV3JpdGVCbG9iTFNCTG9uZyhJbWFnZSAq LGNvbnN0IHVuc2lnbmVkIGxvbmcpLAogIFdyaXRlQmxvYkxTQlNob3J0KEltYWdlICosY29uc3Qg dW5zaWduZWQgbG9uZyksCiAgV3JpdGVCbG9iTVNCTG9uZyhJbWFnZSAqLGNvbnN0IHVuc2lnbmVk IGxvbmcpLAogIFdyaXRlQmxvYk1TQlNob3J0KEltYWdlICosY29uc3QgdW5zaWduZWQgbG9uZyks CiAgV3JpdGVCbG9iU3RyaW5nKEltYWdlICosY29uc3QgY2hhciAqKTsKCmV4dGVybiBTdHJlYW1U eXBlCiAgR2V0QmxvYlN0cmVhbVR5cGUoY29uc3QgSW1hZ2UgKik7CgpleHRlcm4gdW5zaWduZWQg Y2hhcgogICpHZXRCbG9iU3RyZWFtRGF0YShjb25zdCBJbWFnZSAqKTsKCmV4dGVybiB1bnNpZ25l ZCBpbnQKICBCbG9iVG9GaWxlKGNvbnN0IGNoYXIgKixjb25zdCB2b2lkICosY29uc3Qgc2l6ZV90 LEV4Y2VwdGlvbkluZm8gKiksCiAgSW1hZ2VUb0ZpbGUoSW1hZ2UgKixjb25zdCBjaGFyICosRXhj ZXB0aW9uSW5mbyAqKSwKICBPcGVuQmxvYihjb25zdCBJbWFnZUluZm8gKixJbWFnZSAqLGNvbnN0 IEJsb2JNb2RlLEV4Y2VwdGlvbkluZm8gKiksCiAgVW5tYXBCbG9iKHZvaWQgKixjb25zdCBzaXpl X3QpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcKICBSZWFkQmxvYkxTQkxvbmcoSW1hZ2UgKiksCiAg UmVhZEJsb2JNU0JMb25nKEltYWdlICopOwoKZXh0ZXJuIHVuc2lnbmVkIHNob3J0CiAgUmVhZEJs b2JMU0JTaG9ydChJbWFnZSAqKSwKICBSZWFkQmxvYk1TQlNob3J0KEltYWdlICopOwoKZXh0ZXJu IHZvaWQKICBBdHRhY2hCbG9iKEJsb2JJbmZvICosY29uc3Qgdm9pZCAqLGNvbnN0IHNpemVfdCks CiAgQ2xvc2VCbG9iKEltYWdlICopLAogIERlc3Ryb3lCbG9iSW5mbyhCbG9iSW5mbyAqKSwKICBE ZXRhY2hCbG9iKEJsb2JJbmZvICopLAogICpGaWxlVG9CbG9iKGNvbnN0IGNoYXIgKixzaXplX3Qg KixFeGNlcHRpb25JbmZvICopLAogIEdldEJsb2JJbmZvKEJsb2JJbmZvICopLAogICpHZXRDb25m aWd1cmVCbG9iKGNvbnN0IGNoYXIgKixjaGFyICosc2l6ZV90ICosRXhjZXB0aW9uSW5mbyAqKSwK ICAqR2V0VHlwZUJsb2IoY29uc3QgY2hhciAqLGNoYXIgKixzaXplX3QgKixFeGNlcHRpb25JbmZv ICopLAogICpHZXRNb2R1bGVCbG9iKGNvbnN0IGNoYXIgKixjaGFyICosc2l6ZV90ICosRXhjZXB0 aW9uSW5mbyAqKSwKICAqSW1hZ2VUb0Jsb2IoY29uc3QgSW1hZ2VJbmZvICosSW1hZ2UgKixzaXpl X3QgKixFeGNlcHRpb25JbmZvICopLAogICpNYXBCbG9iKGludCxjb25zdCBNYXBNb2RlLG9mZl90 LHNpemVfdCksCiAgTVNCT3JkZXJMb25nKHVuc2lnbmVkIGNoYXIgKixjb25zdCBzaXplX3QpLAog IE1TQk9yZGVyU2hvcnQodW5zaWduZWQgY2hhciAqLGNvbnN0IHNpemVfdCk7CiMgNTkgIi9ob21l L2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiAyCiMg MSAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9jb2xv ci5oIiAxCiMgMjEgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svY29sb3IuaCIKZXh0ZXJuIGNoYXIKICAqKkdldENvbG9yTGlzdChjb25zdCBjaGFyICos dW5zaWduZWQgbG9uZyAqKTsKCmV4dGVybiBjb25zdCBDb2xvckluZm8KICAqR2V0Q29sb3JJbmZv KGNvbnN0IGNoYXIgKixFeGNlcHRpb25JbmZvICopOwoKZXh0ZXJuIEluZGV4UGFja2V0CiAgQ29u c3RyYWluQ29sb3JtYXBJbmRleChJbWFnZSAqLHVuc2lnbmVkIGxvbmcpOwoKZXh0ZXJuIHVuc2ln bmVkIGludAogIEZ1enp5Q29sb3JNYXRjaChjb25zdCBQaXhlbFBhY2tldCAqLGNvbnN0IFBpeGVs UGFja2V0ICosY29uc3QgZG91YmxlKSwKICBJc0dyYXlJbWFnZShjb25zdCBJbWFnZSAqLEV4Y2Vw dGlvbkluZm8gKiksCiAgSXNNb25vY2hyb21lSW1hZ2UoY29uc3QgSW1hZ2UgKixFeGNlcHRpb25J bmZvICopLAogIElzT3BhcXVlSW1hZ2UoY29uc3QgSW1hZ2UgKixFeGNlcHRpb25JbmZvICopLAog IElzUGFsZXR0ZUltYWdlKGNvbnN0IEltYWdlICosRXhjZXB0aW9uSW5mbyAqKSwKICBMaXN0Q29s b3JJbmZvKEZJTEUgKixFeGNlcHRpb25JbmZvICopLAogIFF1ZXJ5Q29sb3JEYXRhYmFzZShjb25z dCBjaGFyICosUGl4ZWxQYWNrZXQgKixFeGNlcHRpb25JbmZvICopLAogIFF1ZXJ5Q29sb3JuYW1l KGNvbnN0IEltYWdlICosY29uc3QgUGl4ZWxQYWNrZXQgKixjb25zdCBDb21wbGlhbmNlVHlwZSxj aGFyICosCiAgICBFeGNlcHRpb25JbmZvICopOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcKICBHZXRO dW1iZXJDb2xvcnMoY29uc3QgSW1hZ2UgKixGSUxFICosRXhjZXB0aW9uSW5mbyAqKTsKCmV4dGVy biB2b2lkCiAgRGVzdHJveUNvbG9ySW5mbyh2b2lkKSwKICBHZXRDb2xvclR1cGxlKGNvbnN0IFBp eGVsUGFja2V0ICosY29uc3QgdW5zaWduZWQgaW50LGNvbnN0IHVuc2lnbmVkIGludCwKICAgIGNv bnN0IHVuc2lnbmVkIGludCxjaGFyICopOwojIDYwICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhp Y3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIgMgojIDEgIi9ob21lL2Jmcmllc2VuL3Ny Yy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5oIiAxCiMgMjYgIi9ob21lL2Jm cmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5oIgojIDEgIi9o b21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svcmVuZGVyLmgi IDEKIyAxNCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2lj ay9yZW5kZXIuaCIKdHlwZWRlZiBlbnVtCnsKICBVbmRlZmluZWRBbGlnbiwKICBMZWZ0QWxpZ24s CiAgQ2VudGVyQWxpZ24sCiAgUmlnaHRBbGlnbgp9IEFsaWduVHlwZTsKCnR5cGVkZWYgZW51bQp7 CiAgVXNlclNwYWNlLAogIFVzZXJTcGFjZU9uVXNlLAogIE9iamVjdEJvdW5kaW5nQm94Cn0gQ2xp cFBhdGhVbml0czsKCnR5cGVkZWYgZW51bQp7CiAgTm9EZWNvcmF0aW9uLAogIFVuZGVybGluZURl Y29yYXRpb24sCiAgT3ZlcmxpbmVEZWNvcmF0aW9uLAogIExpbmVUaHJvdWdoRGVjb3JhdGlvbgp9 IERlY29yYXRpb25UeXBlOwoKdHlwZWRlZiBlbnVtCnsKICBVbmRlZmluZWRSdWxlLAoKICBFdmVu T2RkUnVsZSwKICBOb25aZXJvUnVsZQp9IEZpbGxSdWxlOwoKdHlwZWRlZiBlbnVtCnsKICBVbmRl ZmluZWRHcmFkaWVudCwKICBMaW5lYXJHcmFkaWVudCwKICBSYWRpYWxHcmFkaWVudAp9IEdyYWRp ZW50VHlwZTsKCnR5cGVkZWYgZW51bQp7CiAgVW5kZWZpbmVkQ2FwLAogIEJ1dHRDYXAsCiAgUm91 bmRDYXAsCiAgU3F1YXJlQ2FwCn0gTGluZUNhcDsKCnR5cGVkZWYgZW51bQp7CiAgVW5kZWZpbmVk Sm9pbiwKICBNaXRlckpvaW4sCiAgUm91bmRKb2luLAogIEJldmVsSm9pbgp9IExpbmVKb2luOwoK dHlwZWRlZiBlbnVtCnsKICBQb2ludE1ldGhvZCA9IDAsCiAgUmVwbGFjZU1ldGhvZCwKICBGbG9v ZGZpbGxNZXRob2QsCiAgRmlsbFRvQm9yZGVyTWV0aG9kLAogIFJlc2V0TWV0aG9kCn0gUGFpbnRN ZXRob2Q7Cgp0eXBlZGVmIGVudW0KewogIFVuZGVmaW5lZFByaW1pdGl2ZSA9IDAsCiAgUG9pbnRQ cmltaXRpdmUsCiAgTGluZVByaW1pdGl2ZSwKICBSZWN0YW5nbGVQcmltaXRpdmUsCiAgUm91bmRS ZWN0YW5nbGVQcmltaXRpdmUsCiAgQXJjUHJpbWl0aXZlLAogIEVsbGlwc2VQcmltaXRpdmUsCiAg Q2lyY2xlUHJpbWl0aXZlLAogIFBvbHlsaW5lUHJpbWl0aXZlLAogIFBvbHlnb25QcmltaXRpdmUs CiAgQmV6aWVyUHJpbWl0aXZlLAogIENvbG9yUHJpbWl0aXZlLAogIE1hdHRlUHJpbWl0aXZlLAog IFRleHRQcmltaXRpdmUsCiAgSW1hZ2VQcmltaXRpdmUsCiAgUGF0aFByaW1pdGl2ZQp9IFByaW1p dGl2ZVR5cGU7Cgp0eXBlZGVmIGVudW0KewogIFVuZGVmaW5lZFJlZmVyZW5jZSwKICBHcmFkaWVu dFJlZmVyZW5jZQp9IFJlZmVyZW5jZVR5cGU7Cgp0eXBlZGVmIGVudW0KewogIFVuZGVmaW5lZFNw cmVhZCwKICBQYWRTcHJlYWQsCiAgUmVmbGVjdFNwZWFkLAogIFJlcGVhdFNwcmVhZAp9IFNwcmVh ZE1ldGhvZDsKCnR5cGVkZWYgZW51bQp7CiAgTm9ybWFsU3RyZXRjaCwKICBVbHRyYUNvbmRlbnNl ZFN0cmV0Y2gsCiAgRXh0cmFDb25kZW5zZWRTdHJldGNoLAogIENvbmRlbnNlZFN0cmV0Y2gsCiAg U2VtaUNvbmRlbnNlZFN0cmV0Y2gsCiAgU2VtaUV4cGFuZGVkU3RyZXRjaCwKICBFeHBhbmRlZFN0 cmV0Y2gsCiAgRXh0cmFFeHBhbmRlZFN0cmV0Y2gsCiAgVWx0cmFFeHBhbmRlZFN0cmV0Y2gsCiAg QW55U3RyZXRjaAp9IFN0cmV0Y2hUeXBlOwoKdHlwZWRlZiBlbnVtCnsKICBOb3JtYWxTdHlsZSwK ICBJdGFsaWNTdHlsZSwKICBPYmxpcXVlU3R5bGUsCiAgQW55U3R5bGUKfSBTdHlsZVR5cGU7CgoK Cgp0eXBlZGVmIHN0cnVjdCBfR3JhZGllbnRJbmZvCnsKICBHcmFkaWVudFR5cGUKICAgIHR5cGU7 CgogIFBpeGVsUGFja2V0CiAgICBjb2xvcjsKCiAgU2VnbWVudEluZm8KICAgIHN0b3A7CgogIHVu c2lnbmVkIGxvbmcKICAgIGxlbmd0aDsKCiAgU3ByZWFkTWV0aG9kCiAgICBzcHJlYWQ7CgogIHVu c2lnbmVkIGxvbmcKICAgIHNpZ25hdHVyZTsKCiAgc3RydWN0IF9HcmFkaWVudEluZm8KICAgICpw cmV2aW91cywKICAgICpuZXh0Owp9IEdyYWRpZW50SW5mbzsKCnR5cGVkZWYgc3RydWN0IF9FbGVt ZW50UmVmZXJlbmNlCnsKICBjaGFyCiAgICAqaWQ7CgogIFJlZmVyZW5jZVR5cGUKICAgIHR5cGU7 CgogIEdyYWRpZW50SW5mbwogICAgZ3JhZGllbnQ7CgogIHVuc2lnbmVkIGxvbmcKICAgIHNpZ25h dHVyZTsKCiAgc3RydWN0IF9FbGVtZW50UmVmZXJlbmNlCiAgICAqcHJldmlvdXMsCiAgICAqbmV4 dDsKfSBFbGVtZW50UmVmZXJlbmNlOwoKdHlwZWRlZiBzdHJ1Y3QgX0RyYXdJbmZvCnsKICBjaGFy CiAgICAqcHJpbWl0aXZlLAogICAgKmdlb21ldHJ5OwoKICBBZmZpbmVNYXRyaXgKICAgIGFmZmlu ZTsKCiAgR3Jhdml0eVR5cGUKICAgIGdyYXZpdHk7CgogIFBpeGVsUGFja2V0CiAgICBmaWxsLAog ICAgc3Ryb2tlOwoKICBkb3VibGUKICAgIHN0cm9rZV93aWR0aDsKCiAgR3JhZGllbnRJbmZvCiAg ICBncmFkaWVudDsKCiAgSW1hZ2UKICAgICpmaWxsX3BhdHRlcm4sCiAgICAqdGlsZSwKICAgICpz dHJva2VfcGF0dGVybjsKCiAgdW5zaWduZWQgaW50CiAgICBzdHJva2VfYW50aWFsaWFzLAogICAg dGV4dF9hbnRpYWxpYXM7CgogIEZpbGxSdWxlCiAgICBmaWxsX3J1bGU7CgogIExpbmVDYXAKICAg IGxpbmVjYXA7CgogIExpbmVKb2luCiAgICBsaW5lam9pbjsKCiAgdW5zaWduZWQgbG9uZwogICAg bWl0ZXJsaW1pdDsKCiAgZG91YmxlCiAgICBkYXNoX29mZnNldDsKCiAgRGVjb3JhdGlvblR5cGUK ICAgIGRlY29yYXRlOwoKICBDb21wb3NpdGVPcGVyYXRvcgogICAgY29tcG9zZTsKCiAgY2hhcgog ICAgKnRleHQsCiAgICAqZm9udCwKICAgICpmYW1pbHk7CgogIFN0eWxlVHlwZQogICAgc3R5bGU7 CgogIFN0cmV0Y2hUeXBlCiAgICBzdHJldGNoOwoKICB1bnNpZ25lZCBsb25nCiAgICB3ZWlnaHQ7 CgogIGNoYXIKICAgICplbmNvZGluZzsKCiAgZG91YmxlCiAgICBwb2ludHNpemU7CgogIGNoYXIK ICAgICpkZW5zaXR5OwoKICBBbGlnblR5cGUKICAgIGFsaWduOwoKICBQaXhlbFBhY2tldAogICAg dW5kZXJjb2xvciwKICAgIGJvcmRlcl9jb2xvcjsKCiAgY2hhcgogICAgKnNlcnZlcl9uYW1lOwoK ICBkb3VibGUKICAgICpkYXNoX3BhdHRlcm47CgogIGNoYXIKICAgICpjbGlwX3BhdGg7CgogIFNl Z21lbnRJbmZvCiAgICBib3VuZHM7CgogIENsaXBQYXRoVW5pdHMKICAgIGNsaXBfdW5pdHM7Cgog IFF1YW50dW0KICAgIG9wYWNpdHk7CgogIHVuc2lnbmVkIGludAogICAgcmVuZGVyLAogICAgZGVi dWc7CgogIEVsZW1lbnRSZWZlcmVuY2UKICAgIGVsZW1lbnRfcmVmZXJlbmNlOwoKICB1bnNpZ25l ZCBsb25nCiAgICBzaWduYXR1cmU7Cn0gRHJhd0luZm87Cgp0eXBlZGVmIHN0cnVjdCBfRWxlbWVu dEluZm8KewogIGRvdWJsZQogICAgY3gsCiAgICBjeSwKICAgIG1ham9yLAogICAgbWlub3IsCiAg ICBhbmdsZTsKfSBFbGVtZW50SW5mbzsKCnR5cGVkZWYgc3RydWN0IF9Qb2ludEluZm8KewogIGRv dWJsZQogICAgeCwKICAgIHk7Cn0gUG9pbnRJbmZvOwoKdHlwZWRlZiBzdHJ1Y3QgX1ByaW1pdGl2 ZUluZm8KewogIFBvaW50SW5mbwogICAgcG9pbnQ7CgogIHVuc2lnbmVkIGxvbmcKICAgIGNvb3Jk aW5hdGVzOwoKICBQcmltaXRpdmVUeXBlCiAgICBwcmltaXRpdmU7CgogIFBhaW50TWV0aG9kCiAg ICBtZXRob2Q7CgogIGNoYXIKICAgICp0ZXh0Owp9IFByaW1pdGl2ZUluZm87Cgp0eXBlZGVmIHN0 cnVjdCBfVHlwZUluZm8KewogIGNvbnN0IGNoYXIKICAgICpwYXRoLAogICAgKm5hbWUsCiAgICAq ZGVzY3JpcHRpb24sCiAgICAqZmFtaWx5OwoKICBTdHlsZVR5cGUKICAgIHN0eWxlOwoKICBTdHJl dGNoVHlwZQogICAgc3RyZXRjaDsKCiAgdW5zaWduZWQgbG9uZwogICAgd2VpZ2h0OwoKICBjb25z dCBjaGFyCiAgICAqZW5jb2RpbmcsCiAgICAqZm91bmRyeSwKICAgICpmb3JtYXQsCiAgICAqbWV0 cmljcywKICAgICpnbHlwaHM7CgogIHVuc2lnbmVkIGludAogICAgc3RlYWx0aDsKCiAgdW5zaWdu ZWQgbG9uZwogICAgc2lnbmF0dXJlOwoKICBzdHJ1Y3QgX1R5cGVJbmZvCiAgICAqcHJldmlvdXMs CiAgICAqbmV4dDsKfSBUeXBlSW5mbzsKCnR5cGVkZWYgc3RydWN0IF9UeXBlTWV0cmljCnsKICBQ b2ludEluZm8KICAgIHBpeGVsc19wZXJfZW07CgogIGRvdWJsZQogICAgYXNjZW50LAogICAgZGVz Y2VudCwKICAgIHdpZHRoLAogICAgaGVpZ2h0LAogICAgbWF4X2FkdmFuY2U7CgogIFNlZ21lbnRJ bmZvCiAgICBib3VuZHM7CgogIGRvdWJsZQogICAgdW5kZXJsaW5lX3Bvc2l0aW9uLAogICAgdW5k ZXJsaW5lX3RoaWNrbmVzczsKfSBUeXBlTWV0cmljOwoKCgoKCmV4dGVybiBjaGFyCiAgKipHZXRU eXBlTGlzdChjb25zdCBjaGFyICosdW5zaWduZWQgbG9uZyAqKTsKCmV4dGVybiBjb25zdCBUeXBl SW5mbwogICpHZXRUeXBlSW5mbyhjb25zdCBjaGFyICosRXhjZXB0aW9uSW5mbyAqKSwKICAqR2V0 VHlwZUluZm9CeUZhbWlseShjb25zdCBjaGFyICosY29uc3QgU3R5bGVUeXBlLGNvbnN0IFN0cmV0 Y2hUeXBlLAogICAgY29uc3QgdW5zaWduZWQgbG9uZyxFeGNlcHRpb25JbmZvICopOwoKZXh0ZXJu IERyYXdJbmZvCiAgKkNsb25lRHJhd0luZm8oY29uc3QgSW1hZ2VJbmZvICosY29uc3QgRHJhd0lu Zm8gKik7CgpleHRlcm4gdW5zaWduZWQgaW50CiAgQW5ub3RhdGVJbWFnZShJbWFnZSAqLGNvbnN0 IERyYXdJbmZvICopLAogIERyYXdBZmZpbmVJbWFnZShJbWFnZSAqLGNvbnN0IEltYWdlICosY29u c3QgQWZmaW5lTWF0cml4ICopLAogIERyYXdDbGlwUGF0aChJbWFnZSAqLGNvbnN0IERyYXdJbmZv ICosY29uc3QgY2hhciAqKSwKICBEcmF3SW1hZ2UoSW1hZ2UgKixjb25zdCBEcmF3SW5mbyAqKSwK ICBEcmF3UGF0dGVyblBhdGgoSW1hZ2UgKixjb25zdCBEcmF3SW5mbyAqLGNvbnN0IGNoYXIgKixJ bWFnZSAqKiksCiAgRHJhd1ByaW1pdGl2ZShJbWFnZSAqLGNvbnN0IERyYXdJbmZvICosY29uc3Qg UHJpbWl0aXZlSW5mbyAqKSwKICBHZXRUeXBlTWV0cmljcyhJbWFnZSAqLGNvbnN0IERyYXdJbmZv ICosVHlwZU1ldHJpYyAqKSwKICBMaXN0VHlwZUluZm8oRklMRSAqLEV4Y2VwdGlvbkluZm8gKik7 CgpleHRlcm4gdm9pZAogIERlc3Ryb3lEcmF3SW5mbyhEcmF3SW5mbyAqKSwKICBEZXN0cm95VHlw ZUluZm8odm9pZCksCiAgR2V0RHJhd0luZm8oY29uc3QgSW1hZ2VJbmZvICosRHJhd0luZm8gKik7 CiMgMjcgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2sv ZHJhdy5oIiAyCgoKdHlwZWRlZiBzdHJ1Y3QgX0RyYXdDb250ZXh0ICpEcmF3Q29udGV4dDsKCmV4 dGVybiBDbGlwUGF0aFVuaXRzCiAgRHJhd0dldENsaXBVbml0cyhEcmF3Q29udGV4dCBjb250ZXh0 KTsKCmV4dGVybiBEZWNvcmF0aW9uVHlwZQogIERyYXdHZXRUZXh0RGVjb3JhdGlvbihEcmF3Q29u dGV4dCBjb250ZXh0KTsKCmV4dGVybiBEcmF3Q29udGV4dAogIERyYXdBbGxvY2F0ZUNvbnRleHQo Y29uc3QgRHJhd0luZm8gKmRyYXdfaW5mbywgSW1hZ2UgKmltYWdlKTsKCmV4dGVybiBGaWxsUnVs ZQogIERyYXdHZXRDbGlwUnVsZShEcmF3Q29udGV4dCBjb250ZXh0KSwKICBEcmF3R2V0RmlsbFJ1 bGUoRHJhd0NvbnRleHQgY29udGV4dCk7CgpleHRlcm4gR3Jhdml0eVR5cGUKICBEcmF3R2V0R3Jh dml0eShEcmF3Q29udGV4dCBjb250ZXh0KTsKCmV4dGVybiBMaW5lQ2FwCiAgRHJhd0dldFN0cm9r ZUxpbmVDYXAoRHJhd0NvbnRleHQgY29udGV4dCk7CgpleHRlcm4gTGluZUpvaW4KICBEcmF3R2V0 U3Ryb2tlTGluZUpvaW4oRHJhd0NvbnRleHQgY29udGV4dCk7CgpleHRlcm4gUGl4ZWxQYWNrZXQK ICBEcmF3R2V0RmlsbENvbG9yKERyYXdDb250ZXh0IGNvbnRleHQpLAogIERyYXdHZXRTdHJva2VD b2xvcihEcmF3Q29udGV4dCBjb250ZXh0KSwKICBEcmF3R2V0VGV4dFVuZGVyQ29sb3IoRHJhd0Nv bnRleHQgY29udGV4dCk7CgpleHRlcm4gU3RyZXRjaFR5cGUKICBEcmF3R2V0Rm9udFN0cmV0Y2go RHJhd0NvbnRleHQgY29udGV4dCk7CgpleHRlcm4gU3R5bGVUeXBlCiAgRHJhd0dldEZvbnRTdHls ZShEcmF3Q29udGV4dCBjb250ZXh0KTsKCmV4dGVybiBjaGFyCiAgKkRyYXdHZXRDbGlwUGF0aChE cmF3Q29udGV4dCBjb250ZXh0KSwKICAqRHJhd0dldEZvbnQoRHJhd0NvbnRleHQgY29udGV4dCks CiAgKkRyYXdHZXRGb250RmFtaWx5KERyYXdDb250ZXh0IGNvbnRleHQpLAogICpEcmF3R2V0VGV4 dEVuY29kaW5nKERyYXdDb250ZXh0IGNvbnRleHQpOwoKZXh0ZXJuIGludAogIERyYXdSZW5kZXIo Y29uc3QgRHJhd0NvbnRleHQgY29udGV4dCk7CgpleHRlcm4gdW5zaWduZWQgaW50CiAgRHJhd0dl dFN0cm9rZUFudGlhbGlhcyhEcmF3Q29udGV4dCBjb250ZXh0KSwKICBEcmF3R2V0VGV4dEFudGlh bGlhcyhEcmF3Q29udGV4dCBjb250ZXh0KTsKCmV4dGVybiB1bnNpZ25lZCBsb25nCiAgRHJhd0dl dEZvbnRXZWlnaHQoRHJhd0NvbnRleHQgY29udGV4dCksCiAgRHJhd0dldFN0cm9rZU1pdGVyTGlt aXQoRHJhd0NvbnRleHQgY29udGV4dCk7CgpleHRlcm4gZG91YmxlCiAgRHJhd0dldEZpbGxPcGFj aXR5KERyYXdDb250ZXh0IGNvbnRleHQpLAogIERyYXdHZXRGb250U2l6ZShEcmF3Q29udGV4dCBj b250ZXh0KSwKICAqRHJhd0dldFN0cm9rZURhc2hBcnJheShEcmF3Q29udGV4dCBjb250ZXh0LCBz aXplX3QgKm51bV9lbGVtcyksCiAgRHJhd0dldFN0cm9rZURhc2hPZmZzZXQoRHJhd0NvbnRleHQg Y29udGV4dCksCiAgRHJhd0dldFN0cm9rZU9wYWNpdHkoRHJhd0NvbnRleHQgY29udGV4dCksCiAg RHJhd0dldFN0cm9rZVdpZHRoKERyYXdDb250ZXh0IGNvbnRleHQpOwoKZXh0ZXJuIHZvaWQKICBE cmF3QWZmaW5lKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IEFmZmluZU1hdHJpeCAqYWZmaW5l KSwKICBEcmF3QW5ub3RhdGlvbihEcmF3Q29udGV4dCBjb250ZXh0LAogICAgY29uc3QgZG91Ymxl IHgsIGNvbnN0IGRvdWJsZSB5LAogICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGV4dCksCiAgRHJh d0FyYyhEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgY29uc3QgZG91YmxlIHN4LCBjb25z dCBkb3VibGUgc3ksCiAgICAgICAgICBjb25zdCBkb3VibGUgZXgsIGNvbnN0IGRvdWJsZSBleSwK ICAgICAgICAgIGNvbnN0IGRvdWJsZSBzZCwgY29uc3QgZG91YmxlIGVkKSwKICBEcmF3QmV6aWVy KERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICBjb25zdCBzaXplX3QgbnVtX2Nvb3Jk cywgY29uc3QgUG9pbnRJbmZvICogY29vcmRpbmF0ZXMpLAogIERyYXdDaXJjbGUoRHJhd0NvbnRl eHQgY29udGV4dCwKICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBveCwgY29uc3QgZG91YmxlIG95 LAogICAgICAgICAgICAgY29uc3QgZG91YmxlIHB4LCBjb25zdCBkb3VibGUgcHkpLAogIERyYXdD b2xvcihEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICBjb25zdCBkb3VibGUgeCwgY29u c3QgZG91YmxlIHksCiAgICAgICAgICAgIGNvbnN0IFBhaW50TWV0aG9kIHBhaW50TWV0aG9kKSwK ICBEcmF3Q29tbWVudChEcmF3Q29udGV4dCBjb250ZXh0LGNvbnN0IGNoYXIqIGNvbW1lbnQpLAog IERyYXdEZXN0cm95Q29udGV4dChEcmF3Q29udGV4dCBjb250ZXh0KSwKICBEcmF3RWxsaXBzZShE cmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBveCwgY29uc3Qg ZG91YmxlIG95LAogICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSByeCwgY29uc3QgZG91YmxlIHJ5 LAogICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBzdGFydCwgY29uc3QgZG91YmxlIGVuZCksCiAg RHJhd0NvbXBvc2l0ZShEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAgY29uc3Qg Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlX29wZXJhdG9yLAogICAgICAgICAgICAgICAgY29u c3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5LAogICAgICAgICAgICAgICAgY29uc3QgZG91Ymxl IHdpZHRoLCBjb25zdCBkb3VibGUgaGVpZ2h0LAogICAgICAgICAgICAgICAgY29uc3QgSW1hZ2Ug KiBpbWFnZSApLAogIERyYXdMaW5lKERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgY29u c3QgZG91YmxlIHN4LCBjb25zdCBkb3VibGUgc3ksCiAgICAgICAgICAgY29uc3QgZG91YmxlIGV4 LCBjb25zdCBkb3VibGUgZXkpLAogIERyYXdNYXR0ZShEcmF3Q29udGV4dCBjb250ZXh0LAogICAg ICAgICAgICBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHksCiAgICAgICAgICAgIGNvbnN0 IFBhaW50TWV0aG9kIHBhaW50X21ldGhvZCksCiAgRHJhd1BhdGhDbG9zZShEcmF3Q29udGV4dCBj b250ZXh0KSwKICBEcmF3UGF0aEN1cnZlVG9BYnNvbHV0ZShEcmF3Q29udGV4dCBjb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4MSwgY29uc3QgZG91YmxlIHkx LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4MiwgY29uc3QgZG91Ymxl IHkyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3Vi bGUgeSksCiAgRHJhd1BhdGhDdXJ2ZVRvUmVsYXRpdmUoRHJhd0NvbnRleHQgY29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeDEsIGNvbnN0IGRvdWJsZSB5MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeDIsIGNvbnN0IGRvdWJsZSB5 MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91Ymxl IHkpLAogIERyYXdQYXRoQ3VydmVUb1F1YWRyYXRpY0JlemllckFic29sdXRlKERyYXdDb250ZXh0 IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg ZG91YmxlIHgxLCBjb25zdCBkb3VibGUgeTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KSwKICBEcmF3UGF0aEN1 cnZlVG9RdWFkcmF0aWNCZXppZXJSZWxhdGl2ZShEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4MSwgY29uc3Qg ZG91YmxlIHkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSksCiAgRHJhd1BhdGhDdXJ2ZVRvUXVhZHJhdGljQmV6 aWVyU21vb3RoQWJzb2x1dGUoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91Ymxl IHkpLAogIERyYXdQYXRoQ3VydmVUb1F1YWRyYXRpY0JlemllclNtb290aFJlbGF0aXZlKERyYXdD b250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KSwKICBEcmF3UGF0aEN1cnZlVG9T bW9vdGhBYnNvbHV0ZShEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGRvdWJsZSB4MiwgY29uc3QgZG91YmxlIHkyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSksCiAgRHJh d1BhdGhDdXJ2ZVRvU21vb3RoUmVsYXRpdmUoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeDIsIGNvbnN0IGRvdWJsZSB5MiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91 YmxlIHkpLAogIERyYXdQYXRoRWxsaXB0aWNBcmNBYnNvbHV0ZShEcmF3Q29udGV4dCBjb250ZXh0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgcngsIGNvbnN0IGRv dWJsZSByeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHhfYXhp c19yb3RhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxh cmdlX2FyY19mbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg c3dlZXBfZmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHgs IGNvbnN0IGRvdWJsZSB5KSwKICBEcmF3UGF0aEVsbGlwdGljQXJjUmVsYXRpdmUoRHJhd0NvbnRl eHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHJ4 LCBjb25zdCBkb3VibGUgcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRv dWJsZSB4X2F4aXNfcm90YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBsYXJnZV9hcmNfZmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IHN3ZWVwX2ZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSksCiAgRHJhd1BhdGhGaW5pc2goRHJhd0NvbnRleHQg Y29udGV4dCksCiAgRHJhd1BhdGhMaW5lVG9BYnNvbHV0ZShEcmF3Q29udGV4dCBjb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KSwK ICBEcmF3UGF0aExpbmVUb1JlbGF0aXZlKERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpLAogIERyYXdQYXRo TGluZVRvSG9yaXpvbnRhbEFic29sdXRlKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGRvdWJs ZSB4KSwKICBEcmF3UGF0aExpbmVUb0hvcml6b250YWxSZWxhdGl2ZShEcmF3Q29udGV4dCBjb250 ZXh0LCBjb25zdCBkb3VibGUgeCksCiAgRHJhd1BhdGhMaW5lVG9WZXJ0aWNhbEFic29sdXRlKERy YXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGRvdWJsZSB5KSwKICBEcmF3UGF0aExpbmVUb1ZlcnRp Y2FsUmVsYXRpdmUoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgZG91YmxlIHkpLAogIERyYXdQ YXRoTW92ZVRvQWJzb2x1dGUoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSksCiAgRHJhd1BhdGhNb3ZlVG9S ZWxhdGl2ZShEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KSwKICBEcmF3UGF0aFN0YXJ0KERyYXdDb250ZXh0 IGNvbnRleHQpLAogIERyYXdQb2ludChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBkb3VibGUg eCwgY29uc3QgZG91YmxlIHkpLAogIERyYXdQb2x5Z29uKERyYXdDb250ZXh0IGNvbnRleHQsCiAg ICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG51bV9jb29yZHMsIGNvbnN0IFBvaW50SW5mbyAqIGNv b3JkaW5hdGVzKSwKICBEcmF3UG9seWxpbmUoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAg ICAgICAgY29uc3Qgc2l6ZV90IG51bV9jb29yZHMsIGNvbnN0IFBvaW50SW5mbyAqIGNvb3JkaW5h dGVzKSwKICBEcmF3UG9wQ2xpcFBhdGgoRHJhd0NvbnRleHQgY29udGV4dCksCiAgRHJhd1BvcERl ZnMoRHJhd0NvbnRleHQgY29udGV4dCksCiAgRHJhd1BvcEdyYXBoaWNDb250ZXh0KERyYXdDb250 ZXh0IGNvbnRleHQpLAogIERyYXdQb3BQYXR0ZXJuKERyYXdDb250ZXh0IGNvbnRleHQpLAogIERy YXdQdXNoQ2xpcFBhdGgoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgY2hhciAqY2xpcF9wYXRo X2lkKSwKICBEcmF3UHVzaERlZnMoRHJhd0NvbnRleHQgY29udGV4dCksCiAgRHJhd1B1c2hHcmFw aGljQ29udGV4dChEcmF3Q29udGV4dCBjb250ZXh0KSwKICBEcmF3UHVzaFBhdHRlcm4oRHJhd0Nv bnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0dGVybl9pZCwK ICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5LAogICAgICAg ICAgICAgICAgICBjb25zdCBkb3VibGUgd2lkdGgsIGNvbnN0IGRvdWJsZSBoZWlnaHQpLAogIERy YXdSZWN0YW5nbGUoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgIGNvbnN0IGRv dWJsZSB4MSwgY29uc3QgZG91YmxlIHkxLAogICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHgy LCBjb25zdCBkb3VibGUgeTIpLAogIERyYXdSb3VuZFJlY3RhbmdsZShEcmF3Q29udGV4dCBjb250 ZXh0LAogICAgICAgICAgICAgICAgICAgICBkb3VibGUgeDEsIGRvdWJsZSB5MSwKICAgICAgICAg ICAgICAgICAgICAgZG91YmxlIHgyLCBkb3VibGUgeTIsCiAgICAgICAgICAgICAgICAgICAgIGRv dWJsZSByeCwgZG91YmxlIHJ5KSwKICBEcmF3U2NhbGUoRHJhd0NvbnRleHQgY29udGV4dCwgY29u c3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KSwKICBEcmF3U2V0Q2xpcFBhdGgoRHJhd0NvbnRl eHQgY29udGV4dCwgY29uc3QgY2hhciAqY2xpcF9wYXRoKSwKICBEcmF3U2V0Q2xpcFJ1bGUoRHJh d0NvbnRleHQgY29udGV4dCwgY29uc3QgRmlsbFJ1bGUgZmlsbF9ydWxlKSwKICBEcmF3U2V0Q2xp cFVuaXRzKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IENsaXBQYXRoVW5pdHMgY2xpcF91bml0 cyksCiAgRHJhd1NldEZpbGxDb2xvcihEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBQaXhlbFBh Y2tldCAqZmlsbF9jb2xvciksCiAgRHJhd1NldEZpbGxDb2xvclN0cmluZyhEcmF3Q29udGV4dCBj b250ZXh0LCBjb25zdCBjaGFyICpmaWxsX2NvbG9yKSwKICBEcmF3U2V0RmlsbE9wYWNpdHkoRHJh d0NvbnRleHQgY29udGV4dCwgY29uc3QgZG91YmxlIGZpbGxfb3BhY2l0eSksCiAgRHJhd1NldEZp bGxSdWxlKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IEZpbGxSdWxlIGZpbGxfcnVsZSksCiAg RHJhd1NldEZpbGxQYXR0ZXJuVVJMKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNoYXIgKmZp bGxfdXJsKSwKICBEcmF3U2V0Rm9udChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyICpm b250X25hbWUpLAogIERyYXdTZXRGb250RmFtaWx5KERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0 IGNoYXIgKmZvbnRfZmFtaWx5KSwKICBEcmF3U2V0Rm9udFNpemUoRHJhd0NvbnRleHQgY29udGV4 dCwgY29uc3QgZG91YmxlIGZvbnRfcG9pbnRzaXplKSwKICBEcmF3U2V0Rm9udFN0cmV0Y2goRHJh d0NvbnRleHQgY29udGV4dCwgY29uc3QgU3RyZXRjaFR5cGUgZm9udF9zdHJldGNoKSwKICBEcmF3 U2V0Rm9udFN0eWxlKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IFN0eWxlVHlwZSBmb250X3N0 eWxlKSwKICBEcmF3U2V0Rm9udFdlaWdodChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCB1bnNp Z25lZCBsb25nIGZvbnRfd2VpZ2h0KSwKICBEcmF3U2V0R3Jhdml0eShEcmF3Q29udGV4dCBjb250 ZXh0LCBjb25zdCBHcmF2aXR5VHlwZSBncmF2aXR5KSwKICBEcmF3Um90YXRlKERyYXdDb250ZXh0 IGNvbnRleHQsIGNvbnN0IGRvdWJsZSBkZWdyZWVzKSwKICBEcmF3U2tld1goRHJhd0NvbnRleHQg Y29udGV4dCwgY29uc3QgZG91YmxlIGRlZ3JlZXMpLAogIERyYXdTa2V3WShEcmF3Q29udGV4dCBj b250ZXh0LCBjb25zdCBkb3VibGUgZGVncmVlcyksCgoKCgogIERyYXdTZXRTdHJva2VBbnRpYWxp YXMoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgdW5zaWduZWQgaW50IHRydWVfZmFsc2UpLAog IERyYXdTZXRTdHJva2VDb2xvcihEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBQaXhlbFBhY2tl dCAqc3Ryb2tlX2NvbG9yKSwKICBEcmF3U2V0U3Ryb2tlQ29sb3JTdHJpbmcoRHJhd0NvbnRleHQg Y29udGV4dCwgY29uc3QgY2hhciAqc3Ryb2tlX2NvbG9yKSwKICBEcmF3U2V0U3Ryb2tlRGFzaEFy cmF5KERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IHNpemVfdCBudW1fZWxlbXMsCiAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgKmRhc2hhcnJheSksCiAgRHJhd1NldFN0cm9r ZURhc2hPZmZzZXQoRHJhd0NvbnRleHQgY29udGV4dCxjb25zdCBkb3VibGUgZGFzaG9mZnNldCks CiAgRHJhd1NldFN0cm9rZUxpbmVDYXAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgTGluZUNh cCBsaW5lY2FwKSwKICBEcmF3U2V0U3Ryb2tlTGluZUpvaW4oRHJhd0NvbnRleHQgY29udGV4dCwg Y29uc3QgTGluZUpvaW4gbGluZWpvaW4pLAogIERyYXdTZXRTdHJva2VNaXRlckxpbWl0KERyYXdD b250ZXh0IGNvbnRleHQsY29uc3QgdW5zaWduZWQgbG9uZyBtaXRlcmxpbWl0KSwKICBEcmF3U2V0 U3Ryb2tlT3BhY2l0eShEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBkb3VibGUgb3BhY2l0eSks CiAgRHJhd1NldFN0cm9rZVBhdHRlcm5VUkwoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgY2hh ciogc3Ryb2tlX3VybCksCiAgRHJhd1NldFN0cm9rZVdpZHRoKERyYXdDb250ZXh0IGNvbnRleHQs IGNvbnN0IGRvdWJsZSB3aWR0aCksCiAgRHJhd1NldFRleHRBbnRpYWxpYXMoRHJhd0NvbnRleHQg Y29udGV4dCwgY29uc3QgdW5zaWduZWQgaW50IHRydWVfZmFsc2UpLAogIERyYXdTZXRUZXh0RGVj b3JhdGlvbihEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBEZWNvcmF0aW9uVHlwZSBkZWNvcmF0 aW9uKSwKICBEcmF3U2V0VGV4dEVuY29kaW5nKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNo YXIgKmVuY29kaW5nKSwKICBEcmF3U2V0VGV4dFVuZGVyQ29sb3IoRHJhd0NvbnRleHQgY29udGV4 dCwgY29uc3QgUGl4ZWxQYWNrZXQgKmNvbG9yKSwKICBEcmF3U2V0VGV4dFVuZGVyQ29sb3JTdHJp bmcoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgY2hhciAqdW5kZXJfY29sb3IpLAogIERyYXdT ZXRWaWV3Ym94KERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgdW5zaWduZWQg bG9uZyB4MSwgdW5zaWduZWQgbG9uZyB5MSwKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IHgyLCB1bnNpZ25lZCBsb25nIHkyKSwKICBEcmF3VHJhbnNsYXRlKERyYXdDb250ZXh0IGNvbnRl eHQsIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSk7CiMgNjEgIi9ob21lL2Jmcmllc2Vu L3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiAyCiMgMSAiL2hvbWUv YmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9nZW0uaCIgMQojIDE0 ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2dlbS5o IgpleHRlcm4gZG91YmxlCiAgRXhwYW5kQWZmaW5lKGNvbnN0IEFmZmluZU1hdHJpeCAqKTsKCmV4 dGVybiBpbnQKICBHZXRPcHRpbWFsS2VybmVsV2lkdGgoY29uc3QgZG91YmxlLGNvbnN0IGRvdWJs ZSksCiAgR2V0T3B0aW1hbEtlcm5lbFdpZHRoMUQoY29uc3QgZG91YmxlLGNvbnN0IGRvdWJsZSks CiAgR2V0T3B0aW1hbEtlcm5lbFdpZHRoMkQoY29uc3QgZG91YmxlLGNvbnN0IGRvdWJsZSk7Cgpl eHRlcm4gUGl4ZWxQYWNrZXQKICBJbnRlcnBvbGF0ZUNvbG9yKGNvbnN0IEltYWdlICosY29uc3Qg ZG91YmxlLGNvbnN0IGRvdWJsZSxFeGNlcHRpb25JbmZvICopOwoKZXh0ZXJuIFF1YW50dW0KICBH ZW5lcmF0ZU5vaXNlKGNvbnN0IFF1YW50dW0sY29uc3QgTm9pc2VUeXBlKTsKCmV4dGVybiB2b2lk CiAgQ29udHJhc3QoY29uc3QgaW50LFF1YW50dW0gKixRdWFudHVtICosUXVhbnR1bSAqKSwKICBI U0xUcmFuc2Zvcm0oY29uc3QgZG91YmxlLGNvbnN0IGRvdWJsZSxjb25zdCBkb3VibGUsUXVhbnR1 bSAqLFF1YW50dW0gKiwKICAgIFF1YW50dW0gKiksCiAgSFdCVHJhbnNmb3JtKGNvbnN0IGRvdWJs ZSxjb25zdCBkb3VibGUsY29uc3QgZG91YmxlLFF1YW50dW0gKixRdWFudHVtICosCiAgICBRdWFu dHVtICopLAogIEh1bGwoY29uc3QgbG9uZyxjb25zdCBsb25nLGNvbnN0IHVuc2lnbmVkIGxvbmcs Y29uc3QgdW5zaWduZWQgbG9uZyxRdWFudHVtICosCiAgICBRdWFudHVtICosY29uc3QgaW50KSwK ICBJZGVudGl0eUFmZmluZShBZmZpbmVNYXRyaXggKiksCiAgTW9kdWxhdGUoY29uc3QgZG91Ymxl LGNvbnN0IGRvdWJsZSxjb25zdCBkb3VibGUsUXVhbnR1bSAqLFF1YW50dW0gKiwKICAgIFF1YW50 dW0gKiksCiAgVHJhbnNmb3JtSFNMKGNvbnN0IFF1YW50dW0sY29uc3QgUXVhbnR1bSxjb25zdCBR dWFudHVtLGRvdWJsZSAqLGRvdWJsZSAqLAogICAgZG91YmxlICopLAogIFRyYW5zZm9ybUhXQihj b25zdCBRdWFudHVtLGNvbnN0IFF1YW50dW0sY29uc3QgUXVhbnR1bSxkb3VibGUgKixkb3VibGUg KiwKICAgIGRvdWJsZSAqKSwKICBVcHNhbXBsZShjb25zdCB1bnNpZ25lZCBsb25nLGNvbnN0IHVu c2lnbmVkIGxvbmcsY29uc3QgdW5zaWduZWQgbG9uZywKICAgIHVuc2lnbmVkIGNoYXIgKik7CiMg NjIgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJh dy5jIiAyCiMgMSAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21h Z2ljay9sb2cuaCIgMQojIDE3ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NN YWdpY2svbWFnaWNrL2xvZy5oIgp0eXBlZGVmIGVudW0KewogIFVuZGVmaW5lZEV2ZW50cyA9IDB4 MDAwMCwKICBOb0V2ZW50cyA9IDB4MDAwMCwKICBDb25maWd1cmVFdmVudCA9IDB4MDAwMSwKICBB bm5vdGF0ZUV2ZW50ID0gMHgwMDAyLAogIFJlbmRlckV2ZW50ID0gMHgwMDA0LAogIFRyYW5zZm9y bUV2ZW50ID0gMHgwMDA4LAogIExvY2FsZUV2ZW50ID0gMHgwMDEwLAogIENvZGVyRXZlbnQgPSAw eDAwMjAsCiAgWDExRXZlbnQgPSAweDAwNDAsCiAgQ2FjaGVFdmVudCA9IDB4MDA4MCwKICBCbG9i RXZlbnQgPSAweDAxMDAsCiAgRGVwcmVjYXRlRXZlbnQgPSAweDAyMDAsCiAgVXNlckV2ZW50ID0g MHgwNDAwLAogIEFsbEV2ZW50cyA9IDB4RkZGRgp9IExvZ0V2ZW50VHlwZTsKCgoKCmV4dGVybiB1 bnNpZ25lZCBpbnQKICBJc0V2ZW50TG9nZ2luZyh2b2lkKSwKCiAgTG9nTWFnaWNrRXZlbnQoY29u c3QgTG9nRXZlbnRUeXBlLGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICosCiAgICBjb25zdCB1bnNp Z25lZCBsb25nLGNvbnN0IGNoYXIgKiwuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRm LDUsNikpKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZwogIFNldExvZ0V2ZW50TWFzayhjb25z dCBjaGFyICopOwoKZXh0ZXJuIHZvaWQKICBEZXN0cm95TG9nSW5mbyh2b2lkKSwKICBTZXRMb2dG b3JtYXQoY29uc3QgY2hhciAqKTsKIyA2MyAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dy YXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiIDIKIyAxICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3Jh cGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL21hZ2ljay5oIiAxCiMgMTEgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svbWFnaWNrLmgiCnR5cGVkZWYg SW1hZ2UKICAqKCpEZWNvZGVySGFuZGxlcikoY29uc3QgSW1hZ2VJbmZvICosRXhjZXB0aW9uSW5m byAqKTsKCnR5cGVkZWYgdW5zaWduZWQgaW50CiAgKCpFbmNvZGVySGFuZGxlcikoY29uc3QgSW1h Z2VJbmZvICosSW1hZ2UgKiksCiAgKCpNYWdpY2tIYW5kbGVyKShjb25zdCB1bnNpZ25lZCBjaGFy ICosY29uc3Qgc2l6ZV90KTsKCnR5cGVkZWYgc3RydWN0IF9NYWdpY2tJbmZvCnsKICBjb25zdCBj aGFyCiAgICAqbmFtZSwKICAgICpkZXNjcmlwdGlvbiwKICAgICpub3RlLAogICAgKnZlcnNpb24s CiAgICAqbW9kdWxlOwoKICBJbWFnZUluZm8KICAgICppbWFnZV9pbmZvOwoKICBEZWNvZGVySGFu ZGxlcgogICAgZGVjb2RlcjsKCiAgRW5jb2RlckhhbmRsZXIKICAgIGVuY29kZXI7CgogIE1hZ2lj a0hhbmRsZXIKICAgIG1hZ2ljazsKCiAgdm9pZAogICAgKmNsaWVudF9kYXRhOwoKICB1bnNpZ25l ZCBpbnQKICAgIGFkam9pbiwKICAgIHJhdywKICAgIHN0ZWFsdGgsCiAgICBzZWVrYWJsZV9zdHJl YW0sCiAgICBibG9iX3N1cHBvcnQsCiAgICB0aHJlYWRfc3VwcG9ydDsKCiAgdW5zaWduZWQgbG9u ZwogICAgc2lnbmF0dXJlOwoKICBzdHJ1Y3QgX01hZ2lja0luZm8KICAgICpwcmV2aW91cywKICAg ICpuZXh0Owp9IE1hZ2lja0luZm87CgoKCgpleHRlcm4gY2hhcgogICpNYWdpY2tUb01pbWUoY29u c3QgY2hhciAqKTsKCmV4dGVybiBjb25zdCBjaGFyCiAgKkdldEltYWdlTWFnaWNrKGNvbnN0IHVu c2lnbmVkIGNoYXIgKixjb25zdCBzaXplX3QpOwoKZXh0ZXJuIHVuc2lnbmVkIGludAogIElzTWFn aWNrQ29uZmxpY3QoY29uc3QgY2hhciAqKSwKICBMaXN0TWFnaWNrSW5mbyhGSUxFICosRXhjZXB0 aW9uSW5mbyAqKSwKICBVbnJlZ2lzdGVyTWFnaWNrSW5mbyhjb25zdCBjaGFyICopOwoKZXh0ZXJu IHZvaWQKICBEZXN0cm95TWFnaWNrKHZvaWQpLAogIERlc3Ryb3lNYWdpY2tJbmZvKHZvaWQpLAog IEluaXRpYWxpemVNYWdpY2soY29uc3QgY2hhciAqKTsKCmV4dGVybiBjb25zdCBNYWdpY2tJbmZv CiAgKkdldE1hZ2lja0luZm8oY29uc3QgY2hhciAqLEV4Y2VwdGlvbkluZm8gKmV4Y2VwdGlvbik7 CgpleHRlcm4gTWFnaWNrSW5mbwogICpSZWdpc3Rlck1hZ2lja0luZm8oTWFnaWNrSW5mbyAqKSwK ICAqU2V0TWFnaWNrSW5mbyhjb25zdCBjaGFyICopOwojIDY0ICIvaG9tZS9iZnJpZXNlbi9zcmMv Z3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIgMgojIDEgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svbW9uaXRvci5oIiAxCiMgMTQg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svbW9uaXRv ci5oIgp0eXBlZGVmIHVuc2lnbmVkIGludAogICgqTW9uaXRvckhhbmRsZXIpKGNvbnN0IGNoYXIg Kixjb25zdCBFeHRlbmRlZFNpZ25lZEludGVncmFsVHlwZSwKICAgIGNvbnN0IEV4dGVuZGVkVW5z aWduZWRJbnRlZ3JhbFR5cGUsRXhjZXB0aW9uSW5mbyAqKTsKCgoKCmV4dGVybiBNb25pdG9ySGFu ZGxlcgogIFNldE1vbml0b3JIYW5kbGVyKE1vbml0b3JIYW5kbGVyKTsKCmV4dGVybiB1bnNpZ25l ZCBpbnQKICBNYWdpY2tNb25pdG9yKGNvbnN0IGNoYXIgKixjb25zdCBFeHRlbmRlZFNpZ25lZElu dGVncmFsVHlwZSwKICAgIGNvbnN0IEV4dGVuZGVkVW5zaWduZWRJbnRlZ3JhbFR5cGUsRXhjZXB0 aW9uSW5mbyAqKTsKIyA2NSAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9kcmF3LmMiIDIKIyAxICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3Jh cGhpY3NNYWdpY2svbWFnaWNrL3V0aWxpdHkuaCIgMQojIDE0ICIvaG9tZS9iZnJpZXNlbi9zcmMv Z3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL3V0aWxpdHkuaCIKdHlwZWRlZiBlbnVtCnsK ICBSb290UGF0aCwKICBIZWFkUGF0aCwKICBUYWlsUGF0aCwKICBCYXNlUGF0aCwKICBFeHRlbnNp b25QYXRoCn0gUGF0aFR5cGU7CgoKCgp0eXBlZGVmIHN0cnVjdCBfVG9rZW5JbmZvCnsKICBpbnQK ICAgIHN0YXRlOwoKICB1bnNpZ25lZCBpbnQKICAgIGZsYWc7CgogIGxvbmcKICAgIG9mZnNldDsK CiAgY2hhcgogICAgcXVvdGU7Cn0gVG9rZW5JbmZvOwoKCgoKZXh0ZXJuIGNoYXIKICAqQWxsb2Nh dGVTdHJpbmcoY29uc3QgY2hhciAqKSwKICAqQmFzZTY0RW5jb2RlKGNvbnN0IHVuc2lnbmVkIGNo YXIgKixjb25zdCBzaXplX3Qsc2l6ZV90ICopLAogICpFc2NhcGVTdHJpbmcoY29uc3QgY2hhciAq LGNvbnN0IGNoYXIpLAogICpHZXRQYWdlR2VvbWV0cnkoY29uc3QgY2hhciAqKSwKICAqKkxpc3RG aWxlcyhjb25zdCBjaGFyICosY29uc3QgY2hhciAqLGxvbmcgKiksCiAgKlNldENsaWVudE5hbWUo Y29uc3QgY2hhciAqKSwKICAqKlN0cmluZ1RvQXJndihjb25zdCBjaGFyICosaW50ICopLAogICoq U3RyaW5nVG9MaXN0KGNvbnN0IGNoYXIgKiksCiAgKlRyYW5zbGF0ZVRleHQoY29uc3QgSW1hZ2VJ bmZvICosSW1hZ2UgKixjb25zdCBjaGFyICopOwoKZXh0ZXJuIGNvbnN0IGNoYXIKICAqQWNxdWly ZVN0cmluZyhjb25zdCBjaGFyICopLAogICpTZXRDbGllbnRQYXRoKGNvbnN0IGNoYXIgKik7Cgpl eHRlcm4gZG91YmxlCiAgU3RyaW5nVG9Eb3VibGUoY29uc3QgY2hhciAqLGNvbnN0IGRvdWJsZSk7 CgpleHRlcm4gaW50CiAgR2V0R2VvbWV0cnkoY29uc3QgY2hhciAqLGxvbmcgKixsb25nICosdW5z aWduZWQgbG9uZyAqLHVuc2lnbmVkIGxvbmcgKiksCiAgR2xvYkV4cHJlc3Npb24oY29uc3QgY2hh ciAqLGNvbnN0IGNoYXIgKiksCiAgTG9jYWxlTkNvbXBhcmUoY29uc3QgY2hhciAqLGNvbnN0IGNo YXIgKixjb25zdCBzaXplX3QpLAogIExvY2FsZUNvbXBhcmUoY29uc3QgY2hhciAqLGNvbnN0IGNo YXIgKiksCiAgR2V0TWFnaWNrR2VvbWV0cnkoY29uc3QgY2hhciAqLGxvbmcgKixsb25nICosdW5z aWduZWQgbG9uZyAqLHVuc2lnbmVkIGxvbmcgKiksCiAgU3Vic3RpdHV0ZVN0cmluZyhjaGFyICoq LGNvbnN0IGNoYXIqLGNvbnN0IGNoYXIgKiksCiAgU3lzdGVtQ29tbWFuZChjb25zdCB1bnNpZ25l ZCBpbnQsY29uc3QgY2hhciAqKSwKICBUb2tlbml6ZXIoVG9rZW5JbmZvICosdW5zaWduZWQsY2hh ciAqLHNpemVfdCxjaGFyICosY2hhciAqLGNoYXIgKixjaGFyICosCiAgICBjaGFyLGNoYXIgKixp bnQgKixjaGFyICopOwoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIKICAqQmFzZTY0RGVjb2RlKGNvbnN0 IGNoYXIgKiwgc2l6ZV90ICopOwoKZXh0ZXJuIHVuc2lnbmVkIGludAogIENsb25lU3RyaW5nKGNo YXIgKiosY29uc3QgY2hhciAqKSwKICBDb25jYXRlbmF0ZVN0cmluZyhjaGFyICoqLGNvbnN0IGNo YXIgKiksCiAgRXhwYW5kRmlsZW5hbWVzKGludCAqLGNoYXIgKioqKSwKICBHZXRFeGVjdXRpb25Q YXRoKGNoYXIgKiksCiAgSXNBY2Nlc3NpYmxlKGNvbnN0IGNoYXIgKiksCiAgSXNHZW9tZXRyeShj b25zdCBjaGFyICopLAogIElzR2xvYihjb25zdCBjaGFyICopOwoKZXh0ZXJuIHVuc2lnbmVkIGxv bmcKICBNdWx0aWxpbmVDZW5zdXMoY29uc3QgY2hhciAqKTsKCmV4dGVybiB2b2lkCiAgKkFjcXVp cmVNZW1vcnkoY29uc3Qgc2l6ZV90KSwKICBBcHBlbmRJbWFnZUZvcm1hdChjb25zdCBjaGFyICos Y2hhciAqKSwKICAqQ2xvbmVNZW1vcnkodm9pZCAqLGNvbnN0IHZvaWQgKixjb25zdCBzaXplX3Qp LAogIEV4cGFuZEZpbGVuYW1lKGNoYXIgKiksCiAgRm9ybWF0U2l6ZShjb25zdCBFeHRlbmRlZFNp Z25lZEludGVncmFsVHlwZSxjaGFyICopLAogIEdldFBhdGhDb21wb25lbnQoY29uc3QgY2hhciAq LFBhdGhUeXBlLGNoYXIgKiksCiAgR2V0VG9rZW4oY29uc3QgY2hhciAqLGNoYXIgKiosY2hhciAq KSwKICBMaWJlcmF0ZU1lbW9yeSh2b2lkICoqKSwKICBMb2NhbGVMb3dlcihjaGFyICopLAogIExv Y2FsZVVwcGVyKGNoYXIgKiksCiAgUmVhY3F1aXJlTWVtb3J5KHZvaWQgKiosY29uc3Qgc2l6ZV90 KSwKICBTdHJpcChjaGFyICopLAogIFNldEdlb21ldHJ5KGNvbnN0IEltYWdlICosUmVjdGFuZ2xl SW5mbyAqKSwKICBUZW1wb3JhcnlGaWxlbmFtZShjaGFyICopOwoKZXh0ZXJuIHZvaWQKCiAgRm9y bWF0U3RyaW5nKGNoYXIgKixjb25zdCBjaGFyICosLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQg KHByaW50ZiwyLDMpKSk7CiMgNjYgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svZHJhdy5jIiAyCiMgODcgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGlj cy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgp0eXBlZGVmIGVudW0KewogIFBhdGhEZWZh dWx0T3BlcmF0aW9uLAogIFBhdGhDbG9zZU9wZXJhdGlvbiwKICBQYXRoQ3VydmVUb09wZXJhdGlv biwKICBQYXRoQ3VydmVUb1F1YWRyYXRpY0Jlemllck9wZXJhdGlvbiwKICBQYXRoQ3VydmVUb1F1 YWRyYXRpY0JlemllclNtb290aE9wZXJhdGlvbiwKICBQYXRoQ3VydmVUb1Ntb290aE9wZXJhdGlv biwKICBQYXRoRWxsaXB0aWNBcmNPcGVyYXRpb24sCiAgUGF0aExpbmVUb0hvcml6b250YWxPcGVy YXRpb24sCiAgUGF0aExpbmVUb09wZXJhdGlvbiwKICBQYXRoTGluZVRvVmVydGljYWxPcGVyYXRp b24sCiAgUGF0aE1vdmVUb09wZXJhdGlvbgp9IFBhdGhPcGVyYXRpb247Cgp0eXBlZGVmIGVudW0K ewogIERlZmF1bHRQYXRoTW9kZSwKICBBYnNvbHV0ZVBhdGhNb2RlLAogIFJlbGF0aXZlUGF0aE1v ZGUKfSBQYXRoTW9kZTsKCnN0cnVjdCBfRHJhd0NvbnRleHQKewoKICBJbWFnZQogICAgKmltYWdl OwoKCiAgY2hhcgogICAgKm12ZzsKCiAgc2l6ZV90CiAgICBtdmdfYWxsb2MsCiAgICBtdmdfbGVu Z3RoOwoKICB1bnNpZ25lZCBpbnQKICAgIG12Z193aWR0aDsKCgogIGNoYXIKICAgICpwYXR0ZXJu X2lkOwoKICBSZWN0YW5nbGVJbmZvCiAgICBwYXR0ZXJuX2JvdW5kczsKCiAgc2l6ZV90CiAgICBw YXR0ZXJuX29mZnNldDsKCgogIHVuc2lnbmVkIGludAogICAgaW5kZXg7CgogIERyYXdJbmZvCiAg ICAqKmdyYXBoaWNfY29udGV4dDsKCiAgaW50CiAgICBmaWx0ZXJfb2ZmOwoKCiAgdW5zaWduZWQg aW50CiAgICBpbmRlbnRfZGVwdGg7CgoKICBQYXRoT3BlcmF0aW9uCiAgICBwYXRoX29wZXJhdGlv bjsKCiAgUGF0aE1vZGUKICAgIHBhdGhfbW9kZTsKCgogIHVuc2lnbmVkIGxvbmcKICAgIHNpZ25h dHVyZTsKfTsKCgpzdHJ1Y3QgX0RyYXdWVGFibGUKewogIHZvaWQgKCpEcmF3QW5ub3RhdGlvbikK ICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHks CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGV4dCk7CiAgdm9pZCAoKkRyYXdBcmMpCiAgICAo RHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgZG91YmxlIHN4LCBjb25zdCBkb3VibGUgc3ksCiAg ICAgY29uc3QgZG91YmxlIGV4LCBjb25zdCBkb3VibGUgZXksIGNvbnN0IGRvdWJsZSBzZCwgY29u c3QgZG91YmxlIGVkKTsKICB2b2lkICgqRHJhd0JlemllcikKICAgIChEcmF3Q29udGV4dCBjb250 ZXh0LCBjb25zdCBzaXplX3QgbnVtX2Nvb3JkcywgY29uc3QgUG9pbnRJbmZvICpjb29yZGluYXRl cyk7CiAgdm9pZCAoKkRyYXdDaXJjbGUpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3Qg ZG91YmxlIG94LCBjb25zdCBkb3VibGUgb3ksCiAgICAgY29uc3QgZG91YmxlIHB4LCBjb25zdCBk b3VibGUgcHkpOwogIHZvaWQgKCpEcmF3Q29sb3IpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwg Y29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5LAogICAgIGNvbnN0IFBhaW50TWV0aG9kIHBh aW50TWV0aG9kKTsKICB2b2lkICgqRHJhd0NvbW1lbnQpCiAgICAoRHJhd0NvbnRleHQgY29udGV4 dCxjb25zdCBjaGFyKiBjb21tZW50KTsKICB2b2lkICgqRHJhd0Rlc3Ryb3lDb250ZXh0KQogICAg KERyYXdDb250ZXh0IGNvbnRleHQpOwogIHZvaWQgKCpEcmF3RWxsaXBzZSkKICAgIChEcmF3Q29u dGV4dCBjb250ZXh0LCBjb25zdCBkb3VibGUgb3gsIGNvbnN0IGRvdWJsZSBveSwKICAgICBjb25z dCBkb3VibGUgcngsIGNvbnN0IGRvdWJsZSByeSwgY29uc3QgZG91YmxlIHN0YXJ0LCBjb25zdCBk b3VibGUgZW5kKTsKICB2b2lkICgqRHJhd0NvbXBvc2l0ZSkKICAgIChEcmF3Q29udGV4dCBjb250 ZXh0LCBjb25zdCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVfb3BlcmF0b3IsCiAgICAgY29u c3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5LCBjb25zdCBkb3VibGUgd2lkdGgsIGNvbnN0IGRv dWJsZSBoZWlnaHQsCiAgICAgY29uc3QgSW1hZ2UgKiBpbWFnZSApOwogIHZvaWQgKCpEcmF3TGlu ZSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBkb3VibGUgc3gsIGNvbnN0IGRvdWJs ZSBzeSwKICAgICBjb25zdCBkb3VibGUgZXgsIGNvbnN0IGRvdWJsZSBleSk7CiAgdm9pZCAoKkRy YXdNYXR0ZSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBkb3VibGUgeCwgY29uc3Qg ZG91YmxlIHksCiAgICAgY29uc3QgUGFpbnRNZXRob2QgcGFpbnRfbWV0aG9kKTsKICB2b2lkICgq RHJhd1BhdGhDbG9zZSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0KTsKICB2b2lkICgqRHJhd1Bh dGhDdXJ2ZVRvQWJzb2x1dGUpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgZG91Ymxl IHgxLCBjb25zdCBkb3VibGUgeTEsCiAgICAgY29uc3QgZG91YmxlIHgyLCBjb25zdCBkb3VibGUg eTIsIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSk7CiAgdm9pZCAoKkRyYXdQYXRoQ3Vy dmVUb1JlbGF0aXZlKQogICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGRvdWJsZSB4MSwg Y29uc3QgZG91YmxlIHkxLAogICAgIGNvbnN0IGRvdWJsZSB4MiwgY29uc3QgZG91YmxlIHkyLCBj b25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpOwogIHZvaWQgKCpEcmF3UGF0aEN1cnZlVG9R dWFkcmF0aWNCZXppZXJBYnNvbHV0ZSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBk b3VibGUgeDEsIGNvbnN0IGRvdWJsZSB5MSwKICAgICBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91 YmxlIHkpOwogIHZvaWQgKCpEcmF3UGF0aEN1cnZlVG9RdWFkcmF0aWNCZXppZXJSZWxhdGl2ZSkK ICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBkb3VibGUgeDEsIGNvbnN0IGRvdWJsZSB5 MSwKICAgICBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpOwogIHZvaWQgKCpEcmF3UGF0 aEN1cnZlVG9RdWFkcmF0aWNCZXppZXJTbW9vdGhBYnNvbHV0ZSkKICAgIChEcmF3Q29udGV4dCBj b250ZXh0LCBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpOwogIHZvaWQgKCpEcmF3UGF0 aEN1cnZlVG9RdWFkcmF0aWNCZXppZXJTbW9vdGhSZWxhdGl2ZSkKICAgIChEcmF3Q29udGV4dCBj b250ZXh0LCBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpOwogIHZvaWQgKCpEcmF3UGF0 aEN1cnZlVG9TbW9vdGhBYnNvbHV0ZSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBk b3VibGUgeDIsIGNvbnN0IGRvdWJsZSB5MiwKICAgICBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91 YmxlIHkpOwogIHZvaWQgKCpEcmF3UGF0aEN1cnZlVG9TbW9vdGhSZWxhdGl2ZSkKICAgIChEcmF3 Q29udGV4dCBjb250ZXh0LCBjb25zdCBkb3VibGUgeDIsIGNvbnN0IGRvdWJsZSB5MiwKICAgICBj b25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpOwogIHZvaWQgKCpEcmF3UGF0aEVsbGlwdGlj QXJjQWJzb2x1dGUpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgZG91YmxlIHJ4LCBj b25zdCBkb3VibGUgcnksCiAgICAgY29uc3QgZG91YmxlIHhfYXhpc19yb3RhdGlvbiwgdW5zaWdu ZWQgaW50IGxhcmdlX2FyY19mbGFnLAogICAgIHVuc2lnbmVkIGludCBzd2VlcF9mbGFnLCBjb25z dCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpOwogIHZvaWQgKCpEcmF3UGF0aEVsbGlwdGljQXJj UmVsYXRpdmUpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgZG91YmxlIHJ4LCBjb25z dCBkb3VibGUgcnksCiAgICAgY29uc3QgZG91YmxlIHhfYXhpc19yb3RhdGlvbiwgdW5zaWduZWQg aW50IGxhcmdlX2FyY19mbGFnLAogICAgIHVuc2lnbmVkIGludCBzd2VlcF9mbGFnLCBjb25zdCBk b3VibGUgeCwgY29uc3QgZG91YmxlIHkpOwogIHZvaWQgKCpEcmF3UGF0aEZpbmlzaCkKICAgIChE cmF3Q29udGV4dCBjb250ZXh0KTsKICB2b2lkICgqRHJhd1BhdGhMaW5lVG9BYnNvbHV0ZSkKICAg IChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpOwog IHZvaWQgKCpEcmF3UGF0aExpbmVUb1JlbGF0aXZlKQogICAgKERyYXdDb250ZXh0IGNvbnRleHQs IGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSk7CiAgdm9pZCAoKkRyYXdQYXRoTGluZVRv SG9yaXpvbnRhbEFic29sdXRlKQogICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGRvdWJs ZSB4KTsKICB2b2lkICgqRHJhd1BhdGhMaW5lVG9Ib3Jpem9udGFsUmVsYXRpdmUpCiAgICAoRHJh d0NvbnRleHQgY29udGV4dCwgY29uc3QgZG91YmxlIHgpOwogIHZvaWQgKCpEcmF3UGF0aExpbmVU b1ZlcnRpY2FsQWJzb2x1dGUpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgZG91Ymxl IHkpOwogIHZvaWQgKCpEcmF3UGF0aExpbmVUb1ZlcnRpY2FsUmVsYXRpdmUpCiAgICAoRHJhd0Nv bnRleHQgY29udGV4dCwgY29uc3QgZG91YmxlIHkpOwogIHZvaWQgKCpEcmF3UGF0aE1vdmVUb0Fi c29sdXRlKQogICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBk b3VibGUgeSk7CiAgdm9pZCAoKkRyYXdQYXRoTW92ZVRvUmVsYXRpdmUpCiAgICAoRHJhd0NvbnRl eHQgY29udGV4dCwgY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KTsKICB2b2lkICgqRHJh d1BhdGhTdGFydCkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0KTsKICB2b2lkICgqRHJhd1BvaW50 KQogICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUg eSk7CiAgdm9pZCAoKkRyYXdQb2x5Z29uKQogICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0 IHNpemVfdCBudW1fY29vcmRzLCBjb25zdCBQb2ludEluZm8gKiBjb29yZGluYXRlcyk7CiAgdm9p ZCAoKkRyYXdQb2x5bGluZSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBzaXplX3Qg bnVtX2Nvb3JkcywgY29uc3QgUG9pbnRJbmZvICogY29vcmRpbmF0ZXMpOwogIHZvaWQgKCpEcmF3 UG9wQ2xpcFBhdGgpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCk7CiAgdm9pZCAoKkRyYXdQb3BE ZWZzKQogICAgKERyYXdDb250ZXh0IGNvbnRleHQpOwogIHZvaWQgKCpEcmF3UG9wR3JhcGhpY0Nv bnRleHQpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCk7CiAgdm9pZCAoKkRyYXdQb3BQYXR0ZXJu KQogICAgKERyYXdDb250ZXh0IGNvbnRleHQpOwogIHZvaWQgKCpEcmF3UHVzaENsaXBQYXRoKQog ICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNoYXIgKmNsaXBfcGF0aF9pZCk7CiAgdm9p ZCAoKkRyYXdQdXNoRGVmcykKICAgIChEcmF3Q29udGV4dCBjb250ZXh0KTsKICB2b2lkICgqRHJh d1B1c2hHcmFwaGljQ29udGV4dCkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0KTsKICB2b2lkICgq RHJhd1B1c2hQYXR0ZXJuKQogICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNoYXIgKnBh dHRlcm5faWQsCiAgICAgY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5LCBjb25zdCBkb3Vi bGUgd2lkdGgsIGNvbnN0IGRvdWJsZSBoZWlnaHQpOwogIHZvaWQgKCpEcmF3UmVjdGFuZ2xlKQog ICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGRvdWJsZSB4MSwgY29uc3QgZG91YmxlIHkx LAogICAgIGNvbnN0IGRvdWJsZSB4MiwgY29uc3QgZG91YmxlIHkyKTsKICB2b2lkICgqRHJhd1Jv dW5kUmVjdGFuZ2xlKQogICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGRvdWJsZSB4MSwgZG91Ymxl IHkxLAogICAgIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBkb3VibGUgcngsIGRvdWJsZSByeSk7CiAg dm9pZCAoKkRyYXdBZmZpbmUpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgQWZmaW5l TWF0cml4ICphZmZpbmUpOwogIHZvaWQgKCpEcmF3U2V0Q2xpcFBhdGgpCiAgICAoRHJhd0NvbnRl eHQgY29udGV4dCwgY29uc3QgY2hhciAqY2xpcF9wYXRoKTsKICB2b2lkICgqRHJhd1NldENsaXBS dWxlKQogICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IEZpbGxSdWxlIGZpbGxfcnVsZSk7 CiAgdm9pZCAoKkRyYXdTZXRDbGlwVW5pdHMpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29u c3QgQ2xpcFBhdGhVbml0cyBjbGlwX3VuaXRzKTsKICB2b2lkICgqRHJhd1NldEZpbGxDb2xvcikK ICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBQaXhlbFBhY2tldCAqIGZpbGxfY29sb3Ip OwogIHZvaWQgKCpEcmF3U2V0RmlsbE9wYWNpdHkpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwg Y29uc3QgZG91YmxlIGZpbGxfb3BhY2l0eSk7CiAgdm9pZCAoKkRyYXdTZXRGaWxsUnVsZSkKICAg IChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBGaWxsUnVsZSBmaWxsX3J1bGUpOwogIHZvaWQg KCpEcmF3U2V0RmlsbFBhdHRlcm5VUkwpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3Qg Y2hhciogZmlsbF91cmwpOwogIHZvaWQgKCpEcmF3U2V0Rm9udCkKICAgIChEcmF3Q29udGV4dCBj b250ZXh0LCBjb25zdCBjaGFyICpmb250X25hbWUpOwogIHZvaWQgKCpEcmF3U2V0Rm9udEZhbWls eSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyICpmb250X2ZhbWlseSk7CiAg dm9pZCAoKkRyYXdTZXRGb250U2l6ZSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBk b3VibGUgZm9udF9wb2ludHNpemUpOwogIHZvaWQgKCpEcmF3U2V0Rm9udFN0cmV0Y2gpCiAgICAo RHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgU3RyZXRjaFR5cGUgZm9udF9zdHJldGNoKTsKICB2 b2lkICgqRHJhd1NldEZvbnRTdHlsZSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBT dHlsZVR5cGUgZm9udF9zdHlsZSk7CiAgdm9pZCAoKkRyYXdTZXRGb250V2VpZ2h0KQogICAgKERy YXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IHVuc2lnbmVkIGxvbmcgZm9udF93ZWlnaHQpOwogIHZv aWQgKCpEcmF3U2V0R3Jhdml0eSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBHcmF2 aXR5VHlwZSBncmF2aXR5KTsKICB2b2lkICgqRHJhd1JvdGF0ZSkKICAgIChEcmF3Q29udGV4dCBj b250ZXh0LCBjb25zdCBkb3VibGUgZGVncmVlcyk7CiAgdm9pZCAoKkRyYXdTY2FsZSkKICAgIChE cmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpOwogIHZv aWQgKCpEcmF3U2tld1gpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgZG91YmxlIGRl Z3JlZXMpOwogIHZvaWQgKCpEcmF3U2tld1kpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29u c3QgZG91YmxlIGRlZ3JlZXMpOwoKCiAgdm9pZCAoKkRyYXdTZXRTdHJva2VBbnRpYWxpYXMpCiAg ICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgdW5zaWduZWQgaW50IHRydWVfZmFsc2UpOwog IHZvaWQgKCpEcmF3U2V0U3Ryb2tlQ29sb3IpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29u c3QgUGl4ZWxQYWNrZXQgKiBzdHJva2VfY29sb3IpOwogIHZvaWQgKCpEcmF3U2V0U3Ryb2tlRGFz aEFycmF5KQogICAgKERyYXdDb250ZXh0IGNvbnRleHQsY29uc3QgZG91YmxlICpkYXNoYXJyYXkp OwogIHZvaWQgKCpEcmF3U2V0U3Ryb2tlRGFzaE9mZnNldCkKICAgIChEcmF3Q29udGV4dCBjb250 ZXh0LGNvbnN0IGRvdWJsZSBkYXNob2Zmc2V0KTsKICB2b2lkICgqRHJhd1NldFN0cm9rZUxpbmVD YXApCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgTGluZUNhcCBsaW5lY2FwKTsKICB2 b2lkICgqRHJhd1NldFN0cm9rZUxpbmVKb2luKQogICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGNv bnN0IExpbmVKb2luIGxpbmVqb2luKTsKICB2b2lkICgqRHJhd1NldFN0cm9rZU1pdGVyTGltaXQp CiAgICAoRHJhd0NvbnRleHQgY29udGV4dCxjb25zdCB1bnNpZ25lZCBsb25nIG1pdGVybGltaXQp OwogIHZvaWQgKCpEcmF3U2V0U3Ryb2tlT3BhY2l0eSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0 LCBjb25zdCBkb3VibGUgb3BhY2l0eSk7CiAgdm9pZCAoKkRyYXdTZXRTdHJva2VQYXR0ZXJuVVJM KQogICAgKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNoYXIqIHN0cm9rZV91cmwpOwogIHZv aWQgKCpEcmF3U2V0U3Ryb2tlV2lkdGgpCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3Qg ZG91YmxlIHdpZHRoKTsKICB2b2lkICgqRHJhd1NldFRleHRBbnRpYWxpYXMpCiAgICAoRHJhd0Nv bnRleHQgY29udGV4dCwgY29uc3QgdW5zaWduZWQgaW50IHRydWVfZmFsc2UpOwogIHZvaWQgKCpE cmF3U2V0VGV4dERlY29yYXRpb24pCiAgICAoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgRGVj b3JhdGlvblR5cGUgZGVjb3JhdGlvbik7CiAgdm9pZCAoKkRyYXdTZXRUZXh0VW5kZXJDb2xvcikK ICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBQaXhlbFBhY2tldCAqIGNvbG9yKTsKICB2 b2lkICgqRHJhd1RyYW5zbGF0ZSkKICAgIChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBkb3Vi bGUgeCwgY29uc3QgZG91YmxlIHkpOwogIHZvaWQgKCpEcmF3U2V0Vmlld2JveCkKICAgIChEcmF3 Q29udGV4dCBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHgxLCB1bnNpZ25lZCBsb25nIHkxLAogICAg IHVuc2lnbmVkIGxvbmcgeDIsIHVuc2lnbmVkIGxvbmcgeTIpOwp9OwoKCgoKc3RhdGljIGludAog IE12Z1ByaW50ZihEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikK Cl9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQoKLAogIE12Z0F1dG9XcmFw UHJpbnRmKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoKX19h dHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCgo7CnN0YXRpYyB2b2lkCiAgTXZn QXBwZW5kQ29sb3IoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgUGl4ZWxQYWNrZXQgKmNvbG9y KTsKCgoKc3RhdGljIGludCBNdmdQcmludGYoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgY2hh ciAqZm9ybWF0LCAuLi4pCnsKICBjb25zdCBzaXplX3QKICAgIGFsbG9jX3NpemUgPSAyMDUzICog MjA7CgogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJp bnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3Ny Yy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzc0LCAiY29udGV4dCAh PSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1 cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3Nl cnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2lj ay9tYWdpY2svZHJhdy5jIiwgMzc1LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25h dHVyZSIpLCAwKSkpOwoKCiAgaWYgKGNvbnRleHQtPm12ZyA9PSAoY2hhciopIDApCiAgICB7CiAg ICAgIGNvbnRleHQtPm12ZyA9IChjaGFyICopIEFjcXVpcmVNZW1vcnkoYWxsb2Nfc2l6ZSk7CiAg ICAgIGlmKCBjb250ZXh0LT5tdmcgPT0gKGNoYXIqKSAwICkKICAgICAgICB7CiAgICAgICAgICBU aHJvd0V4Y2VwdGlvbigmY29udGV4dC0+aW1hZ2UtPmV4Y2VwdGlvbixSZXNvdXJjZUxpbWl0RXJy b3IsCiAgICAgICAgICAgICAiTWVtb3J5QWxsb2NhdGlvbkZhaWxlZCIsIlVuYWJsZVRvRHJhd09u SW1hZ2UiKTsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICBjb250ZXh0LT5t dmdfYWxsb2MgPSBhbGxvY19zaXplOwogICAgICBjb250ZXh0LT5tdmdfbGVuZ3RoID0gMDsKICAg ICAgaWYgKGNvbnRleHQtPm12ZyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIFRocm93RXhjZXB0 aW9uKCZjb250ZXh0LT5pbWFnZS0+ZXhjZXB0aW9uLFJlc291cmNlTGltaXRFcnJvciwKICAgICAg ICAgICAgIk1lbW9yeUFsbG9jYXRpb25GYWlsZWQiLCJVbmFibGVUb0RyYXdPbkltYWdlIik7CiAg ICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgfQoKCiAgaWYgKGNvbnRleHQtPm12Z19h bGxvYyA8IChjb250ZXh0LT5tdmdfbGVuZ3RoICsgMjA1MyAqIDEwKSkKICAgIHsKICAgICAgc2l6 ZV90IHJlYWxsb2Nfc2l6ZSA9IGNvbnRleHQtPm12Z19hbGxvYyArIGFsbG9jX3NpemU7CgogICAg ICBSZWFjcXVpcmVNZW1vcnkoKHZvaWQgKiopICZjb250ZXh0LT5tdmcsIHJlYWxsb2Nfc2l6ZSk7 CiAgICAgIGlmIChjb250ZXh0LT5tdmcgPT0gMCkKICAgICAgICB7CiAgICAgICAgICBUaHJvd0V4 Y2VwdGlvbigmY29udGV4dC0+aW1hZ2UtPmV4Y2VwdGlvbixSZXNvdXJjZUxpbWl0RXJyb3IsCiAg ICAgICAgICAgICJNZW1vcnlBbGxvY2F0aW9uRmFpbGVkIiwiVW5hYmxlVG9EcmF3T25JbWFnZSIp OwogICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgY29udGV4dC0+bXZnX2FsbG9j ID0gcmVhbGxvY19zaXplOwogICAgfQoKCiAgewogICAgaW50CiAgICAgIGZvcm1hdHRlZF9sZW5n dGg7CgogICAgdm9sYXRpbGUgdmFfbGlzdAogICAgICBhcmdwOwoKCiAgICB3aGlsZShjb250ZXh0 LT5tdmdfd2lkdGggPCBjb250ZXh0LT5pbmRlbnRfZGVwdGgpCiAgICAgIHsKICAgICAgICBjb250 ZXh0LT5tdmdbY29udGV4dC0+bXZnX2xlbmd0aF0gPSAnICc7CiAgICAgICAgKytjb250ZXh0LT5t dmdfbGVuZ3RoOwogICAgICAgICsrY29udGV4dC0+bXZnX3dpZHRoOwogICAgICB9CiAgICBjb250 ZXh0LT5tdmdbY29udGV4dC0+bXZnX2xlbmd0aF0gPSAwOwoKICAgIF9fYnVpbHRpbl9zdGRhcmdf c3RhcnQoKGFyZ3ApLGZvcm1hdCk7CgoKCiAgICBmb3JtYXR0ZWRfbGVuZ3RoID0KICAgICAgdnNu cHJpbnRmKGNvbnRleHQtPm12ZyArIGNvbnRleHQtPm12Z19sZW5ndGgsCiAgICAgICAgICAgICAg ICBjb250ZXh0LT5tdmdfYWxsb2MgLSBjb250ZXh0LT5tdmdfbGVuZ3RoIC0gMSwgZm9ybWF0LCBh cmdwKTsKCiAgICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3ApOwoKICAgIGlmIChmb3JtYXR0ZWRfbGVu Z3RoIDwgMCkKICAgICAgewogICAgICAgIFRocm93RXhjZXB0aW9uKCZjb250ZXh0LT5pbWFnZS0+ ZXhjZXB0aW9uLERyYXdFcnJvciwiVW5hYmxlVG9QcmludCIsCiAgICAgICAgICBmb3JtYXQpOwog ICAgICB9CiAgICBlbHNlCiAgICAgIHsKICAgICAgICBjb250ZXh0LT5tdmdfbGVuZ3RoICs9IGZv cm1hdHRlZF9sZW5ndGg7CiAgICAgICAgY29udGV4dC0+bXZnX3dpZHRoICs9IGZvcm1hdHRlZF9s ZW5ndGg7CiAgICAgIH0KICAgIGNvbnRleHQtPm12Z1tjb250ZXh0LT5tdmdfbGVuZ3RoXSA9IDA7 CgoKICAgIGlmKCAoY29udGV4dC0+bXZnX2xlbmd0aCA+IDEpICYmCiAgICAgICAgKGNvbnRleHQt Pm12Z1tjb250ZXh0LT5tdmdfbGVuZ3RoLTFdID09ICdcbicpICkKICAgICAgY29udGV4dC0+bXZn X3dpZHRoID0gMDsKCiAgICAoKHZvaWQpICgoY29udGV4dC0+bXZnX2xlbmd0aCArIDEgPCBjb250 ZXh0LT5tdmdfYWxsb2MpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlv biBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21h Z2ljay9kcmF3LmMiLCA0NTcsICJjb250ZXh0LT5tdmdfbGVuZ3RoICsgMSA8IGNvbnRleHQtPm12 Z19hbGxvYyIpLCAwKSkpOwoKICAgIHJldHVybiBmb3JtYXR0ZWRfbGVuZ3RoOwogIH0KfQoKCnN0 YXRpYyBpbnQgTXZnQXV0b1dyYXBQcmludGYoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgY2hh ciAqZm9ybWF0LCAuLi4pCnsKICB2YV9saXN0CiAgICBhcmdwOwoKICBpbnQKICAgIGZvcm1hdHRl ZF9sZW5ndGg7CgogIGNoYXIKICAgIGJ1ZmZlclsyMDUzXTsKCiAgX19idWlsdGluX3N0ZGFyZ19z dGFydCgoYXJncCksZm9ybWF0KTsKCgoKICBmb3JtYXR0ZWRfbGVuZ3RoID0KICAgIHZzbnByaW50 ZihidWZmZXIsCiAgICAgICAgICAgICAgc2l6ZW9mKGJ1ZmZlcikgLSAxLCBmb3JtYXQsIGFyZ3Ap OwoKICBfX2J1aWx0aW5fdmFfZW5kKGFyZ3ApOwogICooYnVmZmVyK3NpemVvZihidWZmZXIpLTEp PTA7CgogIGlmIChmb3JtYXR0ZWRfbGVuZ3RoIDwgMCkKICAgIHsKICAgICAgVGhyb3dFeGNlcHRp b24oJmNvbnRleHQtPmltYWdlLT5leGNlcHRpb24sU3RyZWFtRXJyb3IsIlVuYWJsZVRvUHJpbnQi LAogICAgICAgIGZvcm1hdCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICBpZiggKChjb250ZXh0 LT5tdmdfd2lkdGggKyBmb3JtYXR0ZWRfbGVuZ3RoKSA+IDc4KSAmJgogICAgICAgICAgYnVmZmVy W2Zvcm1hdHRlZF9sZW5ndGgtMV0gIT0gJ1xuJyApCiAgICAgICAgTXZnUHJpbnRmKGNvbnRleHQs ICJcbiIpOwoKICAgICAgTXZnUHJpbnRmKGNvbnRleHQsICIlcyIsIGJ1ZmZlcik7CiAgICB9Cgog IHJldHVybiBmb3JtYXR0ZWRfbGVuZ3RoOwp9CgpzdGF0aWMgdm9pZCBNdmdBcHBlbmRDb2xvcihE cmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBQaXhlbFBhY2tldCAqY29sb3IpCnsKICBpZihjb2xv ci0+cmVkID09IDAgJiYgY29sb3ItPmdyZWVuID09IDAgJiYgY29sb3ItPmJsdWUgPT0gMCAmJgog ICAgIGNvbG9yLT5vcGFjaXR5ID09IDI1NVVMKQogICAgewogICAgICBNdmdQcmludGYoY29udGV4 dCwibm9uZSIpOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgY2hhcgogICAgICAgIHR1cGxlWzIw NTNdOwoKICAgICAgR2V0Q29sb3JUdXBsZShjb2xvcixjb250ZXh0LT5pbWFnZS0+ZGVwdGgsY29u dGV4dC0+aW1hZ2UtPm1hdHRlLDEsCiAgICAgICAgdHVwbGUpOwogICAgICBNdmdQcmludGYoY29u dGV4dCwiJS4xMDI0cyIsdHVwbGUpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBNdmdBcHBlbmRQb2lu dHNDb21tYW5kKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNoYXIqIGNvbW1hbmQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG51bV9jb29yZHMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUG9pbnRJbmZvICogY29vcmRp bmF0ZXMpCnsKICBjb25zdCBQb2ludEluZm8KICAgICpjb29yZGluYXRlOwoKICBzaXplX3QKICAg IGk7CgogIE12Z1ByaW50Zihjb250ZXh0LCBjb21tYW5kKTsKICBmb3IgKGkgPSBudW1fY29vcmRz LCBjb29yZGluYXRlID0gY29vcmRpbmF0ZXM7IGk7IGktLSkKICAgIHsKICAgICAgTXZnQXV0b1dy YXBQcmludGYoY29udGV4dCwiICUuNGcsJS40ZyIsIGNvb3JkaW5hdGUtPngsIGNvb3JkaW5hdGUt PnkpOwogICAgICArK2Nvb3JkaW5hdGU7CiAgICB9CgogIE12Z1ByaW50Zihjb250ZXh0LCAiXG4i KTsKfQoKc3RhdGljIHZvaWQgQWRqdXN0QWZmaW5lKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0 IEFmZmluZU1hdHJpeCAqYWZmaW5lKQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250 ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4i LCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3 LmMiLCA1NDMsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lk KSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYg KCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dy YXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA1NDQsICJjb250ZXh0LT5zaWdu YXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIGlmICgoYWZmaW5lLT5zeCAhPSAx LjApIHx8IChhZmZpbmUtPnJ4ICE9IDAuMCkgfHwgKGFmZmluZS0+cnkgIT0gMC4wKSB8fAogICAg ICAoYWZmaW5lLT5zeSAhPSAxLjApIHx8IChhZmZpbmUtPnR4ICE9IDAuMCkgfHwgKGFmZmluZS0+ dHkgIT0gMC4wKSkKICAgIHsKICAgICAgQWZmaW5lTWF0cml4CiAgICAgICAgY3VycmVudDsKCiAg ICAgIGN1cnJlbnQgPSAoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSkt PmFmZmluZTsKICAgICAgKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0p LT5hZmZpbmUuc3g9Y3VycmVudC5zeCphZmZpbmUtPnN4K2N1cnJlbnQucnkqYWZmaW5lLT5yeDsK ICAgICAgKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5hZmZpbmUu cng9Y3VycmVudC5yeCphZmZpbmUtPnN4K2N1cnJlbnQuc3kqYWZmaW5lLT5yeDsKICAgICAgKGNv bnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5hZmZpbmUucnk9Y3VycmVu dC5zeCphZmZpbmUtPnJ5K2N1cnJlbnQucnkqYWZmaW5lLT5zeTsKICAgICAgKGNvbnRleHQtPmdy YXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5hZmZpbmUuc3k9Y3VycmVudC5yeCphZmZp bmUtPnJ5K2N1cnJlbnQuc3kqYWZmaW5lLT5zeTsKICAgICAgKGNvbnRleHQtPmdyYXBoaWNfY29u dGV4dFtjb250ZXh0LT5pbmRleF0pLT5hZmZpbmUudHg9Y3VycmVudC5zeCphZmZpbmUtPnR4K2N1 cnJlbnQucnkqYWZmaW5lLT50eStjdXJyZW50LnR4OwogICAgICAoY29udGV4dC0+Z3JhcGhpY19j b250ZXh0W2NvbnRleHQtPmluZGV4XSktPmFmZmluZS50eT1jdXJyZW50LnJ4KmFmZmluZS0+dHgr Y3VycmVudC5zeSphZmZpbmUtPnR5K2N1cnJlbnQudHk7CiAgICB9Cn0KIyA1OTIgIi9ob21lL2Jm cmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBE cmF3QW5ub3RhdGlvbihEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQpCnsKICBjaGFyCiAg ICAqZXNjYXBlZF90ZXh0OwoKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkg PyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9t ZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDU5 OSwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29u dGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1 OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3Mv R3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDYwMCwgImNvbnRleHQtPnNpZ25hdHVyZSA9 PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKICAoKHZvaWQpICgodGV4dCAhPSAoY29uc3QgdW5z aWduZWQgY2hhciAqKSAwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRp b24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svZHJhdy5jIiwgNjAxLCAidGV4dCAhPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBOVUxM IiksIDApKSk7CgogIGVzY2FwZWRfdGV4dD1Fc2NhcGVTdHJpbmcoKGNvbnN0IGNoYXIqKXRleHQs J1wnJyk7CiAgTXZnUHJpbnRmKGNvbnRleHQsICJ0ZXh0ICUuNGcsJS40ZyAnJS4xMDI0cydcbiIs IHgsIHksIGVzY2FwZWRfdGV4dCk7CiAgTGliZXJhdGVNZW1vcnkoKHZvaWQqKikmZXNjYXBlZF90 ZXh0KTsKfQojIDYzNCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNr L21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdBZmZpbmUoRHJhd0NvbnRleHQgY29udGV4dCwgY29u c3QgQWZmaW5lTWF0cml4ICphZmZpbmUpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0Nv bnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydc biIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2Ry YXcuYyIsIDYzNiwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZv aWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50 ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMv Z3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDYzNywgImNvbnRleHQtPnNp Z25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKICAoKHZvaWQpICgoYWZmaW5lICE9 IChjb25zdCBBZmZpbmVNYXRyaXggKikwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxl ZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNjM4LCAiYWZmaW5lICE9IChjb25zdCBBZmZpbmVNYXRy aXggKilOVUxMIiksIDApKSk7CgogIEFkanVzdEFmZmluZSggY29udGV4dCwgYWZmaW5lICk7Cgog IE12Z1ByaW50Zihjb250ZXh0LCAiYWZmaW5lICUuNmcsJS42ZywlLjZnLCUuNmcsJS42ZywlLjZn XG4iLAogICAgICAgICAgICBhZmZpbmUtPnN4LCBhZmZpbmUtPnJ4LCBhZmZpbmUtPnJ5LCBhZmZp bmUtPnN5LAogICAgICAgICAgICBhZmZpbmUtPnR4LCBhZmZpbmUtPnR5KTsKfQojIDY3NCAiL2hv bWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiBE cmF3Q29udGV4dCBEcmF3QWxsb2NhdGVDb250ZXh0KGNvbnN0IERyYXdJbmZvICpkcmF3X2luZm8s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlICppbWFn ZSkKewogIERyYXdDb250ZXh0CiAgICBjb250ZXh0OwoKCiAgY29udGV4dCA9IChEcmF3Q29udGV4 dCkgQWNxdWlyZU1lbW9yeShzaXplb2Yoc3RydWN0IF9EcmF3Q29udGV4dCkpOwogIGlmKGNvbnRl eHQgPT0gKERyYXdDb250ZXh0KSAwKQogICAgTWFnaWNrRmF0YWxFcnJvcihSZXNvdXJjZUxpbWl0 RmF0YWxFcnJvciwiTWVtb3J5QWxsb2NhdGlvbkZhaWxlZCIsCiAgICAgICJVbmFibGVUb0FsbG9j YXRlRHJhd0NvbnRleHQiKTsKCgogIGNvbnRleHQtPmltYWdlID0gaW1hZ2U7CgoKICBjb250ZXh0 LT5tdmcgPSAwOwogIGNvbnRleHQtPm12Z19hbGxvYyA9IDA7CiAgY29udGV4dC0+bXZnX2xlbmd0 aCA9IDA7CiAgY29udGV4dC0+bXZnX3dpZHRoID0gMDsKCgogIGNvbnRleHQtPnBhdHRlcm5faWQg PSAwOwogIGNvbnRleHQtPnBhdHRlcm5fb2Zmc2V0ID0gMDsKCiAgY29udGV4dC0+cGF0dGVybl9i b3VuZHMueCA9IDA7CiAgY29udGV4dC0+cGF0dGVybl9ib3VuZHMueSA9IDA7CiAgY29udGV4dC0+ cGF0dGVybl9ib3VuZHMud2lkdGggPSAwOwogIGNvbnRleHQtPnBhdHRlcm5fYm91bmRzLmhlaWdo dCA9IDA7CgoKICBjb250ZXh0LT5pbmRleCA9IDA7CiAgY29udGV4dC0+Z3JhcGhpY19jb250ZXh0 PShEcmF3SW5mbyAqKikgQWNxdWlyZU1lbW9yeShzaXplb2YoRHJhd0luZm8gKikpOwogIGlmKGNv bnRleHQtPmdyYXBoaWNfY29udGV4dCA9PSAoRHJhd0luZm8gKiopIDApCiAgICB7CiAgICAgIFRo cm93RXhjZXB0aW9uKCZjb250ZXh0LT5pbWFnZS0+ZXhjZXB0aW9uLFJlc291cmNlTGltaXRFcnJv ciwKICAgICAgICAiTWVtb3J5QWxsb2NhdGlvbkZhaWxlZCIsIlVuYWJsZVRvRHJhd09uSW1hZ2Ui KTsKICAgICAgcmV0dXJuIChEcmF3Q29udGV4dCkgMDsKICAgIH0KICAoY29udGV4dC0+Z3JhcGhp Y19jb250ZXh0W2NvbnRleHQtPmluZGV4XSk9Q2xvbmVEcmF3SW5mbygoSW1hZ2VJbmZvKikwLGRy YXdfaW5mbyk7CiAgaWYoKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0p ID09IChEcmF3SW5mbyopIDApCiAgICB7CiAgICAgIFRocm93RXhjZXB0aW9uKCZjb250ZXh0LT5p bWFnZS0+ZXhjZXB0aW9uLFJlc291cmNlTGltaXRFcnJvciwKICAgICAgICAiTWVtb3J5QWxsb2Nh dGlvbkZhaWxlZCIsIlVuYWJsZVRvRHJhd09uSW1hZ2UiKTsKICAgICAgcmV0dXJuIChEcmF3Q29u dGV4dCkgMDsKICAgIH0KCiAgY29udGV4dC0+ZmlsdGVyX29mZiA9IDA7CgoKICBjb250ZXh0LT5p bmRlbnRfZGVwdGggPSAwOwoKCiAgY29udGV4dC0+cGF0aF9vcGVyYXRpb24gPSBQYXRoRGVmYXVs dE9wZXJhdGlvbjsKICBjb250ZXh0LT5wYXRoX21vZGUgPSBEZWZhdWx0UGF0aE1vZGU7CgoKICBj b250ZXh0LT5zaWduYXR1cmUgPSAweGFiYWNhZGFiVUw7CgogIHJldHVybiBjb250ZXh0Owp9CiMg Nzc0ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2Ry YXcuYyIKIHZvaWQgRHJhd0FyYyhEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGRvdWJsZSBzeCwgY29uc3QgZG91YmxlIHN5LAogICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBleCwgY29uc3QgZG91YmxlIGV5LAogICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBzZCwgY29uc3QgZG91YmxlIGVkKQp7CiAgKCh2 b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczol dTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNz L0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA3NzksICJjb250ZXh0ICE9IChEcmF3Q29u dGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFi YWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMn XG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9k cmF3LmMiLCA3ODAsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDAp KSk7CgogIE12Z1ByaW50Zihjb250ZXh0LCAiYXJjICUuNGcsJS40ZyAlLjRnLCUuNGcgJS40Zywl LjRnXG4iLAogICAgICAgICAgICBzeCwgc3ksIGV4LCBleSwgc2QsIGVkKTsKfQojIDgxMyAiL2hv bWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiB2 b2lkIERyYXdCZXppZXIoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3Qgc2l6ZV90IG51bV9jb29y ZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUG9pbnRJbmZvICpjb29yZGlu YXRlcykKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19l cHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2Vu L3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgODE2LCAiY29udGV4 dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWdu YXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBh c3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01h Z2ljay9tYWdpY2svZHJhdy5jIiwgODE3LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1Np Z25hdHVyZSIpLCAwKSkpOwogICgodm9pZCkgKChjb29yZGluYXRlcyAhPSAoY29uc3QgUG9pbnRJ bmZvICopIDApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMn XG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9k cmF3LmMiLCA4MTgsICJjb29yZGluYXRlcyAhPSAoY29uc3QgUG9pbnRJbmZvICopIE5VTEwiKSwg MCkpKTsKCiAgTXZnQXBwZW5kUG9pbnRzQ29tbWFuZChjb250ZXh0LCJiZXppZXIiLG51bV9jb29y ZHMsY29vcmRpbmF0ZXMpOwp9CiMgODU0ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3Jh cGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd0NpcmNsZShEcmF3Q29udGV4dCBj b250ZXh0LCBjb25zdCBkb3VibGUgb3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgZG91YmxlIG95LCBjb25zdCBkb3VibGUgcHgsIGNvbnN0IGRvdWJsZSBweSkKewogICgodm9p ZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6 IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgODU3LCAiY29udGV4dCAhPSAoRHJhd0NvbnRl eHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFj YWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xu IiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJh dy5jIiwgODU4LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkp OwoKICBNdmdQcmludGYoY29udGV4dCwgImNpcmNsZSAlLjRnLCUuNGcgJS40ZywlLjRnXG4iLCBv eCwgb3ksIHB4LCBweSk7Cn0KIyA4ODYgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFw aGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogY2hhciAqRHJhd0dldENsaXBQYXRoKERyYXdDb250 ZXh0IGNvbnRleHQpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAw IDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9i ZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDg4OCwg ImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4 dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBm YWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3Jh cGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDg4OSwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBN YWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgaWYgKChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRb Y29udGV4dC0+aW5kZXhdKS0+Y2xpcF9wYXRoICE9IChjaGFyICopIDApCiAgICByZXR1cm4gKGNo YXIgKilBbGxvY2F0ZVN0cmluZygoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmlu ZGV4XSktPmNsaXBfcGF0aCk7CiAgZWxzZQogICAgcmV0dXJuIChjaGFyICopIDA7Cn0KIyA5MjMg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j Igogdm9pZCBEcmF3U2V0Q2xpcFBhdGgoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgY2hhciAq Y2xpcF9wYXRoKQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6 IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZy aWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA5MjUsICJj b250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQt PnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBo aWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA5MjYsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFn aWNrU2lnbmF0dXJlIiksIDApKSk7CiAgKCh2b2lkKSAoKGNsaXBfcGF0aCAhPSAoY29uc3QgY2hh ciAqKSAwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xu IiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJh dy5jIiwgOTI3LCAiY2xpcF9wYXRoICE9IChjb25zdCBjaGFyICopIE5VTEwiKSwgMCkpKTsKCiAg aWYoIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+Y2xpcF9wYXRo ID09IDAgfHwgY29udGV4dC0+ZmlsdGVyX29mZiB8fAogICAgICBMb2NhbGVDb21wYXJlKChjb250 ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+Y2xpcF9wYXRoLGNsaXBfcGF0 aCkgIT0gMCkKICAgIHsKICAgICAgQ2xvbmVTdHJpbmcoJihjb250ZXh0LT5ncmFwaGljX2NvbnRl eHRbY29udGV4dC0+aW5kZXhdKS0+Y2xpcF9wYXRoLGNsaXBfcGF0aCk7CiAgICAgIGlmKChjb250 ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+Y2xpcF9wYXRoID09IChjaGFy KikwKQogICAgICAgIHsgaWYgKGNvbnRleHQtPmltYWdlLT5leGNlcHRpb24uc2V2ZXJpdHkgPiAo bG9uZylSZXNvdXJjZUxpbWl0RXJyb3IpIFRocm93RXhjZXB0aW9uKCZjb250ZXh0LT5pbWFnZS0+ ZXhjZXB0aW9uLFJlc291cmNlTGltaXRFcnJvciwiTWVtb3J5QWxsb2NhdGlvbkZhaWxlZCIsIlVu YWJsZVRvRHJhd09uSW1hZ2UiKTsgcmV0dXJuOyB9OwoKCgoKCgogICAgICBNdmdQcmludGYoY29u dGV4dCwgImNsaXAtcGF0aCB1cmwoIyVzKVxuIiwgY2xpcF9wYXRoKTsKICAgIH0KfQojIDk2OCAi L2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMi CiBGaWxsUnVsZSBEcmF3R2V0Q2xpcFJ1bGUoRHJhd0NvbnRleHQgY29udGV4dCkKewogICgodm9p ZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6 IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgOTcwLCAiY29udGV4dCAhPSAoRHJhd0NvbnRl eHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFj YWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xu IiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJh dy5jIiwgOTcxLCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkp OwoKICByZXR1cm4gKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5m aWxsX3J1bGU7Cn0KIyAxMDAxICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NN YWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd1NldENsaXBSdWxlKERyYXdDb250ZXh0IGNv bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsUnVsZSBm aWxsX3J1bGUpCnsKICBjb25zdCBjaGFyCiAgICAqcCA9IDA7CgogICgodm9pZCkgKChjb250ZXh0 ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3Nl cnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2lj ay9tYWdpY2svZHJhdy5jIiwgMTAwNywgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwg MCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAw IDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9i ZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDEwMDgs ICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIGlmKGNv bnRleHQtPmZpbHRlcl9vZmYgfHwgKChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+ aW5kZXhdKS0+ZmlsbF9ydWxlICE9IGZpbGxfcnVsZSkpCiAgICB7CiAgICAgIChjb250ZXh0LT5n cmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZmlsbF9ydWxlID0gZmlsbF9ydWxlOwoK ICAgICAgc3dpdGNoIChmaWxsX3J1bGUpCiAgICAgICAgewogICAgICAgIGNhc2UgRXZlbk9kZFJ1 bGU6CiAgICAgICAgICBwID0gImV2ZW5vZGQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2Fz ZSBOb25aZXJvUnVsZToKICAgICAgICAgIHAgPSAibm9uemVybyI7CiAgICAgICAgICBicmVhazsK ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKHAg IT0gMCkKICAgICAgICBNdmdQcmludGYoY29udGV4dCwgImNsaXAtcnVsZSAlc1xuIiwgcCk7CiAg ICB9Cn0KIyAxMDUzICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2RyYXcuYyIKIENsaXBQYXRoVW5pdHMgRHJhd0dldENsaXBVbml0cyhEcmF3Q29udGV4 dCBjb250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6 IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZy aWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxMDU1LCAi Y29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0 LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZh aWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFw aGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMTA1NiwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBN YWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgcmV0dXJuIChjb250ZXh0LT5ncmFwaGljX2NvbnRl eHRbY29udGV4dC0+aW5kZXhdKS0+Y2xpcF91bml0czsKfQojIDEwODYgIi9ob21lL2Jmcmllc2Vu L3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3U2V0 Q2xpcFVuaXRzKERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQ2xpcFBhdGhVbml0cyBjbGlwX3VuaXRzKQp7CiAgY29uc3QgY2hhcgog ICAgKnAgPSAwOwoKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDog KF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJp ZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDEwOTIsICJj b250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQt PnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBo aWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxMDkzLCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1h Z2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBpZihjb250ZXh0LT5maWx0ZXJfb2ZmIHx8ICgoY29u dGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPmNsaXBfdW5pdHMgIT0gY2xp cF91bml0cykpCiAgICB7CiAgICAgIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+ aW5kZXhdKS0+Y2xpcF91bml0cyA9IGNsaXBfdW5pdHM7CgogICAgICBpZiAoIGNsaXBfdW5pdHMg PT0gT2JqZWN0Qm91bmRpbmdCb3ggKQogICAgICAgIHsKICAgICAgICAgIEFmZmluZU1hdHJpeAog ICAgICAgICAgICBhZmZpbmU7CgogICAgICAgICAgSWRlbnRpdHlBZmZpbmUoJmFmZmluZSk7Cgog ICAgICAgICAgYWZmaW5lLnN4PShjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5k ZXhdKS0+Ym91bmRzLngyOwogICAgICAgICAgYWZmaW5lLnN5PShjb250ZXh0LT5ncmFwaGljX2Nv bnRleHRbY29udGV4dC0+aW5kZXhdKS0+Ym91bmRzLnkyOwogICAgICAgICAgYWZmaW5lLnR4PShj b250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+Ym91bmRzLngxOwogICAg ICAgICAgYWZmaW5lLnR5PShjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhd KS0+Ym91bmRzLnkxOwoKICAgICAgICAgIEFkanVzdEFmZmluZSggY29udGV4dCwgJmFmZmluZSAp OwogICAgICAgIH0KCiAgICAgIHN3aXRjaCAoY2xpcF91bml0cykKICAgICAgICB7CiAgICAgICAg Y2FzZSBVc2VyU3BhY2U6CiAgICAgICAgICBwID0gInVzZXJTcGFjZSI7CiAgICAgICAgICBicmVh azsKICAgICAgICBjYXNlIFVzZXJTcGFjZU9uVXNlOgogICAgICAgICAgcCA9ICJ1c2VyU3BhY2VP blVzZSI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE9iamVjdEJvdW5kaW5nQm94Ogog ICAgICAgICAgcCA9ICJvYmplY3RCb3VuZGluZ0JveCI7CiAgICAgICAgICBicmVhazsKICAgICAg ICB9CgogICAgICBpZiAocCAhPSAwKQogICAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAiY2xpcC11 bml0cyAlc1xuIiwgcCk7CiAgICB9Cn0KIyAxMTcwICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhp Y3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd0NvbG9yKERyYXdDb250 ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeCwg Y29uc3QgZG91YmxlIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYWludE1l dGhvZCBwYWludE1ldGhvZCkKewogIGNvbnN0IGNoYXIKICAgICpwID0gMDsKCiAgKCh2b2lkKSAo KGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBo aWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxMTc3LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQp TlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRh YlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j IiwgMTE3OCwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsK CiAgc3dpdGNoIChwYWludE1ldGhvZCkKICAgIHsKICAgIGNhc2UgUG9pbnRNZXRob2Q6CiAgICAg IHAgPSAicG9pbnQiOwogICAgICBicmVhazsKICAgIGNhc2UgUmVwbGFjZU1ldGhvZDoKICAgICAg cCA9ICJyZXBsYWNlIjsKICAgICAgYnJlYWs7CiAgICBjYXNlIEZsb29kZmlsbE1ldGhvZDoKICAg ICAgcCA9ICJmbG9vZGZpbGwiOwogICAgICBicmVhazsKICAgIGNhc2UgRmlsbFRvQm9yZGVyTWV0 aG9kOgogICAgICBwID0gImZpbGx0b2JvcmRlciI7CiAgICAgIGJyZWFrOwogICAgY2FzZSBSZXNl dE1ldGhvZDoKICAgICAgcCA9ICJyZXNldCI7CiAgICAgIGJyZWFrOwogICAgfQoKICBpZiAocCAh PSAwKQogICAgTXZnUHJpbnRmKGNvbnRleHQsICJjb2xvciAlLjRnLCUuNGcgJXNcbiIsIHgsIHks IHApOwp9CiMgMTIyNyAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNr L21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdDb21tZW50KERyYXdDb250ZXh0IGNvbnRleHQsY29u c3QgY2hhciogY29tbWVudCkKewoKCiAgTXZnUHJpbnRmKGNvbnRleHQsICIjJXNcbiIsIGNvbW1l bnQpOwp9CiMgMTI1OCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNr L21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdEZXN0cm95Q29udGV4dChEcmF3Q29udGV4dCBjb250 ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2Vw cmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4v c3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxMjYwLCAiY29udGV4 dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWdu YXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBh c3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01h Z2ljay9tYWdpY2svZHJhdy5jIiwgMTI2MSwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tT aWduYXR1cmUiKSwgMCkpKTsKCgogIGNvbnRleHQtPnBhdGhfb3BlcmF0aW9uID0gUGF0aERlZmF1 bHRPcGVyYXRpb247CiAgY29udGV4dC0+cGF0aF9tb2RlID0gRGVmYXVsdFBhdGhNb2RlOwoKCiAg Y29udGV4dC0+aW5kZW50X2RlcHRoID0gMDsKCgogIGZvciAoIDsgY29udGV4dC0+aW5kZXggPiAw OyBjb250ZXh0LT5pbmRleC0tKQogICAgewogICAgICBEZXN0cm95RHJhd0luZm8oKGNvbnRleHQt PmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pKTsKICAgICAgKGNvbnRleHQtPmdyYXBo aWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pID0gKERyYXdJbmZvKikgMDsKICAgIH0KICBEZXN0 cm95RHJhd0luZm8oKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pKTsK ICAoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSkgPSAoRHJhd0luZm8q KSAwOwogIExpYmVyYXRlTWVtb3J5KCh2b2lkICoqKSAmY29udGV4dC0+Z3JhcGhpY19jb250ZXh0 KTsKCgogIExpYmVyYXRlTWVtb3J5KCh2b2lkICoqKSAmY29udGV4dC0+cGF0dGVybl9pZCk7CiAg Y29udGV4dC0+cGF0dGVybl9vZmZzZXQgPSAwOwoKICBjb250ZXh0LT5wYXR0ZXJuX2JvdW5kcy54 ID0gMDsKICBjb250ZXh0LT5wYXR0ZXJuX2JvdW5kcy55ID0gMDsKICBjb250ZXh0LT5wYXR0ZXJu X2JvdW5kcy53aWR0aCA9IDA7CiAgY29udGV4dC0+cGF0dGVybl9ib3VuZHMuaGVpZ2h0ID0gMDsK CgogIExpYmVyYXRlTWVtb3J5KCh2b2lkICoqKSAmY29udGV4dC0+bXZnKTsKICBjb250ZXh0LT5t dmdfYWxsb2MgPSAwOwogIGNvbnRleHQtPm12Z19sZW5ndGggPSAwOwoKCiAgY29udGV4dC0+aW1h Z2UgPSAoSW1hZ2UqKTA7CgoKICBjb250ZXh0LT5zaWduYXR1cmUgPSAwOwogIExpYmVyYXRlTWVt b3J5KCh2b2lkICoqKSAmY29udGV4dCk7Cn0KIyAxMzM5ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3Jh cGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd0VsbGlwc2UoRHJh d0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91 YmxlIG94LCBjb25zdCBkb3VibGUgb3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGRvdWJsZSByeCwgY29uc3QgZG91YmxlIHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBkb3VibGUgc3RhcnQsIGNvbnN0IGRvdWJsZSBlbmQpCnsKICAoKHZvaWQpICgo Y29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWls ZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhp Y3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDEzNDQsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClO VUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFi VUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAi L2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMi LCAxMzQ1LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoK ICBNdmdQcmludGYoY29udGV4dCwgImVsbGlwc2UgJS40ZywlLjRnICUuNGcsJS40ZyAlLjRnLCUu NGdcbiIsCiAgICAgICAgICAgIG94LCBveSwgcngsIHJ5LCBzdGFydCwgZW5kKTsKfQojIDEzNzIg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j IgogUGl4ZWxQYWNrZXQgRHJhd0dldEZpbGxDb2xvcihEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAg KCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIl czoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBo aWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxMzc0LCAiY29udGV4dCAhPSAoRHJh d0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0g MHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24g YCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdp Y2svZHJhdy5jIiwgMTM3NSwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUi KSwgMCkpKTsKCiAgcmV0dXJuIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5k ZXhdKS0+ZmlsbDsKfQojIDE0MDUgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3U2V0RmlsbENvbG9yKERyYXdDb250ZXh0 IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGl4ZWxQ YWNrZXQgKmZpbGxfY29sb3IpCnsKICBQaXhlbFBhY2tldAogICAgKmN1cnJlbnRfZmlsbCwKICAg IG5ld19maWxsOwoKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDog KF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJp ZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDE0MTIsICJj b250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQt PnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBo aWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxNDEzLCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1h Z2lja1NpZ25hdHVyZSIpLCAwKSkpOwogICgodm9pZCkgKChmaWxsX2NvbG9yICE9IChjb25zdCBQ aXhlbFBhY2tldCAqKSAwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRp b24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svZHJhdy5jIiwgMTQxNCwgImZpbGxfY29sb3IgIT0gKGNvbnN0IFBpeGVsUGFja2V0ICop IE5VTEwiKSwgMCkpKTsKCiAgbmV3X2ZpbGwgPSAqZmlsbF9jb2xvcjsKICBpZihuZXdfZmlsbC5v cGFjaXR5ICE9IDI1NVVMKQogICAgbmV3X2ZpbGwub3BhY2l0eSA9IChjb250ZXh0LT5ncmFwaGlj X2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+b3BhY2l0eTsKCiAgY3VycmVudF9maWxsID0gJihj b250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZmlsbDsKICBpZiggY29u dGV4dC0+ZmlsdGVyX29mZiB8fCAhKCgoKGN1cnJlbnRfZmlsbCktPnJlZCA9PSAoJm5ld19maWxs KS0+cmVkKSAmJiAoKGN1cnJlbnRfZmlsbCktPmdyZWVuID09ICgmbmV3X2ZpbGwpLT5ncmVlbikg JiYgKChjdXJyZW50X2ZpbGwpLT5ibHVlID09ICgmbmV3X2ZpbGwpLT5ibHVlKSAmJiAoKGN1cnJl bnRfZmlsbCktPm9wYWNpdHkgPT0gKCZuZXdfZmlsbCktPm9wYWNpdHkpKSkgKQogICAgewogICAg ICAoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPmZpbGwgPSBuZXdf ZmlsbDsKCiAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAiZmlsbCAiKTsKICAgICAgTXZnQXBwZW5k Q29sb3IoY29udGV4dCwgZmlsbF9jb2xvcik7CiAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAiXG4i KTsKICAgIH0KfQojIDE0NTYgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01h Z2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3U2V0RmlsbENvbG9yU3RyaW5nKERyYXdDb250 ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciogZmlsbF9jb2xvcikKewogIFBpeGVsUGFja2V0CiAgICBwaXhlbF9wYWNrZXQ7Cgog IGlmKFF1ZXJ5Q29sb3JEYXRhYmFzZShmaWxsX2NvbG9yLCZwaXhlbF9wYWNrZXQsJmNvbnRleHQt PmltYWdlLT5leGNlcHRpb24pKQogICAgRHJhd1NldEZpbGxDb2xvcihjb250ZXh0LCZwaXhlbF9w YWNrZXQpOwp9CiMgMTQ5MyAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdTZXRGaWxsUGF0dGVyblVSTChEcmF3Q29udGV4 dCBjb250ZXh0LCBjb25zdCBjaGFyKiBmaWxsX3VybCkKewogIGNoYXIKICAgIHBhdHRlcm5bMjA1 M107CgogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJp bnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3Ny Yy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMTQ5OCwgImNvbnRleHQg IT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0 dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNz ZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdp Y2svbWFnaWNrL2RyYXcuYyIsIDE0OTksICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2ln bmF0dXJlIiksIDApKSk7CiAgKCh2b2lkKSAoKGZpbGxfdXJsICE9IDApID8gMCA6IChfX2Vwcmlu dGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3Jj L2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxNTAwLCAiZmlsbF91cmwg IT0gTlVMTCIpLCAwKSkpOwoKICBpZihmaWxsX3VybFswXSAhPSAnIycpCiAgICB7IGlmIChjb250 ZXh0LT5pbWFnZS0+ZXhjZXB0aW9uLnNldmVyaXR5ID4gKGxvbmcpRHJhd1dhcm5pbmcpIFRocm93 RXhjZXB0aW9uKCZjb250ZXh0LT5pbWFnZS0+ZXhjZXB0aW9uLERyYXdXYXJuaW5nLCJOb3RBUmVs YXRpdmV1UkwiLGZpbGxfdXJsKTsgcmV0dXJuOyB9OwoKICBGb3JtYXRTdHJpbmcocGF0dGVybiwi WyUuMTAyNHNdIixmaWxsX3VybCsxKTsKCiAgaWYgKEdldEltYWdlQXR0cmlidXRlKGNvbnRleHQt PmltYWdlLHBhdHRlcm4pID09IChJbWFnZUF0dHJpYnV0ZSAqKSAwKQogICAgewogICAgICB7IGlm IChjb250ZXh0LT5pbWFnZS0+ZXhjZXB0aW9uLnNldmVyaXR5ID4gKGxvbmcpRHJhd1dhcm5pbmcp IFRocm93RXhjZXB0aW9uKCZjb250ZXh0LT5pbWFnZS0+ZXhjZXB0aW9uLERyYXdXYXJuaW5nLCJV UkxOb3RGb3VuZCIsZmlsbF91cmwpOyByZXR1cm47IH0KICAgIH0KICBlbHNlCiAgICB7CiAgICAg IGNoYXIKICAgICAgICBwYXR0ZXJuX3NwZWNbMjA1M107CgogICAgICBGb3JtYXRTdHJpbmcocGF0 dGVybl9zcGVjLCJ1cmwoJS4xMDI0cykiLGZpbGxfdXJsKTsKCgoKICAgICAgaWYgKChjb250ZXh0 LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZmlsbC5vcGFjaXR5ICE9IDI1NVVM KQogICAgICAgIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+Zmls bC5vcGFjaXR5PShjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+b3Bh Y2l0eTsKCiAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAiZmlsbCAlc1xuIixwYXR0ZXJuX3NwZWMp OwogICAgfQp9CiMgMTU1MCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9kcmF3LmMiCiBkb3VibGUgRHJhd0dldEZpbGxPcGFjaXR5KERyYXdDb250ZXh0 IGNvbnRleHQpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDog KF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJp ZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDE1NTIsICJj b250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQt PnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBo aWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxNTUzLCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1h Z2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICByZXR1cm4gKChkb3VibGUpKGNvbnRleHQtPmdyYXBo aWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5vcGFjaXR5LzI1NVVMKTsKfQojIDE1ODMgIi9o b21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgog dm9pZCBEcmF3U2V0RmlsbE9wYWNpdHkoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBmaWxsX29wYWNpdHkpCnsKICBR dWFudHVtCiAgICBvcGFjaXR5OwoKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQp MCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIv aG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIs IDE1ODksICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAo KGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIl czoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBo aWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxNTkwLCAiY29udGV4dC0+c2lnbmF0 dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBvcGFjaXR5ID0gKFF1YW50dW0pKChk b3VibGUpIDI1NVVMKigxLjAtKGZpbGxfb3BhY2l0eSA8PSAxLjAgPyBmaWxsX29wYWNpdHkgOiAx LjAgKSkrMC41KTsKCiAgaWYgKGNvbnRleHQtPmZpbHRlcl9vZmYgfHwgKChjb250ZXh0LT5ncmFw aGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+b3BhY2l0eSAhPSBvcGFjaXR5KSkKICAgIHsK ICAgICAgKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5vcGFjaXR5 ID0gb3BhY2l0eTsKICAgICAgTXZnUHJpbnRmKGNvbnRleHQsICJmaWxsLW9wYWNpdHkgJS40Z1xu IiwgZmlsbF9vcGFjaXR5KTsKICAgIH0KfQojIDE2MjIgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFw aGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogRmlsbFJ1bGUgRHJhd0dldEZpbGxS dWxlKERyYXdDb250ZXh0IGNvbnRleHQpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0Nv bnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydc biIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2Ry YXcuYyIsIDE2MjQsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2 b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2Vwcmlu dGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3Jj L2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxNjI1LCAiY29udGV4dC0+ c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICByZXR1cm4gKGNvbnRleHQt PmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5maWxsX3J1bGU7Cn0KIyAxNjU0ICIv aG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIK IHZvaWQgRHJhd1NldEZpbGxSdWxlKERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsUnVsZSBmaWxsX3J1bGUpCnsKICBjb25zdCBj aGFyCiAgICAqcCA9IDA7CgogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/ IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21l L2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMTY2 MCwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29u dGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1 OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3Mv R3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDE2NjEsICJjb250ZXh0LT5zaWduYXR1cmUg PT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIGlmKGNvbnRleHQtPmZpbHRlcl9vZmYgfHwg KChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZmlsbF9ydWxlICE9 IGZpbGxfcnVsZSkpCiAgICB7CiAgICAgIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4 dC0+aW5kZXhdKS0+ZmlsbF9ydWxlID0gZmlsbF9ydWxlOwoKICAgICAgc3dpdGNoIChmaWxsX3J1 bGUpCiAgICAgICAgewogICAgICAgIGNhc2UgRXZlbk9kZFJ1bGU6CiAgICAgICAgICBwID0gImV2 ZW5vZGQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBOb25aZXJvUnVsZToKICAgICAg ICAgIHAgPSAibm9uemVybyI7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAg ICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKHAgIT0gMCkKICAgICAgICBNdmdQcmlu dGYoY29udGV4dCwgImZpbGwtcnVsZSAlc1xuIiwgcCk7CiAgICB9Cn0KIyAxNzA3ICIvaG9tZS9i ZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIGNoYXIg KkRyYXdHZXRGb250KERyYXdDb250ZXh0IGNvbnRleHQpCnsKICAoKHZvaWQpICgoY29udGV4dCAh PSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0 aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2RyYXcuYyIsIDE3MDksICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDAp KSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6 IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZy aWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxNzEwLCAi Y29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBpZiAoKGNv bnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5mb250ICE9IChjaGFyICop IDApCiAgICByZXR1cm4gQWxsb2NhdGVTdHJpbmcoKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtj b250ZXh0LT5pbmRleF0pLT5mb250KTsKICBlbHNlCiAgICByZXR1cm4gKGNoYXIgKikgMDsKfQoj IDE3NDMgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2sv ZHJhdy5jIgogdm9pZCBEcmF3U2V0Rm9udChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFy ICpmb250X25hbWUpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAw IDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9i ZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDE3NDUs ICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRl eHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTog ZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dy YXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxNzQ2LCAiY29udGV4dC0+c2lnbmF0dXJlID09 IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwogICgodm9pZCkgKChmb250X25hbWUgIT0gKGNvbnN0 IGNoYXIgKikgMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAl cydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNr L2RyYXcuYyIsIDE3NDcsICJmb250X25hbWUgIT0gKGNvbnN0IGNoYXIgKikgTlVMTCIpLCAwKSkp OwoKICBpZihjb250ZXh0LT5maWx0ZXJfb2ZmIHx8ICgoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0 W2NvbnRleHQtPmluZGV4XSktPmZvbnQgPT0gMCkgfHwKICAgICBMb2NhbGVDb21wYXJlKChjb250 ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+Zm9udCxmb250X25hbWUpICE9 IDApCiAgICB7CiAgICAgICh2b2lkKSBDbG9uZVN0cmluZygmKGNvbnRleHQtPmdyYXBoaWNfY29u dGV4dFtjb250ZXh0LT5pbmRleF0pLT5mb250LGZvbnRfbmFtZSk7CiAgICAgIGlmKChjb250ZXh0 LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+Zm9udCA9PSAoY2hhciopMCkKICAg ICAgICB7IGlmIChjb250ZXh0LT5pbWFnZS0+ZXhjZXB0aW9uLnNldmVyaXR5ID4gKGxvbmcpUmVz b3VyY2VMaW1pdEVycm9yKSBUaHJvd0V4Y2VwdGlvbigmY29udGV4dC0+aW1hZ2UtPmV4Y2VwdGlv bixSZXNvdXJjZUxpbWl0RXJyb3IsIk1lbW9yeUFsbG9jYXRpb25GYWlsZWQiLCJVbmFibGVUb0Ry YXdPbkltYWdlIik7IHJldHVybjsgfTsKCiAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAiZm9udCAn JXMnXG4iLCBmb250X25hbWUpOwogICAgfQp9CiMgMTc4MiAiL2hvbWUvYmZyaWVzZW4vc3JjL2dy YXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiBjaGFyICpEcmF3R2V0Rm9udEZh bWlseShEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdD b250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMn XG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9k cmF3LmMiLCAxNzg0LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgo dm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJp bnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3Ny Yy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMTc4NSwgImNvbnRleHQt PnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgaWYgKChjb250ZXh0LT5n cmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZmFtaWx5ICE9IDApCiAgICByZXR1cm4g QWxsb2NhdGVTdHJpbmcoKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0p LT5mYW1pbHkpOwogIGVsc2UKICAgIHJldHVybiAoY2hhciAqKSAwOwp9CiMgMTgxNyAiL2hvbWUv YmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiB2b2lk IERyYXdTZXRGb250RmFtaWx5KERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvbnRfZmFtaWx5KQp7CiAgKCh2b2lkKSAo KGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBo aWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAxODIwLCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQp TlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRh YlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j IiwgMTgyMSwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsK ICAoKHZvaWQpICgoZm9udF9mYW1pbHkgIT0gKGNvbnN0IGNoYXIgKikgMCkgPyAwIDogKF9fZXBy aW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9z cmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDE4MjIsICJmb250X2Zh bWlseSAhPSAoY29uc3QgY2hhciAqKSBOVUxMIiksIDApKSk7CgogIGlmKGNvbnRleHQtPmZpbHRl cl9vZmYgfHwgKChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZmFt aWx5ID09IDApIHx8CiAgICAgTG9jYWxlQ29tcGFyZSgoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0 W2NvbnRleHQtPmluZGV4XSktPmZhbWlseSxmb250X2ZhbWlseSkgIT0gMCkKICAgIHsKICAgICAg KHZvaWQpIENsb25lU3RyaW5nKCYoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmlu ZGV4XSktPmZhbWlseSxmb250X2ZhbWlseSk7CiAgICAgIGlmKChjb250ZXh0LT5ncmFwaGljX2Nv bnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZmFtaWx5ID09IChjaGFyKikwKQogICAgICAgIHsgaWYg KGNvbnRleHQtPmltYWdlLT5leGNlcHRpb24uc2V2ZXJpdHkgPiAobG9uZylSZXNvdXJjZUxpbWl0 RXJyb3IpIFRocm93RXhjZXB0aW9uKCZjb250ZXh0LT5pbWFnZS0+ZXhjZXB0aW9uLFJlc291cmNl TGltaXRFcnJvciwiTWVtb3J5QWxsb2NhdGlvbkZhaWxlZCIsIlVuYWJsZVRvRHJhd09uSW1hZ2Ui KTsgcmV0dXJuOyB9OwoKICAgICAgTXZnUHJpbnRmKGNvbnRleHQsICJmb250LWZhbWlseSAnJXMn XG4iLCBmb250X2ZhbWlseSk7CiAgICB9Cn0KIyAxODU2ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3Jh cGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIGRvdWJsZSBEcmF3R2V0Rm9udFNp emUoRHJhd0NvbnRleHQgY29udGV4dCkKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29u dGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xu IiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJh dy5jIiwgMTg1OCwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZv aWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50 ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMv Z3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDE4NTksICJjb250ZXh0LT5z aWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIHJldHVybiAoY29udGV4dC0+ Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPnBvaW50c2l6ZTsKfQojIDE4ODggIi9o b21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgog dm9pZCBEcmF3U2V0Rm9udFNpemUoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBwb2ludHNpemUpCnsKICAoKHZvaWQpICgo Y29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWls ZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhp Y3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDE4OTEsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClO VUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFi VUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAi L2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMi LCAxODkyLCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoK ICBpZihjb250ZXh0LT5maWx0ZXJfb2ZmIHx8CiAgICAgKCgoKGNvbnRleHQtPmdyYXBoaWNfY29u dGV4dFtjb250ZXh0LT5pbmRleF0pLT5wb2ludHNpemUtcG9pbnRzaXplKSA8IDAgPyAtKChjb250 ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+cG9pbnRzaXplLXBvaW50c2l6 ZSkgOiAoKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5wb2ludHNp emUtcG9pbnRzaXplKSkgPiAxLjBlLTEyKSkKICAgIHsKICAgICAgKGNvbnRleHQtPmdyYXBoaWNf Y29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5wb2ludHNpemU9cG9pbnRzaXplOwoKICAgICAgTXZn UHJpbnRmKGNvbnRleHQsICJmb250LXNpemUgJS40Z1xuIiwgcG9pbnRzaXplKTsKICAgIH0KfQoj IDE5MjQgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2sv ZHJhdy5jIgogU3RyZXRjaFR5cGUgRHJhd0dldEZvbnRTdHJldGNoKERyYXdDb250ZXh0IGNvbnRl eHQpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXBy aW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9z cmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDE5MjYsICJjb250ZXh0 ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25h dHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFz c2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9kcmF3LmMiLCAxOTI3LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1Np Z25hdHVyZSIpLCAwKSkpOwoKICByZXR1cm4gKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250 ZXh0LT5pbmRleF0pLT5zdHJldGNoOwp9CiMgMTk2MSAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBo aWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdTZXRGb250U3RyZXRj aChEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgU3RyZXRjaFR5cGUgZm9udF9zdHJldGNoKQp7CiAgY29uc3QgY2hhcgogICAgKnAg PSAwOwoKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXBy aW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9z cmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDE5NjcsICJjb250ZXh0 ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25h dHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFz c2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9kcmF3LmMiLCAxOTY4LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1Np Z25hdHVyZSIpLCAwKSkpOwoKICBpZihjb250ZXh0LT5maWx0ZXJfb2ZmIHx8ICgoY29udGV4dC0+ Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPnN0cmV0Y2ggIT0gZm9udF9zdHJldGNo KSkKICAgIHsKICAgICAgKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0p LT5zdHJldGNoPWZvbnRfc3RyZXRjaDsKCiAgICAgIHN3aXRjaCAoZm9udF9zdHJldGNoKQogICAg ICAgIHsKICAgICAgICBjYXNlIE5vcm1hbFN0cmV0Y2g6CiAgICAgICAgICBwID0gIm5vcm1hbCI7 CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFVsdHJhQ29uZGVuc2VkU3RyZXRjaDoKICAg ICAgICAgIHAgPSAidWx0cmEtY29uZGVuc2VkIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNh c2UgRXh0cmFDb25kZW5zZWRTdHJldGNoOgogICAgICAgICAgcCA9ICJleHRyYS1jb25kZW5zZWQi OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDb25kZW5zZWRTdHJldGNoOgogICAgICAg ICAgcCA9ICJjb25kZW5zZWQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBTZW1pQ29u ZGVuc2VkU3RyZXRjaDoKICAgICAgICAgIHAgPSAic2VtaS1jb25kZW5zZWQiOwogICAgICAgICAg YnJlYWs7CiAgICAgICAgY2FzZSBTZW1pRXhwYW5kZWRTdHJldGNoOgogICAgICAgICAgcCA9ICJz ZW1pLWV4cGFuZGVkIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRXhwYW5kZWRTdHJl dGNoOgogICAgICAgICAgcCA9ICJleHBhbmRlZCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBj YXNlIEV4dHJhRXhwYW5kZWRTdHJldGNoOgogICAgICAgICAgcCA9ICJleHRyYS1leHBhbmRlZCI7 CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFVsdHJhRXhwYW5kZWRTdHJldGNoOgogICAg ICAgICAgcCA9ICJ1bHRyYS1leHBhbmRlZCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNl IEFueVN0cmV0Y2g6CiAgICAgICAgICBwID0gImFsbCI7CiAgICAgICAgICBicmVhazsKICAgICAg ICB9CgogICAgICBpZiAocCAhPSAwKQogICAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAiZm9udC1z dHJldGNoICclcydcbiIsIHApOwogICAgfQp9CiMgMjAzNCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dy YXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiBTdHlsZVR5cGUgRHJhd0dldEZv bnRTdHlsZShEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERy YXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBg JXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2lj ay9kcmF3LmMiLCAyMDM2LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwog ICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19l cHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2Vu L3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjAzNywgImNvbnRl eHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgcmV0dXJuIChjb250 ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+c3R5bGU7Cn0KIyAyMDY3ICIv aG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIK IHZvaWQgRHJhd1NldEZvbnRTdHlsZShEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0eWxlVHlwZSBzdHlsZSkKewogIGNvbnN0IGNo YXIKICAgICpwID0gMDsKCiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8g MCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUv YmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAyMDcz LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250 ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6 IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjA3NCwgImNvbnRleHQtPnNpZ25hdHVyZSA9 PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgaWYoY29udGV4dC0+ZmlsdGVyX29mZiB8fCAo KGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5zdHlsZSAhPSBzdHls ZSkpCiAgICB7CiAgICAgIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhd KS0+c3R5bGU9c3R5bGU7CgogICAgICBzd2l0Y2ggKHN0eWxlKQogICAgICAgIHsKICAgICAgICBj YXNlIE5vcm1hbFN0eWxlOgogICAgICAgICAgcCA9ICJub3JtYWwiOwogICAgICAgICAgYnJlYWs7 CiAgICAgICAgY2FzZSBJdGFsaWNTdHlsZToKICAgICAgICAgIHAgPSAiaXRhbGljIjsKICAgICAg ICAgIGJyZWFrOwogICAgICAgIGNhc2UgT2JsaXF1ZVN0eWxlOgogICAgICAgICAgcCA9ICJvYmxp cXVlIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQW55U3R5bGU6CiAgICAgICAgICBw ID0gImFsbCI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICBpZiAocCAhPSAwKQog ICAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAiZm9udC1zdHlsZSAnJXMnXG4iLCBwKTsKICAgIH0K fQojIDIxMjIgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdp Y2svZHJhdy5jIgogdW5zaWduZWQgbG9uZyBEcmF3R2V0Rm9udFdlaWdodChEcmF3Q29udGV4dCBj b250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChf X2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVz ZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAyMTI0LCAiY29u dGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5z aWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxl ZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjEyNSwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdp Y2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgcmV0dXJuIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRb Y29udGV4dC0+aW5kZXhdKS0+d2VpZ2h0Owp9CiMgMjE1NSAiL2hvbWUvYmZyaWVzZW4vc3JjL2dy YXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdTZXRGb250V2Vp Z2h0KERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZm9udF93ZWlnaHQpCnsKICAoKHZvaWQpICgoY29udGV4 dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNz ZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdp Y2svbWFnaWNrL2RyYXcuYyIsIDIxNTgsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiks IDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8g MCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUv YmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAyMTU5 LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBpZihj b250ZXh0LT5maWx0ZXJfb2ZmIHx8ICgoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQt PmluZGV4XSktPndlaWdodCAhPSBmb250X3dlaWdodCkpCiAgICB7CiAgICAgIChjb250ZXh0LT5n cmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+d2VpZ2h0PWZvbnRfd2VpZ2h0OwogICAg ICBNdmdQcmludGYoY29udGV4dCwgImZvbnQtd2VpZ2h0ICVsdVxuIiwgZm9udF93ZWlnaHQpOwog ICAgfQp9CiMgMjE5MCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNr L21hZ2ljay9kcmF3LmMiCiBHcmF2aXR5VHlwZSBEcmF3R2V0R3Jhdml0eShEcmF3Q29udGV4dCBj b250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChf X2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVz ZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAyMTkyLCAiY29u dGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5z aWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxl ZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjE5MywgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdp Y2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgcmV0dXJuIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRb Y29udGV4dC0+aW5kZXhdKS0+Z3Jhdml0eTsKfQojIDIyMjYgIi9ob21lL2Jmcmllc2VuL3NyYy9n cmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3U2V0R3Jhdml0 eShEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBHcmF2aXR5VHlwZSBncmF2aXR5KQp7CiAgY29uc3QgY2hhcgogICAgKnAgPSAwOwoKICAo KHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVz OiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhp Y3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDIyMzIsICJjb250ZXh0ICE9IChEcmF3 Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAw eGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBg JXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2lj ay9kcmF3LmMiLCAyMjMzLCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIp LCAwKSkpOwoKICBpZihjb250ZXh0LT5maWx0ZXJfb2ZmIHx8ICgoY29udGV4dC0+Z3JhcGhpY19j b250ZXh0W2NvbnRleHQtPmluZGV4XSktPmdyYXZpdHkgIT0gZ3Jhdml0eSkpCiAgICB7CiAgICAg IChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+Z3Jhdml0eT1ncmF2 aXR5OwoKICAgICAgc3dpdGNoIChncmF2aXR5KQogICAgICAgIHsKICAgICAgICBjYXNlIE5vcnRo V2VzdEdyYXZpdHk6CiAgICAgICAgICBwID0gIk5vcnRoV2VzdCI7CiAgICAgICAgICBicmVhazsK ICAgICAgICBjYXNlIE5vcnRoR3Jhdml0eToKICAgICAgICAgIHAgPSAiTm9ydGgiOwogICAgICAg ICAgYnJlYWs7CiAgICAgICAgY2FzZSBOb3J0aEVhc3RHcmF2aXR5OgogICAgICAgICAgcCA9ICJO b3J0aEVhc3QiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBXZXN0R3Jhdml0eToKICAg ICAgICAgIHAgPSAiV2VzdCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENlbnRlckdy YXZpdHk6CiAgICAgICAgICBwID0gIkNlbnRlciI7CiAgICAgICAgICBicmVhazsKICAgICAgICBj YXNlIEVhc3RHcmF2aXR5OgogICAgICAgICAgcCA9ICJFYXN0IjsKICAgICAgICAgIGJyZWFrOwog ICAgICAgIGNhc2UgU291dGhXZXN0R3Jhdml0eToKICAgICAgICAgIHAgPSAiU291dGhXZXN0IjsK ICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgU291dGhHcmF2aXR5OgogICAgICAgICAgcCA9 ICJTb3V0aCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFNvdXRoRWFzdEdyYXZpdHk6 CiAgICAgICAgICBwID0gIlNvdXRoRWFzdCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNl IFN0YXRpY0dyYXZpdHk6CiAgICAgICAgY2FzZSBGb3JnZXRHcmF2aXR5OgogICAgICAgICAgewog ICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKHAgIT0gMCkK ICAgICAgICBNdmdQcmludGYoY29udGV4dCwgImdyYXZpdHkgJXNcbiIsIHApOwogICAgfQp9CiMg MjMyMiAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9k cmF3LmMiCiB2b2lkIERyYXdDb21wb3NpdGUoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVf b3BlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHgs IGNvbnN0IGRvdWJsZSB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRv dWJsZSB3aWR0aCwgY29uc3QgZG91YmxlIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBJbWFnZSAqIGltYWdlICkKCnsKICBJbWFnZUluZm8KICAgICppbWFnZV9p bmZvOwoKICBJbWFnZQogICAgKmNsb25lX2ltYWdlOwoKICBjaGFyCiAgICAqbWVkaWFfdHlwZSA9 IDAsCiAgICAqYmFzZTY0ID0gMDsKCiAgY29uc3QgY2hhcgogICAgKm1vZGUgPSAwOwoKICB1bnNp Z25lZCBjaGFyCiAgICAqYmxvYiA9ICh1bnNpZ25lZCBjaGFyKikwOwoKICBzaXplX3QKICAgIGJs b2JfbGVuZ3RoID0gMjA0OCwKICAgIGVuY29kZWRfbGVuZ3RoID0gMDsKCiAgTW9uaXRvckhhbmRs ZXIKICAgIGhhbmRsZXI7CgogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/ IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21l L2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjM1 MiwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoaW1h Z2UgIT0gKEltYWdlICopIDApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2Vy dGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNr L21hZ2ljay9kcmF3LmMiLCAyMzUzLCAiaW1hZ2UgIT0gKEltYWdlICopIE5VTEwiKSwgMCkpKTsK ICAoKHZvaWQpICgod2lkdGggIT0gMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQg YXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NN YWdpY2svbWFnaWNrL2RyYXcuYyIsIDIzNTQsICJ3aWR0aCAhPSAwIiksIDApKSk7CiAgKCh2b2lk KSAoKGhlaWdodCAhPSAwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRp b24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svZHJhdy5jIiwgMjM1NSwgImhlaWdodCAhPSAwIiksIDApKSk7CiAgKCh2b2lkKSAoKCpp bWFnZS0+bWFnaWNrICE9ICdcMCcpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFz c2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9kcmF3LmMiLCAyMzU2LCAiKmltYWdlLT5tYWdpY2sgIT0gJ1xcMCciKSwgMCkp KTsKCgoKCiAgY2xvbmVfaW1hZ2UgPSBDbG9uZUltYWdlKGltYWdlLDAsMCwxLCZjb250ZXh0LT5p bWFnZS0+ZXhjZXB0aW9uKTsKICBpZighY2xvbmVfaW1hZ2UpCiAgICByZXR1cm47CgogIGltYWdl X2luZm8gPSBDbG9uZUltYWdlSW5mbygoSW1hZ2VJbmZvKikwKTsKICBpZighaW1hZ2VfaW5mbykK ICAgIHsgaWYgKGNvbnRleHQtPmltYWdlLT5leGNlcHRpb24uc2V2ZXJpdHkgPiAobG9uZylSZXNv dXJjZUxpbWl0RXJyb3IpIFRocm93RXhjZXB0aW9uKCZjb250ZXh0LT5pbWFnZS0+ZXhjZXB0aW9u LFJlc291cmNlTGltaXRFcnJvciwiTWVtb3J5QWxsb2NhdGlvbkZhaWxlZCIsIlVuYWJsZVRvRHJh d09uSW1hZ2UiKTsgcmV0dXJuOyB9OwoKICBoYW5kbGVyPVNldE1vbml0b3JIYW5kbGVyKChNb25p dG9ySGFuZGxlcikgMCk7CiAgYmxvYiA9ICh1bnNpZ25lZCBjaGFyKilJbWFnZVRvQmxvYiggaW1h Z2VfaW5mbywgY2xvbmVfaW1hZ2UsICZibG9iX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmY29udGV4dC0+aW1hZ2UtPmV4Y2VwdGlvbiApOwogICh2b2lkKSBT ZXRNb25pdG9ySGFuZGxlcihoYW5kbGVyKTsKICBEZXN0cm95SW1hZ2VJbmZvKGltYWdlX2luZm8p OwogIERlc3Ryb3lJbWFnZUxpc3QoY2xvbmVfaW1hZ2UpOwogIGlmKCFibG9iKQogICAgcmV0dXJu OwoKICBiYXNlNjQgPSBCYXNlNjRFbmNvZGUoYmxvYixibG9iX2xlbmd0aCwmZW5jb2RlZF9sZW5n dGgpOwogIExpYmVyYXRlTWVtb3J5KCh2b2lkKiopJmJsb2IpOwogIGlmKCFiYXNlNjQpCiAgICB7 CiAgICAgIGNoYXIKICAgICAgICBidWZmZXJbMjA1M107CgogICAgICBGb3JtYXRTdHJpbmcoYnVm ZmVyLCIlbGQgYnl0ZXMiLCAoNEwqYmxvYl9sZW5ndGgvM0wrNEwpKTsKICAgICAgeyBpZiAoY29u dGV4dC0+aW1hZ2UtPmV4Y2VwdGlvbi5zZXZlcml0eSA+IChsb25nKVJlc291cmNlTGltaXRXYXJu aW5nKSBUaHJvd0V4Y2VwdGlvbigmY29udGV4dC0+aW1hZ2UtPmV4Y2VwdGlvbixSZXNvdXJjZUxp bWl0V2FybmluZywiVW5hYmxlVG9BbGxvY2F0ZU1lbW9yeSIsYnVmZmVyKTsgcmV0dXJuOyB9CiAg ICB9CgogIG1vZGUgPSAiY29weSI7CiAgc3dpdGNoIChjb21wb3NpdGVfb3BlcmF0b3IpCiAgICB7 CiAgICBjYXNlIEFkZENvbXBvc2l0ZU9wOgogICAgICBtb2RlID0gImFkZCI7CiAgICAgIGJyZWFr OwogICAgY2FzZSBBdG9wQ29tcG9zaXRlT3A6CiAgICAgIG1vZGUgPSAiYXRvcCI7CiAgICAgIGJy ZWFrOwogICAgY2FzZSBCdW1wbWFwQ29tcG9zaXRlT3A6CiAgICAgIG1vZGUgPSAiYnVtcG1hcCI7 CiAgICAgIGJyZWFrOwogICAgY2FzZSBDbGVhckNvbXBvc2l0ZU9wOgogICAgICBtb2RlID0gImNs ZWFyIjsKICAgICAgYnJlYWs7CiAgICBjYXNlIENvbG9yaXplQ29tcG9zaXRlT3A6CiAgICAgIG1v ZGUgPSAiY29sb3JpemVfbm90X3N1cHBvcnRlZCI7CiAgICAgIGJyZWFrOwogICAgY2FzZSBDb3B5 Qmx1ZUNvbXBvc2l0ZU9wOgogICAgICBtb2RlID0gImNvcHlibHVlIjsKICAgICAgYnJlYWs7CiAg ICBjYXNlIENvcHlDb21wb3NpdGVPcDoKICAgICAgbW9kZSA9ICJjb3B5IjsKICAgICAgYnJlYWs7 CiAgICBjYXNlIENvcHlHcmVlbkNvbXBvc2l0ZU9wOgogICAgICBtb2RlID0gImNvcHlncmVlbiI7 CiAgICAgIGJyZWFrOwogICAgY2FzZSBDb3B5T3BhY2l0eUNvbXBvc2l0ZU9wOgogICAgICBtb2Rl ID0gImNvcHlvcGFjaXR5IjsKICAgICAgYnJlYWs7CiAgICBjYXNlIENvcHlSZWRDb21wb3NpdGVP cDoKICAgICAgbW9kZSA9ICJjb3B5cmVkIjsKICAgICAgYnJlYWs7CiAgICBjYXNlIERhcmtlbkNv bXBvc2l0ZU9wOgogICAgICBtb2RlID0gImRhcmtlbl9ub3Rfc3VwcG9ydGVkIjsKICAgICAgYnJl YWs7CiAgICBjYXNlIERpZmZlcmVuY2VDb21wb3NpdGVPcDoKICAgICAgbW9kZSA9ICJkaWZmZXJl bmNlIjsKICAgICAgYnJlYWs7CiAgICBjYXNlIERpc3BsYWNlQ29tcG9zaXRlT3A6CiAgICAgIG1v ZGUgPSAiZGlzcGxhY2Vfbm90X3N1cHBvcnRlZCI7CiAgICAgIGJyZWFrOwogICAgY2FzZSBEaXNz b2x2ZUNvbXBvc2l0ZU9wOgogICAgICBtb2RlID0gImRpc3NvbHZlX25vdF9zdXBwb3J0ZWQiOwog ICAgICBicmVhazsKICAgIGNhc2UgSHVlQ29tcG9zaXRlT3A6CiAgICAgIG1vZGUgPSAiaHVlX25v dF9zdXBwb3J0ZWQiOwogICAgICBicmVhazsKICAgIGNhc2UgSW5Db21wb3NpdGVPcDoKICAgICAg bW9kZSA9ICJpbiI7CiAgICAgIGJyZWFrOwogICAgY2FzZSBMaWdodGVuQ29tcG9zaXRlT3A6CiAg ICAgIG1vZGUgPSAibGlnaHRlbl9ub3Rfc3VwcG9ydGVkIjsKICAgICAgYnJlYWs7CiAgICBjYXNl IEx1bWluaXplQ29tcG9zaXRlT3A6CiAgICAgIG1vZGUgPSAibHVtaW5pemVfbm90X3N1cHBvcnRl ZCI7CiAgICAgIGJyZWFrOwogICAgY2FzZSBNaW51c0NvbXBvc2l0ZU9wOgogICAgICBtb2RlID0g Im1pbnVzIjsKICAgICAgYnJlYWs7CiAgICBjYXNlIE1vZHVsYXRlQ29tcG9zaXRlT3A6CiAgICAg IG1vZGUgPSAibW9kdWxhdGVfbm90X3N1cHBvcnRlZCI7CiAgICAgIGJyZWFrOwogICAgY2FzZSBN dWx0aXBseUNvbXBvc2l0ZU9wOgogICAgICBtb2RlID0gIm11bHRpcGx5IjsKICAgICAgYnJlYWs7 CiAgICBjYXNlIE5vQ29tcG9zaXRlT3A6CiAgICAgIG1vZGUgPSAibm9fbm90X3N1cHBvcnRlZCI7 CiAgICAgIGJyZWFrOwogICAgY2FzZSBPdXRDb21wb3NpdGVPcDoKICAgICAgbW9kZSA9ICJvdXQi OwogICAgICBicmVhazsKICAgIGNhc2UgT3ZlckNvbXBvc2l0ZU9wOgogICAgICBtb2RlID0gIm92 ZXIiOwogICAgICBicmVhazsKICAgIGNhc2UgT3ZlcmxheUNvbXBvc2l0ZU9wOgogICAgICBtb2Rl ID0gIm92ZXJsYXlfbm90X3N1cHBvcnRlZCI7CiAgICAgIGJyZWFrOwogICAgY2FzZSBQbHVzQ29t cG9zaXRlT3A6CiAgICAgIG1vZGUgPSAicGx1cyI7CiAgICAgIGJyZWFrOwogICAgY2FzZSBTYXR1 cmF0ZUNvbXBvc2l0ZU9wOgogICAgICBtb2RlID0gInNhdHVyYXRlX25vdF9zdXBwb3J0ZWQiOwog ICAgICBicmVhazsKICAgIGNhc2UgU2NyZWVuQ29tcG9zaXRlT3A6CiAgICAgIG1vZGUgPSAic2Ny ZWVuX25vdF9zdXBwb3J0ZWQiOwogICAgICBicmVhazsKICAgIGNhc2UgU3VidHJhY3RDb21wb3Np dGVPcDoKICAgICAgbW9kZSA9ICJzdWJ0cmFjdCI7CiAgICAgIGJyZWFrOwogICAgY2FzZSBUaHJl c2hvbGRDb21wb3NpdGVPcDoKICAgICAgbW9kZSA9ICJ0aHJlc2hvbGQiOwogICAgICBicmVhazsK ICAgIGNhc2UgWG9yQ29tcG9zaXRlT3A6CiAgICAgIG1vZGUgPSAieG9yIjsKICAgICAgYnJlYWs7 CiAgICBkZWZhdWx0OgogICAgICBicmVhazsKICAgIH0KCiAgbWVkaWFfdHlwZSA9IE1hZ2lja1Rv TWltZSggaW1hZ2UtPm1hZ2ljayApOwoKICBpZiggbWVkaWFfdHlwZSAhPSAwICkKICAgIHsKICAg ICAgY2hhcgogICAgICAgICpzdHI7CgogICAgICBpbnQKICAgICAgICByZW1haW5pbmc7CgogICAg ICBNdmdQcmludGYoY29udGV4dCwgImltYWdlICVzICUuNGcsJS40ZyAlLjRnLCUuNGcgJ2RhdGE6 JXM7YmFzZTY0LFxuIiwKICAgICAgICAgICAgICAgIG1vZGUsIHgsIHksIHdpZHRoLCBoZWlnaHQs IG1lZGlhX3R5cGUpOwoKICAgICAgcmVtYWluaW5nID0gKGludCllbmNvZGVkX2xlbmd0aDsKICAg ICAgc3RyID0gYmFzZTY0OwogICAgICB3aGlsZSggcmVtYWluaW5nID4gMCApCiAgICAgICAgewog ICAgICAgICAgTXZnUHJpbnRmKGNvbnRleHQsIiUuNzZzIiwgc3RyKTsKICAgICAgICAgIHJlbWFp bmluZyAtPSA3NjsKICAgICAgICAgIHN0ciArPSA3NjsKICAgICAgICAgIGlmKHJlbWFpbmluZyA+ IDApCiAgICAgICAgICAgIE12Z1ByaW50Zihjb250ZXh0LCJcbiIpOwogICAgICAgIH0KCiAgICAg IE12Z1ByaW50Zihjb250ZXh0LCInXG4iKTsKICAgIH0KCiAgTGliZXJhdGVNZW1vcnkoKHZvaWQq KikmbWVkaWFfdHlwZSk7Cn0KIyAyNTUyICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3Jh cGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd0xpbmUoRHJhd0NvbnRleHQgY29u dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHN4LCBjb25zdCBk b3VibGUgc3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBleCwgY29u c3QgZG91YmxlIGV5KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8g MCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUv YmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAyNTU2 LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250 ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6 IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjU1NywgImNvbnRleHQtPnNpZ25hdHVyZSA9 PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgTXZnUHJpbnRmKGNvbnRleHQsICJsaW5lICUu NGcsJS40ZyAlLjRnLCUuNGdcbiIsIHN4LCBzeSwgZXgsIGV5KTsKfQojIDI2MDIgIi9ob21lL2Jm cmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBE cmF3TWF0dGUoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFBhaW50TWV0aG9kIHBhaW50X21ldGhvZCkKewogIGNvbnN0IGNoYXIKICAgICpw ID0gMDsKCiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2Vw cmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4v c3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAyNjA5LCAiY29udGV4 dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWdu YXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBh c3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01h Z2ljay9tYWdpY2svZHJhdy5jIiwgMjYxMCwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tT aWduYXR1cmUiKSwgMCkpKTsKCiAgc3dpdGNoIChwYWludF9tZXRob2QpCiAgICB7CiAgICBjYXNl IFBvaW50TWV0aG9kOgogICAgICBwID0gInBvaW50IjsKICAgICAgYnJlYWs7CiAgICBjYXNlIFJl cGxhY2VNZXRob2Q6CiAgICAgIHAgPSAicmVwbGFjZSI7CiAgICAgIGJyZWFrOwogICAgY2FzZSBG bG9vZGZpbGxNZXRob2Q6CiAgICAgIHAgPSAiZmxvb2RmaWxsIjsKICAgICAgYnJlYWs7CiAgICBj YXNlIEZpbGxUb0JvcmRlck1ldGhvZDoKICAgICAgcCA9ICJmaWxsdG9ib3JkZXIiOwogICAgICBi cmVhazsKICAgIGNhc2UgUmVzZXRNZXRob2Q6CiAgICAgIHAgPSAicmVzZXQiOwogICAgICBicmVh azsKICAgIH0KCiAgaWYgKHAgIT0gMCkKICAgIE12Z1ByaW50Zihjb250ZXh0LCAibWF0dGUgJS40 ZywlLjRnICVzXG4iLCB4LCB5LCBwKTsKfQojIDI2NjAgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFw aGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3UGF0aENsb3NlKERy YXdDb250ZXh0IGNvbnRleHQpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQp MCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIv aG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIs IDI2NjIsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAo KGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIl czoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBo aWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAyNjYzLCAiY29udGV4dC0+c2lnbmF0 dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBNdmdBdXRvV3JhcFByaW50Zihjb250 ZXh0LCAiJXMiLCBjb250ZXh0LT5wYXRoX21vZGUgPT0gQWJzb2x1dGVQYXRoTW9kZSA/ICJaIiA6 ICJ6Iik7Cn0KIyAyNzA5ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdp Y2svbWFnaWNrL2RyYXcuYyIKc3RhdGljIHZvaWQgRHJhd1BhdGhDdXJ2ZVRvKERyYXdDb250ZXh0 IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYXRoTW9kZSBtb2Rl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHgxLCBjb25zdCBkb3Vi bGUgeTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeDIsIGNvbnN0 IGRvdWJsZSB5MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4LCBj b25zdCBkb3VibGUgeSkKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/ IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21l L2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjcx NSwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29u dGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1 OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3Mv R3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDI3MTYsICJjb250ZXh0LT5zaWduYXR1cmUg PT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIGlmICgoY29udGV4dC0+cGF0aF9vcGVyYXRp b24gIT0gUGF0aEN1cnZlVG9PcGVyYXRpb24pCiAgICAgIHx8IChjb250ZXh0LT5wYXRoX21vZGUg IT0gbW9kZSkpCiAgICB7CiAgICAgIGNvbnRleHQtPnBhdGhfb3BlcmF0aW9uID0gUGF0aEN1cnZl VG9PcGVyYXRpb247CiAgICAgIGNvbnRleHQtPnBhdGhfbW9kZSA9IG1vZGU7CiAgICAgIE12Z0F1 dG9XcmFwUHJpbnRmKGNvbnRleHQsICIlYyUuNGcsJS40ZyAlLjRnLCUuNGcgJS40ZywlLjRnIiwK ICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9PSBBYnNvbHV0ZVBhdGhNb2RlID8gJ0MnIDog J2MnLAogICAgICAgICAgICAgICAgICAgICAgICB4MSwgeTEsIHgyLCB5MiwgeCwgeSk7CiAgICB9 CiAgZWxzZQogICAgTXZnQXV0b1dyYXBQcmludGYoY29udGV4dCwgIiAlLjRnLCUuNGcgJS40Zywl LjRnICUuNGcsJS40ZyIsCiAgICAgICAgICAgICAgICAgICAgICB4MSwgeTEsIHgyLCB5MiwgeCwg eSk7Cn0KIHZvaWQgRHJhd1BhdGhDdXJ2ZVRvQWJzb2x1dGUoRHJhd0NvbnRleHQgY29udGV4dCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHgx LCBjb25zdCBkb3VibGUgeTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGRvdWJsZSB4MiwgY29uc3QgZG91YmxlIHkyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpCnsK ICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAo IiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3Jh cGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDI3MzYsICJjb250ZXh0ICE9IChE cmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9 PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlv biBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21h Z2ljay9kcmF3LmMiLCAyNzM3LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVy ZSIpLCAwKSkpOwoKICBEcmF3UGF0aEN1cnZlVG8oY29udGV4dCwgQWJzb2x1dGVQYXRoTW9kZSwg eDEsIHkxLCB4MiwgeTIsIHgsIHkpOwp9CiMgMjc4MyAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBo aWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdQYXRoQ3VydmVUb1Jl bGF0aXZlKERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4MSwgY29uc3QgZG91YmxlIHkxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeDIsIGNvbnN0IGRv dWJsZSB5MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg ZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdD b250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMn XG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9k cmF3LmMiLCAyNzg4LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgo dm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJp bnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3Ny Yy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjc4OSwgImNvbnRleHQt PnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgRHJhd1BhdGhDdXJ2ZVRv KGNvbnRleHQsIFJlbGF0aXZlUGF0aE1vZGUsIHgxLCB5MSwgeDIsIHkyLCB4LCB5KTsKfQojIDI4 MzEgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJh dy5jIgpzdGF0aWMgdm9pZCBEcmF3UGF0aEN1cnZlVG9RdWFkcmF0aWNCZXppZXIoRHJhd0NvbnRl eHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFBhdGhNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBkb3VibGUgeDEsIGRvdWJsZSB5MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSkKewogICgo dm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6 JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGlj cy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjgzNiwgImNvbnRleHQgIT0gKERyYXdD b250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4 YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAl cydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNr L2RyYXcuYyIsIDI4MzcsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiks IDApKSk7CgogIGlmICgoY29udGV4dC0+cGF0aF9vcGVyYXRpb24gIT0gUGF0aEN1cnZlVG9RdWFk cmF0aWNCZXppZXJPcGVyYXRpb24pCiAgICAgIHx8IChjb250ZXh0LT5wYXRoX21vZGUgIT0gbW9k ZSkpCiAgICB7CiAgICAgIGNvbnRleHQtPnBhdGhfb3BlcmF0aW9uID0gUGF0aEN1cnZlVG9RdWFk cmF0aWNCZXppZXJPcGVyYXRpb247CiAgICAgIGNvbnRleHQtPnBhdGhfbW9kZSA9IG1vZGU7CiAg ICAgIE12Z0F1dG9XcmFwUHJpbnRmKGNvbnRleHQsICIlYyUuNGcsJS40ZyAlLjRnLCUuNGciLAog ICAgICAgICAgICAgICAgICAgICAgICBtb2RlID09IEFic29sdXRlUGF0aE1vZGUgPyAnUScgOiAn cScsIHgxLCB5MSwgeCwgeSk7CiAgICB9CiAgZWxzZQogICAgTXZnQXV0b1dyYXBQcmludGYoY29u dGV4dCwgIiAlLjRnLCUuNGcgJS40ZywlLjRnIiwgeDEsIHkxLCB4LCB5KTsKfQogdm9pZCBEcmF3 UGF0aEN1cnZlVG9RdWFkcmF0aWNCZXppZXJBYnNvbHV0ZShEcmF3Q29udGV4dCBjb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBkb3VibGUgeDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB5MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRv dWJsZSB5KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChf X2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVz ZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAyODU2LCAiY29u dGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5z aWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxl ZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjg1NywgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdp Y2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgRHJhd1BhdGhDdXJ2ZVRvUXVhZHJhdGljQmV6aWVyKGNv bnRleHQsIEFic29sdXRlUGF0aE1vZGUsIHgxLCB5MSwgeCwgeSk7Cn0KIyAyODk5ICIvaG9tZS9i ZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQg RHJhd1BhdGhDdXJ2ZVRvUXVhZHJhdGljQmV6aWVyUmVsYXRpdmUoRHJhd0NvbnRleHQgY29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgZG91YmxlIHgxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeTEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBkb3VibGUgeSkKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAg OiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jm cmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjkwNSwg ImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4 dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBm YWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3Jh cGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDI5MDYsICJjb250ZXh0LT5zaWduYXR1cmUgPT0g TWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIERyYXdQYXRoQ3VydmVUb1F1YWRyYXRpY0Jlemll cihjb250ZXh0LCBSZWxhdGl2ZVBhdGhNb2RlLCB4MSwgeTEsIHgsIHkpOwp9CiMgMjk1MSAiL2hv bWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCnN0 YXRpYyB2b2lkIERyYXdQYXRoQ3VydmVUb1F1YWRyYXRpY0JlemllclNtb290aChEcmF3Q29udGV4 dCBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgUGF0aE1vZGUgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSkKewogICgodm9p ZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6 IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMjk1NSwgImNvbnRleHQgIT0gKERyYXdDb250 ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJh Y2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydc biIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2Ry YXcuYyIsIDI5NTYsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDAp KSk7CgogIGlmICgoY29udGV4dC0+cGF0aF9vcGVyYXRpb24gIT0gUGF0aEN1cnZlVG9RdWFkcmF0 aWNCZXppZXJTbW9vdGhPcGVyYXRpb24pCiAgICAgIHx8IChjb250ZXh0LT5wYXRoX21vZGUgIT0g bW9kZSkpCiAgICB7CiAgICAgIGNvbnRleHQtPnBhdGhfb3BlcmF0aW9uID0gUGF0aEN1cnZlVG9R dWFkcmF0aWNCZXppZXJTbW9vdGhPcGVyYXRpb247CiAgICAgIGNvbnRleHQtPnBhdGhfbW9kZSA9 IG1vZGU7CiAgICAgIE12Z0F1dG9XcmFwUHJpbnRmKGNvbnRleHQsICIlYyUuNGcsJS40ZyIsCiAg ICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPT0gQWJzb2x1dGVQYXRoTW9kZSA/ICdUJyA6ICd0 JywgeCwgeSk7CiAgICB9CiAgZWxzZQogICAgTXZnQXV0b1dyYXBQcmludGYoY29udGV4dCwgIiAl LjRnLCUuNGciLCB4LCB5KTsKfQogdm9pZCBEcmF3UGF0aEN1cnZlVG9RdWFkcmF0aWNCZXppZXJT bW9vdGhBYnNvbHV0ZShEcmF3Q29udGV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3Vi bGUgeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgZG91YmxlIHkpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJh d0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAl cydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNr L2RyYXcuYyIsIDI5NzQsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAg KCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2Vw cmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4v c3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAyOTc1LCAiY29udGV4 dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBEcmF3UGF0aEN1cnZl VG9RdWFkcmF0aWNCZXppZXJTbW9vdGgoY29udGV4dCwgQWJzb2x1dGVQYXRoTW9kZSwgeCwgeSk7 Cn0KIyAzMDIxICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFn aWNrL2RyYXcuYyIKIHZvaWQgRHJhd1BhdGhDdXJ2ZVRvUXVhZHJhdGljQmV6aWVyU21vb3RoUmVs YXRpdmUoRHJhd0NvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGRvdWJsZSB5KQp7CiAgRHJhd1BhdGhDdXJ2ZVRvUXVhZHJhdGljQmV6aWVyU21v b3RoKGNvbnRleHQsIFJlbGF0aXZlUGF0aE1vZGUsIHgsIHkpOwp9CiMgMzA3MiAiL2hvbWUvYmZy aWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCnN0YXRpYyB2 b2lkIERyYXdQYXRoQ3VydmVUb1Ntb290aChEcmF3Q29udGV4dCBjb250ZXh0LCBjb25zdCBQYXRo TW9kZSBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91Ymxl IHgyLCBjb25zdCBkb3VibGUgeTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAo RHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9u IGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFn aWNrL2RyYXcuYyIsIDMwNzYsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7 CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChf X2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVz ZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAzMDc3LCAiY29u dGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBpZiAoKGNvbnRl eHQtPnBhdGhfb3BlcmF0aW9uICE9IFBhdGhDdXJ2ZVRvU21vb3RoT3BlcmF0aW9uKQogICAgICB8 fCAoY29udGV4dC0+cGF0aF9tb2RlICE9IG1vZGUpKQogICAgewogICAgICBjb250ZXh0LT5wYXRo X29wZXJhdGlvbiA9IFBhdGhDdXJ2ZVRvU21vb3RoT3BlcmF0aW9uOwogICAgICBjb250ZXh0LT5w YXRoX21vZGUgPSBtb2RlOwogICAgICBNdmdBdXRvV3JhcFByaW50Zihjb250ZXh0LCAiJWMlLjRn LCUuNGcgJS40ZywlLjRnIiwKICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9PSBBYnNvbHV0 ZVBhdGhNb2RlID8gJ1MnIDogJ3MnLCB4MiwgeTIsIHgsIHkpOwogICAgfQogIGVsc2UKICAgIE12 Z0F1dG9XcmFwUHJpbnRmKGNvbnRleHQsICIgJS40ZywlLjRnICUuNGcsJS40ZyIsIHgyLCB5Miwg eCwgeSk7Cn0KIHZvaWQgRHJhd1BhdGhDdXJ2ZVRvU21vb3RoQWJzb2x1dGUoRHJhd0NvbnRleHQg Y29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgZG91YmxlIHgyLCBjb25zdCBkb3VibGUgeTIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSkK ewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRm ICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9n cmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzA5NCwgImNvbnRleHQgIT0g KERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJl ID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0 aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2RyYXcuYyIsIDMwOTUsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0 dXJlIiksIDApKSk7CgogIERyYXdQYXRoQ3VydmVUb1Ntb290aChjb250ZXh0LCBBYnNvbHV0ZVBh dGhNb2RlLCB4MiwgeTIsIHgsIHkpOwp9CiMgMzE0MyAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBo aWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdQYXRoQ3VydmVUb1Nt b290aFJlbGF0aXZlKERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4MiwgY29uc3QgZG91YmxlIHky LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBk b3VibGUgeCwgY29uc3QgZG91YmxlIHkpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0Nv bnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydc biIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2Ry YXcuYyIsIDMxNDcsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2 b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2Vwcmlu dGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3Jj L2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAzMTQ4LCAiY29udGV4dC0+ c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBEcmF3UGF0aEN1cnZlVG9T bW9vdGgoY29udGV4dCwgUmVsYXRpdmVQYXRoTW9kZSwgeDIsIHkyLCB4LCB5KTsKfQojIDMyMDMg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j IgpzdGF0aWMgdm9pZCBEcmF3UGF0aEVsbGlwdGljQXJjKERyYXdDb250ZXh0IGNvbnRleHQsIGNv bnN0IFBhdGhNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg ZG91YmxlIHJ4LCBjb25zdCBkb3VibGUgcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgZG91YmxlIHhfYXhpc19yb3RhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgbGFyZ2VfYXJjX2ZsYWcsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHN3ZWVwX2ZsYWcsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KQp7CiAgKCh2b2lkKSAo KGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBo aWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAzMjEwLCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQp TlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRh YlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j IiwgMzIxMSwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsK CiAgaWYgKChjb250ZXh0LT5wYXRoX29wZXJhdGlvbiAhPSBQYXRoRWxsaXB0aWNBcmNPcGVyYXRp b24pCiAgICAgIHx8IChjb250ZXh0LT5wYXRoX21vZGUgIT0gbW9kZSkpCiAgICB7CiAgICAgIGNv bnRleHQtPnBhdGhfb3BlcmF0aW9uID0gUGF0aEVsbGlwdGljQXJjT3BlcmF0aW9uOwogICAgICBj b250ZXh0LT5wYXRoX21vZGUgPSBtb2RlOwogICAgICBNdmdBdXRvV3JhcFByaW50Zihjb250ZXh0 LCAiJWMlLjRnLCUuNGcgJS40ZyAldSAldSAlLjRnLCUuNGciLAogICAgICAgICAgICAgICAgICAg ICAgICBtb2RlID09IEFic29sdXRlUGF0aE1vZGUgPyAnQScgOiAnYScsIHJ4LCByeSwgeF9heGlz X3JvdGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBsYXJnZV9hcmNfZmxhZywgc3dlZXBf ZmxhZywgeCwgeSk7CiAgICB9CiAgZWxzZQogICAgTXZnQXV0b1dyYXBQcmludGYoY29udGV4dCwg IiAlLjRnLCUuNGcgJS40ZyAldSAldSAlLjRnLCUuNGciLCByeCwgcnksCiAgICAgICAgICAgICAg ICAgICAgICB4X2F4aXNfcm90YXRpb24sIGxhcmdlX2FyY19mbGFnLCBzd2VlcF9mbGFnLCB4LCB5 KTsKfQogdm9pZCBEcmF3UGF0aEVsbGlwdGljQXJjQWJzb2x1dGUoRHJhd0NvbnRleHQgY29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRv dWJsZSByeCwgY29uc3QgZG91YmxlIHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHhfYXhpc19yb3RhdGlvbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXJnZV9hcmNf ZmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBzd2VlcF9mbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KQp7CiAgKCh2b2lkKSAoKGNv bnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVk IGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNz TWFnaWNrL21hZ2ljay9kcmF3LmMiLCAzMjMzLCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVM TCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVM KSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9o b21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwg MzIzNCwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAg RHJhd1BhdGhFbGxpcHRpY0FyYyhjb250ZXh0LCBBYnNvbHV0ZVBhdGhNb2RlLCByeCwgcnksIHhf YXhpc19yb3RhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIGxhcmdlX2FyY19mbGFnLCBzd2Vl cF9mbGFnLCB4LCB5KTsKfQojIDMyODkgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFw aGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3UGF0aEVsbGlwdGljQXJjUmVsYXRp dmUoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSByeCwgY29uc3QgZG91YmxlIHJ5LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHhfYXhpc19y b3RhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBsYXJnZV9hcmNfZmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzd2VlcF9mbGFnLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJs ZSB5KQp7CiAgRHJhd1BhdGhFbGxpcHRpY0FyYyhjb250ZXh0LCBSZWxhdGl2ZVBhdGhNb2RlLCBy eCwgcnksIHhfYXhpc19yb3RhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIGxhcmdlX2FyY19m bGFnLCBzd2VlcF9mbGFnLCB4LCB5KTsKfQojIDMzMjIgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFw aGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3UGF0aEZpbmlzaChE cmF3Q29udGV4dCBjb250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0 KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAi L2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMi LCAzMzI0LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkg KChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgi JXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFw aGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzMyNSwgImNvbnRleHQtPnNpZ25h dHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgTXZnUHJpbnRmKGNvbnRleHQsICIn XG4iKTsKICBjb250ZXh0LT5wYXRoX29wZXJhdGlvbiA9IFBhdGhEZWZhdWx0T3BlcmF0aW9uOwog IGNvbnRleHQtPnBhdGhfbW9kZSA9IERlZmF1bHRQYXRoTW9kZTsKfQojIDMzNjEgIi9ob21lL2Jm cmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgpzdGF0aWMg dm9pZCBEcmF3UGF0aExpbmVUbyhEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBQYXRoTW9kZSBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpCnsKICAoKHZvaWQpICgoY29udGV4dCAh PSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0 aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2RyYXcuYyIsIDMzNjUsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDAp KSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6 IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZy aWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAzMzY2LCAi Y29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBpZiAoKGNv bnRleHQtPnBhdGhfb3BlcmF0aW9uICE9IFBhdGhMaW5lVG9PcGVyYXRpb24pCiAgICAgIHx8IChj b250ZXh0LT5wYXRoX21vZGUgIT0gbW9kZSkpCiAgICB7CiAgICAgIGNvbnRleHQtPnBhdGhfb3Bl cmF0aW9uID0gUGF0aExpbmVUb09wZXJhdGlvbjsKICAgICAgY29udGV4dC0+cGF0aF9tb2RlID0g bW9kZTsKICAgICAgTXZnQXV0b1dyYXBQcmludGYoY29udGV4dCwgIiVjJS40ZywlLjRnIiwKICAg ICAgICAgICAgICAgICAgICAgICAgbW9kZSA9PSBBYnNvbHV0ZVBhdGhNb2RlID8gJ0wnIDogJ2wn LCB4LCB5KTsKICAgIH0KICBlbHNlCiAgICBNdmdBdXRvV3JhcFByaW50Zihjb250ZXh0LCAiICUu NGcsJS40ZyIsIHgsIHkpOwp9CiB2b2lkIERyYXdQYXRoTGluZVRvQWJzb2x1dGUoRHJhd0NvbnRl eHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBkb3VibGUgeCwgY29uc3QgZG91YmxlIHkpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJh d0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAl cydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNr L2RyYXcuYyIsIDMzODIsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAg KCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2Vw cmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4v c3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAzMzgzLCAiY29udGV4 dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBEcmF3UGF0aExpbmVU byhjb250ZXh0LCBBYnNvbHV0ZVBhdGhNb2RlLCB4LCB5KTsKfQojIDM0MTcgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3 UGF0aExpbmVUb1JlbGF0aXZlKERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KQp7 CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYg KCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dy YXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAzNDIwLCAiY29udGV4dCAhPSAo RHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUg PT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRp b24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svZHJhdy5jIiwgMzQyMSwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1 cmUiKSwgMCkpKTsKCiAgRHJhd1BhdGhMaW5lVG8oY29udGV4dCwgUmVsYXRpdmVQYXRoTW9kZSwg eCwgeSk7Cn0KIyAzNDU0ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdp Y2svbWFnaWNrL2RyYXcuYyIKc3RhdGljIHZvaWQgRHJhd1BhdGhMaW5lVG9Ib3Jpem9udGFsKERy YXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBQYXRoTW9kZSBtb2RlLCBjb25zdCBkb3VibGUgeCkKewogICgodm9pZCkgKChjb250ZXh0 ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3Nl cnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2lj ay9tYWdpY2svZHJhdy5jIiwgMzQ1NywgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwg MCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAw IDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9i ZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDM0NTgs ICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIGlmICgo Y29udGV4dC0+cGF0aF9vcGVyYXRpb24gIT0gUGF0aExpbmVUb0hvcml6b250YWxPcGVyYXRpb24p CiAgICAgIHx8IChjb250ZXh0LT5wYXRoX21vZGUgIT0gbW9kZSkpCiAgICB7CiAgICAgIGNvbnRl eHQtPnBhdGhfb3BlcmF0aW9uID0gUGF0aExpbmVUb0hvcml6b250YWxPcGVyYXRpb247CiAgICAg IGNvbnRleHQtPnBhdGhfbW9kZSA9IG1vZGU7CiAgICAgIE12Z0F1dG9XcmFwUHJpbnRmKGNvbnRl eHQsICIlYyUuNGciLAogICAgICAgICAgICAgICAgICAgICAgICBtb2RlID09IEFic29sdXRlUGF0 aE1vZGUgPyAnSCcgOiAnaCcsIHgpOwogICAgfQogIGVsc2UKICAgIE12Z0F1dG9XcmFwUHJpbnRm KGNvbnRleHQsICIgJS40ZyIsIHgpOwp9CiB2b2lkIERyYXdQYXRoTGluZVRvSG9yaXpvbnRhbEFi c29sdXRlKERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4KQp7CiAgKCh2b2lkKSAoKGNvbnRl eHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFz c2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9kcmF3LmMiLCAzNDc0LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIp LCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/ IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21l L2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzQ3 NSwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgRHJh d1BhdGhMaW5lVG9Ib3Jpem9udGFsKGNvbnRleHQsIEFic29sdXRlUGF0aE1vZGUsIHgpOwp9CiMg MzUwNiAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9k cmF3LmMiCiB2b2lkIERyYXdQYXRoTGluZVRvSG9yaXpvbnRhbFJlbGF0aXZlKERyYXdDb250ZXh0 IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGRvdWJsZSB4KQp7CiAgRHJhd1BhdGhMaW5lVG9Ib3Jpem9udGFsKGNvbnRleHQs IFJlbGF0aXZlUGF0aE1vZGUsIHgpOwp9CiMgMzUzOSAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBo aWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCnN0YXRpYyB2b2lkIERyYXdQYXRoTGlu ZVRvVmVydGljYWwoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgUGF0aE1vZGUgbW9kZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeSkKewogICgodm9p ZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6 IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzU0MiwgImNvbnRleHQgIT0gKERyYXdDb250 ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJh Y2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydc biIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2Ry YXcuYyIsIDM1NDMsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDAp KSk7CgogIGlmICgoY29udGV4dC0+cGF0aF9vcGVyYXRpb24gIT0gUGF0aExpbmVUb1ZlcnRpY2Fs T3BlcmF0aW9uKQogICAgICB8fCAoY29udGV4dC0+cGF0aF9tb2RlICE9IG1vZGUpKQogICAgewog ICAgICBjb250ZXh0LT5wYXRoX29wZXJhdGlvbiA9IFBhdGhMaW5lVG9WZXJ0aWNhbE9wZXJhdGlv bjsKICAgICAgY29udGV4dC0+cGF0aF9tb2RlID0gbW9kZTsKICAgICAgTXZnQXV0b1dyYXBQcmlu dGYoY29udGV4dCwgIiVjJS40ZyIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPT0gQWJz b2x1dGVQYXRoTW9kZSA/ICdWJyA6ICd2JywgeSk7CiAgICB9CiAgZWxzZQogICAgTXZnQXV0b1dy YXBQcmludGYoY29udGV4dCwgIiAlLjRnIiwgeSk7Cn0KIHZvaWQgRHJhd1BhdGhMaW5lVG9WZXJ0 aWNhbEFic29sdXRlKERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeSkKewogICgodm9pZCkgKChj b250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxl ZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzU1OSwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5V TEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJV TCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIv aG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIs IDM1NjAsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7Cgog IERyYXdQYXRoTGluZVRvVmVydGljYWwoY29udGV4dCwgQWJzb2x1dGVQYXRoTW9kZSwgeSk7Cn0K IyAzNTkyICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNr L2RyYXcuYyIKIHZvaWQgRHJhd1BhdGhMaW5lVG9WZXJ0aWNhbFJlbGF0aXZlKERyYXdDb250ZXh0 IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBkb3VibGUgeSkKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkw KSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9o b21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwg MzU5NSwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgo Y29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVz OiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhp Y3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDM1OTYsICJjb250ZXh0LT5zaWduYXR1 cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIERyYXdQYXRoTGluZVRvVmVydGljYWwo Y29udGV4dCwgUmVsYXRpdmVQYXRoTW9kZSwgeSk7Cn0KIyAzNjI5ICIvaG9tZS9iZnJpZXNlbi9z cmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHN0YXRpYyB2b2lkIERy YXdQYXRoTW92ZVRvKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IFBhdGhNb2RlIG1vZGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSkK ewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRm ICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9n cmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzYzMiwgImNvbnRleHQgIT0g KERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJl ID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0 aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2RyYXcuYyIsIDM2MzMsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0 dXJlIiksIDApKSk7CgogIGlmICgoY29udGV4dC0+cGF0aF9vcGVyYXRpb24gIT0gUGF0aE1vdmVU b09wZXJhdGlvbikKICAgICAgfHwgKGNvbnRleHQtPnBhdGhfbW9kZSAhPSBtb2RlKSkKICAgIHsK ICAgICAgY29udGV4dC0+cGF0aF9vcGVyYXRpb24gPSBQYXRoTW92ZVRvT3BlcmF0aW9uOwogICAg ICBjb250ZXh0LT5wYXRoX21vZGUgPSBtb2RlOwogICAgICBNdmdBdXRvV3JhcFByaW50Zihjb250 ZXh0LCAiJWMlLjRnLCUuNGciLAogICAgICAgICAgICAgICAgICAgICAgICBtb2RlID09IEFic29s dXRlUGF0aE1vZGUgPyAnTScgOiAnbScsIHgsIHkpOwogICAgfQogIGVsc2UKICAgIE12Z0F1dG9X cmFwUHJpbnRmKGNvbnRleHQsICIgJS40ZywlLjRnIiwgeCwgeSk7Cn0KCiB2b2lkIERyYXdQYXRo TW92ZVRvQWJzb2x1dGUoRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3QgZG91YmxlIHgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHkpCnsKICAo KHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVz OiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhp Y3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDM2NTAsICJjb250ZXh0ICE9IChEcmF3 Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAw eGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBg JXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2lj ay9kcmF3LmMiLCAzNjUxLCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIp LCAwKSkpOwoKICBEcmF3UGF0aE1vdmVUbyhjb250ZXh0LCBBYnNvbHV0ZVBhdGhNb2RlLCB4LCB5 KTsKfQojIDM2ODUgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svZHJhdy5jIgogdm9pZCBEcmF3UGF0aE1vdmVUb1JlbGF0aXZlKERyYXdDb250ZXh0IGNv bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91 YmxlIHgsIGNvbnN0IGRvdWJsZSB5KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250 ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4i LCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3 LmMiLCAzNjg4LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9p ZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRm ICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9n cmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzY4OSwgImNvbnRleHQtPnNp Z25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgRHJhd1BhdGhNb3ZlVG8oY29u dGV4dCwgUmVsYXRpdmVQYXRoTW9kZSwgeCwgeSk7Cn0KIyAzNzIwICIvaG9tZS9iZnJpZXNlbi9z cmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd1BhdGhT dGFydChEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdD b250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMn XG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9k cmF3LmMiLCAzNzIyLCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgo dm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJp bnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3Ny Yy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzcyMywgImNvbnRleHQt PnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgTXZnUHJpbnRmKGNvbnRl eHQsICJwYXRoICciKTsKICBjb250ZXh0LT5wYXRoX29wZXJhdGlvbiA9IFBhdGhEZWZhdWx0T3Bl cmF0aW9uOwogIGNvbnRleHQtPnBhdGhfbW9kZSA9IERlZmF1bHRQYXRoTW9kZTsKfQojIDM3NTcg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j Igogdm9pZCBEcmF3UG9pbnQoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSkKewogICgodm9pZCkgKChj b250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxl ZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzc2MCwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5V TEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJV TCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIv aG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIs IDM3NjEsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7Cgog IE12Z1ByaW50Zihjb250ZXh0LCAicG9pbnQgJS40ZywlLjRnXG4iLCB4LCB5KTsKfQojIDM3OTUg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j Igogdm9pZCBEcmF3UG9seWdvbihEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbnVtX2Nvb3JkcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUG9pbnRJbmZvICogY29vcmRpbmF0ZXMpCnsKICAoKHZvaWQpICgo Y29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWls ZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhp Y3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDM3OTksICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClO VUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFi VUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAi L2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMi LCAzODAwLCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoK ICBNdmdBcHBlbmRQb2ludHNDb21tYW5kKGNvbnRleHQsInBvbHlnb24iLG51bV9jb29yZHMsY29v cmRpbmF0ZXMpOwp9CiMgMzgzNCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNz TWFnaWNrL21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdQb2x5bGluZShEcmF3Q29udGV4dCBjb250 ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG51bV9jb29y ZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQb2ludEluZm8gKiBjb29y ZGluYXRlcykKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAo X19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzgzOCwgImNv bnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+ c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWls ZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhp Y3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDM4MzksICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFn aWNrU2lnbmF0dXJlIiksIDApKSk7CgogIE12Z0FwcGVuZFBvaW50c0NvbW1hbmQoY29udGV4dCwi cG9seWxpbmUiLG51bV9jb29yZHMsY29vcmRpbmF0ZXMpOwp9CiMgMzg2NiAiL2hvbWUvYmZyaWVz ZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdQ b3BDbGlwUGF0aChEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0g KERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlv biBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21h Z2ljay9kcmF3LmMiLCAzODY4LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkp OwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAo X19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgMzg2OSwgImNv bnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgaWYoY29udGV4 dC0+aW5kZW50X2RlcHRoID4gMCkKICAgIGNvbnRleHQtPmluZGVudF9kZXB0aC0tOwogIE12Z1By aW50Zihjb250ZXh0LCAicG9wIGNsaXAtcGF0aFxuIik7Cn0KIyAzODk4ICIvaG9tZS9iZnJpZXNl bi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd1Bv cERlZnMoRHJhd0NvbnRleHQgY29udGV4dCkKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3 Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVz J1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2sv ZHJhdy5jIiwgMzkwMCwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAo KHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXBy aW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9z cmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDM5MDEsICJjb250ZXh0 LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIGlmKGNvbnRleHQtPmlu ZGVudF9kZXB0aCA+IDApCiAgICBjb250ZXh0LT5pbmRlbnRfZGVwdGgtLTsKICBNdmdQcmludGYo Y29udGV4dCwgInBvcCBkZWZzXG4iKTsKfQojIDM5MzMgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFw aGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3UG9wR3JhcGhpY0Nv bnRleHQoRHJhd0NvbnRleHQgY29udGV4dCkKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3 Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVz J1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2sv ZHJhdy5jIiwgMzkzNSwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAo KHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXBy aW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9z cmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDM5MzYsICJjb250ZXh0 LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIGlmKGNvbnRleHQtPmlu ZGV4ID4gMCkKICAgIHsKIyAzOTQ4ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhp Y3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKICAgICAgRGVzdHJveURyYXdJbmZvKChjb250ZXh0LT5n cmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKSk7CiAgICAgIChjb250ZXh0LT5ncmFwaGlj X2NvbnRleHRbY29udGV4dC0+aW5kZXhdKT0oRHJhd0luZm8qKTA7CiAgICAgIGNvbnRleHQtPmlu ZGV4LS07CgogICAgICBpZihjb250ZXh0LT5pbmRlbnRfZGVwdGggPiAwKQogICAgICAgIGNvbnRl eHQtPmluZGVudF9kZXB0aC0tOwogICAgICBNdmdQcmludGYoY29udGV4dCwgInBvcCBncmFwaGlj LWNvbnRleHRcbiIpOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgeyBpZiAoY29udGV4dC0+aW1h Z2UtPmV4Y2VwdGlvbi5zZXZlcml0eSA+IChsb25nKURyYXdFcnJvcikgVGhyb3dFeGNlcHRpb24o JmNvbnRleHQtPmltYWdlLT5leGNlcHRpb24sRHJhd0Vycm9yLCJVbmJhbGFuY2VkR3JhcGhpY0Nv bnRleHRQdXNoUG9wIiwwKTsgcmV0dXJuOyB9CiAgICB9Cn0KIyAzOTg0ICIvaG9tZS9iZnJpZXNl bi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd1Bv cFBhdHRlcm4oRHJhd0NvbnRleHQgY29udGV4dCkKewogIGNoYXIKICAgIGdlb21ldHJ5WzIwNTNd LAogICAga2V5WzIwNTNdOwoKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkg PyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9t ZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDM5 OTAsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNv bnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczol dTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNz L0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCAzOTkxLCAiY29udGV4dC0+c2lnbmF0dXJl ID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBpZiggY29udGV4dC0+cGF0dGVybl9pZCA9 PSAwICkKICAgIHsgaWYgKGNvbnRleHQtPmltYWdlLT5leGNlcHRpb24uc2V2ZXJpdHkgPiAobG9u ZylEcmF3V2FybmluZykgVGhyb3dFeGNlcHRpb24oJmNvbnRleHQtPmltYWdlLT5leGNlcHRpb24s RHJhd1dhcm5pbmcsIk5vdEN1cnJlbnRseVB1c2hpbmdQYXR0ZXJuRGVmaW5pdGlvbiIsMCk7IHJl dHVybjsgfTsKCiAgRm9ybWF0U3RyaW5nKGtleSwiWyUuMTAyNHNdIixjb250ZXh0LT5wYXR0ZXJu X2lkKTsKCiAgKHZvaWQpIFNldEltYWdlQXR0cmlidXRlKGNvbnRleHQtPmltYWdlLGtleSxjb250 ZXh0LT5tdmcrY29udGV4dC0+cGF0dGVybl9vZmZzZXQpOwogIEZvcm1hdFN0cmluZyhnZW9tZXRy eSwiJWx1eCVsdSUrbGQlK2xkIiwKICAgICAgICAgICAgICAgY29udGV4dC0+cGF0dGVybl9ib3Vu ZHMud2lkdGgsY29udGV4dC0+cGF0dGVybl9ib3VuZHMuaGVpZ2h0LAogICAgICAgICAgICAgICBj b250ZXh0LT5wYXR0ZXJuX2JvdW5kcy54LGNvbnRleHQtPnBhdHRlcm5fYm91bmRzLnkpOwogICh2 b2lkKSBTZXRJbWFnZUF0dHJpYnV0ZShjb250ZXh0LT5pbWFnZSxrZXksZ2VvbWV0cnkpOwoKICBM aWJlcmF0ZU1lbW9yeSggKHZvaWQqKikmY29udGV4dC0+cGF0dGVybl9pZCApOwogIGNvbnRleHQt PnBhdHRlcm5fb2Zmc2V0ID0gMDsKCiAgY29udGV4dC0+cGF0dGVybl9ib3VuZHMueCA9IDA7CiAg Y29udGV4dC0+cGF0dGVybl9ib3VuZHMueSA9IDA7CiAgY29udGV4dC0+cGF0dGVybl9ib3VuZHMu d2lkdGggPSAwOwogIGNvbnRleHQtPnBhdHRlcm5fYm91bmRzLmhlaWdodCA9IDA7CgogIGNvbnRl eHQtPmZpbHRlcl9vZmYgPSAwOwoKICBpZihjb250ZXh0LT5pbmRlbnRfZGVwdGggPiAwKQogICAg Y29udGV4dC0+aW5kZW50X2RlcHRoLS07CiAgTXZnUHJpbnRmKGNvbnRleHQsICJwb3AgcGF0dGVy blxuIik7Cn0KIyA0MDQ2ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdp Y2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd1B1c2hDbGlwUGF0aChEcmF3Q29udGV4dCBjb250 ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNsaXBf cGF0aF9pZCkKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAo X19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNDA0OSwgImNv bnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+ c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWls ZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhp Y3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDQwNTAsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFn aWNrU2lnbmF0dXJlIiksIDApKSk7CiAgKCh2b2lkKSAoKGNsaXBfcGF0aF9pZCAhPSAoY29uc3Qg Y2hhciAqKSAwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVz J1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2sv ZHJhdy5jIiwgNDA1MSwgImNsaXBfcGF0aF9pZCAhPSAoY29uc3QgY2hhciAqKSBOVUxMIiksIDAp KSk7CgogIE12Z1ByaW50Zihjb250ZXh0LCAicHVzaCBjbGlwLXBhdGggJXNcbiIsIGNsaXBfcGF0 aF9pZCk7CiAgY29udGV4dC0+aW5kZW50X2RlcHRoKys7Cn0KIyA0MDgxICIvaG9tZS9iZnJpZXNl bi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd1B1 c2hEZWZzKERyYXdDb250ZXh0IGNvbnRleHQpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJh d0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAl cydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNr L2RyYXcuYyIsIDQwODMsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAg KCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2Vw cmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4v c3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA0MDg0LCAiY29udGV4 dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBNdmdQcmludGYoY29u dGV4dCwgInB1c2ggZGVmc1xuIik7CiAgY29udGV4dC0+aW5kZW50X2RlcHRoKys7Cn0KIyA0MTE1 ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcu YyIKIHZvaWQgRHJhd1B1c2hHcmFwaGljQ29udGV4dChEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAg KCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIl czoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBo aWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA0MTE3LCAiY29udGV4dCAhPSAoRHJh d0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0g MHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24g YCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdp Y2svZHJhdy5jIiwgNDExOCwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUi KSwgMCkpKTsKCiAgY29udGV4dC0+aW5kZXgrKzsKICBSZWFjcXVpcmVNZW1vcnkoKHZvaWQgKiop ICZjb250ZXh0LT5ncmFwaGljX2NvbnRleHQsCiAgICAgICAgICAgICAgICAgIChjb250ZXh0LT5p bmRleCsxKSpzaXplb2YoRHJhd0luZm8gKikpOwogIGlmIChjb250ZXh0LT5ncmFwaGljX2NvbnRl eHQgPT0gKERyYXdJbmZvICoqKSAwKQogICAgewogICAgICB7IGlmIChjb250ZXh0LT5pbWFnZS0+ ZXhjZXB0aW9uLnNldmVyaXR5ID4gKGxvbmcpUmVzb3VyY2VMaW1pdEVycm9yKSBUaHJvd0V4Y2Vw dGlvbigmY29udGV4dC0+aW1hZ2UtPmV4Y2VwdGlvbixSZXNvdXJjZUxpbWl0RXJyb3IsIk1lbW9y eUFsbG9jYXRpb25GYWlsZWQiLCJVbmFibGVUb0RyYXdPbkltYWdlIik7IHJldHVybjsgfQoKICAg IH0KICAoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSk9CiAgICBDbG9u ZURyYXdJbmZvKChJbWFnZUluZm8gKikgMCxjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4 dC0+aW5kZXgtMV0pOwogIE12Z1ByaW50Zihjb250ZXh0LCAicHVzaCBncmFwaGljLWNvbnRleHRc biIpOwogIGNvbnRleHQtPmluZGVudF9kZXB0aCsrOwp9CiMgNDE3NCAiL2hvbWUvYmZyaWVzZW4v c3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdQdXNo UGF0dGVybihEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqcGF0dGVybl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB3aWR0aCwgY29uc3QgZG91YmxlIGhlaWdodCkK ewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRm ICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9n cmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNDE3OSwgImNvbnRleHQgIT0g KERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJl ID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0 aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2RyYXcuYyIsIDQxODAsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0 dXJlIiksIDApKSk7CiAgKCh2b2lkKSAoKHBhdHRlcm5faWQgIT0gKGNvbnN0IGNoYXIgKikgMCkg PyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9t ZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDQx ODEsICJwYXR0ZXJuX2lkICE9IChjb25zdCBjaGFyICopIE5VTEwiKSwgMCkpKTsKCiAgaWYoIGNv bnRleHQtPnBhdHRlcm5faWQgIT0gMCApCiAgICB7IGlmIChjb250ZXh0LT5pbWFnZS0+ZXhjZXB0 aW9uLnNldmVyaXR5ID4gKGxvbmcpRHJhd0Vycm9yKSBUaHJvd0V4Y2VwdGlvbigmY29udGV4dC0+ aW1hZ2UtPmV4Y2VwdGlvbixEcmF3RXJyb3IsIkFscmVhZHlQdXNoaW5nUGF0dGVybkRlZmluaXRp b24iLGNvbnRleHQtPnBhdHRlcm5faWQpOyByZXR1cm47IH07CgoKICBjb250ZXh0LT5maWx0ZXJf b2ZmID0gMTsKCiAgTXZnUHJpbnRmKGNvbnRleHQsICJwdXNoIHBhdHRlcm4gJXMgJS40ZywlLjRn ICUuNGcsJS40Z1xuIiwKICAgICAgICAgICAgcGF0dGVybl9pZCwgeCwgeSwgd2lkdGgsIGhlaWdo dCk7CiAgY29udGV4dC0+aW5kZW50X2RlcHRoKys7CgoKICBjb250ZXh0LT5wYXR0ZXJuX2lkID0g QWxsb2NhdGVTdHJpbmcocGF0dGVybl9pZCk7CiAgY29udGV4dC0+cGF0dGVybl9ib3VuZHMueCA9 IChsb25nKSBjZWlsKHgtMC41KTsKICBjb250ZXh0LT5wYXR0ZXJuX2JvdW5kcy55ID0gKGxvbmcp IGNlaWwoeS0wLjUpOwogIGNvbnRleHQtPnBhdHRlcm5fYm91bmRzLndpZHRoID0gKHVuc2lnbmVk IGxvbmcpIGZsb29yKHdpZHRoKzAuNSk7CiAgY29udGV4dC0+cGF0dGVybl9ib3VuZHMuaGVpZ2h0 ID0gKHVuc2lnbmVkIGxvbmcpIGZsb29yKGhlaWdodCswLjUpOwogIGNvbnRleHQtPnBhdHRlcm5f b2Zmc2V0ID0gY29udGV4dC0+bXZnX2xlbmd0aDsKfQojIDQyMzMgIi9ob21lL2Jmcmllc2VuL3Ny Yy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3UmVjdGFu Z2xlKERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgZG91YmxlIHgxLCBjb25zdCBkb3VibGUgeTEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgZG91YmxlIHgyLCBjb25zdCBkb3VibGUgeTIpCnsKICAoKHZvaWQpICgo Y29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWls ZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhp Y3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDQyMzcsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClO VUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFi VUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAi L2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMi LCA0MjM4LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwog IE12Z1ByaW50Zihjb250ZXh0LCAicmVjdGFuZ2xlICUuNGcsJS40ZyAlLjRnLCUuNGdcbiIsIHgx LCB5MSwgeDIsIHkyKTsKfQojIDQyNjQgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFw aGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogaW50IERyYXdSZW5kZXIoY29uc3QgRHJhd0NvbnRl eHQgY29udGV4dCkKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAg OiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jm cmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNDI2Niwg ImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4 dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBm YWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3Jh cGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDQyNjcsICJjb250ZXh0LT5zaWduYXR1cmUgPT0g TWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29u dGV4dC0+aW5kZXhdKS0+cHJpbWl0aXZlID0gY29udGV4dC0+bXZnOwogICh2b2lkKSBMb2dNYWdp Y2tFdmVudChSZW5kZXJFdmVudCwiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNz TWFnaWNrL21hZ2ljay9kcmF3LmMiLF9fZnVuY19fLDQyNzAsIk1WRzpcbiclcydcbiIsY29udGV4 dC0+bXZnKTsKICBEcmF3SW1hZ2UoY29udGV4dC0+aW1hZ2UsIChjb250ZXh0LT5ncmFwaGljX2Nv bnRleHRbY29udGV4dC0+aW5kZXhdKSk7CiAgKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250 ZXh0LT5pbmRleF0pLT5wcmltaXRpdmUgPSAoY2hhciAqKSAwOwoKICByZXR1cm4gMTsKfQojIDQz MDIgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJh dy5jIgogdm9pZCBEcmF3Um90YXRlKERyYXdDb250ZXh0IGNvbnRleHQsIGNvbnN0IGRvdWJsZSBk ZWdyZWVzKQp7CiAgQWZmaW5lTWF0cml4CiAgICBhZmZpbmU7CgogICgodm9pZCkgKChjb250ZXh0 ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3Nl cnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2lj ay9tYWdpY2svZHJhdy5jIiwgNDMwNywgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwg MCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAw IDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9i ZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDQzMDgs ICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIElkZW50 aXR5QWZmaW5lKCZhZmZpbmUpOwogIGFmZmluZS5zeD1jb3MoKDMuMTQxNTkyNjUzNTg5NzkzMjM4 NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTAqKGZtb2QoZGVncmVlcywzNjAuMCkpLzE4 MC4wKSk7CiAgYWZmaW5lLnJ4PXNpbigoMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1 MDI4ODQxOTcxNjkzOTkzNzUxMCooZm1vZChkZWdyZWVzLDM2MC4wKSkvMTgwLjApKTsKICBhZmZp bmUucnk9KC1zaW4oKDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5 Mzk5Mzc1MTAqKGZtb2QoZGVncmVlcywzNjAuMCkpLzE4MC4wKSkpOwogIGFmZmluZS5zeT1jb3Mo KDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTAqKGZt b2QoZGVncmVlcywzNjAuMCkpLzE4MC4wKSk7CiAgQWRqdXN0QWZmaW5lKCBjb250ZXh0LCAmYWZm aW5lICk7CgogIE12Z1ByaW50Zihjb250ZXh0LCAicm90YXRlICUuNGdcbiIsIGRlZ3JlZXMpOwp9 CiMgNDM1OSAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2lj ay9kcmF3LmMiCiB2b2lkIERyYXdSb3VuZFJlY3RhbmdsZShEcmF3Q29udGV4dCBjb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHgxLCBkb3VibGUgeTEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgeDIsIGRvdWJsZSB5 MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSByeCwgZG91Ymxl IHJ5KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2Vw cmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4v c3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA0MzY0LCAiY29udGV4 dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWdu YXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBh c3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01h Z2ljay9tYWdpY2svZHJhdy5jIiwgNDM2NSwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tT aWduYXR1cmUiKSwgMCkpKTsKCiAgTXZnUHJpbnRmKGNvbnRleHQsICJyb3VuZHJlY3RhbmdsZSAl LjRnLCUuNGcgJS40ZywlLjRnICUuNGcsJS40Z1xuIiwKICAgICAgICAgICAgeDEsIHkxLCB4Miwg eTIsIHJ4LCByeSk7Cn0KIyA0Mzk4ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhp Y3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd1NjYWxlKERyYXdDb250ZXh0IGNvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeCwgY29uc3Qg ZG91YmxlIHkpCnsKICBBZmZpbmVNYXRyaXgKICAgIGFmZmluZTsKCiAgKCh2b2lkKSAoKGNvbnRl eHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFz c2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9kcmF3LmMiLCA0NDA0LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIp LCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/ IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21l L2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNDQw NSwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgSWRl bnRpdHlBZmZpbmUoJmFmZmluZSk7CiAgYWZmaW5lLnN4PXg7CiAgYWZmaW5lLnN5PXk7CiAgQWRq dXN0QWZmaW5lKCBjb250ZXh0LCAmYWZmaW5lICk7CgogIE12Z1ByaW50Zihjb250ZXh0LCAic2Nh bGUgJS40ZywlLjRnXG4iLCB4LCB5KTsKfQojIDQ0NDAgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFw aGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3U2tld1goRHJhd0Nv bnRleHQgY29udGV4dCwgY29uc3QgZG91YmxlIGRlZ3JlZXMpCnsKICBBZmZpbmVNYXRyaXgKICAg IGFmZmluZTsKCiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChf X2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVz ZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA0NDQ1LCAiY29u dGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5z aWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxl ZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGlj c01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNDQ0NiwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdp Y2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgSWRlbnRpdHlBZmZpbmUoJmFmZmluZSk7CiAgYWZmaW5l LnJ5PXRhbigoMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI4ODQxOTcxNjkzOTkz NzUxMCooZm1vZChkZWdyZWVzLDM2MC4wKSkvMTgwLjApKTsKICBBZGp1c3RBZmZpbmUoY29udGV4 dCwmYWZmaW5lKTsKCiAgTXZnUHJpbnRmKGNvbnRleHQsICJza2V3WCAlLjRnXG4iLCBkZWdyZWVz KTsKfQojIDQ0ODAgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svZHJhdy5jIgogdm9pZCBEcmF3U2tld1koRHJhd0NvbnRleHQgY29udGV4dCwgY29uc3Qg ZG91YmxlIGRlZ3JlZXMpCnsKICBBZmZpbmVNYXRyaXgKICAgIGFmZmluZTsKCiAgKCh2b2lkKSAo KGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBo aWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA0NDg1LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQp TlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRh YlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j IiwgNDQ4NiwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsK CiAgSWRlbnRpdHlBZmZpbmUoJmFmZmluZSk7CiAgYWZmaW5lLnJ4PXRhbigoMy4xNDE1OTI2NTM1 ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI4ODQxOTcxNjkzOTkzNzUxMCooZm1vZChkZWdyZWVzLDM2 MC4wKSkvMTgwLjApKTsKICBEcmF3QWZmaW5lKGNvbnRleHQsJmFmZmluZSk7CgogIE12Z1ByaW50 Zihjb250ZXh0LCAic2tld1kgJS40Z1xuIiwgZGVncmVlcyk7Cn0KIyA0NTYzICIvaG9tZS9iZnJp ZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIFBpeGVsUGFj a2V0IERyYXdHZXRTdHJva2VDb2xvcihEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAgKCh2b2lkKSAo KGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBo aWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA0NTY1LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQp TlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRh YlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j IiwgNDU2NiwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsK CiAgcmV0dXJuIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+c3Ry b2tlOwp9CiMgNDU5NiAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNr L21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdTZXRTdHJva2VDb2xvcihEcmF3Q29udGV4dCBjb250 ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGl4ZWxQYWNr ZXQgKiBzdHJva2VfY29sb3IpCnsKICBQaXhlbFBhY2tldAogICAgKmN1cnJlbnRfc3Ryb2tlLAog ICAgbmV3X3N0cm9rZTsKCiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8g MCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUv YmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA0NjAz LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250 ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6 IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNDYwNCwgImNvbnRleHQtPnNpZ25hdHVyZSA9 PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKICAoKHZvaWQpICgoc3Ryb2tlX2NvbG9yICE9IChj b25zdCBQaXhlbFBhY2tldCAqKSAwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBh c3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01h Z2ljay9tYWdpY2svZHJhdy5jIiwgNDYwNSwgInN0cm9rZV9jb2xvciAhPSAoY29uc3QgUGl4ZWxQ YWNrZXQgKikgTlVMTCIpLCAwKSkpOwoKICBuZXdfc3Ryb2tlID0gKnN0cm9rZV9jb2xvcjsKICBp ZihuZXdfc3Ryb2tlLm9wYWNpdHkgIT0gMjU1VUwpCiAgICBuZXdfc3Ryb2tlLm9wYWNpdHkgPSAo Y29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPm9wYWNpdHk7CgogIGN1 cnJlbnRfc3Ryb2tlID0gJihjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhd KS0+c3Ryb2tlOwogIGlmKCBjb250ZXh0LT5maWx0ZXJfb2ZmIHx8ICEoKCgoY3VycmVudF9zdHJv a2UpLT5yZWQgPT0gKCZuZXdfc3Ryb2tlKS0+cmVkKSAmJiAoKGN1cnJlbnRfc3Ryb2tlKS0+Z3Jl ZW4gPT0gKCZuZXdfc3Ryb2tlKS0+Z3JlZW4pICYmICgoY3VycmVudF9zdHJva2UpLT5ibHVlID09 ICgmbmV3X3N0cm9rZSktPmJsdWUpICYmICgoY3VycmVudF9zdHJva2UpLT5vcGFjaXR5ID09ICgm bmV3X3N0cm9rZSktPm9wYWNpdHkpKSkgKQogICAgewogICAgICAoY29udGV4dC0+Z3JhcGhpY19j b250ZXh0W2NvbnRleHQtPmluZGV4XSktPnN0cm9rZSA9IG5ld19zdHJva2U7CgogICAgICBNdmdQ cmludGYoY29udGV4dCwgInN0cm9rZSAiKTsKICAgICAgTXZnQXBwZW5kQ29sb3IoY29udGV4dCwg c3Ryb2tlX2NvbG9yKTsKICAgICAgTXZnUHJpbnRmKGNvbnRleHQsICJcbiIpOwogICAgfQp9CiMg NDY0NyAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9k cmF3LmMiCiB2b2lkIERyYXdTZXRTdHJva2VDb2xvclN0cmluZyhEcmF3Q29udGV4dCBjb250ZXh0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog c3Ryb2tlX2NvbG9yKQp7CiAgUGl4ZWxQYWNrZXQKICAgIHBpeGVsX3BhY2tldDsKCiAgaWYoUXVl cnlDb2xvckRhdGFiYXNlKHN0cm9rZV9jb2xvciwmcGl4ZWxfcGFja2V0LCZjb250ZXh0LT5pbWFn ZS0+ZXhjZXB0aW9uKSkKICAgIERyYXdTZXRTdHJva2VDb2xvcihjb250ZXh0LCZwaXhlbF9wYWNr ZXQpOwp9CiMgNDY4MSAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNr L21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdTZXRTdHJva2VQYXR0ZXJuVVJMKERyYXdDb250ZXh0 IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIqIHN0cm9rZV91cmwpCnsKICBjaGFyCiAgICBwYXR0ZXJuWzIwNTNdOwoKICAoKHZvaWQp ICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBm YWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3Jh cGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDQ2ODcsICJjb250ZXh0ICE9IChEcmF3Q29udGV4 dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNh ZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4i LCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3 LmMiLCA0Njg4LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkp OwogICgodm9pZCkgKChzdHJva2VfdXJsICE9IDApID8gMCA6IChfX2VwcmludGYgKCIlczoldTog ZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dy YXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA0Njg5LCAic3Ryb2tlX3VybCAhPSBOVUxMIiks IDApKSk7CgogIGlmKHN0cm9rZV91cmxbMF0gIT0gJyMnKQogICAgeyBpZiAoY29udGV4dC0+aW1h Z2UtPmV4Y2VwdGlvbi5zZXZlcml0eSA+IChsb25nKU9wdGlvbldhcm5pbmcpIFRocm93RXhjZXB0 aW9uKCZjb250ZXh0LT5pbWFnZS0+ZXhjZXB0aW9uLE9wdGlvbldhcm5pbmcsIk5vdEFSZWxhdGl2 ZVVSTCIsc3Ryb2tlX3VybCk7IHJldHVybjsgfTsKCiAgRm9ybWF0U3RyaW5nKHBhdHRlcm4sIlsl LjEwMjRzXSIsc3Ryb2tlX3VybCsxKTsKCiAgaWYgKEdldEltYWdlQXR0cmlidXRlKGNvbnRleHQt PmltYWdlLHBhdHRlcm4pID09IChJbWFnZUF0dHJpYnV0ZSAqKSAwKQogICAgewogICAgICB7IGlm IChjb250ZXh0LT5pbWFnZS0+ZXhjZXB0aW9uLnNldmVyaXR5ID4gKGxvbmcpT3B0aW9uV2Fybmlu ZykgVGhyb3dFeGNlcHRpb24oJmNvbnRleHQtPmltYWdlLT5leGNlcHRpb24sT3B0aW9uV2Fybmlu ZywiVVJMTm90Rm91bmQiLHN0cm9rZV91cmwpOyByZXR1cm47IH0KICAgIH0KICBlbHNlCiAgICB7 CiAgICAgIGNoYXIKICAgICAgICBwYXR0ZXJuX3NwZWNbMjA1M107CgogICAgICBGb3JtYXRTdHJp bmcocGF0dGVybl9zcGVjLCJ1cmwoJS4xMDI0cykiLHN0cm9rZV91cmwpOwoKCgogICAgICBpZiAo KGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5zdHJva2Uub3BhY2l0 eSAhPSAyNTVVTCkKICAgICAgICAoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmlu ZGV4XSktPnN0cm9rZS5vcGFjaXR5PShjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+ aW5kZXhdKS0+b3BhY2l0eTsKCiAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAic3Ryb2tlICVzXG4i LHBhdHRlcm5fc3BlYyk7CiAgICB9Cn0KIyA0NzQwICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhp Y3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHVuc2lnbmVkIGludCBEcmF3R2V0U3Ry b2tlQW50aWFsaWFzKERyYXdDb250ZXh0IGNvbnRleHQpCnsKICAoKHZvaWQpICgoY29udGV4dCAh PSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0 aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2RyYXcuYyIsIDQ3NDIsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDAp KSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6 IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZy aWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA0NzQzLCAi Y29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICByZXR1cm4g KGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5zdHJva2VfYW50aWFs aWFzOwp9CiMgNDc3NiAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNr L21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdTZXRTdHJva2VBbnRpYWxpYXMoRHJhd0NvbnRleHQg Y29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBpbnQgc3Ryb2tlX2FudGlhbGlhcykKewogICgodm9pZCkgKChjb250ZXh0ICE9IChE cmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24g YCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdp Y2svZHJhdy5jIiwgNDc3OSwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsK ICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9f ZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNl bi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDQ3ODAsICJjb250 ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIGlmKGNvbnRleHQt PmZpbHRlcl9vZmYgfHwgKChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhd KS0+c3Ryb2tlX2FudGlhbGlhcyAhPSBzdHJva2VfYW50aWFsaWFzKSkKICAgIHsKICAgICAgKGNv bnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5zdHJva2VfYW50aWFsaWFz ID0gc3Ryb2tlX2FudGlhbGlhczsKCiAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAic3Ryb2tlLWFu dGlhbGlhcyAlaVxuIiwgc3Ryb2tlX2FudGlhbGlhcyA/IDEgOiAwKTsKICAgIH0KfQojIDQ4MTYg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j IgogZG91YmxlICpEcmF3R2V0U3Ryb2tlRGFzaEFycmF5KERyYXdDb250ZXh0IGNvbnRleHQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpudW1fZWxl bXMpCnsKICByZWdpc3RlciBjb25zdCBkb3VibGUKICAgICpwOwoKICByZWdpc3RlciBkb3VibGUK ICAgICpxOwoKICBkb3VibGUKICAgICpkYXNoYXJyYXk7CgogIHVuc2lnbmVkIGludAogICAgaSwK ICAgIG4gPSAwOwoKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDog KF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJp ZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDQ4MzIsICJj b250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQt PnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBo aWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA0ODMzLCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1h Z2lja1NpZ25hdHVyZSIpLCAwKSkpOwogICgodm9pZCkgKChudW1fZWxlbXMgIT0gKHNpemVfdCAq KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAi L2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMi LCA0ODM0LCAibnVtX2VsZW1zICE9IChzaXplX3QgKilOVUxMIiksIDApKSk7CgogIHAgPSAoY29u dGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPmRhc2hfcGF0dGVybjsKICBp ZiggcCAhPSAoY29uc3QgZG91YmxlICopIDAgKQogICAgd2hpbGUoICpwKysgIT0gMCkKICAgICAg bisrOwoKICAqbnVtX2VsZW1zID0gbjsKICBkYXNoYXJyYXkgPSAoZG91YmxlICopMDsKICBpZiAo biAhPSAwKQogICAgewogICAgICBkYXNoYXJyYXkgPSAoZG91YmxlICopQWNxdWlyZU1lbW9yeShu KnNpemVvZihkb3VibGUpKTsKICAgICAgcCA9IChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29u dGV4dC0+aW5kZXhdKS0+ZGFzaF9wYXR0ZXJuOwogICAgICBxID0gZGFzaGFycmF5OwogICAgICBp ID0gbjsKICAgICAgd2hpbGUoIGktLSApCiAgICAgICAgKnErKyA9ICpwKys7CiAgICB9CiAgcmV0 dXJuIGRhc2hhcnJheTsKfQojIDQ4ODkgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFw aGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3U2V0U3Ryb2tlRGFzaEFycmF5KERy YXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc2l6ZV90IG51bV9lbGVtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBkb3VibGUgKmRhc2hhcnJheSkKewogIHJlZ2lzdGVyIGNvbnN0IGRv dWJsZQogICAgKnA7CgogIHJlZ2lzdGVyIGRvdWJsZQogICAgKnE7CgogIHVuc2lnbmVkIGludAog ICAgaSwKICAgIHVwZGF0ZWQgPSAwLAogICAgbl9uZXcgPSBudW1fZWxlbXMsCiAgICBuX29sZCA9 IDA7CgogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJp bnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3Ny Yy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNDkwNSwgImNvbnRleHQg IT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0 dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNz ZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdp Y2svbWFnaWNrL2RyYXcuYyIsIDQ5MDYsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2ln bmF0dXJlIiksIDApKSk7CgogIHEgPSAoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQt PmluZGV4XSktPmRhc2hfcGF0dGVybjsKICBpZiggcSAhPSAoY29uc3QgZG91YmxlICopIDAgKQog ICAgd2hpbGUoICpxKysgIT0gMCkKICAgICAgbl9vbGQrKzsKCiAgaWYoIChuX29sZCA9PSAwKSAm JiAobl9uZXcgPT0gMCkgKQogICAgewogICAgICB1cGRhdGVkID0gMDsKICAgIH0KICBlbHNlIGlm KCBuX29sZCAhPSBuX25ldyApCiAgICB7CiAgICAgIHVwZGF0ZWQgPSAxOwogICAgfQogIGVsc2Ug aWYoKChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZGFzaF9wYXR0 ZXJuICE9IChkb3VibGUqKTApCiAgICAgICAgICAmJiAoZGFzaGFycmF5ICE9IChkb3VibGUqKTAp KQogICAgewogICAgICBwID0gZGFzaGFycmF5OwogICAgICBxID0gKGNvbnRleHQtPmdyYXBoaWNf Y29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5kYXNoX3BhdHRlcm47CiAgICAgIGkgPSBuX25ldzsK ICAgICAgd2hpbGUoIGktLSApCiAgICAgICAgewogICAgICAgICAgaWYoKCgqcCAtICpxKSA8IDAg PyAtKCpwIC0gKnEpIDogKCpwIC0gKnEpKSA+IDEuMGUtMTIpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICB1cGRhdGVkID0gMTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQog ICAgICAgICAgKytwOwogICAgICAgICAgKytxOwogICAgICAgIH0KICAgIH0KCiAgaWYoIGNvbnRl eHQtPmZpbHRlcl9vZmYgfHwgdXBkYXRlZCApCiAgICB7CiAgICAgIGlmKChjb250ZXh0LT5ncmFw aGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZGFzaF9wYXR0ZXJuICE9IChkb3VibGUqKTAp CiAgICAgICAgTGliZXJhdGVNZW1vcnkoKHZvaWQgKiopICYoY29udGV4dC0+Z3JhcGhpY19jb250 ZXh0W2NvbnRleHQtPmluZGV4XSktPmRhc2hfcGF0dGVybik7CgogICAgICBpZiggbl9uZXcgIT0g MCkKICAgICAgICB7CiAgICAgICAgICAoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQt PmluZGV4XSktPmRhc2hfcGF0dGVybiA9IChkb3VibGUgKikKICAgICAgICAgICAgQWNxdWlyZU1l bW9yeSgobl9uZXcrMSkqc2l6ZW9mKGRvdWJsZSkpOwogICAgICAgICAgaWYoKGNvbnRleHQtPmdy YXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5kYXNoX3BhdHRlcm4pCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBxPShjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5k ZXhdKS0+ZGFzaF9wYXR0ZXJuOwogICAgICAgICAgICAgIHA9ZGFzaGFycmF5OwogICAgICAgICAg ICAgIHdoaWxlKCAqcCApCiAgICAgICAgICAgICAgICAqcSsrPSpwKys7CiAgICAgICAgICAgICAg KnE9MDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgeyBpZiAoY29udGV4dC0+aW1hZ2UtPmV4Y2VwdGlvbi5zZXZlcml0eSA+IChsb25nKVJl c291cmNlTGltaXRFcnJvcikgVGhyb3dFeGNlcHRpb24oJmNvbnRleHQtPmltYWdlLT5leGNlcHRp b24sUmVzb3VyY2VMaW1pdEVycm9yLCJNZW1vcnlBbGxvY2F0aW9uRmFpbGVkIiwiVW5hYmxlVG9E cmF3T25JbWFnZSIpOyByZXR1cm47IH0KCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBN dmdQcmludGYoY29udGV4dCwgInN0cm9rZS1kYXNoYXJyYXkgIik7CiAgICAgIGlmICggbl9uZXcg PT0gMCApCiAgICAgICAgTXZnUHJpbnRmKGNvbnRleHQsICJub25lIik7CiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICBwID0gZGFzaGFycmF5OwogICAgICAgICAgaSA9IG5fbmV3OwogICAg ICAgICAgTXZnUHJpbnRmKGNvbnRleHQsICIlLjRnIiwgKnArKyk7CiAgICAgICAgICB3aGlsZSAo aS0tKQogICAgICAgICAgICBNdmdQcmludGYoY29udGV4dCwgIiwlLjRnIiwgKnArKyk7CiAgICAg ICAgfQogICAgICBNdmdQcmludGYoY29udGV4dCwgIjAgXG4iKTsKICAgIH0KfQojIDUwMDEgIi9o b21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgog ZG91YmxlIERyYXdHZXRTdHJva2VEYXNoT2Zmc2V0KERyYXdDb250ZXh0IGNvbnRleHQpCnsKICAo KHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVz OiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhp Y3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDUwMDMsICJjb250ZXh0ICE9IChEcmF3 Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAw eGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBg JXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2lj ay9kcmF3LmMiLCA1MDA0LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIp LCAwKSkpOwoKICByZXR1cm4gKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRl eF0pLT5kYXNoX29mZnNldDsKfQojIDUwMzUgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3U2V0U3Ryb2tlRGFzaE9mZnNl dChEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBkb3VibGUgZGFzaF9vZmZzZXQpCnsKICAoKHZvaWQpICgoY29udGV4dCAh PSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0 aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2RyYXcuYyIsIDUwMzgsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDAp KSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6 IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZy aWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA1MDM5LCAi Y29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBpZihjb250 ZXh0LT5maWx0ZXJfb2ZmIHx8CiAgICAgKCgoKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250 ZXh0LT5pbmRleF0pLT5kYXNoX29mZnNldC1kYXNoX29mZnNldCkgPCAwID8gLSgoY29udGV4dC0+ Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPmRhc2hfb2Zmc2V0LWRhc2hfb2Zmc2V0 KSA6ICgoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPmRhc2hfb2Zm c2V0LWRhc2hfb2Zmc2V0KSkgPiAxLjBlLTEyKSkKICAgIHsKICAgICAgKGNvbnRleHQtPmdyYXBo aWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5kYXNoX29mZnNldCA9IGRhc2hfb2Zmc2V0OwoK ICAgICAgTXZnUHJpbnRmKGNvbnRleHQsICJzdHJva2UtZGFzaG9mZnNldCAlLjRnXG4iLCBkYXNo X29mZnNldCk7CiAgICB9Cn0KIyA1MDc0ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3Jh cGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIExpbmVDYXAgRHJhd0dldFN0cm9rZUxpbmVDYXAo RHJhd0NvbnRleHQgY29udGV4dCkKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4 dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j IiwgNTA3NiwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQp ICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAo IiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3Jh cGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDUwNzcsICJjb250ZXh0LT5zaWdu YXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIHJldHVybiAoY29udGV4dC0+Z3Jh cGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPmxpbmVjYXA7Cn0KIyA1MTA5ICIvaG9tZS9i ZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQg RHJhd1NldFN0cm9rZUxpbmVDYXAoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGluZUNhcCBsaW5lY2FwKQp7CiAgKCh2b2lk KSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTog ZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dy YXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA1MTEyLCAiY29udGV4dCAhPSAoRHJhd0NvbnRl eHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFj YWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xu IiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJh dy5jIiwgNTExMywgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkp KTsKCiAgaWYoY29udGV4dC0+ZmlsdGVyX29mZiB8fCAoKGNvbnRleHQtPmdyYXBoaWNfY29udGV4 dFtjb250ZXh0LT5pbmRleF0pLT5saW5lY2FwICE9IGxpbmVjYXApKQogICAgewogICAgICBjb25z dCBjaGFyCiAgICAgICAgKnAgPSAwOwoKICAgICAgKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtj b250ZXh0LT5pbmRleF0pLT5saW5lY2FwID0gbGluZWNhcDsKCiAgICAgIHN3aXRjaCAobGluZWNh cCkKICAgICAgICB7CiAgICAgICAgY2FzZSBCdXR0Q2FwOgogICAgICAgICAgcCA9ICJidXR0IjsK ICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUm91bmRDYXA6CiAgICAgICAgICBwID0gInJv dW5kIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgU3F1YXJlQ2FwOgogICAgICAgICAg cCA9ICJzcXVhcmUiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAg IGJyZWFrOwogICAgICAgIH0KCiAgICAgIGlmIChwICE9IDApCiAgICAgICAgTXZnUHJpbnRmKGNv bnRleHQsICJzdHJva2UtbGluZWNhcCAlc1xuIiwgcCk7CiAgICB9Cn0KIyA1MTY3ICIvaG9tZS9i ZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIExpbmVK b2luIERyYXdHZXRTdHJva2VMaW5lSm9pbihEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAgKCh2b2lk KSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTog ZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dy YXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA1MTY5LCAiY29udGV4dCAhPSAoRHJhd0NvbnRl eHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFj YWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xu IiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJh dy5jIiwgNTE3MCwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkp KTsKCiAgcmV0dXJuIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ bGluZWpvaW47Cn0KIyA1MjAyICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NN YWdpY2svbWFnaWNrL2RyYXcuYyIKIHZvaWQgRHJhd1NldFN0cm9rZUxpbmVKb2luKERyYXdDb250 ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBMaW5lSm9pbiBsaW5lam9pbikKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4 dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwg Ii9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5j IiwgNTIwNSwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQp ICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAo IiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3Jh cGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDUyMDYsICJjb250ZXh0LT5zaWdu YXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIGlmKGNvbnRleHQtPmZpbHRlcl9v ZmYgfHwgKChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+bGluZWpv aW4gIT0gbGluZWpvaW4pKQogICAgewogICAgICBjb25zdCBjaGFyCiAgICAgICAgKnAgPSAwOwoK ICAgICAgKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5saW5lam9p biA9IGxpbmVqb2luOwoKICAgICAgc3dpdGNoIChsaW5lam9pbikKICAgICAgICB7CiAgICAgICAg Y2FzZSBNaXRlckpvaW46CiAgICAgICAgICBwID0gIm1pdGVyIjsKICAgICAgICAgIGJyZWFrOwog ICAgICAgIGNhc2UgUm91bmRKb2luOgogICAgICAgICAgcCA9ICJyb3VuZCI7CiAgICAgICAgICBi cmVhazsKICAgICAgICBjYXNlIEJldmVsSm9pbjoKICAgICAgICAgIHAgPSAic3F1YXJlIjsKICAg ICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBicmVhazsKICAgICAgICB9 CgogICAgICBpZiAocCAhPSAwKQogICAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAic3Ryb2tlLWxp bmVqb2luICVzXG4iLCBwKTsKICAgIH0KfQojIDUyNjEgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFw aGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdW5zaWduZWQgbG9uZyBEcmF3R2V0 U3Ryb2tlTWl0ZXJMaW1pdChEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRl eHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFz c2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9kcmF3LmMiLCA1MjYzLCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIp LCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/ IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21l L2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNTI2 NCwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgcmV0 dXJuIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+bWl0ZXJsaW1p dDsKfQojIDUyOTggIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svZHJhdy5jIgogdm9pZCBEcmF3U2V0U3Ryb2tlTWl0ZXJMaW1pdChEcmF3Q29udGV4dCBj b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBsb25nIG1pdGVybGltaXQpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0Nv bnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydc biIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2Ry YXcuYyIsIDUzMDEsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2 b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2Vwcmlu dGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3Jj L2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA1MzAyLCAiY29udGV4dC0+ c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBpZigoY29udGV4dC0+Z3Jh cGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPm1pdGVybGltaXQgIT0gbWl0ZXJsaW1pdCkK ICAgIHsKICAgICAgKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5t aXRlcmxpbWl0ID0gbWl0ZXJsaW1pdDsKCiAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAic3Ryb2tl LW1pdGVybGltaXQgJWx1XG4iLCBtaXRlcmxpbWl0KTsKICAgIH0KfQojIDUzMzMgIi9ob21lL2Jm cmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogZG91Ymxl IERyYXdHZXRTdHJva2VPcGFjaXR5KERyYXdDb250ZXh0IGNvbnRleHQpCnsKICAoKHZvaWQpICgo Y29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWls ZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhp Y3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDUzMzUsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClO VUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFi VUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAi L2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMi LCA1MzM2LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoK ICByZXR1cm4gKDEuMC0oKChkb3VibGUpKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0 LT5pbmRleF0pLT5zdHJva2Uub3BhY2l0eSkvMjU1VUwpKTsKfQojIDUzNjYgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3 U2V0U3Ryb2tlT3BhY2l0eShEcmF3Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgc3Ryb2tlX29wYWNpdHkpCnsKICBkb3Vi bGUKICAgIG9wYWNpdHk7CgogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/ IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21l L2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNTM3 MiwgImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29u dGV4dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1 OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3Mv R3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDUzNzMsICJjb250ZXh0LT5zaWduYXR1cmUg PT0gTWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CgogIG9wYWNpdHkgPSAoUXVhbnR1bSkoKGRvdWJs ZSkgMjU1VUwqKDEuMC0oc3Ryb2tlX29wYWNpdHkgPD0gMS4wID8gc3Ryb2tlX29wYWNpdHkgOiAx LjAgKSkrMC41KTsKCiAgaWYgKGNvbnRleHQtPmZpbHRlcl9vZmYgfHwgKChjb250ZXh0LT5ncmFw aGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+c3Ryb2tlLm9wYWNpdHkgIT0gb3BhY2l0eSkp CiAgICB7CiAgICAgIChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ c3Ryb2tlLm9wYWNpdHkgPSAoUXVhbnR1bSkgY2VpbChvcGFjaXR5KTsKICAgICAgTXZnUHJpbnRm KGNvbnRleHQsICJzdHJva2Utb3BhY2l0eSAlLjRnXG4iLCBzdHJva2Vfb3BhY2l0eSk7CiAgICB9 Cn0KIyA1NDA3ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFn aWNrL2RyYXcuYyIKIGRvdWJsZSBEcmF3R2V0U3Ryb2tlV2lkdGgoRHJhd0NvbnRleHQgY29udGV4 dCkKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJp bnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3Ny Yy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNTQwOSwgImNvbnRleHQg IT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0 dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNz ZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdp Y2svbWFnaWNrL2RyYXcuYyIsIDU0MTAsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2ln bmF0dXJlIiksIDApKSk7CgogIHJldHVybiAoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRl eHQtPmluZGV4XSktPnN0cm9rZV93aWR0aDsKfQojIDU0NDAgIi9ob21lL2Jmcmllc2VuL3NyYy9n cmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3U2V0U3Ryb2tl V2lkdGgoRHJhd0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGRvdWJsZSBzdHJva2Vfd2lkdGgpCnsKICAoKHZvaWQpICgoY29udGV4dCAh PSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0 aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2RyYXcuYyIsIDU0NDMsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDAp KSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6 IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZy aWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA1NDQ0LCAi Y29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBpZiAoY29u dGV4dC0+ZmlsdGVyX29mZiB8fAogICAgICAoKCgoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2Nv bnRleHQtPmluZGV4XSktPnN0cm9rZV93aWR0aC1zdHJva2Vfd2lkdGgpIDwgMCA/IC0oKGNvbnRl eHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5zdHJva2Vfd2lkdGgtc3Ryb2tl X3dpZHRoKSA6ICgoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPnN0 cm9rZV93aWR0aC1zdHJva2Vfd2lkdGgpKSA+IDEuMGUtMTIpKQogICAgewogICAgICAoY29udGV4 dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPnN0cm9rZV93aWR0aCA9IHN0cm9r ZV93aWR0aDsKCiAgICAgIE12Z1ByaW50Zihjb250ZXh0LCAic3Ryb2tlLXdpZHRoICUuNGdcbiIs IHN0cm9rZV93aWR0aCk7CiAgICB9Cn0KIyA1NDc4ICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhp Y3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIHVuc2lnbmVkIGludCBEcmF3R2V0VGV4 dEFudGlhbGlhcyhEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0g KERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlv biBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21h Z2ljay9kcmF3LmMiLCA1NDgwLCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkp OwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAo X19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNTQ4MSwgImNv bnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgcmV0dXJuIChj b250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+dGV4dF9hbnRpYWxpYXM7 Cn0KIyA1NTEzICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFn aWNrL2RyYXcuYyIKIHZvaWQgRHJhd1NldFRleHRBbnRpYWxpYXMoRHJhd0NvbnRleHQgY29udGV4 dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg aW50IHRleHRfYW50aWFsaWFzKQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERyYXdDb250ZXh0 KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAi L2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMi LCA1NTE2LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwogICgodm9pZCkg KChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19lcHJpbnRmICgi JXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFw aGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNTUxNywgImNvbnRleHQtPnNpZ25h dHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgaWYgKGNvbnRleHQtPmZpbHRlcl9v ZmYgfHwgKChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+dGV4dF9h bnRpYWxpYXMgIT0gdGV4dF9hbnRpYWxpYXMpKQogICAgewogICAgICAoY29udGV4dC0+Z3JhcGhp Y19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPnRleHRfYW50aWFsaWFzID0gdGV4dF9hbnRpYWxp YXM7CgogICAgICBNdmdQcmludGYoY29udGV4dCwgInRleHQtYW50aWFsaWFzICVpXG4iLCB0ZXh0 X2FudGlhbGlhcyA/IDEgOiAwKTsKICAgIH0KfQojIDU1NTAgIi9ob21lL2Jmcmllc2VuL3NyYy9n cmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogRGVjb3JhdGlvblR5cGUgRHJh d0dldFRleHREZWNvcmF0aW9uKERyYXdDb250ZXh0IGNvbnRleHQpCnsKICAoKHZvaWQpICgoY29u dGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQg YXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NN YWdpY2svbWFnaWNrL2RyYXcuYyIsIDU1NTIsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxM IiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwp ID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hv bWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA1 NTUzLCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBy ZXR1cm4gKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT5kZWNvcmF0 ZTsKfQojIDU1ODUgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9t YWdpY2svZHJhdy5jIgogdm9pZCBEcmF3U2V0VGV4dERlY29yYXRpb24oRHJhd0NvbnRleHQgY29u dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlY29y YXRpb25UeXBlIGRlY29yYXRpb24pCnsKICBjb25zdCBjaGFyCiAgICAqcCA9IDA7CgogICgodm9p ZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6 IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNTU5MSwgImNvbnRleHQgIT0gKERyYXdDb250 ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJlID09IDB4YWJh Y2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydc biIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2Ry YXcuYyIsIDU1OTIsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0dXJlIiksIDAp KSk7CgogIGlmIChjb250ZXh0LT5maWx0ZXJfb2ZmIHx8ICgoY29udGV4dC0+Z3JhcGhpY19jb250 ZXh0W2NvbnRleHQtPmluZGV4XSktPmRlY29yYXRlICE9IGRlY29yYXRpb24pKQogICAgewogICAg ICAoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPmRlY29yYXRlID0g ZGVjb3JhdGlvbjsKCiAgICAgIHN3aXRjaCAoZGVjb3JhdGlvbikKICAgICAgICB7CiAgICAgICAg Y2FzZSBOb0RlY29yYXRpb246CiAgICAgICAgICBwID0gIm5vbmUiOwogICAgICAgICAgYnJlYWs7 CiAgICAgICAgY2FzZSBVbmRlcmxpbmVEZWNvcmF0aW9uOgogICAgICAgICAgcCA9ICJ1bmRlcmxp bmUiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBPdmVybGluZURlY29yYXRpb246CiAg ICAgICAgICBwID0gIm92ZXJsaW5lIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTGlu ZVRocm91Z2hEZWNvcmF0aW9uOgogICAgICAgICAgcCA9ICJsaW5lLXRocm91Z2giOwogICAgICAg ICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKHAgIT0gMCkKICAgICAgICBNdmdQcmludGYo Y29udGV4dCwgImRlY29yYXRlICVzXG4iLCBwKTsKICAgIH0KfQojIDU2NDMgIi9ob21lL2Jmcmll c2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogY2hhciAqRHJh d0dldFRleHRFbmNvZGluZyhEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRl eHQgIT0gKERyYXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFz c2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9kcmF3LmMiLCA1NjQ1LCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIp LCAwKSkpOwogICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/ IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21l L2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNTY0 NiwgImNvbnRleHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgaWYg KChjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZW5jb2RpbmcgIT0g KGNoYXIgKikwKQogICAgcmV0dXJuIChjaGFyICopIEFsbG9jYXRlU3RyaW5nKChjb250ZXh0LT5n cmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZW5jb2RpbmcpOwogIGVsc2UKICAgIHJl dHVybiAoY2hhciAqKSAwOwp9CiMgNTY4MyAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dy YXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdTZXRUZXh0RW5jb2RpbmcoRHJh d0NvbnRleHQgY29udGV4dCwgY29uc3QgY2hhciogZW5jb2RpbmcpCnsKICAoKHZvaWQpICgoY29u dGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQg YXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NN YWdpY2svbWFnaWNrL2RyYXcuYyIsIDU2ODUsICJjb250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxM IiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQtPnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwp ID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hv bWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA1 Njg2LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1hZ2lja1NpZ25hdHVyZSIpLCAwKSkpOwogICgo dm9pZCkgKChlbmNvZGluZyAhPSAoY2hhciAqKSAwKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6 IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9H cmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNTY4NywgImVuY29kaW5nICE9IChjaGFyICop IE5VTEwiKSwgMCkpKTsKCiAgaWYgKGNvbnRleHQtPmZpbHRlcl9vZmYgfHwgKChjb250ZXh0LT5n cmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZW5jb2RpbmcgPT0gKGNoYXIgKikgMCkg fHwKICAgICAgKExvY2FsZUNvbXBhcmUoKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0 LT5pbmRleF0pLT5lbmNvZGluZyxlbmNvZGluZykgIT0gMCkpCiAgICB7CiAgICAgICAgQ2xvbmVT dHJpbmcoJihjb250ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+ZW5jb2Rp bmcsZW5jb2RpbmcpOwoKICAgICAgTXZnUHJpbnRmKGNvbnRleHQsICJlbmNvZGluZyAnJXMnXG4i LCBlbmNvZGluZyk7CiAgICB9Cn0KIyA1NzIxICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3Mv R3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIKIFBpeGVsUGFja2V0IERyYXdHZXRUZXh0VW5k ZXJDb2xvcihEcmF3Q29udGV4dCBjb250ZXh0KQp7CiAgKCh2b2lkKSAoKGNvbnRleHQgIT0gKERy YXdDb250ZXh0KTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBg JXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2lj ay9kcmF3LmMiLCA1NzIzLCAiY29udGV4dCAhPSAoRHJhd0NvbnRleHQpTlVMTCIpLCAwKSkpOwog ICgodm9pZCkgKChjb250ZXh0LT5zaWduYXR1cmUgPT0gMHhhYmFjYWRhYlVMKSA/IDAgOiAoX19l cHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2Vu L3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNTcyNCwgImNvbnRl eHQtPnNpZ25hdHVyZSA9PSBNYWdpY2tTaWduYXR1cmUiKSwgMCkpKTsKCiAgcmV0dXJuIChjb250 ZXh0LT5ncmFwaGljX2NvbnRleHRbY29udGV4dC0+aW5kZXhdKS0+dW5kZXJjb2xvcjsKfQojIDU3 NTUgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJh dy5jIgogdm9pZCBEcmF3U2V0VGV4dFVuZGVyQ29sb3IoRHJhd0NvbnRleHQgY29udGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpeGVsUGFja2V0ICp1 bmRlcl9jb2xvcikKewogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAg OiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jm cmllc2VuL3NyYy9ncmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNTc1OCwg ImNvbnRleHQgIT0gKERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4 dC0+c2lnbmF0dXJlID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBm YWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3Jh cGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDU3NTksICJjb250ZXh0LT5zaWduYXR1cmUgPT0g TWFnaWNrU2lnbmF0dXJlIiksIDApKSk7CiAgKCh2b2lkKSAoKHVuZGVyX2NvbG9yICE9IChjb25z dCBQaXhlbFBhY2tldCAqKTApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2Vy dGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNr L21hZ2ljay9kcmF3LmMiLCA1NzYwLCAidW5kZXJfY29sb3IgIT0gKGNvbnN0IFBpeGVsUGFja2V0 ICopTlVMTCIpLCAwKSkpOwoKICBpZiAoY29udGV4dC0+ZmlsdGVyX29mZiB8fCAhKCgoKCYoY29u dGV4dC0+Z3JhcGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPnVuZGVyY29sb3IpLT5yZWQg PT0gKHVuZGVyX2NvbG9yKS0+cmVkKSAmJiAoKCYoY29udGV4dC0+Z3JhcGhpY19jb250ZXh0W2Nv bnRleHQtPmluZGV4XSktPnVuZGVyY29sb3IpLT5ncmVlbiA9PSAodW5kZXJfY29sb3IpLT5ncmVl bikgJiYgKCgmKGNvbnRleHQtPmdyYXBoaWNfY29udGV4dFtjb250ZXh0LT5pbmRleF0pLT51bmRl cmNvbG9yKS0+Ymx1ZSA9PSAodW5kZXJfY29sb3IpLT5ibHVlKSAmJiAoKCYoY29udGV4dC0+Z3Jh cGhpY19jb250ZXh0W2NvbnRleHQtPmluZGV4XSktPnVuZGVyY29sb3IpLT5vcGFjaXR5ID09ICh1 bmRlcl9jb2xvciktPm9wYWNpdHkpKSkpCiAgICB7CiAgICAgIChjb250ZXh0LT5ncmFwaGljX2Nv bnRleHRbY29udGV4dC0+aW5kZXhdKS0+dW5kZXJjb2xvciA9ICp1bmRlcl9jb2xvcjsKICAgICAg TXZnUHJpbnRmKGNvbnRleHQsICJ0ZXh0LXVuZGVyY29sb3IgIik7CiAgICAgIE12Z0FwcGVuZENv bG9yKGNvbnRleHQsIHVuZGVyX2NvbG9yKTsKICAgICAgTXZnUHJpbnRmKGNvbnRleHQsICJcbiIp OwogICAgfQp9CiMgNTc5NyAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFn aWNrL21hZ2ljay9kcmF3LmMiCiB2b2lkIERyYXdTZXRUZXh0VW5kZXJDb2xvclN0cmluZyhEcmF3 Q29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciogdW5kZXJfY29sb3IpCnsKICBQaXhlbFBhY2tldAogICAgcGl4ZWxf cGFja2V0OwoKICBpZihRdWVyeUNvbG9yRGF0YWJhc2UodW5kZXJfY29sb3IsJnBpeGVsX3BhY2tl dCwmY29udGV4dC0+aW1hZ2UtPmV4Y2VwdGlvbikpCiAgICBEcmF3U2V0VGV4dFVuZGVyQ29sb3Io Y29udGV4dCwmcGl4ZWxfcGFja2V0KTsKfQojIDU4MzYgIi9ob21lL2Jmcmllc2VuL3NyYy9ncmFw aGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIgogdm9pZCBEcmF3VHJhbnNsYXRlKERy YXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KQp7CiAgQWZmaW5lTWF0cml4CiAgICBhZmZpbmU7 CgogICgodm9pZCkgKChjb250ZXh0ICE9IChEcmF3Q29udGV4dCkwKSA/IDAgOiAoX19lcHJpbnRm ICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lL2Jmcmllc2VuL3NyYy9n cmFwaGljcy9HcmFwaGljc01hZ2ljay9tYWdpY2svZHJhdy5jIiwgNTg0MiwgImNvbnRleHQgIT0g KERyYXdDb250ZXh0KU5VTEwiKSwgMCkpKTsKICAoKHZvaWQpICgoY29udGV4dC0+c2lnbmF0dXJl ID09IDB4YWJhY2FkYWJVTCkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0 aW9uIGAlcydcbiIsICIvaG9tZS9iZnJpZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2sv bWFnaWNrL2RyYXcuYyIsIDU4NDMsICJjb250ZXh0LT5zaWduYXR1cmUgPT0gTWFnaWNrU2lnbmF0 dXJlIiksIDApKSk7CgogIElkZW50aXR5QWZmaW5lKCZhZmZpbmUpOwogIGFmZmluZS50eD14Owog IGFmZmluZS50eT15OwogIEFkanVzdEFmZmluZSggY29udGV4dCwgJmFmZmluZSApOwoKICBNdmdQ cmludGYoY29udGV4dCwgInRyYW5zbGF0ZSAlLjRnLCUuNGdcbiIsIHgsIHkpOwp9CiMgNTg4OSAi L2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBoaWNzTWFnaWNrL21hZ2ljay9kcmF3LmMi CiB2b2lkIERyYXdTZXRWaWV3Ym94KERyYXdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgeDEsIHVuc2lnbmVkIGxvbmcgeTEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgeDIsIHVuc2lnbmVk IGxvbmcgeTIpCnsKICAoKHZvaWQpICgoY29udGV4dCAhPSAoRHJhd0NvbnRleHQpMCkgPyAwIDog KF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsICIvaG9tZS9iZnJp ZXNlbi9zcmMvZ3JhcGhpY3MvR3JhcGhpY3NNYWdpY2svbWFnaWNrL2RyYXcuYyIsIDU4OTMsICJj b250ZXh0ICE9IChEcmF3Q29udGV4dClOVUxMIiksIDApKSk7CiAgKCh2b2lkKSAoKGNvbnRleHQt PnNpZ25hdHVyZSA9PSAweGFiYWNhZGFiVUwpID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLCAiL2hvbWUvYmZyaWVzZW4vc3JjL2dyYXBoaWNzL0dyYXBo aWNzTWFnaWNrL21hZ2ljay9kcmF3LmMiLCA1ODk0LCAiY29udGV4dC0+c2lnbmF0dXJlID09IE1h Z2lja1NpZ25hdHVyZSIpLCAwKSkpOwoKICBNdmdQcmludGYoY29udGV4dCwgInZpZXdib3ggJWx1 ICVsdSAlbHUgJWx1XG4iLCB4MSwgeTEsIHgyLCB5Mik7Cn0K